//-------------------------------------------------------------- static uint32_t USB_OTG_USBH_handle_hc_ISR (USB_OTG_CORE_HANDLE *pdev) { USB_OTG_HAINT_TypeDef haint; USB_OTG_HCCHAR_TypeDef hcchar; uint32_t i = 0; uint32_t retval = 0; /* Clear appropriate bits in HCINTn to clear the interrupt bit in * GINTSTS */ haint.d32 = USB_OTG_ReadHostAllChannels_intr(pdev); for (i = 0; i < pdev->cfg.host_channels ; i++) { if (haint.b.chint & (1 << i)) { hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[i]->HCCHAR); if (hcchar.b.epdir) { retval |= USB_OTG_USBH_handle_hc_n_In_ISR (pdev, i); } else { retval |= USB_OTG_USBH_handle_hc_n_Out_ISR (pdev, i); } } } return retval; }
static uint32_t inline USB_OTG_USBH_handle_hc_ISR(USB_OTG_CORE_HANDLE *pdev) { USB_OTG_HAINT_TypeDef haint; USB_OTG_HCCHAR_TypeDef hcchar; uint32_t i = 0; uint32_t retval = 0, need_wake_up = 0; /* Clear appropriate bits in HCINTn to clear the interrupt bit in * GINTSTS */ // p_dbg_enter; haint.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HAINT); #if 0 if (haint.b.chint & (1 << 0)){ hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[0] ->HCCHAR); if ( hcchar.b.epdir) retval = USB_OTG_USBH_handle_hc_n_In_ISR(pdev, 0); else retval = USB_OTG_USBH_handle_hc_n_Out_ISR(pdev, 0); if (retval){ need_wake_up = 1; wake_up_urb(pdev, 0); } } if (haint.b.chint & (1 << 1)){ hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[1] ->HCCHAR); if ( hcchar.b.epdir) retval = USB_OTG_USBH_handle_hc_n_In_ISR(pdev, 1); else retval = USB_OTG_USBH_handle_hc_n_Out_ISR(pdev, 1); if (retval){ need_wake_up = 1; wake_up_urb(pdev, 1); } } if (haint.b.chint & (1 << 2)){ hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[2] ->HCCHAR); if ( hcchar.b.epdir) retval = USB_OTG_USBH_handle_hc_n_In_ISR(pdev, 2); else retval = USB_OTG_USBH_handle_hc_n_Out_ISR(pdev, 2); if (retval){ need_wake_up = 1; wake_up_urb(pdev, 2); } } if (haint.b.chint & (1 << 3)){ hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[3] ->HCCHAR); if ( hcchar.b.epdir) retval = USB_OTG_USBH_handle_hc_n_In_ISR(pdev, 3); else retval = USB_OTG_USBH_handle_hc_n_Out_ISR(pdev, 3); if (retval){ need_wake_up = 1; wake_up_urb(pdev, 3); } } if (haint.b.chint & (1 << 3)){ hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[3] ->HCCHAR); if ( hcchar.b.epdir) retval = USB_OTG_USBH_handle_hc_n_In_ISR(pdev, 3); else retval = USB_OTG_USBH_handle_hc_n_Out_ISR(pdev, 3); if (retval){ need_wake_up = 1; wake_up_urb(pdev, 3); } } #endif for(i = 0;i < 8; i++) { if (haint.b.chint & (1 << i)){ hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[i] ->HCCHAR); if ( hcchar.b.epdir) retval = USB_OTG_USBH_handle_hc_n_In_ISR(pdev, i); else retval = USB_OTG_USBH_handle_hc_n_Out_ISR(pdev, i); if (retval){ need_wake_up = 1; wake_up_urb(pdev, i); } } } return need_wake_up; }