USB urb

 
 
//USB Request Block:usb请求块
struct urb {
/* private: usb core and host controller only fields in the urb */
struct kref kref; /* urb引用计数 */
void *hcpriv; /* 主控制器的私有数据 */
atomic_t use_count; /* 并发的提交计数 */
atomic_t reject; /* 提交将失败*/
int unlinked; /* unlink的错误码 */
/* public: documented fields in the urb that can be used by drivers */
struct  list_head urb_list ; /* list head for use by the urb's
 * current owner */
struct  list_head anchor_list ; /* urb链表 */
struct  usb_anchor  * anchor ;
struct  usb_device  * dev ; /* 指向usb设备 */
struct  usb_host_endpoint  * ep ; /* 指向端点的数据结构,最终将取代pipe */
unsigned   int  pipe ; /* 持有端点的信息,如:端点号、方向、类型等等 */
unsigned   int  stream_id ; /* 对bluk流有效,指端点的流ID */
int  status ; /* 状态 */
unsigned   int  transfer_flags ; /* 各种flags用来指示urb如何被提交、ublink以及操作*/
        /* 传输缓冲区,对输入端口来说,该缓冲区存储输入的数据
       *对于输出端口来说,数据从缓冲区输出
      */
void   * transfer_buffer ;
//当transfer_flags 使用URB_NO_TRANSFER_DMA_MAP,优先使用 transfer_dma,而不是 transfer_buffer
dma_addr_t transfer_dma;
struct scatterlist *sg; /* 分散/搜集buffer链表 */
int num_mapped_sgs; /* (internal) 映射的sg的入口 */
int num_sgs; /* (in) sg链表中入口的数量 */
u32 transfer_buffer_length; /* (in) buffer的长度 */
u32 actual_length; /* (return) 实际传输的长度 */
unsigned char *setup_packet; /* (in)仅用于控制传输,指向8 byte,就是usb协议里面分析的那8个控制字节*/ 
dma_addr_t setup_dma; /* (in) dma addr for setup_packet */
int start_frame; /* (modify)返回同步传输的首帧 */
int number_of_packets; /* (in) 同步传输的包的数量 */
int interval; /* (modify) 指定中断初始或者同步传输的查询周期
 * (INT/ISO) */
int error_count; /* (return) 同步传输的错误数 */
void *context; /* (in) context for completion */
usb_complete_t complete; /* (in) 完成函数 */
         //用于提供同步传输缓冲区数组,并且搜集每个缓冲区的传输状态
struct usb_iso_packet_descriptor iso_frame_desc[0];
/* (in) ISO ONLY */
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值