diff --git a/ASIC-README b/ASIC-README index 433b9c26..e4850323 100644 --- a/ASIC-README +++ b/ASIC-README @@ -169,6 +169,7 @@ to replace it. It should be changed according to the frequency (last setting). It is possible to set this a little lower if you are trying to tune for short block mining (eg p2pool) but much lower and the device will start creating duplicate shares. +A value of 'd' means cgminer will calculate it for you based on the frequency Sample settings for valid different frequencies (last 2 values): 34:375 * diff --git a/driver-avalon.c b/driver-avalon.c index 29e65beb..3af53615 100644 --- a/driver-avalon.c +++ b/driver-avalon.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #ifndef WIN32 @@ -332,11 +333,17 @@ static int avalon_reset(struct cgpu_info *avalon, bool initial) return 0; } +static int avalon_calc_timeout(int frequency) +{ + return AVALON_TIMEOUT_FACTOR / frequency; +} + static bool get_options(int this_option_offset, int *baud, int *miner_count, int *asic_count, int *timeout, int *frequency) { char buf[BUFSIZ+1]; char *ptr, *comma, *colon, *colon2, *colon3, *colon4; + bool timeout_default; size_t max; int i, tmp; @@ -419,18 +426,23 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count, colon2, AVALON_DEFAULT_ASIC_NUM); } + timeout_default = false; if (colon3 && *colon3) { colon4 = strchr(colon3, ':'); if (colon4) *(colon4++) = '\0'; - tmp = atoi(colon3); - if (tmp > 0 && tmp <= 0xff) - *timeout = tmp; + if (tolower(*colon3) == 'd') + timeout_default = true; else { - quit(1, "Invalid avalon-options for " - "timeout (%s) must be 1 ~ %d", - colon3, 0xff); + tmp = atoi(colon3); + if (tmp > 0 && tmp <= 0xff) + *timeout = tmp; + else { + quit(1, "Invalid avalon-options for " + "timeout (%s) must be 1 ~ %d", + colon3, 0xff); + } } if (colon4 && *colon4) { tmp = atoi(colon4); @@ -439,6 +451,8 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count, AVALON_MIN_FREQUENCY, AVALON_MAX_FREQUENCY); } *frequency = tmp; + if (timeout_default) + *timeout = avalon_calc_timeout(*frequency); } } } @@ -645,8 +659,7 @@ static int bitburner_get_core_voltage(struct cgpu_info *avalon) static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found) { - int baud, uninitialised_var(miner_count), uninitialised_var(asic_count), - uninitialised_var(timeout), frequency = 0; + int baud, miner_count, asic_count, timeout, frequency; int this_option_offset = ++option_offset; struct avalon_info *info; struct cgpu_info *avalon; @@ -655,6 +668,12 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found avalon = usb_alloc_cgpu(&avalon_drv, AVALON_MINER_THREADS); + baud = AVALON_IO_SPEED; + miner_count = AVALON_DEFAULT_MINER_NUM; + asic_count = AVALON_DEFAULT_ASIC_NUM; + timeout = AVALON_DEFAULT_TIMEOUT; + frequency = AVALON_DEFAULT_FREQUENCY; + configured = get_options(this_option_offset, &baud, &miner_count, &asic_count, &timeout, &frequency); @@ -910,7 +929,7 @@ static void avalon_rotate_array(struct cgpu_info *avalon) static void avalon_set_timeout(struct avalon_info *info) { - info->timeout = AVALON_TIMEOUT_FACTOR / info->frequency; + info->timeout = avalon_calc_timeout(info->frequency); } static void avalon_set_freq(struct cgpu_info *avalon, int frequency) diff --git a/driver-avalon.h b/driver-avalon.h index 93f092d9..562483b1 100644 --- a/driver-avalon.h +++ b/driver-avalon.h @@ -36,7 +36,7 @@ #define BITBURNER_DEFAULT_CORE_VOLTAGE 1200 /* in millivolts */ #define BITBURNER_MIN_COREMV 1000 /* change here if you want to risk killing it :) */ -#define BITBURNER_MAX_COREMV 1310 +#define BITBURNER_MAX_COREMV 1400 #define AVALON_DEFAULT_TIMEOUT 0x2D