summaryrefslogtreecommitdiff
path: root/firmware/target/arm/usb-drv-arc.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/usb-drv-arc.c')
-rw-r--r--firmware/target/arm/usb-drv-arc.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/firmware/target/arm/usb-drv-arc.c b/firmware/target/arm/usb-drv-arc.c
index fc74ce5bf0..f252f11f3e 100644
--- a/firmware/target/arm/usb-drv-arc.c
+++ b/firmware/target/arm/usb-drv-arc.c
@@ -349,7 +349,7 @@ struct queue_head {
349static struct queue_head qh_array[USB_NUM_ENDPOINTS*2] 349static struct queue_head qh_array[USB_NUM_ENDPOINTS*2]
350 USB_QHARRAY_ATTR; 350 USB_QHARRAY_ATTR;
351 351
352static struct wakeup transfer_completion_signal[USB_NUM_ENDPOINTS*2] 352static struct semaphore transfer_completion_signal[USB_NUM_ENDPOINTS*2]
353 SHAREDBSS_ATTR; 353 SHAREDBSS_ATTR;
354 354
355static const unsigned int pipe2mask[] = { 355static const unsigned int pipe2mask[] = {
@@ -424,7 +424,7 @@ void usb_drv_startup(void)
424 /* Initialize all the signal objects once */ 424 /* Initialize all the signal objects once */
425 int i; 425 int i;
426 for(i=0;i<USB_NUM_ENDPOINTS*2;i++) { 426 for(i=0;i<USB_NUM_ENDPOINTS*2;i++) {
427 wakeup_init(&transfer_completion_signal[i]); 427 semaphore_init(&transfer_completion_signal[i], 1, 0);
428 } 428 }
429} 429}
430 430
@@ -778,7 +778,7 @@ static int prime_transfer(int ep_num, void* ptr, int len, bool send, bool wait)
778 778
779 if (wait) { 779 if (wait) {
780 /* wait for transfer to finish */ 780 /* wait for transfer to finish */
781 wakeup_wait(&transfer_completion_signal[pipe], TIMEOUT_BLOCK); 781 semaphore_wait(&transfer_completion_signal[pipe], TIMEOUT_BLOCK);
782 if(qh->status!=0) { 782 if(qh->status!=0) {
783 /* No need to cancel wait here since it was done and the signal 783 /* No need to cancel wait here since it was done and the signal
784 * came. */ 784 * came. */
@@ -797,7 +797,7 @@ pt_error:
797 qh->wait = 0; 797 qh->wait = 0;
798 /* Make sure to remove any signal if interrupt fired before we zeroed 798 /* Make sure to remove any signal if interrupt fired before we zeroed
799 * qh->wait. Could happen during a bus reset for example. */ 799 * qh->wait. Could happen during a bus reset for example. */
800 wakeup_wait(&transfer_completion_signal[pipe], TIMEOUT_NOBLOCK); 800 semaphore_wait(&transfer_completion_signal[pipe], TIMEOUT_NOBLOCK);
801 } 801 }
802 802
803 return rc; 803 return rc;
@@ -814,7 +814,7 @@ void usb_drv_cancel_all_transfers(void)
814 if(qh_array[i].wait) { 814 if(qh_array[i].wait) {
815 qh_array[i].wait=0; 815 qh_array[i].wait=0;
816 qh_array[i].status=DTD_STATUS_HALTED; 816 qh_array[i].status=DTD_STATUS_HALTED;
817 wakeup_signal(&transfer_completion_signal[i]); 817 semaphore_release(&transfer_completion_signal[i]);
818 } 818 }
819 } 819 }
820} 820}
@@ -906,7 +906,7 @@ static void control_received(void)
906 if(qh_array[i].wait) { 906 if(qh_array[i].wait) {
907 qh_array[i].wait=0; 907 qh_array[i].wait=0;
908 qh_array[i].status=DTD_STATUS_HALTED; 908 qh_array[i].status=DTD_STATUS_HALTED;
909 wakeup_signal(&transfer_completion_signal[i]); 909 semaphore_release(&transfer_completion_signal[i]);
910 } 910 }
911 } 911 }
912 912
@@ -945,7 +945,7 @@ static void transfer_completed(void)
945 } 945 }
946 if(qh->wait) { 946 if(qh->wait) {
947 qh->wait=0; 947 qh->wait=0;
948 wakeup_signal(&transfer_completion_signal[pipe]); 948 semaphore_release(&transfer_completion_signal[pipe]);
949 } 949 }
950 950
951 usb_core_transfer_complete(ep, dir?USB_DIR_IN:USB_DIR_OUT, 951 usb_core_transfer_complete(ep, dir?USB_DIR_IN:USB_DIR_OUT,