DWC3 驱动程序¶
待办事项¶
请在阅读时选择一些事项:)
将中断处理程序转换为按端点线程中断
事实证明,某些 DWC3 命令需要约 1 毫秒才能完成。目前我们自旋等待命令完成,这很糟糕。
实现思路
DWC 核心为每个端点的中断实现一个解复用中断芯片。中断号在探测期间分配并属于该设备。如果 MSI 提供按端点中断,则此虚拟中断芯片可以替换为“实际”中断。
中断在 usb_ep_enable() 时请求/分配,在 usb_ep_disable() 时移除。最坏情况是 32 个中断,下限是 ep0/1 的两个中断。
dwc3_send_gadget_ep_cmd()
将在 wait_for_completion_timeout() 中休眠,直到命令完成。中断处理程序分为以下几部分
设备的主处理程序遍历每个事件,并为事件调用
generic_handle_irq()
。从generic_handle_irq()
返回时,它确认事件计数器,以便中断(最终)消失。设备的线程处理程序 无
EP 中断的主处理程序读取事件并尝试处理它。所有需要休眠的操作都交给线程。事件保存在每个端点的数据结构中。我们可能需要注意,一旦将某些内容交给线程,就不要再处理事件,以免处理事件 X 优先级 Y(其中 X > Y)。
EP 中断的线程处理程序处理剩余的 EP 工作,这些工作可能会休眠,例如等待命令完成。
延迟
延迟不应增加,因为中断线程具有高优先级,并且将在用户空间中的普通任务之前运行(除非用户更改了优先级)。