This is an automated email from Gerrit.

Oleksij Rempel ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/4590

-- gerrit

commit f67e5e835336f818c369c387a3d57180dc034218
Author: Oleksij Rempel <[email protected]>
Date:   Thu Jul 5 13:42:14 2018 +0200

    jtag_libusb_bulk_read|write: return error code instead of size
    
    Change-Id: Iec0798438ca7b5c76e2e2912af21d9aa76ee0217
    Signed-off-by: Oleksij Rempel <[email protected]>

diff --git a/src/jtag/aice/aice_usb.c b/src/jtag/aice/aice_usb.c
index 69660a6..d8097c8 100644
--- a/src/jtag/aice/aice_usb.c
+++ b/src/jtag/aice/aice_usb.c
@@ -349,14 +349,16 @@ static void aice_unpack_dthmb(uint8_t *cmd_ack_code, 
uint8_t *target_id,
 /* calls the given usb_bulk_* function, allowing for the data to
  * trickle in with some timeouts  */
 static int usb_bulk_with_retries(
-                       int (*f)(jtag_libusb_device_handle *, int, char *, int, 
int),
+                       int (*f)(jtag_libusb_device_handle *, int, char *, int, 
int, int *),
                        jtag_libusb_device_handle *dev, int ep,
-                       char *bytes, int size, int timeout)
+                       char *bytes, int size, int timeout, int *transferred)
 {
        int tries = 3, count = 0;
 
        while (tries && (count < size)) {
-               int result = f(dev, ep, bytes + count, size - count, timeout);
+               int result;
+
+               f(dev, ep, bytes + count, size - count, timeout, &result);
                if (result > 0)
                        count += result;
                else if ((-ETIMEDOUT != result) || !--tries)
@@ -366,24 +368,32 @@ static int usb_bulk_with_retries(
 }
 
 static int wrap_usb_bulk_write(jtag_libusb_device_handle *dev, int ep,
-               char *buff, int size, int timeout)
+               char *buff, int size, int timeout, int *transferred)
 {
+
        /* usb_bulk_write() takes const char *buff */
-       return jtag_libusb_bulk_write(dev, ep, buff, size, timeout);
+       jtag_libusb_bulk_write(dev, ep, buff, size, timeout, transferred);
+
+       return 0;
 }
 
 static inline int usb_bulk_write_ex(jtag_libusb_device_handle *dev, int ep,
                char *bytes, int size, int timeout)
 {
-       return usb_bulk_with_retries(&wrap_usb_bulk_write,
-                       dev, ep, bytes, size, timeout);
+       int tr = 0;
+
+       usb_bulk_with_retries(&wrap_usb_bulk_write,
+                       dev, ep, bytes, size, timeout, &tr);
+       return tr;
 }
 
 static inline int usb_bulk_read_ex(jtag_libusb_device_handle *dev, int ep,
                char *bytes, int size, int timeout)
 {
-       return usb_bulk_with_retries(&jtag_libusb_bulk_read,
-                       dev, ep, bytes, size, timeout);
+       int tr = 0;
+       usb_bulk_with_retries(&jtag_libusb_bulk_read,
+                       dev, ep, bytes, size, timeout, &tr);
+       return tr;
 }
 
 /* Write data from out_buffer to USB. */
diff --git a/src/jtag/drivers/ft232r.c b/src/jtag/drivers/ft232r.c
index 36329df..663b92c 100644
--- a/src/jtag/drivers/ft232r.c
+++ b/src/jtag/drivers/ft232r.c
@@ -120,9 +120,10 @@ static int ft232r_send_recv(void)
                        bytes_to_write = rxfifo_free;
 
                if (bytes_to_write) {
-                       int n = jtag_libusb_bulk_write(adapter, IN_EP,
+                       int n;
+                               jtag_libusb_bulk_write(adapter, IN_EP,
                                (char *) ft232r_output + total_written,
-                               bytes_to_write, 1000);
+                               bytes_to_write, 1000, &n);
 
                        if (n == 0) {
                                LOG_ERROR("usb bulk write failed");
@@ -135,10 +136,11 @@ static int ft232r_send_recv(void)
 
                /* Read */
                uint8_t reply[64];
+               int n;
 
-               int n = jtag_libusb_bulk_read(adapter, OUT_EP,
+               jtag_libusb_bulk_read(adapter, OUT_EP,
                        (char *) reply,
-                       sizeof(reply), 1000);
+                       sizeof(reply), 1000, &n);
 
                if (n == 0) {
                        LOG_ERROR("usb bulk read failed");
diff --git a/src/jtag/drivers/kitprog.c b/src/jtag/drivers/kitprog.c
index d9583bc..41d7abd 100644
--- a/src/jtag/drivers/kitprog.c
+++ b/src/jtag/drivers/kitprog.c
@@ -731,8 +731,8 @@ static int kitprog_swd_run_queue(void)
                        }
                }
 
-               ret = jtag_libusb_bulk_write(kitprog_handle->usb_handle,
-                               BULK_EP_OUT, (char *)buffer, write_count, 0);
+               jtag_libusb_bulk_write(kitprog_handle->usb_handle,
+                               BULK_EP_OUT, (char *)buffer, write_count, 0, 
&ret);
                if (ret > 0) {
                        queued_retval = ERROR_OK;
                } else {
@@ -754,9 +754,9 @@ static int kitprog_swd_run_queue(void)
                if (read_count % 64 == 0)
                        read_count_workaround = read_count;
 
-               ret = jtag_libusb_bulk_read(kitprog_handle->usb_handle,
+               jtag_libusb_bulk_read(kitprog_handle->usb_handle,
                                BULK_EP_IN | LIBUSB_ENDPOINT_IN, (char *)buffer,
-                               read_count_workaround, 1000);
+                               read_count_workaround, 1000, &ret);
                if (ret > 0) {
                        /* Handle garbage data by offsetting the initial read 
index */
                        if ((unsigned int)ret > read_count)
diff --git a/src/jtag/drivers/libusb0_common.c 
b/src/jtag/drivers/libusb0_common.c
index d487cc1..38e8cd5 100644
--- a/src/jtag/drivers/libusb0_common.c
+++ b/src/jtag/drivers/libusb0_common.c
@@ -123,15 +123,17 @@ int 
jtag_libusb_control_transfer(jtag_libusb_device_handle *dev, uint8_t request
 }
 
 int jtag_libusb_bulk_write(jtag_libusb_device_handle *dev, int ep, char *bytes,
-               int size, int timeout)
+               int size, int timeout, int *transferred)
 {
-       return usb_bulk_write(dev, ep, bytes, size, timeout);
+        *transferred = usb_bulk_write(dev, ep, bytes, size, timeout);
+        return ERROR_OK;
 }
 
 int jtag_libusb_bulk_read(jtag_libusb_device_handle *dev, int ep, char *bytes,
-               int size, int timeout)
+               int size, int timeout, int *transferred)
 {
-       return usb_bulk_read(dev, ep, bytes, size, timeout);
+       *transferred = usb_bulk_read(dev, ep, bytes, size, timeout);
+       return ERROR_OK;
 }
 
 int jtag_libusb_set_configuration(jtag_libusb_device_handle *devh,
diff --git a/src/jtag/drivers/libusb0_common.h 
b/src/jtag/drivers/libusb0_common.h
index 014ecd8..ac4e07d 100644
--- a/src/jtag/drivers/libusb0_common.h
+++ b/src/jtag/drivers/libusb0_common.h
@@ -59,9 +59,9 @@ int jtag_libusb_control_transfer(jtag_libusb_device_handle 
*dev,
                uint8_t requestType, uint8_t request, uint16_t wValue,
                uint16_t wIndex, char *bytes,   uint16_t size, unsigned int 
timeout);
 int jtag_libusb_bulk_write(struct jtag_libusb_device_handle *dev, int ep,
-               char *bytes, int size, int timeout);
+               char *bytes, int size, int timeout, int *transferred);
 int jtag_libusb_bulk_read(struct jtag_libusb_device_handle *dev, int ep,
-               char *bytes, int size, int timeout);
+               char *bytes, int size, int timeout, int *transferred);
 int jtag_libusb_set_configuration(jtag_libusb_device_handle *devh,
                int configuration);
 int jtag_libusb_choose_interface(struct jtag_libusb_device_handle *devh,
diff --git a/src/jtag/drivers/libusb1_common.c 
b/src/jtag/drivers/libusb1_common.c
index 52b8eb8..62f181e 100644
--- a/src/jtag/drivers/libusb1_common.c
+++ b/src/jtag/drivers/libusb1_common.c
@@ -201,23 +201,39 @@ int 
jtag_libusb_control_transfer(jtag_libusb_device_handle *dev, uint8_t request
 }
 
 int jtag_libusb_bulk_write(jtag_libusb_device_handle *dev, int ep, char *bytes,
-               int size, int timeout)
+               int size, int timeout, int *transferred)
 {
-       int transferred = 0;
+       int ret;
 
-       libusb_bulk_transfer(dev, ep, (unsigned char *)bytes, size,
-                            &transferred, timeout);
-       return transferred;
+       *transferred = 0;
+
+       ret = libusb_bulk_transfer(dev, ep, (unsigned char *)bytes, size,
+                            transferred, timeout);
+
+       if (ret) {
+               LOG_ERROR("jtag_libusb_bulk_write: error");
+               return ERROR_FAIL;
+       }
+
+       return ERROR_OK;
 }
 
 int jtag_libusb_bulk_read(jtag_libusb_device_handle *dev, int ep, char *bytes,
-               int size, int timeout)
+               int size, int timeout, int *transferred)
 {
-       int transferred = 0;
+       int ret;
 
-       libusb_bulk_transfer(dev, ep, (unsigned char *)bytes, size,
-                            &transferred, timeout);
-       return transferred;
+       *transferred = 0;
+
+       ret = libusb_bulk_transfer(dev, ep, (unsigned char *)bytes, size,
+                            transferred, timeout);
+
+       if (ret) {
+               LOG_ERROR("jtag_libusb_bulk_read: error");
+               return ERROR_FAIL;
+       }
+
+       return ERROR_OK;
 }
 
 int jtag_libusb_set_configuration(jtag_libusb_device_handle *devh,
diff --git a/src/jtag/drivers/libusb1_common.h 
b/src/jtag/drivers/libusb1_common.h
index cbb6756..b15f38f 100644
--- a/src/jtag/drivers/libusb1_common.h
+++ b/src/jtag/drivers/libusb1_common.h
@@ -53,9 +53,9 @@ int jtag_libusb_control_transfer(jtag_libusb_device_handle 
*dev,
                uint8_t requestType, uint8_t request, uint16_t wValue,
                uint16_t wIndex, char *bytes,   uint16_t size, unsigned int 
timeout);
 int jtag_libusb_bulk_write(struct jtag_libusb_device_handle *dev, int ep,
-               char *bytes,    int size, int timeout);
+               char *bytes, int size, int timeout, int *transferred);
 int jtag_libusb_bulk_read(struct jtag_libusb_device_handle *dev, int ep,
-               char *bytes, int size, int timeout);
+               char *bytes, int size, int timeout, int *transferred);
 int jtag_libusb_set_configuration(jtag_libusb_device_handle *devh,
                int configuration);
 /**
diff --git a/src/jtag/drivers/opendous.c b/src/jtag/drivers/opendous.c
index 7a19e69..6af0b9b 100644
--- a/src/jtag/drivers/opendous.c
+++ b/src/jtag/drivers/opendous.c
@@ -762,8 +762,8 @@ int opendous_usb_write(struct opendous_jtag *opendous_jtag, 
int out_length)
                        LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | 
LIBUSB_ENDPOINT_OUT,
                        FUNC_WRITE_DATA, 0, 0, (char *) usb_out_buffer, 
out_length, OPENDOUS_USB_TIMEOUT);
        } else {
-               result = jtag_libusb_bulk_write(opendous_jtag->usb_handle, 
OPENDOUS_WRITE_ENDPOINT, \
-                       (char *)usb_out_buffer, out_length, 
OPENDOUS_USB_TIMEOUT);
+               jtag_libusb_bulk_write(opendous_jtag->usb_handle, 
OPENDOUS_WRITE_ENDPOINT, \
+                       (char *)usb_out_buffer, out_length, 
OPENDOUS_USB_TIMEOUT, &result);
        }
 #ifdef _DEBUG_USB_COMMS_
        LOG_DEBUG("USB write end: %d bytes", result);
@@ -789,8 +789,8 @@ int opendous_usb_read(struct opendous_jtag *opendous_jtag)
                        LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | 
LIBUSB_ENDPOINT_IN,
                        FUNC_READ_DATA, 0, 0, (char *) usb_in_buffer, 
OPENDOUS_IN_BUFFER_SIZE, OPENDOUS_USB_TIMEOUT);
        } else {
-               result = jtag_libusb_bulk_read(opendous_jtag->usb_handle, 
OPENDOUS_READ_ENDPOINT,
-                       (char *)usb_in_buffer, OPENDOUS_IN_BUFFER_SIZE, 
OPENDOUS_USB_TIMEOUT);
+               jtag_libusb_bulk_read(opendous_jtag->usb_handle, 
OPENDOUS_READ_ENDPOINT,
+                       (char *)usb_in_buffer, OPENDOUS_IN_BUFFER_SIZE, 
OPENDOUS_USB_TIMEOUT, &result);
        }
 #ifdef _DEBUG_USB_COMMS_
        LOG_DEBUG("USB read end: %d bytes", result);
diff --git a/src/jtag/drivers/openjtag.c b/src/jtag/drivers/openjtag.c
index b350803..525585b 100644
--- a/src/jtag/drivers/openjtag.c
+++ b/src/jtag/drivers/openjtag.c
@@ -256,8 +256,8 @@ static int openjtag_buf_write_cy7c65215(
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
-       ret = jtag_libusb_bulk_write(usbh, ep_out, (char *)buf, size,
-                                                                
CY7C65215_USB_TIMEOUT);
+       jtag_libusb_bulk_write(usbh, ep_out, (char *)buf, size,
+                                                                
CY7C65215_USB_TIMEOUT, &ret);
        if (ret < 0) {
                LOG_ERROR("bulk write failed, error %d", ret);
                return ERROR_JTAG_DEVICE_ERROR;
@@ -324,8 +324,8 @@ static int openjtag_buf_read_cy7c65215(
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
-       ret = jtag_libusb_bulk_read(usbh, ep_in, (char *)buf, qty,
-                                                               
CY7C65215_USB_TIMEOUT);
+       jtag_libusb_bulk_read(usbh, ep_in, (char *)buf, qty,
+                                                               
CY7C65215_USB_TIMEOUT, &ret);
        if (ret < 0) {
                LOG_ERROR("bulk read failed, error %d", ret);
                return ERROR_JTAG_DEVICE_ERROR;
diff --git a/src/jtag/drivers/osbdm.c b/src/jtag/drivers/osbdm.c
index 899023a..cd8da73 100644
--- a/src/jtag/drivers/osbdm.c
+++ b/src/jtag/drivers/osbdm.c
@@ -144,8 +144,10 @@ static struct osbdm osbdm_context;
 static int osbdm_send_and_recv(struct osbdm *osbdm)
 {
        /* Send request */
-       int count = jtag_libusb_bulk_write(osbdm->devh, OSBDM_USB_EP_WRITE,
-               (char *)osbdm->buffer, osbdm->count, OSBDM_USB_TIMEOUT);
+       int count;
+
+       jtag_libusb_bulk_write(osbdm->devh, OSBDM_USB_EP_WRITE,
+               (char *)osbdm->buffer, osbdm->count, OSBDM_USB_TIMEOUT, &count);
 
        if (count != osbdm->count) {
                LOG_ERROR("OSBDM communication error: can't write");
@@ -156,8 +158,8 @@ static int osbdm_send_and_recv(struct osbdm *osbdm)
        uint8_t cmd_saved = osbdm->buffer[0];
 
        /* Reading answer */
-       osbdm->count = jtag_libusb_bulk_read(osbdm->devh, OSBDM_USB_EP_READ,
-               (char *)osbdm->buffer, OSBDM_USB_BUFSIZE, OSBDM_USB_TIMEOUT);
+       jtag_libusb_bulk_read(osbdm->devh, OSBDM_USB_EP_READ,
+               (char *)osbdm->buffer, OSBDM_USB_BUFSIZE, OSBDM_USB_TIMEOUT, 
&osbdm->count);
 
        /* Now perform basic checks for data sent by BDM device
         */
diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index 2590662..fb6c8cc 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -292,14 +292,15 @@ static int stlink_swim_status(void *handle);
 static int stlink_usb_xfer_v1_get_status(void *handle)
 {
        struct stlink_usb_handle_s *h = handle;
+       int tr;
 
        assert(handle != NULL);
 
        /* read status */
        memset(h->cmdbuf, 0, STLINK_SG_SIZE);
 
-       if (jtag_libusb_bulk_read(h->fd, h->rx_ep, (char *)h->cmdbuf,
-                       13, STLINK_READ_TIMEOUT) != 13)
+       jtag_libusb_bulk_read(h->fd, h->rx_ep, (char *)h->cmdbuf, 13, 
STLINK_READ_TIMEOUT, &tr);
+       if (tr != 13)
                return ERROR_FAIL;
 
        uint32_t t1;
@@ -325,23 +326,27 @@ static int stlink_usb_xfer_v1_get_status(void *handle)
 static int stlink_usb_xfer_rw(void *handle, int cmdsize, const uint8_t *buf, 
int size)
 {
        struct stlink_usb_handle_s *h = handle;
+       int tr;
 
        assert(handle != NULL);
 
-       if (jtag_libusb_bulk_write(h->fd, h->tx_ep, (char *)h->cmdbuf, cmdsize,
-                       STLINK_WRITE_TIMEOUT) != cmdsize) {
+       jtag_libusb_bulk_write(h->fd, h->tx_ep, (char *)h->cmdbuf, cmdsize,
+                       STLINK_WRITE_TIMEOUT, &tr);
+       if (tr != cmdsize) {
                return ERROR_FAIL;
        }
 
        if (h->direction == h->tx_ep && size) {
-               if (jtag_libusb_bulk_write(h->fd, h->tx_ep, (char *)buf,
-                               size, STLINK_WRITE_TIMEOUT) != size) {
+               jtag_libusb_bulk_write(h->fd, h->tx_ep, (char *)buf,
+                               size, STLINK_WRITE_TIMEOUT, &tr);
+               if (tr != size) {
                        LOG_DEBUG("bulk write failed");
                        return ERROR_FAIL;
                }
        } else if (h->direction == h->rx_ep && size) {
-               if (jtag_libusb_bulk_read(h->fd, h->rx_ep, (char *)buf,
-                               size, STLINK_READ_TIMEOUT) != size) {
+               jtag_libusb_bulk_read(h->fd, h->rx_ep, (char *)buf,
+                               size, STLINK_READ_TIMEOUT, &tr);
+               if (tr != size) {
                        LOG_DEBUG("bulk read failed");
                        return ERROR_FAIL;
                }
@@ -537,13 +542,14 @@ static int stlink_cmd_allow_retry(void *handle, const 
uint8_t *buf, int size)
 static int stlink_usb_read_trace(void *handle, const uint8_t *buf, int size)
 {
        struct stlink_usb_handle_s *h = handle;
+       int tr;
 
        assert(handle != NULL);
 
        assert(h->version.stlink >= 2);
 
-       if (jtag_libusb_bulk_read(h->fd, h->trace_ep, (char *)buf,
-                       size, STLINK_READ_TIMEOUT) != size) {
+       jtag_libusb_bulk_read(h->fd, h->trace_ep, (char *)buf, size, 
STLINK_READ_TIMEOUT, &tr);
+       if (tr != size) {
                LOG_ERROR("bulk trace read failed");
                return ERROR_FAIL;
        }
diff --git a/src/jtag/drivers/usb_blaster/ublast2_access_libusb.c 
b/src/jtag/drivers/usb_blaster/ublast2_access_libusb.c
index c2a769c..98ca155 100644
--- a/src/jtag/drivers/usb_blaster/ublast2_access_libusb.c
+++ b/src/jtag/drivers/usb_blaster/ublast2_access_libusb.c
@@ -42,25 +42,23 @@
 static int ublast2_libusb_read(struct ublast_lowlevel *low, uint8_t *buf,
                              unsigned size, uint32_t *bytes_read)
 {
-       *bytes_read = jtag_libusb_bulk_read(low->libusb_dev,
+       return jtag_libusb_bulk_read(low->libusb_dev,
                                            USBBLASTER_EPIN | \
                                            LIBUSB_ENDPOINT_IN,
                                            (char *)buf,
                                            size,
-                                           100);
-       return ERROR_OK;
+                                           100, (int *)bytes_read);
 }
 
 static int ublast2_libusb_write(struct ublast_lowlevel *low, uint8_t *buf,
                               int size, uint32_t *bytes_written)
 {
-       *bytes_written = jtag_libusb_bulk_write(low->libusb_dev,
+       return jtag_libusb_bulk_write(low->libusb_dev,
                                                USBBLASTER_EPOUT | \
                                                LIBUSB_ENDPOINT_OUT,
                                                (char *)buf,
                                                size,
-                                               100);
-       return ERROR_OK;
+                                               100, (int *)bytes_written);
 }
 
 static int ublast2_write_firmware_section(struct jtag_libusb_device_handle 
*libusb_dev,

-- 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to