Browse Source

klondike: Explicitly enable slaves as well as the master

Luke Dashjr 12 years ago
parent
commit
e41986e922
1 changed files with 18 additions and 16 deletions
  1. 18 16
      driver-klondike.c

+ 18 - 16
driver-klondike.c

@@ -644,33 +644,35 @@ static bool klondike_get_stats(struct cgpu_info *klncgpu)
 	return true;
 	return true;
 }
 }
 
 
-// TODO: this only enables the master (no slaves)
 static bool kln_enable(struct cgpu_info *klncgpu)
 static bool kln_enable(struct cgpu_info *klncgpu)
 {
 {
+	struct klondike_info * const klninfo = klncgpu->device_data;
 	KLIST *kitem;
 	KLIST *kitem;
 	KLINE kline;
 	KLINE kline;
-	int tries = 2;
-	bool ok = false;
+	const int slaves = klninfo->status[0].kline.ws.slavecount;
 
 
 	zero_kline(&kline);
 	zero_kline(&kline);
 	kline.hd.cmd = KLN_CMD_ENABLE;
 	kline.hd.cmd = KLN_CMD_ENABLE;
-	kline.hd.dev = 0;
 	kline.hd.buf[0] = KLN_CMD_ENABLE_ON;
 	kline.hd.buf[0] = KLN_CMD_ENABLE_ON;
 	
 	
-	while (tries-- > 0) {
-		kitem = SendCmdGetReply(klncgpu, &kline, 1);
-		if (kitem) {
-			kitem = release_kitem(klncgpu, kitem);
-			ok = true;
-			break;
+	for (int dev = 0; dev <= slaves; ++dev)
+	{
+		kline.hd.dev = dev;
+		for (int tries = 3; ; --tries)
+		{
+			kitem = SendCmdGetReply(klncgpu, &kline, 1);
+			cgsleep_ms(50);
+			if (kitem)
+			{
+				kitem = release_kitem(klncgpu, kitem);
+				break;
+			}
+			if (tries == 1)
+				return false;
 		}
 		}
-		cgsleep_ms(50);
 	}
 	}
-
-	if (ok)
-		cgsleep_ms(50);
-
-	return ok;
+	
+	return true;
 }
 }
 
 
 static void kln_disable(struct cgpu_info *klncgpu, int dev, bool all)
 static void kln_disable(struct cgpu_info *klncgpu, int dev, bool all)