Re: Fw: [Patch] Some updates to serial-5.05

Roman Kurakin
2001-11-14T17:08:35Z

Hi,

Could you also check a letter with subject "Serial.c Bug" that was
sent today.

Thanks.

Best regards,
Roman Kurakin

Stuart MacDonald wrote:

>From: "Stuart MacDonald" <stuartm@connecttech.com>
>
>>Patches for are for serial-5.05. Descriptions are listed in order of
>>application.
>>
>
>Same patches, attached inline to avoid OE mangling.
>
>Apologies,
>..Stu
>
>>Tested with 2.2.0 - 2.2.20 and 2.4.0 - 2.4.14 (except 2.4.11).
>>
>>patch-kernel: Adds 485 ioctls to the kernel proper
>>
>>patch-serial-485: Adds 485 line mode switiching functionality to the
>>serial driver. Note: this is not 485 protocol-level support, but
>>electrical-level support.
>>
>>patch-serial-16850: Adds detection of the XR16C2850.
>>
>>patch-serial-fctr: Fixes a bug where serial-5.05 wasn't preserving an
>>important bit in the fctr register when setting fifo triggers.
>>
>>patch-serial-devfs: Driver now reports the /dev entries in a manner
>>consistent with how they are created. Yes, we have had customers who
>>were thrown off by the discrepancy between ttyS00 and ttyS0.
>>
>>patch-serial-24x: serial-5.05 now finds our MULTISERIAL class boards.
>>Also adds serial_compat.h for all 2.4.x kernels I've tested it with.
>>This is necessary to compile in 2.4.x kernels.
>>
>>patch-serial-22x: Fixes serial_compat.h to work correctly. Pci #ifdefs
>>used to be added based on whether the vendor id was defined or not.
>>This doesn't work when a single device identifier is missing, but the
>>vendor id exists. All pci defines are now checked one at a time. Yes
>>this makes the source bigger and the compile longer, but it is the
>>correct general way.
>>
>>patch-serial-init: Fixes the serial driver to not have the multiple
>>rs_init() problem on the affected kernels. At the moment, this is
>>2.2.18, 19 and 20.
>>
>
>--- kernel ---
>
>diff -ru linux-2.2.14/include/asm-i386/ioctls.h
>linux-2214/include/asm-i386/ioctls.h
>--- linux-2.2.14/include/asm-i386/ioctls.h Fri Jul 24 14:10:16 1998
>+++ linux-2214/include/asm-i386/ioctls.h Thu Jul 13 12:25:52 2000
>@@ -68,6 +68,14 @@
> #define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */
> #define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
>
>+#define TIOCSER485SET 0x54A0 /* Set the 485 line mode */
>+#define TIOCSER485GET 0x54A1 /* Get the 485 line mode */
>+
>+#define TIOCSER485NOT_INITED 0
>+#define TIOCSER485FULLDUPLEX 1
>+#define TIOCSER485HALFDUPLEX 2
>+#define TIOCSER485SLAVEMULTIPLEX 3
>+
> /* Used for packet mode */
> #define TIOCPKT_DATA 0
> #define TIOCPKT_FLUSHREAD 1
>
>--- 485 ---
>
>diff -ru serial-5.05/serial.c serial-5.05-485/serial.c
>--- serial-5.05/serial.c Thu Sep 14 12:40:26 2000
>+++ serial-5.05-485/serial.c Wed Jun 27 19:18:37 2001
>@@ -1405,6 +1405,9 @@
> */
> mod_timer(&serial_timer, jiffies + 2*HZ/100);
>
>+ if (state->lmode_fn)
>+ (state->lmode_fn)(state, TIOCSER485SET, NULL);
>+
> /*
> * Set up the tty->alt_speed kludge
> */
>@@ -2511,6 +2514,7 @@
> unsigned int cmd, unsigned long arg)
> {
> struct async_struct * info = (struct async_struct *)tty->driver_data;
>+ struct serial_state * state = info->state;
> struct async_icount cprev, cnow; /* kernel counter temps */
> struct serial_icounter_struct icount;
> unsigned long flags;
>@@ -2568,6 +2572,13 @@
> (tmp ? CLOCAL : 0));
> return 0;
> #endif
>+ case TIOCSER485GET:
>+ case TIOCSER485SET:
>+ if (state->lmode_fn)
>+ return (state->lmode_fn)(state, cmd,
>+ (unsigned int *) arg);
>+ else
>+ return -EINVAL;
> case TIOCMGET:
> return get_modem_info(info, (unsigned int *) arg);
> case TIOCMBIS:
>@@ -3957,6 +3968,7 @@
> if (line < 0)
> break;
> rs_table[line].baud_base = base_baud;
>+ rs_table[line].lmode_fn = board->lmode_fn;
> }
> }
> #endif /* ENABLE_SERIAL_PCI || ENABLE_SERIAL_PNP */
>@@ -4176,6 +4188,121 @@
> return 0;
> }
>
>+/*
>+ * cti485 does the work. _2 and _4 do checking for the hybrid boards.
>+ * They rely on the fact that the ports will start at a 256 aligned
>+ * address to calculate which port on the board it is.
>+ */
>+int pci_cti485(struct serial_state *state, int ioctl, unsigned int *value)
>{
>+ struct async_struct *info;
>+ unsigned char port_offset;
>+ unsigned char portmask;
>+ unsigned char txctl_offset;
>+ unsigned char rxctl_offset;
>+ unsigned char differ_offset;
>+ unsigned char bits;
>+ unsigned long flags;
>+
>+ if (ioctl == TIOCSER485GET)
>+ return put_user(state->lmode, value);
>+
>+ info = state->info;
>+ port_offset = state->port % 0x100;
>+ portmask = 1 << port_offset / 0x08;
>+ txctl_offset = 0x6c - port_offset;
>+ rxctl_offset = 0x70 - port_offset;
>+
>+ save_flags(flags); cli();
>+ if (value)
>+ state->lmode = *value;
>+ else if (state->lmode == TIOCSER485NOT_INITED) {
>+ differ_offset = 0x74 - port_offset;
>+ bits = serial_in(info, differ_offset);
>+ switch (bits) {
>+ case 0x03:
>+ state->lmode = TIOCSER485SLAVEMULTIPLEX;
>+ break;
>+ default:
>+ state->lmode = TIOCSER485FULLDUPLEX;
>+ break;
>+ }
>+ }
>+ bits = serial_in(info, txctl_offset);
>+ switch (state->lmode) {
>+ default:
>+ case TIOCSER485FULLDUPLEX:
>+ bits &= ~portmask;
>+ serial_out(info, txctl_offset, bits);
>+
>+ bits = serial_in(info, rxctl_offset);
>+ bits |= portmask;
>+ serial_out(info, rxctl_offset, bits);
>+
>+ serial_out(info, UART_LCR, 0xbf);
>+ bits = serial_in(info, UART_FCTR);
>+ bits &= ~UART_FCTR_TX_INT;
>+ serial_out(info, UART_FCTR, bits);
>+ serial_out(info, UART_LCR, 0);
>+
>+ restore_flags(flags);
>+ return put_user(1, value);
>+ case TIOCSER485HALFDUPLEX:
>+ bits |= portmask;
>+ serial_out(info, txctl_offset, bits);
>+
>+ bits = serial_in(info, rxctl_offset);
>+ bits &= ~portmask;
>+ serial_out(info, rxctl_offset, bits);
>+
>+ serial_out(info, UART_LCR, 0xbf);
>+ bits = serial_in(info, UART_FCTR);
>+ bits |= UART_FCTR_TX_INT;
>+ serial_out(info, UART_FCTR, bits);
>+ serial_out(info, UART_LCR, 0);
>+
>+ restore_flags(flags);
>+ return put_user(1, value);
>+ case TIOCSER485SLAVEMULTIPLEX:
>+ bits |= portmask;
>+ serial_out(info, txctl_offset, bits);
>+
>+ bits = serial_in(info, rxctl_offset);
>+ bits |= portmask;
>+ serial_out(info, rxctl_offset, bits);
>+
>+ serial_out(info, UART_LCR, 0xbf);
>+ bits = serial_in(info, UART_FCTR);
>+ bits |= UART_FCTR_TX_INT;
>+ serial_out(info, UART_FCTR, bits);
>+ serial_out(info, UART_LCR, 0);
>+
>+ restore_flags(flags);
>+ return put_user(1, value);
>+ }
>+
>+ restore_flags(flags);
>+ return -EINVAL;
>+}
>+
>+int pci_cti485_4(struct serial_state *state, int ioctl, unsigned int
>*value) {
>+ int port = state->port;
>+ int board_num = (port % 0x100) / 0x08;
>+
>+ if (board_num < 4)
>+ return -ENOSYS;
>+
>+ return pci_cti485(state, ioctl, value);
>+}
>+
>+int pci_cti485_2(struct serial_state *state, int ioctl, unsigned int
>*value) {
>+ int port = state->port;
>+ int board_num = (port % 0x100) / 0x08;
>+
>+ if (board_num < 2)
>+ return -ENOSYS;
>+
>+ return pci_cti485(state, ioctl, value);
>+}
>
> /*
> * This is the configuration table for all of the PCI serial boards
>@@ -4217,35 +4344,43 @@
> { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
> PCI_SUBVENDOR_ID_CONNECT_TECH,
> PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485,
>- SPCI_FL_BASE1, 8, 921600 },
>+ SPCI_FL_BASE1, 8, 921600,
>+ 0, 0, NULL, 0, pci_cti485 },
> { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
> PCI_SUBVENDOR_ID_CONNECT_TECH,
> PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4,
>- SPCI_FL_BASE1, 8, 921600 },
>+ SPCI_FL_BASE1, 8, 921600,
>+ 0, 0, NULL, 0, pci_cti485_4 },
> { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
> PCI_SUBVENDOR_ID_CONNECT_TECH,
> PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485,
>- SPCI_FL_BASE1, 4, 921600 },
>+ SPCI_FL_BASE1, 4, 921600,
>+ 0, 0, NULL, 0, pci_cti485 },
> { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
> PCI_SUBVENDOR_ID_CONNECT_TECH,
> PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2,
>- SPCI_FL_BASE1, 4, 921600 },
>+ SPCI_FL_BASE1, 4, 921600,
>+ 0, 0, NULL, 0, pci_cti485_2 },
> { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
> PCI_SUBVENDOR_ID_CONNECT_TECH,
> PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485,
>- SPCI_FL_BASE1, 2, 921600 },
>+ SPCI_FL_BASE1, 2, 921600,
>+ 0, 0, NULL, 0, pci_cti485 },
> { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
> PCI_SUBVENDOR_ID_CONNECT_TECH,
> PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6,
>- SPCI_FL_BASE1, 8, 921600 },
>+ SPCI_FL_BASE1, 8, 921600,
>+ 0, 0, NULL, 0, pci_cti485_2 },
> { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
> PCI_SUBVENDOR_ID_CONNECT_TECH,
> PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1,
>- SPCI_FL_BASE1, 8, 921600 },
>+ SPCI_FL_BASE1, 8, 921600,
>+ 0, 0, NULL, 0, pci_cti485 },
> { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
> PCI_SUBVENDOR_ID_CONNECT_TECH,
> PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1,
>- SPCI_FL_BASE1, 4, 921600 },
>+ SPCI_FL_BASE1, 4, 921600,
>+ 0, 0, NULL, 0, pci_cti485 },
> { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,
> PCI_ANY_ID, PCI_ANY_ID,
> SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 1, 115200 },
>diff -ru serial-5.05/serialP.h serial-5.05-485/serialP.h
>--- serial-5.05/serialP.h Tue Jul 25 23:39:02 2000
>+++ serial-5.05-485/serialP.h Wed Jun 27 19:10:27 2001
>@@ -51,6 +51,8 @@
> struct termios normal_termios;
> struct termios callout_termios;
> int io_type;
>+ int (*lmode_fn)(struct serial_state *state, int ioctl, unsigned int
>*value);
>+ int lmode;
> struct async_struct *info;
> };
>
>@@ -153,6 +155,7 @@
> int (*init_fn)(struct pci_dev *dev, struct pci_board *board,
> int enable);
> int first_uart_offset;
>+ int (*lmode_fn)(struct serial_state *state, int ioctl, unsigned int
>*value);
> };
>
> struct pci_board_inst {
>
>--- 16580 ---
>
>diff -ru serial-5.05-485/serial.c serial-5.05-16850/serial.c
>--- serial-5.05-485/serial.c Wed Jun 27 19:18:37 2001
>+++ serial-5.05-16850/serial.c Wed Jun 27 19:22:36 2001
>@@ -3548,8 +3548,12 @@
> * We check for a XR16C850 by setting DLL and DLM to 0, and
> * then reading back DLL and DLM. If DLM reads back 0x10,
> * then the UART is a XR16C850 and the DLL contains the chip
>- * revision. If DLM reads back 0x14, then the UART is a
>- * XR16C854.
>+ * revision. If DLM reads back 0x12, then the UART is a
>+ * XR16C2850. If DLM reads back 0x14, then the UART is a
>+ * XR16C854 or XR16C864. All are functionally equivalent; in
>+ * terms of this driver (some are dual or quad uart chips, but
>+ * this driver addresses them on a per port basis anyway, so
>+ * that only matters to the hardware designers).
> *
> */
> serial_outp(info, UART_LCR, UART_LCR_DLAB);
>@@ -3558,7 +3562,7 @@
> state->revision = serial_inp(info, UART_DLL);
> scratch = serial_inp(info, UART_DLM);
> serial_outp(info, UART_LCR, 0);
>- if (scratch == 0x10 || scratch == 0x14) {
>+ if (scratch == 0x10 || scratch == 0x12 || scratch == 0x14) {
> state->type = PORT_16850;
> return;
> }
>
>--- fctr ---
>
>diff -ru serial-5.05-16850/serial.c serial-5.05-fctr/serial.c
>--- serial-5.05-16850/serial.c Tue Oct 23 17:24:58 2001
>+++ serial-5.05-fctr/serial.c Tue Oct 23 17:41:20 2001
>@@ -1230,11 +1230,17 @@
> * For a XR16C850, we need to set the trigger levels
> */
> if (state->type == PORT_16850) {
>- serial_outp(info, UART_FCTR, UART_FCTR_TRGD |
>- UART_FCTR_RX);
>+ unsigned char fctr;
>+
>+ fctr = serial_inp(info, UART_FCTR);
>+ fctr |= UART_FCTR_TRGD;
>+
>+ fctr &= ~UART_FCTR_TX;
>+ serial_outp(info, UART_FCTR, fctr);
> serial_outp(info, UART_TRG, UART_TRG_96);
>- serial_outp(info, UART_FCTR, UART_FCTR_TRGD |
>- UART_FCTR_TX);
>+
>+ fctr |= UART_FCTR_TX;
>+ serial_outp(info, UART_FCTR, fctr);
> serial_outp(info, UART_TRG, UART_TRG_96);
> }
> serial_outp(info, UART_LCR, 0);
>
>--- devfs ---
>
>diff -ru serial-5.05-fctr/serial.c serial-5.05-devfs/serial.c
>--- serial-5.05-fctr/serial.c Tue Oct 23 17:41:20 2001
>+++ serial-5.05-devfs/serial.c Tue Oct 23 17:44:23 2001
>@@ -5397,7 +5397,7 @@
> && (state->flags & ASYNC_AUTO_IRQ)
> && (state->port != 0))
> state->irq = detect_uart_irq(state);
>- printk(KERN_INFO "ttyS%02d%s at 0x%04lx (irq = %d) is a %s\n",
>+ printk(KERN_INFO "ttyS%d%s at 0x%04lx (irq = %d) is a %s\n",
> state->line + SERIAL_DEV_OFFSET,
> (state->flags & ASYNC_FOURPORT) ? " FourPort" : "",
> state->port, state->irq,
>@@ -5504,7 +5504,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%d 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 :
>
>--- 24x ---
>
>diff -ru serial-5.05-devfs/serial.c serial-5.05-24x/serial.c
>--- serial-5.05-devfs/serial.c Tue Oct 23 17:44:23 2001
>+++ serial-5.05-24x/serial.c Tue Oct 23 17:49:08 2001
>@@ -216,7 +216,7 @@
> * All of the compatibilty code so we can compile serial.c against
> * older kernels is hidden in serial_compat.h
> */
>-#if defined(LOCAL_HEADERS) || (LINUX_VERSION_CODE < 0x020317) /* 2.3.23 */
>+#if defined(LOCAL_HEADERS) || (LINUX_VERSION_CODE <= 0x02040E) /* 2.4.14 */
> #include "serial_compat.h"
> #endif
>
>@@ -4800,6 +4800,8 @@
> static struct pci_device_id serial_pci_tbl[] __devinitdata = {
> { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
> PCI_CLASS_COMMUNICATION_SERIAL << 8, 0xffff00, },
>+ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
>+ PCI_CLASS_COMMUNICATION_MULTISERIAL << 8, 0xffff00, },
> { 0, }
> };
>
>diff -ru serial-5.05-devfs/serial_compat.h serial-5.05-24x/serial_compat.h
>--- serial-5.05-devfs/serial_compat.h Thu Sep 14 11:16:06 2000
>+++ serial-5.05-24x/serial_compat.h Tue Oct 23 17:50:59 2001
>@@ -276,6 +276,10 @@
> * Some PCI identifiers which might not be in pci.h
> */
>
>+#ifndef PCI_CLASS_COMMUNICATION_MULTISERIAL
>+#define PCI_CLASS_COMMUNICATION_MULTISERIAL 0x0702
>+#endif
>+
> #ifndef PCI_VENDOR_ID_V3
> #define PCI_VENDOR_ID_V3 0x11b0
> #define PCI_DEVICE_ID_V3_V960 0x0001
>
>--- 22x ---
>
>diff -ru serial-5.05-24x/serial_compat.h serial-5.05-22x/serial_compat.h
>--- serial-5.05-24x/serial_compat.h Wed Oct 24 21:37:56 2001
>+++ serial-5.05-22x/serial_compat.h Wed Oct 24 21:46:56 2001
>@@ -279,212 +279,360 @@
> #ifndef PCI_CLASS_COMMUNICATION_MULTISERIAL
> #define PCI_CLASS_COMMUNICATION_MULTISERIAL 0x0702
> #endif
>-
> #ifndef PCI_VENDOR_ID_V3
> #define PCI_VENDOR_ID_V3 0x11b0
>+#endif
>+#ifndef PCI_DEVICE_ID_V3_V960
> #define PCI_DEVICE_ID_V3_V960 0x0001
>+#endif
>+#ifndef PCI_DEVICE_ID_V3_V350
> #define PCI_DEVICE_ID_V3_V350 0x0001
>+#endif
>+#ifndef PCI_DEVICE_ID_V3_V961
> #define PCI_DEVICE_ID_V3_V961 0x0002
>+#endif
>+#ifndef PCI_DEVICE_ID_V3_V351
> #define PCI_DEVICE_ID_V3_V351 0x0002
> #endif
>-
> #ifndef PCI_VENDOR_ID_SEALEVEL
> #define PCI_VENDOR_ID_SEALEVEL 0x135e
>+#endif
>+#ifndef PCI_DEVICE_ID_SEALEVEL_U530
> #define PCI_DEVICE_ID_SEALEVEL_U530 0x7101
>+#endif
>+#ifndef PCI_DEVICE_ID_SEALEVEL_UCOMM2
> #define PCI_DEVICE_ID_SEALEVEL_UCOMM2 0x7201
>+#endif
>+#ifndef PCI_DEVICE_ID_SEALEVEL_UCOMM422
> #define PCI_DEVICE_ID_SEALEVEL_UCOMM422 0x7402
>+#endif
>+#ifndef PCI_DEVICE_ID_SEALEVEL_UCOMM232
> #define PCI_DEVICE_ID_SEALEVEL_UCOMM232 0x7202
>+#endif
>+#ifndef PCI_DEVICE_ID_SEALEVEL_COMM4
> #define PCI_DEVICE_ID_SEALEVEL_COMM4 0x7401
>+#endif
>+#ifndef PCI_DEVICE_ID_SEALEVEL_COMM8
> #define PCI_DEVICE_ID_SEALEVEL_COMM8 0x7801
> #endif
>-
> #ifndef PCI_SUBVENDOR_ID_CONNECT_TECH
> #define PCI_SUBVENDOR_ID_CONNECT_TECH 0x12c4
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232 0x0001
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232 0x0002
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232 0x0003
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485 0x0004
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4 0x0005
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485 0x0006
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2 0x0007
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485 0x0008
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6 0x0009
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1 0x000A
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1
> #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1 0x000B
> #endif
>-
> #ifndef PCI_SUBVENDOR_ID_KEYSPAN
> #define PCI_SUBVENDOR_ID_KEYSPAN 0x11a9
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_KEYSPAN_SX2
> #define PCI_SUBDEVICE_ID_KEYSPAN_SX2 0x5334
> #endif
>-
> #ifndef PCI_DEVICE_ID_PLX_GTEK_SERIAL2
> #define PCI_DEVICE_ID_PLX_GTEK_SERIAL2 0xa001
> #endif
>-
> #ifndef PCI_DEVICE_ID_PLX_SPCOM200
> #define PCI_DEVICE_ID_PLX_SPCOM200 0x1103
> #endif
>-
> #ifndef PCI_DEVICE_ID_PLX_SPCOM800
> #define PCI_DEVICE_ID_PLX_SPCOM800 0x1076
> #endif
>-
> #ifndef PCI_VENDOR_ID_PLX_ROMULUS
> #define PCI_VENDOR_ID_PLX_ROMULUS 0x106a
> #endif
>-
> #ifndef PCI_DEVICE_ID_PLX_SPCOM800
> #define PCI_DEVICE_ID_PLX_SPCOM800 0x1076
> #endif
>-
> #ifndef PCI_DEVICE_ID_PLX_1077
> #define PCI_DEVICE_ID_PLX_1077 0x1077
> #endif
>-
> #ifndef PCI_VENDOR_ID_TITAN
> #define PCI_VENDOR_ID_TITAN 0x14D2
>+#endif
>+#ifndef PCI_DEVICE_ID_TITAN_100
> #define PCI_DEVICE_ID_TITAN_100 0xA001
>+#endif
>+#ifndef PCI_DEVICE_ID_TITAN_200
> #define PCI_DEVICE_ID_TITAN_200 0xA005
>+#endif
>+#ifndef PCI_DEVICE_ID_TITAN_400
> #define PCI_DEVICE_ID_TITAN_400 0xA003
>+#endif
>+#ifndef PCI_DEVICE_ID_TITAN_800B
> #define PCI_DEVICE_ID_TITAN_800B 0xA004
> #endif
>-
> #ifndef PCI_VENDOR_ID_PANACOM
> #define PCI_VENDOR_ID_PANACOM 0x14d4
>+#endif
>+#ifndef PCI_DEVICE_ID_PANACOM_QUADMODEM
> #define PCI_DEVICE_ID_PANACOM_QUADMODEM 0x0400
>+#endif
>+#ifndef PCI_DEVICE_ID_PANACOM_DUALMODEM
> #define PCI_DEVICE_ID_PANACOM_DUALMODEM 0x0402
> #endif
>-
> #ifndef PCI_SUBVENDOR_ID_CHASE_PCIFAST
> #define PCI_SUBVENDOR_ID_CHASE_PCIFAST 0x12E0
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CHASE_PCIFAST4
> #define PCI_SUBDEVICE_ID_CHASE_PCIFAST4 0x0031
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CHASE_PCIFAST8
> #define PCI_SUBDEVICE_ID_CHASE_PCIFAST8 0x0021
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CHASE_PCIFAST16
> #define PCI_SUBDEVICE_ID_CHASE_PCIFAST16 0x0011
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC
> #define PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC 0x0041
>+#endif
>+#ifndef PCI_SUBVENDOR_ID_CHASE_PCIRAS
> #define PCI_SUBVENDOR_ID_CHASE_PCIRAS 0x124D
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CHASE_PCIRAS4
> #define PCI_SUBDEVICE_ID_CHASE_PCIRAS4 0xF001
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_CHASE_PCIRAS8
> #define PCI_SUBDEVICE_ID_CHASE_PCIRAS8 0xF010
> #endif
>-
> #ifndef PCI_VENDOR_ID_QUATECH
> #define PCI_VENDOR_ID_QUATECH 0x135C
>+#endif
>+#ifndef PCI_DEVICE_ID_QUATECH_QSC100
> #define PCI_DEVICE_ID_QUATECH_QSC100 0x0010
>+#endif
>+#ifndef PCI_DEVICE_ID_QUATECH_DSC100
> #define PCI_DEVICE_ID_QUATECH_DSC100 0x0020
>+#endif
>+#ifndef PCI_DEVICE_ID_QUATECH_DSC200
> #define PCI_DEVICE_ID_QUATECH_DSC200 0x0030
>+#endif
>+#ifndef PCI_DEVICE_ID_QUATECH_QSC200
> #define PCI_DEVICE_ID_QUATECH_QSC200 0x0040
>+#endif
>+#ifndef PCI_DEVICE_ID_QUATECH_ESC100D
> #define PCI_DEVICE_ID_QUATECH_ESC100D 0x0050
>+#endif
>+#ifndef PCI_DEVICE_ID_QUATECH_ESC100M
> #define PCI_DEVICE_ID_QUATECH_ESC100M 0x0060
> #endif
>-
> #ifndef PCI_VENDOR_ID_ROCKWELL
> #define PCI_VENDOR_ID_ROCKWELL 0x127A
> #endif
>-
> #ifndef PCI_VENDOR_ID_USR
> #define PCI_VENDOR_ID_USR 0x12B9
> #endif
>-
> #ifndef PCI_SUBDEVICE_ID_SPECIALIX_SPEED4
> #define PCI_SUBDEVICE_ID_SPECIALIX_SPEED4 0xa004
> #endif
>-
> #ifndef PCI_VENDOR_ID_OXSEMI
> #define PCI_VENDOR_ID_OXSEMI 0x1415
>+#endif
>+#ifndef PCI_DEVICE_ID_OXSEMI_16PCI954
> #define PCI_DEVICE_ID_OXSEMI_16PCI954 0x9501
> #endif
>-
> #ifndef PCI_DEVICE_ID_OXSEMI_16PCI952
> #define PCI_DEVICE_ID_OXSEMI_16PCI952 0x950A
>+#endif
>+#ifndef PCI_DEVICE_ID_OXSEMI_16PCI95N
> #define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511
> #endif
>-
> #ifndef PCI_VENDOR_ID_LAVA
> #define PCI_VENDOR_ID_LAVA 0x1407
> #endif
>-
> #ifndef PCI_DEVICE_ID_LAVA_DSERIAL
> #define PCI_DEVICE_ID_LAVA_DSERIAL 0x0100 /* 2x 16550 */
>+#endif
>+#ifndef PCI_DEVICE_ID_LAVA_QUATRO_A
> #define PCI_DEVICE_ID_LAVA_QUATRO_A 0x0101 /* 2x 16550, half of 4 port */
>+#endif
>+#ifndef PCI_DEVICE_ID_LAVA_QUATRO_B
> #define PCI_DEVICE_ID_LAVA_QUATRO_B 0x0102 /* 2x 16550, half of 4 port */
>+#endif
>+#ifndef PCI_DEVICE_ID_LAVA_PORT_PLUS
> #define PCI_DEVICE_ID_LAVA_PORT_PLUS 0x0200 /* 2x 16650 */
>+#endif
>+#ifndef PCI_DEVICE_ID_LAVA_QUAD_A
> #define PCI_DEVICE_ID_LAVA_QUAD_A 0x0201 /* 2x 16650, half of 4 port */
>+#endif
>+#ifndef PCI_DEVICE_ID_LAVA_QUAD_B
> #define PCI_DEVICE_ID_LAVA_QUAD_B 0x0202 /* 2x 16650, half of 4 port */
>+#endif
>+#ifndef PCI_DEVICE_ID_LAVA_SSERIAL
> #define PCI_DEVICE_ID_LAVA_SSERIAL 0x0500 /* 1x 16550 */
>+#endif
>+#ifndef PCI_DEVICE_ID_LAVA_PORT_650
> #define PCI_DEVICE_ID_LAVA_PORT_650 0x0600 /* 1x 16650 */
> #endif
>-
> #ifndef PCI_VENDOR_ID_TIMEDIA
> #define PCI_VENDOR_ID_TIMEDIA 0x1409
>+#endif
>+#ifndef PCI_DEVICE_ID_TIMEDIA_1889
> #define PCI_DEVICE_ID_TIMEDIA_1889 0x7168
>-#endif
>-
>+#endif
> #ifndef PCI_VENDOR_ID_SIIG
> #define PCI_VENDOR_ID_SIIG 0x131f
> #endif
>-
> #ifndef PCI_DEVICE_ID_SIIG_1S_10x_550
> #define PCI_DEVICE_ID_SIIG_1S_10x_550 0x1000
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S_10x_650
> #define PCI_DEVICE_ID_SIIG_1S_10x_650 0x1001
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S_10x_850
> #define PCI_DEVICE_ID_SIIG_1S_10x_850 0x1002
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S_10x_550
> #define PCI_DEVICE_ID_SIIG_2S_10x_550 0x1030
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S_10x_650
> #define PCI_DEVICE_ID_SIIG_2S_10x_650 0x1031
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S_10x_850
> #define PCI_DEVICE_ID_SIIG_2S_10x_850 0x1032
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_4S_10x_550
> #define PCI_DEVICE_ID_SIIG_4S_10x_550 0x1050
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_4S_10x_650
> #define PCI_DEVICE_ID_SIIG_4S_10x_650 0x1051
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_4S_10x_850
> #define PCI_DEVICE_ID_SIIG_4S_10x_850 0x1052
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S_20x_550
> #define PCI_DEVICE_ID_SIIG_1S_20x_550 0x2000
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S_20x_650
> #define PCI_DEVICE_ID_SIIG_1S_20x_650 0x2001
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S_20x_850
> #define PCI_DEVICE_ID_SIIG_1S_20x_850 0x2002
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S_20x_550
> #define PCI_DEVICE_ID_SIIG_2S_20x_550 0x2030
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S_20x_650
> #define PCI_DEVICE_ID_SIIG_2S_20x_650 0x2031
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S_20x_850
> #define PCI_DEVICE_ID_SIIG_2S_20x_850 0x2032
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_4S_20x_550
> #define PCI_DEVICE_ID_SIIG_4S_20x_550 0x2050
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_4S_20x_650
> #define PCI_DEVICE_ID_SIIG_4S_20x_650 0x2051
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_4S_20x_850
> #define PCI_DEVICE_ID_SIIG_4S_20x_850 0x2052
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S1P_10x_550
> #define PCI_DEVICE_ID_SIIG_1S1P_10x_550 0x1010
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S1P_10x_650
> #define PCI_DEVICE_ID_SIIG_1S1P_10x_650 0x1011
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S1P_10x_850
> #define PCI_DEVICE_ID_SIIG_1S1P_10x_850 0x1012
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S1P_10x_550
> #define PCI_DEVICE_ID_SIIG_2S1P_10x_550 0x1034
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S1P_10x_650
> #define PCI_DEVICE_ID_SIIG_2S1P_10x_650 0x1035
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S1P_10x_850
> #define PCI_DEVICE_ID_SIIG_2S1P_10x_850 0x1036
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2P1S_20x_550
> #define PCI_DEVICE_ID_SIIG_2P1S_20x_550 0x2040
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2P1S_20x_650
> #define PCI_DEVICE_ID_SIIG_2P1S_20x_650 0x2041
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2P1S_20x_850
> #define PCI_DEVICE_ID_SIIG_2P1S_20x_850 0x2042
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S1P_20x_550
> #define PCI_DEVICE_ID_SIIG_1S1P_20x_550 0x2010
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S1P_20x_650
> #define PCI_DEVICE_ID_SIIG_1S1P_20x_650 0x2011
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_1S1P_20x_850
> #define PCI_DEVICE_ID_SIIG_1S1P_20x_850 0x2012
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S1P_20x_550
> #define PCI_DEVICE_ID_SIIG_2S1P_20x_550 0x2060
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S1P_20x_650
> #define PCI_DEVICE_ID_SIIG_2S1P_20x_650 0x2061
>+#endif
>+#ifndef PCI_DEVICE_ID_SIIG_2S1P_20x_850
> #define PCI_DEVICE_ID_SIIG_2S1P_20x_850 0x2062
> #endif
>-
> #ifndef PCI_VENDOR_ID_COMPUTONE
> #define PCI_VENDOR_ID_COMPUTONE 0x8e0e
> #endif
>-
> #ifndef PCI_DEVICE_ID_COMPUTONE_PG
> #define PCI_DEVICE_ID_COMPUTONE_PG 0x0302
>+#endif
>+#ifndef PCI_SUBVENDOR_ID_COMPUTONE
> #define PCI_SUBVENDOR_ID_COMPUTONE 0x8e0e
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_COMPUTONE_PG4
> #define PCI_SUBDEVICE_ID_COMPUTONE_PG4 0x0001
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_COMPUTONE_PG8
> #define PCI_SUBDEVICE_ID_COMPUTONE_PG8 0x0002
>+#endif
>+#ifndef PCI_SUBDEVICE_ID_COMPUTONE_PG6
> #define PCI_SUBDEVICE_ID_COMPUTONE_PG6 0x0003
> #endif
>-
> #ifndef PCI_DEVICE_ID_ATT_VENUS_MODEM
>-#define PCI_DEVICE_ID_ATT_VENUS_MODEM 0x480
>+#define PCI_DEVICE_ID_ATT_VENUS_MODEM 0x0480
> #endif
>-
> #ifndef PCI_VENDOR_ID_MORETON
> #define PCI_VENDOR_ID_MORETON 0x15aa
>+#endif
>+#ifndef PCI_DEVICE_ID_RASTEL_2PORT
> #define PCI_DEVICE_ID_RASTEL_2PORT 0x2000
> #endif
>-
> #ifndef PCI_DEVICE_ID_DCI_PCCOM8
> #define PCI_DEVICE_ID_DCI_PCCOM8 0x0002
> #endif
>-
> #ifndef PCI_VENDOR_ID_SGI
> #define PCI_VENDOR_ID_SGI 0x10a9
>+#endif
>+#ifndef PCI_DEVICE_ID_SGI_IOC3
> #define PCI_DEVICE_ID_SGI_IOC3 0x0003
> #endif
>
>--- init ---
>
>diff -ru serial-5.05-22x/serial_compat.h serial-5.05-init/serial_compat.h
>--- serial-5.05-22x/serial_compat.h Thu Nov 1 16:20:53 2001
>+++ serial-5.05-init/serial_compat.h Mon Nov 5 23:58:50 2001
>@@ -191,6 +191,16 @@
>
>
> /*
>+ * 2.2.18-20 have buggy tty_init()s. They incorrectly leave in the call
>+ * to rs_init, which has been moved to the __initcall method. Here we
>+ * compensate.
>+ */
>+#if defined(module_init) && ((LINUX_VERSION_CODE >= 0x020212) &&
>(LINUX_VERSION_CODE <= 0x020214))
>+#undef module_init
>+#undef module_exit
>+#endif
>+
>+/*
> * Compatibility with the new module_init() code
> */
> #ifndef module_init
>
>--- end of patches ---
>
>
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/
>
>