2 * linux/drivers/char/8250_pci.c
4 * Probe module for 8250/16550-type PCI serial ports.
6 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
8 * Copyright (C) 2001 Russell King, All Rights Reserved.
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License.
14 #include <linux/module.h>
15 #include <linux/init.h>
16 #include <linux/pci.h>
17 #include <linux/string.h>
18 #include <linux/kernel.h>
19 #include <linux/slab.h>
20 #include <linux/delay.h>
21 #include <linux/tty.h>
22 #include <linux/serial_core.h>
23 #include <linux/8250_pci.h>
24 #include <linux/bitops.h>
26 #include <asm/byteorder.h>
31 #undef SERIAL_DEBUG_PCI
34 * init function returns:
35 * > 0 - number of ports
36 * = 0 - use board->num_ports
39 struct pci_serial_quirk {
44 int (*init)(struct pci_dev *dev);
45 int (*setup)(struct serial_private *,
46 const struct pciserial_board *,
47 struct uart_port *, int);
48 void (*exit)(struct pci_dev *dev);
51 #define PCI_NUM_BAR_RESOURCES 6
53 struct serial_private {
56 void __iomem *remapped_bar[PCI_NUM_BAR_RESOURCES];
57 struct pci_serial_quirk *quirk;
61 static void moan_device(const char *str, struct pci_dev *dev)
63 printk(KERN_WARNING "%s: %s\n"
64 KERN_WARNING "Please send the output of lspci -vv, this\n"
65 KERN_WARNING "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n"
66 KERN_WARNING "manufacturer and name of serial board or\n"
67 KERN_WARNING "modem board to rmk+serial@arm.linux.org.uk.\n",
68 pci_name(dev), str, dev->vendor, dev->device,
69 dev->subsystem_vendor, dev->subsystem_device);
73 setup_port(struct serial_private *priv, struct uart_port *port,
74 int bar, int offset, int regshift)
76 struct pci_dev *dev = priv->dev;
77 unsigned long base, len;
79 if (bar >= PCI_NUM_BAR_RESOURCES)
82 base = pci_resource_start(dev, bar);
84 if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) {
85 len = pci_resource_len(dev, bar);
87 if (!priv->remapped_bar[bar])
88 priv->remapped_bar[bar] = ioremap_nocache(base, len);
89 if (!priv->remapped_bar[bar])
92 port->iotype = UPIO_MEM;
94 port->mapbase = base + offset;
95 port->membase = priv->remapped_bar[bar] + offset;
96 port->regshift = regshift;
98 port->iotype = UPIO_PORT;
99 port->iobase = base + offset;
101 port->membase = NULL;
108 * ADDI-DATA GmbH communication cards <info@addi-data.com>
110 static int addidata_apci7800_setup(struct serial_private *priv,
111 const struct pciserial_board *board,
112 struct uart_port *port, int idx)
114 unsigned int bar = 0, offset = board->first_offset;
115 bar = FL_GET_BASE(board->flags);
118 offset += idx * board->uart_offset;
119 } else if ((idx >= 2) && (idx < 4)) {
121 offset += ((idx - 2) * board->uart_offset);
122 } else if ((idx >= 4) && (idx < 6)) {
124 offset += ((idx - 4) * board->uart_offset);
125 } else if (idx >= 6) {
127 offset += ((idx - 6) * board->uart_offset);
130 return setup_port(priv, port, bar, offset, board->reg_shift);
134 * AFAVLAB uses a different mixture of BARs and offsets
135 * Not that ugly ;) -- HW
138 afavlab_setup(struct serial_private *priv, const struct pciserial_board *board,
139 struct uart_port *port, int idx)
141 unsigned int bar, offset = board->first_offset;
143 bar = FL_GET_BASE(board->flags);
148 offset += (idx - 4) * board->uart_offset;
151 return setup_port(priv, port, bar, offset, board->reg_shift);
155 * HP's Remote Management Console. The Diva chip came in several
156 * different versions. N-class, L2000 and A500 have two Diva chips, each
157 * with 3 UARTs (the third UART on the second chip is unused). Superdome
158 * and Keystone have one Diva chip with 3 UARTs. Some later machines have
159 * one Diva chip, but it has been expanded to 5 UARTs.
161 static int pci_hp_diva_init(struct pci_dev *dev)
165 switch (dev->subsystem_device) {
166 case PCI_DEVICE_ID_HP_DIVA_TOSCA1:
167 case PCI_DEVICE_ID_HP_DIVA_HALFDOME:
168 case PCI_DEVICE_ID_HP_DIVA_KEYSTONE:
169 case PCI_DEVICE_ID_HP_DIVA_EVEREST:
172 case PCI_DEVICE_ID_HP_DIVA_TOSCA2:
175 case PCI_DEVICE_ID_HP_DIVA_MAESTRO:
178 case PCI_DEVICE_ID_HP_DIVA_POWERBAR:
179 case PCI_DEVICE_ID_HP_DIVA_HURRICANE:
188 * HP's Diva chip puts the 4th/5th serial port further out, and
189 * some serial ports are supposed to be hidden on certain models.
192 pci_hp_diva_setup(struct serial_private *priv,
193 const struct pciserial_board *board,
194 struct uart_port *port, int idx)
196 unsigned int offset = board->first_offset;
197 unsigned int bar = FL_GET_BASE(board->flags);
199 switch (priv->dev->subsystem_device) {
200 case PCI_DEVICE_ID_HP_DIVA_MAESTRO:
204 case PCI_DEVICE_ID_HP_DIVA_EVEREST:
214 offset += idx * board->uart_offset;
216 return setup_port(priv, port, bar, offset, board->reg_shift);
220 * Added for EKF Intel i960 serial boards
222 static int pci_inteli960ni_init(struct pci_dev *dev)
224 unsigned long oldval;
226 if (!(dev->subsystem_device & 0x1000))
229 /* is firmware started? */
230 pci_read_config_dword(dev, 0x44, (void *)&oldval);
231 if (oldval == 0x00001000L) { /* RESET value */
232 printk(KERN_DEBUG "Local i960 firmware missing");
239 * Some PCI serial cards using the PLX 9050 PCI interface chip require
240 * that the card interrupt be explicitly enabled or disabled. This
241 * seems to be mainly needed on card using the PLX which also use I/O
244 static int pci_plx9050_init(struct pci_dev *dev)
249 if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0) {
250 moan_device("no memory in bar 0", dev);
255 if (dev->vendor == PCI_VENDOR_ID_PANACOM ||
256 dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS)
259 if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
260 (dev->device == PCI_DEVICE_ID_PLX_ROMULUS))
262 * As the megawolf cards have the int pins active
263 * high, and have 2 UART chips, both ints must be
264 * enabled on the 9050. Also, the UARTS are set in
265 * 16450 mode by default, so we have to enable the
266 * 16C950 'enhanced' mode so that we can use the
271 * enable/disable interrupts
273 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
276 writel(irq_config, p + 0x4c);
279 * Read the register back to ensure that it took effect.
287 static void __devexit pci_plx9050_exit(struct pci_dev *dev)
291 if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0)
297 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
302 * Read the register back to ensure that it took effect.
309 #define NI8420_INT_ENABLE_REG 0x38
310 #define NI8420_INT_ENABLE_BIT 0x2000
312 static void __devexit pci_ni8420_exit(struct pci_dev *dev)
315 unsigned long base, len;
316 unsigned int bar = 0;
318 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
319 moan_device("no memory in bar", dev);
323 base = pci_resource_start(dev, bar);
324 len = pci_resource_len(dev, bar);
325 p = ioremap_nocache(base, len);
329 /* Disable the CPU Interrupt */
330 writel(readl(p + NI8420_INT_ENABLE_REG) & ~(NI8420_INT_ENABLE_BIT),
331 p + NI8420_INT_ENABLE_REG);
337 #define MITE_IOWBSR1 0xc4
338 #define MITE_IOWCR1 0xf4
339 #define MITE_LCIMR1 0x08
340 #define MITE_LCIMR2 0x10
342 #define MITE_LCIMR2_CLR_CPU_IE (1 << 30)
344 static void __devexit pci_ni8430_exit(struct pci_dev *dev)
347 unsigned long base, len;
348 unsigned int bar = 0;
350 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
351 moan_device("no memory in bar", dev);
355 base = pci_resource_start(dev, bar);
356 len = pci_resource_len(dev, bar);
357 p = ioremap_nocache(base, len);
361 /* Disable the CPU Interrupt */
362 writel(MITE_LCIMR2_CLR_CPU_IE, p + MITE_LCIMR2);
366 /* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */
368 sbs_setup(struct serial_private *priv, const struct pciserial_board *board,
369 struct uart_port *port, int idx)
371 unsigned int bar, offset = board->first_offset;
376 /* first four channels map to 0, 0x100, 0x200, 0x300 */
377 offset += idx * board->uart_offset;
378 } else if (idx < 8) {
379 /* last four channels map to 0x1000, 0x1100, 0x1200, 0x1300 */
380 offset += idx * board->uart_offset + 0xC00;
381 } else /* we have only 8 ports on PMC-OCTALPRO */
384 return setup_port(priv, port, bar, offset, board->reg_shift);
388 * This does initialization for PMC OCTALPRO cards:
389 * maps the device memory, resets the UARTs (needed, bc
390 * if the module is removed and inserted again, the card
391 * is in the sleep mode) and enables global interrupt.
394 /* global control register offset for SBS PMC-OctalPro */
395 #define OCT_REG_CR_OFF 0x500
397 static int sbs_init(struct pci_dev *dev)
401 p = pci_ioremap_bar(dev, 0);
405 /* Set bit-4 Control Register (UART RESET) in to reset the uarts */
406 writeb(0x10, p + OCT_REG_CR_OFF);
408 writeb(0x0, p + OCT_REG_CR_OFF);
410 /* Set bit-2 (INTENABLE) of Control Register */
411 writeb(0x4, p + OCT_REG_CR_OFF);
418 * Disables the global interrupt of PMC-OctalPro
421 static void __devexit sbs_exit(struct pci_dev *dev)
425 p = pci_ioremap_bar(dev, 0);
426 /* FIXME: What if resource_len < OCT_REG_CR_OFF */
428 writeb(0, p + OCT_REG_CR_OFF);
433 * SIIG serial cards have an PCI interface chip which also controls
434 * the UART clocking frequency. Each UART can be clocked independently
435 * (except cards equiped with 4 UARTs) and initial clocking settings
436 * are stored in the EEPROM chip. It can cause problems because this
437 * version of serial driver doesn't support differently clocked UART's
438 * on single PCI card. To prevent this, initialization functions set
439 * high frequency clocking for all UART's on given card. It is safe (I
440 * hope) because it doesn't touch EEPROM settings to prevent conflicts
441 * with other OSes (like M$ DOS).
443 * SIIG support added by Andrey Panin <pazke@donpac.ru>, 10/1999
445 * There is two family of SIIG serial cards with different PCI
446 * interface chip and different configuration methods:
447 * - 10x cards have control registers in IO and/or memory space;
448 * - 20x cards have control registers in standard PCI configuration space.
450 * Note: all 10x cards have PCI device ids 0x10..
451 * all 20x cards have PCI device ids 0x20..
453 * There are also Quartet Serial cards which use Oxford Semiconductor
454 * 16954 quad UART PCI chip clocked by 18.432 MHz quartz.
456 * Note: some SIIG cards are probed by the parport_serial object.
459 #define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc)
460 #define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8)
462 static int pci_siig10x_init(struct pci_dev *dev)
467 switch (dev->device & 0xfff8) {
468 case PCI_DEVICE_ID_SIIG_1S_10x: /* 1S */
471 case PCI_DEVICE_ID_SIIG_2S_10x: /* 2S, 2S1P */
474 default: /* 1S1P, 4S */
479 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
483 writew(readw(p + 0x28) & data, p + 0x28);
489 #define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc)
490 #define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc)
492 static int pci_siig20x_init(struct pci_dev *dev)
496 /* Change clock frequency for the first UART. */
497 pci_read_config_byte(dev, 0x6f, &data);
498 pci_write_config_byte(dev, 0x6f, data & 0xef);
500 /* If this card has 2 UART, we have to do the same with second UART. */
501 if (((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S_20x) ||
502 ((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S1P_20x)) {
503 pci_read_config_byte(dev, 0x73, &data);
504 pci_write_config_byte(dev, 0x73, data & 0xef);
509 static int pci_siig_init(struct pci_dev *dev)
511 unsigned int type = dev->device & 0xff00;
514 return pci_siig10x_init(dev);
515 else if (type == 0x2000)
516 return pci_siig20x_init(dev);
518 moan_device("Unknown SIIG card", dev);
522 static int pci_siig_setup(struct serial_private *priv,
523 const struct pciserial_board *board,
524 struct uart_port *port, int idx)
526 unsigned int bar = FL_GET_BASE(board->flags) + idx, offset = 0;
530 offset = (idx - 4) * 8;
533 return setup_port(priv, port, bar, offset, 0);
537 * Timedia has an explosion of boards, and to avoid the PCI table from
538 * growing *huge*, we use this function to collapse some 70 entries
539 * in the PCI table into one, for sanity's and compactness's sake.
541 static const unsigned short timedia_single_port[] = {
542 0x4025, 0x4027, 0x4028, 0x5025, 0x5027, 0
545 static const unsigned short timedia_dual_port[] = {
546 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085,
547 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079,
548 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079,
549 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079,
553 static const unsigned short timedia_quad_port[] = {
554 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157,
555 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159,
556 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056,
560 static const unsigned short timedia_eight_port[] = {
561 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166,
562 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0
565 static const struct timedia_struct {
567 const unsigned short *ids;
569 { 1, timedia_single_port },
570 { 2, timedia_dual_port },
571 { 4, timedia_quad_port },
572 { 8, timedia_eight_port }
575 static int pci_timedia_init(struct pci_dev *dev)
577 const unsigned short *ids;
580 for (i = 0; i < ARRAY_SIZE(timedia_data); i++) {
581 ids = timedia_data[i].ids;
582 for (j = 0; ids[j]; j++)
583 if (dev->subsystem_device == ids[j])
584 return timedia_data[i].num;
590 * Timedia/SUNIX uses a mixture of BARs and offsets
591 * Ugh, this is ugly as all hell --- TYT
594 pci_timedia_setup(struct serial_private *priv,
595 const struct pciserial_board *board,
596 struct uart_port *port, int idx)
598 unsigned int bar = 0, offset = board->first_offset;
605 offset = board->uart_offset;
612 offset = board->uart_offset;
621 return setup_port(priv, port, bar, offset, board->reg_shift);
625 * Some Titan cards are also a little weird
628 titan_400l_800l_setup(struct serial_private *priv,
629 const struct pciserial_board *board,
630 struct uart_port *port, int idx)
632 unsigned int bar, offset = board->first_offset;
643 offset = (idx - 2) * board->uart_offset;
646 return setup_port(priv, port, bar, offset, board->reg_shift);
649 static int pci_xircom_init(struct pci_dev *dev)
655 static int pci_ni8420_init(struct pci_dev *dev)
658 unsigned long base, len;
659 unsigned int bar = 0;
661 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
662 moan_device("no memory in bar", dev);
666 base = pci_resource_start(dev, bar);
667 len = pci_resource_len(dev, bar);
668 p = ioremap_nocache(base, len);
672 /* Enable CPU Interrupt */
673 writel(readl(p + NI8420_INT_ENABLE_REG) | NI8420_INT_ENABLE_BIT,
674 p + NI8420_INT_ENABLE_REG);
680 #define MITE_IOWBSR1_WSIZE 0xa
681 #define MITE_IOWBSR1_WIN_OFFSET 0x800
682 #define MITE_IOWBSR1_WENAB (1 << 7)
683 #define MITE_LCIMR1_IO_IE_0 (1 << 24)
684 #define MITE_LCIMR2_SET_CPU_IE (1 << 31)
685 #define MITE_IOWCR1_RAMSEL_MASK 0xfffffffe
687 static int pci_ni8430_init(struct pci_dev *dev)
690 unsigned long base, len;
692 unsigned int bar = 0;
694 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
695 moan_device("no memory in bar", dev);
699 base = pci_resource_start(dev, bar);
700 len = pci_resource_len(dev, bar);
701 p = ioremap_nocache(base, len);
705 /* Set device window address and size in BAR0 */
706 device_window = ((base + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00)
707 | MITE_IOWBSR1_WENAB | MITE_IOWBSR1_WSIZE;
708 writel(device_window, p + MITE_IOWBSR1);
710 /* Set window access to go to RAMSEL IO address space */
711 writel((readl(p + MITE_IOWCR1) & MITE_IOWCR1_RAMSEL_MASK),
714 /* Enable IO Bus Interrupt 0 */
715 writel(MITE_LCIMR1_IO_IE_0, p + MITE_LCIMR1);
717 /* Enable CPU Interrupt */
718 writel(MITE_LCIMR2_SET_CPU_IE, p + MITE_LCIMR2);
724 /* UART Port Control Register */
725 #define NI8430_PORTCON 0x0f
726 #define NI8430_PORTCON_TXVR_ENABLE (1 << 3)
729 pci_ni8430_setup(struct serial_private *priv,
730 const struct pciserial_board *board,
731 struct uart_port *port, int idx)
734 unsigned long base, len;
735 unsigned int bar, offset = board->first_offset;
737 if (idx >= board->num_ports)
740 bar = FL_GET_BASE(board->flags);
741 offset += idx * board->uart_offset;
743 base = pci_resource_start(priv->dev, bar);
744 len = pci_resource_len(priv->dev, bar);
745 p = ioremap_nocache(base, len);
747 /* enable the transciever */
748 writeb(readb(p + offset + NI8430_PORTCON) | NI8430_PORTCON_TXVR_ENABLE,
749 p + offset + NI8430_PORTCON);
753 return setup_port(priv, port, bar, offset, board->reg_shift);
757 static int pci_netmos_init(struct pci_dev *dev)
759 /* subdevice 0x00PS means <P> parallel, <S> serial */
760 unsigned int num_serial = dev->subsystem_device & 0xf;
762 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
763 dev->subsystem_device == 0x0299)
772 * These chips are available with optionally one parallel port and up to
773 * two serial ports. Unfortunately they all have the same product id.
775 * Basic configuration is done over a region of 32 I/O ports. The base
776 * ioport is called INTA or INTC, depending on docs/other drivers.
778 * The region of the 32 I/O ports is configured in POSIO0R...
782 #define ITE_887x_MISCR 0x9c
783 #define ITE_887x_INTCBAR 0x78
784 #define ITE_887x_UARTBAR 0x7c
785 #define ITE_887x_PS0BAR 0x10
786 #define ITE_887x_POSIO0 0x60
789 #define ITE_887x_IOSIZE 32
790 /* I/O space size (bits 26-24; 8 bytes = 011b) */
791 #define ITE_887x_POSIO_IOSIZE_8 (3 << 24)
792 /* I/O space size (bits 26-24; 32 bytes = 101b) */
793 #define ITE_887x_POSIO_IOSIZE_32 (5 << 24)
794 /* Decoding speed (1 = slow, 2 = medium, 3 = fast) */
795 #define ITE_887x_POSIO_SPEED (3 << 29)
796 /* enable IO_Space bit */
797 #define ITE_887x_POSIO_ENABLE (1 << 31)
799 static int pci_ite887x_init(struct pci_dev *dev)
801 /* inta_addr are the configuration addresses of the ITE */
802 static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0,
805 struct resource *iobase = NULL;
806 u32 miscr, uartbar, ioport;
808 /* search for the base-ioport */
810 while (inta_addr[i] && iobase == NULL) {
811 iobase = request_region(inta_addr[i], ITE_887x_IOSIZE,
813 if (iobase != NULL) {
814 /* write POSIO0R - speed | size | ioport */
815 pci_write_config_dword(dev, ITE_887x_POSIO0,
816 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
817 ITE_887x_POSIO_IOSIZE_32 | inta_addr[i]);
818 /* write INTCBAR - ioport */
819 pci_write_config_dword(dev, ITE_887x_INTCBAR,
821 ret = inb(inta_addr[i]);
823 /* ioport connected */
826 release_region(iobase->start, ITE_887x_IOSIZE);
833 printk(KERN_ERR "ite887x: could not find iobase\n");
837 /* start of undocumented type checking (see parport_pc.c) */
838 type = inb(iobase->start + 0x18) & 0x0f;
841 case 0x2: /* ITE8871 (1P) */
842 case 0xa: /* ITE8875 (1P) */
845 case 0xe: /* ITE8872 (2S1P) */
848 case 0x6: /* ITE8873 (1S) */
851 case 0x8: /* ITE8874 (2S) */
855 moan_device("Unknown ITE887x", dev);
859 /* configure all serial ports */
860 for (i = 0; i < ret; i++) {
861 /* read the I/O port from the device */
862 pci_read_config_dword(dev, ITE_887x_PS0BAR + (0x4 * (i + 1)),
864 ioport &= 0x0000FF00; /* the actual base address */
865 pci_write_config_dword(dev, ITE_887x_POSIO0 + (0x4 * (i + 1)),
866 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
867 ITE_887x_POSIO_IOSIZE_8 | ioport);
869 /* write the ioport to the UARTBAR */
870 pci_read_config_dword(dev, ITE_887x_UARTBAR, &uartbar);
871 uartbar &= ~(0xffff << (16 * i)); /* clear half the reg */
872 uartbar |= (ioport << (16 * i)); /* set the ioport */
873 pci_write_config_dword(dev, ITE_887x_UARTBAR, uartbar);
875 /* get current config */
876 pci_read_config_dword(dev, ITE_887x_MISCR, &miscr);
877 /* disable interrupts (UARTx_Routing[3:0]) */
878 miscr &= ~(0xf << (12 - 4 * i));
879 /* activate the UART (UARTx_En) */
880 miscr |= 1 << (23 - i);
881 /* write new config with activated UART */
882 pci_write_config_dword(dev, ITE_887x_MISCR, miscr);
886 /* the device has no UARTs if we get here */
887 release_region(iobase->start, ITE_887x_IOSIZE);
893 static void __devexit pci_ite887x_exit(struct pci_dev *dev)
896 /* the ioport is bit 0-15 in POSIO0R */
897 pci_read_config_dword(dev, ITE_887x_POSIO0, &ioport);
899 release_region(ioport, ITE_887x_IOSIZE);
903 * Oxford Semiconductor Inc.
904 * Check that device is part of the Tornado range of devices, then determine
905 * the number of ports available on the device.
907 static int pci_oxsemi_tornado_init(struct pci_dev *dev)
910 unsigned long deviceID;
911 unsigned int number_uarts = 0;
913 /* OxSemi Tornado devices are all 0xCxxx */
914 if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
915 (dev->device & 0xF000) != 0xC000)
918 p = pci_iomap(dev, 0, 5);
922 deviceID = ioread32(p);
924 if (deviceID == 0x07000200) {
925 number_uarts = ioread8(p + 4);
927 "%d ports detected on Oxford PCI Express device\n",
935 pci_default_setup(struct serial_private *priv,
936 const struct pciserial_board *board,
937 struct uart_port *port, int idx)
939 unsigned int bar, offset = board->first_offset, maxnr;
941 bar = FL_GET_BASE(board->flags);
942 if (board->flags & FL_BASE_BARS)
945 offset += idx * board->uart_offset;
947 maxnr = (pci_resource_len(priv->dev, bar) - board->first_offset) >>
948 (board->reg_shift + 3);
950 if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr)
953 return setup_port(priv, port, bar, offset, board->reg_shift);
956 static int skip_tx_en_setup(struct serial_private *priv,
957 const struct pciserial_board *board,
958 struct uart_port *port, int idx)
960 port->flags |= UPF_NO_TXEN_TEST;
961 printk(KERN_DEBUG "serial8250: skipping TxEn test for device "
962 "[%04x:%04x] subsystem [%04x:%04x]\n",
965 priv->dev->subsystem_vendor,
966 priv->dev->subsystem_device);
968 return pci_default_setup(priv, board, port, idx);
971 /* This should be in linux/pci_ids.h */
972 #define PCI_VENDOR_ID_SBSMODULARIO 0x124B
973 #define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B
974 #define PCI_DEVICE_ID_OCTPRO 0x0001
975 #define PCI_SUBDEVICE_ID_OCTPRO232 0x0108
976 #define PCI_SUBDEVICE_ID_OCTPRO422 0x0208
977 #define PCI_SUBDEVICE_ID_POCTAL232 0x0308
978 #define PCI_SUBDEVICE_ID_POCTAL422 0x0408
979 #define PCI_VENDOR_ID_ADVANTECH 0x13fe
980 #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
982 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
983 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
986 * Master list of serial port init/setup/exit quirks.
987 * This does not describe the general nature of the port.
988 * (ie, baud base, number and location of ports, etc)
990 * This list is ordered alphabetically by vendor then device.
991 * Specific entries must come before more generic entries.
993 static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
995 * ADDI-DATA GmbH communication cards <info@addi-data.com>
998 .vendor = PCI_VENDOR_ID_ADDIDATA_OLD,
999 .device = PCI_DEVICE_ID_ADDIDATA_APCI7800,
1000 .subvendor = PCI_ANY_ID,
1001 .subdevice = PCI_ANY_ID,
1002 .setup = addidata_apci7800_setup,
1005 * AFAVLAB cards - these may be called via parport_serial
1006 * It is not clear whether this applies to all products.
1009 .vendor = PCI_VENDOR_ID_AFAVLAB,
1010 .device = PCI_ANY_ID,
1011 .subvendor = PCI_ANY_ID,
1012 .subdevice = PCI_ANY_ID,
1013 .setup = afavlab_setup,
1019 .vendor = PCI_VENDOR_ID_HP,
1020 .device = PCI_DEVICE_ID_HP_DIVA,
1021 .subvendor = PCI_ANY_ID,
1022 .subdevice = PCI_ANY_ID,
1023 .init = pci_hp_diva_init,
1024 .setup = pci_hp_diva_setup,
1030 .vendor = PCI_VENDOR_ID_INTEL,
1031 .device = PCI_DEVICE_ID_INTEL_80960_RP,
1032 .subvendor = 0xe4bf,
1033 .subdevice = PCI_ANY_ID,
1034 .init = pci_inteli960ni_init,
1035 .setup = pci_default_setup,
1038 .vendor = PCI_VENDOR_ID_INTEL,
1039 .device = PCI_DEVICE_ID_INTEL_8257X_SOL,
1040 .subvendor = PCI_ANY_ID,
1041 .subdevice = PCI_ANY_ID,
1042 .setup = skip_tx_en_setup,
1045 .vendor = PCI_VENDOR_ID_INTEL,
1046 .device = PCI_DEVICE_ID_INTEL_82573L_SOL,
1047 .subvendor = PCI_ANY_ID,
1048 .subdevice = PCI_ANY_ID,
1049 .setup = skip_tx_en_setup,
1052 .vendor = PCI_VENDOR_ID_INTEL,
1053 .device = PCI_DEVICE_ID_INTEL_82573E_SOL,
1054 .subvendor = PCI_ANY_ID,
1055 .subdevice = PCI_ANY_ID,
1056 .setup = skip_tx_en_setup,
1062 .vendor = PCI_VENDOR_ID_ITE,
1063 .device = PCI_DEVICE_ID_ITE_8872,
1064 .subvendor = PCI_ANY_ID,
1065 .subdevice = PCI_ANY_ID,
1066 .init = pci_ite887x_init,
1067 .setup = pci_default_setup,
1068 .exit = __devexit_p(pci_ite887x_exit),
1071 * National Instruments
1074 .vendor = PCI_VENDOR_ID_NI,
1075 .device = PCI_DEVICE_ID_NI_PCI23216,
1076 .subvendor = PCI_ANY_ID,
1077 .subdevice = PCI_ANY_ID,
1078 .init = pci_ni8420_init,
1079 .setup = pci_default_setup,
1080 .exit = __devexit_p(pci_ni8420_exit),
1083 .vendor = PCI_VENDOR_ID_NI,
1084 .device = PCI_DEVICE_ID_NI_PCI2328,
1085 .subvendor = PCI_ANY_ID,
1086 .subdevice = PCI_ANY_ID,
1087 .init = pci_ni8420_init,
1088 .setup = pci_default_setup,
1089 .exit = __devexit_p(pci_ni8420_exit),
1092 .vendor = PCI_VENDOR_ID_NI,
1093 .device = PCI_DEVICE_ID_NI_PCI2324,
1094 .subvendor = PCI_ANY_ID,
1095 .subdevice = PCI_ANY_ID,
1096 .init = pci_ni8420_init,
1097 .setup = pci_default_setup,
1098 .exit = __devexit_p(pci_ni8420_exit),
1101 .vendor = PCI_VENDOR_ID_NI,
1102 .device = PCI_DEVICE_ID_NI_PCI2322,
1103 .subvendor = PCI_ANY_ID,
1104 .subdevice = PCI_ANY_ID,
1105 .init = pci_ni8420_init,
1106 .setup = pci_default_setup,
1107 .exit = __devexit_p(pci_ni8420_exit),
1110 .vendor = PCI_VENDOR_ID_NI,
1111 .device = PCI_DEVICE_ID_NI_PCI2324I,
1112 .subvendor = PCI_ANY_ID,
1113 .subdevice = PCI_ANY_ID,
1114 .init = pci_ni8420_init,
1115 .setup = pci_default_setup,
1116 .exit = __devexit_p(pci_ni8420_exit),
1119 .vendor = PCI_VENDOR_ID_NI,
1120 .device = PCI_DEVICE_ID_NI_PCI2322I,
1121 .subvendor = PCI_ANY_ID,
1122 .subdevice = PCI_ANY_ID,
1123 .init = pci_ni8420_init,
1124 .setup = pci_default_setup,
1125 .exit = __devexit_p(pci_ni8420_exit),
1128 .vendor = PCI_VENDOR_ID_NI,
1129 .device = PCI_DEVICE_ID_NI_PXI8420_23216,
1130 .subvendor = PCI_ANY_ID,
1131 .subdevice = PCI_ANY_ID,
1132 .init = pci_ni8420_init,
1133 .setup = pci_default_setup,
1134 .exit = __devexit_p(pci_ni8420_exit),
1137 .vendor = PCI_VENDOR_ID_NI,
1138 .device = PCI_DEVICE_ID_NI_PXI8420_2328,
1139 .subvendor = PCI_ANY_ID,
1140 .subdevice = PCI_ANY_ID,
1141 .init = pci_ni8420_init,
1142 .setup = pci_default_setup,
1143 .exit = __devexit_p(pci_ni8420_exit),
1146 .vendor = PCI_VENDOR_ID_NI,
1147 .device = PCI_DEVICE_ID_NI_PXI8420_2324,
1148 .subvendor = PCI_ANY_ID,
1149 .subdevice = PCI_ANY_ID,
1150 .init = pci_ni8420_init,
1151 .setup = pci_default_setup,
1152 .exit = __devexit_p(pci_ni8420_exit),
1155 .vendor = PCI_VENDOR_ID_NI,
1156 .device = PCI_DEVICE_ID_NI_PXI8420_2322,
1157 .subvendor = PCI_ANY_ID,
1158 .subdevice = PCI_ANY_ID,
1159 .init = pci_ni8420_init,
1160 .setup = pci_default_setup,
1161 .exit = __devexit_p(pci_ni8420_exit),
1164 .vendor = PCI_VENDOR_ID_NI,
1165 .device = PCI_DEVICE_ID_NI_PXI8422_2324,
1166 .subvendor = PCI_ANY_ID,
1167 .subdevice = PCI_ANY_ID,
1168 .init = pci_ni8420_init,
1169 .setup = pci_default_setup,
1170 .exit = __devexit_p(pci_ni8420_exit),
1173 .vendor = PCI_VENDOR_ID_NI,
1174 .device = PCI_DEVICE_ID_NI_PXI8422_2322,
1175 .subvendor = PCI_ANY_ID,
1176 .subdevice = PCI_ANY_ID,
1177 .init = pci_ni8420_init,
1178 .setup = pci_default_setup,
1179 .exit = __devexit_p(pci_ni8420_exit),
1182 .vendor = PCI_VENDOR_ID_NI,
1183 .device = PCI_ANY_ID,
1184 .subvendor = PCI_ANY_ID,
1185 .subdevice = PCI_ANY_ID,
1186 .init = pci_ni8430_init,
1187 .setup = pci_ni8430_setup,
1188 .exit = __devexit_p(pci_ni8430_exit),
1194 .vendor = PCI_VENDOR_ID_PANACOM,
1195 .device = PCI_DEVICE_ID_PANACOM_QUADMODEM,
1196 .subvendor = PCI_ANY_ID,
1197 .subdevice = PCI_ANY_ID,
1198 .init = pci_plx9050_init,
1199 .setup = pci_default_setup,
1200 .exit = __devexit_p(pci_plx9050_exit),
1203 .vendor = PCI_VENDOR_ID_PANACOM,
1204 .device = PCI_DEVICE_ID_PANACOM_DUALMODEM,
1205 .subvendor = PCI_ANY_ID,
1206 .subdevice = PCI_ANY_ID,
1207 .init = pci_plx9050_init,
1208 .setup = pci_default_setup,
1209 .exit = __devexit_p(pci_plx9050_exit),
1215 .vendor = PCI_VENDOR_ID_PLX,
1216 .device = PCI_DEVICE_ID_PLX_9030,
1217 .subvendor = PCI_SUBVENDOR_ID_PERLE,
1218 .subdevice = PCI_ANY_ID,
1219 .setup = pci_default_setup,
1222 .vendor = PCI_VENDOR_ID_PLX,
1223 .device = PCI_DEVICE_ID_PLX_9050,
1224 .subvendor = PCI_SUBVENDOR_ID_EXSYS,
1225 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
1226 .init = pci_plx9050_init,
1227 .setup = pci_default_setup,
1228 .exit = __devexit_p(pci_plx9050_exit),
1231 .vendor = PCI_VENDOR_ID_PLX,
1232 .device = PCI_DEVICE_ID_PLX_9050,
1233 .subvendor = PCI_SUBVENDOR_ID_KEYSPAN,
1234 .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2,
1235 .init = pci_plx9050_init,
1236 .setup = pci_default_setup,
1237 .exit = __devexit_p(pci_plx9050_exit),
1240 .vendor = PCI_VENDOR_ID_PLX,
1241 .device = PCI_DEVICE_ID_PLX_9050,
1242 .subvendor = PCI_VENDOR_ID_PLX,
1243 .subdevice = PCI_SUBDEVICE_ID_UNKNOWN_0x1584,
1244 .init = pci_plx9050_init,
1245 .setup = pci_default_setup,
1246 .exit = __devexit_p(pci_plx9050_exit),
1249 .vendor = PCI_VENDOR_ID_PLX,
1250 .device = PCI_DEVICE_ID_PLX_ROMULUS,
1251 .subvendor = PCI_VENDOR_ID_PLX,
1252 .subdevice = PCI_DEVICE_ID_PLX_ROMULUS,
1253 .init = pci_plx9050_init,
1254 .setup = pci_default_setup,
1255 .exit = __devexit_p(pci_plx9050_exit),
1258 * SBS Technologies, Inc., PMC-OCTALPRO 232
1261 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1262 .device = PCI_DEVICE_ID_OCTPRO,
1263 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1264 .subdevice = PCI_SUBDEVICE_ID_OCTPRO232,
1267 .exit = __devexit_p(sbs_exit),
1270 * SBS Technologies, Inc., PMC-OCTALPRO 422
1273 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1274 .device = PCI_DEVICE_ID_OCTPRO,
1275 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1276 .subdevice = PCI_SUBDEVICE_ID_OCTPRO422,
1279 .exit = __devexit_p(sbs_exit),
1282 * SBS Technologies, Inc., P-Octal 232
1285 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1286 .device = PCI_DEVICE_ID_OCTPRO,
1287 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1288 .subdevice = PCI_SUBDEVICE_ID_POCTAL232,
1291 .exit = __devexit_p(sbs_exit),
1294 * SBS Technologies, Inc., P-Octal 422
1297 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1298 .device = PCI_DEVICE_ID_OCTPRO,
1299 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1300 .subdevice = PCI_SUBDEVICE_ID_POCTAL422,
1303 .exit = __devexit_p(sbs_exit),
1306 * SIIG cards - these may be called via parport_serial
1309 .vendor = PCI_VENDOR_ID_SIIG,
1310 .device = PCI_ANY_ID,
1311 .subvendor = PCI_ANY_ID,
1312 .subdevice = PCI_ANY_ID,
1313 .init = pci_siig_init,
1314 .setup = pci_siig_setup,
1320 .vendor = PCI_VENDOR_ID_TITAN,
1321 .device = PCI_DEVICE_ID_TITAN_400L,
1322 .subvendor = PCI_ANY_ID,
1323 .subdevice = PCI_ANY_ID,
1324 .setup = titan_400l_800l_setup,
1327 .vendor = PCI_VENDOR_ID_TITAN,
1328 .device = PCI_DEVICE_ID_TITAN_800L,
1329 .subvendor = PCI_ANY_ID,
1330 .subdevice = PCI_ANY_ID,
1331 .setup = titan_400l_800l_setup,
1337 .vendor = PCI_VENDOR_ID_TIMEDIA,
1338 .device = PCI_DEVICE_ID_TIMEDIA_1889,
1339 .subvendor = PCI_VENDOR_ID_TIMEDIA,
1340 .subdevice = PCI_ANY_ID,
1341 .init = pci_timedia_init,
1342 .setup = pci_timedia_setup,
1345 .vendor = PCI_VENDOR_ID_TIMEDIA,
1346 .device = PCI_ANY_ID,
1347 .subvendor = PCI_ANY_ID,
1348 .subdevice = PCI_ANY_ID,
1349 .setup = pci_timedia_setup,
1355 .vendor = PCI_VENDOR_ID_XIRCOM,
1356 .device = PCI_DEVICE_ID_XIRCOM_X3201_MDM,
1357 .subvendor = PCI_ANY_ID,
1358 .subdevice = PCI_ANY_ID,
1359 .init = pci_xircom_init,
1360 .setup = pci_default_setup,
1363 * Netmos cards - these may be called via parport_serial
1366 .vendor = PCI_VENDOR_ID_NETMOS,
1367 .device = PCI_ANY_ID,
1368 .subvendor = PCI_ANY_ID,
1369 .subdevice = PCI_ANY_ID,
1370 .init = pci_netmos_init,
1371 .setup = pci_default_setup,
1374 * For Oxford Semiconductor and Mainpine
1377 .vendor = PCI_VENDOR_ID_OXSEMI,
1378 .device = PCI_ANY_ID,
1379 .subvendor = PCI_ANY_ID,
1380 .subdevice = PCI_ANY_ID,
1381 .init = pci_oxsemi_tornado_init,
1382 .setup = pci_default_setup,
1385 .vendor = PCI_VENDOR_ID_MAINPINE,
1386 .device = PCI_ANY_ID,
1387 .subvendor = PCI_ANY_ID,
1388 .subdevice = PCI_ANY_ID,
1389 .init = pci_oxsemi_tornado_init,
1390 .setup = pci_default_setup,
1393 * Default "match everything" terminator entry
1396 .vendor = PCI_ANY_ID,
1397 .device = PCI_ANY_ID,
1398 .subvendor = PCI_ANY_ID,
1399 .subdevice = PCI_ANY_ID,
1400 .setup = pci_default_setup,
1404 static inline int quirk_id_matches(u32 quirk_id, u32 dev_id)
1406 return quirk_id == PCI_ANY_ID || quirk_id == dev_id;
1409 static struct pci_serial_quirk *find_quirk(struct pci_dev *dev)
1411 struct pci_serial_quirk *quirk;
1413 for (quirk = pci_serial_quirks; ; quirk++)
1414 if (quirk_id_matches(quirk->vendor, dev->vendor) &&
1415 quirk_id_matches(quirk->device, dev->device) &&
1416 quirk_id_matches(quirk->subvendor, dev->subsystem_vendor) &&
1417 quirk_id_matches(quirk->subdevice, dev->subsystem_device))
1422 static inline int get_pci_irq(struct pci_dev *dev,
1423 const struct pciserial_board *board)
1425 if (board->flags & FL_NOIRQ)
1432 * This is the configuration table for all of the PCI serial boards
1433 * which we support. It is directly indexed by the pci_board_num_t enum
1434 * value, which is encoded in the pci_device_id PCI probe table's
1435 * driver_data member.
1437 * The makeup of these names are:
1438 * pbn_bn{_bt}_n_baud{_offsetinhex}
1440 * bn = PCI BAR number
1441 * bt = Index using PCI BARs
1442 * n = number of serial ports
1444 * offsetinhex = offset for each sequential port (in hex)
1446 * This table is sorted by (in order): bn, bt, baud, offsetindex, n.
1448 * Please note: in theory if n = 1, _bt infix should make no difference.
1449 * ie, pbn_b0_1_115200 is the same as pbn_b0_bt_1_115200
1451 enum pci_board_num_t {
1471 pbn_b0_2_1843200_200,
1472 pbn_b0_4_1843200_200,
1473 pbn_b0_8_1843200_200,
1540 * Board-specific versions.
1548 pbn_oxsemi_1_4000000,
1549 pbn_oxsemi_2_4000000,
1550 pbn_oxsemi_4_4000000,
1551 pbn_oxsemi_8_4000000,
1569 * uart_offset - the space between channels
1570 * reg_shift - describes how the UART registers are mapped
1571 * to PCI memory by the card.
1572 * For example IER register on SBS, Inc. PMC-OctPro is located at
1573 * offset 0x10 from the UART base, while UART_IER is defined as 1
1574 * in include/linux/serial_reg.h,
1575 * see first lines of serial_in() and serial_out() in 8250.c
1578 static struct pciserial_board pci_boards[] __devinitdata = {
1582 .base_baud = 115200,
1585 [pbn_b0_1_115200] = {
1588 .base_baud = 115200,
1591 [pbn_b0_2_115200] = {
1594 .base_baud = 115200,
1597 [pbn_b0_4_115200] = {
1600 .base_baud = 115200,
1603 [pbn_b0_5_115200] = {
1606 .base_baud = 115200,
1609 [pbn_b0_8_115200] = {
1612 .base_baud = 115200,
1615 [pbn_b0_1_921600] = {
1618 .base_baud = 921600,
1621 [pbn_b0_2_921600] = {
1624 .base_baud = 921600,
1627 [pbn_b0_4_921600] = {
1630 .base_baud = 921600,
1634 [pbn_b0_2_1130000] = {
1637 .base_baud = 1130000,
1641 [pbn_b0_4_1152000] = {
1644 .base_baud = 1152000,
1648 [pbn_b0_2_1843200] = {
1651 .base_baud = 1843200,
1654 [pbn_b0_4_1843200] = {
1657 .base_baud = 1843200,
1661 [pbn_b0_2_1843200_200] = {
1664 .base_baud = 1843200,
1665 .uart_offset = 0x200,
1667 [pbn_b0_4_1843200_200] = {
1670 .base_baud = 1843200,
1671 .uart_offset = 0x200,
1673 [pbn_b0_8_1843200_200] = {
1676 .base_baud = 1843200,
1677 .uart_offset = 0x200,
1679 [pbn_b0_1_4000000] = {
1682 .base_baud = 4000000,
1686 [pbn_b0_bt_1_115200] = {
1687 .flags = FL_BASE0|FL_BASE_BARS,
1689 .base_baud = 115200,
1692 [pbn_b0_bt_2_115200] = {
1693 .flags = FL_BASE0|FL_BASE_BARS,
1695 .base_baud = 115200,
1698 [pbn_b0_bt_8_115200] = {
1699 .flags = FL_BASE0|FL_BASE_BARS,
1701 .base_baud = 115200,
1705 [pbn_b0_bt_1_460800] = {
1706 .flags = FL_BASE0|FL_BASE_BARS,
1708 .base_baud = 460800,
1711 [pbn_b0_bt_2_460800] = {
1712 .flags = FL_BASE0|FL_BASE_BARS,
1714 .base_baud = 460800,
1717 [pbn_b0_bt_4_460800] = {
1718 .flags = FL_BASE0|FL_BASE_BARS,
1720 .base_baud = 460800,
1724 [pbn_b0_bt_1_921600] = {
1725 .flags = FL_BASE0|FL_BASE_BARS,
1727 .base_baud = 921600,
1730 [pbn_b0_bt_2_921600] = {
1731 .flags = FL_BASE0|FL_BASE_BARS,
1733 .base_baud = 921600,
1736 [pbn_b0_bt_4_921600] = {
1737 .flags = FL_BASE0|FL_BASE_BARS,
1739 .base_baud = 921600,
1742 [pbn_b0_bt_8_921600] = {
1743 .flags = FL_BASE0|FL_BASE_BARS,
1745 .base_baud = 921600,
1749 [pbn_b1_1_115200] = {
1752 .base_baud = 115200,
1755 [pbn_b1_2_115200] = {
1758 .base_baud = 115200,
1761 [pbn_b1_4_115200] = {
1764 .base_baud = 115200,
1767 [pbn_b1_8_115200] = {
1770 .base_baud = 115200,
1773 [pbn_b1_16_115200] = {
1776 .base_baud = 115200,
1780 [pbn_b1_1_921600] = {
1783 .base_baud = 921600,
1786 [pbn_b1_2_921600] = {
1789 .base_baud = 921600,
1792 [pbn_b1_4_921600] = {
1795 .base_baud = 921600,
1798 [pbn_b1_8_921600] = {
1801 .base_baud = 921600,
1804 [pbn_b1_2_1250000] = {
1807 .base_baud = 1250000,
1811 [pbn_b1_bt_1_115200] = {
1812 .flags = FL_BASE1|FL_BASE_BARS,
1814 .base_baud = 115200,
1817 [pbn_b1_bt_2_115200] = {
1818 .flags = FL_BASE1|FL_BASE_BARS,
1820 .base_baud = 115200,
1823 [pbn_b1_bt_4_115200] = {
1824 .flags = FL_BASE1|FL_BASE_BARS,
1826 .base_baud = 115200,
1830 [pbn_b1_bt_2_921600] = {
1831 .flags = FL_BASE1|FL_BASE_BARS,
1833 .base_baud = 921600,
1837 [pbn_b1_1_1382400] = {
1840 .base_baud = 1382400,
1843 [pbn_b1_2_1382400] = {
1846 .base_baud = 1382400,
1849 [pbn_b1_4_1382400] = {
1852 .base_baud = 1382400,
1855 [pbn_b1_8_1382400] = {
1858 .base_baud = 1382400,
1862 [pbn_b2_1_115200] = {
1865 .base_baud = 115200,
1868 [pbn_b2_2_115200] = {
1871 .base_baud = 115200,
1874 [pbn_b2_4_115200] = {
1877 .base_baud = 115200,
1880 [pbn_b2_8_115200] = {
1883 .base_baud = 115200,
1887 [pbn_b2_1_460800] = {
1890 .base_baud = 460800,
1893 [pbn_b2_4_460800] = {
1896 .base_baud = 460800,
1899 [pbn_b2_8_460800] = {
1902 .base_baud = 460800,
1905 [pbn_b2_16_460800] = {
1908 .base_baud = 460800,
1912 [pbn_b2_1_921600] = {
1915 .base_baud = 921600,
1918 [pbn_b2_4_921600] = {
1921 .base_baud = 921600,
1924 [pbn_b2_8_921600] = {
1927 .base_baud = 921600,
1931 [pbn_b2_bt_1_115200] = {
1932 .flags = FL_BASE2|FL_BASE_BARS,
1934 .base_baud = 115200,
1937 [pbn_b2_bt_2_115200] = {
1938 .flags = FL_BASE2|FL_BASE_BARS,
1940 .base_baud = 115200,
1943 [pbn_b2_bt_4_115200] = {
1944 .flags = FL_BASE2|FL_BASE_BARS,
1946 .base_baud = 115200,
1950 [pbn_b2_bt_2_921600] = {
1951 .flags = FL_BASE2|FL_BASE_BARS,
1953 .base_baud = 921600,
1956 [pbn_b2_bt_4_921600] = {
1957 .flags = FL_BASE2|FL_BASE_BARS,
1959 .base_baud = 921600,
1963 [pbn_b3_2_115200] = {
1966 .base_baud = 115200,
1969 [pbn_b3_4_115200] = {
1972 .base_baud = 115200,
1975 [pbn_b3_8_115200] = {
1978 .base_baud = 115200,
1983 * Entries following this are board-specific.
1992 .base_baud = 921600,
1993 .uart_offset = 0x400,
1997 .flags = FL_BASE2|FL_BASE_BARS,
1999 .base_baud = 921600,
2000 .uart_offset = 0x400,
2004 .flags = FL_BASE2|FL_BASE_BARS,
2006 .base_baud = 921600,
2007 .uart_offset = 0x400,
2011 [pbn_exsys_4055] = {
2014 .base_baud = 115200,
2018 /* I think this entry is broken - the first_offset looks wrong --rmk */
2019 [pbn_plx_romulus] = {
2022 .base_baud = 921600,
2023 .uart_offset = 8 << 2,
2025 .first_offset = 0x03,
2029 * This board uses the size of PCI Base region 0 to
2030 * signal now many ports are available
2033 .flags = FL_BASE0|FL_REGION_SZ_CAP,
2035 .base_baud = 115200,
2038 [pbn_oxsemi_1_4000000] = {
2041 .base_baud = 4000000,
2042 .uart_offset = 0x200,
2043 .first_offset = 0x1000,
2045 [pbn_oxsemi_2_4000000] = {
2048 .base_baud = 4000000,
2049 .uart_offset = 0x200,
2050 .first_offset = 0x1000,
2052 [pbn_oxsemi_4_4000000] = {
2055 .base_baud = 4000000,
2056 .uart_offset = 0x200,
2057 .first_offset = 0x1000,
2059 [pbn_oxsemi_8_4000000] = {
2062 .base_baud = 4000000,
2063 .uart_offset = 0x200,
2064 .first_offset = 0x1000,
2069 * EKF addition for i960 Boards form EKF with serial port.
2072 [pbn_intel_i960] = {
2075 .base_baud = 921600,
2076 .uart_offset = 8 << 2,
2078 .first_offset = 0x10000,
2081 .flags = FL_BASE0|FL_NOIRQ,
2083 .base_baud = 458333,
2086 .first_offset = 0x20178,
2090 * Computone - uses IOMEM.
2092 [pbn_computone_4] = {
2095 .base_baud = 921600,
2096 .uart_offset = 0x40,
2098 .first_offset = 0x200,
2100 [pbn_computone_6] = {
2103 .base_baud = 921600,
2104 .uart_offset = 0x40,
2106 .first_offset = 0x200,
2108 [pbn_computone_8] = {
2111 .base_baud = 921600,
2112 .uart_offset = 0x40,
2114 .first_offset = 0x200,
2119 .base_baud = 460800,
2124 * Exar Corp. XR17C15[248] Dual/Quad/Octal UART
2125 * Only basic 16550A support.
2126 * XR17C15[24] are not tested, but they should work.
2128 [pbn_exar_XR17C152] = {
2131 .base_baud = 921600,
2132 .uart_offset = 0x200,
2134 [pbn_exar_XR17C154] = {
2137 .base_baud = 921600,
2138 .uart_offset = 0x200,
2140 [pbn_exar_XR17C158] = {
2143 .base_baud = 921600,
2144 .uart_offset = 0x200,
2147 * PA Semi PWRficient PA6T-1682M on-chip UART
2149 [pbn_pasemi_1682M] = {
2152 .base_baud = 8333333,
2155 * National Instruments 843x
2160 .base_baud = 3686400,
2161 .uart_offset = 0x10,
2162 .first_offset = 0x800,
2167 .base_baud = 3686400,
2168 .uart_offset = 0x10,
2169 .first_offset = 0x800,
2174 .base_baud = 3686400,
2175 .uart_offset = 0x10,
2176 .first_offset = 0x800,
2181 .base_baud = 3686400,
2182 .uart_offset = 0x10,
2183 .first_offset = 0x800,
2187 static const struct pci_device_id softmodem_blacklist[] = {
2188 { PCI_VDEVICE(AL, 0x5457), }, /* ALi Corporation M5457 AC'97 Modem */
2192 * Given a complete unknown PCI device, try to use some heuristics to
2193 * guess what the configuration might be, based on the pitiful PCI
2194 * serial specs. Returns 0 on success, 1 on failure.
2196 static int __devinit
2197 serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
2199 const struct pci_device_id *blacklist;
2200 int num_iomem, num_port, first_port = -1, i;
2203 * If it is not a communications device or the programming
2204 * interface is greater than 6, give up.
2206 * (Should we try to make guesses for multiport serial devices
2209 if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) &&
2210 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
2211 (dev->class & 0xff) > 6)
2215 * Do not access blacklisted devices that are known not to
2216 * feature serial ports.
2218 for (blacklist = softmodem_blacklist;
2219 blacklist < softmodem_blacklist + ARRAY_SIZE(softmodem_blacklist);
2221 if (dev->vendor == blacklist->vendor &&
2222 dev->device == blacklist->device)
2226 num_iomem = num_port = 0;
2227 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2228 if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
2230 if (first_port == -1)
2233 if (pci_resource_flags(dev, i) & IORESOURCE_MEM)
2238 * If there is 1 or 0 iomem regions, and exactly one port,
2239 * use it. We guess the number of ports based on the IO
2242 if (num_iomem <= 1 && num_port == 1) {
2243 board->flags = first_port;
2244 board->num_ports = pci_resource_len(dev, first_port) / 8;
2249 * Now guess if we've got a board which indexes by BARs.
2250 * Each IO BAR should be 8 bytes, and they should follow
2255 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2256 if (pci_resource_flags(dev, i) & IORESOURCE_IO &&
2257 pci_resource_len(dev, i) == 8 &&
2258 (first_port == -1 || (first_port + num_port) == i)) {
2260 if (first_port == -1)
2266 board->flags = first_port | FL_BASE_BARS;
2267 board->num_ports = num_port;
2275 serial_pci_matches(const struct pciserial_board *board,
2276 const struct pciserial_board *guessed)
2279 board->num_ports == guessed->num_ports &&
2280 board->base_baud == guessed->base_baud &&
2281 board->uart_offset == guessed->uart_offset &&
2282 board->reg_shift == guessed->reg_shift &&
2283 board->first_offset == guessed->first_offset;
2286 struct serial_private *
2287 pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board)
2289 struct uart_port serial_port;
2290 struct serial_private *priv;
2291 struct pci_serial_quirk *quirk;
2292 int rc, nr_ports, i;
2294 nr_ports = board->num_ports;
2297 * Find an init and setup quirks.
2299 quirk = find_quirk(dev);
2302 * Run the new-style initialization function.
2303 * The initialization function returns:
2305 * 0 - use board->num_ports
2306 * >0 - number of ports
2309 rc = quirk->init(dev);
2318 priv = kzalloc(sizeof(struct serial_private) +
2319 sizeof(unsigned int) * nr_ports,
2322 priv = ERR_PTR(-ENOMEM);
2327 priv->quirk = quirk;
2329 memset(&serial_port, 0, sizeof(struct uart_port));
2330 serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
2331 serial_port.uartclk = board->base_baud * 16;
2332 serial_port.irq = get_pci_irq(dev, board);
2333 serial_port.dev = &dev->dev;
2335 for (i = 0; i < nr_ports; i++) {
2336 if (quirk->setup(priv, board, &serial_port, i))
2339 #ifdef SERIAL_DEBUG_PCI
2340 printk(KERN_DEBUG "Setup PCI port: port %x, irq %d, type %d\n",
2341 serial_port.iobase, serial_port.irq, serial_port.iotype);
2344 priv->line[i] = serial8250_register_port(&serial_port);
2345 if (priv->line[i] < 0) {
2346 printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), priv->line[i]);
2359 EXPORT_SYMBOL_GPL(pciserial_init_ports);
2361 void pciserial_remove_ports(struct serial_private *priv)
2363 struct pci_serial_quirk *quirk;
2366 for (i = 0; i < priv->nr; i++)
2367 serial8250_unregister_port(priv->line[i]);
2369 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2370 if (priv->remapped_bar[i])
2371 iounmap(priv->remapped_bar[i]);
2372 priv->remapped_bar[i] = NULL;
2376 * Find the exit quirks.
2378 quirk = find_quirk(priv->dev);
2380 quirk->exit(priv->dev);
2384 EXPORT_SYMBOL_GPL(pciserial_remove_ports);
2386 void pciserial_suspend_ports(struct serial_private *priv)
2390 for (i = 0; i < priv->nr; i++)
2391 if (priv->line[i] >= 0)
2392 serial8250_suspend_port(priv->line[i]);
2394 EXPORT_SYMBOL_GPL(pciserial_suspend_ports);
2396 void pciserial_resume_ports(struct serial_private *priv)
2401 * Ensure that the board is correctly configured.
2403 if (priv->quirk->init)
2404 priv->quirk->init(priv->dev);
2406 for (i = 0; i < priv->nr; i++)
2407 if (priv->line[i] >= 0)
2408 serial8250_resume_port(priv->line[i]);
2410 EXPORT_SYMBOL_GPL(pciserial_resume_ports);
2413 * Probe one serial board. Unfortunately, there is no rhyme nor reason
2414 * to the arrangement of serial ports on a PCI card.
2416 static int __devinit
2417 pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
2419 struct serial_private *priv;
2420 const struct pciserial_board *board;
2421 struct pciserial_board tmp;
2424 if (ent->driver_data >= ARRAY_SIZE(pci_boards)) {
2425 printk(KERN_ERR "pci_init_one: invalid driver_data: %ld\n",
2430 board = &pci_boards[ent->driver_data];
2432 rc = pci_enable_device(dev);
2436 if (ent->driver_data == pbn_default) {
2438 * Use a copy of the pci_board entry for this;
2439 * avoid changing entries in the table.
2441 memcpy(&tmp, board, sizeof(struct pciserial_board));
2445 * We matched one of our class entries. Try to
2446 * determine the parameters of this board.
2448 rc = serial_pci_guess_board(dev, &tmp);
2453 * We matched an explicit entry. If we are able to
2454 * detect this boards settings with our heuristic,
2455 * then we no longer need this entry.
2457 memcpy(&tmp, &pci_boards[pbn_default],
2458 sizeof(struct pciserial_board));
2459 rc = serial_pci_guess_board(dev, &tmp);
2460 if (rc == 0 && serial_pci_matches(board, &tmp))
2461 moan_device("Redundant entry in serial pci_table.",
2465 priv = pciserial_init_ports(dev, board);
2466 if (!IS_ERR(priv)) {
2467 pci_set_drvdata(dev, priv);
2474 pci_disable_device(dev);
2478 static void __devexit pciserial_remove_one(struct pci_dev *dev)
2480 struct serial_private *priv = pci_get_drvdata(dev);
2482 pci_set_drvdata(dev, NULL);
2484 pciserial_remove_ports(priv);
2486 pci_disable_device(dev);
2490 static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
2492 struct serial_private *priv = pci_get_drvdata(dev);
2495 pciserial_suspend_ports(priv);
2497 pci_save_state(dev);
2498 pci_set_power_state(dev, pci_choose_state(dev, state));
2502 static int pciserial_resume_one(struct pci_dev *dev)
2505 struct serial_private *priv = pci_get_drvdata(dev);
2507 pci_set_power_state(dev, PCI_D0);
2508 pci_restore_state(dev);
2512 * The device may have been disabled. Re-enable it.
2514 err = pci_enable_device(dev);
2515 /* FIXME: We cannot simply error out here */
2517 printk(KERN_ERR "pciserial: Unable to re-enable ports, trying to continue.\n");
2518 pciserial_resume_ports(priv);
2524 static struct pci_device_id serial_pci_tbl[] = {
2525 /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */
2526 { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620,
2527 PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0,
2529 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2530 PCI_SUBVENDOR_ID_CONNECT_TECH,
2531 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2533 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2534 PCI_SUBVENDOR_ID_CONNECT_TECH,
2535 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2537 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2538 PCI_SUBVENDOR_ID_CONNECT_TECH,
2539 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2541 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2542 PCI_SUBVENDOR_ID_CONNECT_TECH,
2543 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2545 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2546 PCI_SUBVENDOR_ID_CONNECT_TECH,
2547 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2549 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2550 PCI_SUBVENDOR_ID_CONNECT_TECH,
2551 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2553 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2554 PCI_SUBVENDOR_ID_CONNECT_TECH,
2555 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485, 0, 0,
2557 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2558 PCI_SUBVENDOR_ID_CONNECT_TECH,
2559 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 0, 0,
2561 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2562 PCI_SUBVENDOR_ID_CONNECT_TECH,
2563 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485, 0, 0,
2565 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2566 PCI_SUBVENDOR_ID_CONNECT_TECH,
2567 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0,
2569 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2570 PCI_SUBVENDOR_ID_CONNECT_TECH,
2571 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0,
2573 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2574 PCI_SUBVENDOR_ID_CONNECT_TECH,
2575 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0,
2577 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2578 PCI_SUBVENDOR_ID_CONNECT_TECH,
2579 PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0,
2581 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2582 PCI_SUBVENDOR_ID_CONNECT_TECH,
2583 PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0,
2585 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2586 PCI_SUBVENDOR_ID_CONNECT_TECH,
2587 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ, 0, 0,
2589 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2590 PCI_SUBVENDOR_ID_CONNECT_TECH,
2591 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2, 0, 0,
2593 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2594 PCI_SUBVENDOR_ID_CONNECT_TECH,
2595 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4, 0, 0,
2597 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2598 PCI_VENDOR_ID_AFAVLAB,
2599 PCI_SUBDEVICE_ID_AFAVLAB_P061, 0, 0,
2601 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2602 PCI_SUBVENDOR_ID_CONNECT_TECH,
2603 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_232, 0, 0,
2604 pbn_b0_2_1843200_200 },
2605 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2606 PCI_SUBVENDOR_ID_CONNECT_TECH,
2607 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_232, 0, 0,
2608 pbn_b0_4_1843200_200 },
2609 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2610 PCI_SUBVENDOR_ID_CONNECT_TECH,
2611 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_232, 0, 0,
2612 pbn_b0_8_1843200_200 },
2613 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2614 PCI_SUBVENDOR_ID_CONNECT_TECH,
2615 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_1_1, 0, 0,
2616 pbn_b0_2_1843200_200 },
2617 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2618 PCI_SUBVENDOR_ID_CONNECT_TECH,
2619 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_2, 0, 0,
2620 pbn_b0_4_1843200_200 },
2621 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2622 PCI_SUBVENDOR_ID_CONNECT_TECH,
2623 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_4, 0, 0,
2624 pbn_b0_8_1843200_200 },
2625 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2626 PCI_SUBVENDOR_ID_CONNECT_TECH,
2627 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2, 0, 0,
2628 pbn_b0_2_1843200_200 },
2629 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2630 PCI_SUBVENDOR_ID_CONNECT_TECH,
2631 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4, 0, 0,
2632 pbn_b0_4_1843200_200 },
2633 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2634 PCI_SUBVENDOR_ID_CONNECT_TECH,
2635 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8, 0, 0,
2636 pbn_b0_8_1843200_200 },
2637 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2638 PCI_SUBVENDOR_ID_CONNECT_TECH,
2639 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_485, 0, 0,
2640 pbn_b0_2_1843200_200 },
2641 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2642 PCI_SUBVENDOR_ID_CONNECT_TECH,
2643 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485, 0, 0,
2644 pbn_b0_4_1843200_200 },
2645 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2646 PCI_SUBVENDOR_ID_CONNECT_TECH,
2647 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485, 0, 0,
2648 pbn_b0_8_1843200_200 },
2650 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,
2651 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2652 pbn_b2_bt_1_115200 },
2653 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2,
2654 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2655 pbn_b2_bt_2_115200 },
2656 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422,
2657 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2658 pbn_b2_bt_4_115200 },
2659 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232,
2660 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2661 pbn_b2_bt_2_115200 },
2662 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4,
2663 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2664 pbn_b2_bt_4_115200 },
2665 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,
2666 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2668 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_7803,
2669 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2671 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM8,
2672 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2675 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2,
2676 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2677 pbn_b2_bt_2_115200 },
2678 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200,
2679 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2680 pbn_b2_bt_2_921600 },
2682 * VScom SPCOM800, from sl@s.pl
2684 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800,
2685 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2687 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077,
2688 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2690 /* Unknown card - subdevice 0x1584 */
2691 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2693 PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0,
2695 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2696 PCI_SUBVENDOR_ID_KEYSPAN,
2697 PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0,
2699 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM,
2700 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2702 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM,
2703 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2705 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2706 PCI_VENDOR_ID_ESDGMBH,
2707 PCI_DEVICE_ID_ESDGMBH_CPCIASIO4, 0, 0,
2709 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2710 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2711 PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0,
2713 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2714 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2715 PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0,
2717 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2718 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2719 PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0,
2721 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2722 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2723 PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0,
2725 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2726 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2727 PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0,
2729 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2730 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2731 PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
2733 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2734 PCI_SUBVENDOR_ID_EXSYS,
2735 PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
2738 * Megawolf Romulus PCI Serial Card, from Mike Hudson
2741 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS,
2742 0x10b5, 0x106a, 0, 0,
2744 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100,
2745 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2747 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100,
2748 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2750 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D,
2751 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2753 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M,
2754 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2756 { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,
2757 PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4,
2760 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2761 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL,
2766 * The below card is a little controversial since it is the
2767 * subject of a PCI vendor/device ID clash. (See
2768 * www.ussg.iu.edu/hypermail/linux/kernel/0303.1/0516.html).
2769 * For now just used the hex ID 0x950a.
2771 { PCI_VENDOR_ID_OXSEMI, 0x950a,
2772 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL, 0, 0,
2774 { PCI_VENDOR_ID_OXSEMI, 0x950a,
2775 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2777 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_C950,
2778 PCI_VENDOR_ID_OXSEMI, PCI_SUBDEVICE_ID_OXSEMI_C950, 0, 0,
2780 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2781 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2783 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,
2784 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2785 pbn_b0_bt_2_921600 },
2788 * Oxford Semiconductor Inc. Tornado PCI express device range.
2790 { PCI_VENDOR_ID_OXSEMI, 0xc101, /* OXPCIe952 1 Legacy UART */
2791 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2793 { PCI_VENDOR_ID_OXSEMI, 0xc105, /* OXPCIe952 1 Legacy UART */
2794 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2796 { PCI_VENDOR_ID_OXSEMI, 0xc11b, /* OXPCIe952 1 Native UART */
2797 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2798 pbn_oxsemi_1_4000000 },
2799 { PCI_VENDOR_ID_OXSEMI, 0xc11f, /* OXPCIe952 1 Native UART */
2800 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2801 pbn_oxsemi_1_4000000 },
2802 { PCI_VENDOR_ID_OXSEMI, 0xc120, /* OXPCIe952 1 Legacy UART */
2803 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2805 { PCI_VENDOR_ID_OXSEMI, 0xc124, /* OXPCIe952 1 Legacy UART */
2806 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2808 { PCI_VENDOR_ID_OXSEMI, 0xc138, /* OXPCIe952 1 Native UART */
2809 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2810 pbn_oxsemi_1_4000000 },
2811 { PCI_VENDOR_ID_OXSEMI, 0xc13d, /* OXPCIe952 1 Native UART */
2812 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2813 pbn_oxsemi_1_4000000 },
2814 { PCI_VENDOR_ID_OXSEMI, 0xc140, /* OXPCIe952 1 Legacy UART */
2815 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2817 { PCI_VENDOR_ID_OXSEMI, 0xc141, /* OXPCIe952 1 Legacy UART */
2818 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2820 { PCI_VENDOR_ID_OXSEMI, 0xc144, /* OXPCIe952 1 Legacy UART */
2821 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2823 { PCI_VENDOR_ID_OXSEMI, 0xc145, /* OXPCIe952 1 Legacy UART */
2824 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2826 { PCI_VENDOR_ID_OXSEMI, 0xc158, /* OXPCIe952 2 Native UART */
2827 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2828 pbn_oxsemi_2_4000000 },
2829 { PCI_VENDOR_ID_OXSEMI, 0xc15d, /* OXPCIe952 2 Native UART */
2830 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2831 pbn_oxsemi_2_4000000 },
2832 { PCI_VENDOR_ID_OXSEMI, 0xc208, /* OXPCIe954 4 Native UART */
2833 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2834 pbn_oxsemi_4_4000000 },
2835 { PCI_VENDOR_ID_OXSEMI, 0xc20d, /* OXPCIe954 4 Native UART */
2836 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2837 pbn_oxsemi_4_4000000 },
2838 { PCI_VENDOR_ID_OXSEMI, 0xc308, /* OXPCIe958 8 Native UART */
2839 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2840 pbn_oxsemi_8_4000000 },
2841 { PCI_VENDOR_ID_OXSEMI, 0xc30d, /* OXPCIe958 8 Native UART */
2842 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2843 pbn_oxsemi_8_4000000 },
2844 { PCI_VENDOR_ID_OXSEMI, 0xc40b, /* OXPCIe200 1 Native UART */
2845 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2846 pbn_oxsemi_1_4000000 },
2847 { PCI_VENDOR_ID_OXSEMI, 0xc40f, /* OXPCIe200 1 Native UART */
2848 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2849 pbn_oxsemi_1_4000000 },
2850 { PCI_VENDOR_ID_OXSEMI, 0xc41b, /* OXPCIe200 1 Native UART */
2851 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2852 pbn_oxsemi_1_4000000 },
2853 { PCI_VENDOR_ID_OXSEMI, 0xc41f, /* OXPCIe200 1 Native UART */
2854 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2855 pbn_oxsemi_1_4000000 },
2856 { PCI_VENDOR_ID_OXSEMI, 0xc42b, /* OXPCIe200 1 Native UART */
2857 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2858 pbn_oxsemi_1_4000000 },
2859 { PCI_VENDOR_ID_OXSEMI, 0xc42f, /* OXPCIe200 1 Native UART */
2860 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2861 pbn_oxsemi_1_4000000 },
2862 { PCI_VENDOR_ID_OXSEMI, 0xc43b, /* OXPCIe200 1 Native UART */
2863 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2864 pbn_oxsemi_1_4000000 },
2865 { PCI_VENDOR_ID_OXSEMI, 0xc43f, /* OXPCIe200 1 Native UART */
2866 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2867 pbn_oxsemi_1_4000000 },
2868 { PCI_VENDOR_ID_OXSEMI, 0xc44b, /* OXPCIe200 1 Native UART */
2869 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2870 pbn_oxsemi_1_4000000 },
2871 { PCI_VENDOR_ID_OXSEMI, 0xc44f, /* OXPCIe200 1 Native UART */
2872 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2873 pbn_oxsemi_1_4000000 },
2874 { PCI_VENDOR_ID_OXSEMI, 0xc45b, /* OXPCIe200 1 Native UART */
2875 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2876 pbn_oxsemi_1_4000000 },
2877 { PCI_VENDOR_ID_OXSEMI, 0xc45f, /* OXPCIe200 1 Native UART */
2878 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2879 pbn_oxsemi_1_4000000 },
2880 { PCI_VENDOR_ID_OXSEMI, 0xc46b, /* OXPCIe200 1 Native UART */
2881 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2882 pbn_oxsemi_1_4000000 },
2883 { PCI_VENDOR_ID_OXSEMI, 0xc46f, /* OXPCIe200 1 Native UART */
2884 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2885 pbn_oxsemi_1_4000000 },
2886 { PCI_VENDOR_ID_OXSEMI, 0xc47b, /* OXPCIe200 1 Native UART */
2887 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2888 pbn_oxsemi_1_4000000 },
2889 { PCI_VENDOR_ID_OXSEMI, 0xc47f, /* OXPCIe200 1 Native UART */
2890 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2891 pbn_oxsemi_1_4000000 },
2892 { PCI_VENDOR_ID_OXSEMI, 0xc48b, /* OXPCIe200 1 Native UART */
2893 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2894 pbn_oxsemi_1_4000000 },
2895 { PCI_VENDOR_ID_OXSEMI, 0xc48f, /* OXPCIe200 1 Native UART */
2896 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2897 pbn_oxsemi_1_4000000 },
2898 { PCI_VENDOR_ID_OXSEMI, 0xc49b, /* OXPCIe200 1 Native UART */
2899 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2900 pbn_oxsemi_1_4000000 },
2901 { PCI_VENDOR_ID_OXSEMI, 0xc49f, /* OXPCIe200 1 Native UART */
2902 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2903 pbn_oxsemi_1_4000000 },
2904 { PCI_VENDOR_ID_OXSEMI, 0xc4ab, /* OXPCIe200 1 Native UART */
2905 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2906 pbn_oxsemi_1_4000000 },
2907 { PCI_VENDOR_ID_OXSEMI, 0xc4af, /* OXPCIe200 1 Native UART */
2908 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2909 pbn_oxsemi_1_4000000 },
2910 { PCI_VENDOR_ID_OXSEMI, 0xc4bb, /* OXPCIe200 1 Native UART */
2911 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2912 pbn_oxsemi_1_4000000 },
2913 { PCI_VENDOR_ID_OXSEMI, 0xc4bf, /* OXPCIe200 1 Native UART */
2914 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2915 pbn_oxsemi_1_4000000 },
2916 { PCI_VENDOR_ID_OXSEMI, 0xc4cb, /* OXPCIe200 1 Native UART */
2917 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2918 pbn_oxsemi_1_4000000 },
2919 { PCI_VENDOR_ID_OXSEMI, 0xc4cf, /* OXPCIe200 1 Native UART */
2920 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2921 pbn_oxsemi_1_4000000 },
2923 * Mainpine Inc. IQ Express "Rev3" utilizing OxSemi Tornado
2925 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 1 Port V.34 Super-G3 Fax */
2926 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
2927 pbn_oxsemi_1_4000000 },
2928 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 2 Port V.34 Super-G3 Fax */
2929 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
2930 pbn_oxsemi_2_4000000 },
2931 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 4 Port V.34 Super-G3 Fax */
2932 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
2933 pbn_oxsemi_4_4000000 },
2934 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 8 Port V.34 Super-G3 Fax */
2935 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
2936 pbn_oxsemi_8_4000000 },
2938 * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards,
2939 * from skokodyn@yahoo.com
2941 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2942 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0,
2944 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2945 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0,
2947 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2948 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0,
2950 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2951 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0,
2955 * Digitan DS560-558, from jimd@esoft.com
2957 { PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM,
2958 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2962 * Titan Electronic cards
2963 * The 400L and 800L have a custom setup quirk.
2965 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100,
2966 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2968 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200,
2969 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2971 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400,
2972 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2974 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B,
2975 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2977 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L,
2978 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2980 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L,
2981 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2982 pbn_b1_bt_2_921600 },
2983 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L,
2984 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2985 pbn_b0_bt_4_921600 },
2986 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L,
2987 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2988 pbn_b0_bt_8_921600 },
2990 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550,
2991 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2993 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650,
2994 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2996 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850,
2997 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2999 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550,
3000 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3001 pbn_b2_bt_2_921600 },
3002 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650,
3003 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3004 pbn_b2_bt_2_921600 },
3005 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850,
3006 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3007 pbn_b2_bt_2_921600 },
3008 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550,
3009 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3010 pbn_b2_bt_4_921600 },
3011 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650,
3012 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3013 pbn_b2_bt_4_921600 },
3014 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850,
3015 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3016 pbn_b2_bt_4_921600 },
3017 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550,
3018 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3020 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650,
3021 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3023 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850,
3024 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3026 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550,
3027 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3028 pbn_b0_bt_2_921600 },
3029 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650,
3030 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3031 pbn_b0_bt_2_921600 },
3032 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850,
3033 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3034 pbn_b0_bt_2_921600 },
3035 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550,
3036 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3037 pbn_b0_bt_4_921600 },
3038 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650,
3039 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3040 pbn_b0_bt_4_921600 },
3041 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850,
3042 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3043 pbn_b0_bt_4_921600 },
3044 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_550,
3045 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3046 pbn_b0_bt_8_921600 },
3047 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_650,
3048 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3049 pbn_b0_bt_8_921600 },
3050 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_850,
3051 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3052 pbn_b0_bt_8_921600 },
3055 * Computone devices submitted by Doug McNash dmcnash@computone.com
3057 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3058 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4,
3059 0, 0, pbn_computone_4 },
3060 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3061 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8,
3062 0, 0, pbn_computone_8 },
3063 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3064 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6,
3065 0, 0, pbn_computone_6 },
3067 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N,
3068 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3070 { PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889,
3071 PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0,
3072 pbn_b0_bt_1_921600 },
3075 * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org>
3077 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P028,
3078 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3079 pbn_b0_bt_8_115200 },
3080 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P030,
3081 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3082 pbn_b0_bt_8_115200 },
3084 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL,
3085 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3086 pbn_b0_bt_2_115200 },
3087 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A,
3088 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3089 pbn_b0_bt_2_115200 },
3090 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B,
3091 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3092 pbn_b0_bt_2_115200 },
3093 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_A,
3094 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3095 pbn_b0_bt_4_460800 },
3096 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_B,
3097 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3098 pbn_b0_bt_4_460800 },
3099 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS,
3100 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3101 pbn_b0_bt_2_460800 },
3102 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A,
3103 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3104 pbn_b0_bt_2_460800 },
3105 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B,
3106 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3107 pbn_b0_bt_2_460800 },
3108 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL,
3109 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3110 pbn_b0_bt_1_115200 },
3111 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650,
3112 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3113 pbn_b0_bt_1_460800 },
3116 * Korenix Jetcard F0/F1 cards (JC1204, JC1208, JC1404, JC1408).
3117 * Cards are identified by their subsystem vendor IDs, which
3118 * (in hex) match the model number.
3120 * Note that JC140x are RS422/485 cards which require ox950
3121 * ACR = 0x10, and as such are not currently fully supported.
3123 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3124 0x1204, 0x0004, 0, 0,
3126 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3127 0x1208, 0x0004, 0, 0,
3129 /* { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3130 0x1402, 0x0002, 0, 0,
3131 pbn_b0_2_921600 }, */
3132 /* { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3133 0x1404, 0x0004, 0, 0,
3134 pbn_b0_4_921600 }, */
3135 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF1,
3136 0x1208, 0x0004, 0, 0,
3140 * Dell Remote Access Card 4 - Tim_T_Murphy@Dell.com
3142 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RAC4,
3143 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3147 * Dell Remote Access Card III - Tim_T_Murphy@Dell.com
3149 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RACIII,
3150 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3154 * RAStel 2 port modem, gerg@moreton.com.au
3156 { PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT,
3157 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3158 pbn_b2_bt_2_115200 },
3161 * EKF addition for i960 Boards form EKF with serial port
3163 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80960_RP,
3164 0xE4BF, PCI_ANY_ID, 0, 0,
3168 * Xircom Cardbus/Ethernet combos
3170 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM,
3171 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3174 * Xircom RBM56G cardbus modem - Dirk Arnold (temp entry)
3176 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_RBM56G,
3177 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3181 * Untested PCI modems, sent in from various folks...
3185 * Elsa Model 56K PCI Modem, from Andreas Rath <arh@01019freenet.de>
3187 { PCI_VENDOR_ID_ROCKWELL, 0x1004,
3188 0x1048, 0x1500, 0, 0,
3191 { PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
3198 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
3199 PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_RMP3, 0, 0,
3201 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
3202 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3204 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
3205 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3208 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2,
3209 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3211 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM4,
3212 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3214 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8,
3215 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3219 * Exar Corp. XR17C15[248] Dual/Quad/Octal UART
3221 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
3222 PCI_ANY_ID, PCI_ANY_ID,
3224 0, pbn_exar_XR17C152 },
3225 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
3226 PCI_ANY_ID, PCI_ANY_ID,
3228 0, pbn_exar_XR17C154 },
3229 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
3230 PCI_ANY_ID, PCI_ANY_ID,
3232 0, pbn_exar_XR17C158 },
3235 * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke)
3237 { PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560,
3238 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3243 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
3244 PCI_ANY_ID, PCI_ANY_ID,
3246 pbn_b1_bt_1_115200 },
3251 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS200,
3252 PCI_ANY_ID, PCI_ANY_ID, 0, 0, /* 135a.0811 */
3257 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS400,
3258 PCI_ANY_ID, PCI_ANY_ID, 0, 0, /* 135a.0dc0 */
3261 * Perle PCI-RAS cards
3263 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
3264 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4,
3265 0, 0, pbn_b2_4_921600 },
3266 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
3267 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8,
3268 0, 0, pbn_b2_8_921600 },
3271 * Mainpine series cards: Fairly standard layout but fools
3272 * parts of the autodetect in some cases and uses otherwise
3273 * unmatched communications subclasses in the PCI Express case
3276 { /* RockForceDUO */
3277 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3278 PCI_VENDOR_ID_MAINPINE, 0x0200,
3279 0, 0, pbn_b0_2_115200 },
3280 { /* RockForceQUATRO */
3281 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3282 PCI_VENDOR_ID_MAINPINE, 0x0300,
3283 0, 0, pbn_b0_4_115200 },
3284 { /* RockForceDUO+ */
3285 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3286 PCI_VENDOR_ID_MAINPINE, 0x0400,
3287 0, 0, pbn_b0_2_115200 },
3288 { /* RockForceQUATRO+ */
3289 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3290 PCI_VENDOR_ID_MAINPINE, 0x0500,
3291 0, 0, pbn_b0_4_115200 },
3293 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3294 PCI_VENDOR_ID_MAINPINE, 0x0600,
3295 0, 0, pbn_b0_2_115200 },
3297 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3298 PCI_VENDOR_ID_MAINPINE, 0x0700,
3299 0, 0, pbn_b0_4_115200 },
3300 { /* RockForceOCTO+ */
3301 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3302 PCI_VENDOR_ID_MAINPINE, 0x0800,
3303 0, 0, pbn_b0_8_115200 },
3304 { /* RockForceDUO+ */
3305 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3306 PCI_VENDOR_ID_MAINPINE, 0x0C00,
3307 0, 0, pbn_b0_2_115200 },
3308 { /* RockForceQUARTRO+ */
3309 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3310 PCI_VENDOR_ID_MAINPINE, 0x0D00,
3311 0, 0, pbn_b0_4_115200 },
3312 { /* RockForceOCTO+ */
3313 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3314 PCI_VENDOR_ID_MAINPINE, 0x1D00,
3315 0, 0, pbn_b0_8_115200 },
3317 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3318 PCI_VENDOR_ID_MAINPINE, 0x2000,
3319 0, 0, pbn_b0_1_115200 },
3321 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3322 PCI_VENDOR_ID_MAINPINE, 0x2100,
3323 0, 0, pbn_b0_1_115200 },
3325 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3326 PCI_VENDOR_ID_MAINPINE, 0x2200,
3327 0, 0, pbn_b0_2_115200 },
3329 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3330 PCI_VENDOR_ID_MAINPINE, 0x2300,
3331 0, 0, pbn_b0_2_115200 },
3333 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3334 PCI_VENDOR_ID_MAINPINE, 0x2400,
3335 0, 0, pbn_b0_4_115200 },
3337 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3338 PCI_VENDOR_ID_MAINPINE, 0x2500,
3339 0, 0, pbn_b0_4_115200 },
3341 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3342 PCI_VENDOR_ID_MAINPINE, 0x2600,
3343 0, 0, pbn_b0_8_115200 },
3345 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3346 PCI_VENDOR_ID_MAINPINE, 0x2700,
3347 0, 0, pbn_b0_8_115200 },
3348 { /* IQ Express D1 */
3349 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3350 PCI_VENDOR_ID_MAINPINE, 0x3000,
3351 0, 0, pbn_b0_1_115200 },
3352 { /* IQ Express F1 */
3353 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3354 PCI_VENDOR_ID_MAINPINE, 0x3100,
3355 0, 0, pbn_b0_1_115200 },
3356 { /* IQ Express D2 */
3357 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3358 PCI_VENDOR_ID_MAINPINE, 0x3200,
3359 0, 0, pbn_b0_2_115200 },
3360 { /* IQ Express F2 */
3361 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3362 PCI_VENDOR_ID_MAINPINE, 0x3300,
3363 0, 0, pbn_b0_2_115200 },
3364 { /* IQ Express D4 */
3365 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3366 PCI_VENDOR_ID_MAINPINE, 0x3400,
3367 0, 0, pbn_b0_4_115200 },
3368 { /* IQ Express F4 */
3369 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3370 PCI_VENDOR_ID_MAINPINE, 0x3500,
3371 0, 0, pbn_b0_4_115200 },
3372 { /* IQ Express D8 */
3373 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3374 PCI_VENDOR_ID_MAINPINE, 0x3C00,
3375 0, 0, pbn_b0_8_115200 },
3376 { /* IQ Express F8 */
3377 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3378 PCI_VENDOR_ID_MAINPINE, 0x3D00,
3379 0, 0, pbn_b0_8_115200 },
3383 * PA Semi PA6T-1682M on-chip UART
3385 { PCI_VENDOR_ID_PASEMI, 0xa004,
3386 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3390 * National Instruments
3392 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI23216,
3393 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3395 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2328,
3396 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3398 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324,
3399 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3400 pbn_b1_bt_4_115200 },
3401 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322,
3402 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3403 pbn_b1_bt_2_115200 },
3404 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324I,
3405 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3406 pbn_b1_bt_4_115200 },
3407 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322I,
3408 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3409 pbn_b1_bt_2_115200 },
3410 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_23216,
3411 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3413 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2328,
3414 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3416 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2324,
3417 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3418 pbn_b1_bt_4_115200 },
3419 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2322,
3420 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3421 pbn_b1_bt_2_115200 },
3422 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2324,
3423 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3424 pbn_b1_bt_4_115200 },
3425 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2322,
3426 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3427 pbn_b1_bt_2_115200 },
3428 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2322,
3429 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3431 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2322,
3432 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3434 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2324,
3435 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3437 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2324,
3438 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3440 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2328,
3441 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3443 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2328,
3444 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3446 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_23216,
3447 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3449 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_23216,
3450 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3452 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2322,
3453 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3455 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2322,
3456 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3458 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2324,
3459 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3461 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2324,
3462 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3466 * ADDI-DATA GmbH communication cards <info@addi-data.com>
3468 { PCI_VENDOR_ID_ADDIDATA,
3469 PCI_DEVICE_ID_ADDIDATA_APCI7500,
3476 { PCI_VENDOR_ID_ADDIDATA,
3477 PCI_DEVICE_ID_ADDIDATA_APCI7420,
3484 { PCI_VENDOR_ID_ADDIDATA,
3485 PCI_DEVICE_ID_ADDIDATA_APCI7300,
3492 { PCI_VENDOR_ID_ADDIDATA_OLD,
3493 PCI_DEVICE_ID_ADDIDATA_APCI7800,
3500 { PCI_VENDOR_ID_ADDIDATA,
3501 PCI_DEVICE_ID_ADDIDATA_APCI7500_2,
3508 { PCI_VENDOR_ID_ADDIDATA,
3509 PCI_DEVICE_ID_ADDIDATA_APCI7420_2,
3516 { PCI_VENDOR_ID_ADDIDATA,
3517 PCI_DEVICE_ID_ADDIDATA_APCI7300_2,
3524 { PCI_VENDOR_ID_ADDIDATA,
3525 PCI_DEVICE_ID_ADDIDATA_APCI7500_3,
3532 { PCI_VENDOR_ID_ADDIDATA,
3533 PCI_DEVICE_ID_ADDIDATA_APCI7420_3,
3540 { PCI_VENDOR_ID_ADDIDATA,
3541 PCI_DEVICE_ID_ADDIDATA_APCI7300_3,
3548 { PCI_VENDOR_ID_ADDIDATA,
3549 PCI_DEVICE_ID_ADDIDATA_APCI7800_3,
3556 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835,
3557 PCI_VENDOR_ID_IBM, 0x0299,
3558 0, 0, pbn_b0_bt_2_115200 },
3561 * These entries match devices with class COMMUNICATION_SERIAL,
3562 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
3564 { PCI_ANY_ID, PCI_ANY_ID,
3565 PCI_ANY_ID, PCI_ANY_ID,
3566 PCI_CLASS_COMMUNICATION_SERIAL << 8,
3567 0xffff00, pbn_default },
3568 { PCI_ANY_ID, PCI_ANY_ID,
3569 PCI_ANY_ID, PCI_ANY_ID,
3570 PCI_CLASS_COMMUNICATION_MODEM << 8,
3571 0xffff00, pbn_default },
3572 { PCI_ANY_ID, PCI_ANY_ID,
3573 PCI_ANY_ID, PCI_ANY_ID,
3574 PCI_CLASS_COMMUNICATION_MULTISERIAL << 8,
3575 0xffff00, pbn_default },
3579 static struct pci_driver serial_pci_driver = {
3581 .probe = pciserial_init_one,
3582 .remove = __devexit_p(pciserial_remove_one),
3584 .suspend = pciserial_suspend_one,
3585 .resume = pciserial_resume_one,
3587 .id_table = serial_pci_tbl,
3590 static int __init serial8250_pci_init(void)
3592 return pci_register_driver(&serial_pci_driver);
3595 static void __exit serial8250_pci_exit(void)
3597 pci_unregister_driver(&serial_pci_driver);
3600 module_init(serial8250_pci_init);
3601 module_exit(serial8250_pci_exit);
3603 MODULE_LICENSE("GPL");
3604 MODULE_DESCRIPTION("Generic 8250/16x50 PCI serial probe module");
3605 MODULE_DEVICE_TABLE(pci, serial_pci_tbl);