⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb.h

📁 blackfin 的 usb devise 的代码 很基础
💻 H
📖 第 1 页 / 共 4 页
字号:
#ifndef __LINUX_USB_H#define __LINUX_USB_H#include <mod_devicetable.h>#include <usb_ch9.h>#include <types.h>#define USB_MAJOR			180#define USB_DEVICE_MAJOR		189#define NULL (0)#ifdef __KERNEL__struct device {	void *driver;};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: 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. */struct usb_host_endpoint {	struct usb_endpoint_descriptor	desc;	struct list_head		urb_list;	void				*hcpriv;	struct ep_device 		*ep_dev;	/* For sysfs info */	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()) * @is_active: flag set when the interface is bound and not suspended. * @needs_remote_wakeup: flag set when the driver requires remote-wakeup *	capability during autosuspend. * @dev: driver model's view of this device * @class_dev: driver model's class view of this device. * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not *	allowed unless the counter is 0. * * 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 */	unsigned is_active:1;		/* the interface is not suspended */	unsigned needs_remote_wakeup:1;	/* driver requires remote wakeup */	struct device dev;		/* interface specific device info */	struct class_device *class_dev;	int pm_usage_cnt;		/* usage counter for autosuspend */};#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 userspace tools).  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;		/* iConfiguration string, if present */	/* 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)/* ----------------------------------------------------------------------- *//* 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 uses_dma;			/* Does the host controller use DMA? */	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_device *root_hub;	/* Root hub */	struct list_head bus_list;	/* list of busses */	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 */	struct class_device *class_dev;	/* class device for this bus */#if defined(CONFIG_USB_MON)	struct mon_bus *mon_bus;	/* non-null when associated */	int monitored;			/* non-zero when monitored */#endif};/* ----------------------------------------------------------------------- *//* This is arbitrary. * From USB 2.0 spec Table 11-13, offset 7, a hub can * have up to 255 ports. The most yet reported is 10. * * Current Wireless USB host hardware (Intel i1480 for example) allows * up to 22 devices to connect. Upcoming hardware might raise that * limit. Because the arrays need to add a bit for hub status data, we * do 31, so plus one evens out to four bytes. */#define USB_MAXCHILDREN		(31)struct usb_tt;/* * struct usb_device - kernel's representation of a USB device * * FIXME: Write the kerneldoc! * * Usbcore drivers should not set usbdev->state directly.  Instead use * usb_set_device_state(). */struct usb_device {	int		devnum;		/* Address on USB bus */	char		devpath [16];	/* Use in messages: /port/port/... */	enum usb_device_state	state;	/* configured, not attached, etc */	enum usb_device_speed	speed;	/* high/full/low (or error) */	struct usb_tt	*tt; 		/* low/full speed dev, highspeed hub */	int		ttport;		/* device port on that tt hub */	unsigned int toggle[2];		/* one bit for each endpoint					 * ([0] = IN, [1] = OUT) */	struct usb_device *parent;	/* our hub, unless we're the root */	struct usb_bus *bus;		/* Bus we're part of */	struct usb_host_endpoint ep0;	struct device dev;		/* Generic device interface */ 	struct usb_device_descriptor descriptor;/* Descriptor */	struct usb_host_config *config;	/* All of the configs */	struct usb_host_config *actconfig;/* the active configuration */	struct usb_host_endpoint *ep_in[16];	struct usb_host_endpoint *ep_out[16];	char **rawdescriptors;		/* Raw descriptors for each config */	unsigned short bus_mA;		/* Current available from the bus */	u8 portnum;			/* Parent port number (origin 1) */

⌨️ 快捷键说明

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