summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/isp1583.c4
-rw-r--r--firmware/drivers/m66591.c2
-rw-r--r--firmware/drivers/usb-designware.c2
-rw-r--r--firmware/export/usb_drv.h3
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525.c7
-rw-r--r--firmware/target/arm/rk27xx/usb-drv-rk27xx.c2
-rw-r--r--firmware/target/arm/tms320dm320/sansa-connect/tnetv105_usb_drv.c8
-rw-r--r--firmware/target/arm/usb-drv-arc.c2
-rw-r--r--firmware/target/arm/usb-s3c6400x.c2
-rw-r--r--firmware/target/arm/usb-tcc.c2
-rw-r--r--firmware/target/mips/ingenic_jz47xx/usb-jz4740.c2
-rw-r--r--firmware/target/mips/ingenic_jz47xx/usb-jz4760.c2
-rw-r--r--firmware/usbstack/usb_core.c12
-rw-r--r--firmware/usbstack/usb_hid.c6
-rw-r--r--firmware/usbstack/usb_serial.c8
-rw-r--r--firmware/usbstack/usb_storage.c10
16 files changed, 36 insertions, 38 deletions
diff --git a/firmware/drivers/isp1583.c b/firmware/drivers/isp1583.c
index c028d2fa01..18a4e9c720 100644
--- a/firmware/drivers/isp1583.c
+++ b/firmware/drivers/isp1583.c
@@ -531,9 +531,9 @@ static void in_callback(int ep, unsigned char *buf, int len)
531 usb_core_transfer_complete(ep, false, 0, len); 531 usb_core_transfer_complete(ep, false, 0, len);
532} 532}
533 533
534int usb_drv_recv(int ep, void* ptr, int length) 534int usb_drv_recv_nonblocking(int ep, void* ptr, int length)
535{ 535{
536 logf("usb_drv_recv(%d, 0x%x, %d)", ep, (int)ptr, length); 536 logf("usb_drv_recv_nonblocking(%d, 0x%x, %d)", ep, (int)ptr, length);
537 if(ep == EP_CONTROL && length == 0 && ptr == NULL) 537 if(ep == EP_CONTROL && length == 0 && ptr == NULL)
538 { 538 {
539 usb_status_ack(ep, DIR_TX); 539 usb_status_ack(ep, DIR_TX);
diff --git a/firmware/drivers/m66591.c b/firmware/drivers/m66591.c
index d09b269f33..5da1908290 100644
--- a/firmware/drivers/m66591.c
+++ b/firmware/drivers/m66591.c
@@ -869,7 +869,7 @@ int usb_drv_send(int endpoint, void* ptr, int length)
869/* This function begins a receive (on an OUT endpoint), it should not block 869/* This function begins a receive (on an OUT endpoint), it should not block
870 * so the actual receive is done in the interrupt handler. 870 * so the actual receive is done in the interrupt handler.
871 */ 871 */
872int usb_drv_recv(int endpoint, void* ptr, int length) 872int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
873{ 873{
874 return mxx_queue(endpoint, ptr, length, false, false); 874 return mxx_queue(endpoint, ptr, length, false, false);
875} 875}
diff --git a/firmware/drivers/usb-designware.c b/firmware/drivers/usb-designware.c
index 375fd8be74..ab4c6037b5 100644
--- a/firmware/drivers/usb-designware.c
+++ b/firmware/drivers/usb-designware.c
@@ -1333,7 +1333,7 @@ void usb_drv_release_endpoint(int endpoint)
1333 usb_dw_target_enable_irq(); 1333 usb_dw_target_enable_irq();
1334} 1334}
1335 1335
1336int usb_drv_recv(int endpoint, void* ptr, int length) 1336int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
1337{ 1337{
1338 int epnum = EP_NUM(endpoint); 1338 int epnum = EP_NUM(endpoint);
1339 struct usb_dw_ep* dw_ep = usb_dw_get_ep(epnum, USB_DW_EPDIR_OUT); 1339 struct usb_dw_ep* dw_ep = usb_dw_get_ep(epnum, USB_DW_EPDIR_OUT);
diff --git a/firmware/export/usb_drv.h b/firmware/export/usb_drv.h
index 7ef7c8b7ee..01535c2786 100644
--- a/firmware/export/usb_drv.h
+++ b/firmware/export/usb_drv.h
@@ -68,8 +68,7 @@ void usb_drv_stall(int endpoint, bool stall,bool in);
68bool usb_drv_stalled(int endpoint,bool in); 68bool usb_drv_stalled(int endpoint,bool in);
69int usb_drv_send(int endpoint, void* ptr, int length); 69int usb_drv_send(int endpoint, void* ptr, int length);
70int usb_drv_send_nonblocking(int endpoint, void* ptr, int length); 70int usb_drv_send_nonblocking(int endpoint, void* ptr, int length);
71int usb_drv_recv(int endpoint, void* ptr, int length); 71int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length);
72void usb_drv_ack(struct usb_ctrlrequest* req);
73void usb_drv_set_address(int address); 72void usb_drv_set_address(int address);
74void usb_drv_reset_endpoint(int endpoint, bool send); 73void usb_drv_reset_endpoint(int endpoint, bool send);
75bool usb_drv_powered(void); 74bool usb_drv_powered(void);
diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c
index 01fae5f0ab..8369edc400 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525.c
@@ -412,12 +412,12 @@ void usb_drv_cancel_all_transfers(void)
412 restore_irq(flags); 412 restore_irq(flags);
413} 413}
414 414
415int usb_drv_recv(int ep, void *ptr, int len) 415int usb_drv_recv_nonblocking(int ep, void *ptr, int len)
416{ 416{
417 struct usb_dev_dma_desc *uc_desc = endpoints[ep][1].uc_desc; 417 struct usb_dev_dma_desc *uc_desc = endpoints[ep][1].uc_desc;
418 418
419 ep &= 0x7f; 419 ep &= 0x7f;
420 logf("usb_drv_recv(%d,%x,%d)\n", ep, (int)ptr, len); 420 logf("usb_drv_recv_nonblocking(%d,%x,%d)\n", ep, (int)ptr, len);
421 421
422 if (len > USB_DMA_DESC_RXTX_BYTES) 422 if (len > USB_DMA_DESC_RXTX_BYTES)
423 panicf("usb_recv: len=%d > %d", len, USB_DMA_DESC_RXTX_BYTES); 423 panicf("usb_recv: len=%d > %d", len, USB_DMA_DESC_RXTX_BYTES);
@@ -674,7 +674,8 @@ static void handle_out_ep(int ep)
674 * The usb_storage buffer is 63KB, but Linux sends 120KB. 674 * The usb_storage buffer is 63KB, but Linux sends 120KB.
675 * We get the first part, but upon re-enabling receive dma we 675 * We get the first part, but upon re-enabling receive dma we
676 * get a 'buffer not available' error from the hardware, since 676 * get a 'buffer not available' error from the hardware, since
677 * we haven't gotten the next usb_drv_recv() from the stack yet. 677 * we haven't gotten the next usb_drv_recv_nonblocking() from
678 * the stack yet.
678 * It seems the NAK bit is ignored here and the HW tries to dma 679 * It seems the NAK bit is ignored here and the HW tries to dma
679 * the incoming data anyway. 680 * the incoming data anyway.
680 * In theory I think the BNA error should be recoverable, but 681 * In theory I think the BNA error should be recoverable, but
diff --git a/firmware/target/arm/rk27xx/usb-drv-rk27xx.c b/firmware/target/arm/rk27xx/usb-drv-rk27xx.c
index 057ecf6ebc..aac271c47a 100644
--- a/firmware/target/arm/rk27xx/usb-drv-rk27xx.c
+++ b/firmware/target/arm/rk27xx/usb-drv-rk27xx.c
@@ -355,7 +355,7 @@ int usb_drv_send_nonblocking(int endpoint, void *ptr, int length)
355} 355}
356 356
357/* Setup a receive transfer. (non blocking) */ 357/* Setup a receive transfer. (non blocking) */
358int usb_drv_recv(int endpoint, void* ptr, int length) 358int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
359{ 359{
360 logf("udc: recv(%x)", endpoint); 360 logf("udc: recv(%x)", endpoint);
361 struct endpoint_t *ep; 361 struct endpoint_t *ep;
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/tnetv105_usb_drv.c b/firmware/target/arm/tms320dm320/sansa-connect/tnetv105_usb_drv.c
index 5563a40814..f1acc9c964 100644
--- a/firmware/target/arm/tms320dm320/sansa-connect/tnetv105_usb_drv.c
+++ b/firmware/target/arm/tms320dm320/sansa-connect/tnetv105_usb_drv.c
@@ -1026,8 +1026,8 @@ static bool tnetv_handle_cppi(void)
1026 if (rx_intstatus || tx_intstatus || rcv_sched) 1026 if (rx_intstatus || tx_intstatus || rcv_sched)
1027 { 1027 {
1028 /* Request calling again after short delay 1028 /* Request calling again after short delay
1029 * Needed when for example when OUT endpoint has pending 1029 * Needed when for example when OUT endpoint has pending data
1030 * data but the USB task did not call usb_drv_recv() yet. 1030 * but the USB task did not call usb_drv_recv_nonblocking() yet.
1031 */ 1031 */
1032 return true; 1032 return true;
1033 } 1033 }
@@ -1371,7 +1371,7 @@ int usb_drv_send_nonblocking(int endpoint, void* ptr, int length)
1371 return _usb_drv_send(endpoint, ptr, length, false); 1371 return _usb_drv_send(endpoint, ptr, length, false);
1372} 1372}
1373 1373
1374int usb_drv_recv(int endpoint, void* ptr, int length) 1374int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
1375{ 1375{
1376 int epn = EP_NUM(endpoint); 1376 int epn = EP_NUM(endpoint);
1377 struct ep_runtime_t *ep; 1377 struct ep_runtime_t *ep;
@@ -1388,8 +1388,6 @@ int usb_drv_recv(int endpoint, void* ptr, int length)
1388 return 0; 1388 return 0;
1389} 1389}
1390 1390
1391void usb_drv_ack(struct usb_ctrlrequest* req);
1392
1393void usb_drv_set_address(int address) 1391void usb_drv_set_address(int address)
1394{ 1392{
1395 UsbCtrlType usbCtrl; 1393 UsbCtrlType usbCtrl;
diff --git a/firmware/target/arm/usb-drv-arc.c b/firmware/target/arm/usb-drv-arc.c
index b19b635923..4c53108f12 100644
--- a/firmware/target/arm/usb-drv-arc.c
+++ b/firmware/target/arm/usb-drv-arc.c
@@ -593,7 +593,7 @@ int usb_drv_send(int endpoint, void* ptr, int length)
593 return prime_transfer(EP_NUM(endpoint), ptr, length, true, true); 593 return prime_transfer(EP_NUM(endpoint), ptr, length, true, true);
594} 594}
595 595
596int usb_drv_recv(int endpoint, void* ptr, int length) 596int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
597{ 597{
598 //logf("usbrecv(%x, %d)", ptr, length); 598 //logf("usbrecv(%x, %d)", ptr, length);
599 return prime_transfer(EP_NUM(endpoint), ptr, length, false, false); 599 return prime_transfer(EP_NUM(endpoint), ptr, length, false, false);
diff --git a/firmware/target/arm/usb-s3c6400x.c b/firmware/target/arm/usb-s3c6400x.c
index 920d1a6286..71d04e6f2a 100644
--- a/firmware/target/arm/usb-s3c6400x.c
+++ b/firmware/target/arm/usb-s3c6400x.c
@@ -166,7 +166,7 @@ int usb_drv_send_nonblocking(int endpoint, void *ptr, int length)
166 return 0; 166 return 0;
167} 167}
168 168
169int usb_drv_recv(int endpoint, void* ptr, int length) 169int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
170{ 170{
171 ep_transfer(EP_NUM(endpoint), ptr, length, true); 171 ep_transfer(EP_NUM(endpoint), ptr, length, true);
172 return 0; 172 return 0;
diff --git a/firmware/target/arm/usb-tcc.c b/firmware/target/arm/usb-tcc.c
index 1b5f16c223..8ce75b6764 100644
--- a/firmware/target/arm/usb-tcc.c
+++ b/firmware/target/arm/usb-tcc.c
@@ -609,7 +609,7 @@ int usb_drv_send_nonblocking(int endpoint, void *ptr, int length)
609 return rc; 609 return rc;
610} 610}
611 611
612int usb_drv_recv(int endpoint, void* ptr, int length) 612int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
613{ 613{
614 volatile struct tcc_ep *tcc_ep = &tcc_endpoints[endpoint & 0x7f]; 614 volatile struct tcc_ep *tcc_ep = &tcc_endpoints[endpoint & 0x7f];
615 int flags; 615 int flags;
diff --git a/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c b/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c
index 162aeec97a..8d04c54a68 100644
--- a/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c
@@ -743,7 +743,7 @@ int usb_drv_send(int endpoint, void* ptr, int length)
743 return 0; 743 return 0;
744} 744}
745 745
746int usb_drv_recv(int endpoint, void* ptr, int length) 746int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
747{ 747{
748 int flags; 748 int flags;
749 struct usb_endpoint *ep; 749 struct usb_endpoint *ep;
diff --git a/firmware/target/mips/ingenic_jz47xx/usb-jz4760.c b/firmware/target/mips/ingenic_jz47xx/usb-jz4760.c
index 37df1b3bb6..5dbf9455e3 100644
--- a/firmware/target/mips/ingenic_jz47xx/usb-jz4760.c
+++ b/firmware/target/mips/ingenic_jz47xx/usb-jz4760.c
@@ -1118,7 +1118,7 @@ int usb_drv_send(int endpoint, void* ptr, int length)
1118 return -1; 1118 return -1;
1119} 1119}
1120 1120
1121int usb_drv_recv(int endpoint, void* ptr, int length) 1121int usb_drv_recv_nonblocking(int endpoint, void* ptr, int length)
1122{ 1122{
1123 int flags; 1123 int flags;
1124 struct usb_endpoint *ep; 1124 struct usb_endpoint *ep;
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c
index b291dc7655..bf73c58abc 100644
--- a/firmware/usbstack/usb_core.c
+++ b/firmware/usbstack/usb_core.c
@@ -674,7 +674,7 @@ static void request_handler_device_get_descriptor(struct usb_ctrlrequest* req)
674 if (ptr != response_data) 674 if (ptr != response_data)
675 memcpy(response_data, ptr, length); 675 memcpy(response_data, ptr, length);
676 676
677 usb_drv_recv(EP_CONTROL, NULL, 0); 677 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0);
678 usb_drv_send(EP_CONTROL, response_data, length); 678 usb_drv_send(EP_CONTROL, response_data, length);
679 } 679 }
680} 680}
@@ -725,7 +725,7 @@ static void request_handler_device(struct usb_ctrlrequest* req)
725 case USB_REQ_GET_CONFIGURATION: { 725 case USB_REQ_GET_CONFIGURATION: {
726 logf("usb_core: GET_CONFIG"); 726 logf("usb_core: GET_CONFIG");
727 response_data[0] = (usb_state == ADDRESS ? 0 : 1); 727 response_data[0] = (usb_state == ADDRESS ? 0 : 1);
728 usb_drv_recv(EP_CONTROL, NULL, 0); 728 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0);
729 usb_drv_send(EP_CONTROL, response_data, 1); 729 usb_drv_send(EP_CONTROL, response_data, 1);
730 break; 730 break;
731 } 731 }
@@ -759,7 +759,7 @@ static void request_handler_device(struct usb_ctrlrequest* req)
759 case USB_REQ_GET_STATUS: 759 case USB_REQ_GET_STATUS:
760 response_data[0] = 0; 760 response_data[0] = 0;
761 response_data[1] = 0; 761 response_data[1] = 0;
762 usb_drv_recv(EP_CONTROL, NULL, 0); 762 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0);
763 usb_drv_send(EP_CONTROL, response_data, 2); 763 usb_drv_send(EP_CONTROL, response_data, 2);
764 break; 764 break;
765 default: 765 default:
@@ -781,7 +781,7 @@ static void request_handler_interface_standard(struct usb_ctrlrequest* req)
781 case USB_REQ_GET_INTERFACE: 781 case USB_REQ_GET_INTERFACE:
782 logf("usb_core: GET_INTERFACE"); 782 logf("usb_core: GET_INTERFACE");
783 response_data[0] = 0; 783 response_data[0] = 0;
784 usb_drv_recv(EP_CONTROL, NULL, 0); 784 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0);
785 usb_drv_send(EP_CONTROL, response_data, 1); 785 usb_drv_send(EP_CONTROL, response_data, 1);
786 break; 786 break;
787 case USB_REQ_CLEAR_FEATURE: 787 case USB_REQ_CLEAR_FEATURE:
@@ -791,7 +791,7 @@ static void request_handler_interface_standard(struct usb_ctrlrequest* req)
791 case USB_REQ_GET_STATUS: 791 case USB_REQ_GET_STATUS:
792 response_data[0] = 0; 792 response_data[0] = 0;
793 response_data[1] = 0; 793 response_data[1] = 0;
794 usb_drv_recv(EP_CONTROL, NULL, 0); 794 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0);
795 usb_drv_send(EP_CONTROL, response_data, 2); 795 usb_drv_send(EP_CONTROL, response_data, 2);
796 break; 796 break;
797 default: 797 default:
@@ -860,7 +860,7 @@ static void request_handler_endpoint_standard(struct usb_ctrlrequest* req)
860 response_data[0] = usb_drv_stalled(EP_NUM(req->wIndex), 860 response_data[0] = usb_drv_stalled(EP_NUM(req->wIndex),
861 EP_DIR(req->wIndex)); 861 EP_DIR(req->wIndex));
862 862
863 usb_drv_recv(EP_CONTROL, NULL, 0); 863 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0);
864 usb_drv_send(EP_CONTROL, response_data, 2); 864 usb_drv_send(EP_CONTROL, response_data, 2);
865 break; 865 break;
866 default: 866 default:
diff --git a/firmware/usbstack/usb_hid.c b/firmware/usbstack/usb_hid.c
index 885ae4c24a..16dddb7db1 100644
--- a/firmware/usbstack/usb_hid.c
+++ b/firmware/usbstack/usb_hid.c
@@ -693,7 +693,7 @@ static int usb_hid_set_report(struct usb_ctrlrequest *req)
693 } 693 }
694 694
695 memset(buf, 0, length); 695 memset(buf, 0, length);
696 usb_drv_recv(EP_CONTROL, buf, length); 696 usb_drv_recv_nonblocking(EP_CONTROL, buf, length);
697 697
698#ifdef LOGF_ENABLE 698#ifdef LOGF_ENABLE
699 if (buf[1] & 0x01) 699 if (buf[1] & 0x01)
@@ -772,7 +772,7 @@ bool usb_hid_control_request(struct usb_ctrlrequest *req, unsigned char *dest)
772 772
773 if (dest != orig_dest) 773 if (dest != orig_dest)
774 { 774 {
775 usb_drv_recv(EP_CONTROL, NULL, 0); /* ack */ 775 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0); /* ack */
776 usb_drv_send(EP_CONTROL, orig_dest, dest - orig_dest); 776 usb_drv_send(EP_CONTROL, orig_dest, dest - orig_dest);
777 return true; 777 return true;
778 } 778 }
@@ -809,7 +809,7 @@ bool usb_hid_control_request(struct usb_ctrlrequest *req, unsigned char *dest)
809 809
810 if (dest != orig_dest) 810 if (dest != orig_dest)
811 { 811 {
812 usb_drv_recv(EP_CONTROL, NULL, 0); /* ack */ 812 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0); /* ack */
813 usb_drv_send(EP_CONTROL, orig_dest, dest - orig_dest); 813 usb_drv_send(EP_CONTROL, orig_dest, dest - orig_dest);
814 } 814 }
815 else 815 else
diff --git a/firmware/usbstack/usb_serial.c b/firmware/usbstack/usb_serial.c
index a08394c0a8..c96936f1d4 100644
--- a/firmware/usbstack/usb_serial.c
+++ b/firmware/usbstack/usb_serial.c
@@ -294,7 +294,7 @@ bool usb_serial_control_request(struct usb_ctrlrequest* req, unsigned char* dest
294 if (req->wLength == sizeof(line_coding)) 294 if (req->wLength == sizeof(line_coding))
295 { 295 {
296 /* Receive line coding into local copy */ 296 /* Receive line coding into local copy */
297 usb_drv_recv(EP_CONTROL, &line_coding, sizeof(line_coding)); 297 usb_drv_recv_nonblocking(EP_CONTROL, &line_coding, sizeof(line_coding));
298 usb_drv_send(EP_CONTROL, NULL, 0); /* ack */ 298 usb_drv_send(EP_CONTROL, NULL, 0); /* ack */
299 handled = true; 299 handled = true;
300 } 300 }
@@ -316,7 +316,7 @@ bool usb_serial_control_request(struct usb_ctrlrequest* req, unsigned char* dest
316 if (req->wLength == sizeof(line_coding)) 316 if (req->wLength == sizeof(line_coding))
317 { 317 {
318 /* Send back line coding so host is happy */ 318 /* Send back line coding so host is happy */
319 usb_drv_recv(EP_CONTROL, NULL, 0); /* ack */ 319 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0); /* ack */
320 usb_drv_send(EP_CONTROL, &line_coding, sizeof(line_coding)); 320 usb_drv_send(EP_CONTROL, &line_coding, sizeof(line_coding));
321 handled = true; 321 handled = true;
322 } 322 }
@@ -329,7 +329,7 @@ bool usb_serial_control_request(struct usb_ctrlrequest* req, unsigned char* dest
329void usb_serial_init_connection(void) 329void usb_serial_init_connection(void)
330{ 330{
331 /* prime rx endpoint */ 331 /* prime rx endpoint */
332 usb_drv_recv(ep_out, receive_buffer, sizeof receive_buffer); 332 usb_drv_recv_nonblocking(ep_out, receive_buffer, sizeof receive_buffer);
333 333
334 /* we come here too after a bus reset, so reset some data */ 334 /* we come here too after a bus reset, so reset some data */
335 buffer_transitlength = 0; 335 buffer_transitlength = 0;
@@ -420,7 +420,7 @@ void usb_serial_transfer_complete(int ep,int dir, int status, int length)
420 /* Data received. TODO : Do something with it ? */ 420 /* Data received. TODO : Do something with it ? */
421 421
422 /* Get the next bit */ 422 /* Get the next bit */
423 usb_drv_recv(ep_out, receive_buffer, sizeof receive_buffer); 423 usb_drv_recv_nonblocking(ep_out, receive_buffer, sizeof receive_buffer);
424 break; 424 break;
425 425
426 case USB_DIR_IN: 426 case USB_DIR_IN:
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c
index 8e1b507ac4..947006c1ec 100644
--- a/firmware/usbstack/usb_storage.c
+++ b/firmware/usbstack/usb_storage.c
@@ -470,7 +470,7 @@ void usb_storage_init_connection(void)
470 ramdisk_buffer = tb.transfer_buffer + ALLOCATE_BUFFER_SIZE; 470 ramdisk_buffer = tb.transfer_buffer + ALLOCATE_BUFFER_SIZE;
471#endif 471#endif
472#endif 472#endif
473 usb_drv_recv(ep_out, cbw_buffer, MAX_CBW_SIZE); 473 usb_drv_recv_nonblocking(ep_out, cbw_buffer, MAX_CBW_SIZE);
474 474
475 int i; 475 int i;
476 for(i=0;i<storage_num_drives();i++) { 476 for(i=0;i<storage_num_drives();i++) {
@@ -685,7 +685,7 @@ bool usb_storage_control_request(struct usb_ctrlrequest* req, unsigned char* des
685 if(skip_first) (*tb.max_lun) --; 685 if(skip_first) (*tb.max_lun) --;
686#endif 686#endif
687 logf("ums: getmaxlun"); 687 logf("ums: getmaxlun");
688 usb_drv_recv(EP_CONTROL, NULL, 0); /* ack */ 688 usb_drv_recv_nonblocking(EP_CONTROL, NULL, 0); /* ack */
689 usb_drv_send(EP_CONTROL, tb.max_lun, 1); 689 usb_drv_send(EP_CONTROL, tb.max_lun, 1);
690 handled = true; 690 handled = true;
691 break; 691 break;
@@ -1187,14 +1187,14 @@ static void send_command_failed_result(void)
1187#if CONFIG_RTC 1187#if CONFIG_RTC
1188static void receive_time(void) 1188static void receive_time(void)
1189{ 1189{
1190 usb_drv_recv(ep_out, tb.transfer_buffer, 12); 1190 usb_drv_recv_nonblocking(ep_out, tb.transfer_buffer, 12);
1191 state = RECEIVING_TIME; 1191 state = RECEIVING_TIME;
1192} 1192}
1193#endif /* CONFIG_RTC */ 1193#endif /* CONFIG_RTC */
1194 1194
1195static void receive_block_data(void *data,int size) 1195static void receive_block_data(void *data,int size)
1196{ 1196{
1197 usb_drv_recv(ep_out, data, size); 1197 usb_drv_recv_nonblocking(ep_out, data, size);
1198 state = RECEIVING_BLOCKS; 1198 state = RECEIVING_BLOCKS;
1199} 1199}
1200 1200
@@ -1210,7 +1210,7 @@ static void send_csw(int status)
1210 state = WAITING_FOR_CSW_COMPLETION_OR_COMMAND; 1210 state = WAITING_FOR_CSW_COMPLETION_OR_COMMAND;
1211 //logf("CSW: %X",status); 1211 //logf("CSW: %X",status);
1212 /* Already start waiting for the next command */ 1212 /* Already start waiting for the next command */
1213 usb_drv_recv(ep_out, cbw_buffer, MAX_CBW_SIZE); 1213 usb_drv_recv_nonblocking(ep_out, cbw_buffer, MAX_CBW_SIZE);
1214 /* The next completed transfer will be either the CSW one 1214 /* The next completed transfer will be either the CSW one
1215 * or the new command */ 1215 * or the new command */
1216 1216