summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2007-11-27 13:42:47 +0000
committerBjörn Stenberg <bjorn@haxx.se>2007-11-27 13:42:47 +0000
commita0224590d45a0249160bb2ebd167ed3a1cac0176 (patch)
tree67479adb61b089a2faec2c7a6c251c528dbe69ed
parentf666a7e8c682f499b0af030e3d7503d041528cd7 (diff)
downloadrockbox-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
-rw-r--r--firmware/export/usb_drv.h4
-rw-r--r--firmware/target/arm/usb-drv-pp502x.c22
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);
25void usb_drv_exit(void); 25void usb_drv_exit(void);
26void usb_drv_int(void); 26void usb_drv_int(void);
27void usb_drv_stall(int endpoint, bool stall); 27void usb_drv_stall(int endpoint, bool stall);
28void usb_drv_send(int endpoint, void* ptr, int length); 28int usb_drv_send(int endpoint, void* ptr, int length);
29void usb_drv_recv(int endpoint, void* ptr, int length); 29int usb_drv_recv(int endpoint, void* ptr, int length);
30void usb_drv_ack(struct usb_ctrlrequest* req); 30void usb_drv_ack(struct usb_ctrlrequest* req);
31void usb_drv_set_address(int address); 31void usb_drv_set_address(int address);
32void usb_drv_reset_endpoint(int endpoint, bool send); 32void 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/*-------------------------------------------------------------------------*/
321static void transfer_completed(void); 321static void transfer_completed(void);
322static void prime_transfer(int endpoint, void* ptr, int len, bool send); 322static int prime_transfer(int endpoint, void* ptr, int len, bool send);
323static void bus_reset(void); 323static void bus_reset(void);
324static void init_queue_heads(void); 324static void init_queue_heads(void);
325static void init_endpoints(void); 325static void init_endpoints(void);
@@ -445,15 +445,15 @@ void usb_drv_stall(int endpoint, bool stall)
445 } 445 }
446} 446}
447 447
448void usb_drv_send(int endpoint, void* ptr, int length) 448int 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
453void usb_drv_recv(int endpoint, void* ptr, int length) 453int 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
459void usb_drv_wait(int endpoint, bool send) 459void 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 */
488static void prime_transfer(int endpoint, void* ptr, int len, bool send) 488static 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
545static void transfer_completed(void) 549static void transfer_completed(void)