diff --git a/port/chipidea/usb_dc_chipidea.c b/port/chipidea/usb_dc_chipidea.c index c6b6c0fe..9616dcc2 100644 --- a/port/chipidea/usb_dc_chipidea.c +++ b/port/chipidea/usb_dc_chipidea.c @@ -525,10 +525,7 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) { uint8_t ep_idx = USB_EP_GET_IDX(ep->bEndpointAddress); - /* Must not exceed max endpoint number */ - if (ep_idx >= CONFIG_USBDEV_EP_NUM) { - return -1; - } + USB_ASSERT_MSG(ep_idx < CONFIG_USBDEV_EP_NUM, "Ep addr %02x overflow", ep->bEndpointAddress); chipidea_edpt_open(busid, ep->bEndpointAddress, USB_GET_ENDPOINT_TYPE(ep->bmAttributes), ep->wMaxPacketSize); @@ -666,17 +663,10 @@ void USBD_IRQHandler(uint8_t busid) if (int_status & intr_usb) { uint32_t const edpt_complete = USB_OTG_DEV->ENDPTCOMPLETE; - USB_OTG_DEV->ENDPTCOMPLETE = edpt_complete; uint32_t edpt_setup_status = USB_OTG_DEV->ENDPTSETUPSTAT; - if (edpt_setup_status) { - /*------------- Set up Received -------------*/ - USB_OTG_DEV->ENDPTSETUPSTAT = edpt_setup_status; - dcd_qhd_t *qhd0 = chipidea_qhd_get(busid, 0); - usbd_event_ep0_setup_complete_handler(busid, (uint8_t *)&qhd0->setup_request); - } - if (edpt_complete) { + USB_OTG_DEV->ENDPTCOMPLETE = edpt_complete; for (uint8_t ep_idx = 0; ep_idx < (CONFIG_USBDEV_EP_NUM * 2); ep_idx++) { if (edpt_complete & (1 << ep_idx2bit(ep_idx))) { transfer_len = 0; @@ -714,5 +704,12 @@ void USBD_IRQHandler(uint8_t busid) } } } + + if (edpt_setup_status) { + /*------------- Set up Received -------------*/ + USB_OTG_DEV->ENDPTSETUPSTAT = edpt_setup_status; + dcd_qhd_t *qhd0 = chipidea_qhd_get(busid, 0); + usbd_event_ep0_setup_complete_handler(busid, (uint8_t *)&qhd0->setup_request); + } } } \ No newline at end of file diff --git a/port/dwc2/usb_dc_dwc2.c b/port/dwc2/usb_dc_dwc2.c index d3b33a5d..88813991 100644 --- a/port/dwc2/usb_dc_dwc2.c +++ b/port/dwc2/usb_dc_dwc2.c @@ -711,10 +711,7 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) { uint8_t ep_idx = USB_EP_GET_IDX(ep->bEndpointAddress); - if (ep_idx > (CONFIG_USBDEV_EP_NUM - 1)) { - USB_LOG_ERR("Ep addr %02x overflow\r\n", ep->bEndpointAddress); - return -1; - } + USB_ASSERT_MSG(ep_idx < CONFIG_USBDEV_EP_NUM, "Ep addr %02x overflow", ep->bEndpointAddress); if (USB_EP_DIR_IS_OUT(ep->bEndpointAddress)) { g_dwc2_udc[busid].out_ep[ep_idx].ep_mps = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize); @@ -735,10 +732,8 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) } else { fifo_size = (USB_OTG_GLB->DIEPTXF[ep_idx - 1U] >> 16); } - if ((fifo_size * 4) < USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize)) { - USB_LOG_ERR("Ep addr %02x fifo overflow\r\n", ep->bEndpointAddress); - return -2; - } + + USB_ASSERT_MSG((fifo_size * 4) >= USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize), "Ep addr %02x fifo overflow", ep->bEndpointAddress); g_dwc2_udc[busid].in_ep[ep_idx].ep_mps = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize); g_dwc2_udc[busid].in_ep[ep_idx].ep_type = USB_GET_ENDPOINT_TYPE(ep->bmAttributes); @@ -880,7 +875,7 @@ int usbd_ep_start_write(uint8_t busid, const uint8_t ep, const uint8_t *data, ui } if (ep_idx && !(USB_OTG_INEP(ep_idx)->DIEPCTL & USB_OTG_DIEPCTL_MPSIZ)) { - return -3; + return -2; } g_dwc2_udc[busid].in_ep[ep_idx].xfer_buf = (uint8_t *)data; @@ -948,7 +943,7 @@ int usbd_ep_start_read(uint8_t busid, const uint8_t ep, uint8_t *data, uint32_t } if (ep_idx && !(USB_OTG_OUTEP(ep_idx)->DOEPCTL & USB_OTG_DOEPCTL_MPSIZ)) { - return -3; + return -2; } g_dwc2_udc[busid].out_ep[ep_idx].xfer_buf = (uint8_t *)data; diff --git a/port/fsdev/usb_dc_fsdev.c b/port/fsdev/usb_dc_fsdev.c index f27e8c69..d046aa93 100644 --- a/port/fsdev/usb_dc_fsdev.c +++ b/port/fsdev/usb_dc_fsdev.c @@ -131,10 +131,7 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) { uint8_t ep_idx = USB_EP_GET_IDX(ep->bEndpointAddress); - if (ep_idx > (CONFIG_USBDEV_EP_NUM - 1)) { - USB_LOG_ERR("Ep addr %02x overflow\r\n", ep->bEndpointAddress); - return -1; - } + USB_ASSERT_MSG(ep_idx < CONFIG_USBDEV_EP_NUM, "Ep addr %02x overflow", ep->bEndpointAddress); uint16_t wEpRegVal; @@ -169,10 +166,9 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) g_fsdev_udc.out_ep[ep_idx].ep_type = USB_GET_ENDPOINT_TYPE(ep->bmAttributes); g_fsdev_udc.out_ep[ep_idx].ep_enable = true; if (g_fsdev_udc.out_ep[ep_idx].ep_mps > g_fsdev_udc.out_ep[ep_idx].ep_pma_buf_len) { - if (g_fsdev_udc.pma_offset + g_fsdev_udc.out_ep[ep_idx].ep_mps > CONFIG_USB_FSDEV_RAM_SIZE) { - USB_LOG_ERR("Ep pma %02x overflow\r\n", ep->bEndpointAddress); - return -1; - } + USB_ASSERT_MSG((g_fsdev_udc.pma_offset + g_fsdev_udc.out_ep[ep_idx].ep_mps) <= CONFIG_USB_FSDEV_RAM_SIZE, + "Ep pma %02x overflow", ep->bEndpointAddress); + g_fsdev_udc.out_ep[ep_idx].ep_pma_buf_len = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize); g_fsdev_udc.out_ep[ep_idx].ep_pma_addr = g_fsdev_udc.pma_offset; /*Set the endpoint Receive buffer address */ @@ -187,10 +183,9 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) g_fsdev_udc.in_ep[ep_idx].ep_type = USB_GET_ENDPOINT_TYPE(ep->bmAttributes); g_fsdev_udc.in_ep[ep_idx].ep_enable = true; if (g_fsdev_udc.in_ep[ep_idx].ep_mps > g_fsdev_udc.in_ep[ep_idx].ep_pma_buf_len) { - if (g_fsdev_udc.pma_offset + g_fsdev_udc.in_ep[ep_idx].ep_mps > CONFIG_USB_FSDEV_RAM_SIZE) { - USB_LOG_ERR("Ep pma %02x overflow\r\n", ep->bEndpointAddress); - return -1; - } + USB_ASSERT_MSG((g_fsdev_udc.pma_offset + g_fsdev_udc.in_ep[ep_idx].ep_mps) <= CONFIG_USB_FSDEV_RAM_SIZE, + "Ep pma %02x overflow", ep->bEndpointAddress); + g_fsdev_udc.in_ep[ep_idx].ep_pma_buf_len = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize); g_fsdev_udc.in_ep[ep_idx].ep_pma_addr = g_fsdev_udc.pma_offset; /*Set the endpoint Transmit buffer address */ diff --git a/port/kinetis/usb_dc_kinetis.c b/port/kinetis/usb_dc_kinetis.c index dd4e4f98..eb819576 100644 --- a/port/kinetis/usb_dc_kinetis.c +++ b/port/kinetis/usb_dc_kinetis.c @@ -156,9 +156,7 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) uint8_t regval; /* Must not exceed max endpoint number */ - if (ep_idx >= CONFIG_USBDEV_EP_NUM) { - return -1; - } + USB_ASSERT_MSG(ep_idx < CONFIG_USBDEV_EP_NUM, "Ep addr %02x overflow", ep->bEndpointAddress); if (USB_EP_DIR_IS_OUT(ep->bEndpointAddress)) { g_kinetis_udc[busid].out_ep[ep_idx].ep_mps = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize); diff --git a/port/musb/usb_dc_musb.c b/port/musb/usb_dc_musb.c index 753e45bf..0d759b58 100644 --- a/port/musb/usb_dc_musb.c +++ b/port/musb/usb_dc_musb.c @@ -331,10 +331,7 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) return 0; } - if (ep_idx > (CONFIG_USBDEV_EP_NUM - 1)) { - USB_LOG_ERR("Ep addr %02x overflow\r\n", ep->bEndpointAddress); - return -1; - } + USB_ASSERT_MSG(ep_idx < CONFIG_USBDEV_EP_NUM, "Ep addr %02x overflow", ep->bEndpointAddress); old_ep_idx = musb_get_active_ep(); musb_set_active_ep(ep_idx); @@ -344,10 +341,8 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) g_musb_udc.out_ep[ep_idx].ep_type = USB_GET_ENDPOINT_TYPE(ep->bmAttributes); g_musb_udc.out_ep[ep_idx].ep_enable = true; - if ((8 << HWREGB(USB_BASE + MUSB_RXFIFOSZ_OFFSET)) < g_musb_udc.out_ep[ep_idx].ep_mps) { - USB_LOG_ERR("Ep %02x fifo is overflow\r\n", ep->bEndpointAddress); - return -2; - } + USB_ASSERT_MSG((8 << HWREGB(USB_BASE + MUSB_RXFIFOSZ_OFFSET)) >= g_musb_udc.out_ep[ep_idx].ep_mps, + "Ep %02x fifo is overflow", ep->bEndpointAddress); HWREGH(USB_BASE + MUSB_IND_RXMAP_OFFSET) = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize); @@ -395,10 +390,8 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) g_musb_udc.in_ep[ep_idx].ep_type = USB_GET_ENDPOINT_TYPE(ep->bmAttributes); g_musb_udc.in_ep[ep_idx].ep_enable = true; - if ((8 << HWREGB(USB_BASE + MUSB_TXFIFOSZ_OFFSET)) < g_musb_udc.in_ep[ep_idx].ep_mps) { - USB_LOG_ERR("Ep %02x fifo is overflow\r\n", ep->bEndpointAddress); - return -2; - } + USB_ASSERT_MSG((8 << HWREGB(USB_BASE + MUSB_TXFIFOSZ_OFFSET)) >= g_musb_udc.in_ep[ep_idx].ep_mps, + "Ep %02x fifo is overflow", ep->bEndpointAddress); HWREGH(USB_BASE + MUSB_IND_TXMAP_OFFSET) = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize);