summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2023-12-26 22:52:32 +0800
committersakumisu <[email protected]>2023-12-26 22:52:32 +0800
commitd30d08ca3a309a33709a68ad0773b4caf4a7afc6 (patch)
tree4cd7c695392f214c1f08cc2ad7f5e35480006f8f
parent02685793aa2160de39c64bb2518c94611d87a03a (diff)
musb do not use alloc pipe
-rw-r--r--port/musb/usb_hc_musb.c36
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);
}