歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

Solaris USB callback的處理方法


usba_init_pipe_handle()中為這個新的pipe創建一個taskq。
usba_async_ph_req()會把一個task dispatch到這個taskq上。usba_async_ph_req()被usba_hcdi_cb()調用,而usba_hcdi_cb()是usba內部一個公共函數,每個host controller driver的callback都會調用到這個函數。
舉例來說,ehci中ehci_hcdi_callback調用了這個函數。對於從底層得到的數據,簡單的流程是這樣的:
ehci_intr()(ehci ISR)-->ehci_traverse_active_qtd_list()-->ehci_handle_normal_qtd()--> tw_handle_qtd-->ehci_handle_bulk_qtd()(e.g.)-->ehci_hcdi_callback() -->usba_hcdi_cb() -->usba_async_ph_req() 在這個函數中,需要處理的數據被放到了這個pipe的taskq上。task的處理函數hcdi_do_cb()會調用每個request的callback,從而完成一次數據傳輸。
從上層來的request:
usb_pipe_ctrl_xfer()--> ehci_hcdi_pipe_ctrl_xfer() -->ehci_insert_ctrl_req() -->ehci_insert_qtd() --> ehci_insert_qtd_into_active_qtd_list()
Copyright © Linux教程網 All Rights Reserved