1、ohci
基于OHCI的USB主机 —— OHCI(HCCA)_Rainman的技术博客_51CTO博客
s3c2440的USB主机控制器_zhaocj的博客-CSDN博客
1.1、ED
驱动ohci.h对ed结构定义:
struct ed {
__hc32 hwINFO; /* endpoint config bitmap */
__hc32 hwTailP; /* tail of TD list */
__hc32 hwHeadP; /* head of TD list (hc r/w) */
__hc32 hwNextED; /* next ED in list */
/* rest are purely for the driver's use */
dma_addr_t dma; /* addr of ED */
struct td *dummy; /* next TD to activate */
struct ed *ed_next; /* on schedule or rm_list */
struct ed *ed_prev; /* for non-interrupt EDs */
struct list_head td_list; /* "shadow list" of our TDs */
struct list_head in_use_list;
u8 state; /* ED_{IDLE,UNLINK,OPER} */
u8 type; /* PIPE_{BULK,...} */
u8 branch;
u16 interval;
u16 load;
u16 last_iso; /* iso only */
u16 tick;
unsigned takeback_wdh_cnt;
struct td *pending_td;
} __attribute__ ((aligned(16)));
hc只会读取ed的前四个字段的数据,后面的字段用于hcd(主机控制器驱动),也就是hc在给ed分配的一块大的内存中,只读取约定的开头前16个字节的数据。
1.2、TD
驱动ohci.h对td结构定义:
struct td {
/* first fields are hardware-specified */
__hc32 hwINFO; /* transfer info bitmask */
__hc32 hwCBP; /* Current Buffer Pointer (or 0) */
__hc32 hwNextTD; /* Next TD Pointer */
__hc32 hwBE; /* Memory Buffer End Pointer */
#define MAXPSW 2
__hc16 hwPSW [MAXPSW];
/* rest are purely for the driver's use */
__u8 index;
struct ed *ed;
struct td *td_hash; /* dma-->td hashtable */
struct td *next_dl_td;
struct urb *urb;
dma_addr_t td_dma; /* addr of this TD */
dma_addr_t data_dma; /* addr of data it points to */
struct list_head td_list; /* "shadow list", TDs on same ED */
} __attribute__ ((aligned(32))); /* c/b/i need 16; only iso needs 32 */
相同的,hc只会读取td的前四个字段的数据,后面的字段用于hcd(主机控制器驱动),也就是hc在给td分配的一块大的内存中,只读取约定的开头前16个字节的数据
2、ehci
基于EHCI协议的USB2.0主机传输调度的设计与实现 - 道客巴巴
linux ehci ehci_urb_enqueue之qh_urb_transaction()分析 【史上最强大分析】_CH_Qing的博客-CSDN博客
2.1、流程简述:
2.2、参考文章:
基于EHCI协议的USB2.0主机传输调度的设计与实现 - 道客巴巴
linux ehci ehci_urb_enqueue之qh_urb_transaction()分析 【史上最强大分析】_CH_Qing的博客-CSDN博客
3、usb事务传输:
(转)linux设备驱动之USB数据传输分析 二 - 我有一壶酒 - 博客园
4、端点:
USB设备控制器端点缓冲区的优化技术 - 接口/总线/驱动 - 电子发烧友网
摘抄:从物理层的角度来看,端点是一块存储器区域(FIFO),用以缓冲实际接收到或待发送的数据包。