Fw: [Patch] Some updates to serial-5.05

From: Stuart MacDonald (stuartm@connecttech.com)
Date: Wed Nov 14 2001 - 10:47:44 EST


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/



This archive was generated by hypermail 2b29 : Thu Nov 15 2001 - 21:00:39 EST