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 工作,這些工作可能會休眠,例如等待命令完成。

    延遲

    延遲不應增加,因為中斷執行緒具有高優先順序,並且將在使用者空間中的普通任務之前執行(除非使用者更改了優先順序)。