linux usb声卡 submit urb,Linux 內核提交 urb

一旦 urb 被正確地創建,並且被 USB 驅動初始化, 它已准備好被提交給 USB 核心來發送 出到 USB 設備. 這通過調用函數 usb_submit_urb 實現:

int usb_submit_urb(struct urb *urb, int mem_flags);

urb 參數是一個指向 urb 的指針, 它要被發送到設備. mem_flags 參數等同於傳遞給 kmalloc 調用的同樣的參數, 並且用來告訴 USB 核心如何及時分配任何內存緩沖在這個 時間.

在 urb 被成功提交給 USB 核心之后, 應當從不試圖存取 urb 結構的任何成員直到完成 函數被調用.

因為函數 usb_submit_urb 可被在任何時候被調用(包括從一個中斷上下文), mem_flags 變量的指定必須正確. 真正只有 3 個有效值可用, 根據何時 usb_submit_urb 被調用:

GFP_ATOMIC

這個值應當被使用無論何時下面的是真:

· 調用者處於一個 urb 完成處理者, 一個中斷, 一個后半部, 一個 tasklet, 或者一個時鍾回調.

調用者持有一個自旋鎖或者讀寫鎖. 注意如果正持有一個旗標, 這個值不必要.

current->state 不是 TASK_RUNNING. 狀態一直是 TASK_RUNNING 除非驅動已 自己改變 current 狀態.

GFP_NOIO

這個值應當被使用, 如果驅動在塊 I/O 補丁中. 它還應當用在所有的存儲類型的 錯誤處理補丁中.

GFP_KERNEL

這應當用在所有其他的情況中, 不屬於之前提到的類別.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值