Commit 6c645061 authored by Linus Torvalds's avatar Linus Torvalds

Merge http://linuxusb.bkbits.net/linus-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 19be573c febf5939
Revised: 2001-Dec-06.
Revised: 2002-Feb-09.
This is the documentation of (hopefully) all possible error codes (and
their interpretation) that can be returned from the host controller drivers
and from usbcore.
their interpretation) that can be returned from usbcore.
Some of them are returned by the Host Controller Drivers (HCDs), which
device drivers only see through usbcore. As a rule, all the HCDs should
behave the same except for transfer speed dependent behaviors.
**************************************************************************
......@@ -19,9 +22,9 @@ USB-specific:
-ENODEV specified USB-device or bus doesn't exist
-ENXIO a control or interrupt URB is already queued to this endpoint; or
a bulk URB is already queued to this endpoint and
USB_QUEUE_BULK wasn't used (UHCI HCDs only)
-ENXIO a control or interrupt URB is already queued to this endpoint;
or (UHCI only) a bulk URB is already queued to this endpoint
and USB_QUEUE_BULK wasn't used
-EINVAL a) Invalid transfer type specified (or not supported)
b) Invalid interrupt interval (0<=n<256)
......@@ -34,7 +37,8 @@ USB-specific:
-EFBIG too much ISO frames requested (currently uhci>900)
-EPIPE specified pipe-handle is already stalled
-EPIPE Specified endpoint is stalled. For non-control endpoints,
reset this status with usb_clear_halt().
-EMSGSIZE endpoint message size is zero, do interface/alternate setting
......@@ -50,19 +54,29 @@ USB-specific:
* or in iso_frame_desc[n].status (for ISO) *
**************************************************************************
USB device drivers may only test urb status values in completion handlers.
This is because otherwise there would be a race between HCDs updating
these values on one CPU, and device drivers testing them on another CPU.
A transfer's actual_length may be positive even when an error has been
reported. That's because transfers often involve several packets, so that
one or more packets could finish before an error stops further endpoint I/O.
0 Transfer completed successfully
-ENOENT URB was canceled by usb_unlink_urb
-ENOENT URB was synchronously unlinked by usb_unlink_urb
-EINPROGRESS URB still pending, no results yet
(actually no error until now;-)
(That is, if drivers see this it's a bug.)
-EPROTO a) bitstuff error
-EPROTO (*) a) bitstuff error
b) unknown USB error
-EILSEQ CRC mismatch
-EILSEQ (*) CRC mismatch
-EPIPE endpoint stalled
-EPIPE Endpoint stalled. For non-control endpoints,
reset this status with usb_clear_halt().
-ECOMM During an IN transfer, the host controller
received data from an endpoint faster than it
......@@ -72,24 +86,35 @@ USB-specific:
could not retrieve data from system memory fast
enough to keep up with the USB data rate
-EOVERFLOW The amount of data returned by the endpoint was
-EOVERFLOW (*) The amount of data returned by the endpoint was
greater than either the max packet size of the
endpoint or the remaining buffer size. "Babble".
-EREMOTEIO The endpoint returned less than max packet size
and that amount did not fill the specified buffer
-ETIMEDOUT transfer timed out, NAK
(and USB_DISBLE_SPD was not set in transfer_flags)
-ENODEV device was removed
-ETIMEDOUT transfer timed out, NAK
-EREMOTEIO short packet detected
-ENODEV Device was removed. Often preceded by a burst of
other errors, since the hub driver does't detect
device removal events immediately.
-EXDEV ISO transfer only partially completed
look at individual frame status for details
-EINVAL ISO madness, if this happens: Log off and go home
-ECONNRESET the URB is being unlinked asynchronously
-ECONNRESET URB was asynchronously unlinked by usb_unlink_urb
-ESHUTDOWN The host controller has been disabled due to some
problem that could not be worked around.
(*) Error codes like -EPROTO, -EILSEQ and -EOVERFLOW normally indicate
hardware problems such as bad devices (including firmware) or cables.
**************************************************************************
* Error codes returned by usbcore-functions *
......@@ -100,4 +125,6 @@ usb_register():
-EINVAL error during registering new driver
usb_get_*/usb_set_*():
usb_control_msg():
usb_bulk_msg():
All USB errors (submit/status) can occur
......@@ -505,6 +505,21 @@ CONFIG_USB_DABUSB
The module will be called dabusb.o. If you want to compile it as a
module, say M here and read <file:Documentation/modules.txt>.
CONFIG_USB_KONICAWC
Say Y here if you want support for webcams based on a Konica
chipset. This is known to work with the Intel YC76 webcam.
This driver uses the Video For Linux API. You must enable
(Y or M in config) Video For Linux (under Character Devices)
to use this driver. Information on this API and pointers to
"v4l" programs may be found on the WWW at
<http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
This code is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called konicawc.o. If you want to compile it as
a module, say M here and read <file:Documentation/modules.txt>.
CONFIG_USB_USBNET
This driver supports network links over USB with USB "Network"
or "data transfer" cables, often used to network laptops to PCs.
......
......@@ -80,6 +80,7 @@ else
dep_tristate ' USB 3com HomeConnect (aka vicam) support (EXPERIMENTAL)' CONFIG_USB_VICAM $CONFIG_USB $CONFIG_VIDEO_DEV $CONFIG_EXPERIMENTAL
dep_tristate ' D-Link USB FM radio support (EXPERIMENTAL)' CONFIG_USB_DSBR $CONFIG_USB $CONFIG_VIDEO_DEV $CONFIG_EXPERIMENTAL
dep_tristate ' DABUSB driver' CONFIG_USB_DABUSB $CONFIG_USB
dep_tristate ' USB Konica Webcam support' CONFIG_USB_KONICAWC $CONFIG_USB $CONFIG_VIDEO_DEV
fi
comment 'USB Network adaptors'
......
......@@ -64,6 +64,7 @@ obj-$(CONFIG_USB_ACM) += acm.o
obj-$(CONFIG_USB_PRINTER) += printer.o
obj-$(CONFIG_USB_AUDIO) += audio.o
obj-$(CONFIG_USB_IBMCAM) += ibmcam.o usbvideo.o ultracam.o
obj-$(CONFIG_USB_KONICAWC) += konicawc.o usbvideo.o
obj-$(CONFIG_USB_PWC) += pwc.o
obj-$(CONFIG_USB_DC2XX) += dc2xx.o
obj-$(CONFIG_USB_MDC800) += mdc800.o
......
This diff is collapsed.
......@@ -415,14 +415,14 @@
/* Structures */
typedef struct digi_serial {
struct digi_serial {
spinlock_t ds_serial_lock;
struct usb_serial_port *ds_oob_port; /* out-of-band port */
int ds_oob_port_num; /* index of out-of-band port */
int ds_device_started;
} digi_serial_t;
};
typedef struct digi_port {
struct digi_port {
spinlock_t dp_port_lock;
int dp_port_num;
int dp_out_buf_len;
......@@ -441,7 +441,7 @@ typedef struct digi_port {
int dp_in_close; /* close in progress */
wait_queue_head_t dp_close_wait; /* wait queue for close */
struct tq_struct dp_wakeup_task;
} digi_port_t;
};
/* Local Function Declarations */
......@@ -599,7 +599,7 @@ static void digi_wakeup_write_lock( struct usb_serial_port *port )
{
unsigned long flags;
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
spin_lock_irqsave( &priv->dp_port_lock, flags );
......@@ -645,8 +645,8 @@ static int digi_write_oob_command( struct usb_serial_port *port,
int ret = 0;
int len;
struct usb_serial_port *oob_port = (struct usb_serial_port *)((digi_serial_t *)port->serial->private)->ds_oob_port;
digi_port_t *oob_priv = (digi_port_t *)oob_port->private;
struct usb_serial_port *oob_port = (struct usb_serial_port *)((struct digi_serial *)port->serial->private)->ds_oob_port;
struct digi_port *oob_priv = (struct digi_port *)oob_port->private;
unsigned long flags = 0;
......@@ -714,7 +714,7 @@ static int digi_write_inb_command( struct usb_serial_port *port,
int ret = 0;
int len;
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
unsigned char *data = port->write_urb->transfer_buffer;
unsigned long flags = 0;
......@@ -800,9 +800,9 @@ static int digi_set_modem_signals( struct usb_serial_port *port,
{
int ret;
digi_port_t *port_priv = (digi_port_t *)port->private;
struct usb_serial_port *oob_port = (struct usb_serial_port *)((digi_serial_t *)port->serial->private)->ds_oob_port;
digi_port_t *oob_priv = (digi_port_t *)oob_port->private;
struct digi_port *port_priv = (struct digi_port *)port->private;
struct usb_serial_port *oob_port = (struct usb_serial_port *)((struct digi_serial *)port->serial->private)->ds_oob_port;
struct digi_port *oob_priv = (struct digi_port *)oob_port->private;
unsigned char *data = oob_port->write_urb->transfer_buffer;
unsigned long flags = 0;
......@@ -879,7 +879,7 @@ static int digi_transmit_idle( struct usb_serial_port *port,
int ret;
unsigned char buf[2];
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
unsigned long flags = 0;
......@@ -919,7 +919,7 @@ static void digi_rx_throttle( struct usb_serial_port *port )
{
unsigned long flags;
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
dbg( "digi_rx_throttle: TOP: port=%d", priv->dp_port_num );
......@@ -940,7 +940,7 @@ static void digi_rx_unthrottle( struct usb_serial_port *port )
int ret = 0;
int len;
unsigned long flags;
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
struct tty_struct *tty = port->tty;
......@@ -984,7 +984,7 @@ static void digi_set_termios( struct usb_serial_port *port,
struct termios *old_termios )
{
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
unsigned int iflag = port->tty->termios->c_iflag;
unsigned int cflag = port->tty->termios->c_cflag;
unsigned int old_iflag = old_termios->c_iflag;
......@@ -1208,7 +1208,7 @@ static int digi_ioctl( struct usb_serial_port *port, struct file *file,
unsigned int cmd, unsigned long arg )
{
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
unsigned int val;
unsigned long flags = 0;
......@@ -1260,7 +1260,7 @@ static int digi_write( struct usb_serial_port *port, int from_user,
{
int ret,data_len,new_len;
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
unsigned char *data = port->write_urb->transfer_buffer;
unsigned char user_buf[64]; /* 64 bytes is max USB bulk packet */
unsigned long flags = 0;
......@@ -1347,14 +1347,14 @@ static void digi_write_bulk_callback( struct urb *urb )
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial;
digi_port_t *priv;
struct digi_port *priv;
int ret = 0;
dbg( "digi_write_bulk_callback: TOP, urb->status=%d", urb->status );
/* port and serial sanity check */
if( port == NULL || (priv=(digi_port_t *)(port->private)) == NULL ) {
if( port == NULL || (priv=(struct digi_port *)(port->private)) == NULL ) {
err( __FUNCTION__ ": port or port->private is NULL, status=%d",
urb->status );
return;
......@@ -1367,7 +1367,7 @@ dbg( "digi_write_bulk_callback: TOP, urb->status=%d", urb->status );
/* handle oob callback */
if( priv->dp_port_num
== ((digi_serial_t *)(serial->private))->ds_oob_port_num ) {
== ((struct digi_serial *)(serial->private))->ds_oob_port_num ) {
dbg( "digi_write_bulk_callback: oob callback" );
spin_lock( &priv->dp_port_lock );
priv->dp_write_urb_in_use = 0;
......@@ -1427,7 +1427,7 @@ static int digi_write_room( struct usb_serial_port *port )
{
int room;
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
unsigned long flags = 0;
......@@ -1450,7 +1450,7 @@ dbg( "digi_write_room: port=%d, room=%d", priv->dp_port_num, room );
static int digi_chars_in_buffer( struct usb_serial_port *port )
{
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
if( port->write_urb->status == -EINPROGRESS
......@@ -1471,7 +1471,7 @@ static int digi_open( struct usb_serial_port *port, struct file *filp )
int ret;
unsigned char buf[32];
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
struct termios not_termios;
unsigned long flags = 0;
......@@ -1548,7 +1548,7 @@ static void digi_close( struct usb_serial_port *port, struct file *filp )
int ret;
unsigned char buf[32];
struct tty_struct *tty = port->tty;
digi_port_t *priv = (digi_port_t *)port->private;
struct digi_port *priv = (struct digi_port *)port->private;
unsigned long flags = 0;
......@@ -1656,7 +1656,7 @@ static int digi_startup_device( struct usb_serial *serial )
{
int i,ret = 0;
digi_serial_t *serial_priv = (digi_serial_t *)serial->private;
struct digi_serial *serial_priv = (struct digi_serial *)serial->private;
struct usb_serial_port *port;
......@@ -1695,8 +1695,8 @@ static int digi_startup( struct usb_serial *serial )
{
int i;
digi_port_t *priv;
digi_serial_t *serial_priv;
struct digi_port *priv;
struct digi_serial *serial_priv;
dbg( "digi_startup: TOP" );
......@@ -1707,9 +1707,9 @@ dbg( "digi_startup: TOP" );
/* allocate port private structure */
priv = serial->port[i].private =
(digi_port_t *)kmalloc( sizeof(digi_port_t),
(struct digi_port *)kmalloc( sizeof(struct digi_port),
GFP_KERNEL );
if( priv == (digi_port_t *)0 ) {
if( priv == (struct digi_port *)0 ) {
while( --i >= 0 )
kfree( serial->port[i].private );
return( 1 ); /* error */
......@@ -1742,9 +1742,9 @@ dbg( "digi_startup: TOP" );
/* allocate serial private structure */
serial_priv = serial->private =
(digi_serial_t *)kmalloc( sizeof(digi_serial_t),
(struct digi_serial *)kmalloc( sizeof(struct digi_serial),
GFP_KERNEL );
if( serial_priv == (digi_serial_t *)0 ) {
if( serial_priv == (struct digi_serial *)0 ) {
for( i=0; i<serial->type->num_ports+1; i++ )
kfree( serial->port[i].private );
return( 1 ); /* error */
......@@ -1765,7 +1765,7 @@ static void digi_shutdown( struct usb_serial *serial )
{
int i;
digi_port_t *priv;
struct digi_port *priv;
unsigned long flags;
......@@ -1800,14 +1800,14 @@ static void digi_read_bulk_callback( struct urb *urb )
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
digi_port_t *priv;
struct digi_port *priv;
int ret;
dbg( "digi_read_bulk_callback: TOP" );
/* port sanity check, do not resubmit if port is not valid */
if( port == NULL || (priv=(digi_port_t *)(port->private)) == NULL ) {
if( port == NULL || (priv=(struct digi_port *)(port->private)) == NULL ) {
err( __FUNCTION__ ": port or port->private is NULL, status=%d",
urb->status );
return;
......@@ -1827,7 +1827,7 @@ dbg( "digi_read_bulk_callback: TOP" );
/* handle oob or inb callback, do not resubmit if error */
if( priv->dp_port_num
== ((digi_serial_t *)(port->serial->private))->ds_oob_port_num ) {
== ((struct digi_serial *)(port->serial->private))->ds_oob_port_num ) {
if( digi_read_oob_callback( urb ) != 0 )
return;
} else {
......@@ -1860,7 +1860,7 @@ static int digi_read_inb_callback( struct urb *urb )
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct tty_struct *tty = port->tty;
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
int opcode = ((unsigned char *)urb->transfer_buffer)[0];
int len = ((unsigned char *)urb->transfer_buffer)[1];
int status = ((unsigned char *)urb->transfer_buffer)[2];
......@@ -1972,7 +1972,7 @@ static int digi_read_oob_callback( struct urb *urb )
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = port->serial;
digi_port_t *priv = (digi_port_t *)(port->private);
struct digi_port *priv = (struct digi_port *)(port->private);
int opcode, line, status, val;
int i;
......
......@@ -154,7 +154,7 @@ MODULE_DEVICE_TABLE (usb, id_table_combined);
struct ftdi_private {
ftdi_type_t ftdi_type;
enum ftdi_type ftdi_type;
__u16 last_set_data_urb_value ; /* the last data state set - needed for doing a break */
int write_offset;
};
......@@ -652,7 +652,7 @@ static void ftdi_sio_read_bulk_callback (struct urb *urb)
} /* ftdi_sio_serial_read_bulk_callback */
static __u16 translate_baudrate_to_ftdi(unsigned int cflag, ftdi_type_t ftdi_type)
static __u16 translate_baudrate_to_ftdi(unsigned int cflag, enum ftdi_type ftdi_type)
{ /* translate_baudrate_to_ftdi */
__u16 urb_value = ftdi_sio_b9600;
......
......@@ -87,13 +87,13 @@
* Data: None
*/
typedef enum {
enum ftdi_type {
sio = 1,
F8U232AM = 2,
} ftdi_type_t;
};
typedef enum {
enum {
ftdi_sio_b300 = 0,
ftdi_sio_b600 = 1,
ftdi_sio_b1200 = 2,
......@@ -104,10 +104,10 @@ typedef enum {
ftdi_sio_b38400 = 7,
ftdi_sio_b57600 = 8,
ftdi_sio_b115200 = 9
} FTDI_SIO_baudrate_t ;
};
typedef enum {
enum {
ftdi_8U232AM_12MHz_b300 = 0x09c4,
ftdi_8U232AM_12MHz_b600 = 0x04E2,
ftdi_8U232AM_12MHz_b1200 = 0x0271,
......@@ -119,9 +119,9 @@ typedef enum {
ftdi_8U232AM_12MHz_b57600 = 0x000d,
ftdi_8U232AM_12MHz_b115200 = 0x4006,
ftdi_8U232AM_12MHz_b230400 = 0x8003,
} FTDI_8U232AM_12MHz_baudrate_t;
};
/* Apparently all devices are 48MHz */
typedef enum {
enum {
ftdi_8U232AM_48MHz_b300 = 0x2710,
ftdi_8U232AM_48MHz_b600 = 0x1388,
ftdi_8U232AM_48MHz_b1200 = 0x09c4,
......@@ -136,7 +136,7 @@ typedef enum {
ftdi_8U232AM_48MHz_b460800 = 0x4006,
ftdi_8U232AM_48MHz_b921600 = 0x8003,
} FTDI_8U232AM_48MHz_baudrate_t;
};
#define FTDI_SIO_SET_DATA_REQUEST FTDI_SIO_SET_DATA
#define FTDI_SIO_SET_DATA_REQUEST_TYPE 0x40
......
......@@ -369,8 +369,8 @@ struct edgeport_port {
struct edgeport_serial {
char name[MAX_NAME_LEN+1]; /* string name of this device */
EDGE_MANUF_DESCRIPTOR manuf_descriptor; /* the manufacturer descriptor */
EDGE_BOOT_DESCRIPTOR boot_descriptor; /* the boot firmware descriptor */
struct edge_manuf_descriptor manuf_descriptor; /* the manufacturer descriptor */
struct edge_boot_descriptor boot_descriptor; /* the boot firmware descriptor */
struct edgeport_product_info product_info; /* Product Info */
__u8 interrupt_in_endpoint; /* the interrupt endpoint handle */
......@@ -397,17 +397,17 @@ struct edgeport_serial {
};
/* baud rate information */
typedef struct _DIVISOR_TABLE_ENTRY {
struct divisor_table_entry {
__u32 BaudRate;
__u16 Divisor;
} DIVISOR_TABLE_ENTRY, *PDIVISOR_TABLE_ENTRY;
};
//
// Define table of divisors for Rev A EdgePort/4 hardware
// These assume a 3.6864MHz crystal, the standard /16, and
// MCR.7 = 0.
//
static DIVISOR_TABLE_ENTRY DivisorTable[] = {
static struct divisor_table_entry divisor_table[] = {
{ 75, 3072},
{ 110, 2095}, /* 2094.545455 => 230450 => .0217 % over */
{ 134, 1713}, /* 1713.011152 => 230398.5 => .00065% under */
......@@ -507,7 +507,7 @@ static void update_edgeport_E2PROM (struct edgeport_serial *edge_serial)
__u16 BootBuildNumber;
__u8 *BootImage;
__u32 BootSize;
PEDGE_FIRMWARE_IMAGE_RECORD record;
struct edge_firmware_image_record *record;
unsigned char *firmware;
int response;
......@@ -563,13 +563,13 @@ static void update_edgeport_E2PROM (struct edgeport_serial *edge_serial)
firmware = BootImage;
for (;;) {
record = (PEDGE_FIRMWARE_IMAGE_RECORD)firmware;
record = (struct edge_firmware_image_record *)firmware;
response = rom_write (edge_serial->serial, record->ExtAddr, record->Addr, record->Len, &record->Data[0]);
if (response < 0) {
err("sram_write failed (%x, %x, %d)", record->ExtAddr, record->Addr, record->Len);
break;
}
firmware += sizeof (EDGE_FIRMWARE_IMAGE_RECORD) + record->Len;
firmware += sizeof (struct edge_firmware_image_record) + record->Len;
if (firmware >= &BootImage[BootSize]) {
break;
}
......@@ -2569,9 +2569,9 @@ static int calc_baud_rate_divisor (int baudrate, int *divisor)
dbg(__FUNCTION__" - %d", baudrate);
for (i = 0; i < NUM_ENTRIES(DivisorTable); i++) {
if ( DivisorTable[i].BaudRate == baudrate ) {
*divisor = DivisorTable[i].Divisor;
for (i = 0; i < NUM_ENTRIES(divisor_table); i++) {
if ( divisor_table[i].BaudRate == baudrate ) {
*divisor = divisor_table[i].Divisor;
return 0;
}
}
......@@ -2863,7 +2863,7 @@ static void get_boot_desc (struct edgeport_serial *edge_serial)
****************************************************************************/
static void load_application_firmware (struct edgeport_serial *edge_serial)
{
PEDGE_FIRMWARE_IMAGE_RECORD record;
struct edge_firmware_image_record *record;
unsigned char *firmware;
unsigned char *FirmwareImage;
int ImageSize;
......@@ -2901,13 +2901,13 @@ static void load_application_firmware (struct edgeport_serial *edge_serial)
for (;;) {
record = (PEDGE_FIRMWARE_IMAGE_RECORD)firmware;
record = (struct edge_firmware_image_record *)firmware;
response = sram_write (edge_serial->serial, record->ExtAddr, record->Addr, record->Len, &record->Data[0]);
if (response < 0) {
err("sram_write failed (%x, %x, %d)", record->ExtAddr, record->Addr, record->Len);
break;
}
firmware += sizeof (EDGE_FIRMWARE_IMAGE_RECORD) + record->Len;
firmware += sizeof (struct edge_firmware_image_record) + record->Len;
if (firmware >= &FirmwareImage[ImageSize]) {
break;
}
......
......@@ -136,7 +136,6 @@ struct string_block {
__u16 Strings[1]; /* Start of string block */
};
typedef struct string_block STRING_BLOCK, *PSTRING_BLOCK;
#endif
......@@ -12,20 +12,18 @@
//Image structure definition
#if !defined(DEFINED_EDGE_FIRMWARE_IMAGE_RECORD)
#define DEFINED_EDGE_FIRMWARE_IMAGE_RECORD
typedef struct _EDGE_FIRMWARE_IMAGE_RECORD
{
struct edge_firmware_image_record {
unsigned short ExtAddr;
unsigned short Addr;
unsigned short Len;
unsigned char Data[0];
} EDGE_FIRMWARE_IMAGE_RECORD, *PEDGE_FIRMWARE_IMAGE_RECORD;
};
typedef struct _EDGE_FIRMWARE_VERSION_INFO
{
struct edge_firmware_version_info {
unsigned char MajorVersion;
unsigned char MinorVersion;
unsigned short BuildNumber;
} EDGE_FIRMWARE_VERSION_INFO, *PEDGE_FIRMWARE_VERSION_INFO;
};
#endif
......@@ -549,7 +547,7 @@ static unsigned char IMAGE_ARRAY_NAME[] = {
0x7e, 0x74, 0x00, 0x01, 0x02, 0x08, 0xd6,
};
static EDGE_FIRMWARE_VERSION_INFO IMAGE_VERSION_NAME = {
static struct edge_firmware_version_info IMAGE_VERSION_NAME = {
1, 12, 2 }; // Major, Minor, Build
#undef IMAGE_VERSION_NAME
......
......@@ -12,20 +12,18 @@
//Image structure definition
#if !defined(DEFINED_EDGE_FIRMWARE_IMAGE_RECORD)
#define DEFINED_EDGE_FIRMWARE_IMAGE_RECORD
typedef struct _EDGE_FIRMWARE_IMAGE_RECORD
{
struct edge_firmware_image_record {
unsigned short ExtAddr;
unsigned short Addr;
unsigned short Len;
unsigned char Data[0];
} EDGE_FIRMWARE_IMAGE_RECORD, *PEDGE_FIRMWARE_IMAGE_RECORD;
};
typedef struct _EDGE_FIRMWARE_VERSION_INFO
{
struct edge_firmware_version_info {
unsigned char MajorVersion;
unsigned char MinorVersion;
unsigned short BuildNumber;
} EDGE_FIRMWARE_VERSION_INFO, *PEDGE_FIRMWARE_VERSION_INFO;
};
#endif
......@@ -539,7 +537,7 @@ static unsigned char IMAGE_ARRAY_NAME[] = {
};
static EDGE_FIRMWARE_VERSION_INFO IMAGE_VERSION_NAME = {
static struct edge_firmware_version_info IMAGE_VERSION_NAME = {
2, 0, 3 }; // Major, Minor, Build
#undef IMAGE_VERSION_NAME
......
......@@ -12,20 +12,18 @@
//Image structure definition
#if !defined(DEFINED_EDGE_FIRMWARE_IMAGE_RECORD)
#define DEFINED_EDGE_FIRMWARE_IMAGE_RECORD
typedef struct _EDGE_FIRMWARE_IMAGE_RECORD
{
struct edge_firmware_image_record {
unsigned short ExtAddr;
unsigned short Addr;
unsigned short Len;
unsigned char Data[0];
} EDGE_FIRMWARE_IMAGE_RECORD, *PEDGE_FIRMWARE_IMAGE_RECORD;
};
typedef struct _EDGE_FIRMWARE_VERSION_INFO
{
struct edge_firmware_version_info {
unsigned char MajorVersion;
unsigned char MinorVersion;
unsigned short BuildNumber;
} EDGE_FIRMWARE_VERSION_INFO, *PEDGE_FIRMWARE_VERSION_INFO;
};
#endif
......@@ -1114,7 +1112,7 @@ static unsigned char IMAGE_ARRAY_NAME[] = {
0x08, 0xa5, 0xb8, 0x02, 0x03, 0x4e, 0xa0, 0x08, 0x22, 0x80, 0xfe,
};
static EDGE_FIRMWARE_VERSION_INFO IMAGE_VERSION_NAME = {
static struct edge_firmware_version_info IMAGE_VERSION_NAME = {
1, 12, 3 }; // Major, Minor, Build
#undef IMAGE_VERSION_NAME
......
......@@ -12,20 +12,18 @@
//Image structure definition
#if !defined(DEFINED_EDGE_FIRMWARE_IMAGE_RECORD)
#define DEFINED_EDGE_FIRMWARE_IMAGE_RECORD
typedef struct _EDGE_FIRMWARE_IMAGE_RECORD
{
struct edge_firmware_image_record {
unsigned short ExtAddr;
unsigned short Addr;
unsigned short Len;
unsigned char Data[0];
} EDGE_FIRMWARE_IMAGE_RECORD, *PEDGE_FIRMWARE_IMAGE_RECORD;
};
typedef struct _EDGE_FIRMWARE_VERSION_INFO
{
unsigned char MajorVersion;
struct edge_firmware_version_info {
unsigned char MajorVersion;
unsigned char MinorVersion;
unsigned short BuildNumber;
} EDGE_FIRMWARE_VERSION_INFO, *PEDGE_FIRMWARE_VERSION_INFO;
};
#endif
......@@ -1126,7 +1124,7 @@ static unsigned char IMAGE_ARRAY_NAME[] = {
0x02, 0x03, 0x4e, 0xa0, 0x08, 0x22, 0x80, 0xfe,
};
static EDGE_FIRMWARE_VERSION_INFO IMAGE_VERSION_NAME = {
static struct edge_firmware_version_info IMAGE_VERSION_NAME = {
2, 0, 3 }; // Major, Minor, Build
#undef IMAGE_VERSION_NAME
......
......@@ -88,12 +88,12 @@ All 16-bit fields are sent in little-endian (Intel) format.
// Interrupt pipe
//
typedef struct _INT_STATUS_PKT {
struct int_status_pkt {
__u16 RxBytesAvail; // Additional bytes available to
// be read from Bulk IN pipe
__u16 TxCredits[ MAX_RS232_PORTS ]; // Additional space available in
// given port's TxBuffer
} INT_STATUS_PKT, *PINT_STATUS_PKT;
};
#define GET_INT_STATUS_SIZE(NumPorts) (sizeof(__u16) + (sizeof(__u16) * (NumPorts)))
......
......@@ -182,11 +182,11 @@
// Version 2 format of DeviceParams. This format is longer (3C0h)
// and starts lower in memory, at the uppermost 1K in ROM.
#define EDGE_MANUF_DESC_ADDR 0x00FF7C00
#define EDGE_MANUF_DESC_LEN sizeof(EDGE_MANUF_DESCRIPTOR)
#define EDGE_MANUF_DESC_LEN sizeof(struct edge_manuf_descriptor)
// Boot params descriptor
#define EDGE_BOOT_DESC_ADDR 0x00FF7FC0
#define EDGE_BOOT_DESC_LEN sizeof(EDGE_BOOT_DESCRIPTOR)
#define EDGE_BOOT_DESC_LEN sizeof(struct edge_boot_descriptor)
// Define the max block size that may be read or written
// in a read/write RAM/ROM command.
......@@ -227,7 +227,7 @@
#define MAX_SERIALNUMBER_LEN 12
#define MAX_ASSEMBLYNUMBER_LEN 14
typedef struct _EDGE_MANUF_DESCRIPTOR {
struct edge_manuf_descriptor {
__u16 RootDescTable[0x10]; // C00 Root of descriptor tables (just a placeholder)
__u8 DescriptorArea[0x2E0]; // C20 Descriptors go here, up to 2E0h (just a placeholder)
......@@ -272,7 +272,7 @@ typedef struct _EDGE_MANUF_DESCRIPTOR {
__u8 IonConfig; // FBF Config byte for ION manufacturing use
// FBF end of structure, total len = 3C0h
} EDGE_MANUF_DESCRIPTOR, *PEDGE_MANUF_DESCRIPTOR;
};
#define MANUF_DESC_VER_1 1 // Original definition of MANUF_DESC
......@@ -317,10 +317,10 @@ typedef struct _EDGE_MANUF_DESCRIPTOR {
#define MANUF_SERNUM_LENGTH sizeof(((PEDGE_MANUF_DESCRIPTOR)0)->SerialNumber)
#define MANUF_ASSYNUM_LENGTH sizeof(((PEDGE_MANUF_DESCRIPTOR)0)->AssemblyNumber)
#define MANUF_OEMASSYNUM_LENGTH sizeof(((PEDGE_MANUF_DESCRIPTOR)0)->OemAssyNumber)
#define MANUF_MANUFDATE_LENGTH sizeof(((PEDGE_MANUF_DESCRIPTOR)0)->ManufDate)
#define MANUF_SERNUM_LENGTH sizeof(((struct edge_manuf_descriptor *)0)->SerialNumber)
#define MANUF_ASSYNUM_LENGTH sizeof(((struct edge_manuf_descriptor *)0)->AssemblyNumber)
#define MANUF_OEMASSYNUM_LENGTH sizeof(((struct edge_manuf_descriptor *)0)->OemAssyNumber)
#define MANUF_MANUFDATE_LENGTH sizeof(((struct edge_manuf_descriptor *)0)->ManufDate)
#define MANUF_ION_CONFIG_MASTER 0x80 // 1=Master mode, 0=Normal
#define MANUF_ION_CONFIG_DIAG 0x40 // 1=Run h/w diags, 0=norm
......@@ -335,7 +335,7 @@ typedef struct _EDGE_MANUF_DESCRIPTOR {
// - FF:xFFF. Note that the 930-mandated UCONFIG bytes are
// included in this structure.
//
typedef struct _EDGE_BOOT_DESCRIPTOR {
struct edge_boot_descriptor {
__u8 Length; // C0 Desc length, per USB (= 40h)
__u8 DescType; // C1 Desc type, per USB (= DEVICE type)
__u8 DescVer; // C2 Desc version/format
......@@ -359,8 +359,7 @@ typedef struct _EDGE_BOOT_DESCRIPTOR {
__u8 UConfig1; // F9 930-defined CPU configuration byte 1
__u8 Reserved3[6]; // FA -- unused, set to 0 --
// FF end of structure, total len = 80
} EDGE_BOOT_DESCRIPTOR, *PEDGE_BOOT_DESCRIPTOR;
};
#define BOOT_DESC_VER_1 1 // Original definition of BOOT_PARAMS
......
......@@ -107,7 +107,7 @@ struct keyspan_serial_private {
/* number of active ports */
atomic_t active_count;
const keyspan_device_details *device_details;
const struct keyspan_device_details *device_details;
struct urb *instat_urb;
char instat_buf[INSTAT_BUFLEN];
......@@ -125,7 +125,7 @@ struct keyspan_port_private {
/* Keep duplicate of device details in each port
structure as well - simplifies some of the
callback functions etc. */
const keyspan_device_details *device_details;
const struct keyspan_device_details *device_details;
/* Input endpoints and buffer for this port */
struct urb *in_urbs[2];
......@@ -243,7 +243,7 @@ static void keyspan_set_termios (struct usb_serial_port *port,
{
int baud_rate;
struct keyspan_port_private *p_priv;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
unsigned int cflag;
dbg(__FUNCTION__ ".\n");
......@@ -321,7 +321,7 @@ static int keyspan_write(struct usb_serial_port *port, int from_user,
const unsigned char *buf, int count)
{
struct keyspan_port_private *p_priv;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
int flip;
int left, todo;
struct urb *this_urb;
......@@ -481,7 +481,7 @@ static void usa26_outcont_callback(struct urb *urb)
static void usa26_instat_callback(struct urb *urb)
{
unsigned char *data = urb->transfer_buffer;
keyspan_usa26_portStatusMessage *msg;
struct keyspan_usa26_portStatusMessage *msg;
struct usb_serial *serial;
struct usb_serial_port *port;
struct keyspan_port_private *p_priv;
......@@ -498,7 +498,7 @@ static void usa26_instat_callback(struct urb *urb)
goto exit;
}
msg = (keyspan_usa26_portStatusMessage *)data;
msg = (struct keyspan_usa26_portStatusMessage *)data;
#if 0
dbg(__FUNCTION__ " port status: port %d cts %d dcd %d dsr %d ri %d toff %d txoff %d rxen %d cr %d\n",
......@@ -619,7 +619,7 @@ static void usa28_instat_callback(struct urb *urb)
{
int err;
unsigned char *data = urb->transfer_buffer;
keyspan_usa28_portStatusMessage *msg;
struct keyspan_usa28_portStatusMessage *msg;
struct usb_serial *serial;
struct usb_serial_port *port;
struct keyspan_port_private *p_priv;
......@@ -642,7 +642,7 @@ static void usa28_instat_callback(struct urb *urb)
data[6], data[7], data[8], data[9], data[10], data[11]);*/
/* Now do something useful with the data */
msg = (keyspan_usa28_portStatusMessage *)data;
msg = (struct keyspan_usa28_portStatusMessage *)data;
/* Check port number from message and retrieve private data */
......@@ -710,7 +710,7 @@ static void usa49_instat_callback(struct urb *urb)
{
int err;
unsigned char *data = urb->transfer_buffer;
keyspan_usa49_portStatusMessage *msg;
struct keyspan_usa49_portStatusMessage *msg;
struct usb_serial *serial;
struct usb_serial_port *port;
struct keyspan_port_private *p_priv;
......@@ -735,7 +735,7 @@ static void usa49_instat_callback(struct urb *urb)
data[6], data[7], data[8], data[9], data[10]);*/
/* Now do something useful with the data */
msg = (keyspan_usa49_portStatusMessage *)data;
msg = (struct keyspan_usa49_portStatusMessage *)data;
/* Check port number from message and retrieve private data */
if (msg->portNumber >= serial->num_ports) {
......@@ -851,7 +851,7 @@ static int keyspan_open (struct usb_serial_port *port, struct file *filp)
struct keyspan_port_private *p_priv;
struct keyspan_serial_private *s_priv;
struct usb_serial *serial = port->serial;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
int i, already_active, err;
struct urb *urb;
......@@ -1106,7 +1106,7 @@ static void keyspan_setup_urbs(struct usb_serial *serial)
{
int i, j;
struct keyspan_serial_private *s_priv;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
struct usb_serial_port *port;
struct keyspan_port_private *p_priv;
struct callbacks *cback;
......@@ -1293,7 +1293,7 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
struct keyspan_usa26_portControlMessage msg;
struct keyspan_serial_private *s_priv;
struct keyspan_port_private *p_priv;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
int outcont_urb;
struct urb *this_urb;
int err;
......@@ -1429,7 +1429,7 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
struct keyspan_usa28_portControlMessage msg;
struct keyspan_serial_private *s_priv;
struct keyspan_port_private *p_priv;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
struct urb *this_urb;
int err;
......@@ -1514,7 +1514,7 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
struct keyspan_usa49_portControlMessage msg;
struct keyspan_serial_private *s_priv;
struct keyspan_port_private *p_priv;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
int glocont_urb;
struct urb *this_urb;
int err;
......@@ -1640,7 +1640,7 @@ static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
{
struct usb_serial *serial = port->serial;
struct keyspan_serial_private *s_priv;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
s_priv = (struct keyspan_serial_private *)(serial->private);
d_details = s_priv->device_details;
......@@ -1666,7 +1666,7 @@ static int keyspan_startup (struct usb_serial *serial)
struct usb_serial_port *port;
struct keyspan_serial_private *s_priv;
struct keyspan_port_private *p_priv;
const keyspan_device_details *d_details;
const struct keyspan_device_details *d_details;
dbg("keyspan_startup called.\n");
......
......@@ -194,7 +194,7 @@ struct ezusb_hex_record {
#define keyspan_usa49w_product_id 0x010a
typedef struct {
struct keyspan_device_details {
/* product ID value */
int product_id;
......@@ -232,13 +232,13 @@ typedef struct {
u8 *rate_hi, u8 *rate_low, u8 *prescaler);
u32 baudclk;
} keyspan_device_details;
};
/* Now for each device type we setup the device detail
structure with the appropriate information (provided
in Keyspan's documentation) */
static const keyspan_device_details usa18x_device_details = {
static const struct keyspan_device_details usa18x_device_details = {
keyspan_usa18x_product_id, /* product ID */
msg_usa26, /* msg type*/
1, /* num ports */
......@@ -254,7 +254,7 @@ static const keyspan_device_details usa18x_device_details = {
KEYSPAN_USA18X_BAUDCLK /* base baud clock */
};
static const keyspan_device_details usa19_device_details = {
static const struct keyspan_device_details usa19_device_details = {
keyspan_usa19_product_id, /* product ID */
msg_usa28, /* msg type*/
1, /* num ports */
......@@ -270,7 +270,7 @@ static const keyspan_device_details usa19_device_details = {
KEYSPAN_USA19_BAUDCLK /* base baud clock */
};
static const keyspan_device_details usa19w_device_details = {
static const struct keyspan_device_details usa19w_device_details = {
keyspan_usa19w_product_id, /* product ID */
msg_usa26, /* msg type*/
1, /* num ports */
......@@ -286,7 +286,7 @@ static const keyspan_device_details usa19w_device_details = {
KEYSPAN_USA19W_BAUDCLK /* base baud clock */
};
static const keyspan_device_details usa28x_device_details = {
static const struct keyspan_device_details usa28x_device_details = {
keyspan_usa28x_product_id, /* product ID */
msg_usa26, /* msg type*/
2, /* num ports */
......@@ -302,7 +302,7 @@ static const keyspan_device_details usa28x_device_details = {
KEYSPAN_USA28X_BAUDCLK
};
static const keyspan_device_details usa28xa_device_details = {
static const struct keyspan_device_details usa28xa_device_details = {
keyspan_usa28xa_product_id, /* product ID */
msg_usa26, /* msg type*/
2, /* num ports */
......@@ -320,7 +320,7 @@ static const keyspan_device_details usa28xa_device_details = {
/* We don't need a separate entry for the usa28xb as it appears as a 28x anyway */
static const keyspan_device_details usa49w_device_details = {
static const struct keyspan_device_details usa49w_device_details = {
keyspan_usa49w_product_id, /* product ID */
msg_usa49, /* msg type*/
4, /* num ports */
......@@ -336,7 +336,7 @@ static const keyspan_device_details usa49w_device_details = {
KEYSPAN_USA49W_BAUDCLK
};
static const keyspan_device_details *keyspan_devices[] = {
static const struct keyspan_device_details *keyspan_devices[] = {
&usa18x_device_details,
&usa19_device_details,
&usa19w_device_details,
......
......@@ -93,7 +93,7 @@
#define __USA26MSG__
typedef struct keyspan_usa26_portControlMessage
struct keyspan_usa26_portControlMessage
{
/*
there are three types of "commands" sent in the control message:
......@@ -164,7 +164,7 @@ typedef struct keyspan_usa26_portControlMessage
returnStatus, // BOTH: return current status (even if it hasn't changed)
resetDataToggle;// BOTH: reset data toggle state to DATA0
} keyspan_usa26_portControlMessage;
};
// defines for bits in lcr
#define USA_DATABITS_5 0x00
......@@ -182,7 +182,7 @@ typedef struct keyspan_usa26_portControlMessage
// all things called "StatusMessage" are sent on the status endpoint
typedef struct keyspan_usa26_portStatusMessage // one for each port
struct keyspan_usa26_portStatusMessage // one for each port
{
u8 port, // BOTH: 0=first, 1=second, other=see below
hskia_cts, // USA26: reports HSKIA pin
......@@ -195,7 +195,7 @@ typedef struct keyspan_usa26_portStatusMessage // one for each port
_txXoff, // port is in XOFF state (either host or RX XOFF)
rxEnabled, // as configured by rxOn/rxOff 1=on, 0=off
controlResponse;// 1=a control message has been processed
} keyspan_usa26_portStatusMessage;
};
// bits in RX data message when STAT byte is included
#define RXERROR_OVERRUN 0x02
......@@ -203,28 +203,28 @@ typedef struct keyspan_usa26_portStatusMessage // one for each port
#define RXERROR_FRAMING 0x08
#define RXERROR_BREAK 0x10
typedef struct keyspan_usa26_globalControlMessage
struct keyspan_usa26_globalControlMessage
{
u8 sendGlobalStatus, // 2=request for two status responses
resetStatusToggle, // 1=reset global status toggle
resetStatusCount; // a cycling value
} keyspan_usa26_globalControlMessage;
};
typedef struct keyspan_usa26_globalStatusMessage
struct keyspan_usa26_globalStatusMessage
{
u8 port, // 3
sendGlobalStatus, // from request, decremented
resetStatusCount; // as in request
} keyspan_usa26_globalStatusMessage;
};
typedef struct keyspan_usa26_globalDebugMessage
struct keyspan_usa26_globalDebugMessage
{
u8 port, // 2
a,
b,
c,
d;
} keyspan_usa26_globalDebugMessage;
};
// ie: the maximum length of an EZUSB endpoint buffer
#define MAX_DATA_LEN 64
......
......@@ -95,7 +95,7 @@
#define __USA28MSG__
typedef struct keyspan_usa28_portControlMessage
struct keyspan_usa28_portControlMessage
{
/*
there are four types of "commands" sent in the control message:
......@@ -146,9 +146,9 @@ typedef struct keyspan_usa28_portControlMessage
returnStatus, // return current status n times (1 or 2)
resetDataToggle;// reset data toggle state to DATA0
} keyspan_usa28_portControlMessage;
};
typedef struct keyspan_usa28_portStatusMessage
struct keyspan_usa28_portStatusMessage
{
u8 port, // 0=first, 1=second, 2=global (see below)
cts,
......@@ -164,32 +164,32 @@ typedef struct keyspan_usa28_portStatusMessage
rxBreak, // 1=we're in break state
rs232invalid, // 1=no valid signals on rs-232 inputs
controlResponse;// 1=a control messages has been processed
} keyspan_usa28_portStatusMessage;
};
// bit defines in txState
#define TX_OFF 0x01 // requested by host txOff command
#define TX_XOFF 0x02 // either real, or simulated by host
typedef struct keyspan_usa28_globalControlMessage
struct keyspan_usa28_globalControlMessage
{
u8 sendGlobalStatus, // 2=request for two status responses
resetStatusToggle, // 1=reset global status toggle
resetStatusCount; // a cycling value
} keyspan_usa28_globalControlMessage;
};
typedef struct keyspan_usa28_globalStatusMessage
struct keyspan_usa28_globalStatusMessage
{
u8 port, // 3
sendGlobalStatus, // from request, decremented
resetStatusCount; // as in request
} keyspan_usa28_globalStatusMessage;
};
typedef struct keyspan_usa28_globalDebugMessage
struct keyspan_usa28_globalDebugMessage
{
u8 port, // 2
n, // typically a count/status byte
b; // typically a data byte
} keyspan_usa28_globalDebugMessage;
};
// ie: the maximum length of an EZUSB endpoint buffer
#define MAX_DATA_LEN 64
......
......@@ -107,7 +107,7 @@
0x80 globalControlMessage
*/
typedef struct keyspan_usa49_portControlMessage
struct keyspan_usa49_portControlMessage
{
/*
0. 0/1/2/3 port control message follows
......@@ -173,7 +173,7 @@ typedef struct keyspan_usa49_portControlMessage
enablePort, // start servicing port (move data, check status)
disablePort; // stop servicing port (does implicit tx/rx flush/off)
} keyspan_usa49_portControlMessage;
};
// defines for bits in lcr
#define USA_DATABITS_5 0x00
......@@ -201,7 +201,7 @@ typedef struct keyspan_usa49_portControlMessage
sends any control message (either global or port-specific).
*/
typedef struct keyspan_usa49_globalControlMessage
struct keyspan_usa49_globalControlMessage
{
u8 portNumber, // 0x80
sendGlobalStatus, // 1/2=number of status responses requested
......@@ -209,7 +209,7 @@ typedef struct keyspan_usa49_globalControlMessage
resetStatusCount, // a cycling value
remoteWakeupEnable, // 0x10=P1, 0x20=P2, 0x40=P3, 0x80=P4
disableStatusMessages; // 1=send no status until host talks
} keyspan_usa49_globalControlMessage;
};
/*
Device->host messages send on the global status endpoint
......@@ -221,7 +221,7 @@ typedef struct keyspan_usa49_globalControlMessage
0x81 globalDebugMessage
*/
typedef struct keyspan_usa49_portStatusMessage // one for each port
struct keyspan_usa49_portStatusMessage // one for each port
{
u8 portNumber, // 0,1,2,3
cts, // reports CTS pin
......@@ -234,7 +234,7 @@ typedef struct keyspan_usa49_portStatusMessage // one for each port
controlResponse,// 1=a control message has been processed
txAck, // ACK (data TX complete)
rs232valid; // RS-232 signal valid
} keyspan_usa49_portStatusMessage;
};
// bits in RX data message when STAT byte is included
#define RXERROR_OVERRUN 0x02
......@@ -242,19 +242,19 @@ typedef struct keyspan_usa49_portStatusMessage // one for each port
#define RXERROR_FRAMING 0x08
#define RXERROR_BREAK 0x10
typedef struct keyspan_usa49_globalStatusMessage
struct keyspan_usa49_globalStatusMessage
{
u8 portNumber, // 0x80=globalStatusMessage
sendGlobalStatus, // from request, decremented
resetStatusCount; // as in request
} keyspan_usa49_globalStatusMessage;
};
typedef struct keyspan_usa49_globalDebugMessage
struct keyspan_usa49_globalDebugMessage
{
u8 portNumber, // 0x81=globalDebugMessage
n, // typically a count/status byte
b; // typically a data byte
} keyspan_usa49_globalDebugMessage;
};
// ie: the maximum length of an EZUSB endpoint buffer
#define MAX_DATA_LEN 64
......
......@@ -16,7 +16,7 @@
/* baud rates */
typedef enum {
enum {
kl5kusb105a_sio_b115200 = 0,
kl5kusb105a_sio_b57600 = 1,
kl5kusb105a_sio_b38400 = 2,
......@@ -27,7 +27,7 @@ typedef enum {
kl5kusb105a_sio_b2400 = 9, /* unchecked */
kl5kusb105a_sio_b1200 = 0xa, /* unchecked */
kl5kusb105a_sio_b600 = 0xb /* unchecked */
} KL5KUSB105A_SIO_baudrate_t;
};
/* data bits */
#define kl5kusb105a_dtb_7 7
......
......@@ -186,25 +186,27 @@ void usb_stor_print_Scsi_Cmnd( Scsi_Cmnd* cmd )
US_DEBUGP("Buffer has %d scatterlists.\n", cmd->use_sg );
for ( i=0; i<cmd->use_sg; i++ )
{
char *adr = page_address(sg[i].page) + sg[i].offset;
US_DEBUGP("Length of scatterlist %d is %d.\n",i,sg[i].length);
US_DEBUGP("%02x %02x %02x %02x %02x %02x %02x %02x\n"
"%02x %02x %02x %02x %02x %02x %02x %02x\n",
sg[i].address[0],
sg[i].address[1],
sg[i].address[2],
sg[i].address[3],
sg[i].address[4],
sg[i].address[5],
sg[i].address[6],
sg[i].address[7],
sg[i].address[8],
sg[i].address[9],
sg[i].address[10],
sg[i].address[11],
sg[i].address[12],
sg[i].address[13],
sg[i].address[14],
sg[i].address[15]);
adr[0],
adr[1],
adr[2],
adr[3],
adr[4],
adr[5],
adr[6],
adr[7],
adr[8],
adr[9],
adr[10],
adr[11],
adr[12],
adr[13],
adr[14],
adr[15]);
}
}
......
......@@ -791,6 +791,10 @@ int usbvideo_register(
cams->cb.getFrame = usbvideo_GetFrame;
if (cams->cb.disconnect == NULL)
cams->cb.disconnect = usbvideo_Disconnect;
if (cams->cb.startDataPump == NULL)
cams->cb.startDataPump = usbvideo_StartDataPump;
if (cams->cb.stopDataPump == NULL)
cams->cb.stopDataPump = usbvideo_StopDataPump;
#if USES_PROC_FS
/*
* If both /proc fs callbacks are NULL then we assume that the driver
......@@ -963,7 +967,7 @@ void usbvideo_Disconnect(struct usb_device *dev, void *ptr)
uvd->remove_pending = 1; /* Now all ISO data will be ignored */
/* At this time we ask to cancel outstanding URBs */
usbvideo_StopDataPump(uvd);
GET_CALLBACK(uvd, stopDataPump)(uvd);
for (i=0; i < USBVIDEO_NUMSBUF; i++)
usb_free_urb(uvd->sbuf[i].urb);
......@@ -1299,7 +1303,7 @@ int usbvideo_v4l_open(struct video_device *dev, int flags)
if (errCode == 0) {
/* Start data pump if we have valid endpoint */
if (uvd->video_endp != 0)
errCode = usbvideo_StartDataPump(uvd);
errCode = GET_CALLBACK(uvd, startDataPump)(uvd);
if (errCode == 0) {
if (VALID_CALLBACK(uvd, setupOnOpen)) {
if (uvd->debug > 1)
......@@ -1349,8 +1353,8 @@ void usbvideo_v4l_close(struct video_device *dev)
if (uvd->debug > 1)
info("%s($%p)", proc, dev);
down(&uvd->lock);
usbvideo_StopDataPump(uvd);
down(&uvd->lock);
GET_CALLBACK(uvd, stopDataPump)(uvd);
usbvideo_rvfree(uvd->fbuf, uvd->fbuf_size);
uvd->fbuf = NULL;
RingQueue_Free(&uvd->dp);
......
......@@ -269,6 +269,8 @@ typedef struct {
int (*getFrame)(uvd_t *, int);
int (*procfs_read)(char *page,char **start,off_t off,int count,int *eof,void *data);
int (*procfs_write)(struct file *file,const char *buffer,unsigned long count,void *data);
int (*startDataPump)(uvd_t *uvd);
void (*stopDataPump)(uvd_t *uvd);
} usbvideo_cb_t;
struct s_usbvideo_t {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment