From 078e21066cd7ff683846a069888360babc506b6a Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Thu, 28 Mar 2024 20:59:46 +0800 Subject: [PATCH] mark errorcode with USB_ERR_SHUTDOWN when kill urb --- port/dwc2/usb_hc_dwc2.c | 4 ++-- port/ehci/usb_hc_ehci.c | 2 +- port/musb/usb_hc_musb.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/port/dwc2/usb_hc_dwc2.c b/port/dwc2/usb_hc_dwc2.c index cafe36cf..51c08644 100644 --- a/port/dwc2/usb_hc_dwc2.c +++ b/port/dwc2/usb_hc_dwc2.c @@ -808,10 +808,10 @@ int usbh_kill_urb(struct usbh_urb *urb) chan->urb = NULL; urb->hcpriv = NULL; + urb->errorcode = -USB_ERR_SHUTDOWN; if (urb->timeout) { urb->timeout = 0; - urb->errorcode = -USB_ERR_SHUTDOWN; usb_osal_sem_give(chan->waitsem); } else { dwc2_chan_free(chan); @@ -936,7 +936,7 @@ static void dwc2_outchan_irq_handler(struct usbh_bus *bus, uint8_t ch_num) uint32_t has_used_packets = chan->num_packets - ((USB_OTG_HC(ch_num)->HCTSIZ & USB_OTG_HCTSIZ_PKTCNT) >> 19); /* how many packets have used */ urb->actual_length += (has_used_packets - 1) * USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize) + count; //the same with urb->actual_length += chan->xferlen; - + uint8_t data_toggle = ((USB_OTG_HC(ch_num)->HCTSIZ & USB_OTG_HCTSIZ_DPID) >> USB_OTG_HCTSIZ_DPID_Pos); if (data_toggle == HC_PID_DATA0) { diff --git a/port/ehci/usb_hc_ehci.c b/port/ehci/usb_hc_ehci.c index eab31e59..8d39dc6e 100644 --- a/port/ehci/usb_hc_ehci.c +++ b/port/ehci/usb_hc_ehci.c @@ -1177,11 +1177,11 @@ int usbh_kill_urb(struct usbh_urb *urb) qh = (struct ehci_qh_hw *)urb->hcpriv; urb->hcpriv = NULL; + urb->errorcode = -USB_ERR_SHUTDOWN; qh->urb = NULL; if (urb->timeout) { urb->timeout = 0; - urb->errorcode = -USB_ERR_SHUTDOWN; usb_osal_sem_give(qh->waitsem); } else { ehci_qh_free(bus, qh); diff --git a/port/musb/usb_hc_musb.c b/port/musb/usb_hc_musb.c index 907ce048..bddbf344 100644 --- a/port/musb/usb_hc_musb.c +++ b/port/musb/usb_hc_musb.c @@ -701,11 +701,11 @@ int usbh_kill_urb(struct usbh_urb *urb) pipe = (struct musb_pipe *)urb->hcpriv; urb->hcpriv = NULL; + urb->errorcode = -USB_ERR_SHUTDOWN; pipe->urb = NULL; if (urb->timeout) { urb->timeout = 0; - urb->errorcode = -USB_ERR_SHUTDOWN; usb_osal_sem_give(pipe->waitsem); } else { musb_pipe_free(pipe);