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: (128 commits) USB: fix codingstyle issues in drivers/usb/core/*.c USB: fix codingstyle issues in drivers/usb/core/message.c USB: fix codingstyle issues in drivers/usb/core/hcd-pci.c USB: fix codingstyle issues in drivers/usb/core/devio.c USB: fix codingstyle issues in drivers/usb/core/devices.c USB: fix codingstyle issues in drivers/usb/core/*.h USB: fix codingstyle issues in include/linux/usb/ USB: fix codingstyle issues in include/linux/usb.h USB: mark USB drivers as being GPL only USB: use a real vendor and product id for root hubs USB: mount options: fix usbfs USB: Fix usb_serial_driver structure for Kobil cardreader driver. usb: ehci should use u16 for isochronous intervals usb: ehci, remove false clear-reset path USB: Use menuconfig objects usb: ohci-sm501 driver usb: dma bounce buffer support USB: last abuses of intfdata in close for usb-serial drivers USB: kl5kusb105 don't flush to logically disconnected devices USB: oti6858: cleanup ...
This commit is contained in:
commit
b6cf160c4b
150 changed files with 8196 additions and 2680 deletions
|
@ -162,19 +162,19 @@ struct usb_interface {
|
|||
unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
|
||||
|
||||
struct device dev; /* interface specific device info */
|
||||
struct device *usb_dev; /* pointer to the usb class's device, if any */
|
||||
struct device *usb_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)
|
||||
static inline void *usb_get_intfdata(struct usb_interface *intf)
|
||||
{
|
||||
return dev_get_drvdata (&intf->dev);
|
||||
return dev_get_drvdata(&intf->dev);
|
||||
}
|
||||
|
||||
static inline void usb_set_intfdata (struct usb_interface *intf, void *data)
|
||||
static inline void usb_set_intfdata(struct usb_interface *intf, void *data)
|
||||
{
|
||||
dev_set_drvdata(&intf->dev, data);
|
||||
}
|
||||
|
@ -275,9 +275,10 @@ struct usb_host_config {
|
|||
|
||||
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)
|
||||
#define usb_get_extra_descriptor(ifpoint, type, ptr) \
|
||||
__usb_get_extra_descriptor((ifpoint)->extra, \
|
||||
(ifpoint)->extralen, \
|
||||
type, (void **)ptr)
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
|
@ -318,7 +319,7 @@ struct usb_bus {
|
|||
#ifdef CONFIG_USB_DEVICEFS
|
||||
struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */
|
||||
#endif
|
||||
struct class_device *class_dev; /* class device for this bus */
|
||||
struct device *dev; /* device for this bus */
|
||||
|
||||
#if defined(CONFIG_USB_MON)
|
||||
struct mon_bus *mon_bus; /* non-null when associated */
|
||||
|
@ -388,7 +389,7 @@ struct usb_device {
|
|||
unsigned can_submit:1; /* URBs may be submitted */
|
||||
unsigned discon_suspended:1; /* Disconnected while suspended */
|
||||
unsigned have_langid:1; /* whether string_langid is valid */
|
||||
unsigned authorized:1; /* Policy has determined we can use it */
|
||||
unsigned authorized:1; /* Policy has said we can use it */
|
||||
unsigned wusb:1; /* Device is Wireless USB */
|
||||
int string_langid; /* language ID for strings */
|
||||
|
||||
|
@ -417,7 +418,10 @@ struct usb_device {
|
|||
|
||||
int pm_usage_cnt; /* usage counter for autosuspend */
|
||||
u32 quirks; /* quirks of the whole device */
|
||||
atomic_t urbnum; /* number of URBs submitted for the whole device */
|
||||
atomic_t urbnum; /* number of URBs submitted for
|
||||
the whole device */
|
||||
|
||||
unsigned long active_duration; /* total time device is not suspended */
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
struct delayed_work autosuspend; /* for delayed autosuspends */
|
||||
|
@ -425,6 +429,7 @@ struct usb_device {
|
|||
|
||||
unsigned long last_busy; /* time of last use */
|
||||
int autosuspend_delay; /* in jiffies */
|
||||
unsigned long connect_time; /* time device was first connected */
|
||||
|
||||
unsigned auto_pm:1; /* autosuspend/resume in progress */
|
||||
unsigned do_remote_wakeup:1; /* remote wakeup should be enabled */
|
||||
|
@ -498,11 +503,11 @@ static inline void usb_mark_last_busy(struct usb_device *udev)
|
|||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* for drivers using iso endpoints */
|
||||
extern int usb_get_current_frame_number (struct usb_device *usb_dev);
|
||||
extern int usb_get_current_frame_number(struct usb_device *usb_dev);
|
||||
|
||||
/* used these for multi-interface device registration */
|
||||
extern int usb_driver_claim_interface(struct usb_driver *driver,
|
||||
struct usb_interface *iface, void* priv);
|
||||
struct usb_interface *iface, void *priv);
|
||||
|
||||
/**
|
||||
* usb_interface_claimed - returns true iff an interface is claimed
|
||||
|
@ -514,7 +519,8 @@ extern int usb_driver_claim_interface(struct usb_driver *driver,
|
|||
* may need to explicitly claim that lock.
|
||||
*
|
||||
*/
|
||||
static inline int usb_interface_claimed(struct usb_interface *iface) {
|
||||
static inline int usb_interface_claimed(struct usb_interface *iface)
|
||||
{
|
||||
return (iface->dev.driver != NULL);
|
||||
}
|
||||
|
||||
|
@ -557,12 +563,11 @@ extern struct usb_host_interface *usb_altnum_to_altsetting(
|
|||
* USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are
|
||||
* high speed, and a different one if they are full or low speed.
|
||||
*/
|
||||
static inline int usb_make_path (struct usb_device *dev, char *buf,
|
||||
size_t size)
|
||||
static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
|
||||
{
|
||||
int actual;
|
||||
actual = snprintf (buf, size, "usb-%s-%s", dev->bus->bus_name,
|
||||
dev->devpath);
|
||||
actual = snprintf(buf, size, "usb-%s-%s", dev->bus->bus_name,
|
||||
dev->devpath);
|
||||
return (actual >= (int)size) ? -1 : actual;
|
||||
}
|
||||
|
||||
|
@ -608,7 +613,8 @@ static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
|
|||
*
|
||||
* Returns true if the endpoint is of type OUT, otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_dir_out(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_dir_out(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
|
||||
}
|
||||
|
@ -619,7 +625,8 @@ static inline int usb_endpoint_dir_out(const struct usb_endpoint_descriptor *epd
|
|||
*
|
||||
* Returns true if the endpoint is of type bulk, otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_xfer_bulk(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
||||
USB_ENDPOINT_XFER_BULK);
|
||||
|
@ -631,7 +638,8 @@ static inline int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *e
|
|||
*
|
||||
* Returns true if the endpoint is of type control, otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_xfer_control(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_xfer_control(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
||||
USB_ENDPOINT_XFER_CONTROL);
|
||||
|
@ -644,7 +652,8 @@ static inline int usb_endpoint_xfer_control(const struct usb_endpoint_descriptor
|
|||
* Returns true if the endpoint is of type interrupt, otherwise it returns
|
||||
* false.
|
||||
*/
|
||||
static inline int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_xfer_int(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
||||
USB_ENDPOINT_XFER_INT);
|
||||
|
@ -657,7 +666,8 @@ static inline int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *ep
|
|||
* Returns true if the endpoint is of type isochronous, otherwise it returns
|
||||
* false.
|
||||
*/
|
||||
static inline int usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_xfer_isoc(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
||||
USB_ENDPOINT_XFER_ISOC);
|
||||
|
@ -670,7 +680,8 @@ static inline int usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *e
|
|||
* Returns true if the endpoint has bulk transfer type and IN direction,
|
||||
* otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_is_bulk_in(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_is_bulk_in(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd));
|
||||
}
|
||||
|
@ -682,7 +693,8 @@ static inline int usb_endpoint_is_bulk_in(const struct usb_endpoint_descriptor *
|
|||
* Returns true if the endpoint has bulk transfer type and OUT direction,
|
||||
* otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_is_bulk_out(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_is_bulk_out(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd));
|
||||
}
|
||||
|
@ -694,7 +706,8 @@ static inline int usb_endpoint_is_bulk_out(const struct usb_endpoint_descriptor
|
|||
* Returns true if the endpoint has interrupt transfer type and IN direction,
|
||||
* otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_is_int_in(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));
|
||||
}
|
||||
|
@ -706,7 +719,8 @@ static inline int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *e
|
|||
* Returns true if the endpoint has interrupt transfer type and OUT direction,
|
||||
* otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_is_int_out(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_is_int_out(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd));
|
||||
}
|
||||
|
@ -718,7 +732,8 @@ static inline int usb_endpoint_is_int_out(const struct usb_endpoint_descriptor *
|
|||
* Returns true if the endpoint has isochronous transfer type and IN direction,
|
||||
* otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_is_isoc_in(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_is_isoc_in(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd));
|
||||
}
|
||||
|
@ -730,7 +745,8 @@ static inline int usb_endpoint_is_isoc_in(const struct usb_endpoint_descriptor *
|
|||
* Returns true if the endpoint has isochronous transfer type and OUT direction,
|
||||
* otherwise it returns false.
|
||||
*/
|
||||
static inline int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor *epd)
|
||||
static inline int usb_endpoint_is_isoc_out(
|
||||
const struct usb_endpoint_descriptor *epd)
|
||||
{
|
||||
return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd));
|
||||
}
|
||||
|
@ -761,8 +777,9 @@ static inline int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor
|
|||
* specific device.
|
||||
*/
|
||||
#define USB_DEVICE(vend,prod) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE, .idVendor = (vend), \
|
||||
.idProduct = (prod)
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
|
||||
.idVendor = (vend), \
|
||||
.idProduct = (prod)
|
||||
/**
|
||||
* USB_DEVICE_VER - macro used to describe a specific usb device with a
|
||||
* version range
|
||||
|
@ -774,10 +791,12 @@ static inline int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor
|
|||
* This macro is used to create a struct usb_device_id that matches a
|
||||
* specific device, with a version range.
|
||||
*/
|
||||
#define USB_DEVICE_VER(vend,prod,lo,hi) \
|
||||
#define USB_DEVICE_VER(vend, prod, lo, hi) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, \
|
||||
.idVendor = (vend), .idProduct = (prod), \
|
||||
.bcdDevice_lo = (lo), .bcdDevice_hi = (hi)
|
||||
.idVendor = (vend), \
|
||||
.idProduct = (prod), \
|
||||
.bcdDevice_lo = (lo), \
|
||||
.bcdDevice_hi = (hi)
|
||||
|
||||
/**
|
||||
* USB_DEVICE_INTERFACE_PROTOCOL - macro used to describe a usb
|
||||
|
@ -789,8 +808,9 @@ static inline int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor
|
|||
* This macro is used to create a struct usb_device_id that matches a
|
||||
* specific interface protocol of devices.
|
||||
*/
|
||||
#define USB_DEVICE_INTERFACE_PROTOCOL(vend,prod,pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_PROTOCOL, \
|
||||
#define USB_DEVICE_INTERFACE_PROTOCOL(vend, prod, pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
|
||||
USB_DEVICE_ID_MATCH_INT_PROTOCOL, \
|
||||
.idVendor = (vend), \
|
||||
.idProduct = (prod), \
|
||||
.bInterfaceProtocol = (pr)
|
||||
|
@ -804,12 +824,14 @@ static inline int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor
|
|||
* This macro is used to create a struct usb_device_id that matches a
|
||||
* specific class of devices.
|
||||
*/
|
||||
#define USB_DEVICE_INFO(cl,sc,pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, .bDeviceClass = (cl), \
|
||||
.bDeviceSubClass = (sc), .bDeviceProtocol = (pr)
|
||||
#define USB_DEVICE_INFO(cl, sc, pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, \
|
||||
.bDeviceClass = (cl), \
|
||||
.bDeviceSubClass = (sc), \
|
||||
.bDeviceProtocol = (pr)
|
||||
|
||||
/**
|
||||
* USB_INTERFACE_INFO - macro used to describe a class of usb interfaces
|
||||
* USB_INTERFACE_INFO - macro used to describe a class of usb interfaces
|
||||
* @cl: bInterfaceClass value
|
||||
* @sc: bInterfaceSubClass value
|
||||
* @pr: bInterfaceProtocol value
|
||||
|
@ -817,9 +839,11 @@ static inline int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor
|
|||
* This macro is used to create a struct usb_device_id that matches a
|
||||
* specific class of interfaces.
|
||||
*/
|
||||
#define USB_INTERFACE_INFO(cl,sc,pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO, .bInterfaceClass = (cl), \
|
||||
.bInterfaceSubClass = (sc), .bInterfaceProtocol = (pr)
|
||||
#define USB_INTERFACE_INFO(cl, sc, pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO, \
|
||||
.bInterfaceClass = (cl), \
|
||||
.bInterfaceSubClass = (sc), \
|
||||
.bInterfaceProtocol = (pr)
|
||||
|
||||
/**
|
||||
* USB_DEVICE_AND_INTERFACE_INFO - macro used to describe a specific usb device
|
||||
|
@ -836,12 +860,14 @@ static inline int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor
|
|||
* This is especially useful when explicitly matching devices that have
|
||||
* vendor specific bDeviceClass values, but standards-compliant interfaces.
|
||||
*/
|
||||
#define USB_DEVICE_AND_INTERFACE_INFO(vend,prod,cl,sc,pr) \
|
||||
#define USB_DEVICE_AND_INTERFACE_INFO(vend, prod, cl, sc, pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
|
||||
| USB_DEVICE_ID_MATCH_DEVICE, \
|
||||
.idVendor = (vend), .idProduct = (prod), \
|
||||
.idVendor = (vend), \
|
||||
.idProduct = (prod), \
|
||||
.bInterfaceClass = (cl), \
|
||||
.bInterfaceSubClass = (sc), .bInterfaceProtocol = (pr)
|
||||
.bInterfaceSubClass = (sc), \
|
||||
.bInterfaceProtocol = (pr)
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
|
@ -1119,7 +1145,7 @@ typedef void (*usb_complete_t)(struct urb *);
|
|||
* transferred. It will normally be the same as requested, unless
|
||||
* either an error was reported or a short read was performed.
|
||||
* The URB_SHORT_NOT_OK transfer flag may be used to make such
|
||||
* short reads be reported as errors.
|
||||
* short reads be reported as errors.
|
||||
* @setup_packet: Only used for control transfers, this points to eight bytes
|
||||
* of setup data. Control transfers always start by sending this data
|
||||
* to the device. Then transfer_buffer is read or written, if needed.
|
||||
|
@ -1138,7 +1164,7 @@ typedef void (*usb_complete_t)(struct urb *);
|
|||
* @complete: Completion handler. This URB is passed as the parameter to the
|
||||
* completion function. The completion function may then do what
|
||||
* it likes with the URB, including resubmitting or freeing it.
|
||||
* @iso_frame_desc: Used to provide arrays of ISO transfer buffers and to
|
||||
* @iso_frame_desc: Used to provide arrays of ISO transfer buffers and to
|
||||
* collect the transfer status for each buffer.
|
||||
*
|
||||
* This structure identifies USB transfer requests. URBs must be allocated by
|
||||
|
@ -1242,8 +1268,7 @@ typedef void (*usb_complete_t)(struct urb *);
|
|||
* when the urb is owned by the hcd, that is, since the call to
|
||||
* usb_submit_urb() till the entry into the completion routine.
|
||||
*/
|
||||
struct urb
|
||||
{
|
||||
struct urb {
|
||||
/* private: usb core and host controller only fields in the urb */
|
||||
struct kref kref; /* reference count of the URB */
|
||||
void *hcpriv; /* private data for host controller */
|
||||
|
@ -1254,10 +1279,10 @@ struct urb
|
|||
/* public: documented fields in the urb that can be used by drivers */
|
||||
struct list_head urb_list; /* list head for use by the urb's
|
||||
* current owner */
|
||||
struct list_head anchor_list; /* the URB may be anchored by the driver */
|
||||
struct list_head anchor_list; /* the URB may be anchored */
|
||||
struct usb_anchor *anchor;
|
||||
struct usb_device *dev; /* (in) pointer to associated device */
|
||||
struct usb_host_endpoint *ep; /* (internal) pointer to endpoint struct */
|
||||
struct usb_host_endpoint *ep; /* (internal) pointer to endpoint */
|
||||
unsigned int pipe; /* (in) pipe information */
|
||||
int status; /* (return) non-ISO status */
|
||||
unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/
|
||||
|
@ -1294,14 +1319,14 @@ struct urb
|
|||
* Initializes a control urb with the proper information needed to submit
|
||||
* it to a device.
|
||||
*/
|
||||
static inline void usb_fill_control_urb (struct urb *urb,
|
||||
struct usb_device *dev,
|
||||
unsigned int pipe,
|
||||
unsigned char *setup_packet,
|
||||
void *transfer_buffer,
|
||||
int buffer_length,
|
||||
usb_complete_t complete_fn,
|
||||
void *context)
|
||||
static inline void usb_fill_control_urb(struct urb *urb,
|
||||
struct usb_device *dev,
|
||||
unsigned int pipe,
|
||||
unsigned char *setup_packet,
|
||||
void *transfer_buffer,
|
||||
int buffer_length,
|
||||
usb_complete_t complete_fn,
|
||||
void *context)
|
||||
{
|
||||
urb->dev = dev;
|
||||
urb->pipe = pipe;
|
||||
|
@ -1325,13 +1350,13 @@ static inline void usb_fill_control_urb (struct urb *urb,
|
|||
* Initializes a bulk urb with the proper information needed to submit it
|
||||
* to a device.
|
||||
*/
|
||||
static inline void usb_fill_bulk_urb (struct urb *urb,
|
||||
struct usb_device *dev,
|
||||
unsigned int pipe,
|
||||
void *transfer_buffer,
|
||||
int buffer_length,
|
||||
usb_complete_t complete_fn,
|
||||
void *context)
|
||||
static inline void usb_fill_bulk_urb(struct urb *urb,
|
||||
struct usb_device *dev,
|
||||
unsigned int pipe,
|
||||
void *transfer_buffer,
|
||||
int buffer_length,
|
||||
usb_complete_t complete_fn,
|
||||
void *context)
|
||||
{
|
||||
urb->dev = dev;
|
||||
urb->pipe = pipe;
|
||||
|
@ -1359,14 +1384,14 @@ static inline void usb_fill_bulk_urb (struct urb *urb,
|
|||
* the endpoint interval, and express polling intervals in microframes
|
||||
* (eight per millisecond) rather than in frames (one per millisecond).
|
||||
*/
|
||||
static inline void usb_fill_int_urb (struct urb *urb,
|
||||
struct usb_device *dev,
|
||||
unsigned int pipe,
|
||||
void *transfer_buffer,
|
||||
int buffer_length,
|
||||
usb_complete_t complete_fn,
|
||||
void *context,
|
||||
int interval)
|
||||
static inline void usb_fill_int_urb(struct urb *urb,
|
||||
struct usb_device *dev,
|
||||
unsigned int pipe,
|
||||
void *transfer_buffer,
|
||||
int buffer_length,
|
||||
usb_complete_t complete_fn,
|
||||
void *context,
|
||||
int interval)
|
||||
{
|
||||
urb->dev = dev;
|
||||
urb->pipe = pipe;
|
||||
|
@ -1419,15 +1444,15 @@ static inline int usb_urb_dir_out(struct urb *urb)
|
|||
return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT;
|
||||
}
|
||||
|
||||
void *usb_buffer_alloc (struct usb_device *dev, size_t size,
|
||||
void *usb_buffer_alloc(struct usb_device *dev, size_t size,
|
||||
gfp_t mem_flags, dma_addr_t *dma);
|
||||
void usb_buffer_free (struct usb_device *dev, size_t size,
|
||||
void usb_buffer_free(struct usb_device *dev, size_t size,
|
||||
void *addr, dma_addr_t dma);
|
||||
|
||||
#if 0
|
||||
struct urb *usb_buffer_map (struct urb *urb);
|
||||
void usb_buffer_dmasync (struct urb *urb);
|
||||
void usb_buffer_unmap (struct urb *urb);
|
||||
struct urb *usb_buffer_map(struct urb *urb);
|
||||
void usb_buffer_dmasync(struct urb *urb);
|
||||
void usb_buffer_unmap(struct urb *urb);
|
||||
#endif
|
||||
|
||||
struct scatterlist;
|
||||
|
@ -1499,7 +1524,7 @@ struct usb_sg_request {
|
|||
int status;
|
||||
size_t bytes;
|
||||
|
||||
/*
|
||||
/*
|
||||
* members below are private: to usbcore,
|
||||
* and are not provided for driver access!
|
||||
*/
|
||||
|
@ -1517,18 +1542,18 @@ struct usb_sg_request {
|
|||
struct completion complete;
|
||||
};
|
||||
|
||||
int usb_sg_init (
|
||||
int usb_sg_init(
|
||||
struct usb_sg_request *io,
|
||||
struct usb_device *dev,
|
||||
unsigned pipe,
|
||||
unsigned pipe,
|
||||
unsigned period,
|
||||
struct scatterlist *sg,
|
||||
int nents,
|
||||
size_t length,
|
||||
gfp_t mem_flags
|
||||
);
|
||||
void usb_sg_cancel (struct usb_sg_request *io);
|
||||
void usb_sg_wait (struct usb_sg_request *io);
|
||||
void usb_sg_cancel(struct usb_sg_request *io);
|
||||
void usb_sg_wait(struct usb_sg_request *io);
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
@ -1585,21 +1610,21 @@ static inline unsigned int __create_pipe(struct usb_device *dev,
|
|||
|
||||
/* Create various pipes... */
|
||||
#define usb_sndctrlpipe(dev,endpoint) \
|
||||
((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint))
|
||||
((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint))
|
||||
#define usb_rcvctrlpipe(dev,endpoint) \
|
||||
((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
|
||||
#define usb_sndisocpipe(dev,endpoint) \
|
||||
((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint))
|
||||
((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint))
|
||||
#define usb_rcvisocpipe(dev,endpoint) \
|
||||
((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
|
||||
#define usb_sndbulkpipe(dev,endpoint) \
|
||||
((PIPE_BULK << 30) | __create_pipe(dev,endpoint))
|
||||
((PIPE_BULK << 30) | __create_pipe(dev, endpoint))
|
||||
#define usb_rcvbulkpipe(dev,endpoint) \
|
||||
((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
|
||||
#define usb_sndintpipe(dev,endpoint) \
|
||||
((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint))
|
||||
((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint))
|
||||
#define usb_rcvintpipe(dev,endpoint) \
|
||||
((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
unifdef-y += audio.h
|
||||
unifdef-y += cdc.h
|
||||
unifdef-y += ch9.h
|
||||
unifdef-y += gadgetfs.h
|
||||
unifdef-y += midi.h
|
||||
header-y += audio.h
|
||||
header-y += cdc.h
|
||||
header-y += ch9.h
|
||||
header-y += gadgetfs.h
|
||||
header-y += midi.h
|
||||
unifdef-y += g_printer.h
|
||||
|
||||
|
|
|
@ -27,13 +27,13 @@
|
|||
|
||||
/* 4.3.2 Class-Specific AC Interface Descriptor */
|
||||
struct usb_ac_header_descriptor {
|
||||
__u8 bLength; // 8+n
|
||||
__u8 bDescriptorType; // USB_DT_CS_INTERFACE
|
||||
__u8 bDescriptorSubtype; // USB_MS_HEADER
|
||||
__le16 bcdADC; // 0x0100
|
||||
__le16 wTotalLength; // includes Unit and Terminal desc.
|
||||
__u8 bInCollection; // n
|
||||
__u8 baInterfaceNr[]; // [n]
|
||||
__u8 bLength; /* 8+n */
|
||||
__u8 bDescriptorType; /* USB_DT_CS_INTERFACE */
|
||||
__u8 bDescriptorSubtype; /* USB_MS_HEADER */
|
||||
__le16 bcdADC; /* 0x0100 */
|
||||
__le16 wTotalLength; /* includes Unit and Terminal desc. */
|
||||
__u8 bInCollection; /* n */
|
||||
__u8 baInterfaceNr[]; /* [n] */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define USB_DT_AC_HEADER_SIZE(n) (8+(n))
|
||||
|
|
|
@ -29,16 +29,16 @@
|
|||
* Class-Specific descriptors ... there are a couple dozen of them
|
||||
*/
|
||||
|
||||
#define USB_CDC_HEADER_TYPE 0x00 /* header_desc */
|
||||
#define USB_CDC_CALL_MANAGEMENT_TYPE 0x01 /* call_mgmt_descriptor */
|
||||
#define USB_CDC_ACM_TYPE 0x02 /* acm_descriptor */
|
||||
#define USB_CDC_UNION_TYPE 0x06 /* union_desc */
|
||||
#define USB_CDC_HEADER_TYPE 0x00 /* header_desc */
|
||||
#define USB_CDC_CALL_MANAGEMENT_TYPE 0x01 /* call_mgmt_descriptor */
|
||||
#define USB_CDC_ACM_TYPE 0x02 /* acm_descriptor */
|
||||
#define USB_CDC_UNION_TYPE 0x06 /* union_desc */
|
||||
#define USB_CDC_COUNTRY_TYPE 0x07
|
||||
#define USB_CDC_NETWORK_TERMINAL_TYPE 0x0a /* network_terminal_desc */
|
||||
#define USB_CDC_ETHERNET_TYPE 0x0f /* ether_desc */
|
||||
#define USB_CDC_NETWORK_TERMINAL_TYPE 0x0a /* network_terminal_desc */
|
||||
#define USB_CDC_ETHERNET_TYPE 0x0f /* ether_desc */
|
||||
#define USB_CDC_WHCM_TYPE 0x11
|
||||
#define USB_CDC_MDLM_TYPE 0x12 /* mdlm_desc */
|
||||
#define USB_CDC_MDLM_DETAIL_TYPE 0x13 /* mdlm_detail_desc */
|
||||
#define USB_CDC_MDLM_TYPE 0x12 /* mdlm_desc */
|
||||
#define USB_CDC_MDLM_DETAIL_TYPE 0x13 /* mdlm_detail_desc */
|
||||
#define USB_CDC_DMM_TYPE 0x14
|
||||
#define USB_CDC_OBEX_TYPE 0x15
|
||||
|
||||
|
|
31
include/linux/usb/g_printer.h
Normal file
31
include/linux/usb/g_printer.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* g_printer.h -- Header file for USB Printer gadget driver
|
||||
*
|
||||
* Copyright (C) 2007 Craig W. Nadler
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
|
||||
#define PRINTER_NOT_ERROR 0x08
|
||||
#define PRINTER_SELECTED 0x10
|
||||
#define PRINTER_PAPER_EMPTY 0x20
|
||||
|
||||
/* The 'g' code is also used by gadgetfs ioctl requests.
|
||||
* Don't add any colliding codes to either driver, and keep
|
||||
* them in unique ranges (size 0x20 for now).
|
||||
*/
|
||||
#define GADGET_GET_PRINTER_STATUS _IOR('g', 0x21, unsigned char)
|
||||
#define GADGET_SET_PRINTER_STATUS _IOWR('g', 0x22, unsigned char)
|
|
@ -70,9 +70,10 @@ struct usb_ep;
|
|||
*
|
||||
* Bulk endpoints can use any size buffers, and can also be used for interrupt
|
||||
* transfers. interrupt-only endpoints can be much less functional.
|
||||
*
|
||||
* NOTE: this is analagous to 'struct urb' on the host side, except that
|
||||
* it's thinner and promotes more pre-allocation.
|
||||
*/
|
||||
// NOTE this is analagous to 'struct urb' on the host side,
|
||||
// except that it's thinner and promotes more pre-allocation.
|
||||
|
||||
struct usb_request {
|
||||
void *buf;
|
||||
|
@ -168,10 +169,10 @@ struct usb_ep {
|
|||
*
|
||||
* returns zero, or a negative error code.
|
||||
*/
|
||||
static inline int
|
||||
usb_ep_enable (struct usb_ep *ep, const struct usb_endpoint_descriptor *desc)
|
||||
static inline int usb_ep_enable(struct usb_ep *ep,
|
||||
const struct usb_endpoint_descriptor *desc)
|
||||
{
|
||||
return ep->ops->enable (ep, desc);
|
||||
return ep->ops->enable(ep, desc);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -186,10 +187,9 @@ usb_ep_enable (struct usb_ep *ep, const struct usb_endpoint_descriptor *desc)
|
|||
*
|
||||
* returns zero, or a negative error code.
|
||||
*/
|
||||
static inline int
|
||||
usb_ep_disable (struct usb_ep *ep)
|
||||
static inline int usb_ep_disable(struct usb_ep *ep)
|
||||
{
|
||||
return ep->ops->disable (ep);
|
||||
return ep->ops->disable(ep);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -206,10 +206,10 @@ usb_ep_disable (struct usb_ep *ep)
|
|||
*
|
||||
* Returns the request, or null if one could not be allocated.
|
||||
*/
|
||||
static inline struct usb_request *
|
||||
usb_ep_alloc_request (struct usb_ep *ep, gfp_t gfp_flags)
|
||||
static inline struct usb_request *usb_ep_alloc_request(struct usb_ep *ep,
|
||||
gfp_t gfp_flags)
|
||||
{
|
||||
return ep->ops->alloc_request (ep, gfp_flags);
|
||||
return ep->ops->alloc_request(ep, gfp_flags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -221,10 +221,10 @@ usb_ep_alloc_request (struct usb_ep *ep, gfp_t gfp_flags)
|
|||
* Caller guarantees the request is not queued, and that it will
|
||||
* no longer be requeued (or otherwise used).
|
||||
*/
|
||||
static inline void
|
||||
usb_ep_free_request (struct usb_ep *ep, struct usb_request *req)
|
||||
static inline void usb_ep_free_request(struct usb_ep *ep,
|
||||
struct usb_request *req)
|
||||
{
|
||||
ep->ops->free_request (ep, req);
|
||||
ep->ops->free_request(ep, req);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -281,10 +281,10 @@ usb_ep_free_request (struct usb_ep *ep, struct usb_request *req)
|
|||
* report errors; errors will also be
|
||||
* reported when the usb peripheral is disconnected.
|
||||
*/
|
||||
static inline int
|
||||
usb_ep_queue (struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags)
|
||||
static inline int usb_ep_queue(struct usb_ep *ep,
|
||||
struct usb_request *req, gfp_t gfp_flags)
|
||||
{
|
||||
return ep->ops->queue (ep, req, gfp_flags);
|
||||
return ep->ops->queue(ep, req, gfp_flags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -301,9 +301,9 @@ usb_ep_queue (struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags)
|
|||
* restrictions prevent drivers from supporting configuration changes,
|
||||
* even to configuration zero (a "chapter 9" requirement).
|
||||
*/
|
||||
static inline int usb_ep_dequeue (struct usb_ep *ep, struct usb_request *req)
|
||||
static inline int usb_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
|
||||
{
|
||||
return ep->ops->dequeue (ep, req);
|
||||
return ep->ops->dequeue(ep, req);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -327,10 +327,9 @@ static inline int usb_ep_dequeue (struct usb_ep *ep, struct usb_request *req)
|
|||
* transfer requests are still queued, or if the controller hardware
|
||||
* (usually a FIFO) still holds bytes that the host hasn't collected.
|
||||
*/
|
||||
static inline int
|
||||
usb_ep_set_halt (struct usb_ep *ep)
|
||||
static inline int usb_ep_set_halt(struct usb_ep *ep)
|
||||
{
|
||||
return ep->ops->set_halt (ep, 1);
|
||||
return ep->ops->set_halt(ep, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -346,10 +345,9 @@ usb_ep_set_halt (struct usb_ep *ep)
|
|||
* Note that some hardware can't support this request (like pxa2xx_udc),
|
||||
* and accordingly can't correctly implement interface altsettings.
|
||||
*/
|
||||
static inline int
|
||||
usb_ep_clear_halt (struct usb_ep *ep)
|
||||
static inline int usb_ep_clear_halt(struct usb_ep *ep)
|
||||
{
|
||||
return ep->ops->set_halt (ep, 0);
|
||||
return ep->ops->set_halt(ep, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -367,11 +365,10 @@ usb_ep_clear_halt (struct usb_ep *ep)
|
|||
* errno if the endpoint doesn't use a FIFO or doesn't support such
|
||||
* precise handling.
|
||||
*/
|
||||
static inline int
|
||||
usb_ep_fifo_status (struct usb_ep *ep)
|
||||
static inline int usb_ep_fifo_status(struct usb_ep *ep)
|
||||
{
|
||||
if (ep->ops->fifo_status)
|
||||
return ep->ops->fifo_status (ep);
|
||||
return ep->ops->fifo_status(ep);
|
||||
else
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@ -385,11 +382,10 @@ usb_ep_fifo_status (struct usb_ep *ep)
|
|||
* must never be used except when endpoint is not being used for any
|
||||
* protocol translation.
|
||||
*/
|
||||
static inline void
|
||||
usb_ep_fifo_flush (struct usb_ep *ep)
|
||||
static inline void usb_ep_fifo_flush(struct usb_ep *ep)
|
||||
{
|
||||
if (ep->ops->fifo_flush)
|
||||
ep->ops->fifo_flush (ep);
|
||||
ep->ops->fifo_flush(ep);
|
||||
}
|
||||
|
||||
|
||||
|
@ -469,10 +465,10 @@ struct usb_gadget {
|
|||
struct device dev;
|
||||
};
|
||||
|
||||
static inline void set_gadget_data (struct usb_gadget *gadget, void *data)
|
||||
{ dev_set_drvdata (&gadget->dev, data); }
|
||||
static inline void *get_gadget_data (struct usb_gadget *gadget)
|
||||
{ return dev_get_drvdata (&gadget->dev); }
|
||||
static inline void set_gadget_data(struct usb_gadget *gadget, void *data)
|
||||
{ dev_set_drvdata(&gadget->dev, data); }
|
||||
static inline void *get_gadget_data(struct usb_gadget *gadget)
|
||||
{ return dev_get_drvdata(&gadget->dev); }
|
||||
|
||||
/* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */
|
||||
#define gadget_for_each_ep(tmp,gadget) \
|
||||
|
@ -511,7 +507,6 @@ static inline int gadget_is_otg(struct usb_gadget *g)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* usb_gadget_frame_number - returns the current frame number
|
||||
* @gadget: controller that reports the frame number
|
||||
|
@ -519,9 +514,9 @@ static inline int gadget_is_otg(struct usb_gadget *g)
|
|||
* Returns the usb frame number, normally eleven bits from a SOF packet,
|
||||
* or negative errno if this device doesn't support this capability.
|
||||
*/
|
||||
static inline int usb_gadget_frame_number (struct usb_gadget *gadget)
|
||||
static inline int usb_gadget_frame_number(struct usb_gadget *gadget)
|
||||
{
|
||||
return gadget->ops->get_frame (gadget);
|
||||
return gadget->ops->get_frame(gadget);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -537,11 +532,11 @@ static inline int usb_gadget_frame_number (struct usb_gadget *gadget)
|
|||
* even if OTG isn't otherwise in use. OTG devices may also start
|
||||
* remote wakeup even when hosts don't explicitly enable it.
|
||||
*/
|
||||
static inline int usb_gadget_wakeup (struct usb_gadget *gadget)
|
||||
static inline int usb_gadget_wakeup(struct usb_gadget *gadget)
|
||||
{
|
||||
if (!gadget->ops->wakeup)
|
||||
return -EOPNOTSUPP;
|
||||
return gadget->ops->wakeup (gadget);
|
||||
return gadget->ops->wakeup(gadget);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -553,12 +548,11 @@ static inline int usb_gadget_wakeup (struct usb_gadget *gadget)
|
|||
*
|
||||
* returns zero on success, else negative errno.
|
||||
*/
|
||||
static inline int
|
||||
usb_gadget_set_selfpowered (struct usb_gadget *gadget)
|
||||
static inline int usb_gadget_set_selfpowered(struct usb_gadget *gadget)
|
||||
{
|
||||
if (!gadget->ops->set_selfpowered)
|
||||
return -EOPNOTSUPP;
|
||||
return gadget->ops->set_selfpowered (gadget, 1);
|
||||
return gadget->ops->set_selfpowered(gadget, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -571,12 +565,11 @@ usb_gadget_set_selfpowered (struct usb_gadget *gadget)
|
|||
*
|
||||
* returns zero on success, else negative errno.
|
||||
*/
|
||||
static inline int
|
||||
usb_gadget_clear_selfpowered (struct usb_gadget *gadget)
|
||||
static inline int usb_gadget_clear_selfpowered(struct usb_gadget *gadget)
|
||||
{
|
||||
if (!gadget->ops->set_selfpowered)
|
||||
return -EOPNOTSUPP;
|
||||
return gadget->ops->set_selfpowered (gadget, 0);
|
||||
return gadget->ops->set_selfpowered(gadget, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -591,12 +584,11 @@ usb_gadget_clear_selfpowered (struct usb_gadget *gadget)
|
|||
*
|
||||
* Returns zero on success, else negative errno.
|
||||
*/
|
||||
static inline int
|
||||
usb_gadget_vbus_connect(struct usb_gadget *gadget)
|
||||
static inline int usb_gadget_vbus_connect(struct usb_gadget *gadget)
|
||||
{
|
||||
if (!gadget->ops->vbus_session)
|
||||
return -EOPNOTSUPP;
|
||||
return gadget->ops->vbus_session (gadget, 1);
|
||||
return gadget->ops->vbus_session(gadget, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -611,12 +603,11 @@ usb_gadget_vbus_connect(struct usb_gadget *gadget)
|
|||
*
|
||||
* Returns zero on success, else negative errno.
|
||||
*/
|
||||
static inline int
|
||||
usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA)
|
||||
static inline int usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA)
|
||||
{
|
||||
if (!gadget->ops->vbus_draw)
|
||||
return -EOPNOTSUPP;
|
||||
return gadget->ops->vbus_draw (gadget, mA);
|
||||
return gadget->ops->vbus_draw(gadget, mA);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -629,12 +620,11 @@ usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA)
|
|||
*
|
||||
* Returns zero on success, else negative errno.
|
||||
*/
|
||||
static inline int
|
||||
usb_gadget_vbus_disconnect(struct usb_gadget *gadget)
|
||||
static inline int usb_gadget_vbus_disconnect(struct usb_gadget *gadget)
|
||||
{
|
||||
if (!gadget->ops->vbus_session)
|
||||
return -EOPNOTSUPP;
|
||||
return gadget->ops->vbus_session (gadget, 0);
|
||||
return gadget->ops->vbus_session(gadget, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -648,12 +638,11 @@ usb_gadget_vbus_disconnect(struct usb_gadget *gadget)
|
|||
*
|
||||
* Returns zero on success, else negative errno.
|
||||
*/
|
||||
static inline int
|
||||
usb_gadget_connect (struct usb_gadget *gadget)
|
||||
static inline int usb_gadget_connect(struct usb_gadget *gadget)
|
||||
{
|
||||
if (!gadget->ops->pullup)
|
||||
return -EOPNOTSUPP;
|
||||
return gadget->ops->pullup (gadget, 1);
|
||||
return gadget->ops->pullup(gadget, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -671,16 +660,14 @@ usb_gadget_connect (struct usb_gadget *gadget)
|
|||
*
|
||||
* Returns zero on success, else negative errno.
|
||||
*/
|
||||
static inline int
|
||||
usb_gadget_disconnect (struct usb_gadget *gadget)
|
||||
static inline int usb_gadget_disconnect(struct usb_gadget *gadget)
|
||||
{
|
||||
if (!gadget->ops->pullup)
|
||||
return -EOPNOTSUPP;
|
||||
return gadget->ops->pullup (gadget, 0);
|
||||
return gadget->ops->pullup(gadget, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
|
@ -764,7 +751,7 @@ struct usb_gadget_driver {
|
|||
void (*suspend)(struct usb_gadget *);
|
||||
void (*resume)(struct usb_gadget *);
|
||||
|
||||
// FIXME support safe rmmod
|
||||
/* FIXME support safe rmmod */
|
||||
struct device_driver driver;
|
||||
};
|
||||
|
||||
|
@ -790,7 +777,7 @@ struct usb_gadget_driver {
|
|||
* the bind() functions will be in init sections.
|
||||
* This function must be called in a context that can sleep.
|
||||
*/
|
||||
int usb_gadget_register_driver (struct usb_gadget_driver *driver);
|
||||
int usb_gadget_register_driver(struct usb_gadget_driver *driver);
|
||||
|
||||
/**
|
||||
* usb_gadget_unregister_driver - unregister a gadget driver
|
||||
|
@ -805,7 +792,7 @@ int usb_gadget_register_driver (struct usb_gadget_driver *driver);
|
|||
* will in in exit sections, so may not be linked in some kernels.
|
||||
* This function must be called in a context that can sleep.
|
||||
*/
|
||||
int usb_gadget_unregister_driver (struct usb_gadget_driver *driver);
|
||||
int usb_gadget_unregister_driver(struct usb_gadget_driver *driver);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
|
@ -838,7 +825,7 @@ struct usb_gadget_strings {
|
|||
};
|
||||
|
||||
/* put descriptor for string with that id into buf (buflen >= 256) */
|
||||
int usb_gadget_get_string (struct usb_gadget_strings *table, int id, u8 *buf);
|
||||
int usb_gadget_get_string(struct usb_gadget_strings *table, int id, u8 *buf);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
|
@ -856,10 +843,10 @@ int usb_gadget_config_buf(const struct usb_config_descriptor *config,
|
|||
|
||||
/* utility wrapping a simple endpoint selection policy */
|
||||
|
||||
extern struct usb_ep *usb_ep_autoconfig (struct usb_gadget *,
|
||||
extern struct usb_ep *usb_ep_autoconfig(struct usb_gadget *,
|
||||
struct usb_endpoint_descriptor *) __devinit;
|
||||
|
||||
extern void usb_ep_autoconfig_reset (struct usb_gadget *) __devinit;
|
||||
extern void usb_ep_autoconfig_reset(struct usb_gadget *) __devinit;
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ enum usb_gadgetfs_event_type {
|
|||
GADGETFS_DISCONNECT,
|
||||
GADGETFS_SETUP,
|
||||
GADGETFS_SUSPEND,
|
||||
// and likely more !
|
||||
/* and likely more ! */
|
||||
};
|
||||
|
||||
/* NOTE: this structure must stay the same size and layout on
|
||||
|
@ -44,21 +44,28 @@ enum usb_gadgetfs_event_type {
|
|||
*/
|
||||
struct usb_gadgetfs_event {
|
||||
union {
|
||||
// NOP, DISCONNECT, SUSPEND: nothing
|
||||
// ... some hardware can't report disconnection
|
||||
/* NOP, DISCONNECT, SUSPEND: nothing
|
||||
* ... some hardware can't report disconnection
|
||||
*/
|
||||
|
||||
// CONNECT: just the speed
|
||||
/* CONNECT: just the speed */
|
||||
enum usb_device_speed speed;
|
||||
|
||||
// SETUP: packet; DATA phase i/o precedes next event
|
||||
// (setup.bmRequestType & USB_DIR_IN) flags direction
|
||||
// ... includes SET_CONFIGURATION, SET_INTERFACE
|
||||
/* SETUP: packet; DATA phase i/o precedes next event
|
||||
*(setup.bmRequestType & USB_DIR_IN) flags direction
|
||||
* ... includes SET_CONFIGURATION, SET_INTERFACE
|
||||
*/
|
||||
struct usb_ctrlrequest setup;
|
||||
} u;
|
||||
enum usb_gadgetfs_event_type type;
|
||||
};
|
||||
|
||||
|
||||
/* The 'g' code is also used by printer gadget ioctl requests.
|
||||
* Don't add any colliding codes to either driver, and keep
|
||||
* them in unique ranges (size 0x20 for now).
|
||||
*/
|
||||
|
||||
/* endpoint ioctls */
|
||||
|
||||
/* IN transfers may be reported to the gadget driver as complete
|
||||
|
@ -68,14 +75,14 @@ struct usb_gadgetfs_event {
|
|||
* THIS returns how many bytes are "unclaimed" in the endpoint fifo
|
||||
* (needed for precise fault handling, when the hardware allows it)
|
||||
*/
|
||||
#define GADGETFS_FIFO_STATUS _IO('g',1)
|
||||
#define GADGETFS_FIFO_STATUS _IO('g', 1)
|
||||
|
||||
/* discards any unclaimed data in the fifo. */
|
||||
#define GADGETFS_FIFO_FLUSH _IO('g',2)
|
||||
#define GADGETFS_FIFO_FLUSH _IO('g', 2)
|
||||
|
||||
/* resets endpoint halt+toggle; used to implement set_interface.
|
||||
* some hardware (like pxa2xx) can't support this.
|
||||
*/
|
||||
#define GADGETFS_CLEAR_HALT _IO('g',3)
|
||||
#define GADGETFS_CLEAR_HALT _IO('g', 3)
|
||||
|
||||
#endif /* __LINUX_USB_GADGETFS_H */
|
||||
|
|
|
@ -14,14 +14,23 @@
|
|||
this information.
|
||||
*/
|
||||
struct iowarrior_info {
|
||||
__u32 vendor; /* vendor id : supposed to be USB_VENDOR_ID_CODEMERCS in all cases */
|
||||
__u32 product; /* product id : depends on type of chip (USB_DEVICE_ID_CODEMERCS_XXXXX) */
|
||||
__u8 serial[9]; /* the serial number of our chip (if a serial-number is not available this is empty string) */
|
||||
__u32 revision; /* revision number of the chip */
|
||||
__u32 speed; /* USB-speed of the device (0=UNKNOWN, 1=LOW, 2=FULL 3=HIGH) */
|
||||
__u32 power; /* power consumption of the device in mA */
|
||||
__u32 if_num; /* the number of the endpoint */
|
||||
__u32 report_size; /* size of the data-packets on this interface */
|
||||
/* vendor id : supposed to be USB_VENDOR_ID_CODEMERCS in all cases */
|
||||
__u32 vendor;
|
||||
/* product id : depends on type of chip (USB_DEVICE_ID_CODEMERCS_X) */
|
||||
__u32 product;
|
||||
/* the serial number of our chip (if a serial-number is not available
|
||||
* this is empty string) */
|
||||
__u8 serial[9];
|
||||
/* revision number of the chip */
|
||||
__u32 revision;
|
||||
/* USB-speed of the device (0=UNKNOWN, 1=LOW, 2=FULL 3=HIGH) */
|
||||
__u32 speed;
|
||||
/* power consumption of the device in mA */
|
||||
__u32 power;
|
||||
/* the number of the endpoint */
|
||||
__u32 if_num;
|
||||
/* size of the data-packets on this interface */
|
||||
__u32 report_size;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -25,5 +25,5 @@ struct isp116x_platform_data {
|
|||
300ns delay between access to ADDR_REG and DATA_REG
|
||||
OE, WE MUST NOT be changed during these intervals
|
||||
*/
|
||||
void (*delay) (struct device * dev, int delay);
|
||||
void (*delay) (struct device *dev, int delay);
|
||||
};
|
||||
|
|
|
@ -47,9 +47,9 @@ struct usb_ms_header_descriptor {
|
|||
/* 6.1.2.2 MIDI IN Jack Descriptor */
|
||||
struct usb_midi_in_jack_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType; // USB_DT_CS_INTERFACE
|
||||
__u8 bDescriptorSubtype; // USB_MS_MIDI_IN_JACK
|
||||
__u8 bJackType; // USB_MS_EMBEDDED/EXTERNAL
|
||||
__u8 bDescriptorType; /* USB_DT_CS_INTERFACE */
|
||||
__u8 bDescriptorSubtype; /* USB_MS_MIDI_IN_JACK */
|
||||
__u8 bJackType; /* USB_MS_EMBEDDED/EXTERNAL */
|
||||
__u8 bJackID;
|
||||
__u8 iJack;
|
||||
} __attribute__ ((packed));
|
||||
|
@ -64,12 +64,12 @@ struct usb_midi_source_pin {
|
|||
/* 6.1.2.3 MIDI OUT Jack Descriptor */
|
||||
struct usb_midi_out_jack_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType; // USB_DT_CS_INTERFACE
|
||||
__u8 bDescriptorSubtype; // USB_MS_MIDI_OUT_JACK
|
||||
__u8 bJackType; // USB_MS_EMBEDDED/EXTERNAL
|
||||
__u8 bDescriptorType; /* USB_DT_CS_INTERFACE */
|
||||
__u8 bDescriptorSubtype; /* USB_MS_MIDI_OUT_JACK */
|
||||
__u8 bJackType; /* USB_MS_EMBEDDED/EXTERNAL */
|
||||
__u8 bJackID;
|
||||
__u8 bNrInputPins; // p
|
||||
struct usb_midi_source_pin pins[]; // [p]
|
||||
__u8 bNrInputPins; /* p */
|
||||
struct usb_midi_source_pin pins[]; /* [p] */
|
||||
/*__u8 iJack; -- ommitted due to variable-sized pins[] */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
@ -90,11 +90,11 @@ struct usb_midi_out_jack_descriptor_##p { \
|
|||
|
||||
/* 6.2.2 Class-Specific MS Bulk Data Endpoint Descriptor */
|
||||
struct usb_ms_endpoint_descriptor {
|
||||
__u8 bLength; // 4+n
|
||||
__u8 bDescriptorType; // USB_DT_CS_ENDPOINT
|
||||
__u8 bDescriptorSubtype; // USB_MS_GENERAL
|
||||
__u8 bNumEmbMIDIJack; // n
|
||||
__u8 baAssocJackID[]; // [n]
|
||||
__u8 bLength; /* 4+n */
|
||||
__u8 bDescriptorType; /* USB_DT_CS_ENDPOINT */
|
||||
__u8 bDescriptorSubtype; /* USB_MS_GENERAL */
|
||||
__u8 bNumEmbMIDIJack; /* n */
|
||||
__u8 baAssocJackID[]; /* [n] */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define USB_DT_MS_ENDPOINT_SIZE(n) (4 + (n))
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
/* main registers, BAR0 + 0x0000 */
|
||||
struct net2280_regs {
|
||||
// offset 0x0000
|
||||
/* offset 0x0000 */
|
||||
u32 devinit;
|
||||
#define LOCAL_CLOCK_FREQUENCY 8
|
||||
#define FORCE_PCI_RESET 7
|
||||
|
@ -61,7 +61,7 @@ struct net2280_regs {
|
|||
#define EEPROM_WRITE_DATA 0
|
||||
u32 eeclkfreq;
|
||||
u32 _unused0;
|
||||
// offset 0x0010
|
||||
/* offset 0x0010 */
|
||||
|
||||
u32 pciirqenb0; /* interrupt PCI master ... */
|
||||
#define SETUP_PACKET_INTERRUPT_ENABLE 7
|
||||
|
@ -131,7 +131,7 @@ struct net2280_regs {
|
|||
#define RESUME_INTERRUPT_ENABLE 1
|
||||
#define SOF_INTERRUPT_ENABLE 0
|
||||
|
||||
// offset 0x0020
|
||||
/* offset 0x0020 */
|
||||
u32 _unused1;
|
||||
u32 usbirqenb1;
|
||||
#define USB_INTERRUPT_ENABLE 31
|
||||
|
@ -195,7 +195,7 @@ struct net2280_regs {
|
|||
#define SUSPEND_REQUEST_CHANGE_INTERRUPT 2
|
||||
#define RESUME_INTERRUPT 1
|
||||
#define SOF_INTERRUPT 0
|
||||
// offset 0x0030
|
||||
/* offset 0x0030 */
|
||||
u32 idxaddr;
|
||||
u32 idxdata;
|
||||
u32 fifoctl;
|
||||
|
@ -204,7 +204,7 @@ struct net2280_regs {
|
|||
#define PCI_BASE2_SELECT 2
|
||||
#define FIFO_CONFIGURATION_SELECT 0
|
||||
u32 _unused2;
|
||||
// offset 0x0040
|
||||
/* offset 0x0040 */
|
||||
u32 memaddr;
|
||||
#define START 28
|
||||
#define DIRECTION 27
|
||||
|
@ -213,7 +213,7 @@ struct net2280_regs {
|
|||
u32 memdata0;
|
||||
u32 memdata1;
|
||||
u32 _unused3;
|
||||
// offset 0x0050
|
||||
/* offset 0x0050 */
|
||||
u32 gpioctl;
|
||||
#define GPIO3_LED_SELECT 12
|
||||
#define GPIO3_INTERRUPT_ENABLE 11
|
||||
|
@ -237,7 +237,7 @@ struct net2280_regs {
|
|||
|
||||
/* usb control, BAR0 + 0x0080 */
|
||||
struct net2280_usb_regs {
|
||||
// offset 0x0080
|
||||
/* offset 0x0080 */
|
||||
u32 stdrsp;
|
||||
#define STALL_UNSUPPORTED_REQUESTS 31
|
||||
#define SET_TEST_MODE 16
|
||||
|
@ -275,7 +275,7 @@ struct net2280_usb_regs {
|
|||
#define PME_WAKEUP_ENABLE 2
|
||||
#define DEVICE_REMOTE_WAKEUP_ENABLE 1
|
||||
#define SELF_POWERED_STATUS 0
|
||||
// offset 0x0090
|
||||
/* offset 0x0090 */
|
||||
u32 usbstat;
|
||||
#define HIGH_SPEED 7
|
||||
#define FULL_SPEED 6
|
||||
|
@ -291,7 +291,7 @@ struct net2280_usb_regs {
|
|||
#define TERMINATION_SELECT 0
|
||||
u32 setup0123;
|
||||
u32 setup4567;
|
||||
// offset 0x0090
|
||||
/* offset 0x0090 */
|
||||
u32 _unused0;
|
||||
u32 ouraddr;
|
||||
#define FORCE_IMMEDIATE 7
|
||||
|
@ -301,7 +301,7 @@ struct net2280_usb_regs {
|
|||
|
||||
/* pci control, BAR0 + 0x0100 */
|
||||
struct net2280_pci_regs {
|
||||
// offset 0x0100
|
||||
/* offset 0x0100 */
|
||||
u32 pcimstctl;
|
||||
#define PCI_ARBITER_PARK_SELECT 13
|
||||
#define PCI_MULTI LEVEL_ARBITER 12
|
||||
|
@ -331,7 +331,7 @@ struct net2280_pci_regs {
|
|||
* that can be loaded into some of these registers.
|
||||
*/
|
||||
struct net2280_dma_regs { /* [11.7] */
|
||||
// offset 0x0180, 0x01a0, 0x01c0, 0x01e0,
|
||||
/* offset 0x0180, 0x01a0, 0x01c0, 0x01e0, */
|
||||
u32 dmactl;
|
||||
#define DMA_SCATTER_GATHER_DONE_INTERRUPT_ENABLE 25
|
||||
#define DMA_CLEAR_COUNT_ENABLE 21
|
||||
|
@ -355,7 +355,7 @@ struct net2280_dma_regs { /* [11.7] */
|
|||
#define DMA_ABORT 1
|
||||
#define DMA_START 0
|
||||
u32 _unused0 [2];
|
||||
// offset 0x0190, 0x01b0, 0x01d0, 0x01f0,
|
||||
/* offset 0x0190, 0x01b0, 0x01d0, 0x01f0, */
|
||||
u32 dmacount;
|
||||
#define VALID_BIT 31
|
||||
#define DMA_DIRECTION 30
|
||||
|
@ -371,9 +371,9 @@ struct net2280_dma_regs { /* [11.7] */
|
|||
/* dedicated endpoint registers, BAR0 + 0x0200 */
|
||||
|
||||
struct net2280_dep_regs { /* [11.8] */
|
||||
// offset 0x0200, 0x0210, 0x220, 0x230, 0x240
|
||||
/* offset 0x0200, 0x0210, 0x220, 0x230, 0x240 */
|
||||
u32 dep_cfg;
|
||||
// offset 0x0204, 0x0214, 0x224, 0x234, 0x244
|
||||
/* offset 0x0204, 0x0214, 0x224, 0x234, 0x244 */
|
||||
u32 dep_rsp;
|
||||
u32 _unused [2];
|
||||
} __attribute__ ((packed));
|
||||
|
@ -383,7 +383,7 @@ struct net2280_dep_regs { /* [11.8] */
|
|||
* ep0 reserved for control; E and F have only 64 bytes of fifo
|
||||
*/
|
||||
struct net2280_ep_regs { /* [11.9] */
|
||||
// offset 0x0300, 0x0320, 0x0340, 0x0360, 0x0380, 0x03a0, 0x03c0
|
||||
/* offset 0x0300, 0x0320, 0x0340, 0x0360, 0x0380, 0x03a0, 0x03c0 */
|
||||
u32 ep_cfg;
|
||||
#define ENDPOINT_BYTE_COUNT 16
|
||||
#define ENDPOINT_ENABLE 10
|
||||
|
@ -435,7 +435,7 @@ struct net2280_ep_regs { /* [11.9] */
|
|||
#define DATA_PACKET_TRANSMITTED_INTERRUPT 2
|
||||
#define DATA_OUT_PING_TOKEN_INTERRUPT 1
|
||||
#define DATA_IN_TOKEN_INTERRUPT 0
|
||||
// offset 0x0310, 0x0330, 0x0350, 0x0370, 0x0390, 0x03b0, 0x03d0
|
||||
/* offset 0x0310, 0x0330, 0x0350, 0x0370, 0x0390, 0x03b0, 0x03d0 */
|
||||
u32 ep_avail;
|
||||
u32 ep_data;
|
||||
u32 _unused0 [2];
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// include/linux/usb/otg.h
|
||||
/* USB OTG (On The Go) defines */
|
||||
|
||||
/*
|
||||
* These APIs may be used between USB controllers. USB device drivers
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
#define SERIAL_TTY_MAJOR 188 /* Nice legal number now */
|
||||
#define SERIAL_TTY_MINORS 255 /* loads of devices :) */
|
||||
|
||||
#define MAX_NUM_PORTS 8 /* The maximum number of ports one device can grab at once */
|
||||
/* The maximum number of ports one device can grab at once */
|
||||
#define MAX_NUM_PORTS 8
|
||||
|
||||
/* parity check flag */
|
||||
#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
|
||||
|
@ -61,29 +62,29 @@
|
|||
* ports of a device.
|
||||
*/
|
||||
struct usb_serial_port {
|
||||
struct usb_serial * serial;
|
||||
struct tty_struct * tty;
|
||||
struct usb_serial *serial;
|
||||
struct tty_struct *tty;
|
||||
spinlock_t lock;
|
||||
struct mutex mutex;
|
||||
unsigned char number;
|
||||
|
||||
unsigned char * interrupt_in_buffer;
|
||||
struct urb * interrupt_in_urb;
|
||||
unsigned char *interrupt_in_buffer;
|
||||
struct urb *interrupt_in_urb;
|
||||
__u8 interrupt_in_endpointAddress;
|
||||
|
||||
unsigned char * interrupt_out_buffer;
|
||||
unsigned char *interrupt_out_buffer;
|
||||
int interrupt_out_size;
|
||||
struct urb * interrupt_out_urb;
|
||||
struct urb *interrupt_out_urb;
|
||||
__u8 interrupt_out_endpointAddress;
|
||||
|
||||
unsigned char * bulk_in_buffer;
|
||||
unsigned char *bulk_in_buffer;
|
||||
int bulk_in_size;
|
||||
struct urb * read_urb;
|
||||
struct urb *read_urb;
|
||||
__u8 bulk_in_endpointAddress;
|
||||
|
||||
unsigned char * bulk_out_buffer;
|
||||
unsigned char *bulk_out_buffer;
|
||||
int bulk_out_size;
|
||||
struct urb * write_urb;
|
||||
struct urb *write_urb;
|
||||
int write_urb_busy;
|
||||
__u8 bulk_out_endpointAddress;
|
||||
|
||||
|
@ -92,17 +93,19 @@ struct usb_serial_port {
|
|||
int open_count;
|
||||
char throttled;
|
||||
char throttle_req;
|
||||
char console;
|
||||
struct device dev;
|
||||
};
|
||||
#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
|
||||
|
||||
/* get and set the port private data pointer helper functions */
|
||||
static inline void *usb_get_serial_port_data (struct usb_serial_port *port)
|
||||
static inline void *usb_get_serial_port_data(struct usb_serial_port *port)
|
||||
{
|
||||
return dev_get_drvdata(&port->dev);
|
||||
}
|
||||
|
||||
static inline void usb_set_serial_port_data (struct usb_serial_port *port, void *data)
|
||||
static inline void usb_set_serial_port_data(struct usb_serial_port *port,
|
||||
void *data)
|
||||
{
|
||||
dev_set_drvdata(&port->dev, data);
|
||||
}
|
||||
|
@ -125,9 +128,10 @@ static inline void usb_set_serial_port_data (struct usb_serial_port *port, void
|
|||
* usb_set_serial_data() to access this.
|
||||
*/
|
||||
struct usb_serial {
|
||||
struct usb_device * dev;
|
||||
struct usb_serial_driver * type;
|
||||
struct usb_interface * interface;
|
||||
struct usb_device *dev;
|
||||
struct usb_serial_driver *type;
|
||||
struct usb_interface *interface;
|
||||
unsigned char disconnected;
|
||||
unsigned char minor;
|
||||
unsigned char num_ports;
|
||||
unsigned char num_port_pointers;
|
||||
|
@ -135,29 +139,30 @@ struct usb_serial {
|
|||
char num_interrupt_out;
|
||||
char num_bulk_in;
|
||||
char num_bulk_out;
|
||||
struct usb_serial_port * port[MAX_NUM_PORTS];
|
||||
struct usb_serial_port *port[MAX_NUM_PORTS];
|
||||
struct kref kref;
|
||||
void * private;
|
||||
struct mutex disc_mutex;
|
||||
void *private;
|
||||
};
|
||||
#define to_usb_serial(d) container_of(d, struct usb_serial, kref)
|
||||
|
||||
#define NUM_DONT_CARE 99
|
||||
|
||||
/* get and set the serial private data pointer helper functions */
|
||||
static inline void *usb_get_serial_data (struct usb_serial *serial)
|
||||
static inline void *usb_get_serial_data(struct usb_serial *serial)
|
||||
{
|
||||
return serial->private;
|
||||
}
|
||||
|
||||
static inline void usb_set_serial_data (struct usb_serial *serial, void *data)
|
||||
static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
|
||||
{
|
||||
serial->private = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* usb_serial_driver - describes a usb serial driver
|
||||
* @description: pointer to a string that describes this driver. This string used
|
||||
* in the syslog messages when a device is inserted or removed.
|
||||
* @description: pointer to a string that describes this driver. This string
|
||||
* used in the syslog messages when a device is inserted or removed.
|
||||
* @id_table: pointer to a list of usb_device_id structures that define all
|
||||
* of the devices this structure can support.
|
||||
* @num_interrupt_in: If a device doesn't have this many interrupt-in
|
||||
|
@ -218,82 +223,91 @@ struct usb_serial_driver {
|
|||
struct usb_driver *usb_driver;
|
||||
struct usb_dynids dynids;
|
||||
|
||||
int (*probe) (struct usb_serial *serial, const struct usb_device_id *id);
|
||||
int (*attach) (struct usb_serial *serial);
|
||||
int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
|
||||
int (*attach)(struct usb_serial *serial);
|
||||
int (*calc_num_ports) (struct usb_serial *serial);
|
||||
|
||||
void (*shutdown) (struct usb_serial *serial);
|
||||
void (*shutdown)(struct usb_serial *serial);
|
||||
|
||||
int (*port_probe) (struct usb_serial_port *port);
|
||||
int (*port_remove) (struct usb_serial_port *port);
|
||||
int (*port_probe)(struct usb_serial_port *port);
|
||||
int (*port_remove)(struct usb_serial_port *port);
|
||||
|
||||
int (*suspend) (struct usb_serial *serial, pm_message_t message);
|
||||
int (*resume) (struct usb_serial *serial);
|
||||
int (*suspend)(struct usb_serial *serial, pm_message_t message);
|
||||
int (*resume)(struct usb_serial *serial);
|
||||
|
||||
/* serial function calls */
|
||||
int (*open) (struct usb_serial_port *port, struct file * filp);
|
||||
void (*close) (struct usb_serial_port *port, struct file * filp);
|
||||
int (*write) (struct usb_serial_port *port, const unsigned char *buf, int count);
|
||||
int (*write_room) (struct usb_serial_port *port);
|
||||
int (*ioctl) (struct usb_serial_port *port, struct file * file, unsigned int cmd, unsigned long arg);
|
||||
void (*set_termios) (struct usb_serial_port *port, struct ktermios * old);
|
||||
void (*break_ctl) (struct usb_serial_port *port, int break_state);
|
||||
int (*chars_in_buffer) (struct usb_serial_port *port);
|
||||
void (*throttle) (struct usb_serial_port *port);
|
||||
void (*unthrottle) (struct usb_serial_port *port);
|
||||
int (*tiocmget) (struct usb_serial_port *port, struct file *file);
|
||||
int (*tiocmset) (struct usb_serial_port *port, struct file *file, unsigned int set, unsigned int clear);
|
||||
int (*open)(struct usb_serial_port *port, struct file *filp);
|
||||
void (*close)(struct usb_serial_port *port, struct file *filp);
|
||||
int (*write)(struct usb_serial_port *port, const unsigned char *buf,
|
||||
int count);
|
||||
int (*write_room)(struct usb_serial_port *port);
|
||||
int (*ioctl)(struct usb_serial_port *port, struct file *file,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
void (*set_termios)(struct usb_serial_port *port, struct ktermios *old);
|
||||
void (*break_ctl)(struct usb_serial_port *port, int break_state);
|
||||
int (*chars_in_buffer)(struct usb_serial_port *port);
|
||||
void (*throttle)(struct usb_serial_port *port);
|
||||
void (*unthrottle)(struct usb_serial_port *port);
|
||||
int (*tiocmget)(struct usb_serial_port *port, struct file *file);
|
||||
int (*tiocmset)(struct usb_serial_port *port, struct file *file,
|
||||
unsigned int set, unsigned int clear);
|
||||
|
||||
void (*read_int_callback)(struct urb *urb);
|
||||
void (*write_int_callback)(struct urb *urb);
|
||||
void (*read_bulk_callback)(struct urb *urb);
|
||||
void (*write_bulk_callback)(struct urb *urb);
|
||||
};
|
||||
#define to_usb_serial_driver(d) container_of(d, struct usb_serial_driver, driver)
|
||||
#define to_usb_serial_driver(d) \
|
||||
container_of(d, struct usb_serial_driver, driver)
|
||||
|
||||
extern int usb_serial_register(struct usb_serial_driver *driver);
|
||||
extern void usb_serial_deregister(struct usb_serial_driver *driver);
|
||||
extern void usb_serial_port_softint(struct usb_serial_port *port);
|
||||
|
||||
extern int usb_serial_probe(struct usb_interface *iface, const struct usb_device_id *id);
|
||||
extern int usb_serial_probe(struct usb_interface *iface,
|
||||
const struct usb_device_id *id);
|
||||
extern void usb_serial_disconnect(struct usb_interface *iface);
|
||||
|
||||
extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
|
||||
extern int usb_serial_resume(struct usb_interface *intf);
|
||||
|
||||
extern int ezusb_writememory (struct usb_serial *serial, int address, unsigned char *data, int length, __u8 bRequest);
|
||||
extern int ezusb_set_reset (struct usb_serial *serial, unsigned char reset_bit);
|
||||
extern int ezusb_writememory(struct usb_serial *serial, int address,
|
||||
unsigned char *data, int length, __u8 bRequest);
|
||||
extern int ezusb_set_reset(struct usb_serial *serial, unsigned char reset_bit);
|
||||
|
||||
/* USB Serial console functions */
|
||||
#ifdef CONFIG_USB_SERIAL_CONSOLE
|
||||
extern void usb_serial_console_init (int debug, int minor);
|
||||
extern void usb_serial_console_exit (void);
|
||||
extern void usb_serial_console_init(int debug, int minor);
|
||||
extern void usb_serial_console_exit(void);
|
||||
extern void usb_serial_console_disconnect(struct usb_serial *serial);
|
||||
#else
|
||||
static inline void usb_serial_console_init (int debug, int minor) { }
|
||||
static inline void usb_serial_console_exit (void) { }
|
||||
static inline void usb_serial_console_init(int debug, int minor) { }
|
||||
static inline void usb_serial_console_exit(void) { }
|
||||
static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
|
||||
#endif
|
||||
|
||||
/* Functions needed by other parts of the usbserial core */
|
||||
extern struct usb_serial *usb_serial_get_by_index (unsigned int minor);
|
||||
extern struct usb_serial *usb_serial_get_by_index(unsigned int minor);
|
||||
extern void usb_serial_put(struct usb_serial *serial);
|
||||
extern int usb_serial_generic_open (struct usb_serial_port *port, struct file *filp);
|
||||
extern int usb_serial_generic_write (struct usb_serial_port *port, const unsigned char *buf, int count);
|
||||
extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp);
|
||||
extern int usb_serial_generic_resume (struct usb_serial *serial);
|
||||
extern int usb_serial_generic_write_room (struct usb_serial_port *port);
|
||||
extern int usb_serial_generic_chars_in_buffer (struct usb_serial_port *port);
|
||||
extern void usb_serial_generic_read_bulk_callback (struct urb *urb);
|
||||
extern void usb_serial_generic_write_bulk_callback (struct urb *urb);
|
||||
extern void usb_serial_generic_throttle (struct usb_serial_port *port);
|
||||
extern void usb_serial_generic_unthrottle (struct usb_serial_port *port);
|
||||
extern void usb_serial_generic_shutdown (struct usb_serial *serial);
|
||||
extern int usb_serial_generic_register (int debug);
|
||||
extern void usb_serial_generic_deregister (void);
|
||||
extern int usb_serial_generic_open(struct usb_serial_port *port,
|
||||
struct file *filp);
|
||||
extern int usb_serial_generic_write(struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count);
|
||||
extern void usb_serial_generic_close(struct usb_serial_port *port,
|
||||
struct file *filp);
|
||||
extern int usb_serial_generic_resume(struct usb_serial *serial);
|
||||
extern int usb_serial_generic_write_room(struct usb_serial_port *port);
|
||||
extern int usb_serial_generic_chars_in_buffer(struct usb_serial_port *port);
|
||||
extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
|
||||
extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
|
||||
extern void usb_serial_generic_throttle(struct usb_serial_port *port);
|
||||
extern void usb_serial_generic_unthrottle(struct usb_serial_port *port);
|
||||
extern void usb_serial_generic_shutdown(struct usb_serial *serial);
|
||||
extern int usb_serial_generic_register(int debug);
|
||||
extern void usb_serial_generic_deregister(void);
|
||||
|
||||
extern int usb_serial_bus_register (struct usb_serial_driver *device);
|
||||
extern void usb_serial_bus_deregister (struct usb_serial_driver *device);
|
||||
extern int usb_serial_bus_register(struct usb_serial_driver *device);
|
||||
extern void usb_serial_bus_deregister(struct usb_serial_driver *device);
|
||||
|
||||
extern struct usb_serial_driver usb_serial_generic_device;
|
||||
extern struct bus_type usb_serial_bus_type;
|
||||
|
@ -307,16 +321,22 @@ static inline void usb_serial_debug_data(int debug,
|
|||
int i;
|
||||
|
||||
if (debug) {
|
||||
dev_printk(KERN_DEBUG, dev, "%s - length = %d, data = ", function, size);
|
||||
dev_printk(KERN_DEBUG, dev, "%s - length = %d, data = ",
|
||||
function, size);
|
||||
for (i = 0; i < size; ++i)
|
||||
printk ("%.2x ", data[i]);
|
||||
printk ("\n");
|
||||
printk("%.2x ", data[i]);
|
||||
printk("\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Use our own dbg macro */
|
||||
#undef dbg
|
||||
#define dbg(format, arg...) do { if (debug) printk(KERN_DEBUG "%s: " format "\n" , __FILE__ , ## arg); } while (0)
|
||||
#define dbg(format, arg...) \
|
||||
do { \
|
||||
if (debug) \
|
||||
printk(KERN_DEBUG "%s: " format "\n" , __FILE__ , \
|
||||
## arg); \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ struct sl811_platform_data {
|
|||
/* pulse sl811 nRST (probably with a GPIO) */
|
||||
void (*reset)(struct device *dev);
|
||||
|
||||
// some boards need something like these:
|
||||
// int (*check_overcurrent)(struct device *dev);
|
||||
// void (*clock_enable)(struct device *dev, int is_on);
|
||||
/* some boards need something like these: */
|
||||
/* int (*check_overcurrent)(struct device *dev); */
|
||||
/* void (*clock_enable)(struct device *dev, int is_on); */
|
||||
};
|
||||
|
||||
|
|
|
@ -80,10 +80,9 @@ enum { US_DO_ALL_FLAGS };
|
|||
#define US_SC_UFI 0x04 /* Floppy */
|
||||
#define US_SC_8070 0x05 /* Removable media */
|
||||
#define US_SC_SCSI 0x06 /* Transparent */
|
||||
#define US_SC_ISD200 0x07 /* ISD200 ATA */
|
||||
#define US_SC_MIN US_SC_RBC
|
||||
#define US_SC_MAX US_SC_ISD200
|
||||
#define US_SC_LOCKABLE 0x07 /* Password-protected */
|
||||
|
||||
#define US_SC_ISD200 0xf0 /* ISD200 ATA */
|
||||
#define US_SC_DEVICE 0xff /* Use device's value */
|
||||
|
||||
/* Protocols */
|
||||
|
|
|
@ -104,7 +104,7 @@ struct usbdevfs_urb {
|
|||
int error_count;
|
||||
unsigned int signr; /* signal to be sent on completion,
|
||||
or 0 if none should be sent. */
|
||||
void *usercontext;
|
||||
void __user *usercontext;
|
||||
struct usbdevfs_iso_packet_desc iso_frame_desc[0];
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue