Abstract out the bitfury open close and reset functions and use them on reinit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
diff --git a/driver-bitfury.c b/driver-bitfury.c
index cee285f..34bbfc2 100644
--- a/driver-bitfury.c
+++ b/driver-bitfury.c
@@ -17,6 +17,16 @@
#define BF1WAIT 1600
struct device_drv bitfury_drv;
+static void bitfury_empty_buffer(struct cgpu_info *bitfury)
+{
+ char buf[512];
+ int amount;
+
+ do {
+ usb_read(bitfury, buf, 512, &amount, C_PING);
+ } while (amount);
+}
+
static void bitfury_open(struct cgpu_info *bitfury)
{
/* Magic open sequence */
@@ -25,33 +35,63 @@ static void bitfury_open(struct cgpu_info *bitfury)
static void bitfury_close(struct cgpu_info *bitfury)
{
+ bitfury_empty_buffer(bitfury);
/* Magic close sequence */
usb_transfer(bitfury, 0x21, 0x22, 0, 0, C_BF1_CLOSE);
}
-static void bitfury_empty_buffer(struct cgpu_info *bitfury)
+static void bitfury_identify(struct cgpu_info *bitfury)
+{
+ int amount;
+
+ usb_write(bitfury, "L", 1, &amount, C_PING);
+}
+
+static bool bitfury_getinfo(struct cgpu_info *bitfury, struct bitfury_info *info)
{
char buf[512];
int amount;
- do {
- usb_read(bitfury, buf, 512, &amount, C_PING);
- } while (amount);
+ usb_write(bitfury, "I", 1, &amount, C_BF1_REQINFO);
+ usb_read(bitfury, buf, 14, &amount, C_BF1_GETINFO);
+ if (amount != 14) {
+ applog(LOG_INFO, "%s%d: Getinfo received %d bytes",
+ bitfury->drv->name, bitfury->device_id, amount);
+ return false;
+ }
+ info->version = buf[1];
+ memcpy(&info->product, buf + 2, 8);
+ memcpy(&info->serial, buf + 10, 4);
+
+ applog(LOG_INFO, "%s%d: Getinfo returned version %d, product %s serial %08x", bitfury->drv->name,
+ bitfury->device_id, info->version, info->product, info->serial);
+ bitfury_empty_buffer(bitfury);
+ return true;
}
-static void bitfury_identify(struct cgpu_info *bitfury)
+static bool bitfury_reset(struct cgpu_info *bitfury)
{
+ char buf[512];
int amount;
- usb_write(bitfury, "L", 1, &amount, C_PING);
+ usb_write(bitfury, "R", 1, &amount, C_BF1_REQRESET);
+ usb_read_timeout(bitfury, buf, 7, &amount, BF1WAIT, C_BF1_GETRESET);
+
+ if (amount != 7) {
+ applog(LOG_INFO, "%s%d: Getreset received %d bytes",
+ bitfury->drv->name, bitfury->device_id, amount);
+ return false;
+ }
+ applog(LOG_INFO, "%s%d: Getreset returned %s", bitfury->drv->name,
+ bitfury->device_id, buf);
+ bitfury_empty_buffer(bitfury);
+ return true;
}
static bool bitfury_detect_one(struct libusb_device *dev, struct usb_find_devices *found)
{
struct cgpu_info *bitfury;
struct bitfury_info *info;
- char buf[512];
- int amount;
bitfury = usb_alloc_cgpu(&bitfury_drv, 1);
@@ -73,39 +113,19 @@ static bool bitfury_detect_one(struct libusb_device *dev, struct usb_find_device
bitfury_open(bitfury);
/* Send getinfo request */
- usb_write(bitfury, "I", 1, &amount, C_BF1_REQINFO);
- usb_read(bitfury, buf, 14, &amount, C_BF1_GETINFO);
- if (amount != 14) {
- applog(LOG_WARNING, "%s%d: Getinfo received %d bytes",
- bitfury->drv->name, bitfury->device_id, amount);
+ if (!bitfury_getinfo(bitfury, info))
goto out_close;
- }
- info->version = buf[1];
- memcpy(&info->product, buf + 2, 8);
- memcpy(&info->serial, buf + 10, 4);
-
- applog(LOG_INFO, "%s%d: Getinfo returned version %d, product %s serial %08x", bitfury->drv->name,
- bitfury->device_id, info->version, info->product, info->serial);
- bitfury_empty_buffer(bitfury);
/* Send reset request */
- usb_write(bitfury, "R", 1, &amount, C_BF1_REQRESET);
- usb_read_timeout(bitfury, buf, 7, &amount, BF1WAIT, C_BF1_GETRESET);
-
- if (amount != 7) {
- applog(LOG_WARNING, "%s%d: Getreset received %d bytes",
- bitfury->drv->name, bitfury->device_id, amount);
+ if (!bitfury_reset(bitfury))
goto out_close;
- }
- applog(LOG_INFO, "%s%d: Getreset returned %s", bitfury->drv->name,
- bitfury->device_id, buf);
- bitfury_empty_buffer(bitfury);
bitfury_identify(bitfury);
bitfury_empty_buffer(bitfury);
if (!add_cgpu(bitfury))
goto out_close;
+
update_usb_stats(bitfury);
applog(LOG_INFO, "%s%d: Found at %s",
bitfury->drv->name, bitfury->device_id, bitfury->device_path);
@@ -241,11 +261,14 @@ static struct api_data *bitfury_api_stats(struct cgpu_info __maybe_unused *cgpu)
return NULL;
}
-static void bitfury_init(struct cgpu_info __maybe_unused *bitfury)
+static void bitfury_init(struct cgpu_info *bitfury)
{
+ bitfury_close(bitfury);
+ bitfury_open(bitfury);
+ bitfury_reset(bitfury);
}
-static void bitfury_shutdown(struct thr_info __maybe_unused *thr)
+static void bitfury_shutdown(struct thr_info *thr)
{
struct cgpu_info *bitfury = thr->cgpu;