#ifndef __LINUX_USB_H#define __LINUX_USB_H#include<linux/mod_devicetable.h>#include<linux/usb_ch9.h>#define USB_MAJOR 180#define USB_DEVICE_MAJOR 189#ifdef __KERNEL__#include<linux/errno.h> /* for -ENODEV */#include<linux/delay.h> /* for mdelay() */#include<linux/interrupt.h> /* for in_interrupt() */#include<linux/list.h> /* for struct list_head */#include<linux/kref.h> /* for struct kref */#include<linux/device.h> /* for struct device */#include<linux/fs.h> /* for struct file_operations */#include<linux/completion.h> /* for struct completion */#include<linux/sched.h> /* for current && schedule_timeout */#include<linux/mutex.h> /* for struct mutex */structusb_device;structusb_driver;/*-------------------------------------------------------------------------*//* * Host-side wrappers for standard USB descriptors ... these are parsed * from the data provided by devices. Parsing turns them from a flat * sequence of descriptors into a hierarchy: * * - devices have one (usually) or more configs; * - configs have one (often) or more interfaces; * - interfaces have one (usually) or more settings; * - each interface setting has zero or (usually) more endpoints. * * And there might be other descriptors mixed in with those. * * Devices may also have class-specific or vendor-specific descriptors. */structep_device;/** * struct usb_host_endpoint - host-side endpoint descriptor and queue * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder * @urb_list: urbs queued to this endpoint; maintained by usbcore * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) * with one or more transfer descriptors (TDs) per urb * @ep_dev: ep_device for sysfs info * @extra: descriptors following this endpoint in the configuration * @extralen: how many bytes of "extra" are valid * * USB requests are always queued to a given endpoint, identified by a * descriptor within an active interface in a given USB configuration. */structusb_host_endpoint{structusb_endpoint_descriptordesc;structlist_headurb_list;void*hcpriv;structep_device*ep_dev;/* For sysfs info */unsignedchar*extra;/* Extra descriptors */intextralen;};/* host-side wrapper for one interface setting's parsed descriptors */structusb_host_interface{structusb_interface_descriptordesc;