patch-2.4.20 linux-2.4.20/drivers/usb/serial/whiteheat.c
Next file: linux-2.4.20/drivers/usb/storage/Makefile
Previous file: linux-2.4.20/drivers/usb/serial/visor.h
Back to the patch index
Back to the overall index
- Lines: 502
- Date:
Thu Nov 28 15:53:15 2002
- Orig file:
linux-2.4.19/drivers/usb/serial/whiteheat.c
- Orig date:
Fri Aug 2 17:39:45 2002
diff -urN linux-2.4.19/drivers/usb/serial/whiteheat.c linux-2.4.20/drivers/usb/serial/whiteheat.c
@@ -61,18 +61,15 @@
#include <linux/config.h>
#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/signal.h>
#include <linux/errno.h>
-#include <linux/poll.h>
#include <linux/init.h>
#include <linux/slab.h>
-#include <linux/fcntl.h>
#include <linux/tty.h>
#include <linux/tty_driver.h>
#include <linux/tty_flip.h>
#include <linux/module.h>
#include <linux/spinlock.h>
+#include <asm/uaccess.h>
#include <linux/usb.h>
#ifdef CONFIG_USB_SERIAL_DEBUG
@@ -103,12 +100,12 @@
separate ID tables, and then a third table that combines them
just for the purpose of exporting the autoloading information.
*/
-static __devinitdata struct usb_device_id id_table_std [] = {
+static struct usb_device_id id_table_std [] = {
{ USB_DEVICE(CONNECT_TECH_VENDOR_ID, CONNECT_TECH_WHITE_HEAT_ID) },
{ } /* Terminating entry */
};
-static __devinitdata struct usb_device_id id_table_prerenumeration [] = {
+static struct usb_device_id id_table_prerenumeration [] = {
{ USB_DEVICE(CONNECT_TECH_VENDOR_ID, CONNECT_TECH_FAKE_WHITE_HEAT_ID) },
{ } /* Terminating entry */
};
@@ -133,36 +130,32 @@
static void whiteheat_real_shutdown (struct usb_serial *serial);
static struct usb_serial_device_type whiteheat_fake_device = {
- name: "Connect Tech - WhiteHEAT - (prerenumeration)",
- id_table: id_table_prerenumeration,
- needs_interrupt_in: DONT_CARE, /* don't have to have an interrupt in endpoint */
- needs_bulk_in: DONT_CARE, /* don't have to have a bulk in endpoint */
- needs_bulk_out: DONT_CARE, /* don't have to have a bulk out endpoint */
- num_interrupt_in: NUM_DONT_CARE,
- num_bulk_in: NUM_DONT_CARE,
- num_bulk_out: NUM_DONT_CARE,
- num_ports: 1,
- startup: whiteheat_fake_startup,
+ .owner = THIS_MODULE,
+ .name = "Connect Tech - WhiteHEAT - (prerenumeration)",
+ .id_table = id_table_prerenumeration,
+ .num_interrupt_in = NUM_DONT_CARE,
+ .num_bulk_in = NUM_DONT_CARE,
+ .num_bulk_out = NUM_DONT_CARE,
+ .num_ports = 1,
+ .startup = whiteheat_fake_startup,
};
static struct usb_serial_device_type whiteheat_device = {
- name: "Connect Tech - WhiteHEAT",
- id_table: id_table_std,
- needs_interrupt_in: DONT_CARE, /* don't have to have an interrupt in endpoint */
- needs_bulk_in: DONT_CARE, /* don't have to have a bulk in endpoint */
- needs_bulk_out: DONT_CARE, /* don't have to have a bulk out endpoint */
- num_interrupt_in: NUM_DONT_CARE,
- num_bulk_in: NUM_DONT_CARE,
- num_bulk_out: NUM_DONT_CARE,
- num_ports: 4,
- open: whiteheat_open,
- close: whiteheat_close,
- throttle: whiteheat_throttle,
- unthrottle: whiteheat_unthrottle,
- ioctl: whiteheat_ioctl,
- set_termios: whiteheat_set_termios,
- startup: whiteheat_real_startup,
- shutdown: whiteheat_real_shutdown,
+ .owner = THIS_MODULE,
+ .name = "Connect Tech - WhiteHEAT",
+ .id_table = id_table_std,
+ .num_interrupt_in = NUM_DONT_CARE,
+ .num_bulk_in = NUM_DONT_CARE,
+ .num_bulk_out = NUM_DONT_CARE,
+ .num_ports = 4,
+ .open = whiteheat_open,
+ .close = whiteheat_close,
+ .throttle = whiteheat_throttle,
+ .unthrottle = whiteheat_unthrottle,
+ .ioctl = whiteheat_ioctl,
+ .set_termios = whiteheat_set_termios,
+ .startup = whiteheat_real_startup,
+ .shutdown = whiteheat_real_shutdown,
};
struct whiteheat_private {
@@ -186,7 +179,7 @@
*****************************************************************************/
static void command_port_write_callback (struct urb *urb)
{
- dbg (__FUNCTION__);
+ dbg("%s", __FUNCTION__);
if (urb->status) {
dbg ("nonzero urb status: %d", urb->status);
@@ -207,15 +200,15 @@
unsigned char *data = urb->transfer_buffer;
int result;
- dbg (__FUNCTION__);
+ dbg("%s", __FUNCTION__);
if (urb->status) {
- dbg (__FUNCTION__ " - nonzero urb status: %d", urb->status);
+ dbg("%s - nonzero urb status: %d", __FUNCTION__, urb->status);
return;
}
if (!serial) {
- dbg(__FUNCTION__ " - bad serial pointer, exiting");
+ dbg("%s - bad serial pointer, exiting", __FUNCTION__);
return;
}
@@ -223,7 +216,7 @@
info = (struct whiteheat_private *)port->private;
if (!info) {
- dbg (__FUNCTION__ " - info is NULL, exiting.");
+ dbg("%s - info is NULL, exiting.", __FUNCTION__);
return;
}
@@ -246,7 +239,7 @@
command_port_read_callback, port);
result = usb_submit_urb(port->read_urb);
if (result)
- dbg(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
+ dbg("%s - failed resubmitting read urb, error %d", __FUNCTION__, result);
}
@@ -258,7 +251,7 @@
__u8 *transfer_buffer;
int retval = 0;
- dbg(__FUNCTION__" - command %d", command);
+ dbg("%s - command %d", __FUNCTION__, command);
port = &serial->port[COMMAND_PORT];
info = (struct whiteheat_private *)port->private;
@@ -271,7 +264,7 @@
port->write_urb->dev = serial->dev;
retval = usb_submit_urb (port->write_urb);
if (retval) {
- dbg (__FUNCTION__" - submit urb failed");
+ dbg("%s - submit urb failed", __FUNCTION__);
goto exit;
}
@@ -282,19 +275,19 @@
}
if (info->command_finished == FALSE) {
- dbg (__FUNCTION__ " - command timed out.");
+ dbg("%s - command timed out.", __FUNCTION__);
retval = -ETIMEDOUT;
goto exit;
}
if (info->command_finished == WHITEHEAT_CMD_FAILURE) {
- dbg (__FUNCTION__ " - command failed.");
+ dbg("%s - command failed.", __FUNCTION__);
retval = -EIO;
goto exit;
}
if (info->command_finished == WHITEHEAT_CMD_COMPLETE)
- dbg (__FUNCTION__ " - command completed.");
+ dbg("%s - command completed.", __FUNCTION__);
exit:
return retval;
@@ -308,70 +301,51 @@
struct whiteheat_private *info;
int retval = 0;
- dbg(__FUNCTION__" - port %d", port->number);
+ dbg("%s - port %d", __FUNCTION__, port->number);
- down (&port->sem);
-
- ++port->open_count;
- MOD_INC_USE_COUNT;
-
- if (!port->active) {
- port->active = 1;
-
- /* set up some stuff for our command port */
- command_port = &port->serial->port[COMMAND_PORT];
- if (command_port->private == NULL) {
- info = (struct whiteheat_private *)kmalloc (sizeof(struct whiteheat_private), GFP_KERNEL);
- if (info == NULL) {
- err(__FUNCTION__ " - out of memory");
- retval = -ENOMEM;
- goto error_exit;
- }
-
- init_waitqueue_head(&info->wait_command);
- command_port->private = info;
- command_port->write_urb->complete = command_port_write_callback;
- command_port->read_urb->complete = command_port_read_callback;
- command_port->read_urb->dev = port->serial->dev;
- command_port->tty = port->tty; /* need this to "fake" our our sanity check macros */
- retval = usb_submit_urb (command_port->read_urb);
- if (retval) {
- err(__FUNCTION__ " - failed submitting read urb, error %d", retval);
- goto error_exit;
- }
+ /* set up some stuff for our command port */
+ command_port = &port->serial->port[COMMAND_PORT];
+ if (command_port->private == NULL) {
+ info = (struct whiteheat_private *)kmalloc (sizeof(struct whiteheat_private), GFP_KERNEL);
+ if (info == NULL) {
+ err("%s - out of memory", __FUNCTION__);
+ retval = -ENOMEM;
+ goto exit;
}
- /* Start reading from the device */
- port->read_urb->dev = port->serial->dev;
- retval = usb_submit_urb(port->read_urb);
+ init_waitqueue_head(&info->wait_command);
+ command_port->private = info;
+ command_port->write_urb->complete = command_port_write_callback;
+ command_port->read_urb->complete = command_port_read_callback;
+ command_port->read_urb->dev = port->serial->dev;
+ command_port->tty = port->tty; /* need this to "fake" our our sanity check macros */
+ retval = usb_submit_urb (command_port->read_urb);
if (retval) {
- err(__FUNCTION__ " - failed submitting read urb, error %d", retval);
- goto error_exit;
+ err("%s - failed submitting read urb, error %d", __FUNCTION__, retval);
+ goto exit;
}
+ }
- /* send an open port command */
- /* firmware uses 1 based port numbering */
- open_command.port = port->number - port->serial->minor + 1;
- retval = whiteheat_send_cmd (port->serial, WHITEHEAT_OPEN, (__u8 *)&open_command, sizeof(open_command));
- if (retval)
- goto error_exit;
-
- /* Need to do device specific setup here (control lines, baud rate, etc.) */
- /* FIXME!!! */
+ /* Start reading from the device */
+ port->read_urb->dev = port->serial->dev;
+ retval = usb_submit_urb(port->read_urb);
+ if (retval) {
+ err("%s - failed submitting read urb, error %d", __FUNCTION__, retval);
+ goto exit;
}
- dbg(__FUNCTION__ " - exit");
- up (&port->sem);
-
- return retval;
+ /* send an open port command */
+ /* firmware uses 1 based port numbering */
+ open_command.port = port->number - port->serial->minor + 1;
+ retval = whiteheat_send_cmd (port->serial, WHITEHEAT_OPEN, (__u8 *)&open_command, sizeof(open_command));
+ if (retval)
+ goto exit;
-error_exit:
- --port->open_count;
- MOD_DEC_USE_COUNT;
+ /* Need to do device specific setup here (control lines, baud rate, etc.) */
+ /* FIXME!!! */
- dbg(__FUNCTION__ " - error_exit");
- up (&port->sem);
-
+exit:
+ dbg("%s - exit, retval = %d", __FUNCTION__, retval);
return retval;
}
@@ -380,33 +354,25 @@
{
struct whiteheat_min_set close_command;
- dbg(__FUNCTION__ " - port %d", port->number);
+ dbg("%s - port %d", __FUNCTION__, port->number);
- down (&port->sem);
- --port->open_count;
+ /* send a close command to the port */
+ /* firmware uses 1 based port numbering */
+ close_command.port = port->number - port->serial->minor + 1;
+ whiteheat_send_cmd (port->serial, WHITEHEAT_CLOSE, (__u8 *)&close_command, sizeof(close_command));
- if (port->open_count <= 0) {
- /* send a close command to the port */
- /* firmware uses 1 based port numbering */
- close_command.port = port->number - port->serial->minor + 1;
- whiteheat_send_cmd (port->serial, WHITEHEAT_CLOSE, (__u8 *)&close_command, sizeof(close_command));
+ /* Need to change the control lines here */
+ /* FIXME */
- /* Need to change the control lines here */
- /* FIXME */
-
- /* shutdown our bulk reads and writes */
- usb_unlink_urb (port->write_urb);
- usb_unlink_urb (port->read_urb);
- port->active = 0;
- }
- MOD_DEC_USE_COUNT;
- up (&port->sem);
+ /* shutdown our bulk reads and writes */
+ usb_unlink_urb (port->write_urb);
+ usb_unlink_urb (port->read_urb);
}
static int whiteheat_ioctl (struct usb_serial_port *port, struct file * file, unsigned int cmd, unsigned long arg)
{
- dbg(__FUNCTION__ " - port %d, cmd 0x%.4x", port->number, cmd);
+ dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd);
return -ENOIOCTLCMD;
}
@@ -417,12 +383,10 @@
unsigned int cflag;
struct whiteheat_port_settings port_settings;
- dbg(__FUNCTION__ " -port %d", port->number);
-
- down (&port->sem);
+ dbg("%s -port %d", __FUNCTION__, port->number);
if ((!port->tty) || (!port->tty->termios)) {
- dbg(__FUNCTION__" - no tty structures");
+ dbg("%s - no tty structures", __FUNCTION__);
goto exit;
}
@@ -431,7 +395,7 @@
if (old_termios) {
if ((cflag == old_termios->c_cflag) &&
(RELEVANT_IFLAG(port->tty->termios->c_iflag) == RELEVANT_IFLAG(old_termios->c_iflag))) {
- dbg(__FUNCTION__ " - nothing to change...");
+ dbg("%s - nothing to change...", __FUNCTION__);
goto exit;
}
}
@@ -448,7 +412,7 @@
default:
case CS8: port_settings.bits = 8; break;
}
- dbg(__FUNCTION__ " - data bits = %d", port_settings.bits);
+ dbg("%s - data bits = %d", __FUNCTION__, port_settings.bits);
/* determine the parity */
if (cflag & PARENB)
@@ -458,14 +422,14 @@
port_settings.parity = 'e';
else
port_settings.parity = 'n';
- dbg(__FUNCTION__ " - parity = %c", port_settings.parity);
+ dbg("%s - parity = %c", __FUNCTION__, port_settings.parity);
/* figure out the stop bits requested */
if (cflag & CSTOPB)
port_settings.stop = 2;
else
port_settings.stop = 1;
- dbg(__FUNCTION__ " - stop bits = %d", port_settings.stop);
+ dbg("%s - stop bits = %d", __FUNCTION__, port_settings.stop);
/* figure out the flow control settings */
@@ -473,7 +437,7 @@
port_settings.hflow = (WHITEHEAT_CTS_FLOW | WHITEHEAT_RTS_FLOW);
else
port_settings.hflow = 0;
- dbg(__FUNCTION__ " - hardware flow control = %s %s %s %s",
+ dbg("%s - hardware flow control = %s %s %s %s", __FUNCTION__,
(port_settings.hflow & WHITEHEAT_CTS_FLOW) ? "CTS" : "",
(port_settings.hflow & WHITEHEAT_RTS_FLOW) ? "RTS" : "",
(port_settings.hflow & WHITEHEAT_DSR_FLOW) ? "DSR" : "",
@@ -484,15 +448,15 @@
port_settings.sflow = 'b';
else
port_settings.sflow = 'n';
- dbg(__FUNCTION__ " - software flow control = %c", port_settings.sflow);
+ dbg("%s - software flow control = %c", __FUNCTION__, port_settings.sflow);
port_settings.xon = START_CHAR(port->tty);
port_settings.xoff = STOP_CHAR(port->tty);
- dbg(__FUNCTION__ " - XON = %2x, XOFF = %2x", port_settings.xon, port_settings.xoff);
+ dbg("%s - XON = %2x, XOFF = %2x", __FUNCTION__, port_settings.xon, port_settings.xoff);
/* get the baud rate wanted */
port_settings.baud = tty_get_baud_rate(port->tty);
- dbg(__FUNCTION__ " - baud rate = %d", port_settings.baud);
+ dbg("%s - baud rate = %d", __FUNCTION__, port_settings.baud);
/* handle any settings that aren't specified in the tty structure */
port_settings.lloop = 0;
@@ -501,14 +465,13 @@
whiteheat_send_cmd (port->serial, WHITEHEAT_SETUP_PORT, (__u8 *)&port_settings, sizeof(port_settings));
exit:
- up (&port->sem);
return;
}
static void whiteheat_throttle (struct usb_serial_port *port)
{
- dbg(__FUNCTION__" - port %d", port->number);
+ dbg("%s - port %d", __FUNCTION__, port->number);
/* Change the control signals */
/* FIXME!!! */
@@ -519,7 +482,7 @@
static void whiteheat_unthrottle (struct usb_serial_port *port)
{
- dbg(__FUNCTION__" - port %d", port->number);
+ dbg("%s - port %d", __FUNCTION__, port->number);
/* Change the control signals */
/* FIXME!!! */
@@ -541,12 +504,12 @@
- device renumerated itself and comes up as new device id with all
firmware download completed.
*/
-static int whiteheat_fake_startup (struct usb_serial *serial)
+static int whiteheat_fake_startup (struct usb_serial *serial)
{
int response;
const struct whiteheat_hex_record *record;
- dbg(__FUNCTION__);
+ dbg("%s", __FUNCTION__);
response = ezusb_set_reset (serial, 1);
@@ -555,8 +518,8 @@
response = ezusb_writememory (serial, record->address,
(unsigned char *)record->data, record->data_size, 0xa0);
if (response < 0) {
- err(__FUNCTION__ " - ezusb_writememory failed for loader (%d %04X %p %d)",
- response, record->address, record->data, record->data_size);
+ err("%s - ezusb_writememory failed for loader (%d %04X %p %d)",
+ __FUNCTION__, response, record->address, record->data, record->data_size);
break;
}
++record;
@@ -572,8 +535,8 @@
response = ezusb_writememory (serial, record->address,
(unsigned char *)record->data, record->data_size, 0xa3);
if (response < 0) {
- err(__FUNCTION__ " - ezusb_writememory failed for first firmware step (%d %04X %p %d)",
- response, record->address, record->data, record->data_size);
+ err("%s - ezusb_writememory failed for first firmware step (%d %04X %p %d)",
+ __FUNCTION__, response, record->address, record->data, record->data_size);
break;
}
++record;
@@ -586,8 +549,8 @@
response = ezusb_writememory (serial, record->address,
(unsigned char *)record->data, record->data_size, 0xa0);
if (response < 0) {
- err(__FUNCTION__" - ezusb_writememory failed for second firmware step (%d %04X %p %d)",
- response, record->address, record->data, record->data_size);
+ err("%s - ezusb_writememory failed for second firmware step (%d %04X %p %d)",
+ __FUNCTION__, response, record->address, record->data, record->data_size);
break;
}
++record;
@@ -662,16 +625,8 @@
static void whiteheat_real_shutdown (struct usb_serial *serial)
{
struct usb_serial_port *command_port;
- int i;
-
- dbg(__FUNCTION__);
- /* stop reads and writes on all ports */
- for (i=0; i < serial->num_ports; ++i) {
- while (serial->port[i].open_count > 0) {
- whiteheat_close (&serial->port[i], NULL);
- }
- }
+ dbg("%s", __FUNCTION__);
/* free up our private data for our command port */
command_port = &serial->port[COMMAND_PORT];
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)