Browse Source

klondike: Replace klondike-options with set_device_funcs

Luke Dashjr 12 years ago
parent
commit
3cf1ff3daa
2 changed files with 42 additions and 16 deletions
  1. 23 7
      driver-klondike.c
  2. 19 9
      miner.c

+ 23 - 7
driver-klondike.c

@@ -253,6 +253,7 @@ struct klondike_info {
 	int wque_size;
 	int wque_cleared;
 
+	int clock;
 	bool initialised;
 	
 	struct libusb_device_handle *usbdev_handle;
@@ -747,6 +748,7 @@ static bool klondike_init(struct cgpu_info *klncgpu)
 	int slaves, dev;
 
 	klninfo->initialised = false;
+	cgpu_set_defaults(klncgpu);
 
 	zero_kline(&kline);
 	kline.hd.cmd = KLN_CMD_STATUS;
@@ -785,13 +787,9 @@ static bool klondike_init(struct cgpu_info *klncgpu)
 	int size = 2;
 
 	// boundaries are checked by device, with valid values returned
-	if (opt_klondike_options != NULL) {
-		int hashclock;
-		double temptarget;
-
-		sscanf(opt_klondike_options, "%d:%lf", &hashclock, &temptarget);
-		SET_HASHCLOCK(kline.cfg.hashclock, hashclock);
-		kline.cfg.temptarget = cvtCToKln(temptarget);
+	{
+		SET_HASHCLOCK(kline.cfg.hashclock, klninfo->clock);
+		kline.cfg.temptarget = cvtCToKln(klncgpu->targettemp);
 		kline.cfg.tempcritical = 0; // hard code for old firmware
 		kline.cfg.fantarget = 0xff; // hard code for old firmware
 		size = sizeof(kline.cfg) - 2;
@@ -842,6 +840,21 @@ static void control_init(struct cgpu_info *klncgpu)
 			  klncgpu->drv->name, klncgpu->device_id, err);
 }
 
+static
+const char *klondike_set_clock(struct cgpu_info * const proc, const char * const optname, const char * const newvalue, char * const replybuf, enum bfg_set_device_replytype * const out_success)
+{
+	struct klondike_info * const klninfo = proc->device_data;
+	if (klninfo->initialised)
+		return "Cannot change clock after initialisation";
+	klninfo->clock = atoi(newvalue);
+	return NULL;
+}
+
+static const struct bfg_set_device_definition klondike_set_device_funcs[] = {
+	{"clock", klondike_set_clock, "clock frequency (can only be set at startup, with --set-device)"},
+	{NULL}
+};
+
 static
 bool klondike_lowl_match(const struct lowlevel_device_info * const info)
 {
@@ -875,12 +888,15 @@ bool klondike_lowl_probe(const struct lowlevel_device_info * const info)
 		.drv = &klondike_drv,
 		.deven = DEV_ENABLED,
 		.threads = 1,
+		.targettemp = 50,
 		.cutofftemp = (int)KLN_KILLWORK_TEMP,
+		.set_device_funcs = klondike_set_device_funcs,
 	};
 
 	klninfo = calloc(1, sizeof(*klninfo));
 	if (unlikely(!klninfo))
 		quit(1, "Failed to calloc klninfo in klondke_detect_one");
+	klninfo->clock = 282;
 	klncgpu->device_data = (void *)klninfo;
 
 	klninfo->free = new_klist_set(klncgpu);

+ 19 - 9
miner.c

@@ -219,9 +219,6 @@ bool opt_weighed_stats;
 #ifdef USE_AVALON
 char *opt_avalon_options = NULL;
 #endif
-#ifdef USE_KLONDIKE
-char *opt_klondike_options = NULL;
-#endif
 
 char *opt_kernel_path;
 char *cgminer_path;
@@ -1756,8 +1753,25 @@ static char *set_avalon_options(const char *arg)
 #ifdef USE_KLONDIKE
 static char *set_klondike_options(const char *arg)
 {
-	opt_set_charp(arg, &opt_klondike_options);
-
+	char buf[0x100];
+	int hashclock;
+	double temptarget;
+	switch (sscanf(arg, "%d:%lf", &hashclock, &temptarget))
+	{
+		default:
+			return "Unrecognised --klondike-options";
+		case 2:
+			snprintf(buf, sizeof(buf), "klondike:temp-target=%lf", temptarget);
+			applog(LOG_DEBUG, "%s: Using --set-device %s", __func__, buf);
+			string_elist_add(buf, &opt_set_device_list);
+			// fallthru
+		case 1:
+			snprintf(buf, sizeof(buf), "klondike:clock=%d", hashclock);
+			applog(LOG_DEBUG, "%s: Using --set-device %s", __func__, buf);
+			string_elist_add(buf, &opt_set_device_list);
+	}
+	applog(LOG_WARNING, "klondike-options is deprecated! Use --set-device for better control");
+	
 	return NULL;
 }
 #endif
@@ -6558,10 +6572,6 @@ void write_config(FILE *fcfg)
 		fprintf(fcfg, ",\n\"api-description\" : \"%s\"", json_escape(opt_api_description));
 	if (opt_api_groups)
 		fprintf(fcfg, ",\n\"api-groups\" : \"%s\"", json_escape(opt_api_groups));
-#ifdef USE_KLONDIKE
-	if (opt_klondike_options)
-		fprintf(fcfg, ",\n\"klondike-options\" : \"%s\"", json_escape(opt_klondike_options));
-#endif
 	fputs("\n}\n", fcfg);
 
 	json_escape_free();