linux xhci源码,第四十六篇:Linux中的USB XHCI HOST TRANSFER RING的相關數據結構 (1)

本文详细解析了USB XHCI Host中的COMMAND、EVENT与TRANSFER RING结构,介绍了TRB(Transfer Request Block)的不同类型,包括SETUP、DATA、STATUS等,并阐述了硬件与软件如何通过TRB进行数据传输的交互过程。重点讲解了多段SEGMENT链接和ISOCHTRB的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

記錄相關數據結構之前,先上一張圖,這樣就基本一目了然了

8cea517d311062ea0dc08c7d2ce79d2f.png

USB XHCI HOST有三種RING

分別為COMMAND, EVENT 與TRANSFER

這里所說的是TRANSFER RING

一個RING可能由一個或者多個SEGMENT構成

每一個SEGMENT則有多個TRB構成

多個SEGMENT的鏈接是由LINK TRB來實現的,LINK就像一個單鏈表,最后一個LINK TRB指向第一個SEGMENT,由此,形成了一個環,RING

TRANSFER TRB有以下幾種類型:

針對USB CONTROL TRANSFER的SETUP, DATA, STATUS TRBs

針對BULK, INTERRUPT, ISO TRANSFER的NORMAL TRB

針對ISO TRANSFER的ISOCH TRB (ISO TD由一個ISOCH TRB與0個或多個NORMAL TRB構成)

SW將需要硬件完成的USB傳輸,通過TRB的形式,將信息提交給硬件,放入RING當中,放入的位置為當前ENQUEUE PTR的位置,每放一個,ENQUEUE PTR向前跨一步,遇到LINK TRB,則跳轉到LINK TRB指向的位置

而硬件則按DEQUEUE PTR指向的位置,取出TRB到CACHE當中,執行該TRB,同樣,每執行一個,則ADVANCE 該 DEQUEUE PTR,遇LINK TRB,跳轉。

TD表示一個USB TRANSFER(不同於USB TRANSACTION)

在TRB當中,有一個CH BIT,如果一處TD由多個TRB構成,則軟件需要將除最后一個TRB的所有CH BIT置位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值