musb do not use alloc pipe
This commit is contained in:
@@ -397,6 +397,7 @@ static uint8_t usbh_get_port_speed(const uint8_t port)
|
|||||||
return speed;
|
return speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static int musb_pipe_alloc(void)
|
static int musb_pipe_alloc(void)
|
||||||
{
|
{
|
||||||
int chidx;
|
int chidx;
|
||||||
@@ -410,10 +411,13 @@ static int musb_pipe_alloc(void)
|
|||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void musb_pipe_free(struct musb_pipe *pipe)
|
static void musb_pipe_free(struct musb_pipe *pipe)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
pipe->inuse = false;
|
pipe->inuse = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__WEAK void usb_hc_low_level_init(void)
|
__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) {
|
if (USB_GET_ENDPOINT_TYPE(urb->ep->bmAttributes) == USB_ENDPOINT_TYPE_CONTROL) {
|
||||||
chidx = 0;
|
chidx = 0;
|
||||||
} else {
|
} else {
|
||||||
chidx = musb_pipe_alloc();
|
chidx = (urb->ep->bEndpointAddress & 0x0f);
|
||||||
if (chidx == -1) {
|
|
||||||
usb_osal_leave_critical_section(flags);
|
if (chidx > (CONFIG_USBHOST_PIPE_NUM - 1)) {
|
||||||
return -USB_ERR_NOMEM;
|
return -USB_ERR_RANGE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -642,6 +646,8 @@ int usbh_submit_urb(struct usbh_urb *urb)
|
|||||||
urb->errorcode = -USB_ERR_BUSY;
|
urb->errorcode = -USB_ERR_BUSY;
|
||||||
urb->actual_length = 0;
|
urb->actual_length = 0;
|
||||||
|
|
||||||
|
usb_osal_sem_reset(pipe->waitsem);
|
||||||
|
|
||||||
switch (USB_GET_ENDPOINT_TYPE(urb->ep->bmAttributes)) {
|
switch (USB_GET_ENDPOINT_TYPE(urb->ep->bmAttributes)) {
|
||||||
case USB_ENDPOINT_TYPE_CONTROL:
|
case USB_ENDPOINT_TYPE_CONTROL:
|
||||||
usb_ep0_state = USB_EP0_STATE_SETUP;
|
usb_ep0_state = USB_EP0_STATE_SETUP;
|
||||||
@@ -920,15 +926,15 @@ void USBH_IRQHandler(void)
|
|||||||
if (ep_csrl_status & USB_TXCSRL1_ERROR) {
|
if (ep_csrl_status & USB_TXCSRL1_ERROR) {
|
||||||
HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_ERROR;
|
HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_ERROR;
|
||||||
urb->errorcode = -USB_ERR_IO;
|
urb->errorcode = -USB_ERR_IO;
|
||||||
goto pipe_wait;
|
musb_urb_waitup(urb);
|
||||||
} else if (ep_csrl_status & USB_TXCSRL1_NAKTO) {
|
} else if (ep_csrl_status & USB_TXCSRL1_NAKTO) {
|
||||||
HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_NAKTO;
|
HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_NAKTO;
|
||||||
urb->errorcode = -USB_ERR_NAK;
|
urb->errorcode = -USB_ERR_NAK;
|
||||||
goto pipe_wait;
|
musb_urb_waitup(urb);
|
||||||
} else if (ep_csrl_status & USB_TXCSRL1_STALL) {
|
} else if (ep_csrl_status & USB_TXCSRL1_STALL) {
|
||||||
HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_STALL;
|
HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_STALL;
|
||||||
urb->errorcode = -USB_ERR_STALL;
|
urb->errorcode = -USB_ERR_STALL;
|
||||||
goto pipe_wait;
|
musb_urb_waitup(urb);
|
||||||
} else {
|
} else {
|
||||||
uint32_t size = urb->transfer_buffer_length;
|
uint32_t size = urb->transfer_buffer_length;
|
||||||
|
|
||||||
@@ -941,8 +947,9 @@ void USBH_IRQHandler(void)
|
|||||||
urb->actual_length += size;
|
urb->actual_length += size;
|
||||||
|
|
||||||
if (urb->transfer_buffer_length == 0) {
|
if (urb->transfer_buffer_length == 0) {
|
||||||
|
//HWREGH(USB_BASE + MUSB_TXIE_OFFSET) &= ~(1 << ep_idx);
|
||||||
urb->errorcode = 0;
|
urb->errorcode = 0;
|
||||||
goto pipe_wait;
|
musb_urb_waitup(urb);
|
||||||
} else {
|
} else {
|
||||||
musb_write_packet(ep_idx, urb->transfer_buffer, size);
|
musb_write_packet(ep_idx, urb->transfer_buffer, size);
|
||||||
HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) = USB_TXCSRL1_TXRDY;
|
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) {
|
if (ep_csrl_status & USB_RXCSRL1_ERROR) {
|
||||||
HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_ERROR;
|
HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_ERROR;
|
||||||
urb->errorcode = -USB_ERR_IO;
|
urb->errorcode = -USB_ERR_IO;
|
||||||
goto pipe_wait;
|
musb_urb_waitup(urb);
|
||||||
} else if (ep_csrl_status & USB_RXCSRL1_NAKTO) {
|
} else if (ep_csrl_status & USB_RXCSRL1_NAKTO) {
|
||||||
HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_NAKTO;
|
HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_NAKTO;
|
||||||
urb->errorcode = -USB_ERR_NAK;
|
urb->errorcode = -USB_ERR_NAK;
|
||||||
goto pipe_wait;
|
musb_urb_waitup(urb);
|
||||||
} else if (ep_csrl_status & USB_RXCSRL1_STALL) {
|
} else if (ep_csrl_status & USB_RXCSRL1_STALL) {
|
||||||
HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_STALL;
|
HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~USB_RXCSRL1_STALL;
|
||||||
urb->errorcode = -USB_ERR_STALL;
|
urb->errorcode = -USB_ERR_STALL;
|
||||||
goto pipe_wait;
|
musb_urb_waitup(urb);
|
||||||
} else if (ep_csrl_status & USB_RXCSRL1_RXRDY) {
|
} else if (ep_csrl_status & USB_RXCSRL1_RXRDY) {
|
||||||
uint32_t size = urb->transfer_buffer_length;
|
uint32_t size = urb->transfer_buffer_length;
|
||||||
if (size > USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)) {
|
if (size > USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)) {
|
||||||
@@ -991,8 +998,9 @@ void USBH_IRQHandler(void)
|
|||||||
urb->actual_length += size;
|
urb->actual_length += size;
|
||||||
|
|
||||||
if ((size < USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)) || (urb->transfer_buffer_length == 0)) {
|
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;
|
urb->errorcode = 0;
|
||||||
goto pipe_wait;
|
musb_urb_waitup(urb);
|
||||||
} else {
|
} else {
|
||||||
HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) = USB_RXCSRL1_REQPKT;
|
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);
|
musb_set_active_ep(old_ep_idx);
|
||||||
return;
|
|
||||||
pipe_wait:
|
|
||||||
musb_set_active_ep(old_ep_idx);
|
|
||||||
musb_urb_waitup(urb);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user