2 * Probe module for 8250/16550-type PCI serial ports.
4 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
6 * Copyright (C) 2001 Russell King, All Rights Reserved.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License.
12 #include <linux/module.h>
13 #include <linux/init.h>
14 #include <linux/pci.h>
15 #include <linux/string.h>
16 #include <linux/kernel.h>
17 #include <linux/slab.h>
18 #include <linux/delay.h>
19 #include <linux/tty.h>
20 #include <linux/serial_core.h>
21 #include <linux/8250_pci.h>
22 #include <linux/bitops.h>
24 #include <asm/byteorder.h>
29 #undef SERIAL_DEBUG_PCI
32 * init function returns:
33 * > 0 - number of ports
34 * = 0 - use board->num_ports
37 struct pci_serial_quirk {
42 int (*probe)(struct pci_dev *dev);
43 int (*init)(struct pci_dev *dev);
44 int (*setup)(struct serial_private *,
45 const struct pciserial_board *,
46 struct uart_port *, int);
47 void (*exit)(struct pci_dev *dev);
50 #define PCI_NUM_BAR_RESOURCES 6
52 struct serial_private {
55 void __iomem *remapped_bar[PCI_NUM_BAR_RESOURCES];
56 struct pci_serial_quirk *quirk;
60 static int pci_default_setup(struct serial_private*,
61 const struct pciserial_board*, struct uart_port*, int);
63 static void moan_device(const char *str, struct pci_dev *dev)
67 "Please send the output of lspci -vv, this\n"
68 "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n"
69 "manufacturer and name of serial board or\n"
70 "modem board to rmk+serial@arm.linux.org.uk.\n",
71 pci_name(dev), str, dev->vendor, dev->device,
72 dev->subsystem_vendor, dev->subsystem_device);
76 setup_port(struct serial_private *priv, struct uart_port *port,
77 int bar, int offset, int regshift)
79 struct pci_dev *dev = priv->dev;
80 unsigned long base, len;
82 if (bar >= PCI_NUM_BAR_RESOURCES)
85 base = pci_resource_start(dev, bar);
87 if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) {
88 len = pci_resource_len(dev, bar);
90 if (!priv->remapped_bar[bar])
91 priv->remapped_bar[bar] = ioremap_nocache(base, len);
92 if (!priv->remapped_bar[bar])
95 port->iotype = UPIO_MEM;
97 port->mapbase = base + offset;
98 port->membase = priv->remapped_bar[bar] + offset;
99 port->regshift = regshift;
101 port->iotype = UPIO_PORT;
102 port->iobase = base + offset;
104 port->membase = NULL;
111 * ADDI-DATA GmbH communication cards <info@addi-data.com>
113 static int addidata_apci7800_setup(struct serial_private *priv,
114 const struct pciserial_board *board,
115 struct uart_port *port, int idx)
117 unsigned int bar = 0, offset = board->first_offset;
118 bar = FL_GET_BASE(board->flags);
121 offset += idx * board->uart_offset;
122 } else if ((idx >= 2) && (idx < 4)) {
124 offset += ((idx - 2) * board->uart_offset);
125 } else if ((idx >= 4) && (idx < 6)) {
127 offset += ((idx - 4) * board->uart_offset);
128 } else if (idx >= 6) {
130 offset += ((idx - 6) * board->uart_offset);
133 return setup_port(priv, port, bar, offset, board->reg_shift);
137 * AFAVLAB uses a different mixture of BARs and offsets
138 * Not that ugly ;) -- HW
141 afavlab_setup(struct serial_private *priv, const struct pciserial_board *board,
142 struct uart_port *port, int idx)
144 unsigned int bar, offset = board->first_offset;
146 bar = FL_GET_BASE(board->flags);
151 offset += (idx - 4) * board->uart_offset;
154 return setup_port(priv, port, bar, offset, board->reg_shift);
158 * HP's Remote Management Console. The Diva chip came in several
159 * different versions. N-class, L2000 and A500 have two Diva chips, each
160 * with 3 UARTs (the third UART on the second chip is unused). Superdome
161 * and Keystone have one Diva chip with 3 UARTs. Some later machines have
162 * one Diva chip, but it has been expanded to 5 UARTs.
164 static int pci_hp_diva_init(struct pci_dev *dev)
168 switch (dev->subsystem_device) {
169 case PCI_DEVICE_ID_HP_DIVA_TOSCA1:
170 case PCI_DEVICE_ID_HP_DIVA_HALFDOME:
171 case PCI_DEVICE_ID_HP_DIVA_KEYSTONE:
172 case PCI_DEVICE_ID_HP_DIVA_EVEREST:
175 case PCI_DEVICE_ID_HP_DIVA_TOSCA2:
178 case PCI_DEVICE_ID_HP_DIVA_MAESTRO:
181 case PCI_DEVICE_ID_HP_DIVA_POWERBAR:
182 case PCI_DEVICE_ID_HP_DIVA_HURRICANE:
191 * HP's Diva chip puts the 4th/5th serial port further out, and
192 * some serial ports are supposed to be hidden on certain models.
195 pci_hp_diva_setup(struct serial_private *priv,
196 const struct pciserial_board *board,
197 struct uart_port *port, int idx)
199 unsigned int offset = board->first_offset;
200 unsigned int bar = FL_GET_BASE(board->flags);
202 switch (priv->dev->subsystem_device) {
203 case PCI_DEVICE_ID_HP_DIVA_MAESTRO:
207 case PCI_DEVICE_ID_HP_DIVA_EVEREST:
217 offset += idx * board->uart_offset;
219 return setup_port(priv, port, bar, offset, board->reg_shift);
223 * Added for EKF Intel i960 serial boards
225 static int pci_inteli960ni_init(struct pci_dev *dev)
227 unsigned long oldval;
229 if (!(dev->subsystem_device & 0x1000))
232 /* is firmware started? */
233 pci_read_config_dword(dev, 0x44, (void *)&oldval);
234 if (oldval == 0x00001000L) { /* RESET value */
235 printk(KERN_DEBUG "Local i960 firmware missing");
242 * Some PCI serial cards using the PLX 9050 PCI interface chip require
243 * that the card interrupt be explicitly enabled or disabled. This
244 * seems to be mainly needed on card using the PLX which also use I/O
247 static int pci_plx9050_init(struct pci_dev *dev)
252 if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0) {
253 moan_device("no memory in bar 0", dev);
258 if (dev->vendor == PCI_VENDOR_ID_PANACOM ||
259 dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS)
262 if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
263 (dev->device == PCI_DEVICE_ID_PLX_ROMULUS))
265 * As the megawolf cards have the int pins active
266 * high, and have 2 UART chips, both ints must be
267 * enabled on the 9050. Also, the UARTS are set in
268 * 16450 mode by default, so we have to enable the
269 * 16C950 'enhanced' mode so that we can use the
274 * enable/disable interrupts
276 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
279 writel(irq_config, p + 0x4c);
282 * Read the register back to ensure that it took effect.
290 static void __devexit pci_plx9050_exit(struct pci_dev *dev)
294 if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0)
300 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
305 * Read the register back to ensure that it took effect.
312 #define NI8420_INT_ENABLE_REG 0x38
313 #define NI8420_INT_ENABLE_BIT 0x2000
315 static void __devexit pci_ni8420_exit(struct pci_dev *dev)
318 unsigned long base, len;
319 unsigned int bar = 0;
321 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
322 moan_device("no memory in bar", dev);
326 base = pci_resource_start(dev, bar);
327 len = pci_resource_len(dev, bar);
328 p = ioremap_nocache(base, len);
332 /* Disable the CPU Interrupt */
333 writel(readl(p + NI8420_INT_ENABLE_REG) & ~(NI8420_INT_ENABLE_BIT),
334 p + NI8420_INT_ENABLE_REG);
340 #define MITE_IOWBSR1 0xc4
341 #define MITE_IOWCR1 0xf4
342 #define MITE_LCIMR1 0x08
343 #define MITE_LCIMR2 0x10
345 #define MITE_LCIMR2_CLR_CPU_IE (1 << 30)
347 static void __devexit pci_ni8430_exit(struct pci_dev *dev)
350 unsigned long base, len;
351 unsigned int bar = 0;
353 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
354 moan_device("no memory in bar", dev);
358 base = pci_resource_start(dev, bar);
359 len = pci_resource_len(dev, bar);
360 p = ioremap_nocache(base, len);
364 /* Disable the CPU Interrupt */
365 writel(MITE_LCIMR2_CLR_CPU_IE, p + MITE_LCIMR2);
369 /* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */
371 sbs_setup(struct serial_private *priv, const struct pciserial_board *board,
372 struct uart_port *port, int idx)
374 unsigned int bar, offset = board->first_offset;
379 /* first four channels map to 0, 0x100, 0x200, 0x300 */
380 offset += idx * board->uart_offset;
381 } else if (idx < 8) {
382 /* last four channels map to 0x1000, 0x1100, 0x1200, 0x1300 */
383 offset += idx * board->uart_offset + 0xC00;
384 } else /* we have only 8 ports on PMC-OCTALPRO */
387 return setup_port(priv, port, bar, offset, board->reg_shift);
391 * This does initialization for PMC OCTALPRO cards:
392 * maps the device memory, resets the UARTs (needed, bc
393 * if the module is removed and inserted again, the card
394 * is in the sleep mode) and enables global interrupt.
397 /* global control register offset for SBS PMC-OctalPro */
398 #define OCT_REG_CR_OFF 0x500
400 static int sbs_init(struct pci_dev *dev)
404 p = pci_ioremap_bar(dev, 0);
408 /* Set bit-4 Control Register (UART RESET) in to reset the uarts */
409 writeb(0x10, p + OCT_REG_CR_OFF);
411 writeb(0x0, p + OCT_REG_CR_OFF);
413 /* Set bit-2 (INTENABLE) of Control Register */
414 writeb(0x4, p + OCT_REG_CR_OFF);
421 * Disables the global interrupt of PMC-OctalPro
424 static void __devexit sbs_exit(struct pci_dev *dev)
428 p = pci_ioremap_bar(dev, 0);
429 /* FIXME: What if resource_len < OCT_REG_CR_OFF */
431 writeb(0, p + OCT_REG_CR_OFF);
436 * SIIG serial cards have an PCI interface chip which also controls
437 * the UART clocking frequency. Each UART can be clocked independently
438 * (except cards equipped with 4 UARTs) and initial clocking settings
439 * are stored in the EEPROM chip. It can cause problems because this
440 * version of serial driver doesn't support differently clocked UART's
441 * on single PCI card. To prevent this, initialization functions set
442 * high frequency clocking for all UART's on given card. It is safe (I
443 * hope) because it doesn't touch EEPROM settings to prevent conflicts
444 * with other OSes (like M$ DOS).
446 * SIIG support added by Andrey Panin <pazke@donpac.ru>, 10/1999
448 * There is two family of SIIG serial cards with different PCI
449 * interface chip and different configuration methods:
450 * - 10x cards have control registers in IO and/or memory space;
451 * - 20x cards have control registers in standard PCI configuration space.
453 * Note: all 10x cards have PCI device ids 0x10..
454 * all 20x cards have PCI device ids 0x20..
456 * There are also Quartet Serial cards which use Oxford Semiconductor
457 * 16954 quad UART PCI chip clocked by 18.432 MHz quartz.
459 * Note: some SIIG cards are probed by the parport_serial object.
462 #define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc)
463 #define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8)
465 static int pci_siig10x_init(struct pci_dev *dev)
470 switch (dev->device & 0xfff8) {
471 case PCI_DEVICE_ID_SIIG_1S_10x: /* 1S */
474 case PCI_DEVICE_ID_SIIG_2S_10x: /* 2S, 2S1P */
477 default: /* 1S1P, 4S */
482 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
486 writew(readw(p + 0x28) & data, p + 0x28);
492 #define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc)
493 #define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc)
495 static int pci_siig20x_init(struct pci_dev *dev)
499 /* Change clock frequency for the first UART. */
500 pci_read_config_byte(dev, 0x6f, &data);
501 pci_write_config_byte(dev, 0x6f, data & 0xef);
503 /* If this card has 2 UART, we have to do the same with second UART. */
504 if (((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S_20x) ||
505 ((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S1P_20x)) {
506 pci_read_config_byte(dev, 0x73, &data);
507 pci_write_config_byte(dev, 0x73, data & 0xef);
512 static int pci_siig_init(struct pci_dev *dev)
514 unsigned int type = dev->device & 0xff00;
517 return pci_siig10x_init(dev);
518 else if (type == 0x2000)
519 return pci_siig20x_init(dev);
521 moan_device("Unknown SIIG card", dev);
525 static int pci_siig_setup(struct serial_private *priv,
526 const struct pciserial_board *board,
527 struct uart_port *port, int idx)
529 unsigned int bar = FL_GET_BASE(board->flags) + idx, offset = 0;
533 offset = (idx - 4) * 8;
536 return setup_port(priv, port, bar, offset, 0);
540 * Timedia has an explosion of boards, and to avoid the PCI table from
541 * growing *huge*, we use this function to collapse some 70 entries
542 * in the PCI table into one, for sanity's and compactness's sake.
544 static const unsigned short timedia_single_port[] = {
545 0x4025, 0x4027, 0x4028, 0x5025, 0x5027, 0
548 static const unsigned short timedia_dual_port[] = {
549 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085,
550 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079,
551 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079,
552 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079,
556 static const unsigned short timedia_quad_port[] = {
557 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157,
558 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159,
559 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056,
563 static const unsigned short timedia_eight_port[] = {
564 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166,
565 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0
568 static const struct timedia_struct {
570 const unsigned short *ids;
572 { 1, timedia_single_port },
573 { 2, timedia_dual_port },
574 { 4, timedia_quad_port },
575 { 8, timedia_eight_port }
578 static int pci_timedia_init(struct pci_dev *dev)
580 const unsigned short *ids;
583 for (i = 0; i < ARRAY_SIZE(timedia_data); i++) {
584 ids = timedia_data[i].ids;
585 for (j = 0; ids[j]; j++)
586 if (dev->subsystem_device == ids[j])
587 return timedia_data[i].num;
593 * Timedia/SUNIX uses a mixture of BARs and offsets
594 * Ugh, this is ugly as all hell --- TYT
597 pci_timedia_setup(struct serial_private *priv,
598 const struct pciserial_board *board,
599 struct uart_port *port, int idx)
601 unsigned int bar = 0, offset = board->first_offset;
608 offset = board->uart_offset;
615 offset = board->uart_offset;
624 return setup_port(priv, port, bar, offset, board->reg_shift);
628 * Some Titan cards are also a little weird
631 titan_400l_800l_setup(struct serial_private *priv,
632 const struct pciserial_board *board,
633 struct uart_port *port, int idx)
635 unsigned int bar, offset = board->first_offset;
646 offset = (idx - 2) * board->uart_offset;
649 return setup_port(priv, port, bar, offset, board->reg_shift);
652 static int pci_xircom_init(struct pci_dev *dev)
658 static int pci_ni8420_init(struct pci_dev *dev)
661 unsigned long base, len;
662 unsigned int bar = 0;
664 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
665 moan_device("no memory in bar", dev);
669 base = pci_resource_start(dev, bar);
670 len = pci_resource_len(dev, bar);
671 p = ioremap_nocache(base, len);
675 /* Enable CPU Interrupt */
676 writel(readl(p + NI8420_INT_ENABLE_REG) | NI8420_INT_ENABLE_BIT,
677 p + NI8420_INT_ENABLE_REG);
683 #define MITE_IOWBSR1_WSIZE 0xa
684 #define MITE_IOWBSR1_WIN_OFFSET 0x800
685 #define MITE_IOWBSR1_WENAB (1 << 7)
686 #define MITE_LCIMR1_IO_IE_0 (1 << 24)
687 #define MITE_LCIMR2_SET_CPU_IE (1 << 31)
688 #define MITE_IOWCR1_RAMSEL_MASK 0xfffffffe
690 static int pci_ni8430_init(struct pci_dev *dev)
693 unsigned long base, len;
695 unsigned int bar = 0;
697 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
698 moan_device("no memory in bar", dev);
702 base = pci_resource_start(dev, bar);
703 len = pci_resource_len(dev, bar);
704 p = ioremap_nocache(base, len);
708 /* Set device window address and size in BAR0 */
709 device_window = ((base + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00)
710 | MITE_IOWBSR1_WENAB | MITE_IOWBSR1_WSIZE;
711 writel(device_window, p + MITE_IOWBSR1);
713 /* Set window access to go to RAMSEL IO address space */
714 writel((readl(p + MITE_IOWCR1) & MITE_IOWCR1_RAMSEL_MASK),
717 /* Enable IO Bus Interrupt 0 */
718 writel(MITE_LCIMR1_IO_IE_0, p + MITE_LCIMR1);
720 /* Enable CPU Interrupt */
721 writel(MITE_LCIMR2_SET_CPU_IE, p + MITE_LCIMR2);
727 /* UART Port Control Register */
728 #define NI8430_PORTCON 0x0f
729 #define NI8430_PORTCON_TXVR_ENABLE (1 << 3)
732 pci_ni8430_setup(struct serial_private *priv,
733 const struct pciserial_board *board,
734 struct uart_port *port, int idx)
737 unsigned long base, len;
738 unsigned int bar, offset = board->first_offset;
740 if (idx >= board->num_ports)
743 bar = FL_GET_BASE(board->flags);
744 offset += idx * board->uart_offset;
746 base = pci_resource_start(priv->dev, bar);
747 len = pci_resource_len(priv->dev, bar);
748 p = ioremap_nocache(base, len);
750 /* enable the transciever */
751 writeb(readb(p + offset + NI8430_PORTCON) | NI8430_PORTCON_TXVR_ENABLE,
752 p + offset + NI8430_PORTCON);
756 return setup_port(priv, port, bar, offset, board->reg_shift);
759 static int pci_netmos_9900_setup(struct serial_private *priv,
760 const struct pciserial_board *board,
761 struct uart_port *port, int idx)
765 if ((priv->dev->subsystem_device & 0xff00) == 0x3000) {
766 /* netmos apparently orders BARs by datasheet layout, so serial
767 * ports get BARs 0 and 3 (or 1 and 4 for memmapped)
771 return setup_port(priv, port, bar, 0, board->reg_shift);
773 return pci_default_setup(priv, board, port, idx);
777 /* the 99xx series comes with a range of device IDs and a variety
780 * 9900 has varying capabilities and can cascade to sub-controllers
781 * (cascading should be purely internal)
782 * 9904 is hardwired with 4 serial ports
783 * 9912 and 9922 are hardwired with 2 serial ports
785 static int pci_netmos_9900_numports(struct pci_dev *dev)
787 unsigned int c = dev->class;
789 unsigned short sub_serports;
795 } else if ((pi == 0) &&
796 (dev->device == PCI_DEVICE_ID_NETMOS_9900)) {
797 /* two possibilities: 0x30ps encodes number of parallel and
798 * serial ports, or 0x1000 indicates *something*. This is not
799 * immediately obvious, since the 2s1p+4s configuration seems
800 * to offer all functionality on functions 0..2, while still
801 * advertising the same function 3 as the 4s+2s1p config.
803 sub_serports = dev->subsystem_device & 0xf;
804 if (sub_serports > 0) {
807 printk(KERN_NOTICE "NetMos/Mostech serial driver ignoring port on ambiguous config.\n");
812 moan_device("unknown NetMos/Mostech program interface", dev);
816 static int pci_netmos_init(struct pci_dev *dev)
818 /* subdevice 0x00PS means <P> parallel, <S> serial */
819 unsigned int num_serial = dev->subsystem_device & 0xf;
821 if ((dev->device == PCI_DEVICE_ID_NETMOS_9901) ||
822 (dev->device == PCI_DEVICE_ID_NETMOS_9865))
825 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
826 dev->subsystem_device == 0x0299)
829 switch (dev->device) { /* FALLTHROUGH on all */
830 case PCI_DEVICE_ID_NETMOS_9904:
831 case PCI_DEVICE_ID_NETMOS_9912:
832 case PCI_DEVICE_ID_NETMOS_9922:
833 case PCI_DEVICE_ID_NETMOS_9900:
834 num_serial = pci_netmos_9900_numports(dev);
838 if (num_serial == 0 ) {
839 moan_device("unknown NetMos/Mostech device", dev);
850 * These chips are available with optionally one parallel port and up to
851 * two serial ports. Unfortunately they all have the same product id.
853 * Basic configuration is done over a region of 32 I/O ports. The base
854 * ioport is called INTA or INTC, depending on docs/other drivers.
856 * The region of the 32 I/O ports is configured in POSIO0R...
860 #define ITE_887x_MISCR 0x9c
861 #define ITE_887x_INTCBAR 0x78
862 #define ITE_887x_UARTBAR 0x7c
863 #define ITE_887x_PS0BAR 0x10
864 #define ITE_887x_POSIO0 0x60
867 #define ITE_887x_IOSIZE 32
868 /* I/O space size (bits 26-24; 8 bytes = 011b) */
869 #define ITE_887x_POSIO_IOSIZE_8 (3 << 24)
870 /* I/O space size (bits 26-24; 32 bytes = 101b) */
871 #define ITE_887x_POSIO_IOSIZE_32 (5 << 24)
872 /* Decoding speed (1 = slow, 2 = medium, 3 = fast) */
873 #define ITE_887x_POSIO_SPEED (3 << 29)
874 /* enable IO_Space bit */
875 #define ITE_887x_POSIO_ENABLE (1 << 31)
877 static int pci_ite887x_init(struct pci_dev *dev)
879 /* inta_addr are the configuration addresses of the ITE */
880 static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0,
883 struct resource *iobase = NULL;
884 u32 miscr, uartbar, ioport;
886 /* search for the base-ioport */
888 while (inta_addr[i] && iobase == NULL) {
889 iobase = request_region(inta_addr[i], ITE_887x_IOSIZE,
891 if (iobase != NULL) {
892 /* write POSIO0R - speed | size | ioport */
893 pci_write_config_dword(dev, ITE_887x_POSIO0,
894 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
895 ITE_887x_POSIO_IOSIZE_32 | inta_addr[i]);
896 /* write INTCBAR - ioport */
897 pci_write_config_dword(dev, ITE_887x_INTCBAR,
899 ret = inb(inta_addr[i]);
901 /* ioport connected */
904 release_region(iobase->start, ITE_887x_IOSIZE);
911 printk(KERN_ERR "ite887x: could not find iobase\n");
915 /* start of undocumented type checking (see parport_pc.c) */
916 type = inb(iobase->start + 0x18) & 0x0f;
919 case 0x2: /* ITE8871 (1P) */
920 case 0xa: /* ITE8875 (1P) */
923 case 0xe: /* ITE8872 (2S1P) */
926 case 0x6: /* ITE8873 (1S) */
929 case 0x8: /* ITE8874 (2S) */
933 moan_device("Unknown ITE887x", dev);
937 /* configure all serial ports */
938 for (i = 0; i < ret; i++) {
939 /* read the I/O port from the device */
940 pci_read_config_dword(dev, ITE_887x_PS0BAR + (0x4 * (i + 1)),
942 ioport &= 0x0000FF00; /* the actual base address */
943 pci_write_config_dword(dev, ITE_887x_POSIO0 + (0x4 * (i + 1)),
944 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
945 ITE_887x_POSIO_IOSIZE_8 | ioport);
947 /* write the ioport to the UARTBAR */
948 pci_read_config_dword(dev, ITE_887x_UARTBAR, &uartbar);
949 uartbar &= ~(0xffff << (16 * i)); /* clear half the reg */
950 uartbar |= (ioport << (16 * i)); /* set the ioport */
951 pci_write_config_dword(dev, ITE_887x_UARTBAR, uartbar);
953 /* get current config */
954 pci_read_config_dword(dev, ITE_887x_MISCR, &miscr);
955 /* disable interrupts (UARTx_Routing[3:0]) */
956 miscr &= ~(0xf << (12 - 4 * i));
957 /* activate the UART (UARTx_En) */
958 miscr |= 1 << (23 - i);
959 /* write new config with activated UART */
960 pci_write_config_dword(dev, ITE_887x_MISCR, miscr);
964 /* the device has no UARTs if we get here */
965 release_region(iobase->start, ITE_887x_IOSIZE);
971 static void __devexit pci_ite887x_exit(struct pci_dev *dev)
974 /* the ioport is bit 0-15 in POSIO0R */
975 pci_read_config_dword(dev, ITE_887x_POSIO0, &ioport);
977 release_region(ioport, ITE_887x_IOSIZE);
981 * Oxford Semiconductor Inc.
982 * Check that device is part of the Tornado range of devices, then determine
983 * the number of ports available on the device.
985 static int pci_oxsemi_tornado_init(struct pci_dev *dev)
988 unsigned long deviceID;
989 unsigned int number_uarts = 0;
991 /* OxSemi Tornado devices are all 0xCxxx */
992 if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
993 (dev->device & 0xF000) != 0xC000)
996 p = pci_iomap(dev, 0, 5);
1000 deviceID = ioread32(p);
1001 /* Tornado device */
1002 if (deviceID == 0x07000200) {
1003 number_uarts = ioread8(p + 4);
1005 "%d ports detected on Oxford PCI Express device\n",
1008 pci_iounmap(dev, p);
1009 return number_uarts;
1013 pci_default_setup(struct serial_private *priv,
1014 const struct pciserial_board *board,
1015 struct uart_port *port, int idx)
1017 unsigned int bar, offset = board->first_offset, maxnr;
1019 bar = FL_GET_BASE(board->flags);
1020 if (board->flags & FL_BASE_BARS)
1023 offset += idx * board->uart_offset;
1025 maxnr = (pci_resource_len(priv->dev, bar) - board->first_offset) >>
1026 (board->reg_shift + 3);
1028 if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr)
1031 return setup_port(priv, port, bar, offset, board->reg_shift);
1035 ce4100_serial_setup(struct serial_private *priv,
1036 const struct pciserial_board *board,
1037 struct uart_port *port, int idx)
1041 ret = setup_port(priv, port, 0, 0, board->reg_shift);
1042 port->iotype = UPIO_MEM32;
1043 port->type = PORT_XSCALE;
1044 port->flags = (port->flags | UPF_FIXED_PORT | UPF_FIXED_TYPE);
1051 pci_omegapci_setup(struct serial_private *priv,
1052 struct pciserial_board *board,
1053 struct uart_port *port, int idx)
1055 return setup_port(priv, port, 2, idx * 8, 0);
1058 static int skip_tx_en_setup(struct serial_private *priv,
1059 const struct pciserial_board *board,
1060 struct uart_port *port, int idx)
1062 port->flags |= UPF_NO_TXEN_TEST;
1063 printk(KERN_DEBUG "serial8250: skipping TxEn test for device "
1064 "[%04x:%04x] subsystem [%04x:%04x]\n",
1067 priv->dev->subsystem_vendor,
1068 priv->dev->subsystem_device);
1070 return pci_default_setup(priv, board, port, idx);
1073 /* This should be in linux/pci_ids.h */
1074 #define PCI_VENDOR_ID_SBSMODULARIO 0x124B
1075 #define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B
1076 #define PCI_DEVICE_ID_OCTPRO 0x0001
1077 #define PCI_SUBDEVICE_ID_OCTPRO232 0x0108
1078 #define PCI_SUBDEVICE_ID_OCTPRO422 0x0208
1079 #define PCI_SUBDEVICE_ID_POCTAL232 0x0308
1080 #define PCI_SUBDEVICE_ID_POCTAL422 0x0408
1081 #define PCI_VENDOR_ID_ADVANTECH 0x13fe
1082 #define PCI_DEVICE_ID_INTEL_CE4100_UART 0x2e66
1083 #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
1084 #define PCI_DEVICE_ID_TITAN_200I 0x8028
1085 #define PCI_DEVICE_ID_TITAN_400I 0x8048
1086 #define PCI_DEVICE_ID_TITAN_800I 0x8088
1087 #define PCI_DEVICE_ID_TITAN_800EH 0xA007
1088 #define PCI_DEVICE_ID_TITAN_800EHB 0xA008
1089 #define PCI_DEVICE_ID_TITAN_400EH 0xA009
1090 #define PCI_DEVICE_ID_TITAN_100E 0xA010
1091 #define PCI_DEVICE_ID_TITAN_200E 0xA012
1092 #define PCI_DEVICE_ID_TITAN_400E 0xA013
1093 #define PCI_DEVICE_ID_TITAN_800E 0xA014
1094 #define PCI_DEVICE_ID_TITAN_200EI 0xA016
1095 #define PCI_DEVICE_ID_TITAN_200EISI 0xA017
1096 #define PCI_DEVICE_ID_OXSEMI_16PCI958 0x9538
1097 #define PCIE_DEVICE_ID_NEO_2_OX_IBM 0x00F6
1098 #define PCI_DEVICE_ID_PLX_CRONYX_OMEGA 0xc001
1100 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
1101 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
1104 * Master list of serial port init/setup/exit quirks.
1105 * This does not describe the general nature of the port.
1106 * (ie, baud base, number and location of ports, etc)
1108 * This list is ordered alphabetically by vendor then device.
1109 * Specific entries must come before more generic entries.
1111 static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
1113 * ADDI-DATA GmbH communication cards <info@addi-data.com>
1116 .vendor = PCI_VENDOR_ID_ADDIDATA_OLD,
1117 .device = PCI_DEVICE_ID_ADDIDATA_APCI7800,
1118 .subvendor = PCI_ANY_ID,
1119 .subdevice = PCI_ANY_ID,
1120 .setup = addidata_apci7800_setup,
1123 * AFAVLAB cards - these may be called via parport_serial
1124 * It is not clear whether this applies to all products.
1127 .vendor = PCI_VENDOR_ID_AFAVLAB,
1128 .device = PCI_ANY_ID,
1129 .subvendor = PCI_ANY_ID,
1130 .subdevice = PCI_ANY_ID,
1131 .setup = afavlab_setup,
1137 .vendor = PCI_VENDOR_ID_HP,
1138 .device = PCI_DEVICE_ID_HP_DIVA,
1139 .subvendor = PCI_ANY_ID,
1140 .subdevice = PCI_ANY_ID,
1141 .init = pci_hp_diva_init,
1142 .setup = pci_hp_diva_setup,
1148 .vendor = PCI_VENDOR_ID_INTEL,
1149 .device = PCI_DEVICE_ID_INTEL_80960_RP,
1150 .subvendor = 0xe4bf,
1151 .subdevice = PCI_ANY_ID,
1152 .init = pci_inteli960ni_init,
1153 .setup = pci_default_setup,
1156 .vendor = PCI_VENDOR_ID_INTEL,
1157 .device = PCI_DEVICE_ID_INTEL_8257X_SOL,
1158 .subvendor = PCI_ANY_ID,
1159 .subdevice = PCI_ANY_ID,
1160 .setup = skip_tx_en_setup,
1163 .vendor = PCI_VENDOR_ID_INTEL,
1164 .device = PCI_DEVICE_ID_INTEL_82573L_SOL,
1165 .subvendor = PCI_ANY_ID,
1166 .subdevice = PCI_ANY_ID,
1167 .setup = skip_tx_en_setup,
1170 .vendor = PCI_VENDOR_ID_INTEL,
1171 .device = PCI_DEVICE_ID_INTEL_82573E_SOL,
1172 .subvendor = PCI_ANY_ID,
1173 .subdevice = PCI_ANY_ID,
1174 .setup = skip_tx_en_setup,
1177 .vendor = PCI_VENDOR_ID_INTEL,
1178 .device = PCI_DEVICE_ID_INTEL_CE4100_UART,
1179 .subvendor = PCI_ANY_ID,
1180 .subdevice = PCI_ANY_ID,
1181 .setup = ce4100_serial_setup,
1187 .vendor = PCI_VENDOR_ID_ITE,
1188 .device = PCI_DEVICE_ID_ITE_8872,
1189 .subvendor = PCI_ANY_ID,
1190 .subdevice = PCI_ANY_ID,
1191 .init = pci_ite887x_init,
1192 .setup = pci_default_setup,
1193 .exit = __devexit_p(pci_ite887x_exit),
1196 * National Instruments
1199 .vendor = PCI_VENDOR_ID_NI,
1200 .device = PCI_DEVICE_ID_NI_PCI23216,
1201 .subvendor = PCI_ANY_ID,
1202 .subdevice = PCI_ANY_ID,
1203 .init = pci_ni8420_init,
1204 .setup = pci_default_setup,
1205 .exit = __devexit_p(pci_ni8420_exit),
1208 .vendor = PCI_VENDOR_ID_NI,
1209 .device = PCI_DEVICE_ID_NI_PCI2328,
1210 .subvendor = PCI_ANY_ID,
1211 .subdevice = PCI_ANY_ID,
1212 .init = pci_ni8420_init,
1213 .setup = pci_default_setup,
1214 .exit = __devexit_p(pci_ni8420_exit),
1217 .vendor = PCI_VENDOR_ID_NI,
1218 .device = PCI_DEVICE_ID_NI_PCI2324,
1219 .subvendor = PCI_ANY_ID,
1220 .subdevice = PCI_ANY_ID,
1221 .init = pci_ni8420_init,
1222 .setup = pci_default_setup,
1223 .exit = __devexit_p(pci_ni8420_exit),
1226 .vendor = PCI_VENDOR_ID_NI,
1227 .device = PCI_DEVICE_ID_NI_PCI2322,
1228 .subvendor = PCI_ANY_ID,
1229 .subdevice = PCI_ANY_ID,
1230 .init = pci_ni8420_init,
1231 .setup = pci_default_setup,
1232 .exit = __devexit_p(pci_ni8420_exit),
1235 .vendor = PCI_VENDOR_ID_NI,
1236 .device = PCI_DEVICE_ID_NI_PCI2324I,
1237 .subvendor = PCI_ANY_ID,
1238 .subdevice = PCI_ANY_ID,
1239 .init = pci_ni8420_init,
1240 .setup = pci_default_setup,
1241 .exit = __devexit_p(pci_ni8420_exit),
1244 .vendor = PCI_VENDOR_ID_NI,
1245 .device = PCI_DEVICE_ID_NI_PCI2322I,
1246 .subvendor = PCI_ANY_ID,
1247 .subdevice = PCI_ANY_ID,
1248 .init = pci_ni8420_init,
1249 .setup = pci_default_setup,
1250 .exit = __devexit_p(pci_ni8420_exit),
1253 .vendor = PCI_VENDOR_ID_NI,
1254 .device = PCI_DEVICE_ID_NI_PXI8420_23216,
1255 .subvendor = PCI_ANY_ID,
1256 .subdevice = PCI_ANY_ID,
1257 .init = pci_ni8420_init,
1258 .setup = pci_default_setup,
1259 .exit = __devexit_p(pci_ni8420_exit),
1262 .vendor = PCI_VENDOR_ID_NI,
1263 .device = PCI_DEVICE_ID_NI_PXI8420_2328,
1264 .subvendor = PCI_ANY_ID,
1265 .subdevice = PCI_ANY_ID,
1266 .init = pci_ni8420_init,
1267 .setup = pci_default_setup,
1268 .exit = __devexit_p(pci_ni8420_exit),
1271 .vendor = PCI_VENDOR_ID_NI,
1272 .device = PCI_DEVICE_ID_NI_PXI8420_2324,
1273 .subvendor = PCI_ANY_ID,
1274 .subdevice = PCI_ANY_ID,
1275 .init = pci_ni8420_init,
1276 .setup = pci_default_setup,
1277 .exit = __devexit_p(pci_ni8420_exit),
1280 .vendor = PCI_VENDOR_ID_NI,
1281 .device = PCI_DEVICE_ID_NI_PXI8420_2322,
1282 .subvendor = PCI_ANY_ID,
1283 .subdevice = PCI_ANY_ID,
1284 .init = pci_ni8420_init,
1285 .setup = pci_default_setup,
1286 .exit = __devexit_p(pci_ni8420_exit),
1289 .vendor = PCI_VENDOR_ID_NI,
1290 .device = PCI_DEVICE_ID_NI_PXI8422_2324,
1291 .subvendor = PCI_ANY_ID,
1292 .subdevice = PCI_ANY_ID,
1293 .init = pci_ni8420_init,
1294 .setup = pci_default_setup,
1295 .exit = __devexit_p(pci_ni8420_exit),
1298 .vendor = PCI_VENDOR_ID_NI,
1299 .device = PCI_DEVICE_ID_NI_PXI8422_2322,
1300 .subvendor = PCI_ANY_ID,
1301 .subdevice = PCI_ANY_ID,
1302 .init = pci_ni8420_init,
1303 .setup = pci_default_setup,
1304 .exit = __devexit_p(pci_ni8420_exit),
1307 .vendor = PCI_VENDOR_ID_NI,
1308 .device = PCI_ANY_ID,
1309 .subvendor = PCI_ANY_ID,
1310 .subdevice = PCI_ANY_ID,
1311 .init = pci_ni8430_init,
1312 .setup = pci_ni8430_setup,
1313 .exit = __devexit_p(pci_ni8430_exit),
1319 .vendor = PCI_VENDOR_ID_PANACOM,
1320 .device = PCI_DEVICE_ID_PANACOM_QUADMODEM,
1321 .subvendor = PCI_ANY_ID,
1322 .subdevice = PCI_ANY_ID,
1323 .init = pci_plx9050_init,
1324 .setup = pci_default_setup,
1325 .exit = __devexit_p(pci_plx9050_exit),
1328 .vendor = PCI_VENDOR_ID_PANACOM,
1329 .device = PCI_DEVICE_ID_PANACOM_DUALMODEM,
1330 .subvendor = PCI_ANY_ID,
1331 .subdevice = PCI_ANY_ID,
1332 .init = pci_plx9050_init,
1333 .setup = pci_default_setup,
1334 .exit = __devexit_p(pci_plx9050_exit),
1340 .vendor = PCI_VENDOR_ID_PLX,
1341 .device = PCI_DEVICE_ID_PLX_9030,
1342 .subvendor = PCI_SUBVENDOR_ID_PERLE,
1343 .subdevice = PCI_ANY_ID,
1344 .setup = pci_default_setup,
1347 .vendor = PCI_VENDOR_ID_PLX,
1348 .device = PCI_DEVICE_ID_PLX_9050,
1349 .subvendor = PCI_SUBVENDOR_ID_EXSYS,
1350 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
1351 .init = pci_plx9050_init,
1352 .setup = pci_default_setup,
1353 .exit = __devexit_p(pci_plx9050_exit),
1356 .vendor = PCI_VENDOR_ID_PLX,
1357 .device = PCI_DEVICE_ID_PLX_9050,
1358 .subvendor = PCI_SUBVENDOR_ID_KEYSPAN,
1359 .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2,
1360 .init = pci_plx9050_init,
1361 .setup = pci_default_setup,
1362 .exit = __devexit_p(pci_plx9050_exit),
1365 .vendor = PCI_VENDOR_ID_PLX,
1366 .device = PCI_DEVICE_ID_PLX_9050,
1367 .subvendor = PCI_VENDOR_ID_PLX,
1368 .subdevice = PCI_SUBDEVICE_ID_UNKNOWN_0x1584,
1369 .init = pci_plx9050_init,
1370 .setup = pci_default_setup,
1371 .exit = __devexit_p(pci_plx9050_exit),
1374 .vendor = PCI_VENDOR_ID_PLX,
1375 .device = PCI_DEVICE_ID_PLX_ROMULUS,
1376 .subvendor = PCI_VENDOR_ID_PLX,
1377 .subdevice = PCI_DEVICE_ID_PLX_ROMULUS,
1378 .init = pci_plx9050_init,
1379 .setup = pci_default_setup,
1380 .exit = __devexit_p(pci_plx9050_exit),
1383 * SBS Technologies, Inc., PMC-OCTALPRO 232
1386 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1387 .device = PCI_DEVICE_ID_OCTPRO,
1388 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1389 .subdevice = PCI_SUBDEVICE_ID_OCTPRO232,
1392 .exit = __devexit_p(sbs_exit),
1395 * SBS Technologies, Inc., PMC-OCTALPRO 422
1398 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1399 .device = PCI_DEVICE_ID_OCTPRO,
1400 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1401 .subdevice = PCI_SUBDEVICE_ID_OCTPRO422,
1404 .exit = __devexit_p(sbs_exit),
1407 * SBS Technologies, Inc., P-Octal 232
1410 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1411 .device = PCI_DEVICE_ID_OCTPRO,
1412 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1413 .subdevice = PCI_SUBDEVICE_ID_POCTAL232,
1416 .exit = __devexit_p(sbs_exit),
1419 * SBS Technologies, Inc., P-Octal 422
1422 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1423 .device = PCI_DEVICE_ID_OCTPRO,
1424 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1425 .subdevice = PCI_SUBDEVICE_ID_POCTAL422,
1428 .exit = __devexit_p(sbs_exit),
1431 * SIIG cards - these may be called via parport_serial
1434 .vendor = PCI_VENDOR_ID_SIIG,
1435 .device = PCI_ANY_ID,
1436 .subvendor = PCI_ANY_ID,
1437 .subdevice = PCI_ANY_ID,
1438 .init = pci_siig_init,
1439 .setup = pci_siig_setup,
1445 .vendor = PCI_VENDOR_ID_TITAN,
1446 .device = PCI_DEVICE_ID_TITAN_400L,
1447 .subvendor = PCI_ANY_ID,
1448 .subdevice = PCI_ANY_ID,
1449 .setup = titan_400l_800l_setup,
1452 .vendor = PCI_VENDOR_ID_TITAN,
1453 .device = PCI_DEVICE_ID_TITAN_800L,
1454 .subvendor = PCI_ANY_ID,
1455 .subdevice = PCI_ANY_ID,
1456 .setup = titan_400l_800l_setup,
1462 .vendor = PCI_VENDOR_ID_TIMEDIA,
1463 .device = PCI_DEVICE_ID_TIMEDIA_1889,
1464 .subvendor = PCI_VENDOR_ID_TIMEDIA,
1465 .subdevice = PCI_ANY_ID,
1466 .init = pci_timedia_init,
1467 .setup = pci_timedia_setup,
1470 .vendor = PCI_VENDOR_ID_TIMEDIA,
1471 .device = PCI_ANY_ID,
1472 .subvendor = PCI_ANY_ID,
1473 .subdevice = PCI_ANY_ID,
1474 .setup = pci_timedia_setup,
1480 .vendor = PCI_VENDOR_ID_XIRCOM,
1481 .device = PCI_DEVICE_ID_XIRCOM_X3201_MDM,
1482 .subvendor = PCI_ANY_ID,
1483 .subdevice = PCI_ANY_ID,
1484 .init = pci_xircom_init,
1485 .setup = pci_default_setup,
1488 * Netmos cards - these may be called via parport_serial
1491 .vendor = PCI_VENDOR_ID_NETMOS,
1492 .device = PCI_ANY_ID,
1493 .subvendor = PCI_ANY_ID,
1494 .subdevice = PCI_ANY_ID,
1495 .init = pci_netmos_init,
1496 .setup = pci_netmos_9900_setup,
1499 * For Oxford Semiconductor Tornado based devices
1502 .vendor = PCI_VENDOR_ID_OXSEMI,
1503 .device = PCI_ANY_ID,
1504 .subvendor = PCI_ANY_ID,
1505 .subdevice = PCI_ANY_ID,
1506 .init = pci_oxsemi_tornado_init,
1507 .setup = pci_default_setup,
1510 .vendor = PCI_VENDOR_ID_MAINPINE,
1511 .device = PCI_ANY_ID,
1512 .subvendor = PCI_ANY_ID,
1513 .subdevice = PCI_ANY_ID,
1514 .init = pci_oxsemi_tornado_init,
1515 .setup = pci_default_setup,
1518 .vendor = PCI_VENDOR_ID_DIGI,
1519 .device = PCIE_DEVICE_ID_NEO_2_OX_IBM,
1520 .subvendor = PCI_SUBVENDOR_ID_IBM,
1521 .subdevice = PCI_ANY_ID,
1522 .init = pci_oxsemi_tornado_init,
1523 .setup = pci_default_setup,
1526 * Cronyx Omega PCI (PLX-chip based)
1529 .vendor = PCI_VENDOR_ID_PLX,
1530 .device = PCI_DEVICE_ID_PLX_CRONYX_OMEGA,
1531 .subvendor = PCI_ANY_ID,
1532 .subdevice = PCI_ANY_ID,
1533 .setup = pci_omegapci_setup,
1536 * Default "match everything" terminator entry
1539 .vendor = PCI_ANY_ID,
1540 .device = PCI_ANY_ID,
1541 .subvendor = PCI_ANY_ID,
1542 .subdevice = PCI_ANY_ID,
1543 .setup = pci_default_setup,
1547 static inline int quirk_id_matches(u32 quirk_id, u32 dev_id)
1549 return quirk_id == PCI_ANY_ID || quirk_id == dev_id;
1552 static struct pci_serial_quirk *find_quirk(struct pci_dev *dev)
1554 struct pci_serial_quirk *quirk;
1556 for (quirk = pci_serial_quirks; ; quirk++)
1557 if (quirk_id_matches(quirk->vendor, dev->vendor) &&
1558 quirk_id_matches(quirk->device, dev->device) &&
1559 quirk_id_matches(quirk->subvendor, dev->subsystem_vendor) &&
1560 quirk_id_matches(quirk->subdevice, dev->subsystem_device))
1565 static inline int get_pci_irq(struct pci_dev *dev,
1566 const struct pciserial_board *board)
1568 if (board->flags & FL_NOIRQ)
1575 * This is the configuration table for all of the PCI serial boards
1576 * which we support. It is directly indexed by the pci_board_num_t enum
1577 * value, which is encoded in the pci_device_id PCI probe table's
1578 * driver_data member.
1580 * The makeup of these names are:
1581 * pbn_bn{_bt}_n_baud{_offsetinhex}
1583 * bn = PCI BAR number
1584 * bt = Index using PCI BARs
1585 * n = number of serial ports
1587 * offsetinhex = offset for each sequential port (in hex)
1589 * This table is sorted by (in order): bn, bt, baud, offsetindex, n.
1591 * Please note: in theory if n = 1, _bt infix should make no difference.
1592 * ie, pbn_b0_1_115200 is the same as pbn_b0_bt_1_115200
1594 enum pci_board_num_t {
1614 pbn_b0_2_1843200_200,
1615 pbn_b0_4_1843200_200,
1616 pbn_b0_8_1843200_200,
1690 * Board-specific versions.
1698 pbn_oxsemi_1_4000000,
1699 pbn_oxsemi_2_4000000,
1700 pbn_oxsemi_4_4000000,
1701 pbn_oxsemi_8_4000000,
1711 pbn_exar_ibm_saturn,
1717 pbn_ADDIDATA_PCIe_1_3906250,
1718 pbn_ADDIDATA_PCIe_2_3906250,
1719 pbn_ADDIDATA_PCIe_4_3906250,
1720 pbn_ADDIDATA_PCIe_8_3906250,
1721 pbn_ce4100_1_115200,
1723 pbn_NETMOS9900_2s_115200,
1727 * uart_offset - the space between channels
1728 * reg_shift - describes how the UART registers are mapped
1729 * to PCI memory by the card.
1730 * For example IER register on SBS, Inc. PMC-OctPro is located at
1731 * offset 0x10 from the UART base, while UART_IER is defined as 1
1732 * in include/linux/serial_reg.h,
1733 * see first lines of serial_in() and serial_out() in 8250.c
1736 static struct pciserial_board pci_boards[] __devinitdata = {
1740 .base_baud = 115200,
1743 [pbn_b0_1_115200] = {
1746 .base_baud = 115200,
1749 [pbn_b0_2_115200] = {
1752 .base_baud = 115200,
1755 [pbn_b0_4_115200] = {
1758 .base_baud = 115200,
1761 [pbn_b0_5_115200] = {
1764 .base_baud = 115200,
1767 [pbn_b0_8_115200] = {
1770 .base_baud = 115200,
1773 [pbn_b0_1_921600] = {
1776 .base_baud = 921600,
1779 [pbn_b0_2_921600] = {
1782 .base_baud = 921600,
1785 [pbn_b0_4_921600] = {
1788 .base_baud = 921600,
1792 [pbn_b0_2_1130000] = {
1795 .base_baud = 1130000,
1799 [pbn_b0_4_1152000] = {
1802 .base_baud = 1152000,
1806 [pbn_b0_2_1843200] = {
1809 .base_baud = 1843200,
1812 [pbn_b0_4_1843200] = {
1815 .base_baud = 1843200,
1819 [pbn_b0_2_1843200_200] = {
1822 .base_baud = 1843200,
1823 .uart_offset = 0x200,
1825 [pbn_b0_4_1843200_200] = {
1828 .base_baud = 1843200,
1829 .uart_offset = 0x200,
1831 [pbn_b0_8_1843200_200] = {
1834 .base_baud = 1843200,
1835 .uart_offset = 0x200,
1837 [pbn_b0_1_4000000] = {
1840 .base_baud = 4000000,
1844 [pbn_b0_bt_1_115200] = {
1845 .flags = FL_BASE0|FL_BASE_BARS,
1847 .base_baud = 115200,
1850 [pbn_b0_bt_2_115200] = {
1851 .flags = FL_BASE0|FL_BASE_BARS,
1853 .base_baud = 115200,
1856 [pbn_b0_bt_4_115200] = {
1857 .flags = FL_BASE0|FL_BASE_BARS,
1859 .base_baud = 115200,
1862 [pbn_b0_bt_8_115200] = {
1863 .flags = FL_BASE0|FL_BASE_BARS,
1865 .base_baud = 115200,
1869 [pbn_b0_bt_1_460800] = {
1870 .flags = FL_BASE0|FL_BASE_BARS,
1872 .base_baud = 460800,
1875 [pbn_b0_bt_2_460800] = {
1876 .flags = FL_BASE0|FL_BASE_BARS,
1878 .base_baud = 460800,
1881 [pbn_b0_bt_4_460800] = {
1882 .flags = FL_BASE0|FL_BASE_BARS,
1884 .base_baud = 460800,
1888 [pbn_b0_bt_1_921600] = {
1889 .flags = FL_BASE0|FL_BASE_BARS,
1891 .base_baud = 921600,
1894 [pbn_b0_bt_2_921600] = {
1895 .flags = FL_BASE0|FL_BASE_BARS,
1897 .base_baud = 921600,
1900 [pbn_b0_bt_4_921600] = {
1901 .flags = FL_BASE0|FL_BASE_BARS,
1903 .base_baud = 921600,
1906 [pbn_b0_bt_8_921600] = {
1907 .flags = FL_BASE0|FL_BASE_BARS,
1909 .base_baud = 921600,
1913 [pbn_b1_1_115200] = {
1916 .base_baud = 115200,
1919 [pbn_b1_2_115200] = {
1922 .base_baud = 115200,
1925 [pbn_b1_4_115200] = {
1928 .base_baud = 115200,
1931 [pbn_b1_8_115200] = {
1934 .base_baud = 115200,
1937 [pbn_b1_16_115200] = {
1940 .base_baud = 115200,
1944 [pbn_b1_1_921600] = {
1947 .base_baud = 921600,
1950 [pbn_b1_2_921600] = {
1953 .base_baud = 921600,
1956 [pbn_b1_4_921600] = {
1959 .base_baud = 921600,
1962 [pbn_b1_8_921600] = {
1965 .base_baud = 921600,
1968 [pbn_b1_2_1250000] = {
1971 .base_baud = 1250000,
1975 [pbn_b1_bt_1_115200] = {
1976 .flags = FL_BASE1|FL_BASE_BARS,
1978 .base_baud = 115200,
1981 [pbn_b1_bt_2_115200] = {
1982 .flags = FL_BASE1|FL_BASE_BARS,
1984 .base_baud = 115200,
1987 [pbn_b1_bt_4_115200] = {
1988 .flags = FL_BASE1|FL_BASE_BARS,
1990 .base_baud = 115200,
1994 [pbn_b1_bt_2_921600] = {
1995 .flags = FL_BASE1|FL_BASE_BARS,
1997 .base_baud = 921600,
2001 [pbn_b1_1_1382400] = {
2004 .base_baud = 1382400,
2007 [pbn_b1_2_1382400] = {
2010 .base_baud = 1382400,
2013 [pbn_b1_4_1382400] = {
2016 .base_baud = 1382400,
2019 [pbn_b1_8_1382400] = {
2022 .base_baud = 1382400,
2026 [pbn_b2_1_115200] = {
2029 .base_baud = 115200,
2032 [pbn_b2_2_115200] = {
2035 .base_baud = 115200,
2038 [pbn_b2_4_115200] = {
2041 .base_baud = 115200,
2044 [pbn_b2_8_115200] = {
2047 .base_baud = 115200,
2051 [pbn_b2_1_460800] = {
2054 .base_baud = 460800,
2057 [pbn_b2_4_460800] = {
2060 .base_baud = 460800,
2063 [pbn_b2_8_460800] = {
2066 .base_baud = 460800,
2069 [pbn_b2_16_460800] = {
2072 .base_baud = 460800,
2076 [pbn_b2_1_921600] = {
2079 .base_baud = 921600,
2082 [pbn_b2_4_921600] = {
2085 .base_baud = 921600,
2088 [pbn_b2_8_921600] = {
2091 .base_baud = 921600,
2095 [pbn_b2_8_1152000] = {
2098 .base_baud = 1152000,
2102 [pbn_b2_bt_1_115200] = {
2103 .flags = FL_BASE2|FL_BASE_BARS,
2105 .base_baud = 115200,
2108 [pbn_b2_bt_2_115200] = {
2109 .flags = FL_BASE2|FL_BASE_BARS,
2111 .base_baud = 115200,
2114 [pbn_b2_bt_4_115200] = {
2115 .flags = FL_BASE2|FL_BASE_BARS,
2117 .base_baud = 115200,
2121 [pbn_b2_bt_2_921600] = {
2122 .flags = FL_BASE2|FL_BASE_BARS,
2124 .base_baud = 921600,
2127 [pbn_b2_bt_4_921600] = {
2128 .flags = FL_BASE2|FL_BASE_BARS,
2130 .base_baud = 921600,
2134 [pbn_b3_2_115200] = {
2137 .base_baud = 115200,
2140 [pbn_b3_4_115200] = {
2143 .base_baud = 115200,
2146 [pbn_b3_8_115200] = {
2149 .base_baud = 115200,
2153 [pbn_b4_bt_2_921600] = {
2156 .base_baud = 921600,
2159 [pbn_b4_bt_4_921600] = {
2162 .base_baud = 921600,
2165 [pbn_b4_bt_8_921600] = {
2168 .base_baud = 921600,
2173 * Entries following this are board-specific.
2182 .base_baud = 921600,
2183 .uart_offset = 0x400,
2187 .flags = FL_BASE2|FL_BASE_BARS,
2189 .base_baud = 921600,
2190 .uart_offset = 0x400,
2194 .flags = FL_BASE2|FL_BASE_BARS,
2196 .base_baud = 921600,
2197 .uart_offset = 0x400,
2201 [pbn_exsys_4055] = {
2204 .base_baud = 115200,
2208 /* I think this entry is broken - the first_offset looks wrong --rmk */
2209 [pbn_plx_romulus] = {
2212 .base_baud = 921600,
2213 .uart_offset = 8 << 2,
2215 .first_offset = 0x03,
2219 * This board uses the size of PCI Base region 0 to
2220 * signal now many ports are available
2223 .flags = FL_BASE0|FL_REGION_SZ_CAP,
2225 .base_baud = 115200,
2228 [pbn_oxsemi_1_4000000] = {
2231 .base_baud = 4000000,
2232 .uart_offset = 0x200,
2233 .first_offset = 0x1000,
2235 [pbn_oxsemi_2_4000000] = {
2238 .base_baud = 4000000,
2239 .uart_offset = 0x200,
2240 .first_offset = 0x1000,
2242 [pbn_oxsemi_4_4000000] = {
2245 .base_baud = 4000000,
2246 .uart_offset = 0x200,
2247 .first_offset = 0x1000,
2249 [pbn_oxsemi_8_4000000] = {
2252 .base_baud = 4000000,
2253 .uart_offset = 0x200,
2254 .first_offset = 0x1000,
2259 * EKF addition for i960 Boards form EKF with serial port.
2262 [pbn_intel_i960] = {
2265 .base_baud = 921600,
2266 .uart_offset = 8 << 2,
2268 .first_offset = 0x10000,
2271 .flags = FL_BASE0|FL_NOIRQ,
2273 .base_baud = 458333,
2276 .first_offset = 0x20178,
2280 * Computone - uses IOMEM.
2282 [pbn_computone_4] = {
2285 .base_baud = 921600,
2286 .uart_offset = 0x40,
2288 .first_offset = 0x200,
2290 [pbn_computone_6] = {
2293 .base_baud = 921600,
2294 .uart_offset = 0x40,
2296 .first_offset = 0x200,
2298 [pbn_computone_8] = {
2301 .base_baud = 921600,
2302 .uart_offset = 0x40,
2304 .first_offset = 0x200,
2309 .base_baud = 460800,
2314 * Exar Corp. XR17C15[248] Dual/Quad/Octal UART
2315 * Only basic 16550A support.
2316 * XR17C15[24] are not tested, but they should work.
2318 [pbn_exar_XR17C152] = {
2321 .base_baud = 921600,
2322 .uart_offset = 0x200,
2324 [pbn_exar_XR17C154] = {
2327 .base_baud = 921600,
2328 .uart_offset = 0x200,
2330 [pbn_exar_XR17C158] = {
2333 .base_baud = 921600,
2334 .uart_offset = 0x200,
2336 [pbn_exar_ibm_saturn] = {
2339 .base_baud = 921600,
2340 .uart_offset = 0x200,
2344 * PA Semi PWRficient PA6T-1682M on-chip UART
2346 [pbn_pasemi_1682M] = {
2349 .base_baud = 8333333,
2352 * National Instruments 843x
2357 .base_baud = 3686400,
2358 .uart_offset = 0x10,
2359 .first_offset = 0x800,
2364 .base_baud = 3686400,
2365 .uart_offset = 0x10,
2366 .first_offset = 0x800,
2371 .base_baud = 3686400,
2372 .uart_offset = 0x10,
2373 .first_offset = 0x800,
2378 .base_baud = 3686400,
2379 .uart_offset = 0x10,
2380 .first_offset = 0x800,
2383 * ADDI-DATA GmbH PCI-Express communication cards <info@addi-data.com>
2385 [pbn_ADDIDATA_PCIe_1_3906250] = {
2388 .base_baud = 3906250,
2389 .uart_offset = 0x200,
2390 .first_offset = 0x1000,
2392 [pbn_ADDIDATA_PCIe_2_3906250] = {
2395 .base_baud = 3906250,
2396 .uart_offset = 0x200,
2397 .first_offset = 0x1000,
2399 [pbn_ADDIDATA_PCIe_4_3906250] = {
2402 .base_baud = 3906250,
2403 .uart_offset = 0x200,
2404 .first_offset = 0x1000,
2406 [pbn_ADDIDATA_PCIe_8_3906250] = {
2409 .base_baud = 3906250,
2410 .uart_offset = 0x200,
2411 .first_offset = 0x1000,
2413 [pbn_ce4100_1_115200] = {
2416 .base_baud = 921600,
2422 .base_baud = 115200,
2423 .uart_offset = 0x200,
2425 [pbn_NETMOS9900_2s_115200] = {
2428 .base_baud = 115200,
2432 static const struct pci_device_id softmodem_blacklist[] = {
2433 { PCI_VDEVICE(AL, 0x5457), }, /* ALi Corporation M5457 AC'97 Modem */
2434 { PCI_VDEVICE(MOTOROLA, 0x3052), }, /* Motorola Si3052-based modem */
2435 { PCI_DEVICE(0x1543, 0x3052), }, /* Si3052-based modem, default IDs */
2439 * Given a complete unknown PCI device, try to use some heuristics to
2440 * guess what the configuration might be, based on the pitiful PCI
2441 * serial specs. Returns 0 on success, 1 on failure.
2443 static int __devinit
2444 serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
2446 const struct pci_device_id *blacklist;
2447 int num_iomem, num_port, first_port = -1, i;
2450 * If it is not a communications device or the programming
2451 * interface is greater than 6, give up.
2453 * (Should we try to make guesses for multiport serial devices
2456 if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) &&
2457 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
2458 (dev->class & 0xff) > 6)
2462 * Do not access blacklisted devices that are known not to
2463 * feature serial ports.
2465 for (blacklist = softmodem_blacklist;
2466 blacklist < softmodem_blacklist + ARRAY_SIZE(softmodem_blacklist);
2468 if (dev->vendor == blacklist->vendor &&
2469 dev->device == blacklist->device)
2473 num_iomem = num_port = 0;
2474 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2475 if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
2477 if (first_port == -1)
2480 if (pci_resource_flags(dev, i) & IORESOURCE_MEM)
2485 * If there is 1 or 0 iomem regions, and exactly one port,
2486 * use it. We guess the number of ports based on the IO
2489 if (num_iomem <= 1 && num_port == 1) {
2490 board->flags = first_port;
2491 board->num_ports = pci_resource_len(dev, first_port) / 8;
2496 * Now guess if we've got a board which indexes by BARs.
2497 * Each IO BAR should be 8 bytes, and they should follow
2502 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2503 if (pci_resource_flags(dev, i) & IORESOURCE_IO &&
2504 pci_resource_len(dev, i) == 8 &&
2505 (first_port == -1 || (first_port + num_port) == i)) {
2507 if (first_port == -1)
2513 board->flags = first_port | FL_BASE_BARS;
2514 board->num_ports = num_port;
2522 serial_pci_matches(const struct pciserial_board *board,
2523 const struct pciserial_board *guessed)
2526 board->num_ports == guessed->num_ports &&
2527 board->base_baud == guessed->base_baud &&
2528 board->uart_offset == guessed->uart_offset &&
2529 board->reg_shift == guessed->reg_shift &&
2530 board->first_offset == guessed->first_offset;
2533 struct serial_private *
2534 pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board)
2536 struct uart_port serial_port;
2537 struct serial_private *priv;
2538 struct pci_serial_quirk *quirk;
2539 int rc, nr_ports, i;
2541 nr_ports = board->num_ports;
2544 * Find an init and setup quirks.
2546 quirk = find_quirk(dev);
2549 * Run the new-style initialization function.
2550 * The initialization function returns:
2552 * 0 - use board->num_ports
2553 * >0 - number of ports
2556 rc = quirk->init(dev);
2565 priv = kzalloc(sizeof(struct serial_private) +
2566 sizeof(unsigned int) * nr_ports,
2569 priv = ERR_PTR(-ENOMEM);
2574 priv->quirk = quirk;
2576 memset(&serial_port, 0, sizeof(struct uart_port));
2577 serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
2578 serial_port.uartclk = board->base_baud * 16;
2579 serial_port.irq = get_pci_irq(dev, board);
2580 serial_port.dev = &dev->dev;
2582 for (i = 0; i < nr_ports; i++) {
2583 if (quirk->setup(priv, board, &serial_port, i))
2586 #ifdef SERIAL_DEBUG_PCI
2587 printk(KERN_DEBUG "Setup PCI port: port %lx, irq %d, type %d\n",
2588 serial_port.iobase, serial_port.irq, serial_port.iotype);
2591 priv->line[i] = serial8250_register_port(&serial_port);
2592 if (priv->line[i] < 0) {
2593 printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), priv->line[i]);
2606 EXPORT_SYMBOL_GPL(pciserial_init_ports);
2608 void pciserial_remove_ports(struct serial_private *priv)
2610 struct pci_serial_quirk *quirk;
2613 for (i = 0; i < priv->nr; i++)
2614 serial8250_unregister_port(priv->line[i]);
2616 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2617 if (priv->remapped_bar[i])
2618 iounmap(priv->remapped_bar[i]);
2619 priv->remapped_bar[i] = NULL;
2623 * Find the exit quirks.
2625 quirk = find_quirk(priv->dev);
2627 quirk->exit(priv->dev);
2631 EXPORT_SYMBOL_GPL(pciserial_remove_ports);
2633 void pciserial_suspend_ports(struct serial_private *priv)
2637 for (i = 0; i < priv->nr; i++)
2638 if (priv->line[i] >= 0)
2639 serial8250_suspend_port(priv->line[i]);
2641 EXPORT_SYMBOL_GPL(pciserial_suspend_ports);
2643 void pciserial_resume_ports(struct serial_private *priv)
2648 * Ensure that the board is correctly configured.
2650 if (priv->quirk->init)
2651 priv->quirk->init(priv->dev);
2653 for (i = 0; i < priv->nr; i++)
2654 if (priv->line[i] >= 0)
2655 serial8250_resume_port(priv->line[i]);
2657 EXPORT_SYMBOL_GPL(pciserial_resume_ports);
2660 * Probe one serial board. Unfortunately, there is no rhyme nor reason
2661 * to the arrangement of serial ports on a PCI card.
2663 static int __devinit
2664 pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
2666 struct pci_serial_quirk *quirk;
2667 struct serial_private *priv;
2668 const struct pciserial_board *board;
2669 struct pciserial_board tmp;
2672 quirk = find_quirk(dev);
2674 rc = quirk->probe(dev);
2679 if (ent->driver_data >= ARRAY_SIZE(pci_boards)) {
2680 printk(KERN_ERR "pci_init_one: invalid driver_data: %ld\n",
2685 board = &pci_boards[ent->driver_data];
2687 rc = pci_enable_device(dev);
2691 if (ent->driver_data == pbn_default) {
2693 * Use a copy of the pci_board entry for this;
2694 * avoid changing entries in the table.
2696 memcpy(&tmp, board, sizeof(struct pciserial_board));
2700 * We matched one of our class entries. Try to
2701 * determine the parameters of this board.
2703 rc = serial_pci_guess_board(dev, &tmp);
2708 * We matched an explicit entry. If we are able to
2709 * detect this boards settings with our heuristic,
2710 * then we no longer need this entry.
2712 memcpy(&tmp, &pci_boards[pbn_default],
2713 sizeof(struct pciserial_board));
2714 rc = serial_pci_guess_board(dev, &tmp);
2715 if (rc == 0 && serial_pci_matches(board, &tmp))
2716 moan_device("Redundant entry in serial pci_table.",
2720 priv = pciserial_init_ports(dev, board);
2721 if (!IS_ERR(priv)) {
2722 pci_set_drvdata(dev, priv);
2729 pci_disable_device(dev);
2733 static void __devexit pciserial_remove_one(struct pci_dev *dev)
2735 struct serial_private *priv = pci_get_drvdata(dev);
2737 pci_set_drvdata(dev, NULL);
2739 pciserial_remove_ports(priv);
2741 pci_disable_device(dev);
2745 static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
2747 struct serial_private *priv = pci_get_drvdata(dev);
2750 pciserial_suspend_ports(priv);
2752 pci_save_state(dev);
2753 pci_set_power_state(dev, pci_choose_state(dev, state));
2757 static int pciserial_resume_one(struct pci_dev *dev)
2760 struct serial_private *priv = pci_get_drvdata(dev);
2762 pci_set_power_state(dev, PCI_D0);
2763 pci_restore_state(dev);
2767 * The device may have been disabled. Re-enable it.
2769 err = pci_enable_device(dev);
2770 /* FIXME: We cannot simply error out here */
2772 printk(KERN_ERR "pciserial: Unable to re-enable ports, trying to continue.\n");
2773 pciserial_resume_ports(priv);
2779 static struct pci_device_id serial_pci_tbl[] = {
2780 /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */
2781 { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620,
2782 PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0,
2784 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2785 PCI_SUBVENDOR_ID_CONNECT_TECH,
2786 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2788 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2789 PCI_SUBVENDOR_ID_CONNECT_TECH,
2790 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2792 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2793 PCI_SUBVENDOR_ID_CONNECT_TECH,
2794 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2796 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2797 PCI_SUBVENDOR_ID_CONNECT_TECH,
2798 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2800 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2801 PCI_SUBVENDOR_ID_CONNECT_TECH,
2802 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2804 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2805 PCI_SUBVENDOR_ID_CONNECT_TECH,
2806 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2808 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2809 PCI_SUBVENDOR_ID_CONNECT_TECH,
2810 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485, 0, 0,
2812 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2813 PCI_SUBVENDOR_ID_CONNECT_TECH,
2814 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 0, 0,
2816 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2817 PCI_SUBVENDOR_ID_CONNECT_TECH,
2818 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485, 0, 0,
2820 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2821 PCI_SUBVENDOR_ID_CONNECT_TECH,
2822 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0,
2824 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2825 PCI_SUBVENDOR_ID_CONNECT_TECH,
2826 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0,
2828 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2829 PCI_SUBVENDOR_ID_CONNECT_TECH,
2830 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0,
2832 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2833 PCI_SUBVENDOR_ID_CONNECT_TECH,
2834 PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0,
2836 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2837 PCI_SUBVENDOR_ID_CONNECT_TECH,
2838 PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0,
2840 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2841 PCI_SUBVENDOR_ID_CONNECT_TECH,
2842 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ, 0, 0,
2844 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2845 PCI_SUBVENDOR_ID_CONNECT_TECH,
2846 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2, 0, 0,
2848 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2849 PCI_SUBVENDOR_ID_CONNECT_TECH,
2850 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4, 0, 0,
2852 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2853 PCI_VENDOR_ID_AFAVLAB,
2854 PCI_SUBDEVICE_ID_AFAVLAB_P061, 0, 0,
2856 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2857 PCI_SUBVENDOR_ID_CONNECT_TECH,
2858 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_232, 0, 0,
2859 pbn_b0_2_1843200_200 },
2860 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2861 PCI_SUBVENDOR_ID_CONNECT_TECH,
2862 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_232, 0, 0,
2863 pbn_b0_4_1843200_200 },
2864 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2865 PCI_SUBVENDOR_ID_CONNECT_TECH,
2866 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_232, 0, 0,
2867 pbn_b0_8_1843200_200 },
2868 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2869 PCI_SUBVENDOR_ID_CONNECT_TECH,
2870 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_1_1, 0, 0,
2871 pbn_b0_2_1843200_200 },
2872 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2873 PCI_SUBVENDOR_ID_CONNECT_TECH,
2874 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_2, 0, 0,
2875 pbn_b0_4_1843200_200 },
2876 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2877 PCI_SUBVENDOR_ID_CONNECT_TECH,
2878 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_4, 0, 0,
2879 pbn_b0_8_1843200_200 },
2880 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2881 PCI_SUBVENDOR_ID_CONNECT_TECH,
2882 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2, 0, 0,
2883 pbn_b0_2_1843200_200 },
2884 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2885 PCI_SUBVENDOR_ID_CONNECT_TECH,
2886 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4, 0, 0,
2887 pbn_b0_4_1843200_200 },
2888 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2889 PCI_SUBVENDOR_ID_CONNECT_TECH,
2890 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8, 0, 0,
2891 pbn_b0_8_1843200_200 },
2892 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2893 PCI_SUBVENDOR_ID_CONNECT_TECH,
2894 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_485, 0, 0,
2895 pbn_b0_2_1843200_200 },
2896 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2897 PCI_SUBVENDOR_ID_CONNECT_TECH,
2898 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485, 0, 0,
2899 pbn_b0_4_1843200_200 },
2900 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2901 PCI_SUBVENDOR_ID_CONNECT_TECH,
2902 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485, 0, 0,
2903 pbn_b0_8_1843200_200 },
2904 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2905 PCI_VENDOR_ID_IBM, PCI_SUBDEVICE_ID_IBM_SATURN_SERIAL_ONE_PORT,
2906 0, 0, pbn_exar_ibm_saturn },
2908 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,
2909 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2910 pbn_b2_bt_1_115200 },
2911 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2,
2912 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2913 pbn_b2_bt_2_115200 },
2914 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422,
2915 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2916 pbn_b2_bt_4_115200 },
2917 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232,
2918 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2919 pbn_b2_bt_2_115200 },
2920 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4,
2921 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2922 pbn_b2_bt_4_115200 },
2923 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,
2924 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2926 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_7803,
2927 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2929 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM8,
2930 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2933 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2,
2934 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2935 pbn_b2_bt_2_115200 },
2936 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200,
2937 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2938 pbn_b2_bt_2_921600 },
2940 * VScom SPCOM800, from sl@s.pl
2942 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800,
2943 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2945 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077,
2946 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2948 /* Unknown card - subdevice 0x1584 */
2949 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2951 PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0,
2953 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2954 PCI_SUBVENDOR_ID_KEYSPAN,
2955 PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0,
2957 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM,
2958 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2960 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM,
2961 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2963 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2964 PCI_VENDOR_ID_ESDGMBH,
2965 PCI_DEVICE_ID_ESDGMBH_CPCIASIO4, 0, 0,
2967 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2968 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2969 PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0,
2971 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2972 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2973 PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0,
2975 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2976 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2977 PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0,
2979 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2980 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2981 PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0,
2983 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2984 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2985 PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0,
2987 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2988 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2989 PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
2991 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2992 PCI_SUBVENDOR_ID_EXSYS,
2993 PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
2996 * Megawolf Romulus PCI Serial Card, from Mike Hudson
2999 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS,
3000 0x10b5, 0x106a, 0, 0,
3002 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100,
3003 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3005 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100,
3006 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3008 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D,
3009 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3011 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M,
3012 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3014 { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,
3015 PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4,
3018 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
3019 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL,
3022 { PCI_VENDOR_ID_OXSEMI, 0x9505,
3023 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3024 pbn_b0_bt_2_921600 },
3027 * The below card is a little controversial since it is the
3028 * subject of a PCI vendor/device ID clash. (See
3029 * www.ussg.iu.edu/hypermail/linux/kernel/0303.1/0516.html).
3030 * For now just used the hex ID 0x950a.
3032 { PCI_VENDOR_ID_OXSEMI, 0x950a,
3033 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL, 0, 0,
3035 { PCI_VENDOR_ID_OXSEMI, 0x950a,
3036 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3038 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_C950,
3039 PCI_VENDOR_ID_OXSEMI, PCI_SUBDEVICE_ID_OXSEMI_C950, 0, 0,
3041 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
3042 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3044 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,
3045 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3046 pbn_b0_bt_2_921600 },
3047 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI958,
3048 PCI_ANY_ID , PCI_ANY_ID, 0, 0,
3052 * Oxford Semiconductor Inc. Tornado PCI express device range.
3054 { PCI_VENDOR_ID_OXSEMI, 0xc101, /* OXPCIe952 1 Legacy UART */
3055 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3057 { PCI_VENDOR_ID_OXSEMI, 0xc105, /* OXPCIe952 1 Legacy UART */
3058 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3060 { PCI_VENDOR_ID_OXSEMI, 0xc11b, /* OXPCIe952 1 Native UART */
3061 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3062 pbn_oxsemi_1_4000000 },
3063 { PCI_VENDOR_ID_OXSEMI, 0xc11f, /* OXPCIe952 1 Native UART */
3064 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3065 pbn_oxsemi_1_4000000 },
3066 { PCI_VENDOR_ID_OXSEMI, 0xc120, /* OXPCIe952 1 Legacy UART */
3067 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3069 { PCI_VENDOR_ID_OXSEMI, 0xc124, /* OXPCIe952 1 Legacy UART */
3070 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3072 { PCI_VENDOR_ID_OXSEMI, 0xc138, /* OXPCIe952 1 Native UART */
3073 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3074 pbn_oxsemi_1_4000000 },
3075 { PCI_VENDOR_ID_OXSEMI, 0xc13d, /* OXPCIe952 1 Native UART */
3076 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3077 pbn_oxsemi_1_4000000 },
3078 { PCI_VENDOR_ID_OXSEMI, 0xc140, /* OXPCIe952 1 Legacy UART */
3079 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3081 { PCI_VENDOR_ID_OXSEMI, 0xc141, /* OXPCIe952 1 Legacy UART */
3082 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3084 { PCI_VENDOR_ID_OXSEMI, 0xc144, /* OXPCIe952 1 Legacy UART */
3085 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3087 { PCI_VENDOR_ID_OXSEMI, 0xc145, /* OXPCIe952 1 Legacy UART */
3088 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3090 { PCI_VENDOR_ID_OXSEMI, 0xc158, /* OXPCIe952 2 Native UART */
3091 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3092 pbn_oxsemi_2_4000000 },
3093 { PCI_VENDOR_ID_OXSEMI, 0xc15d, /* OXPCIe952 2 Native UART */
3094 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3095 pbn_oxsemi_2_4000000 },
3096 { PCI_VENDOR_ID_OXSEMI, 0xc208, /* OXPCIe954 4 Native UART */
3097 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3098 pbn_oxsemi_4_4000000 },
3099 { PCI_VENDOR_ID_OXSEMI, 0xc20d, /* OXPCIe954 4 Native UART */
3100 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3101 pbn_oxsemi_4_4000000 },
3102 { PCI_VENDOR_ID_OXSEMI, 0xc308, /* OXPCIe958 8 Native UART */
3103 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3104 pbn_oxsemi_8_4000000 },
3105 { PCI_VENDOR_ID_OXSEMI, 0xc30d, /* OXPCIe958 8 Native UART */
3106 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3107 pbn_oxsemi_8_4000000 },
3108 { PCI_VENDOR_ID_OXSEMI, 0xc40b, /* OXPCIe200 1 Native UART */
3109 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3110 pbn_oxsemi_1_4000000 },
3111 { PCI_VENDOR_ID_OXSEMI, 0xc40f, /* OXPCIe200 1 Native UART */
3112 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3113 pbn_oxsemi_1_4000000 },
3114 { PCI_VENDOR_ID_OXSEMI, 0xc41b, /* OXPCIe200 1 Native UART */
3115 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3116 pbn_oxsemi_1_4000000 },
3117 { PCI_VENDOR_ID_OXSEMI, 0xc41f, /* OXPCIe200 1 Native UART */
3118 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3119 pbn_oxsemi_1_4000000 },
3120 { PCI_VENDOR_ID_OXSEMI, 0xc42b, /* OXPCIe200 1 Native UART */
3121 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3122 pbn_oxsemi_1_4000000 },
3123 { PCI_VENDOR_ID_OXSEMI, 0xc42f, /* OXPCIe200 1 Native UART */
3124 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3125 pbn_oxsemi_1_4000000 },
3126 { PCI_VENDOR_ID_OXSEMI, 0xc43b, /* OXPCIe200 1 Native UART */
3127 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3128 pbn_oxsemi_1_4000000 },
3129 { PCI_VENDOR_ID_OXSEMI, 0xc43f, /* OXPCIe200 1 Native UART */
3130 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3131 pbn_oxsemi_1_4000000 },
3132 { PCI_VENDOR_ID_OXSEMI, 0xc44b, /* OXPCIe200 1 Native UART */
3133 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3134 pbn_oxsemi_1_4000000 },
3135 { PCI_VENDOR_ID_OXSEMI, 0xc44f, /* OXPCIe200 1 Native UART */
3136 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3137 pbn_oxsemi_1_4000000 },
3138 { PCI_VENDOR_ID_OXSEMI, 0xc45b, /* OXPCIe200 1 Native UART */
3139 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3140 pbn_oxsemi_1_4000000 },
3141 { PCI_VENDOR_ID_OXSEMI, 0xc45f, /* OXPCIe200 1 Native UART */
3142 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3143 pbn_oxsemi_1_4000000 },
3144 { PCI_VENDOR_ID_OXSEMI, 0xc46b, /* OXPCIe200 1 Native UART */
3145 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3146 pbn_oxsemi_1_4000000 },
3147 { PCI_VENDOR_ID_OXSEMI, 0xc46f, /* OXPCIe200 1 Native UART */
3148 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3149 pbn_oxsemi_1_4000000 },
3150 { PCI_VENDOR_ID_OXSEMI, 0xc47b, /* OXPCIe200 1 Native UART */
3151 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3152 pbn_oxsemi_1_4000000 },
3153 { PCI_VENDOR_ID_OXSEMI, 0xc47f, /* OXPCIe200 1 Native UART */
3154 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3155 pbn_oxsemi_1_4000000 },
3156 { PCI_VENDOR_ID_OXSEMI, 0xc48b, /* OXPCIe200 1 Native UART */
3157 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3158 pbn_oxsemi_1_4000000 },
3159 { PCI_VENDOR_ID_OXSEMI, 0xc48f, /* OXPCIe200 1 Native UART */
3160 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3161 pbn_oxsemi_1_4000000 },
3162 { PCI_VENDOR_ID_OXSEMI, 0xc49b, /* OXPCIe200 1 Native UART */
3163 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3164 pbn_oxsemi_1_4000000 },
3165 { PCI_VENDOR_ID_OXSEMI, 0xc49f, /* OXPCIe200 1 Native UART */
3166 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3167 pbn_oxsemi_1_4000000 },
3168 { PCI_VENDOR_ID_OXSEMI, 0xc4ab, /* OXPCIe200 1 Native UART */
3169 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3170 pbn_oxsemi_1_4000000 },
3171 { PCI_VENDOR_ID_OXSEMI, 0xc4af, /* OXPCIe200 1 Native UART */
3172 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3173 pbn_oxsemi_1_4000000 },
3174 { PCI_VENDOR_ID_OXSEMI, 0xc4bb, /* OXPCIe200 1 Native UART */
3175 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3176 pbn_oxsemi_1_4000000 },
3177 { PCI_VENDOR_ID_OXSEMI, 0xc4bf, /* OXPCIe200 1 Native UART */
3178 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3179 pbn_oxsemi_1_4000000 },
3180 { PCI_VENDOR_ID_OXSEMI, 0xc4cb, /* OXPCIe200 1 Native UART */
3181 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3182 pbn_oxsemi_1_4000000 },
3183 { PCI_VENDOR_ID_OXSEMI, 0xc4cf, /* OXPCIe200 1 Native UART */
3184 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3185 pbn_oxsemi_1_4000000 },
3187 * Mainpine Inc. IQ Express "Rev3" utilizing OxSemi Tornado
3189 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 1 Port V.34 Super-G3 Fax */
3190 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
3191 pbn_oxsemi_1_4000000 },
3192 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 2 Port V.34 Super-G3 Fax */
3193 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
3194 pbn_oxsemi_2_4000000 },
3195 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 4 Port V.34 Super-G3 Fax */
3196 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
3197 pbn_oxsemi_4_4000000 },
3198 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 8 Port V.34 Super-G3 Fax */
3199 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
3200 pbn_oxsemi_8_4000000 },
3203 * Digi/IBM PCIe 2-port Async EIA-232 Adapter utilizing OxSemi Tornado
3205 { PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_2_OX_IBM,
3206 PCI_SUBVENDOR_ID_IBM, PCI_ANY_ID, 0, 0,
3207 pbn_oxsemi_2_4000000 },
3210 * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards,
3211 * from skokodyn@yahoo.com
3213 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
3214 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0,
3216 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
3217 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0,
3219 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
3220 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0,
3222 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
3223 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0,
3227 * Digitan DS560-558, from jimd@esoft.com
3229 { PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM,
3230 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3234 * Titan Electronic cards
3235 * The 400L and 800L have a custom setup quirk.
3237 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100,
3238 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3240 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200,
3241 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3243 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400,
3244 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3246 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B,
3247 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3249 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L,
3250 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3252 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L,
3253 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3254 pbn_b1_bt_2_921600 },
3255 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L,
3256 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3257 pbn_b0_bt_4_921600 },
3258 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L,
3259 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3260 pbn_b0_bt_8_921600 },
3261 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200I,
3262 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3263 pbn_b4_bt_2_921600 },
3264 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400I,
3265 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3266 pbn_b4_bt_4_921600 },
3267 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800I,
3268 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3269 pbn_b4_bt_8_921600 },
3270 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400EH,
3271 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3273 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800EH,
3274 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3276 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800EHB,
3277 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3279 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100E,
3280 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3281 pbn_oxsemi_1_4000000 },
3282 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200E,
3283 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3284 pbn_oxsemi_2_4000000 },
3285 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400E,
3286 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3287 pbn_oxsemi_4_4000000 },
3288 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800E,
3289 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3290 pbn_oxsemi_8_4000000 },
3291 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EI,
3292 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3293 pbn_oxsemi_2_4000000 },
3294 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EISI,
3295 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3296 pbn_oxsemi_2_4000000 },
3298 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550,
3299 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3301 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650,
3302 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3304 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850,
3305 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3307 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550,
3308 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3309 pbn_b2_bt_2_921600 },
3310 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650,
3311 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3312 pbn_b2_bt_2_921600 },
3313 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850,
3314 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3315 pbn_b2_bt_2_921600 },
3316 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550,
3317 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3318 pbn_b2_bt_4_921600 },
3319 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650,
3320 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3321 pbn_b2_bt_4_921600 },
3322 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850,
3323 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3324 pbn_b2_bt_4_921600 },
3325 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550,
3326 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3328 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650,
3329 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3331 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850,
3332 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3334 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550,
3335 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3336 pbn_b0_bt_2_921600 },
3337 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650,
3338 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3339 pbn_b0_bt_2_921600 },
3340 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850,
3341 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3342 pbn_b0_bt_2_921600 },
3343 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550,
3344 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3345 pbn_b0_bt_4_921600 },
3346 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650,
3347 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3348 pbn_b0_bt_4_921600 },
3349 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850,
3350 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3351 pbn_b0_bt_4_921600 },
3352 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_550,
3353 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3354 pbn_b0_bt_8_921600 },
3355 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_650,
3356 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3357 pbn_b0_bt_8_921600 },
3358 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_850,
3359 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3360 pbn_b0_bt_8_921600 },
3363 * Computone devices submitted by Doug McNash dmcnash@computone.com
3365 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3366 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4,
3367 0, 0, pbn_computone_4 },
3368 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3369 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8,
3370 0, 0, pbn_computone_8 },
3371 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3372 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6,
3373 0, 0, pbn_computone_6 },
3375 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N,
3376 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3378 { PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889,
3379 PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0,
3380 pbn_b0_bt_1_921600 },
3383 * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org>
3385 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P028,
3386 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3387 pbn_b0_bt_8_115200 },
3388 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P030,
3389 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3390 pbn_b0_bt_8_115200 },
3392 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL,
3393 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3394 pbn_b0_bt_2_115200 },
3395 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A,
3396 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3397 pbn_b0_bt_2_115200 },
3398 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B,
3399 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3400 pbn_b0_bt_2_115200 },
3401 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATTRO_A,
3402 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3403 pbn_b0_bt_2_115200 },
3404 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATTRO_B,
3405 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3406 pbn_b0_bt_2_115200 },
3407 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_A,
3408 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3409 pbn_b0_bt_4_460800 },
3410 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_B,
3411 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3412 pbn_b0_bt_4_460800 },
3413 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS,
3414 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3415 pbn_b0_bt_2_460800 },
3416 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A,
3417 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3418 pbn_b0_bt_2_460800 },
3419 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B,
3420 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3421 pbn_b0_bt_2_460800 },
3422 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL,
3423 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3424 pbn_b0_bt_1_115200 },
3425 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650,
3426 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3427 pbn_b0_bt_1_460800 },
3430 * Korenix Jetcard F0/F1 cards (JC1204, JC1208, JC1404, JC1408).
3431 * Cards are identified by their subsystem vendor IDs, which
3432 * (in hex) match the model number.
3434 * Note that JC140x are RS422/485 cards which require ox950
3435 * ACR = 0x10, and as such are not currently fully supported.
3437 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3438 0x1204, 0x0004, 0, 0,
3440 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3441 0x1208, 0x0004, 0, 0,
3443 /* { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3444 0x1402, 0x0002, 0, 0,
3445 pbn_b0_2_921600 }, */
3446 /* { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3447 0x1404, 0x0004, 0, 0,
3448 pbn_b0_4_921600 }, */
3449 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF1,
3450 0x1208, 0x0004, 0, 0,
3453 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF2,
3454 0x1204, 0x0004, 0, 0,
3456 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF2,
3457 0x1208, 0x0004, 0, 0,
3459 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF3,
3460 0x1208, 0x0004, 0, 0,
3463 * Dell Remote Access Card 4 - Tim_T_Murphy@Dell.com
3465 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RAC4,
3466 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3470 * Dell Remote Access Card III - Tim_T_Murphy@Dell.com
3472 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RACIII,
3473 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3477 * RAStel 2 port modem, gerg@moreton.com.au
3479 { PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT,
3480 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3481 pbn_b2_bt_2_115200 },
3484 * EKF addition for i960 Boards form EKF with serial port
3486 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80960_RP,
3487 0xE4BF, PCI_ANY_ID, 0, 0,
3491 * Xircom Cardbus/Ethernet combos
3493 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM,
3494 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3497 * Xircom RBM56G cardbus modem - Dirk Arnold (temp entry)
3499 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_RBM56G,
3500 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3504 * Untested PCI modems, sent in from various folks...
3508 * Elsa Model 56K PCI Modem, from Andreas Rath <arh@01019freenet.de>
3510 { PCI_VENDOR_ID_ROCKWELL, 0x1004,
3511 0x1048, 0x1500, 0, 0,
3514 { PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
3521 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
3522 PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_RMP3, 0, 0,
3524 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
3525 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3527 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
3528 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3531 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2,
3532 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3534 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM4,
3535 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3537 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8,
3538 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3542 * Exar Corp. XR17C15[248] Dual/Quad/Octal UART
3544 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
3545 PCI_ANY_ID, PCI_ANY_ID,
3547 0, pbn_exar_XR17C152 },
3548 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
3549 PCI_ANY_ID, PCI_ANY_ID,
3551 0, pbn_exar_XR17C154 },
3552 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
3553 PCI_ANY_ID, PCI_ANY_ID,
3555 0, pbn_exar_XR17C158 },
3558 * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke)
3560 { PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560,
3561 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3566 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
3567 PCI_ANY_ID, PCI_ANY_ID,
3569 pbn_b1_bt_1_115200 },
3574 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS200,
3575 PCI_ANY_ID, PCI_ANY_ID, 0, 0, /* 135a.0811 */
3580 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS400,
3581 PCI_ANY_ID, PCI_ANY_ID, 0, 0, /* 135a.0dc0 */
3584 * Perle PCI-RAS cards
3586 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
3587 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4,
3588 0, 0, pbn_b2_4_921600 },
3589 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
3590 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8,
3591 0, 0, pbn_b2_8_921600 },
3594 * Mainpine series cards: Fairly standard layout but fools
3595 * parts of the autodetect in some cases and uses otherwise
3596 * unmatched communications subclasses in the PCI Express case
3599 { /* RockForceDUO */
3600 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3601 PCI_VENDOR_ID_MAINPINE, 0x0200,
3602 0, 0, pbn_b0_2_115200 },
3603 { /* RockForceQUATRO */
3604 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3605 PCI_VENDOR_ID_MAINPINE, 0x0300,
3606 0, 0, pbn_b0_4_115200 },
3607 { /* RockForceDUO+ */
3608 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3609 PCI_VENDOR_ID_MAINPINE, 0x0400,
3610 0, 0, pbn_b0_2_115200 },
3611 { /* RockForceQUATRO+ */
3612 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3613 PCI_VENDOR_ID_MAINPINE, 0x0500,
3614 0, 0, pbn_b0_4_115200 },
3616 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3617 PCI_VENDOR_ID_MAINPINE, 0x0600,
3618 0, 0, pbn_b0_2_115200 },
3620 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3621 PCI_VENDOR_ID_MAINPINE, 0x0700,
3622 0, 0, pbn_b0_4_115200 },
3623 { /* RockForceOCTO+ */
3624 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3625 PCI_VENDOR_ID_MAINPINE, 0x0800,
3626 0, 0, pbn_b0_8_115200 },
3627 { /* RockForceDUO+ */
3628 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3629 PCI_VENDOR_ID_MAINPINE, 0x0C00,
3630 0, 0, pbn_b0_2_115200 },
3631 { /* RockForceQUARTRO+ */
3632 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3633 PCI_VENDOR_ID_MAINPINE, 0x0D00,
3634 0, 0, pbn_b0_4_115200 },
3635 { /* RockForceOCTO+ */
3636 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3637 PCI_VENDOR_ID_MAINPINE, 0x1D00,
3638 0, 0, pbn_b0_8_115200 },
3640 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3641 PCI_VENDOR_ID_MAINPINE, 0x2000,
3642 0, 0, pbn_b0_1_115200 },
3644 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3645 PCI_VENDOR_ID_MAINPINE, 0x2100,
3646 0, 0, pbn_b0_1_115200 },
3648 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3649 PCI_VENDOR_ID_MAINPINE, 0x2200,
3650 0, 0, pbn_b0_2_115200 },
3652 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3653 PCI_VENDOR_ID_MAINPINE, 0x2300,
3654 0, 0, pbn_b0_2_115200 },
3656 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3657 PCI_VENDOR_ID_MAINPINE, 0x2400,
3658 0, 0, pbn_b0_4_115200 },
3660 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3661 PCI_VENDOR_ID_MAINPINE, 0x2500,
3662 0, 0, pbn_b0_4_115200 },
3664 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3665 PCI_VENDOR_ID_MAINPINE, 0x2600,
3666 0, 0, pbn_b0_8_115200 },
3668 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3669 PCI_VENDOR_ID_MAINPINE, 0x2700,
3670 0, 0, pbn_b0_8_115200 },
3671 { /* IQ Express D1 */
3672 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3673 PCI_VENDOR_ID_MAINPINE, 0x3000,
3674 0, 0, pbn_b0_1_115200 },
3675 { /* IQ Express F1 */
3676 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3677 PCI_VENDOR_ID_MAINPINE, 0x3100,
3678 0, 0, pbn_b0_1_115200 },
3679 { /* IQ Express D2 */
3680 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3681 PCI_VENDOR_ID_MAINPINE, 0x3200,
3682 0, 0, pbn_b0_2_115200 },
3683 { /* IQ Express F2 */
3684 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3685 PCI_VENDOR_ID_MAINPINE, 0x3300,
3686 0, 0, pbn_b0_2_115200 },
3687 { /* IQ Express D4 */
3688 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3689 PCI_VENDOR_ID_MAINPINE, 0x3400,
3690 0, 0, pbn_b0_4_115200 },
3691 { /* IQ Express F4 */
3692 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3693 PCI_VENDOR_ID_MAINPINE, 0x3500,
3694 0, 0, pbn_b0_4_115200 },
3695 { /* IQ Express D8 */
3696 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3697 PCI_VENDOR_ID_MAINPINE, 0x3C00,
3698 0, 0, pbn_b0_8_115200 },
3699 { /* IQ Express F8 */
3700 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3701 PCI_VENDOR_ID_MAINPINE, 0x3D00,
3702 0, 0, pbn_b0_8_115200 },
3706 * PA Semi PA6T-1682M on-chip UART
3708 { PCI_VENDOR_ID_PASEMI, 0xa004,
3709 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3713 * National Instruments
3715 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI23216,
3716 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3718 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2328,
3719 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3721 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324,
3722 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3723 pbn_b1_bt_4_115200 },
3724 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322,
3725 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3726 pbn_b1_bt_2_115200 },
3727 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324I,
3728 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3729 pbn_b1_bt_4_115200 },
3730 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322I,
3731 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3732 pbn_b1_bt_2_115200 },
3733 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_23216,
3734 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3736 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2328,
3737 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3739 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2324,
3740 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3741 pbn_b1_bt_4_115200 },
3742 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2322,
3743 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3744 pbn_b1_bt_2_115200 },
3745 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2324,
3746 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3747 pbn_b1_bt_4_115200 },
3748 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2322,
3749 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3750 pbn_b1_bt_2_115200 },
3751 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2322,
3752 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3754 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2322,
3755 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3757 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2324,
3758 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3760 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2324,
3761 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3763 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2328,
3764 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3766 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2328,
3767 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3769 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_23216,
3770 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3772 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_23216,
3773 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3775 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2322,
3776 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3778 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2322,
3779 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3781 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2324,
3782 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3784 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2324,
3785 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3789 * ADDI-DATA GmbH communication cards <info@addi-data.com>
3791 { PCI_VENDOR_ID_ADDIDATA,
3792 PCI_DEVICE_ID_ADDIDATA_APCI7500,
3799 { PCI_VENDOR_ID_ADDIDATA,
3800 PCI_DEVICE_ID_ADDIDATA_APCI7420,
3807 { PCI_VENDOR_ID_ADDIDATA,
3808 PCI_DEVICE_ID_ADDIDATA_APCI7300,
3815 { PCI_VENDOR_ID_ADDIDATA_OLD,
3816 PCI_DEVICE_ID_ADDIDATA_APCI7800,
3823 { PCI_VENDOR_ID_ADDIDATA,
3824 PCI_DEVICE_ID_ADDIDATA_APCI7500_2,
3831 { PCI_VENDOR_ID_ADDIDATA,
3832 PCI_DEVICE_ID_ADDIDATA_APCI7420_2,
3839 { PCI_VENDOR_ID_ADDIDATA,
3840 PCI_DEVICE_ID_ADDIDATA_APCI7300_2,
3847 { PCI_VENDOR_ID_ADDIDATA,
3848 PCI_DEVICE_ID_ADDIDATA_APCI7500_3,
3855 { PCI_VENDOR_ID_ADDIDATA,
3856 PCI_DEVICE_ID_ADDIDATA_APCI7420_3,
3863 { PCI_VENDOR_ID_ADDIDATA,
3864 PCI_DEVICE_ID_ADDIDATA_APCI7300_3,
3871 { PCI_VENDOR_ID_ADDIDATA,
3872 PCI_DEVICE_ID_ADDIDATA_APCI7800_3,
3879 { PCI_VENDOR_ID_ADDIDATA,
3880 PCI_DEVICE_ID_ADDIDATA_APCIe7500,
3885 pbn_ADDIDATA_PCIe_4_3906250 },
3887 { PCI_VENDOR_ID_ADDIDATA,
3888 PCI_DEVICE_ID_ADDIDATA_APCIe7420,
3893 pbn_ADDIDATA_PCIe_2_3906250 },
3895 { PCI_VENDOR_ID_ADDIDATA,
3896 PCI_DEVICE_ID_ADDIDATA_APCIe7300,
3901 pbn_ADDIDATA_PCIe_1_3906250 },
3903 { PCI_VENDOR_ID_ADDIDATA,
3904 PCI_DEVICE_ID_ADDIDATA_APCIe7800,
3909 pbn_ADDIDATA_PCIe_8_3906250 },
3911 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835,
3912 PCI_VENDOR_ID_IBM, 0x0299,
3913 0, 0, pbn_b0_bt_2_115200 },
3915 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901,
3917 0, 0, pbn_b0_1_115200 },
3919 /* the 9901 is a rebranded 9912 */
3920 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9912,
3922 0, 0, pbn_b0_1_115200 },
3924 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9922,
3926 0, 0, pbn_b0_1_115200 },
3928 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9904,
3930 0, 0, pbn_b0_1_115200 },
3932 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900,
3934 0, 0, pbn_b0_1_115200 },
3936 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900,
3938 0, 0, pbn_NETMOS9900_2s_115200 },
3941 * Best Connectivity PCI Multi I/O cards
3944 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
3946 0, 0, pbn_b0_1_115200 },
3948 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
3950 0, 0, pbn_b0_bt_4_115200 },
3952 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CE4100_UART,
3953 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3954 pbn_ce4100_1_115200 },
3959 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_CRONYX_OMEGA,
3960 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3964 * These entries match devices with class COMMUNICATION_SERIAL,
3965 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
3967 { PCI_ANY_ID, PCI_ANY_ID,
3968 PCI_ANY_ID, PCI_ANY_ID,
3969 PCI_CLASS_COMMUNICATION_SERIAL << 8,
3970 0xffff00, pbn_default },
3971 { PCI_ANY_ID, PCI_ANY_ID,
3972 PCI_ANY_ID, PCI_ANY_ID,
3973 PCI_CLASS_COMMUNICATION_MODEM << 8,
3974 0xffff00, pbn_default },
3975 { PCI_ANY_ID, PCI_ANY_ID,
3976 PCI_ANY_ID, PCI_ANY_ID,
3977 PCI_CLASS_COMMUNICATION_MULTISERIAL << 8,
3978 0xffff00, pbn_default },
3982 static struct pci_driver serial_pci_driver = {
3984 .probe = pciserial_init_one,
3985 .remove = __devexit_p(pciserial_remove_one),
3987 .suspend = pciserial_suspend_one,
3988 .resume = pciserial_resume_one,
3990 .id_table = serial_pci_tbl,
3993 static int __init serial8250_pci_init(void)
3995 return pci_register_driver(&serial_pci_driver);
3998 static void __exit serial8250_pci_exit(void)
4000 pci_unregister_driver(&serial_pci_driver);
4003 module_init(serial8250_pci_init);
4004 module_exit(serial8250_pci_exit);
4006 MODULE_LICENSE("GPL");
4007 MODULE_DESCRIPTION("Generic 8250/16x50 PCI serial probe module");
4008 MODULE_DEVICE_TABLE(pci, serial_pci_tbl);