|
|
@ -1217,7 +1217,11 @@ static void release_cgpu(struct cgpu_info *cgpu) |
|
|
|
cgminer_usb_unlock_bd(cgpu->drv, cgpu->usbinfo.bus_number, cgpu->usbinfo.device_address); |
|
|
|
cgminer_usb_unlock_bd(cgpu->drv, cgpu->usbinfo.bus_number, cgpu->usbinfo.device_address); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found) |
|
|
|
#define USB_INIT_FAIL 0 |
|
|
|
|
|
|
|
#define USB_INIT_OK 1 |
|
|
|
|
|
|
|
#define USB_INIT_IGNORE 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct cg_usb_device *cgusb = NULL; |
|
|
|
struct cg_usb_device *cgusb = NULL; |
|
|
|
struct libusb_config_descriptor *config = NULL; |
|
|
|
struct libusb_config_descriptor *config = NULL; |
|
|
@ -1226,6 +1230,7 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find |
|
|
|
unsigned char strbuf[STRBUFLEN+1]; |
|
|
|
unsigned char strbuf[STRBUFLEN+1]; |
|
|
|
char devstr[STRBUFLEN+1]; |
|
|
|
char devstr[STRBUFLEN+1]; |
|
|
|
int err, i, j, k; |
|
|
|
int err, i, j, k; |
|
|
|
|
|
|
|
int bad = USB_INIT_FAIL; |
|
|
|
|
|
|
|
|
|
|
|
cgpu->usbinfo.bus_number = libusb_get_bus_number(dev); |
|
|
|
cgpu->usbinfo.bus_number = libusb_get_bus_number(dev); |
|
|
|
cgpu->usbinfo.device_address = libusb_get_device_address(dev); |
|
|
|
cgpu->usbinfo.device_address = libusb_get_device_address(dev); |
|
|
@ -1301,8 +1306,10 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find |
|
|
|
err, devstr); |
|
|
|
err, devstr); |
|
|
|
goto cldame; |
|
|
|
goto cldame; |
|
|
|
} |
|
|
|
} |
|
|
|
if (strcmp((char *)man, found->iManufacturer)) |
|
|
|
if (strcmp((char *)man, found->iManufacturer)) { |
|
|
|
|
|
|
|
bad = USB_INIT_IGNORE; |
|
|
|
goto cldame; |
|
|
|
goto cldame; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (found->iProduct) { |
|
|
|
if (found->iProduct) { |
|
|
@ -1317,8 +1324,10 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find |
|
|
|
err, devstr); |
|
|
|
err, devstr); |
|
|
|
goto cldame; |
|
|
|
goto cldame; |
|
|
|
} |
|
|
|
} |
|
|
|
if (strcmp((char *)prod, found->iProduct)) |
|
|
|
if (strcmp((char *)prod, found->iProduct)) { |
|
|
|
|
|
|
|
bad = USB_INIT_IGNORE; |
|
|
|
goto cldame; |
|
|
|
goto cldame; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
err = libusb_set_configuration(cgusb->handle, found->config); |
|
|
|
err = libusb_set_configuration(cgusb->handle, found->config); |
|
|
@ -1435,7 +1444,7 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find |
|
|
|
cgpu->drv->name = (char *)(found->name); |
|
|
|
cgpu->drv->name = (char *)(found->name); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return USB_INIT_OK; |
|
|
|
|
|
|
|
|
|
|
|
cldame: |
|
|
|
cldame: |
|
|
|
|
|
|
|
|
|
|
@ -1448,7 +1457,22 @@ dame: |
|
|
|
|
|
|
|
|
|
|
|
cgusb = free_cgusb(cgusb); |
|
|
|
cgusb = free_cgusb(cgusb); |
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
return bad; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ret = _usb_init(cgpu, dev, found); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ret == USB_INIT_FAIL) |
|
|
|
|
|
|
|
applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)", |
|
|
|
|
|
|
|
cgpu->drv->dname, |
|
|
|
|
|
|
|
(int)(cgpu->usbinfo.bus_number), |
|
|
|
|
|
|
|
(int)(cgpu->usbinfo.device_address)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return (ret == USB_INIT_OK); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static bool usb_check_device(struct device_drv *drv, struct libusb_device *dev, struct usb_find_devices *look) |
|
|
|
static bool usb_check_device(struct device_drv *drv, struct libusb_device *dev, struct usb_find_devices *look) |
|
|
|