git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
char
/
riscom8.c
diff --git
a/drivers/char/riscom8.c
b/drivers/char/riscom8.c
index
119e629
..
e2a94bf
100644
(file)
--- a/
drivers/char/riscom8.c
+++ b/
drivers/char/riscom8.c
@@
-81,12
+81,6
@@
static struct riscom_board * IRQ_to_board[16];
static struct tty_driver *riscom_driver;
static struct riscom_board * IRQ_to_board[16];
static struct tty_driver *riscom_driver;
-static unsigned char * tmp_buf;
-
-static unsigned long baud_table[] = {
- 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
- 9600, 19200, 38400, 57600, 76800, 0,
-};
static struct riscom_board rc_board[RC_NBOARD] = {
{
static struct riscom_board rc_board[RC_NBOARD] = {
{
@@
-551,7
+545,7
@@
static inline void rc_check_modem(struct riscom_board const * bp)
}
/* The main interrupt processing routine */
}
/* The main interrupt processing routine */
-static irqreturn_t rc_interrupt(int irq, void * dev_id
, struct pt_regs * regs
)
+static irqreturn_t rc_interrupt(int irq, void * dev_id)
{
unsigned char status;
unsigned char ack;
{
unsigned char status;
unsigned char ack;
@@
-560,11
+554,10
@@
static irqreturn_t rc_interrupt(int irq, void * dev_id, struct pt_regs * regs)
int handled = 0;
bp = IRQ_to_board[irq];
int handled = 0;
bp = IRQ_to_board[irq];
-
- if (!
bp || !(bp->flags & RC_BOARD_ACTIVE)) {
+
+ if (!
(bp->flags & RC_BOARD_ACTIVE))
return IRQ_NONE;
return IRQ_NONE;
- }
-
+
while ((++loop < 16) && ((status = ~(rc_in(bp, RC_BSR))) &
(RC_BSR_TOUT | RC_BSR_TINT |
RC_BSR_MINT | RC_BSR_RINT))) {
while ((++loop < 16) && ((status = ~(rc_in(bp, RC_BSR))) &
(RC_BSR_TOUT | RC_BSR_TINT |
RC_BSR_MINT | RC_BSR_RINT))) {
@@
-625,7
+618,7
@@
static inline int rc_setup_board(struct riscom_board * bp)
if (bp->flags & RC_BOARD_ACTIVE)
return 0;
if (bp->flags & RC_BOARD_ACTIVE)
return 0;
- error = request_irq(bp->irq, rc_interrupt,
SA_INTERRUPT
,
+ error = request_irq(bp->irq, rc_interrupt,
IRQF_DISABLED
,
"RISCom/8", NULL);
if (error)
return error;
"RISCom/8", NULL);
if (error)
return error;
@@
-675,26
+668,12
@@
static void rc_change_speed(struct riscom_board *bp, struct riscom_port *port)
port->COR2 = 0;
port->MSVR = MSVR_RTS;
port->COR2 = 0;
port->MSVR = MSVR_RTS;
- baud = C_BAUD(tty);
-
- if (baud & CBAUDEX) {
- baud &= ~CBAUDEX;
- if (baud < 1 || baud > 2)
- port->tty->termios->c_cflag &= ~CBAUDEX;
- else
- baud += 15;
- }
- if (baud == 15) {
- if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
- baud ++;
- if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
- baud += 2;
- }
+ baud = tty_get_baud_rate(tty);
/* Select port on the board */
rc_out(bp, CD180_CAR, port_No(port));
/* Select port on the board */
rc_out(bp, CD180_CAR, port_No(port));
- if (!baud
_table[baud]
) {
+ if (!baud) {
/* Drop DTR & exit */
bp->DTR |= (1u << port_No(port));
rc_out(bp, RC_DTR, bp->DTR);
/* Drop DTR & exit */
bp->DTR |= (1u << port_No(port));
rc_out(bp, RC_DTR, bp->DTR);
@@
-710,7
+689,7
@@
static void rc_change_speed(struct riscom_board *bp, struct riscom_port *port)
*/
/* Set baud rate for port */
*/
/* Set baud rate for port */
- tmp = (((RC_OSCFREQ + baud
_table[baud]/2) / baud_table[baud]
+
+ tmp = (((RC_OSCFREQ + baud
/2) / baud
+
CD180_TPC/2) / CD180_TPC);
rc_out(bp, CD180_RBPRH, (tmp >> 8) & 0xff);
CD180_TPC/2) / CD180_TPC);
rc_out(bp, CD180_RBPRH, (tmp >> 8) & 0xff);
@@
-718,7
+697,7
@@
static void rc_change_speed(struct riscom_board *bp, struct riscom_port *port)
rc_out(bp, CD180_RBPRL, tmp & 0xff);
rc_out(bp, CD180_TBPRL, tmp & 0xff);
rc_out(bp, CD180_RBPRL, tmp & 0xff);
rc_out(bp, CD180_TBPRL, tmp & 0xff);
- baud = (baud
_table[baud]
+ 5) / 10; /* Estimated CPS */
+ baud = (baud + 5) / 10; /* Estimated CPS */
/* Two timer ticks seems enough to wakeup something like SLIP driver */
tmp = ((baud + HZ/2) / HZ) * 2 - CD180_NFIFO;
/* Two timer ticks seems enough to wakeup something like SLIP driver */
tmp = ((baud + HZ/2) / HZ) * 2 - CD180_NFIFO;
@@
-1138,7
+1117,7
@@
static int rc_write(struct tty_struct * tty,
bp = port_Board(port);
bp = port_Board(port);
- if (!tty || !port->xmit_buf
|| !tmp_buf
)
+ if (!tty || !port->xmit_buf)
return 0;
save_flags(flags);
return 0;
save_flags(flags);
@@
-1532,9
+1511,9
@@
static void rc_start(struct tty_struct * tty)
* do_rc_hangup() -> tty->hangup() -> rc_hangup()
*
*/
* do_rc_hangup() -> tty->hangup() -> rc_hangup()
*
*/
-static void do_rc_hangup(
void *private_
)
+static void do_rc_hangup(
struct work_struct *ugly_api
)
{
{
- struct riscom_port *port =
(struct riscom_port *) private_
;
+ struct riscom_port *port =
container_of(ugly_api, struct riscom_port, tqueue_hangup)
;
struct tty_struct *tty;
tty = port->tty;
struct tty_struct *tty;
tty = port->tty;
@@
-1560,7
+1539,7
@@
static void rc_hangup(struct tty_struct * tty)
wake_up_interruptible(&port->open_wait);
}
wake_up_interruptible(&port->open_wait);
}
-static void rc_set_termios(struct tty_struct * tty, struct termios * old_termios)
+static void rc_set_termios(struct tty_struct * tty, struct
k
termios * old_termios)
{
struct riscom_port *port = (struct riscom_port *)tty->driver_data;
unsigned long flags;
{
struct riscom_port *port = (struct riscom_port *)tty->driver_data;
unsigned long flags;
@@
-1583,9
+1562,9
@@
static void rc_set_termios(struct tty_struct * tty, struct termios * old_termios
}
}
}
}
-static void do_softint(
void *private_
)
+static void do_softint(
struct work_struct *ugly_api
)
{
{
- struct riscom_port *port =
(struct riscom_port *) private_
;
+ struct riscom_port *port =
container_of(ugly_api, struct riscom_port, tqueue)
;
struct tty_struct *tty;
if(!(tty = port->tty))
struct tty_struct *tty;
if(!(tty = port->tty))
@@
-1597,7
+1576,7
@@
static void do_softint(void *private_)
}
}
}
}
-static struct tty_operations riscom_ops = {
+static
const
struct tty_operations riscom_ops = {
.open = rc_open,
.close = rc_close,
.write = rc_write,
.open = rc_open,
.close = rc_close,
.write = rc_write,
@@
-1626,25
+1605,20
@@
static inline int rc_init_drivers(void)
if (!riscom_driver)
return -ENOMEM;
if (!riscom_driver)
return -ENOMEM;
- if (!(tmp_buf = (unsigned char *) get_zeroed_page(GFP_KERNEL))) {
- printk(KERN_ERR "rc: Couldn't get free page.\n");
- put_tty_driver(riscom_driver);
- return 1;
- }
memset(IRQ_to_board, 0, sizeof(IRQ_to_board));
riscom_driver->owner = THIS_MODULE;
riscom_driver->name = "ttyL";
memset(IRQ_to_board, 0, sizeof(IRQ_to_board));
riscom_driver->owner = THIS_MODULE;
riscom_driver->name = "ttyL";
- riscom_driver->devfs_name = "tts/L";
riscom_driver->major = RISCOM8_NORMAL_MAJOR;
riscom_driver->type = TTY_DRIVER_TYPE_SERIAL;
riscom_driver->subtype = SERIAL_TYPE_NORMAL;
riscom_driver->init_termios = tty_std_termios;
riscom_driver->init_termios.c_cflag =
B9600 | CS8 | CREAD | HUPCL | CLOCAL;
riscom_driver->major = RISCOM8_NORMAL_MAJOR;
riscom_driver->type = TTY_DRIVER_TYPE_SERIAL;
riscom_driver->subtype = SERIAL_TYPE_NORMAL;
riscom_driver->init_termios = tty_std_termios;
riscom_driver->init_termios.c_cflag =
B9600 | CS8 | CREAD | HUPCL | CLOCAL;
+ riscom_driver->init_termios.c_ispeed = 9600;
+ riscom_driver->init_termios.c_ospeed = 9600;
riscom_driver->flags = TTY_DRIVER_REAL_RAW;
tty_set_operations(riscom_driver, &riscom_ops);
if ((error = tty_register_driver(riscom_driver))) {
riscom_driver->flags = TTY_DRIVER_REAL_RAW;
tty_set_operations(riscom_driver, &riscom_ops);
if ((error = tty_register_driver(riscom_driver))) {
- free_page((unsigned long)tmp_buf);
put_tty_driver(riscom_driver);
printk(KERN_ERR "rc: Couldn't register RISCom/8 driver, "
"error = %d\n",
put_tty_driver(riscom_driver);
printk(KERN_ERR "rc: Couldn't register RISCom/8 driver, "
"error = %d\n",
@@
-1655,8
+1629,8
@@
static inline int rc_init_drivers(void)
memset(rc_port, 0, sizeof(rc_port));
for (i = 0; i < RC_NPORT * RC_NBOARD; i++) {
rc_port[i].magic = RISCOM8_MAGIC;
memset(rc_port, 0, sizeof(rc_port));
for (i = 0; i < RC_NPORT * RC_NBOARD; i++) {
rc_port[i].magic = RISCOM8_MAGIC;
- INIT_WORK(&rc_port[i].tqueue, do_softint
, &rc_port[i]
);
- INIT_WORK(&rc_port[i].tqueue_hangup, do_rc_hangup
, &rc_port[i]
);
+ INIT_WORK(&rc_port[i].tqueue, do_softint);
+ INIT_WORK(&rc_port[i].tqueue_hangup, do_rc_hangup);
rc_port[i].close_delay = 50 * HZ/100;
rc_port[i].closing_wait = 3000 * HZ/100;
init_waitqueue_head(&rc_port[i].open_wait);
rc_port[i].close_delay = 50 * HZ/100;
rc_port[i].closing_wait = 3000 * HZ/100;
init_waitqueue_head(&rc_port[i].open_wait);
@@
-1672,7
+1646,6
@@
static void rc_release_drivers(void)
save_flags(flags);
cli();
save_flags(flags);
cli();
- free_page((unsigned long)tmp_buf);
tty_unregister_driver(riscom_driver);
put_tty_driver(riscom_driver);
restore_flags(flags);
tty_unregister_driver(riscom_driver);
put_tty_driver(riscom_driver);
restore_flags(flags);
@@
-1743,10
+1716,10
@@
static int iobase;
static int iobase1;
static int iobase2;
static int iobase3;
static int iobase1;
static int iobase2;
static int iobase3;
-
MODULE_PARM(iobase, "i"
);
-
MODULE_PARM(iobase1, "i"
);
-
MODULE_PARM(iobase2, "i"
);
-
MODULE_PARM(iobase3, "i"
);
+
module_param(iobase, int, 0
);
+
module_param(iobase1, int, 0
);
+
module_param(iobase2, int, 0
);
+
module_param(iobase3, int, 0
);
MODULE_LICENSE("GPL");
#endif /* MODULE */
MODULE_LICENSE("GPL");
#endif /* MODULE */