最終更新:2021-03-03 (水) 22:22:07 (1143d)  

Linux/USBガジェット/構造体
Top / 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?