#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 */struct usb_device;struct usb_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. */struct ep_device;/** * struct usb_host_endpoint - host-side endpoint descriptor and queue * @desc: descrip