最終更新:2021-03-03 (水) 22:22:07 (1120d)
Linux/USBガジェット/構造体
主な構造体
usb_gadget - デバイス自体
- Linux/USBコントローラドライバ(r8a66597とかdwc3)のメンバ。
struct usb_gadget { struct work_struct work; /* readonly to gadget driver */ const struct usb_gadget_ops *ops; struct usb_ep *ep0; struct list_head ep_list; /* of usb_ep */ enum usb_device_speed speed; enum usb_device_speed max_speed; enum usb_device_state state; const char *name; struct device dev; unsigned out_epnum; unsigned in_epnum; unsigned sg_supported: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; unsigned quirk_ep_out_aligned_size:1; };
- usb_gadget_ops
- usb_ep
usb_gadget_driver - デバイスの機能の管理
- driver for usb 'slave' devices
struct usb_gadget_driver { char *function; enum usb_device_speed max_speed; int (*bind)(struct usb_gadget *gadget, struct usb_gadget_driver *driver); void (*unbind)(struct usb_gadget *); int (*setup)(struct usb_gadget *, const struct usb_ctrlrequest *); void (*disconnect)(struct usb_gadget *); void (*suspend)(struct usb_gadget *); void (*resume)(struct usb_gadget *); /* FIXME support safe rmmod */ struct device_driver driver; };
- usb_gadget_driver.bind
- usb_gadget_driver.setup
usb_ep - ハードウェアの管理
- device side representation of USB endpoint
struct usb_ep { void *driver_data; const char *name; const struct usb_ep_ops *ops; struct list_head ep_list; unsigned maxpacket:16; unsigned maxpacket_limit:16; unsigned max_streams:16; unsigned mult:2; unsigned maxburst:5; u8 address; const struct usb_endpoint_descriptor *desc; const struct usb_ss_ep_comp_descriptor *comp_desc; };
- usb_ep_ops
- usb_endpoint_descriptor
- usb_ss_ep_comp_descriptor?
usb_request - 転送の管理
- holds essential information for transfers.
struct usb_request { void *buf; unsigned length; dma_addr_t dma; struct scatterlist *sg; unsigned num_sgs; unsigned num_mapped_sgs; unsigned stream_id:16; 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; };
- usb_request.complete?