usb.h

来自「此工具是arm-linux-GCC交叉编译工具(cross-3.4.4)」· C头文件 代码 · 共 1,156 行 · 第 1/4 页

H
1,156
字号
#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/config.h>#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 */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 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 * @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. */struct usb_host_endpoint {	struct usb_endpoint_descriptor	desc;	struct list_head		urb_list;	void				*hcpriv;	unsigned char *extra;   /* Extra descriptors */	int extralen;};/* host-side wrapper for one interface setting's parsed descriptors */struct usb_host_interface {	struct usb_interface_descriptor	desc;	/* array of desc.bNumEndpoint endpoints associated with this	 * interface setting.  these will be in no particular order.	 */	struct usb_host_endpoint *endpoint;	char *string;		/* iInterface string, if present */	unsigned char *extra;   /* Extra descriptors */	int extralen;};enum usb_interface_condition {	USB_INTERFACE_UNBOUND = 0,	USB_INTERFACE_BINDING,	USB_INTERFACE_BOUND,	USB_INTERFACE_UNBINDING,};/** * struct usb_interface - what usb device drivers talk to * @altsetting: array of interface structures, one for each alternate * 	setting that may be selected.  Each one includes a set of * 	endpoint configurations.  They will be in no particular order. * @num_altsetting: number of altsettings defined. * @cur_altsetting: the current altsetting. * @driver: the USB driver that is bound to this interface. * @minor: the minor number assigned to this interface, if this *	interface is bound to a driver that uses the USB major number. *	If this interface does not use the USB major, this field should *	be unused.  The driver should set this value in the probe() *	function of the driver, after it has been assigned a minor *	number from the USB core by calling usb_register_dev(). * @condition: binding state of the interface: not bound, binding *	(in probe()), bound to a driver, or unbinding (in disconnect()) * @dev: driver model's view of this device * @class_dev: driver model's class view of this device. * * USB device drivers attach to interfaces on a physical device.  Each * interface encapsulates a single high level function, such as feeding * an audio stream to a speaker or reporting a change in a volume control. * Many USB devices only have one interface.  The protocol used to talk to * an interface's endpoints can be defined in a usb "class" specification, * or by a product's vendor.  The (default) control endpoint is part of * every interface, but is never listed among the interface's descriptors. * * The driver that is bound to the interface can use standard driver model * calls such as dev_get_drvdata() on the dev member of this structure. * * Each interface may have alternate settings.  The initial configuration * of a device sets altsetting 0, but the device driver can change * that setting using usb_set_interface().  Alternate settings are often * used to control the the use of periodic endpoints, such as by having * different endpoints use different amounts of reserved USB bandwidth. * All standards-conformant USB devices that use isochronous endpoints * will use them in non-default settings. * * The USB specification says that alternate setting numbers must run from * 0 to one less than the total number of alternate settings.  But some * devices manage to mess this up, and the structures aren't necessarily * stored in numerical order anyhow.  Use usb_altnum_to_altsetting() to * look up an alternate setting in the altsetting array based on its number. */struct usb_interface {	/* array of alternate settings for this interface,	 * stored in no particular order */	struct usb_host_interface *altsetting;	struct usb_host_interface *cur_altsetting;	/* the currently					 * active alternate setting */	unsigned num_altsetting;	/* number of alternate settings */	int minor;			/* minor number this interface is bound to */	enum usb_interface_condition condition;		/* state of binding */	struct device dev;		/* interface specific device info */	struct class_device *class_dev;};#define	to_usb_interface(d) container_of(d, struct usb_interface, dev)#define	interface_to_usbdev(intf) \	container_of(intf->dev.parent, struct usb_device, dev)static inline void *usb_get_intfdata (struct usb_interface *intf){	return dev_get_drvdata (&intf->dev);}static inline void usb_set_intfdata (struct usb_interface *intf, void *data){	dev_set_drvdata(&intf->dev, data);}struct usb_interface *usb_get_intf(struct usb_interface *intf);void usb_put_intf(struct usb_interface *intf);/* this maximum is arbitrary */#define USB_MAXINTERFACES	32/** * struct usb_interface_cache - long-term representation of a device interface * @num_altsetting: number of altsettings defined. * @ref: reference counter. * @altsetting: variable-length array of interface structures, one for *	each alternate setting that may be selected.  Each one includes a *	set of endpoint configurations.  They will be in no particular order. * * These structures persist for the lifetime of a usb_device, unlike * struct usb_interface (which persists only as long as its configuration * is installed).  The altsetting arrays can be accessed through these * structures at any time, permitting comparison of configurations and * providing support for the /proc/bus/usb/devices pseudo-file. */struct usb_interface_cache {	unsigned num_altsetting;	/* number of alternate settings */	struct kref ref;		/* reference counter */	/* variable-length array of alternate settings for this interface,	 * stored in no particular order */	struct usb_host_interface altsetting[0];};#define	ref_to_usb_interface_cache(r) \		container_of(r, struct usb_interface_cache, ref)#define	altsetting_to_usb_interface_cache(a) \		container_of(a, struct usb_interface_cache, altsetting[0])/** * struct usb_host_config - representation of a device's configuration * @desc: the device's configuration descriptor. * @string: pointer to the cached version of the iConfiguration string, if *	present for this configuration. * @interface: array of pointers to usb_interface structures, one for each *	interface in the configuration.  The number of interfaces is stored *	in desc.bNumInterfaces.  These pointers are valid only while the *	the configuration is active. * @intf_cache: array of pointers to usb_interface_cache structures, one *	for each interface in the configuration.  These structures exist *	for the entire life of the device. * @extra: pointer to buffer containing all extra descriptors associated *	with this configuration (those preceding the first interface *	descriptor). * @extralen: length of the extra descriptors buffer. * * USB devices may have multiple configurations, but only one can be active * at any time.  Each encapsulates a different operational environment; * for example, a dual-speed device would have separate configurations for * full-speed and high-speed operation.  The number of configurations * available is stored in the device descriptor as bNumConfigurations. * * A configuration can contain multiple interfaces.  Each corresponds to * a different function of the USB device, and all are available whenever * the configuration is active.  The USB standard says that interfaces * are supposed to be numbered from 0 to desc.bNumInterfaces-1, but a lot * of devices get this wrong.  In addition, the interface array is not * guaranteed to be sorted in numerical order.  Use usb_ifnum_to_if() to * look up an interface entry based on its number. * * Device drivers should not attempt to activate configurations.  The choice * of which configuration to install is a policy decision based on such * considerations as available power, functionality provided, and the user's * desires (expressed through hotplug scripts).  However, drivers can call * usb_reset_configuration() to reinitialize the current configuration and * all its interfaces. */struct usb_host_config {	struct usb_config_descriptor	desc;	char *string;	/* the interfaces associated with this configuration,	 * stored in no particular order */	struct usb_interface *interface[USB_MAXINTERFACES];	/* Interface information available even when this is not the	 * active configuration */	struct usb_interface_cache *intf_cache[USB_MAXINTERFACES];	unsigned char *extra;   /* Extra descriptors */	int extralen;};int __usb_get_extra_descriptor(char *buffer, unsigned size,	unsigned char type, void **ptr);#define usb_get_extra_descriptor(ifpoint,type,ptr)\	__usb_get_extra_descriptor((ifpoint)->extra,(ifpoint)->extralen,\		type,(void**)ptr)/* -------------------------------------------------------------------------- */struct usb_operations;/* USB device number allocation bitmap */struct usb_devmap {	unsigned long devicemap[128 / (8*sizeof(unsigned long))];};/* * Allocated per bus (tree of devices) we have: */struct usb_bus {	struct device *controller;	/* host/master side hardware */	int busnum;			/* Bus number (in order of reg) */	char *bus_name;			/* stable id (PCI slot_name etc) */	u8 otg_port;			/* 0, or number of OTG/HNP port */	unsigned is_b_host:1;		/* true during some HNP roleswitches */	unsigned b_hnp_enable:1;	/* OTG: did A-Host enable HNP? */	int devnum_next;		/* Next open device number in round-robin allocation */	struct usb_devmap devmap;	/* device address allocation map */	struct usb_operations *op;	/* Operations (specific to the HC) */	struct usb_device *root_hub;	/* Root hub */	struct list_head bus_list;	/* list of busses */	void *hcpriv;                   /* Host Controller private data */	int bandwidth_allocated;	/* on this bus: how much of the time					 * reserved for periodic (intr/iso)					 * requests is used, on average?					 * Units: microseconds/frame.					 * Limits: Full/low speed reserve 90%,					 * while high speed reserves 80%.					 */	int bandwidth_int_reqs;		/* number of Interrupt requests */	int bandwidth_isoc_reqs;	/* number of Isoc. requests */	struct dentry *usbfs_dentry;	/* usbfs dentry entry for the bus */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?