浏览代码

fix(port/musb/usb_hc_musb): fix musb_write_packet size with urb->transfer_buffer_length

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu 11 月之前
父节点
当前提交
5573472397
共有 1 个文件被更改,包括 4 次插入12 次删除
  1. 4 12
      port/musb/usb_hc_musb.c

+ 4 - 12
port/musb/usb_hc_musb.c

@@ -869,12 +869,7 @@ void handle_ep0(struct usbh_bus *bus)
             break;
         case USB_EP0_STATE_IN_DATA:
             if (ep0_status & USB_CSRL0_RXRDY) {
-                size = urb->transfer_buffer_length;
-                if (size > USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)) {
-                    size = USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize);
-                }
-
-                size = MIN(size, HWREGH(USB_BASE + MUSB_IND_RXCOUNT_OFFSET));
+                size = HWREGH(USB_BASE + MUSB_IND_RXCOUNT_OFFSET);
                 musb_read_packet(bus, 0, urb->transfer_buffer, size);
                 HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_CSRL0_RXRDY;
                 urb->transfer_buffer += size;
@@ -933,6 +928,7 @@ void USBH_IRQHandler(uint8_t busid)
     uint8_t ep_idx;
     uint8_t old_ep_idx;
     struct usbh_bus *bus;
+    uint32_t size;
 
     bus = &g_usbhost_bus[busid];
 
@@ -1024,7 +1020,7 @@ void USBH_IRQHandler(uint8_t busid)
                     urb->errorcode = 0;
                     musb_urb_waitup(urb);
                 } else {
-                    musb_write_packet(bus, ep_idx, urb->transfer_buffer, size);
+                    musb_write_packet(bus, ep_idx, urb->transfer_buffer, MIN(urb->transfer_buffer_length, USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)));
                     HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) = USB_TXCSRL1_TXRDY;
                 }
             }
@@ -1056,11 +1052,7 @@ void USBH_IRQHandler(uint8_t busid)
                 urb->errorcode = -USB_ERR_STALL;
                 musb_urb_waitup(urb);
             } else if (ep_csrl_status & USB_RXCSRL1_RXRDY) {
-                uint32_t size = urb->transfer_buffer_length;
-                if (size > USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)) {
-                    size = USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize);
-                }
-                size = MIN(size, HWREGH(USB_BASE + MUSB_IND_RXCOUNT_OFFSET));
+                size = HWREGH(USB_BASE + MUSB_IND_RXCOUNT_OFFSET);
 
                 musb_read_packet(bus, ep_idx, urb->transfer_buffer, size);