From c69a130dc1ab0bab81d2ef2c95611b09e411a826 Mon Sep 17 00:00:00 2001 From: Roy Badami Date: Sat, 19 Oct 2013 18:42:20 +0100 Subject: [PATCH] Improvements to support for BitBurner boards --bitburner-fury-options allows avalon-options to be overridden for BitBurner Fury Boards, facilitating simultanous use of BitBurner XX and BitBurner Fury boards More sensible defaults for BitBurner boards, so cgminer should do something sensible without any command line args --- ASIC-README | 8 ++++++-- README | 4 +++- cgminer.c | 11 +++++++++++ driver-avalon.c | 29 ++++++++++++++++++++++------- driver-avalon.h | 6 ++++++ miner.h | 1 + 6 files changed, 49 insertions(+), 10 deletions(-) diff --git a/ASIC-README b/ASIC-README index 55b76d83..9ac56c7e 100644 --- a/ASIC-README +++ b/ASIC-README @@ -102,7 +102,9 @@ ASIC SPECIFIC COMMANDS --avalon-options Set avalon options baud:miners:asic:timeout:freq --avalon-temp Set avalon target temperature (default: 50) --bflsc-overheat Set overheat temperature where BFLSC devices throttle, 0 to disable (default: 90) ---bitburner-voltage Set BitBurner core voltage, in millivolts +--bitburner-fury-options Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq +--bitburner-fury-voltage Set BitBurner Fury core voltage, in millivolts +--bitburner-voltage Set BitBurner (Avalon) core voltage, in millivolts --klondike-options Set klondike options clock:temp1:temp2:fan @@ -126,7 +128,9 @@ Avalon commands: --avalon-freq Set frequency range for avalon-auto, single value or range --avalon-options Set avalon options baud:miners:asic:timeout:freq --avalon-temp Set avalon target temperature (default: 50) ---bitburner-voltage Set BitBurner core voltage, in millivolts +--bitburner-fury-options Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq +--bitburner-fury-voltage Set BitBurner Fury core voltage, in millivolts +--bitburner-voltage Set BitBurner (Avalon) core voltage, in millivolts Avalon auto will enable dynamic overclocking gradually increasing and diff --git a/README b/README index 5c739912..832d424e 100644 --- a/README +++ b/README @@ -220,7 +220,9 @@ ASIC only options: --avalon-options Set avalon options baud:miners:asic:timeout:freq --avalon-temp Set avalon target temperature (default: 50) --bflsc-overheat Set overheat temperature where BFLSC devices throttle, 0 to disable (default: 90) ---bitburner-voltage Set BitBurner core voltage, in millivolts +--bitburner-fury-options Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq +--bitburner-fury-voltage Set BitBurner Fury core voltage, in millivolts +--bitburner-voltage Set BitBurner (Avalon) core voltage, in millivolts See ASIC-README for more information regarding these. diff --git a/cgminer.c b/cgminer.c index 336377ca..1a6a07db 100644 --- a/cgminer.c +++ b/cgminer.c @@ -166,6 +166,7 @@ char *opt_icarus_timing = NULL; bool opt_worktime; #ifdef USE_AVALON char *opt_avalon_options = NULL; +char *opt_bitburner_fury_options = NULL; #endif #ifdef USE_KLONDIKE char *opt_klondike_options = NULL; @@ -1035,6 +1036,13 @@ static char *set_avalon_options(const char *arg) return NULL; } + +static char *set_bitburner_fury_options(const char *arg) +{ + opt_set_charp(arg, &opt_bitburner_fury_options); + + return NULL; +} #endif #ifdef USE_KLONDIKE @@ -1254,6 +1262,9 @@ static struct opt_table opt_config_table[] = { OPT_WITH_ARG("--bitburner-fury-voltage", opt_set_intval, NULL, &opt_bitburner_fury_core_voltage, "Set BitBurner Fury core voltage, in millivolts"), + OPT_WITH_ARG("--bitburner-fury-options", + set_bitburner_fury_options, NULL, NULL, + "Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq"), #endif #ifdef USE_KLONDIKE OPT_WITH_ARG("--klondike-options", diff --git a/driver-avalon.c b/driver-avalon.c index 09e6dfa2..dd73316c 100644 --- a/driver-avalon.c +++ b/driver-avalon.c @@ -53,6 +53,7 @@ int opt_bitburner_fury_core_voltage = BITBURNER_FURY_DEFAULT_CORE_VOLTAGE; bool opt_avalon_auto; static int option_offset = -1; +static int bbf_option_offset = -1; static int avalon_init_task(struct avalon_task *at, uint8_t reset, uint8_t ff, uint8_t fan, @@ -400,7 +401,7 @@ static int avalon_calc_timeout(int frequency) } static bool get_options(int this_option_offset, int *baud, int *miner_count, - int *asic_count, int *timeout, int *frequency) + int *asic_count, int *timeout, int *frequency, char *options) { char buf[BUFSIZ+1]; char *ptr, *comma, *colon, *colon2, *colon3, *colon4; @@ -408,10 +409,10 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count, size_t max; int i, tmp; - if (opt_avalon_options == NULL) + if (options == NULL) buf[0] = '\0'; else { - ptr = opt_avalon_options; + ptr = options; for (i = 0; i < this_option_offset; i++) { comma = strchr(ptr, ','); if (comma == NULL) @@ -754,7 +755,7 @@ static void bitburner_get_version(struct cgpu_info *avalon) static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found) { int baud, miner_count, asic_count, timeout, frequency; - int this_option_offset = ++option_offset; + int this_option_offset; struct avalon_info *info; struct cgpu_info *avalon; bool configured; @@ -768,12 +769,14 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found timeout = AVALON_DEFAULT_TIMEOUT; frequency = AVALON_DEFAULT_FREQUENCY; - configured = get_options(this_option_offset, &baud, &miner_count, - &asic_count, &timeout, &frequency); - if (!usb_init(avalon, dev, found)) goto shin; + this_option_offset = usb_ident(avalon) == IDENT_BBF ? ++bbf_option_offset : ++option_offset; + configured = get_options(this_option_offset, &baud, &miner_count, + &asic_count, &timeout, &frequency, + (usb_ident(avalon) == IDENT_BBF && opt_bitburner_fury_options != NULL) ? opt_bitburner_fury_options : opt_avalon_options); + /* Even though this is an FTDI type chip, we want to do the parsing * all ourselves so set it to std usb type */ avalon->usbdev->usb_type = USB_TYPE_STD; @@ -794,6 +797,18 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found info->asic_count = asic_count; info->timeout = timeout; info->frequency = frequency; + } else if (usb_ident(avalon) == IDENT_BTB) { + info->baud = AVALON_IO_SPEED; + info->miner_count = BITBURNER_XX_DEFAULT_MINER_NUM; + info->asic_count = BITBURNER_DEFAULT_ASIC_NUM; + info->timeout = AVALON_DEFAULT_TIMEOUT; + info->frequency = AVALON_DEFAULT_FREQUENCY; + } else if (usb_ident(avalon) == IDENT_BBF) { + info->baud = AVALON_IO_SPEED; + info->miner_count = BITBURNER_FURY_DEFAULT_MINER_NUM; + info->asic_count = BITBURNER_DEFAULT_ASIC_NUM; + info->timeout = BITBURNER_FURY_DEFAULT_TIMEOUT; + info->frequency = BITBURNER_FURY_DEFAULT_FREQUENCY; } else { info->baud = AVALON_IO_SPEED; info->miner_count = AVALON_DEFAULT_MINER_NUM; diff --git a/driver-avalon.h b/driver-avalon.h index e506388e..34ea1334 100644 --- a/driver-avalon.h +++ b/driver-avalon.h @@ -55,6 +55,12 @@ #define AVALON_MAX_MINER_NUM 0x100 #define AVALON_DEFAULT_ASIC_NUM 0xA +#define BITBURNER_XX_DEFAULT_MINER_NUM 16 +#define BITBURNER_FURY_DEFAULT_MINER_NUM 128 +#define BITBURNER_DEFAULT_ASIC_NUM 10 +#define BITBURNER_FURY_DEFAULT_FREQUENCY 256 +#define BITBURNER_FURY_DEFAULT_TIMEOUT 50 + #define AVALON_AUTO_CYCLE 1024 #define AVALON_FTDI_READSIZE 510 diff --git a/miner.h b/miner.h index 915d7f87..2d5f74ed 100644 --- a/miner.h +++ b/miner.h @@ -999,6 +999,7 @@ extern char *opt_icarus_timing; extern bool opt_worktime; #ifdef USE_AVALON extern char *opt_avalon_options; +extern char *opt_bitburner_fury_options; #endif #ifdef USE_KLONDIKE extern char *opt_klondike_options;