|
|
@ -2197,30 +2197,6 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro |
|
|
|
return err; |
|
|
|
return err; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#define FTDI_STATUS_B0_MASK (FTDI_RS0_CTS | FTDI_RS0_DSR | FTDI_RS0_RI | FTDI_RS0_RLSD) |
|
|
|
|
|
|
|
#define FTDI_RS0_CTS (1 << 4) |
|
|
|
|
|
|
|
#define FTDI_RS0_DSR (1 << 5) |
|
|
|
|
|
|
|
#define FTDI_RS0_RI (1 << 6) |
|
|
|
|
|
|
|
#define FTDI_RS0_RLSD (1 << 7) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Clear to send for FTDI */ |
|
|
|
|
|
|
|
int usb_ftdi_cts(struct cgpu_info *cgpu) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
struct cg_usb_device *usbdev = cgpu->usbdev; |
|
|
|
|
|
|
|
unsigned char buf[2], ret; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* We return true in case drivers are waiting indefinitely to try and
|
|
|
|
|
|
|
|
* write to something that's not there. */ |
|
|
|
|
|
|
|
if (cgpu->usbinfo.nodev) |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
libusb_control_transfer(usbdev->handle, (uint8_t)FTDI_TYPE_IN, |
|
|
|
|
|
|
|
(uint8_t)5, (uint16_t)0, (uint16_t)0, buf, 2, |
|
|
|
|
|
|
|
DEVTIMEOUT); |
|
|
|
|
|
|
|
ret = buf[0] & FTDI_STATUS_B0_MASK; |
|
|
|
|
|
|
|
return (ret & FTDI_RS0_CTS); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int _usb_write(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *processed, unsigned int timeout, __maybe_unused enum usb_cmds cmd) |
|
|
|
int _usb_write(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *processed, unsigned int timeout, __maybe_unused enum usb_cmds cmd) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct cg_usb_device *usbdev = cgpu->usbdev; |
|
|
|
struct cg_usb_device *usbdev = cgpu->usbdev; |
|
|
@ -2383,6 +2359,30 @@ int _usb_transfer_read(struct cgpu_info *cgpu, uint8_t request_type, uint8_t bRe |
|
|
|
return err; |
|
|
|
return err; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define FTDI_STATUS_B0_MASK (FTDI_RS0_CTS | FTDI_RS0_DSR | FTDI_RS0_RI | FTDI_RS0_RLSD) |
|
|
|
|
|
|
|
#define FTDI_RS0_CTS (1 << 4) |
|
|
|
|
|
|
|
#define FTDI_RS0_DSR (1 << 5) |
|
|
|
|
|
|
|
#define FTDI_RS0_RI (1 << 6) |
|
|
|
|
|
|
|
#define FTDI_RS0_RLSD (1 << 7) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Clear to send for FTDI */ |
|
|
|
|
|
|
|
int usb_ftdi_cts(struct cgpu_info *cgpu) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
char buf[2], ret; |
|
|
|
|
|
|
|
int err, amount; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = _usb_transfer_read(cgpu, (uint8_t)FTDI_TYPE_IN, (uint8_t)5, |
|
|
|
|
|
|
|
(uint16_t)0, (uint16_t)0, buf, 2, |
|
|
|
|
|
|
|
&amount, DEVTIMEOUT, C_FTDI_STATUS); |
|
|
|
|
|
|
|
/* We return true in case drivers are waiting indefinitely to try and
|
|
|
|
|
|
|
|
* write to something that's not there. */ |
|
|
|
|
|
|
|
if (err) |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ret = buf[0] & FTDI_STATUS_B0_MASK; |
|
|
|
|
|
|
|
return (ret & FTDI_RS0_CTS); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void usb_cleanup() |
|
|
|
void usb_cleanup() |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct cgpu_info *cgpu; |
|
|
|
struct cgpu_info *cgpu; |
|
|
|