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 /firmware | |
parent | f666a7e8c682f499b0af030e3d7503d041528cd7 (diff) | |
download | rockbox-a0224590d45a0249160bb2ebd167ed3a1cac0176.tar.gz rockbox-a0224590d45a0249160bb2ebd167ed3a1cac0176.zip |
Added some error returns
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15834 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-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 264b5d18f8..c503a846ed 100644 --- a/firmware/export/usb_drv.h +++ b/firmware/export/usb_drv.h | |||
@@ -25,8 +25,8 @@ void usb_drv_init(void); | |||
25 | void usb_drv_exit(void); | 25 | void usb_drv_exit(void); |
26 | void usb_drv_int(void); | 26 | void usb_drv_int(void); |
27 | void usb_drv_stall(int endpoint, bool stall); | 27 | void usb_drv_stall(int endpoint, bool stall); |
28 | void usb_drv_send(int endpoint, void* ptr, int length); | 28 | int usb_drv_send(int endpoint, void* ptr, int length); |
29 | void usb_drv_recv(int endpoint, void* ptr, int length); | 29 | int usb_drv_recv(int endpoint, void* ptr, int length); |
30 | void usb_drv_ack(struct usb_ctrlrequest* req); | 30 | void usb_drv_ack(struct usb_ctrlrequest* req); |
31 | void usb_drv_set_address(int address); | 31 | void usb_drv_set_address(int address); |
32 | void usb_drv_reset_endpoint(int endpoint, bool send); | 32 | 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 c77b881833..1db3ebd42f 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] = { | |||
319 | 319 | ||
320 | /*-------------------------------------------------------------------------*/ | 320 | /*-------------------------------------------------------------------------*/ |
321 | static void transfer_completed(void); | 321 | static void transfer_completed(void); |
322 | static void prime_transfer(int endpoint, void* ptr, int len, bool send); | 322 | static int prime_transfer(int endpoint, void* ptr, int len, bool send); |
323 | static void bus_reset(void); | 323 | static void bus_reset(void); |
324 | static void init_queue_heads(void); | 324 | static void init_queue_heads(void); |
325 | static void init_endpoints(void); | 325 | static void init_endpoints(void); |
@@ -445,15 +445,15 @@ void usb_drv_stall(int endpoint, bool stall) | |||
445 | } | 445 | } |
446 | } | 446 | } |
447 | 447 | ||
448 | void usb_drv_send(int endpoint, void* ptr, int length) | 448 | int usb_drv_send(int endpoint, void* ptr, int length) |
449 | { | 449 | { |
450 | prime_transfer(endpoint, ptr, length, true); | 450 | return prime_transfer(endpoint, ptr, length, true); |
451 | } | 451 | } |
452 | 452 | ||
453 | void usb_drv_recv(int endpoint, void* ptr, int length) | 453 | int usb_drv_recv(int endpoint, void* ptr, int length) |
454 | { | 454 | { |
455 | //logf("usbrecv(%x, %d)", ptr, length); | 455 | //logf("usbrecv(%x, %d)", ptr, length); |
456 | prime_transfer(endpoint, ptr, length, false); | 456 | return prime_transfer(endpoint, ptr, length, false); |
457 | } | 457 | } |
458 | 458 | ||
459 | void usb_drv_wait(int endpoint, bool send) | 459 | void usb_drv_wait(int endpoint, bool send) |
@@ -485,7 +485,7 @@ void usb_drv_reset_endpoint(int endpoint, bool send) | |||
485 | /*-------------------------------------------------------------------------*/ | 485 | /*-------------------------------------------------------------------------*/ |
486 | 486 | ||
487 | /* manual: 32.14.5.2 */ | 487 | /* manual: 32.14.5.2 */ |
488 | static void prime_transfer(int endpoint, void* ptr, int len, bool send) | 488 | static int prime_transfer(int endpoint, void* ptr, int len, bool send) |
489 | { | 489 | { |
490 | int timeout; | 490 | int timeout; |
491 | int pipe = endpoint * 2 + (send ? 1 : 0); | 491 | int pipe = endpoint * 2 + (send ? 1 : 0); |
@@ -515,14 +515,16 @@ static void prime_transfer(int endpoint, void* ptr, int len, bool send) | |||
515 | timeout = 10000; | 515 | timeout = 10000; |
516 | while ((REG_ENDPTPRIME & mask) && --timeout) { | 516 | while ((REG_ENDPTPRIME & mask) && --timeout) { |
517 | if (REG_USBSTS & USBSTS_RESET) | 517 | if (REG_USBSTS & USBSTS_RESET) |
518 | break; | 518 | return -1; |
519 | } | 519 | } |
520 | if (!timeout) { | 520 | if (!timeout) { |
521 | logf("prime timeout"); | 521 | logf("prime timeout"); |
522 | return -2; | ||
522 | } | 523 | } |
523 | 524 | ||
524 | if (!(REG_ENDPTSTATUS & mask)) { | 525 | if (!(REG_ENDPTSTATUS & mask)) { |
525 | logf("no prime! %d %d %x", endpoint, pipe, qh->dtd.size_ioc_sts & 0xff ); | 526 | logf("no prime! %d %d %x", endpoint, pipe, qh->dtd.size_ioc_sts & 0xff ); |
527 | return -3; | ||
526 | } | 528 | } |
527 | 529 | ||
528 | if (send) { | 530 | if (send) { |
@@ -533,13 +535,15 @@ static void prime_transfer(int endpoint, void* ptr, int len, bool send) | |||
533 | REG_ENDPTCOMPLETE |= mask; | 535 | REG_ENDPTCOMPLETE |= mask; |
534 | 536 | ||
535 | if (REG_USBSTS & USBSTS_RESET) | 537 | if (REG_USBSTS & USBSTS_RESET) |
536 | return; | 538 | return -4; |
537 | } | 539 | } |
538 | if (!timeout) { | 540 | if (!timeout) { |
539 | logf("td never finished"); | 541 | logf("td never finished"); |
540 | return; | 542 | return -5; |
541 | } | 543 | } |
542 | } | 544 | } |
545 | |||
546 | return 0; | ||
543 | } | 547 | } |
544 | 548 | ||
545 | static void transfer_completed(void) | 549 | static void transfer_completed(void) |