mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (100 commits) usb-storage: revert DMA-alignment change for Wireless USB USB: use reset_resume when normal resume fails usb_gadget: composite cdc gadget fault handling usb gadget: minor USBCV fix for composite framework USB: Fix bug with byte order in isp116x-hcd.c fio write/read USB: fix double kfree in ipaq in error case USB: fix build error in cdc-acm for CONFIG_PM=n USB: remove board-specific UP2OCR configuration from pxa27x-udc USB: EHCI: Reconciling USB register differences on MPC85xx vs MPC83xx USB: Fix pointer/int cast in USB devio code usb gadget: g_cdc dependso on NET USB: Au1xxx-usb: suspend/resume support. USB: Au1xxx-usb: clean up ohci/ehci bus glue sources. usbfs: don't store bad pointers in registration usbfs: fix race between open and unregister usbfs: simplify the lookup-by-minor routines usbfs: send disconnect signals when device is unregistered USB: Force unbinding of drivers lacking reset_resume or other methods USB: ohci-pnx4008: I2C cleanups and fixes USB: debug port converter does not accept more than 8 byte packets ...
This commit is contained in:
commit
93ded9b8fd
142 changed files with 11665 additions and 8993 deletions
|
|
@ -160,6 +160,7 @@ struct usb_interface {
|
|||
unsigned is_active:1; /* the interface is not suspended */
|
||||
unsigned sysfs_files_created:1; /* the sysfs attributes exist */
|
||||
unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
|
||||
unsigned needs_binding:1; /* needs delayed unbind/rebind */
|
||||
|
||||
struct device dev; /* interface specific device info */
|
||||
struct device *usb_dev;
|
||||
|
|
@ -293,7 +294,7 @@ struct usb_devmap {
|
|||
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) */
|
||||
const 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 */
|
||||
|
|
@ -497,8 +498,6 @@ extern int usb_lock_device_for_reset(struct usb_device *udev,
|
|||
|
||||
/* USB port reset for device reinitialization */
|
||||
extern int usb_reset_device(struct usb_device *dev);
|
||||
extern int usb_reset_composite_device(struct usb_device *dev,
|
||||
struct usb_interface *iface);
|
||||
|
||||
extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
|
||||
|
||||
|
|
@ -958,9 +957,9 @@ struct usbdrv_wrap {
|
|||
* @resume: Called when the device is being resumed by the system.
|
||||
* @reset_resume: Called when the suspended device has been reset instead
|
||||
* of being resumed.
|
||||
* @pre_reset: Called by usb_reset_composite_device() when the device
|
||||
* @pre_reset: Called by usb_reset_device() when the device
|
||||
* is about to be reset.
|
||||
* @post_reset: Called by usb_reset_composite_device() after the device
|
||||
* @post_reset: Called by usb_reset_device() after the device
|
||||
* has been reset
|
||||
* @id_table: USB drivers use ID table to support hotplugging.
|
||||
* Export this with MODULE_DEVICE_TABLE(usb,...). This must be set
|
||||
|
|
@ -972,6 +971,8 @@ struct usbdrv_wrap {
|
|||
* added to this driver by preventing the sysfs file from being created.
|
||||
* @supports_autosuspend: if set to 0, the USB core will not allow autosuspend
|
||||
* for interfaces bound to this driver.
|
||||
* @soft_unbind: if set to 1, the USB core will not kill URBs and disable
|
||||
* endpoints before calling the driver's disconnect method.
|
||||
*
|
||||
* USB interface drivers must provide a name, probe() and disconnect()
|
||||
* methods, and an id_table. Other driver fields are optional.
|
||||
|
|
@ -1012,6 +1013,7 @@ struct usb_driver {
|
|||
struct usbdrv_wrap drvwrap;
|
||||
unsigned int no_dynamic_id:1;
|
||||
unsigned int supports_autosuspend:1;
|
||||
unsigned int soft_unbind:1;
|
||||
};
|
||||
#define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)
|
||||
|
||||
|
|
|
|||
338
include/linux/usb/composite.h
Normal file
338
include/linux/usb/composite.h
Normal file
|
|
@ -0,0 +1,338 @@
|
|||
/*
|
||||
* composite.h -- framework for usb gadgets which are composite devices
|
||||
*
|
||||
* Copyright (C) 2006-2008 David Brownell
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_USB_COMPOSITE_H
|
||||
#define __LINUX_USB_COMPOSITE_H
|
||||
|
||||
/*
|
||||
* This framework is an optional layer on top of the USB Gadget interface,
|
||||
* making it easier to build (a) Composite devices, supporting multiple
|
||||
* functions within any single configuration, and (b) Multi-configuration
|
||||
* devices, also supporting multiple functions but without necessarily
|
||||
* having more than one function per configuration.
|
||||
*
|
||||
* Example: a device with a single configuration supporting both network
|
||||
* link and mass storage functions is a composite device. Those functions
|
||||
* might alternatively be packaged in individual configurations, but in
|
||||
* the composite model the host can use both functions at the same time.
|
||||
*/
|
||||
|
||||
#include <linux/usb/ch9.h>
|
||||
#include <linux/usb/gadget.h>
|
||||
|
||||
|
||||
struct usb_configuration;
|
||||
|
||||
/**
|
||||
* struct usb_function - describes one function of a configuration
|
||||
* @name: For diagnostics, identifies the function.
|
||||
* @strings: tables of strings, keyed by identifiers assigned during bind()
|
||||
* and by language IDs provided in control requests
|
||||
* @descriptors: Table of full (or low) speed descriptors, using interface and
|
||||
* string identifiers assigned during @bind(). If this pointer is null,
|
||||
* the function will not be available at full speed (or at low speed).
|
||||
* @hs_descriptors: Table of high speed descriptors, using interface and
|
||||
* string identifiers assigned during @bind(). If this pointer is null,
|
||||
* the function will not be available at high speed.
|
||||
* @config: assigned when @usb_add_function() is called; this is the
|
||||
* configuration with which this function is associated.
|
||||
* @bind: Before the gadget can register, all of its functions bind() to the
|
||||
* available resources including string and interface identifiers used
|
||||
* in interface or class descriptors; endpoints; I/O buffers; and so on.
|
||||
* @unbind: Reverses @bind; called as a side effect of unregistering the
|
||||
* driver which added this function.
|
||||
* @set_alt: (REQUIRED) Reconfigures altsettings; function drivers may
|
||||
* initialize usb_ep.driver data at this time (when it is used).
|
||||
* Note that setting an interface to its current altsetting resets
|
||||
* interface state, and that all interfaces have a disabled state.
|
||||
* @get_alt: Returns the active altsetting. If this is not provided,
|
||||
* then only altsetting zero is supported.
|
||||
* @disable: (REQUIRED) Indicates the function should be disabled. Reasons
|
||||
* include host resetting or reconfiguring the gadget, and disconnection.
|
||||
* @setup: Used for interface-specific control requests.
|
||||
* @suspend: Notifies functions when the host stops sending USB traffic.
|
||||
* @resume: Notifies functions when the host restarts USB traffic.
|
||||
*
|
||||
* A single USB function uses one or more interfaces, and should in most
|
||||
* cases support operation at both full and high speeds. Each function is
|
||||
* associated by @usb_add_function() with a one configuration; that function
|
||||
* causes @bind() to be called so resources can be allocated as part of
|
||||
* setting up a gadget driver. Those resources include endpoints, which
|
||||
* should be allocated using @usb_ep_autoconfig().
|
||||
*
|
||||
* To support dual speed operation, a function driver provides descriptors
|
||||
* for both high and full speed operation. Except in rare cases that don't
|
||||
* involve bulk endpoints, each speed needs different endpoint descriptors.
|
||||
*
|
||||
* Function drivers choose their own strategies for managing instance data.
|
||||
* The simplest strategy just declares it "static', which means the function
|
||||
* can only be activated once. If the function needs to be exposed in more
|
||||
* than one configuration at a given speed, it needs to support multiple
|
||||
* usb_function structures (one for each configuration).
|
||||
*
|
||||
* A more complex strategy might encapsulate a @usb_function structure inside
|
||||
* a driver-specific instance structure to allows multiple activations. An
|
||||
* example of multiple activations might be a CDC ACM function that supports
|
||||
* two or more distinct instances within the same configuration, providing
|
||||
* several independent logical data links to a USB host.
|
||||
*/
|
||||
struct usb_function {
|
||||
const char *name;
|
||||
struct usb_gadget_strings **strings;
|
||||
struct usb_descriptor_header **descriptors;
|
||||
struct usb_descriptor_header **hs_descriptors;
|
||||
|
||||
struct usb_configuration *config;
|
||||
|
||||
/* REVISIT: bind() functions can be marked __init, which
|
||||
* makes trouble for section mismatch analysis. See if
|
||||
* we can't restructure things to avoid mismatching.
|
||||
* Related: unbind() may kfree() but bind() won't...
|
||||
*/
|
||||
|
||||
/* configuration management: bind/unbind */
|
||||
int (*bind)(struct usb_configuration *,
|
||||
struct usb_function *);
|
||||
void (*unbind)(struct usb_configuration *,
|
||||
struct usb_function *);
|
||||
|
||||
/* runtime state management */
|
||||
int (*set_alt)(struct usb_function *,
|
||||
unsigned interface, unsigned alt);
|
||||
int (*get_alt)(struct usb_function *,
|
||||
unsigned interface);
|
||||
void (*disable)(struct usb_function *);
|
||||
int (*setup)(struct usb_function *,
|
||||
const struct usb_ctrlrequest *);
|
||||
void (*suspend)(struct usb_function *);
|
||||
void (*resume)(struct usb_function *);
|
||||
|
||||
/* internals */
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
int usb_add_function(struct usb_configuration *, struct usb_function *);
|
||||
|
||||
int usb_interface_id(struct usb_configuration *, struct usb_function *);
|
||||
|
||||
/**
|
||||
* ep_choose - select descriptor endpoint at current device speed
|
||||
* @g: gadget, connected and running at some speed
|
||||
* @hs: descriptor to use for high speed operation
|
||||
* @fs: descriptor to use for full or low speed operation
|
||||
*/
|
||||
static inline struct usb_endpoint_descriptor *
|
||||
ep_choose(struct usb_gadget *g, struct usb_endpoint_descriptor *hs,
|
||||
struct usb_endpoint_descriptor *fs)
|
||||
{
|
||||
if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
|
||||
return hs;
|
||||
return fs;
|
||||
}
|
||||
|
||||
#define MAX_CONFIG_INTERFACES 16 /* arbitrary; max 255 */
|
||||
|
||||
/**
|
||||
* struct usb_configuration - represents one gadget configuration
|
||||
* @label: For diagnostics, describes the configuration.
|
||||
* @strings: Tables of strings, keyed by identifiers assigned during @bind()
|
||||
* and by language IDs provided in control requests.
|
||||
* @descriptors: Table of descriptors preceding all function descriptors.
|
||||
* Examples include OTG and vendor-specific descriptors.
|
||||
* @bind: Called from @usb_add_config() to allocate resources unique to this
|
||||
* configuration and to call @usb_add_function() for each function used.
|
||||
* @unbind: Reverses @bind; called as a side effect of unregistering the
|
||||
* driver which added this configuration.
|
||||
* @setup: Used to delegate control requests that aren't handled by standard
|
||||
* device infrastructure or directed at a specific interface.
|
||||
* @bConfigurationValue: Copied into configuration descriptor.
|
||||
* @iConfiguration: Copied into configuration descriptor.
|
||||
* @bmAttributes: Copied into configuration descriptor.
|
||||
* @bMaxPower: Copied into configuration descriptor.
|
||||
* @cdev: assigned by @usb_add_config() before calling @bind(); this is
|
||||
* the device associated with this configuration.
|
||||
*
|
||||
* Configurations are building blocks for gadget drivers structured around
|
||||
* function drivers. Simple USB gadgets require only one function and one
|
||||
* configuration, and handle dual-speed hardware by always providing the same
|
||||
* functionality. Slightly more complex gadgets may have more than one
|
||||
* single-function configuration at a given speed; or have configurations
|
||||
* that only work at one speed.
|
||||
*
|
||||
* Composite devices are, by definition, ones with configurations which
|
||||
* include more than one function.
|
||||
*
|
||||
* The lifecycle of a usb_configuration includes allocation, initialization
|
||||
* of the fields described above, and calling @usb_add_config() to set up
|
||||
* internal data and bind it to a specific device. The configuration's
|
||||
* @bind() method is then used to initialize all the functions and then
|
||||
* call @usb_add_function() for them.
|
||||
*
|
||||
* Those functions would normally be independant of each other, but that's
|
||||
* not mandatory. CDC WMC devices are an example where functions often
|
||||
* depend on other functions, with some functions subsidiary to others.
|
||||
* Such interdependency may be managed in any way, so long as all of the
|
||||
* descriptors complete by the time the composite driver returns from
|
||||
* its bind() routine.
|
||||
*/
|
||||
struct usb_configuration {
|
||||
const char *label;
|
||||
struct usb_gadget_strings **strings;
|
||||
const struct usb_descriptor_header **descriptors;
|
||||
|
||||
/* REVISIT: bind() functions can be marked __init, which
|
||||
* makes trouble for section mismatch analysis. See if
|
||||
* we can't restructure things to avoid mismatching...
|
||||
*/
|
||||
|
||||
/* configuration management: bind/unbind */
|
||||
int (*bind)(struct usb_configuration *);
|
||||
void (*unbind)(struct usb_configuration *);
|
||||
int (*setup)(struct usb_configuration *,
|
||||
const struct usb_ctrlrequest *);
|
||||
|
||||
/* fields in the config descriptor */
|
||||
u8 bConfigurationValue;
|
||||
u8 iConfiguration;
|
||||
u8 bmAttributes;
|
||||
u8 bMaxPower;
|
||||
|
||||
struct usb_composite_dev *cdev;
|
||||
|
||||
/* internals */
|
||||
struct list_head list;
|
||||
struct list_head functions;
|
||||
u8 next_interface_id;
|
||||
unsigned highspeed:1;
|
||||
unsigned fullspeed:1;
|
||||
struct usb_function *interface[MAX_CONFIG_INTERFACES];
|
||||
};
|
||||
|
||||
int usb_add_config(struct usb_composite_dev *,
|
||||
struct usb_configuration *);
|
||||
|
||||
/**
|
||||
* struct usb_composite_driver - groups configurations into a gadget
|
||||
* @name: For diagnostics, identifies the driver.
|
||||
* @dev: Template descriptor for the device, including default device
|
||||
* identifiers.
|
||||
* @strings: tables of strings, keyed by identifiers assigned during bind()
|
||||
* and language IDs provided in control requests
|
||||
* @bind: (REQUIRED) Used to allocate resources that are shared across the
|
||||
* whole device, such as string IDs, and add its configurations using
|
||||
* @usb_add_config(). This may fail by returning a negative errno
|
||||
* value; it should return zero on successful initialization.
|
||||
* @unbind: Reverses @bind(); called as a side effect of unregistering
|
||||
* this driver.
|
||||
*
|
||||
* Devices default to reporting self powered operation. Devices which rely
|
||||
* on bus powered operation should report this in their @bind() method.
|
||||
*
|
||||
* Before returning from @bind, various fields in the template descriptor
|
||||
* may be overridden. These include the idVendor/idProduct/bcdDevice values
|
||||
* normally to bind the appropriate host side driver, and the three strings
|
||||
* (iManufacturer, iProduct, iSerialNumber) normally used to provide user
|
||||
* meaningful device identifiers. (The strings will not be defined unless
|
||||
* they are defined in @dev and @strings.) The correct ep0 maxpacket size
|
||||
* is also reported, as defined by the underlying controller driver.
|
||||
*/
|
||||
struct usb_composite_driver {
|
||||
const char *name;
|
||||
const struct usb_device_descriptor *dev;
|
||||
struct usb_gadget_strings **strings;
|
||||
|
||||
/* REVISIT: bind() functions can be marked __init, which
|
||||
* makes trouble for section mismatch analysis. See if
|
||||
* we can't restructure things to avoid mismatching...
|
||||
*/
|
||||
|
||||
int (*bind)(struct usb_composite_dev *);
|
||||
int (*unbind)(struct usb_composite_dev *);
|
||||
};
|
||||
|
||||
extern int usb_composite_register(struct usb_composite_driver *);
|
||||
extern void usb_composite_unregister(struct usb_composite_driver *);
|
||||
|
||||
|
||||
/**
|
||||
* struct usb_composite_device - represents one composite usb gadget
|
||||
* @gadget: read-only, abstracts the gadget's usb peripheral controller
|
||||
* @req: used for control responses; buffer is pre-allocated
|
||||
* @bufsiz: size of buffer pre-allocated in @req
|
||||
* @config: the currently active configuration
|
||||
*
|
||||
* One of these devices is allocated and initialized before the
|
||||
* associated device driver's bind() is called.
|
||||
*
|
||||
* OPEN ISSUE: it appears that some WUSB devices will need to be
|
||||
* built by combining a normal (wired) gadget with a wireless one.
|
||||
* This revision of the gadget framework should probably try to make
|
||||
* sure doing that won't hurt too much.
|
||||
*
|
||||
* One notion for how to handle Wireless USB devices involves:
|
||||
* (a) a second gadget here, discovery mechanism TBD, but likely
|
||||
* needing separate "register/unregister WUSB gadget" calls;
|
||||
* (b) updates to usb_gadget to include flags "is it wireless",
|
||||
* "is it wired", plus (presumably in a wrapper structure)
|
||||
* bandgroup and PHY info;
|
||||
* (c) presumably a wireless_ep wrapping a usb_ep, and reporting
|
||||
* wireless-specific parameters like maxburst and maxsequence;
|
||||
* (d) configurations that are specific to wireless links;
|
||||
* (e) function drivers that understand wireless configs and will
|
||||
* support wireless for (additional) function instances;
|
||||
* (f) a function to support association setup (like CBAF), not
|
||||
* necessarily requiring a wireless adapter;
|
||||
* (g) composite device setup that can create one or more wireless
|
||||
* configs, including appropriate association setup support;
|
||||
* (h) more, TBD.
|
||||
*/
|
||||
struct usb_composite_dev {
|
||||
struct usb_gadget *gadget;
|
||||
struct usb_request *req;
|
||||
unsigned bufsiz;
|
||||
|
||||
struct usb_configuration *config;
|
||||
|
||||
/* internals */
|
||||
struct usb_device_descriptor desc;
|
||||
struct list_head configs;
|
||||
struct usb_composite_driver *driver;
|
||||
u8 next_string_id;
|
||||
|
||||
spinlock_t lock;
|
||||
|
||||
/* REVISIT use and existence of lock ... */
|
||||
};
|
||||
|
||||
extern int usb_string_id(struct usb_composite_dev *c);
|
||||
|
||||
/* messaging utils */
|
||||
#define DBG(d, fmt, args...) \
|
||||
dev_dbg(&(d)->gadget->dev , fmt , ## args)
|
||||
#define VDBG(d, fmt, args...) \
|
||||
dev_vdbg(&(d)->gadget->dev , fmt , ## args)
|
||||
#define ERROR(d, fmt, args...) \
|
||||
dev_err(&(d)->gadget->dev , fmt , ## args)
|
||||
#define WARN(d, fmt, args...) \
|
||||
dev_warn(&(d)->gadget->dev , fmt , ## args)
|
||||
#define INFO(d, fmt, args...) \
|
||||
dev_info(&(d)->gadget->dev , fmt , ## args)
|
||||
|
||||
#endif /* __LINUX_USB_COMPOSITE_H */
|
||||
|
|
@ -33,7 +33,8 @@ struct usb_ep;
|
|||
* @short_not_ok: When reading data, makes short packets be
|
||||
* treated as errors (queue stops advancing till cleanup).
|
||||
* @complete: Function called when request completes, so this request and
|
||||
* its buffer may be re-used.
|
||||
* its buffer may be re-used. The function will always be called with
|
||||
* interrupts disabled, and it must not sleep.
|
||||
* Reads terminate with a short packet, or when the buffer fills,
|
||||
* whichever comes first. When writes terminate, some data bytes
|
||||
* will usually still be in flight (often in a hardware fifo).
|
||||
|
|
@ -271,7 +272,10 @@ static inline void usb_ep_free_request(struct usb_ep *ep,
|
|||
* (Note that some USB device controllers disallow protocol stall responses
|
||||
* in some cases.) When control responses are deferred (the response is
|
||||
* written after the setup callback returns), then usb_ep_set_halt() may be
|
||||
* used on ep0 to trigger protocol stalls.
|
||||
* used on ep0 to trigger protocol stalls. Depending on the controller,
|
||||
* it may not be possible to trigger a status-stage protocol stall when the
|
||||
* data stage is over, that is, from within the response's completion
|
||||
* routine.
|
||||
*
|
||||
* For periodic endpoints, like interrupt or isochronous ones, the usb host
|
||||
* arranges to poll once per interval, and the gadget driver usually will
|
||||
|
|
@ -858,6 +862,25 @@ int usb_descriptor_fillbuf(void *, unsigned,
|
|||
int usb_gadget_config_buf(const struct usb_config_descriptor *config,
|
||||
void *buf, unsigned buflen, const struct usb_descriptor_header **desc);
|
||||
|
||||
/* copy a NULL-terminated vector of descriptors */
|
||||
struct usb_descriptor_header **usb_copy_descriptors(
|
||||
struct usb_descriptor_header **);
|
||||
|
||||
/* return copy of endpoint descriptor given original descriptor set */
|
||||
struct usb_endpoint_descriptor *usb_find_endpoint(
|
||||
struct usb_descriptor_header **src,
|
||||
struct usb_descriptor_header **copy,
|
||||
struct usb_endpoint_descriptor *match);
|
||||
|
||||
/**
|
||||
* usb_free_descriptors - free descriptors returned by usb_copy_descriptors()
|
||||
* @v: vector of descriptors
|
||||
*/
|
||||
static inline void usb_free_descriptors(struct usb_descriptor_header **v)
|
||||
{
|
||||
kfree(v);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* utility wrapping a simple endpoint selection policy */
|
||||
|
|
|
|||
151
include/linux/usb/irda.h
Normal file
151
include/linux/usb/irda.h
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
* USB IrDA Bridge Device Definition
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_USB_IRDA_H
|
||||
#define __LINUX_USB_IRDA_H
|
||||
|
||||
/* This device should use Application-specific class */
|
||||
|
||||
#define USB_SUBCLASS_IRDA 0x02
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Class-Specific requests (bRequest field) */
|
||||
|
||||
#define USB_REQ_CS_IRDA_RECEIVING 1
|
||||
#define USB_REQ_CS_IRDA_CHECK_MEDIA_BUSY 3
|
||||
#define USB_REQ_CS_IRDA_RATE_SNIFF 4
|
||||
#define USB_REQ_CS_IRDA_UNICAST_LIST 5
|
||||
#define USB_REQ_CS_IRDA_GET_CLASS_DESC 6
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Class-Specific descriptor */
|
||||
|
||||
#define USB_DT_CS_IRDA 0x21
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Data sizes */
|
||||
|
||||
#define USB_IRDA_DS_2048 (1 << 5)
|
||||
#define USB_IRDA_DS_1024 (1 << 4)
|
||||
#define USB_IRDA_DS_512 (1 << 3)
|
||||
#define USB_IRDA_DS_256 (1 << 2)
|
||||
#define USB_IRDA_DS_128 (1 << 1)
|
||||
#define USB_IRDA_DS_64 (1 << 0)
|
||||
|
||||
/* Window sizes */
|
||||
|
||||
#define USB_IRDA_WS_7 (1 << 6)
|
||||
#define USB_IRDA_WS_6 (1 << 5)
|
||||
#define USB_IRDA_WS_5 (1 << 4)
|
||||
#define USB_IRDA_WS_4 (1 << 3)
|
||||
#define USB_IRDA_WS_3 (1 << 2)
|
||||
#define USB_IRDA_WS_2 (1 << 1)
|
||||
#define USB_IRDA_WS_1 (1 << 0)
|
||||
|
||||
/* Min turnaround times in usecs */
|
||||
|
||||
#define USB_IRDA_MTT_0 (1 << 7)
|
||||
#define USB_IRDA_MTT_10 (1 << 6)
|
||||
#define USB_IRDA_MTT_50 (1 << 5)
|
||||
#define USB_IRDA_MTT_100 (1 << 4)
|
||||
#define USB_IRDA_MTT_500 (1 << 3)
|
||||
#define USB_IRDA_MTT_1000 (1 << 2)
|
||||
#define USB_IRDA_MTT_5000 (1 << 1)
|
||||
#define USB_IRDA_MTT_10000 (1 << 0)
|
||||
|
||||
/* Baud rates */
|
||||
|
||||
#define USB_IRDA_BR_4000000 (1 << 8)
|
||||
#define USB_IRDA_BR_1152000 (1 << 7)
|
||||
#define USB_IRDA_BR_576000 (1 << 6)
|
||||
#define USB_IRDA_BR_115200 (1 << 5)
|
||||
#define USB_IRDA_BR_57600 (1 << 4)
|
||||
#define USB_IRDA_BR_38400 (1 << 3)
|
||||
#define USB_IRDA_BR_19200 (1 << 2)
|
||||
#define USB_IRDA_BR_9600 (1 << 1)
|
||||
#define USB_IRDA_BR_2400 (1 << 0)
|
||||
|
||||
/* Additional BOFs */
|
||||
|
||||
#define USB_IRDA_AB_0 (1 << 7)
|
||||
#define USB_IRDA_AB_1 (1 << 6)
|
||||
#define USB_IRDA_AB_2 (1 << 5)
|
||||
#define USB_IRDA_AB_3 (1 << 4)
|
||||
#define USB_IRDA_AB_6 (1 << 3)
|
||||
#define USB_IRDA_AB_12 (1 << 2)
|
||||
#define USB_IRDA_AB_24 (1 << 1)
|
||||
#define USB_IRDA_AB_48 (1 << 0)
|
||||
|
||||
/* IRDA Rate Sniff */
|
||||
|
||||
#define USB_IRDA_RATE_SNIFF 1
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
struct usb_irda_cs_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
||||
__le16 bcdSpecRevision;
|
||||
__u8 bmDataSize;
|
||||
__u8 bmWindowSize;
|
||||
__u8 bmMinTurnaroundTime;
|
||||
__le16 wBaudRate;
|
||||
__u8 bmAdditionalBOFs;
|
||||
__u8 bIrdaRateSniff;
|
||||
__u8 bMaxUnicastList;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Data Format */
|
||||
|
||||
#define USB_IRDA_STATUS_MEDIA_BUSY (1 << 7)
|
||||
|
||||
/* The following is a 4-bit value used for both
|
||||
* inbound and outbound headers:
|
||||
*
|
||||
* 0 - speed ignored
|
||||
* 1 - 2400 bps
|
||||
* 2 - 9600 bps
|
||||
* 3 - 19200 bps
|
||||
* 4 - 38400 bps
|
||||
* 5 - 57600 bps
|
||||
* 6 - 115200 bps
|
||||
* 7 - 576000 bps
|
||||
* 8 - 1.152 Mbps
|
||||
* 9 - 5 mbps
|
||||
* 10..15 - Reserved
|
||||
*/
|
||||
#define USB_IRDA_STATUS_LINK_SPEED 0x0f
|
||||
|
||||
/* The following is a 4-bit value used only for
|
||||
* outbound header:
|
||||
*
|
||||
* 0 - No change (BOF ignored)
|
||||
* 1 - 48 BOFs
|
||||
* 2 - 24 BOFs
|
||||
* 3 - 12 BOFs
|
||||
* 4 - 6 BOFs
|
||||
* 5 - 3 BOFs
|
||||
* 6 - 2 BOFs
|
||||
* 7 - 1 BOFs
|
||||
* 8 - 0 BOFs
|
||||
* 9..15 - Reserved
|
||||
*/
|
||||
#define USB_IRDA_EXTRA_BOFS 0xf0
|
||||
|
||||
struct usb_irda_inbound_header {
|
||||
__u8 bmStatus;
|
||||
};
|
||||
|
||||
struct usb_irda_outbound_header {
|
||||
__u8 bmChange;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_USB_IRDA_H */
|
||||
|
||||
|
|
@ -22,8 +22,6 @@
|
|||
*
|
||||
* History:
|
||||
* 0.1 04.01.2000 Created
|
||||
*
|
||||
* $Id: usbdevice_fs.h,v 1.1 2000/01/06 18:40:41 tom Exp $
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
Loading…
Reference in a new issue