'\" t .\" Title: struct usb_driver .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: January 2017 .\" Manual: Host-Side Data Types and Macros .\" Source: Kernel Hackers Manual 4.8.15 .\" Language: English .\" .TH "STRUCT USB_DRIVER" "9" "January 2017" "Kernel Hackers Manual 4\&.8\&." "Host-Side Data Types and Macro" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" struct_usb_driver \- identifies USB interface driver to usbcore .SH "SYNOPSIS" .sp .nf struct usb_driver { const char * name; int (* probe) (struct usb_interface *intf,const struct usb_device_id *id); void (* disconnect) (struct usb_interface *intf); int (* unlocked_ioctl) (struct usb_interface *intf, unsigned int code,void *buf); int (* suspend) (struct usb_interface *intf, pm_message_t message); int (* resume) (struct usb_interface *intf); int (* reset_resume) (struct usb_interface *intf); int (* pre_reset) (struct usb_interface *intf); int (* post_reset) (struct usb_interface *intf); const struct usb_device_id * id_table; struct usb_dynids dynids; struct usbdrv_wrap drvwrap; unsigned int no_dynamic_id:1; unsigned int supports_autosuspend:1; unsigned int disable_hub_initiated_lpm:1; unsigned int soft_unbind:1; }; .fi .SH "MEMBERS" .PP name .RS 4 The driver name should be unique among USB drivers, and should normally be the same as the module name\&. .RE .PP probe .RS 4 Called to see if the driver is willing to manage a particular interface on a device\&. If it is, probe returns zero and uses \fBusb_set_intfdata\fR to associate driver\-specific data with the interface\&. It may also use \fBusb_set_interface\fR to specify the appropriate altsetting\&. If unwilling to manage the interface, return \-ENODEV, if genuine IO errors occurred, an appropriate negative errno value\&. .RE .PP disconnect .RS 4 Called when the interface is no longer accessible, usually because its device has been (or is being) disconnected or the driver module is being unloaded\&. .RE .PP unlocked_ioctl .RS 4 Used for drivers that want to talk to userspace through the \(lqusbfs\(rq filesystem\&. This lets devices provide ways to expose information to user space regardless of where they do (or don\*(Aqt) show up otherwise in the filesystem\&. .RE .PP suspend .RS 4 Called when the device is going to be suspended by the system either from system sleep or runtime suspend context\&. The return value will be ignored in system sleep context, so do NOT try to continue using the device if suspend fails in this case\&. Instead, let the resume or reset\-resume routine recover from the failure\&. .RE .PP resume .RS 4 Called when the device is being resumed by the system\&. .RE .PP reset_resume .RS 4 Called when the suspended device has been reset instead of being resumed\&. .RE .PP pre_reset .RS 4 Called by \fBusb_reset_device\fR when the device is about to be reset\&. This routine must not return until the driver has no active URBs for the device, and no more URBs may be submitted until the post_reset method is called\&. .RE .PP post_reset .RS 4 Called by \fBusb_reset_device\fR after the device has been reset .RE .PP id_table .RS 4 USB drivers use ID table to support hotplugging\&. Export this with MODULE_DEVICE_TABLE(usb,\&.\&.\&.)\&. This must be set or your driver\*(Aqs probe function will never get called\&. .RE .PP dynids .RS 4 used internally to hold the list of dynamically added device ids for this driver\&. .RE .PP drvwrap .RS 4 Driver\-model core structure wrapper\&. .RE .PP no_dynamic_id .RS 4 if set to 1, the USB core will not allow dynamic ids to be added to this driver by preventing the sysfs file from being created\&. .RE .PP supports_autosuspend .RS 4 if set to 0, the USB core will not allow autosuspend for interfaces bound to this driver\&. .RE .PP disable_hub_initiated_lpm .RS 4 if set to 1, the USB core will not allow hubs to initiate lower power link state transitions when an idle timeout occurs\&. Device\-initiated USB 3\&.0 link PM will still be allowed\&. .RE .PP soft_unbind .RS 4 if set to 1, the USB core will not kill URBs and disable endpoints before calling the driver\*(Aqs disconnect method\&. .RE .SH "DESCRIPTION" .PP USB interface drivers must provide a name, \fBprobe\fR and \fBdisconnect\fR methods, and an id_table\&. Other driver fields are optional\&. .PP The id_table is used in hotplugging\&. It holds a set of descriptors, and specialized data may be associated with each entry\&. That table is used by both user and kernel mode hotplugging support\&. .PP The \fBprobe\fR and \fBdisconnect\fR methods are called in a context where they can sleep, but they should avoid abusing the privilege\&. Most work to connect to a device should be done when the device is opened, and undone at the last close\&. The disconnect code needs to address concurrency issues with respect to \fBopen\fR and \fBclose\fR methods, as well as forcing all pending I/O requests to complete (by unlinking them as necessary, and blocking until the unlinks complete)\&. .SH "COPYRIGHT" .br