aboutsummaryrefslogtreecommitdiff
path: root/drivers/char/isicom.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/isicom.c')
-rw-r--r--drivers/char/isicom.c131
1 files changed, 61 insertions, 70 deletions
diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c
index 761c5622b7a..9ede7c211cc 100644
--- a/drivers/char/isicom.c
+++ b/drivers/char/isicom.c
@@ -154,9 +154,6 @@ static struct tty_driver *isicom_normal;
static struct timer_list tx;
static char re_schedule = 1;
-#ifdef ISICOM_DEBUG
-static unsigned long tx_count = 0;
-#endif
static int ISILoad_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);
@@ -173,7 +170,7 @@ static signed char linuxb_to_isib[] = {
};
struct isi_board {
- unsigned short base;
+ unsigned long base;
unsigned char irq;
unsigned char port_count;
unsigned short status;
@@ -192,9 +189,9 @@ struct isi_port {
int count;
int blocked_open;
int close_delay;
- unsigned short channel;
- unsigned short status;
- unsigned short closing_wait;
+ u16 channel;
+ u16 status;
+ u16 closing_wait;
struct isi_board * card;
struct tty_struct * tty;
wait_queue_head_t close_wait;
@@ -219,7 +216,7 @@ static struct isi_port isi_ports[PORT_COUNT];
static int lock_card(struct isi_board *card)
{
char retries;
- unsigned short base = card->base;
+ unsigned long base = card->base;
for (retries = 0; retries < 100; retries++) {
spin_lock_irqsave(&card->card_lock, card->flags);
@@ -230,14 +227,14 @@ static int lock_card(struct isi_board *card)
udelay(1000); /* 1ms */
}
}
- printk(KERN_WARNING "ISICOM: Failed to lock Card (0x%x)\n", card->base);
+ printk(KERN_WARNING "ISICOM: Failed to lock Card (0x%lx)\n", card->base);
return 0; /* Failed to aquire the card! */
}
static int lock_card_at_interrupt(struct isi_board *card)
{
unsigned char retries;
- unsigned short base = card->base;
+ unsigned long base = card->base;
for (retries = 0; retries < 200; retries++) {
spin_lock_irqsave(&card->card_lock, card->flags);
@@ -263,8 +260,8 @@ static void unlock_card(struct isi_board *card)
static void raise_dtr(struct isi_port *port)
{
struct isi_board *card = port->card;
- unsigned short base = card->base;
- unsigned char channel = port->channel;
+ unsigned long base = card->base;
+ u16 channel = port->channel;
if (!lock_card(card))
return;
@@ -279,8 +276,8 @@ static void raise_dtr(struct isi_port *port)
static inline void drop_dtr(struct isi_port *port)
{
struct isi_board *card = port->card;
- unsigned short base = card->base;
- unsigned char channel = port->channel;
+ unsigned long base = card->base;
+ u16 channel = port->channel;
if (!lock_card(card))
return;
@@ -295,8 +292,8 @@ static inline void drop_dtr(struct isi_port *port)
static inline void raise_rts(struct isi_port *port)
{
struct isi_board *card = port->card;
- unsigned short base = card->base;
- unsigned char channel = port->channel;
+ unsigned long base = card->base;
+ u16 channel = port->channel;
if (!lock_card(card))
return;
@@ -310,8 +307,8 @@ static inline void raise_rts(struct isi_port *port)
static inline void drop_rts(struct isi_port *port)
{
struct isi_board *card = port->card;
- unsigned short base = card->base;
- unsigned char channel = port->channel;
+ unsigned long base = card->base;
+ u16 channel = port->channel;
if (!lock_card(card))
return;
@@ -326,8 +323,8 @@ static inline void drop_rts(struct isi_port *port)
static inline void raise_dtr_rts(struct isi_port *port)
{
struct isi_board *card = port->card;
- unsigned short base = card->base;
- unsigned char channel = port->channel;
+ unsigned long base = card->base;
+ u16 channel = port->channel;
if (!lock_card(card))
return;
@@ -342,8 +339,8 @@ static inline void raise_dtr_rts(struct isi_port *port)
static void drop_dtr_rts(struct isi_port *port)
{
struct isi_board *card = port->card;
- unsigned short base = card->base;
- unsigned char channel = port->channel;
+ unsigned long base = card->base;
+ u16 channel = port->channel;
if (!lock_card(card))
return;
@@ -358,8 +355,8 @@ static void drop_dtr_rts(struct isi_port *port)
static inline void kill_queue(struct isi_port *port, short queue)
{
struct isi_board *card = port->card;
- unsigned short base = card->base;
- unsigned char channel = port->channel;
+ unsigned long base = card->base;
+ u16 channel = port->channel;
if (!lock_card(card))
return;
@@ -386,7 +383,7 @@ static struct miscdevice isiloader_device = {
};
-static inline int WaitTillCardIsFree(unsigned short base)
+static inline int WaitTillCardIsFree(unsigned long base)
{
unsigned long count=0;
while( (!(inw(base+0xe) & 0x1)) && (count++ < 6000000));
@@ -400,8 +397,8 @@ static int ISILoad_ioctl(struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg)
{
unsigned int card, i, j, signature, status, portcount = 0;
- unsigned long t;
- unsigned short word_count, base;
+ unsigned long t, base;
+ u16 word_count;
bin_frame frame;
void __user *argp = (void __user *)arg;
/* exec_record exec_rec; */
@@ -421,7 +418,7 @@ static int ISILoad_ioctl(struct inode *inode, struct file *filp,
case MIOCTL_RESET_CARD:
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
- printk(KERN_DEBUG "ISILoad:Resetting Card%d at 0x%x ",card+1,base);
+ printk(KERN_DEBUG "ISILoad:Resetting Card%d at 0x%lx ",card+1,base);
inw(base+0x8);
@@ -440,7 +437,7 @@ static int ISILoad_ioctl(struct inode *inode, struct file *filp,
#ifdef ISICOM_DEBUG
printk("\nbase+0x2=0x%x , base+0xe=0x%x",inw(base+0x2),inw(base+0xe));
#endif
- printk("\nISILoad:ISA Card%d reset failure (Possible bad I/O Port Address 0x%x).\n",card+1,base);
+ printk("\nISILoad:ISA Card%d reset failure (Possible bad I/O Port Address 0x%lx).\n",card+1,base);
return -EIO;
}
}
@@ -450,7 +447,7 @@ static int ISILoad_ioctl(struct inode *inode, struct file *filp,
#ifdef ISICOM_DEBUG
printk("\nbase+0x2=0x%x , base+0xe=0x%x",inw(base+0x2),inw(base+0xe));
#endif
- printk("\nISILoad:PCI Card%d reset failure (Possible bad I/O Port Address 0x%x).\n",card+1,base);
+ printk("\nISILoad:PCI Card%d reset failure (Possible bad I/O Port Address 0x%lx).\n",card+1,base);
return -EIO;
}
}
@@ -473,7 +470,7 @@ static int ISILoad_ioctl(struct inode *inode, struct file *filp,
isi_card[card].shift_count = 11;
break;
- default: printk("ISILoad:Card%d reset failure (Possible bad I/O Port Address 0x%x).\n",card+1,base);
+ default: printk("ISILoad:Card%d reset failure (Possible bad I/O Port Address 0x%lx).\n",card+1,base);
#ifdef ISICOM_DEBUG
printk("Sig=0x%x\n",signature);
#endif
@@ -636,10 +633,6 @@ static void isicom_tx(unsigned long _data)
struct isi_port *port;
struct tty_struct *tty;
-#ifdef ISICOM_DEBUG
- ++tx_count;
-#endif
-
/* find next active board */
card = (prev_card + 1) & 0x0003;
while(count-- > 0) {
@@ -762,19 +755,16 @@ static void isicom_bottomhalf(void *data)
* Main interrupt handler routine
*/
-static irqreturn_t isicom_interrupt(int irq, void *dev_id,
- struct pt_regs *regs)
+static irqreturn_t isicom_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
- struct isi_board *card;
+ struct isi_board *card = dev_id;
struct isi_port *port;
struct tty_struct *tty;
- unsigned short base, header, word_count, count;
- unsigned char channel;
+ unsigned long base;
+ u16 header, word_count, count, channel;
short byte_count;
unsigned char *rp;
- card = (struct isi_board *) dev_id;
-
if (!card || !(card->status & FIRMWARE_LOADED))
return IRQ_NONE;
@@ -796,7 +786,7 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id,
byte_count = header & 0xff;
if (channel + 1 > card->port_count) {
- printk(KERN_WARNING "ISICOM: isicom_interrupt(0x%x): %d(channel) > port_count.\n",
+ printk(KERN_WARNING "ISICOM: isicom_interrupt(0x%lx): %d(channel) > port_count.\n",
base, channel+1);
if (card->isa)
ClearInterrupt(base);
@@ -932,7 +922,7 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id,
byte_count -= 2;
}
if (byte_count > 0) {
- printk(KERN_DEBUG "ISICOM: Intr(0x%x:%d): Flip buffer overflow! dropping bytes...\n",
+ printk(KERN_DEBUG "ISICOM: Intr(0x%lx:%d): Flip buffer overflow! dropping bytes...\n",
base, channel+1);
while(byte_count > 0) { /* drain out unread xtra data */
inw(base);
@@ -953,8 +943,9 @@ static void isicom_config_port(struct isi_port *port)
struct isi_board *card = port->card;
struct tty_struct *tty;
unsigned long baud;
- unsigned short channel_setup, base = card->base;
- unsigned short channel = port->channel, shift_count = card->shift_count;
+ unsigned long base = card->base;
+ u16 channel_setup, channel = port->channel,
+ shift_count = card->shift_count;
unsigned char flow_ctrl;
if (!(tty = port->tty) || !tty->termios)
@@ -1280,7 +1271,7 @@ static void isicom_shutdown_port(struct isi_port *port)
set_bit(TTY_IO_ERROR, &tty->flags);
if (--card->count < 0) {
- printk(KERN_DEBUG "ISICOM: isicom_shutdown_port: bad board(0x%x) count %d.\n",
+ printk(KERN_DEBUG "ISICOM: isicom_shutdown_port: bad board(0x%lx) count %d.\n",
card->base, card->count);
card->count = 0;
}
@@ -1294,7 +1285,7 @@ static void isicom_shutdown_port(struct isi_port *port)
static void isicom_close(struct tty_struct *tty, struct file *filp)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
struct isi_board *card = port->card;
unsigned long flags;
@@ -1314,13 +1305,13 @@ static void isicom_close(struct tty_struct *tty, struct file *filp)
}
if (tty->count == 1 && port->count != 1) {
- printk(KERN_WARNING "ISICOM:(0x%x) isicom_close: bad port count"
+ printk(KERN_WARNING "ISICOM:(0x%lx) isicom_close: bad port count"
"tty->count = 1 port count = %d.\n",
card->base, port->count);
port->count = 1;
}
if (--port->count < 0) {
- printk(KERN_WARNING "ISICOM:(0x%x) isicom_close: bad port count for"
+ printk(KERN_WARNING "ISICOM:(0x%lx) isicom_close: bad port count for"
"channel%d = %d", card->base, port->channel,
port->count);
port->count = 0;
@@ -1373,7 +1364,7 @@ static void isicom_close(struct tty_struct *tty, struct file *filp)
static int isicom_write(struct tty_struct *tty, const unsigned char *buf,
int count)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
struct isi_board *card = port->card;
unsigned long flags;
int cnt, total = 0;
@@ -1408,7 +1399,7 @@ static int isicom_write(struct tty_struct *tty, const unsigned char *buf,
/* put_char et all */
static void isicom_put_char(struct tty_struct *tty, unsigned char ch)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
struct isi_board *card = port->card;
unsigned long flags;
@@ -1433,7 +1424,7 @@ static void isicom_put_char(struct tty_struct *tty, unsigned char ch)
/* flush_chars et all */
static void isicom_flush_chars(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
if (isicom_paranoia_check(port, tty->name, "isicom_flush_chars"))
return;
@@ -1449,7 +1440,7 @@ static void isicom_flush_chars(struct tty_struct *tty)
/* write_room et all */
static int isicom_write_room(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
int free;
if (isicom_paranoia_check(port, tty->name, "isicom_write_room"))
@@ -1464,7 +1455,7 @@ static int isicom_write_room(struct tty_struct *tty)
/* chars_in_buffer et all */
static int isicom_chars_in_buffer(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
if (isicom_paranoia_check(port, tty->name, "isicom_chars_in_buffer"))
return 0;
return port->xmit_cnt;
@@ -1474,7 +1465,7 @@ static int isicom_chars_in_buffer(struct tty_struct *tty)
static inline void isicom_send_break(struct isi_port *port, unsigned long length)
{
struct isi_board *card = port->card;
- unsigned short base = card->base;
+ unsigned long base = card->base;
if (!lock_card(card))
return;
@@ -1489,9 +1480,9 @@ static inline void isicom_send_break(struct isi_port *port, unsigned long length
static int isicom_tiocmget(struct tty_struct *tty, struct file *file)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
/* just send the port status */
- unsigned short status = port->status;
+ u16 status = port->status;
if (isicom_paranoia_check(port, tty->name, "isicom_ioctl"))
return -ENODEV;
@@ -1507,7 +1498,7 @@ static int isicom_tiocmget(struct tty_struct *tty, struct file *file)
static int isicom_tiocmset(struct tty_struct *tty, struct file *file,
unsigned int set, unsigned int clear)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
if (isicom_paranoia_check(port, tty->name, "isicom_ioctl"))
return -ENODEV;
@@ -1580,7 +1571,7 @@ static int isicom_get_serial_info(struct isi_port *port,
static int isicom_ioctl(struct tty_struct *tty, struct file *filp,
unsigned int cmd, unsigned long arg)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
void __user *argp = (void __user *)arg;
int retval;
@@ -1632,7 +1623,7 @@ static int isicom_ioctl(struct tty_struct *tty, struct file *filp,
static void isicom_set_termios(struct tty_struct *tty,
struct termios *old_termios)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
if (isicom_paranoia_check(port, tty->name, "isicom_set_termios"))
return;
@@ -1653,7 +1644,7 @@ static void isicom_set_termios(struct tty_struct *tty,
/* throttle et all */
static void isicom_throttle(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
struct isi_board *card = port->card;
if (isicom_paranoia_check(port, tty->name, "isicom_throttle"))
@@ -1667,7 +1658,7 @@ static void isicom_throttle(struct tty_struct *tty)
/* unthrottle et all */
static void isicom_unthrottle(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
struct isi_board *card = port->card;
if (isicom_paranoia_check(port, tty->name, "isicom_unthrottle"))
@@ -1681,7 +1672,7 @@ static void isicom_unthrottle(struct tty_struct *tty)
/* stop et all */
static void isicom_stop(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
if (isicom_paranoia_check(port, tty->name, "isicom_stop"))
return;
@@ -1694,7 +1685,7 @@ static void isicom_stop(struct tty_struct *tty)
/* start et all */
static void isicom_start(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
if (isicom_paranoia_check(port, tty->name, "isicom_start"))
return;
@@ -1707,7 +1698,7 @@ static void isicom_start(struct tty_struct *tty)
/* hangup et all */
static void do_isicom_hangup(void *data)
{
- struct isi_port *port = (struct isi_port *) data;
+ struct isi_port *port = data;
struct tty_struct *tty;
tty = port->tty;
@@ -1717,7 +1708,7 @@ static void do_isicom_hangup(void *data)
static void isicom_hangup(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
if (isicom_paranoia_check(port, tty->name, "isicom_hangup"))
return;
@@ -1732,7 +1723,7 @@ static void isicom_hangup(struct tty_struct *tty)
/* flush_buffer et all */
static void isicom_flush_buffer(struct tty_struct *tty)
{
- struct isi_port *port = (struct isi_port *) tty->driver_data;
+ struct isi_port *port = tty->driver_data;
struct isi_board *card = port->card;
unsigned long flags;
@@ -1754,7 +1745,7 @@ static int __devinit register_ioregion(void)
for (count=0; count < BOARD_COUNT; count++ ) {
if (isi_card[count].base)
if (!request_region(isi_card[count].base,16,ISICOM_NAME)) {
- printk(KERN_DEBUG "ISICOM: I/O Region 0x%x-0x%x is busy. Card%d will be disabled.\n",
+ printk(KERN_DEBUG "ISICOM: I/O Region 0x%lx-0x%lx is busy. Card%d will be disabled.\n",
isi_card[count].base,isi_card[count].base+15,count+1);
isi_card[count].base=0;
done++;
@@ -1770,7 +1761,7 @@ static void unregister_ioregion(void)
if (isi_card[count].base) {
release_region(isi_card[count].base,16);
#ifdef ISICOM_DEBUG
- printk(KERN_DEBUG "ISICOM: I/O Region 0x%x-0x%x released for Card%d.\n",isi_card[count].base,isi_card[count].base+15,count+1);
+ printk(KERN_DEBUG "ISICOM: I/O Region 0x%lx-0x%lx released for Card%d.\n",isi_card[count].base,isi_card[count].base+15,count+1);
#endif
}
}