patch-2.4.19 linux-2.4.19/drivers/char/vme_scc.c
Next file: linux-2.4.19/drivers/char/w83877f_wdt.c
Previous file: linux-2.4.19/drivers/char/tty_io.c
Back to the patch index
Back to the overall index
- Lines: 191
- Date:
Fri Aug 2 17:39:43 2002
- Orig file:
linux-2.4.18/drivers/char/vme_scc.c
- Orig date:
Sun Sep 16 21:22:50 2001
diff -urN linux-2.4.18/drivers/char/vme_scc.c linux-2.4.19/drivers/char/vme_scc.c
@@ -131,7 +131,11 @@
memset(&scc_driver, 0, sizeof(scc_driver));
scc_driver.magic = TTY_DRIVER_MAGIC;
scc_driver.driver_name = "scc";
+#ifdef CONFIG_DEVFS_FS
+ scc_driver.name = "tts/%d";
+#else
scc_driver.name = "ttyS";
+#endif
scc_driver.major = TTY_MAJOR;
scc_driver.minor_start = SCC_MINOR_BASE;
scc_driver.num = 2;
@@ -164,7 +168,11 @@
scc_driver.break_ctl = scc_break_ctl;
scc_callout_driver = scc_driver;
+#ifdef CONFIG_DEVFS_FS
+ scc_callout_driver.name = "cua/%d";
+#else
scc_callout_driver.name = "cua";
+#endif
scc_callout_driver.major = TTYAUX_MAJOR;
scc_callout_driver.subtype = SERIAL_TYPE_CALLOUT;
@@ -214,7 +222,7 @@
{
struct scc_port *port;
- printk("SCC: MVME147 Serial Driver\n");
+ printk(KERN_INFO "SCC: MVME147 Serial Driver\n");
/* Init channel A */
port = &scc_ports[0];
port->channel = CHANNEL_A;
@@ -284,7 +292,7 @@
if (!(mvme16x_config & MVME16x_CONFIG_GOT_SCCA))
return (-ENODEV);
- printk("SCC: MVME162 Serial Driver\n");
+ printk(KERN_INFO "SCC: MVME162 Serial Driver\n");
/* Init channel A */
port = &scc_ports[0];
port->channel = CHANNEL_A;
@@ -352,7 +360,7 @@
{
struct scc_port *port;
- printk("SCC: BVME6000 Serial Driver\n");
+ printk(KERN_INFO "SCC: BVME6000 Serial Driver\n");
/* Init channel A */
port = &scc_ports[0];
port->channel = CHANNEL_A;
@@ -449,7 +457,7 @@
ch = SCCread_NB(RX_DATA_REG);
if (!tty) {
- printk ("scc_rx_int with NULL tty!\n");
+ printk(KERN_WARNING "scc_rx_int with NULL tty!\n");
SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
return;
}
@@ -487,7 +495,7 @@
SCC_ACCESS_INIT(port);
if (!tty) {
- printk ("scc_spcond_int with NULL tty!\n");
+ printk(KERN_WARNING "scc_spcond_int with NULL tty!\n");
SCCwrite(COMMAND_REG, CR_ERROR_RESET);
SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
return;
@@ -533,7 +541,7 @@
SCC_ACCESS_INIT(port);
if (!port->gs.tty) {
- printk ("scc_tx_int with NULL tty!\n");
+ printk(KERN_WARNING "scc_tx_int with NULL tty!\n");
SCCmod (INT_AND_DMA_REG, ~IDR_TX_INT_ENAB, 0);
SCCwrite(COMMAND_REG, CR_TX_PENDING_RESET);
SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
@@ -719,7 +727,7 @@
else if ((MACH_IS_MVME16x && (baud < 50 || baud > 38400)) ||
(MACH_IS_MVME147 && (baud < 50 || baud > 19200)) ||
(MACH_IS_BVME6000 &&(baud < 50 || baud > 76800))) {
- printk("SCC: Bad speed requested, %d\n", baud);
+ printk(KERN_NOTICE "SCC: Bad speed requested, %d\n", baud);
return 0;
}
@@ -731,12 +739,10 @@
#ifdef CONFIG_MVME147_SCC
if (MACH_IS_MVME147)
brgval = (M147_SCC_PCLK + baud/2) / (16 * 2 * baud) - 2;
- else
#endif
#ifdef CONFIG_MVME162_SCC
if (MACH_IS_MVME16x)
brgval = (MVME_SCC_PCLK + baud/2) / (16 * 2 * baud) - 2;
- else
#endif
#ifdef CONFIG_BVME6000_SCC
if (MACH_IS_BVME6000)
@@ -783,6 +789,15 @@
}
+/* Comment taken from sx.c (2.4.0):
+ I haven't the foggiest why the decrement use count has to happen
+ here. The whole linux serial drivers stuff needs to be redesigned.
+ My guess is that this is a hack to minimize the impact of a bug
+ elsewhere. Thinking about it some more. (try it sometime) Try
+ running minicom on a serial port that is driven by a modularized
+ driver. Have the modem hangup. Then remove the driver module. Then
+ exit minicom. I expect an "oops". -- REW */
+
static void scc_hungup(void *ptr)
{
scc_disable_tx_interrupts(ptr);
@@ -795,6 +810,7 @@
{
scc_disable_tx_interrupts(ptr);
scc_disable_rx_interrupts(ptr);
+ MOD_DEC_USE_COUNT;
}
@@ -809,6 +825,7 @@
SCC_ACCESS_INIT(port);
save_flags(flags);
+ cli();
t = SCCread(TX_CTRL_REG);
if (dtr >= 0) t = dtr? (t | TCR_DTR): (t & ~TCR_DTR);
if (rts >= 0) t = rts? (t | TCR_RTS): (t & ~TCR_RTS);
@@ -933,7 +950,7 @@
if (port->gs.count == 1) {
MOD_INC_USE_COUNT;
}
- retval = block_til_ready(port, filp);
+ retval = gs_block_til_ready(port, filp);
if (retval) {
MOD_DEC_USE_COUNT;
@@ -1065,41 +1082,6 @@
restore_flags(flags);
}
-
-static int scc_console_wait_key(struct console *co)
-{
- unsigned long flags;
- volatile char *p = NULL;
- int c;
-
-#ifdef CONFIG_MVME147_SCC
- if (MACH_IS_MVME147)
- p = (volatile char *)M147_SCC_A_ADDR;
-#endif
-#ifdef CONFIG_MVME162_SCC
- if (MACH_IS_MVME16x)
- p = (volatile char *)MVME_SCC_A_ADDR;
-#endif
-#ifdef CONFIG_BVME6000_SCC
- if (MACH_IS_BVME6000)
- p = (volatile char *)BVME_SCC_A_ADDR;
-#endif
-
- save_flags(flags);
- cli();
-
- /* wait for rx buf filled */
- while ((*p & 0x01) == 0)
- ;
-
- *p = 8;
- scc_delay();
- c = *p;
- restore_flags(flags);
- return c;
-}
-
-
static kdev_t scc_console_device(struct console *c)
{
return MKDEV(TTY_MAJOR, SCC_MINOR_BASE + c->index);
@@ -1116,7 +1098,6 @@
name: "ttyS",
write: scc_console_write,
device: scc_console_device,
- wait_key: scc_console_wait_key,
setup: scc_console_setup,
flags: CON_PRINTBUFFER,
index: -1,
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)