USB UDC与gadget驱动

 

这里的USB设备控制器(UDC)驱动指作为其他usb主机控制器外设的usb硬件设备上底层硬件控制器的驱动,该硬件和驱动负责将一个usb设备依附于一个usb主机控制器上。

在usb设备控制器于gadget驱动中,我们主要关心几个核心的数据结构。描述一个usb设备控制器的usb_gadget,描述一个gadget驱动的usb_gadget_driver,表示一个传输请求的usb_request,描述一个端点的usb_ep,描述端点操作的usb_ep_ops结构体

struct usb_request {
 void   *buf;
 unsigned  length;
 dma_addr_t  dma;

 unsigned  no_interrupt:1;
 unsigned  zero:1;
 unsigned  short_not_ok:1;

 void   (*complete)(struct usb_ep *ep,
     struct usb_request *req);
 void   *context;
 struct list_head list;

 int   status;
 unsigned  actual;
};

 

struct usb_ep_ops {
 int (*enable) (struct usb_ep *ep,
  const struct usb_endpoint_descriptor *desc);
 int (*disable) (struct usb_ep *ep);

 struct usb_request *(*alloc_request) (struct usb_ep *ep,
  gfp_t gfp_flags);
 void (*free_request) (struct usb_ep *ep, struct usb_request *req);

 int (*queue) (struct usb_ep *ep, struct usb_request *req,
  gfp_t gfp_flags);
 int (*dequeue) (struct usb_ep *ep, struct usb_request *req);

 int (*set_halt) (struct usb_ep *ep, int value);
 int (*set_wedge) (struct usb_ep *ep);

 int (*fifo_status) (struct usb_ep *ep);
 void (*fifo_flush) (struct usb_ep *ep);
};

 

struct usb_ep {
 void   *driver_data;

 const char  *name;
 const struct usb_ep_ops *ops;
 struct list_head ep_list;
 unsigned  maxpacket:16;
};

struct usb_gadget {
 
 const struct usb_gadget_ops *ops;
 struct usb_ep   *ep0;
 struct list_head  ep_list; 
 enum usb_device_speed  speed;
 unsigned   is_dualspeed:1;
 unsigned   is_otg:1;
 unsigned   is_a_peripheral:1;
 unsigned   b_hnp_enable:1;
 unsigned   a_hnp_support:1;
 unsigned   a_alt_hnp_support:1;
 const char   *name;
 struct device   dev;
};

struct usb_gadget_driver {
 char   *function;
 enum usb_device_speed speed;
 int   (*bind)(struct usb_gadget *);
 void   (*unbind)(struct usb_gadget *);
 int   (*setup)(struct usb_gadget *,
     const struct usb_ctrlrequest *);
 void   (*disconnect)(struct usb_gadget *);
 void   (*suspe

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值