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                    (*suspend)(struct usb_gadget *);
        void                    (*resume)(struct usb_gadget *);

        // FIXME support safe rmmod     
        struct device_driver    driver;
};