Update of /cvsroot/linux-mips/linux/drivers/char
In directory usw-pr-cvs1:/tmp/cvs-serv13243/drivers/char
Modified Files:
sb1250_duart.c
Log Message:
Swarm IDE support.
Index: sb1250_duart.c
===================================================================
RCS file: /cvsroot/linux-mips/linux/drivers/char/sb1250_duart.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- sb1250_duart.c 2001/12/02 19:05:31 1.3
+++ sb1250_duart.c 2002/01/28 20:48:47 1.4
@@ -58,34 +58,6 @@
#define DEFAULT_CFLAGS (CS8 | B115200)
-#ifdef FORCED_INPUT
-static struct timer_list inp_timer;
-static unsigned char inp_cmds[] =
-"";
-"foo\n";
-"export LD_DEBUG=all\nfoo\n";
-
-static unsigned char *next_inp;
-struct tty_struct *stuff_char_tty;
-
-
-static void stuff_char(unsigned long arg)
-{
- int was_newline = 0;
- tty_insert_flip_char(stuff_char_tty, *next_inp, 0);
- tty_flip_buffer_push(stuff_char_tty);
- if (*next_inp == '\n') {
- was_newline = 1;
- }
- next_inp++;
- del_timer(&inp_timer);
- if (*next_inp) {
- inp_timer.expires = jiffies + (was_newline?20:2);
- add_timer(&inp_timer);
- }
-}
-#endif
-
/*
Still not sure what the termios structures set up here are for,
but we have to supply pointers to them to register the tty driver
@@ -222,7 +194,8 @@
us->outp_count--;
} while ((get_status_reg(line) & M_DUART_TX_RDY) && us->outp_count);
- if ((us->flags & SD_WRITE_WAKE) && (us->outp_count < (CONFIG_SB1250_DUART_OUTPUT_BUF_SIZE/2))) {
+ if (us->open && (us->flags & SD_WRITE_WAKE) &&
+ (us->outp_count < (CONFIG_SB1250_DUART_OUTPUT_BUF_SIZE/2))) {
/* We told the discipline at one point that we had no space, so it went
to sleep. Wake it up when we hit half empty */
wake_up_interruptible(&us->tty->write_wait);
@@ -370,10 +343,10 @@
duart_mask_ints(line, M_DUART_IMR_TX);
spin_lock_irqsave(&us->outp_lock, flags);
us->outp_head = us->outp_tail = us->outp_count = 0;
- spin_unlock_irqrestore(&us->outp_lock, flags);
if (us->flags & SD_WRITE_WAKE) {
wake_up_interruptible(&us->tty->write_wait);
}
+ spin_unlock_irqrestore(&us->outp_lock, flags);
}
@@ -683,7 +656,7 @@
sb1250_duart_driver.table = duart_table;
sb1250_duart_driver.termios = duart_termios;
sb1250_duart_driver.termios_locked = duart_termios_locked;
-
+
sb1250_duart_driver.open = duart_open;
sb1250_duart_driver.close = duart_close;
sb1250_duart_driver.write = duart_write;
@@ -696,16 +669,22 @@
sb1250_duart_driver.stop = duart_stop;
sb1250_duart_driver.start = duart_start;
sb1250_duart_driver.wait_until_sent = duart_wait_until_sent;
-
- sb1250_duart_callout_driver = sb1250_duart_driver;
+
+ sb1250_duart_callout_driver = sb1250_duart_driver;
+#ifdef CONFIG_DEVFS_FS
sb1250_duart_callout_driver.name = "cua/%d";
+#else
+ sb1250_duart_callout_driver.name = "cua";
+#endif
sb1250_duart_callout_driver.major = TTYAUX_MAJOR;
- sb1250_duart_callout_driver.subtype = SERIAL_TYPE_CALLOUT;
-
+ sb1250_duart_callout_driver.subtype = SERIAL_TYPE_CALLOUT;
+
+ duart_mask_ints(0, 0xf);
if (request_irq(K_INT_UART_0, duart_int, 0, "uart0", &uart_states[0])) {
panic("Couldn't get uart0 interrupt line");
}
#ifndef CONFIG_SIBYTE_SB1250_DUART_NO_PORT_1
+ duart_mask_ints(1, 0xf);
if (request_irq(K_INT_UART_1, duart_int, 0, "uart1", &uart_states[1])) {
panic("Couldn't get uart1 interrupt line");
}
@@ -731,7 +710,7 @@
{
unsigned long flags;
int ret;
-
+
save_flags(flags);
cli();
ret = tty_unregister_driver(&sb1250_duart_callout_driver);
@@ -744,11 +723,11 @@
}
free_irq(K_INT_UART_0, &uart_states[0]);
free_irq(K_INT_UART_1, &uart_states[1]);
-
+
/* mask lines in the scd */
disable_irq(K_INT_UART_0);
disable_irq(K_INT_UART_1);
-
+
restore_flags(flags);
}
@@ -809,25 +788,18 @@
}
static struct console sb1250_ser_cons = {
- "ttyS",
- ser_console_write, /* write */
- NULL, /* read */
- ser_console_device, /* device */
- ser_console_wait_key, /* wait_key */
- NULL, /* unblank */
- ser_console_setup, /* setup */
- CON_PRINTBUFFER | CON_ENABLED,
- -1,
- 0,
- NULL
+ name: "ttyS",
+ write: ser_console_write,
+ device: ser_console_device,
+ wait_key: ser_console_wait_key,
+ setup: ser_console_setup,
+ flags: CON_PRINTBUFFER,
+ index: -1,
};
void __init sb1250_serial_console_init(void)
{
register_console(&sb1250_ser_cons);
-
- /*JDCXXX - this should be called from console_setup...but isn't. Why? */
- ser_console_setup(NULL, NULL);
}
#endif /* CONFIG_SERIAL_CONSOLE */
|