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;