patch-2.3.99-pre1 linux/drivers/char/serial.c
Next file: linux/drivers/char/sx.c
Previous file: linux/drivers/char/radio-gemtek.c
Back to the patch index
Back to the overall index
- Lines: 66
- Date:
Tue Mar 14 17:54:42 2000
- Orig file:
v2.3.51/linux/drivers/char/serial.c
- Orig date:
Sat Feb 26 22:31:45 2000
diff -u --recursive --new-file v2.3.51/linux/drivers/char/serial.c linux/drivers/char/serial.c
@@ -1648,8 +1648,13 @@
serial_outp(info, UART_FCR, fcr); /* set fcr */
serial_outp(info, UART_LCR, cval); /* reset DLAB */
info->LCR = cval; /* Save LCR */
- if (info->state->type != PORT_16750)
+ if (info->state->type != PORT_16750) {
+ if (fcr & UART_FCR_ENABLE_FIFO) {
+ /* emulated UARTs (Lucent Venus 167x) need two steps */
+ serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
+ }
serial_outp(info, UART_FCR, fcr); /* set fcr */
+ }
restore_flags(flags);
}
@@ -4515,9 +4520,24 @@
}
/*
- * register_serial and unregister_serial allows for serial ports to be
+ * register_serial and unregister_serial allows for 16x50 serial ports to be
* configured at run-time, to support PCMCIA modems.
*/
+
+/**
+ * register_serial - configure a 16x50 serial port at runtime
+ * @req: request structure
+ *
+ * Configure the serial port specified by the request. If the
+ * port exists and is in use an error is returned. If the port
+ * is not currently in the table it is added.
+ *
+ * The port is then probed and if neccessary the IRQ is autodetected
+ * If this fails an error is returned.
+ *
+ * On success the port is ready to use and the line number is returned.
+ */
+
int register_serial(struct serial_struct *req)
{
int i;
@@ -4575,7 +4595,7 @@
if ((state->flags & ASYNC_AUTO_IRQ) && CONFIGURED_SERIAL_PORT(state))
state->irq = detect_uart_irq(state);
- printk(KERN_INFO "ttyS%02d at %s 0x%04lx (irq = %d) is a %s\n",
+ printk(KERN_INFO "ttyS%02d at %s 0x%04lx (irq = %d) is a %s\n",
state->line + SERIAL_DEV_OFFSET,
state->iomem_base ? "iomem" : "port",
state->iomem_base ? (unsigned long)state->iomem_base :
@@ -4587,6 +4607,15 @@
callout_driver.minor_start + state->line);
return state->line + SERIAL_DEV_OFFSET;
}
+
+/**
+ * unregister_serial - deconfigure a 16x50 serial port
+ * @line: line to deconfigure
+ *
+ * The port specified is deconfigured and its resources are freed. Any
+ * user of the port is disconnected as if carrier was dropped. Line is
+ * the port number returned by register_serial.
+ */
void unregister_serial(int line)
{
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)