diff options
| author | sakumisu <[email protected]> | 2023-12-26 22:52:32 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2023-12-26 22:52:32 +0800 |
| commit | d30d08ca3a309a33709a68ad0773b4caf4a7afc6 (patch) | |
| tree | 4cd7c695392f214c1f08cc2ad7f5e35480006f8f | |
| parent | 02685793aa2160de39c64bb2518c94611d87a03a (diff) | |
musb do not use alloc pipe
| -rw-r--r-- | port/musb/usb_hc_musb.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/port/musb/usb_hc_musb.c b/port/musb/usb_hc_musb.c index facde085..51a9cded 100644 --- a/port/musb/usb_hc_musb.c +++ b/port/musb/usb_hc_musb.c @@ -397,6 +397,7 @@ static uint8_t usbh_get_port_speed(const uint8_t port) return speed; } +#if 0 static int musb_pipe_alloc(void) { int chidx; @@ -410,10 +411,13 @@ static int musb_pipe_alloc(void) return -1; } +#endif static void musb_pipe_free(struct musb_pipe *pipe) { +#if 0 pipe->inuse = false; +#endif } __WEAK void usb_hc_low_level_init(void) @@ -627,10 +631,10 @@ int usbh_submit_urb(struct usbh_urb *urb) if (USB_GET_ENDPOINT_TYPE(urb->ep->bmAttributes) == USB_ENDPOINT_TYPE_CONTROL) { chidx = 0; } else { - chidx = musb_pipe_alloc(); - if (chidx == -1) { - usb_osal_leave_critical_section(flags); - return -USB_ERR_NOMEM; + chidx = (urb->ep->bEndpointAddress & 0x0f); + + if (chidx > (CONFIG_USBHOST_PIPE_NUM - 1)) { + return -USB_ERR_RANGE; } } @@ -642,6 +646,8 @@ int usbh_submit_urb(struct usbh_urb *urb) urb->errorcode = -USB_ERR_BUSY; urb->actual_length = 0; + usb_osal_sem_reset(pipe->waitsem); + switch (USB_GET_ENDPOINT_TYPE(urb->ep->bmAttributes)) { case USB_ENDPOINT_TYPE_CONTROL: usb_ep0_state = USB_EP0_STATE_SETUP; @@ -920,15 +926,15 @@ void USBH_IRQHandler(void) if (ep_csrl_status & USB_TXCSRL1_ERROR) { HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_ERROR; urb->errorcode = -USB_ERR_IO; - goto pipe_wait; + musb_urb_waitup(urb); } else if (ep_csrl_status & USB_TXCSRL1_NAKTO) { HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_NAKTO; urb->errorcode = -USB_ERR_NAK; - goto pipe_wait; + musb_urb_waitup(urb); } else if (ep_csrl_status & USB_TXCSRL1_STALL) { HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_STALL; urb->errorcode = -USB_ERR_STALL; - goto pipe_wait; + musb_urb_waitup(urb); } else { uint32_t size = urb->transfer_buffer_length; @@ -941,8 +947,9 @@ void USBH_IRQHandler(void) urb->actual_length += size; if (urb->transfer_buffer_length == 0) { + //HWREGH(USB_BASE + MUSB_TXIE_OFFSET) &= ~(1 << ep_idx); urb->errorcode = 0; - goto pipe_wait; + musb_urb_waitup(urb); } else { musb_write_packet(ep_idx, urb->transfer_buffer, size); HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) = USB_TXCSRL1_TXRDY; @@ -966,15 +973,15 @@ void USBH_IRQHandler(void) if (ep_csrl_status & USB_RXCSRL1_ERROR) { HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_ERROR; urb->errorcode = -USB_ERR_IO; - goto pipe_wait; + musb_urb_waitup(urb); } else if (ep_csrl_status & USB_RXCSRL1_NAKTO) { HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_NAKTO; urb->errorcode = -USB_ERR_NAK; - goto pipe_wait; + musb_urb_waitup(urb); } else if (ep_csrl_status & USB_RXCSRL1_STALL) { HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_STALL; urb->errorcode = -USB_ERR_STALL; - goto pipe_wait; + 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)) { @@ -991,8 +998,9 @@ void USBH_IRQHandler(void) urb->actual_length += size; if ((size < USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)) || (urb->transfer_buffer_length == 0)) { + //HWREGH(USB_BASE + MUSB_RXIE_OFFSET) &= ~(1 << ep_idx); urb->errorcode = 0; - goto pipe_wait; + musb_urb_waitup(urb); } else { HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) = USB_RXCSRL1_REQPKT; } @@ -1000,8 +1008,4 @@ void USBH_IRQHandler(void) } } musb_set_active_ep(old_ep_idx); - return; -pipe_wait: - musb_set_active_ep(old_ep_idx); - musb_urb_waitup(urb); } |
