//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_bufferdma_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 */};
USB urb
最新推荐文章于 2024-07-02 00:11:17 发布