Beispiel #1
0
//--------------------------------------------------------------
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;
}
Beispiel #2
0
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;
}