projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] Char: moxa, do not initialize global static
[powerpc.git]
/
drivers
/
char
/
specialix.c
diff --git
a/drivers/char/specialix.c
b/drivers/char/specialix.c
index
f52c7c3
..
92043c8
100644
(file)
--- a/
drivers/char/specialix.c
+++ b/
drivers/char/specialix.c
@@
-183,11
+183,6
@@
static int sx_poll = HZ;
static struct tty_driver *specialix_driver;
static struct tty_driver *specialix_driver;
-static unsigned long baud_table[] = {
- 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
- 9600, 19200, 38400, 57600, 115200, 0,
-};
-
static struct specialix_board sx_board[SX_NBOARD] = {
{ 0, SX_IOBASE1, 9, },
{ 0, SX_IOBASE2, 11, },
static struct specialix_board sx_board[SX_NBOARD] = {
{ 0, SX_IOBASE1, 9, },
{ 0, SX_IOBASE2, 11, },
@@
-200,7
+195,7
@@
static struct specialix_port sx_port[SX_NBOARD * SX_NPORT];
#ifdef SPECIALIX_TIMER
static struct timer_list missed_irq_timer;
#ifdef SPECIALIX_TIMER
static struct timer_list missed_irq_timer;
-static irqreturn_t sx_interrupt(int irq, void * dev_id
, struct pt_regs * regs
);
+static irqreturn_t sx_interrupt(int irq, void * dev_id);
#endif
#endif
@@
-897,7
+892,7
@@
static inline void sx_check_modem(struct specialix_board * bp)
/* The main interrupt processing routine */
/* The main interrupt processing routine */
-static irqreturn_t sx_interrupt(int irq, void *dev_id
, struct pt_regs *regs
)
+static irqreturn_t sx_interrupt(int irq, void *dev_id)
{
unsigned char status;
unsigned char ack;
{
unsigned char status;
unsigned char ack;
@@
-912,7
+907,7
@@
static irqreturn_t sx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
spin_lock_irqsave(&bp->lock, flags);
dprintk (SX_DEBUG_FLOW, "enter %s port %d room: %ld\n", __FUNCTION__, port_No(sx_get_port(bp, "INT")), SERIAL_XMIT_SIZE - sx_get_port(bp, "ITN")->xmit_cnt - 1);
spin_lock_irqsave(&bp->lock, flags);
dprintk (SX_DEBUG_FLOW, "enter %s port %d room: %ld\n", __FUNCTION__, port_No(sx_get_port(bp, "INT")), SERIAL_XMIT_SIZE - sx_get_port(bp, "ITN")->xmit_cnt - 1);
- if (!
bp || !
(bp->flags & SX_BOARD_ACTIVE)) {
+ if (!(bp->flags & SX_BOARD_ACTIVE)) {
dprintk (SX_DEBUG_IRQ, "sx: False interrupt. irq %d.\n", irq);
spin_unlock_irqrestore(&bp->lock, flags);
func_exit();
dprintk (SX_DEBUG_IRQ, "sx: False interrupt. irq %d.\n", irq);
spin_unlock_irqrestore(&bp->lock, flags);
func_exit();
@@
-1090,9
+1085,9
@@
static void sx_change_speed(struct specialix_board *bp, struct specialix_port *p
if (baud == 38400) {
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
if (baud == 38400) {
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
- baud
++
;
+ baud
= 57600
;
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
- baud
+= 2
;
+ baud
= 115200
;
}
if (!baud) {
}
if (!baud) {
@@
-1150,11
+1145,9
@@
static void sx_change_speed(struct specialix_board *bp, struct specialix_port *p
sx_out(bp, CD186x_RBPRL, tmp & 0xff);
sx_out(bp, CD186x_TBPRL, tmp & 0xff);
spin_unlock_irqrestore(&bp->lock, flags);
sx_out(bp, CD186x_RBPRL, tmp & 0xff);
sx_out(bp, CD186x_TBPRL, tmp & 0xff);
spin_unlock_irqrestore(&bp->lock, flags);
- if (port->custom_divisor)
{
+ if (port->custom_divisor)
baud = (SX_OSCFREQ + port->custom_divisor/2) / port->custom_divisor;
baud = (SX_OSCFREQ + port->custom_divisor/2) / port->custom_divisor;
- baud = ( baud + 5 ) / 10;
- } else
- 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 - CD186x_NFIFO;
/* Two timer ticks seems enough to wakeup something like SLIP driver */
tmp = ((baud + HZ/2) / HZ) * 2 - CD186x_NFIFO;
@@
-2268,9
+2261,10
@@
static void sx_start(struct tty_struct * tty)
* do_sx_hangup() -> tty->hangup() -> sx_hangup()
*
*/
* do_sx_hangup() -> tty->hangup() -> sx_hangup()
*
*/
-static void do_sx_hangup(
void *private_
)
+static void do_sx_hangup(
struct work_struct *work
)
{
{
- struct specialix_port *port = (struct specialix_port *) private_;
+ struct specialix_port *port =
+ container_of(work, struct specialix_port, tqueue_hangup);
struct tty_struct *tty;
func_enter();
struct tty_struct *tty;
func_enter();
@@
-2317,7
+2311,7
@@
static void sx_hangup(struct tty_struct * tty)
}
}
-static void sx_set_termios(struct tty_struct * tty, struct termios * old_termios)
+static void sx_set_termios(struct tty_struct * tty, struct
k
termios * old_termios)
{
struct specialix_port *port = (struct specialix_port *)tty->driver_data;
unsigned long flags;
{
struct specialix_port *port = (struct specialix_port *)tty->driver_data;
unsigned long flags;
@@
-2343,9
+2337,10
@@
static void sx_set_termios(struct tty_struct * tty, struct termios * old_termios
}
}
-static void do_softint(
void *private_
)
+static void do_softint(
struct work_struct *work
)
{
{
- struct specialix_port *port = (struct specialix_port *) private_;
+ struct specialix_port *port =
+ container_of(work, struct specialix_port, tqueue);
struct tty_struct *tty;
func_enter();
struct tty_struct *tty;
func_enter();
@@
-2355,15
+2350,13
@@
static void do_softint(void *private_)
return;
}
return;
}
- if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &port->event))
{
+ if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &port->event))
tty_wakeup(tty);
tty_wakeup(tty);
- //wake_up_interruptible(&tty->write_wait);
- }
func_exit();
}
func_exit();
}
-static struct tty_operations sx_ops = {
+static
const
struct tty_operations sx_ops = {
.open = sx_open,
.close = sx_close,
.write = sx_write,
.open = sx_open,
.close = sx_close,
.write = sx_write,
@@
-2405,6
+2398,8
@@
static int sx_init_drivers(void)
specialix_driver->init_termios = tty_std_termios;
specialix_driver->init_termios.c_cflag =
B9600 | CS8 | CREAD | HUPCL | CLOCAL;
specialix_driver->init_termios = tty_std_termios;
specialix_driver->init_termios.c_cflag =
B9600 | CS8 | CREAD | HUPCL | CLOCAL;
+ specialix_driver->init_termios.c_ispeed = 9600;
+ specialix_driver->init_termios.c_ospeed = 9600;
specialix_driver->flags = TTY_DRIVER_REAL_RAW;
tty_set_operations(specialix_driver, &sx_ops);
specialix_driver->flags = TTY_DRIVER_REAL_RAW;
tty_set_operations(specialix_driver, &sx_ops);
@@
-2418,8
+2413,8
@@
static int sx_init_drivers(void)
memset(sx_port, 0, sizeof(sx_port));
for (i = 0; i < SX_NPORT * SX_NBOARD; i++) {
sx_port[i].magic = SPECIALIX_MAGIC;
memset(sx_port, 0, sizeof(sx_port));
for (i = 0; i < SX_NPORT * SX_NBOARD; i++) {
sx_port[i].magic = SPECIALIX_MAGIC;
- INIT_WORK(&sx_port[i].tqueue, do_softint
, &sx_port[i]
);
- INIT_WORK(&sx_port[i].tqueue_hangup, do_sx_hangup
, &sx_port[i]
);
+ INIT_WORK(&sx_port[i].tqueue, do_softint);
+ INIT_WORK(&sx_port[i].tqueue_hangup, do_sx_hangup);
sx_port[i].close_delay = 50 * HZ/100;
sx_port[i].closing_wait = 3000 * HZ/100;
init_waitqueue_head(&sx_port[i].open_wait);
sx_port[i].close_delay = 50 * HZ/100;
sx_port[i].closing_wait = 3000 * HZ/100;
init_waitqueue_head(&sx_port[i].open_wait);
@@
-2480,7
+2475,7
@@
static int __init specialix_init(void)
i++;
continue;
}
i++;
continue;
}
- pdev = pci_
find
_device (PCI_VENDOR_ID_SPECIALIX,
+ pdev = pci_
get
_device (PCI_VENDOR_ID_SPECIALIX,
PCI_DEVICE_ID_SPECIALIX_IO8,
pdev);
if (!pdev) break;
PCI_DEVICE_ID_SPECIALIX_IO8,
pdev);
if (!pdev) break;
@@
-2496,6
+2491,9
@@
static int __init specialix_init(void)
if (!sx_probe(&sx_board[i]))
found ++;
}
if (!sx_probe(&sx_board[i]))
found ++;
}
+ /* May exit pci_get sequence early with lots of boards */
+ if (pdev != NULL)
+ pci_dev_put(pdev);
}
#endif
}
#endif