musb do not use alloc pipe

This commit is contained in:
sakumisu
2023-12-26 22:52:32 +08:00
parent 02685793aa
commit d30d08ca3a

View File

@@ -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);
}