diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2007-11-27 13:42:47 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2007-11-27 13:42:47 +0000 |
| commit | a0224590d45a0249160bb2ebd167ed3a1cac0176 (patch) | |
| tree | 67479adb61b089a2faec2c7a6c251c528dbe69ed | |
| parent | f666a7e8c682f499b0af030e3d7503d041528cd7 (diff) | |
| download | rockbox-a0224590d45a0249160bb2ebd167ed3a1cac0176.zip rockbox-a0224590d45a0249160bb2ebd167ed3a1cac0176.tar.gz rockbox-a0224590d45a0249160bb2ebd167ed3a1cac0176.tar.bz2 rockbox-a0224590d45a0249160bb2ebd167ed3a1cac0176.tar.xz | |
Added some error returns
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15834 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/export/usb_drv.h | 4 | ||||
| -rw-r--r-- | firmware/target/arm/usb-drv-pp502x.c | 22 |
2 files changed, 15 insertions, 11 deletions
diff --git a/firmware/export/usb_drv.h b/firmware/export/usb_drv.h index 264b5d1..c503a84 100644 --- a/firmware/export/usb_drv.h +++ b/firmware/export/usb_drv.h @@ -25,8 +25,8 @@ void usb_drv_init(void); void usb_drv_exit(void); void usb_drv_int(void); void usb_drv_stall(int endpoint, bool stall); -void usb_drv_send(int endpoint, void* ptr, int length); -void usb_drv_recv(int endpoint, void* ptr, int length); +int usb_drv_send(int endpoint, void* ptr, int length); +int usb_drv_recv(int endpoint, void* ptr, int length); void usb_drv_ack(struct usb_ctrlrequest* req); void usb_drv_set_address(int address); void usb_drv_reset_endpoint(int endpoint, bool send); diff --git a/firmware/target/arm/usb-drv-pp502x.c b/firmware/target/arm/usb-drv-pp502x.c index c77b881..1db3ebd 100644 --- a/firmware/target/arm/usb-drv-pp502x.c +++ b/firmware/target/arm/usb-drv-pp502x.c @@ -319,7 +319,7 @@ static const unsigned int pipe2mask[NUM_ENDPOINTS*2] = { /*-------------------------------------------------------------------------*/ static void transfer_completed(void); -static void prime_transfer(int endpoint, void* ptr, int len, bool send); +static int prime_transfer(int endpoint, void* ptr, int len, bool send); static void bus_reset(void); static void init_queue_heads(void); static void init_endpoints(void); @@ -445,15 +445,15 @@ void usb_drv_stall(int endpoint, bool stall) } } -void usb_drv_send(int endpoint, void* ptr, int length) +int usb_drv_send(int endpoint, void* ptr, int length) { - prime_transfer(endpoint, ptr, length, true); + return prime_transfer(endpoint, ptr, length, true); } -void usb_drv_recv(int endpoint, void* ptr, int length) +int usb_drv_recv(int endpoint, void* ptr, int length) { //logf("usbrecv(%x, %d)", ptr, length); - prime_transfer(endpoint, ptr, length, false); + return prime_transfer(endpoint, ptr, length, false); } void usb_drv_wait(int endpoint, bool send) @@ -485,7 +485,7 @@ void usb_drv_reset_endpoint(int endpoint, bool send) /*-------------------------------------------------------------------------*/ /* manual: 32.14.5.2 */ -static void prime_transfer(int endpoint, void* ptr, int len, bool send) +static int prime_transfer(int endpoint, void* ptr, int len, bool send) { int timeout; int pipe = endpoint * 2 + (send ? 1 : 0); @@ -515,14 +515,16 @@ static void prime_transfer(int endpoint, void* ptr, int len, bool send) timeout = 10000; while ((REG_ENDPTPRIME & mask) && --timeout) { if (REG_USBSTS & USBSTS_RESET) - break; + return -1; } if (!timeout) { logf("prime timeout"); + return -2; } if (!(REG_ENDPTSTATUS & mask)) { logf("no prime! %d %d %x", endpoint, pipe, qh->dtd.size_ioc_sts & 0xff ); + return -3; } if (send) { @@ -533,13 +535,15 @@ static void prime_transfer(int endpoint, void* ptr, int len, bool send) REG_ENDPTCOMPLETE |= mask; if (REG_USBSTS & USBSTS_RESET) - return; + return -4; } if (!timeout) { logf("td never finished"); - return; + return -5; } } + + return 0; } static void transfer_completed(void) |