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 = ioremap_nocache(pci_resource_start(dev, 0),
402 pci_resource_len(dev, 0));
406 /* Set bit-4 Control Register (UART RESET) in to reset the uarts */
407 writeb(0x10, p + OCT_REG_CR_OFF);
409 writeb(0x0, p + OCT_REG_CR_OFF);
411 /* Set bit-2 (INTENABLE) of Control Register */
412 writeb(0x4, p + OCT_REG_CR_OFF);
419 * Disables the global interrupt of PMC-OctalPro
422 static void __devexit sbs_exit(struct pci_dev *dev)
426 p = ioremap_nocache(pci_resource_start(dev, 0),
427 pci_resource_len(dev, 0));
428 /* FIXME: What if resource_len < OCT_REG_CR_OFF */
430 writeb(0, p + OCT_REG_CR_OFF);
435 * SIIG serial cards have an PCI interface chip which also controls
436 * the UART clocking frequency. Each UART can be clocked independently
437 * (except cards equiped with 4 UARTs) and initial clocking settings
438 * are stored in the EEPROM chip. It can cause problems because this
439 * version of serial driver doesn't support differently clocked UART's
440 * on single PCI card. To prevent this, initialization functions set
441 * high frequency clocking for all UART's on given card. It is safe (I
442 * hope) because it doesn't touch EEPROM settings to prevent conflicts
443 * with other OSes (like M$ DOS).
445 * SIIG support added by Andrey Panin <pazke@donpac.ru>, 10/1999
447 * There is two family of SIIG serial cards with different PCI
448 * interface chip and different configuration methods:
449 * - 10x cards have control registers in IO and/or memory space;
450 * - 20x cards have control registers in standard PCI configuration space.
452 * Note: all 10x cards have PCI device ids 0x10..
453 * all 20x cards have PCI device ids 0x20..
455 * There are also Quartet Serial cards which use Oxford Semiconductor
456 * 16954 quad UART PCI chip clocked by 18.432 MHz quartz.
458 * Note: some SIIG cards are probed by the parport_serial object.
461 #define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc)
462 #define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8)
464 static int pci_siig10x_init(struct pci_dev *dev)
469 switch (dev->device & 0xfff8) {
470 case PCI_DEVICE_ID_SIIG_1S_10x: /* 1S */
473 case PCI_DEVICE_ID_SIIG_2S_10x: /* 2S, 2S1P */
476 default: /* 1S1P, 4S */
481 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
485 writew(readw(p + 0x28) & data, p + 0x28);
491 #define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc)
492 #define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc)
494 static int pci_siig20x_init(struct pci_dev *dev)
498 /* Change clock frequency for the first UART. */
499 pci_read_config_byte(dev, 0x6f, &data);
500 pci_write_config_byte(dev, 0x6f, data & 0xef);
502 /* If this card has 2 UART, we have to do the same with second UART. */
503 if (((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S_20x) ||
504 ((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S1P_20x)) {
505 pci_read_config_byte(dev, 0x73, &data);
506 pci_write_config_byte(dev, 0x73, data & 0xef);
511 static int pci_siig_init(struct pci_dev *dev)
513 unsigned int type = dev->device & 0xff00;
516 return pci_siig10x_init(dev);
517 else if (type == 0x2000)
518 return pci_siig20x_init(dev);
520 moan_device("Unknown SIIG card", dev);
524 static int pci_siig_setup(struct serial_private *priv,
525 const struct pciserial_board *board,
526 struct uart_port *port, int idx)
528 unsigned int bar = FL_GET_BASE(board->flags) + idx, offset = 0;
532 offset = (idx - 4) * 8;
535 return setup_port(priv, port, bar, offset, 0);
539 * Timedia has an explosion of boards, and to avoid the PCI table from
540 * growing *huge*, we use this function to collapse some 70 entries
541 * in the PCI table into one, for sanity's and compactness's sake.
543 static const unsigned short timedia_single_port[] = {
544 0x4025, 0x4027, 0x4028, 0x5025, 0x5027, 0
547 static const unsigned short timedia_dual_port[] = {
548 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085,
549 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079,
550 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079,
551 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079,
555 static const unsigned short timedia_quad_port[] = {
556 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157,
557 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159,
558 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056,
562 static const unsigned short timedia_eight_port[] = {
563 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166,
564 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0
567 static const struct timedia_struct {
569 const unsigned short *ids;
571 { 1, timedia_single_port },
572 { 2, timedia_dual_port },
573 { 4, timedia_quad_port },
574 { 8, timedia_eight_port }
577 static int pci_timedia_init(struct pci_dev *dev)
579 const unsigned short *ids;
582 for (i = 0; i < ARRAY_SIZE(timedia_data); i++) {
583 ids = timedia_data[i].ids;
584 for (j = 0; ids[j]; j++)
585 if (dev->subsystem_device == ids[j])
586 return timedia_data[i].num;
592 * Timedia/SUNIX uses a mixture of BARs and offsets
593 * Ugh, this is ugly as all hell --- TYT
596 pci_timedia_setup(struct serial_private *priv,
597 const struct pciserial_board *board,
598 struct uart_port *port, int idx)
600 unsigned int bar = 0, offset = board->first_offset;
607 offset = board->uart_offset;
614 offset = board->uart_offset;
623 return setup_port(priv, port, bar, offset, board->reg_shift);
627 * Some Titan cards are also a little weird
630 titan_400l_800l_setup(struct serial_private *priv,
631 const struct pciserial_board *board,
632 struct uart_port *port, int idx)
634 unsigned int bar, offset = board->first_offset;
645 offset = (idx - 2) * board->uart_offset;
648 return setup_port(priv, port, bar, offset, board->reg_shift);
651 static int pci_xircom_init(struct pci_dev *dev)
657 static int pci_ni8420_init(struct pci_dev *dev)
660 unsigned long base, len;
661 unsigned int bar = 0;
663 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
664 moan_device("no memory in bar", dev);
668 base = pci_resource_start(dev, bar);
669 len = pci_resource_len(dev, bar);
670 p = ioremap_nocache(base, len);
674 /* Enable CPU Interrupt */
675 writel(readl(p + NI8420_INT_ENABLE_REG) | NI8420_INT_ENABLE_BIT,
676 p + NI8420_INT_ENABLE_REG);
682 #define MITE_IOWBSR1_WSIZE 0xa
683 #define MITE_IOWBSR1_WIN_OFFSET 0x800
684 #define MITE_IOWBSR1_WENAB (1 << 7)
685 #define MITE_LCIMR1_IO_IE_0 (1 << 24)
686 #define MITE_LCIMR2_SET_CPU_IE (1 << 31)
687 #define MITE_IOWCR1_RAMSEL_MASK 0xfffffffe
689 static int pci_ni8430_init(struct pci_dev *dev)
692 unsigned long base, len;
694 unsigned int bar = 0;
696 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
697 moan_device("no memory in bar", dev);
701 base = pci_resource_start(dev, bar);
702 len = pci_resource_len(dev, bar);
703 p = ioremap_nocache(base, len);
707 /* Set device window address and size in BAR0 */
708 device_window = ((base + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00)
709 | MITE_IOWBSR1_WENAB | MITE_IOWBSR1_WSIZE;
710 writel(device_window, p + MITE_IOWBSR1);
712 /* Set window access to go to RAMSEL IO address space */
713 writel((readl(p + MITE_IOWCR1) & MITE_IOWCR1_RAMSEL_MASK),
716 /* Enable IO Bus Interrupt 0 */
717 writel(MITE_LCIMR1_IO_IE_0, p + MITE_LCIMR1);
719 /* Enable CPU Interrupt */
720 writel(MITE_LCIMR2_SET_CPU_IE, p + MITE_LCIMR2);
726 /* UART Port Control Register */
727 #define NI8430_PORTCON 0x0f
728 #define NI8430_PORTCON_TXVR_ENABLE (1 << 3)
731 pci_ni8430_setup(struct serial_private *priv,
732 const struct pciserial_board *board,
733 struct uart_port *port, int idx)
736 unsigned long base, len;
737 unsigned int bar, offset = board->first_offset;
739 if (idx >= board->num_ports)
742 bar = FL_GET_BASE(board->flags);
743 offset += idx * board->uart_offset;
745 base = pci_resource_start(priv->dev, bar);
746 len = pci_resource_len(priv->dev, bar);
747 p = ioremap_nocache(base, len);
749 /* enable the transciever */
750 writeb(readb(p + offset + NI8430_PORTCON) | NI8430_PORTCON_TXVR_ENABLE,
751 p + offset + NI8430_PORTCON);
755 return setup_port(priv, port, bar, offset, board->reg_shift);
759 static int pci_netmos_init(struct pci_dev *dev)
761 /* subdevice 0x00PS means <P> parallel, <S> serial */
762 unsigned int num_serial = dev->subsystem_device & 0xf;
764 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
765 dev->subsystem_device == 0x0299)
774 * ITE support by Niels de Vos <niels.devos@wincor-nixdorf.com>
776 * These chips are available with optionally one parallel port and up to
777 * two serial ports. Unfortunately they all have the same product id.
779 * Basic configuration is done over a region of 32 I/O ports. The base
780 * ioport is called INTA or INTC, depending on docs/other drivers.
782 * The region of the 32 I/O ports is configured in POSIO0R...
786 #define ITE_887x_MISCR 0x9c
787 #define ITE_887x_INTCBAR 0x78
788 #define ITE_887x_UARTBAR 0x7c
789 #define ITE_887x_PS0BAR 0x10
790 #define ITE_887x_POSIO0 0x60
793 #define ITE_887x_IOSIZE 32
794 /* I/O space size (bits 26-24; 8 bytes = 011b) */
795 #define ITE_887x_POSIO_IOSIZE_8 (3 << 24)
796 /* I/O space size (bits 26-24; 32 bytes = 101b) */
797 #define ITE_887x_POSIO_IOSIZE_32 (5 << 24)
798 /* Decoding speed (1 = slow, 2 = medium, 3 = fast) */
799 #define ITE_887x_POSIO_SPEED (3 << 29)
800 /* enable IO_Space bit */
801 #define ITE_887x_POSIO_ENABLE (1 << 31)
803 static int pci_ite887x_init(struct pci_dev *dev)
805 /* inta_addr are the configuration addresses of the ITE */
806 static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0,
809 struct resource *iobase = NULL;
810 u32 miscr, uartbar, ioport;
812 /* search for the base-ioport */
814 while (inta_addr[i] && iobase == NULL) {
815 iobase = request_region(inta_addr[i], ITE_887x_IOSIZE,
817 if (iobase != NULL) {
818 /* write POSIO0R - speed | size | ioport */
819 pci_write_config_dword(dev, ITE_887x_POSIO0,
820 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
821 ITE_887x_POSIO_IOSIZE_32 | inta_addr[i]);
822 /* write INTCBAR - ioport */
823 pci_write_config_dword(dev, ITE_887x_INTCBAR,
825 ret = inb(inta_addr[i]);
827 /* ioport connected */
830 release_region(iobase->start, ITE_887x_IOSIZE);
837 printk(KERN_ERR "ite887x: could not find iobase\n");
841 /* start of undocumented type checking (see parport_pc.c) */
842 type = inb(iobase->start + 0x18) & 0x0f;
845 case 0x2: /* ITE8871 (1P) */
846 case 0xa: /* ITE8875 (1P) */
849 case 0xe: /* ITE8872 (2S1P) */
852 case 0x6: /* ITE8873 (1S) */
855 case 0x8: /* ITE8874 (2S) */
859 moan_device("Unknown ITE887x", dev);
863 /* configure all serial ports */
864 for (i = 0; i < ret; i++) {
865 /* read the I/O port from the device */
866 pci_read_config_dword(dev, ITE_887x_PS0BAR + (0x4 * (i + 1)),
868 ioport &= 0x0000FF00; /* the actual base address */
869 pci_write_config_dword(dev, ITE_887x_POSIO0 + (0x4 * (i + 1)),
870 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
871 ITE_887x_POSIO_IOSIZE_8 | ioport);
873 /* write the ioport to the UARTBAR */
874 pci_read_config_dword(dev, ITE_887x_UARTBAR, &uartbar);
875 uartbar &= ~(0xffff << (16 * i)); /* clear half the reg */
876 uartbar |= (ioport << (16 * i)); /* set the ioport */
877 pci_write_config_dword(dev, ITE_887x_UARTBAR, uartbar);
879 /* get current config */
880 pci_read_config_dword(dev, ITE_887x_MISCR, &miscr);
881 /* disable interrupts (UARTx_Routing[3:0]) */
882 miscr &= ~(0xf << (12 - 4 * i));
883 /* activate the UART (UARTx_En) */
884 miscr |= 1 << (23 - i);
885 /* write new config with activated UART */
886 pci_write_config_dword(dev, ITE_887x_MISCR, miscr);
890 /* the device has no UARTs if we get here */
891 release_region(iobase->start, ITE_887x_IOSIZE);
897 static void __devexit pci_ite887x_exit(struct pci_dev *dev)
900 /* the ioport is bit 0-15 in POSIO0R */
901 pci_read_config_dword(dev, ITE_887x_POSIO0, &ioport);
903 release_region(ioport, ITE_887x_IOSIZE);
907 * Oxford Semiconductor Inc.
908 * Check that device is part of the Tornado range of devices, then determine
909 * the number of ports available on the device.
911 static int pci_oxsemi_tornado_init(struct pci_dev *dev)
914 unsigned long deviceID;
915 unsigned int number_uarts = 0;
917 /* OxSemi Tornado devices are all 0xCxxx */
918 if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
919 (dev->device & 0xF000) != 0xC000)
922 p = pci_iomap(dev, 0, 5);
926 deviceID = ioread32(p);
928 if (deviceID == 0x07000200) {
929 number_uarts = ioread8(p + 4);
931 "%d ports detected on Oxford PCI Express device\n",
939 pci_default_setup(struct serial_private *priv,
940 const struct pciserial_board *board,
941 struct uart_port *port, int idx)
943 unsigned int bar, offset = board->first_offset, maxnr;
945 bar = FL_GET_BASE(board->flags);
946 if (board->flags & FL_BASE_BARS)
949 offset += idx * board->uart_offset;
951 maxnr = (pci_resource_len(priv->dev, bar) - board->first_offset) >>
952 (board->reg_shift + 3);
954 if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr)
957 return setup_port(priv, port, bar, offset, board->reg_shift);
960 static int skip_tx_en_setup(struct serial_private *priv,
961 const struct pciserial_board *board,
962 struct uart_port *port, int idx)
964 port->flags |= UPF_NO_TXEN_TEST;
965 printk(KERN_DEBUG "serial8250: skipping TxEn test for device "
966 "[%04x:%04x] subsystem [%04x:%04x]\n",
969 priv->dev->subsystem_vendor,
970 priv->dev->subsystem_device);
972 return pci_default_setup(priv, board, port, idx);
975 /* This should be in linux/pci_ids.h */
976 #define PCI_VENDOR_ID_SBSMODULARIO 0x124B
977 #define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B
978 #define PCI_DEVICE_ID_OCTPRO 0x0001
979 #define PCI_SUBDEVICE_ID_OCTPRO232 0x0108
980 #define PCI_SUBDEVICE_ID_OCTPRO422 0x0208
981 #define PCI_SUBDEVICE_ID_POCTAL232 0x0308
982 #define PCI_SUBDEVICE_ID_POCTAL422 0x0408
983 #define PCI_VENDOR_ID_ADVANTECH 0x13fe
984 #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
986 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
987 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
990 * Master list of serial port init/setup/exit quirks.
991 * This does not describe the general nature of the port.
992 * (ie, baud base, number and location of ports, etc)
994 * This list is ordered alphabetically by vendor then device.
995 * Specific entries must come before more generic entries.
997 static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
999 * ADDI-DATA GmbH communication cards <info@addi-data.com>
1002 .vendor = PCI_VENDOR_ID_ADDIDATA_OLD,
1003 .device = PCI_DEVICE_ID_ADDIDATA_APCI7800,
1004 .subvendor = PCI_ANY_ID,
1005 .subdevice = PCI_ANY_ID,
1006 .setup = addidata_apci7800_setup,
1009 * AFAVLAB cards - these may be called via parport_serial
1010 * It is not clear whether this applies to all products.
1013 .vendor = PCI_VENDOR_ID_AFAVLAB,
1014 .device = PCI_ANY_ID,
1015 .subvendor = PCI_ANY_ID,
1016 .subdevice = PCI_ANY_ID,
1017 .setup = afavlab_setup,
1023 .vendor = PCI_VENDOR_ID_HP,
1024 .device = PCI_DEVICE_ID_HP_DIVA,
1025 .subvendor = PCI_ANY_ID,
1026 .subdevice = PCI_ANY_ID,
1027 .init = pci_hp_diva_init,
1028 .setup = pci_hp_diva_setup,
1034 .vendor = PCI_VENDOR_ID_INTEL,
1035 .device = PCI_DEVICE_ID_INTEL_80960_RP,
1036 .subvendor = 0xe4bf,
1037 .subdevice = PCI_ANY_ID,
1038 .init = pci_inteli960ni_init,
1039 .setup = pci_default_setup,
1042 .vendor = PCI_VENDOR_ID_INTEL,
1043 .device = PCI_DEVICE_ID_INTEL_8257X_SOL,
1044 .subvendor = PCI_ANY_ID,
1045 .subdevice = PCI_ANY_ID,
1046 .setup = skip_tx_en_setup,
1049 .vendor = PCI_VENDOR_ID_INTEL,
1050 .device = PCI_DEVICE_ID_INTEL_82573L_SOL,
1051 .subvendor = PCI_ANY_ID,
1052 .subdevice = PCI_ANY_ID,
1053 .setup = skip_tx_en_setup,
1056 .vendor = PCI_VENDOR_ID_INTEL,
1057 .device = PCI_DEVICE_ID_INTEL_82573E_SOL,
1058 .subvendor = PCI_ANY_ID,
1059 .subdevice = PCI_ANY_ID,
1060 .setup = skip_tx_en_setup,
1066 .vendor = PCI_VENDOR_ID_ITE,
1067 .device = PCI_DEVICE_ID_ITE_8872,
1068 .subvendor = PCI_ANY_ID,
1069 .subdevice = PCI_ANY_ID,
1070 .init = pci_ite887x_init,
1071 .setup = pci_default_setup,
1072 .exit = __devexit_p(pci_ite887x_exit),
1075 * National Instruments
1078 .vendor = PCI_VENDOR_ID_NI,
1079 .device = PCI_DEVICE_ID_NI_PCI23216,
1080 .subvendor = PCI_ANY_ID,
1081 .subdevice = PCI_ANY_ID,
1082 .init = pci_ni8420_init,
1083 .setup = pci_default_setup,
1084 .exit = __devexit_p(pci_ni8420_exit),
1087 .vendor = PCI_VENDOR_ID_NI,
1088 .device = PCI_DEVICE_ID_NI_PCI2328,
1089 .subvendor = PCI_ANY_ID,
1090 .subdevice = PCI_ANY_ID,
1091 .init = pci_ni8420_init,
1092 .setup = pci_default_setup,
1093 .exit = __devexit_p(pci_ni8420_exit),
1096 .vendor = PCI_VENDOR_ID_NI,
1097 .device = PCI_DEVICE_ID_NI_PCI2324,
1098 .subvendor = PCI_ANY_ID,
1099 .subdevice = PCI_ANY_ID,
1100 .init = pci_ni8420_init,
1101 .setup = pci_default_setup,
1102 .exit = __devexit_p(pci_ni8420_exit),
1105 .vendor = PCI_VENDOR_ID_NI,
1106 .device = PCI_DEVICE_ID_NI_PCI2322,
1107 .subvendor = PCI_ANY_ID,
1108 .subdevice = PCI_ANY_ID,
1109 .init = pci_ni8420_init,
1110 .setup = pci_default_setup,
1111 .exit = __devexit_p(pci_ni8420_exit),
1114 .vendor = PCI_VENDOR_ID_NI,
1115 .device = PCI_DEVICE_ID_NI_PCI2324I,
1116 .subvendor = PCI_ANY_ID,
1117 .subdevice = PCI_ANY_ID,
1118 .init = pci_ni8420_init,
1119 .setup = pci_default_setup,
1120 .exit = __devexit_p(pci_ni8420_exit),
1123 .vendor = PCI_VENDOR_ID_NI,
1124 .device = PCI_DEVICE_ID_NI_PCI2322I,
1125 .subvendor = PCI_ANY_ID,
1126 .subdevice = PCI_ANY_ID,
1127 .init = pci_ni8420_init,
1128 .setup = pci_default_setup,
1129 .exit = __devexit_p(pci_ni8420_exit),
1132 .vendor = PCI_VENDOR_ID_NI,
1133 .device = PCI_DEVICE_ID_NI_PXI8420_23216,
1134 .subvendor = PCI_ANY_ID,
1135 .subdevice = PCI_ANY_ID,
1136 .init = pci_ni8420_init,
1137 .setup = pci_default_setup,
1138 .exit = __devexit_p(pci_ni8420_exit),
1141 .vendor = PCI_VENDOR_ID_NI,
1142 .device = PCI_DEVICE_ID_NI_PXI8420_2328,
1143 .subvendor = PCI_ANY_ID,
1144 .subdevice = PCI_ANY_ID,
1145 .init = pci_ni8420_init,
1146 .setup = pci_default_setup,
1147 .exit = __devexit_p(pci_ni8420_exit),
1150 .vendor = PCI_VENDOR_ID_NI,
1151 .device = PCI_DEVICE_ID_NI_PXI8420_2324,
1152 .subvendor = PCI_ANY_ID,
1153 .subdevice = PCI_ANY_ID,
1154 .init = pci_ni8420_init,
1155 .setup = pci_default_setup,
1156 .exit = __devexit_p(pci_ni8420_exit),
1159 .vendor = PCI_VENDOR_ID_NI,
1160 .device = PCI_DEVICE_ID_NI_PXI8420_2322,
1161 .subvendor = PCI_ANY_ID,
1162 .subdevice = PCI_ANY_ID,
1163 .init = pci_ni8420_init,
1164 .setup = pci_default_setup,
1165 .exit = __devexit_p(pci_ni8420_exit),
1168 .vendor = PCI_VENDOR_ID_NI,
1169 .device = PCI_DEVICE_ID_NI_PXI8422_2324,
1170 .subvendor = PCI_ANY_ID,
1171 .subdevice = PCI_ANY_ID,
1172 .init = pci_ni8420_init,
1173 .setup = pci_default_setup,
1174 .exit = __devexit_p(pci_ni8420_exit),
1177 .vendor = PCI_VENDOR_ID_NI,
1178 .device = PCI_DEVICE_ID_NI_PXI8422_2322,
1179 .subvendor = PCI_ANY_ID,
1180 .subdevice = PCI_ANY_ID,
1181 .init = pci_ni8420_init,
1182 .setup = pci_default_setup,
1183 .exit = __devexit_p(pci_ni8420_exit),
1186 .vendor = PCI_VENDOR_ID_NI,
1187 .device = PCI_ANY_ID,
1188 .subvendor = PCI_ANY_ID,
1189 .subdevice = PCI_ANY_ID,
1190 .init = pci_ni8430_init,
1191 .setup = pci_ni8430_setup,
1192 .exit = __devexit_p(pci_ni8430_exit),
1198 .vendor = PCI_VENDOR_ID_PANACOM,
1199 .device = PCI_DEVICE_ID_PANACOM_QUADMODEM,
1200 .subvendor = PCI_ANY_ID,
1201 .subdevice = PCI_ANY_ID,
1202 .init = pci_plx9050_init,
1203 .setup = pci_default_setup,
1204 .exit = __devexit_p(pci_plx9050_exit),
1207 .vendor = PCI_VENDOR_ID_PANACOM,
1208 .device = PCI_DEVICE_ID_PANACOM_DUALMODEM,
1209 .subvendor = PCI_ANY_ID,
1210 .subdevice = PCI_ANY_ID,
1211 .init = pci_plx9050_init,
1212 .setup = pci_default_setup,
1213 .exit = __devexit_p(pci_plx9050_exit),
1219 .vendor = PCI_VENDOR_ID_PLX,
1220 .device = PCI_DEVICE_ID_PLX_9030,
1221 .subvendor = PCI_SUBVENDOR_ID_PERLE,
1222 .subdevice = PCI_ANY_ID,
1223 .setup = pci_default_setup,
1226 .vendor = PCI_VENDOR_ID_PLX,
1227 .device = PCI_DEVICE_ID_PLX_9050,
1228 .subvendor = PCI_SUBVENDOR_ID_EXSYS,
1229 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
1230 .init = pci_plx9050_init,
1231 .setup = pci_default_setup,
1232 .exit = __devexit_p(pci_plx9050_exit),
1235 .vendor = PCI_VENDOR_ID_PLX,
1236 .device = PCI_DEVICE_ID_PLX_9050,
1237 .subvendor = PCI_SUBVENDOR_ID_KEYSPAN,
1238 .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2,
1239 .init = pci_plx9050_init,
1240 .setup = pci_default_setup,
1241 .exit = __devexit_p(pci_plx9050_exit),
1244 .vendor = PCI_VENDOR_ID_PLX,
1245 .device = PCI_DEVICE_ID_PLX_9050,
1246 .subvendor = PCI_VENDOR_ID_PLX,
1247 .subdevice = PCI_SUBDEVICE_ID_UNKNOWN_0x1584,
1248 .init = pci_plx9050_init,
1249 .setup = pci_default_setup,
1250 .exit = __devexit_p(pci_plx9050_exit),
1253 .vendor = PCI_VENDOR_ID_PLX,
1254 .device = PCI_DEVICE_ID_PLX_ROMULUS,
1255 .subvendor = PCI_VENDOR_ID_PLX,
1256 .subdevice = PCI_DEVICE_ID_PLX_ROMULUS,
1257 .init = pci_plx9050_init,
1258 .setup = pci_default_setup,
1259 .exit = __devexit_p(pci_plx9050_exit),
1262 * SBS Technologies, Inc., PMC-OCTALPRO 232
1265 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1266 .device = PCI_DEVICE_ID_OCTPRO,
1267 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1268 .subdevice = PCI_SUBDEVICE_ID_OCTPRO232,
1271 .exit = __devexit_p(sbs_exit),
1274 * SBS Technologies, Inc., PMC-OCTALPRO 422
1277 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1278 .device = PCI_DEVICE_ID_OCTPRO,
1279 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1280 .subdevice = PCI_SUBDEVICE_ID_OCTPRO422,
1283 .exit = __devexit_p(sbs_exit),
1286 * SBS Technologies, Inc., P-Octal 232
1289 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1290 .device = PCI_DEVICE_ID_OCTPRO,
1291 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1292 .subdevice = PCI_SUBDEVICE_ID_POCTAL232,
1295 .exit = __devexit_p(sbs_exit),
1298 * SBS Technologies, Inc., P-Octal 422
1301 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1302 .device = PCI_DEVICE_ID_OCTPRO,
1303 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1304 .subdevice = PCI_SUBDEVICE_ID_POCTAL422,
1307 .exit = __devexit_p(sbs_exit),
1310 * SIIG cards - these may be called via parport_serial
1313 .vendor = PCI_VENDOR_ID_SIIG,
1314 .device = PCI_ANY_ID,
1315 .subvendor = PCI_ANY_ID,
1316 .subdevice = PCI_ANY_ID,
1317 .init = pci_siig_init,
1318 .setup = pci_siig_setup,
1324 .vendor = PCI_VENDOR_ID_TITAN,
1325 .device = PCI_DEVICE_ID_TITAN_400L,
1326 .subvendor = PCI_ANY_ID,
1327 .subdevice = PCI_ANY_ID,
1328 .setup = titan_400l_800l_setup,
1331 .vendor = PCI_VENDOR_ID_TITAN,
1332 .device = PCI_DEVICE_ID_TITAN_800L,
1333 .subvendor = PCI_ANY_ID,
1334 .subdevice = PCI_ANY_ID,
1335 .setup = titan_400l_800l_setup,
1341 .vendor = PCI_VENDOR_ID_TIMEDIA,
1342 .device = PCI_DEVICE_ID_TIMEDIA_1889,
1343 .subvendor = PCI_VENDOR_ID_TIMEDIA,
1344 .subdevice = PCI_ANY_ID,
1345 .init = pci_timedia_init,
1346 .setup = pci_timedia_setup,
1349 .vendor = PCI_VENDOR_ID_TIMEDIA,
1350 .device = PCI_ANY_ID,
1351 .subvendor = PCI_ANY_ID,
1352 .subdevice = PCI_ANY_ID,
1353 .setup = pci_timedia_setup,
1359 .vendor = PCI_VENDOR_ID_XIRCOM,
1360 .device = PCI_DEVICE_ID_XIRCOM_X3201_MDM,
1361 .subvendor = PCI_ANY_ID,
1362 .subdevice = PCI_ANY_ID,
1363 .init = pci_xircom_init,
1364 .setup = pci_default_setup,
1367 * Netmos cards - these may be called via parport_serial
1370 .vendor = PCI_VENDOR_ID_NETMOS,
1371 .device = PCI_ANY_ID,
1372 .subvendor = PCI_ANY_ID,
1373 .subdevice = PCI_ANY_ID,
1374 .init = pci_netmos_init,
1375 .setup = pci_default_setup,
1378 * For Oxford Semiconductor and Mainpine
1381 .vendor = PCI_VENDOR_ID_OXSEMI,
1382 .device = PCI_ANY_ID,
1383 .subvendor = PCI_ANY_ID,
1384 .subdevice = PCI_ANY_ID,
1385 .init = pci_oxsemi_tornado_init,
1386 .setup = pci_default_setup,
1389 .vendor = PCI_VENDOR_ID_MAINPINE,
1390 .device = PCI_ANY_ID,
1391 .subvendor = PCI_ANY_ID,
1392 .subdevice = PCI_ANY_ID,
1393 .init = pci_oxsemi_tornado_init,
1394 .setup = pci_default_setup,
1397 * Default "match everything" terminator entry
1400 .vendor = PCI_ANY_ID,
1401 .device = PCI_ANY_ID,
1402 .subvendor = PCI_ANY_ID,
1403 .subdevice = PCI_ANY_ID,
1404 .setup = pci_default_setup,
1408 static inline int quirk_id_matches(u32 quirk_id, u32 dev_id)
1410 return quirk_id == PCI_ANY_ID || quirk_id == dev_id;
1413 static struct pci_serial_quirk *find_quirk(struct pci_dev *dev)
1415 struct pci_serial_quirk *quirk;
1417 for (quirk = pci_serial_quirks; ; quirk++)
1418 if (quirk_id_matches(quirk->vendor, dev->vendor) &&
1419 quirk_id_matches(quirk->device, dev->device) &&
1420 quirk_id_matches(quirk->subvendor, dev->subsystem_vendor) &&
1421 quirk_id_matches(quirk->subdevice, dev->subsystem_device))
1426 static inline int get_pci_irq(struct pci_dev *dev,
1427 const struct pciserial_board *board)
1429 if (board->flags & FL_NOIRQ)
1436 * This is the configuration table for all of the PCI serial boards
1437 * which we support. It is directly indexed by the pci_board_num_t enum
1438 * value, which is encoded in the pci_device_id PCI probe table's
1439 * driver_data member.
1441 * The makeup of these names are:
1442 * pbn_bn{_bt}_n_baud{_offsetinhex}
1444 * bn = PCI BAR number
1445 * bt = Index using PCI BARs
1446 * n = number of serial ports
1448 * offsetinhex = offset for each sequential port (in hex)
1450 * This table is sorted by (in order): bn, bt, baud, offsetindex, n.
1452 * Please note: in theory if n = 1, _bt infix should make no difference.
1453 * ie, pbn_b0_1_115200 is the same as pbn_b0_bt_1_115200
1455 enum pci_board_num_t {
1475 pbn_b0_2_1843200_200,
1476 pbn_b0_4_1843200_200,
1477 pbn_b0_8_1843200_200,
1544 * Board-specific versions.
1552 pbn_oxsemi_1_4000000,
1553 pbn_oxsemi_2_4000000,
1554 pbn_oxsemi_4_4000000,
1555 pbn_oxsemi_8_4000000,
1573 * uart_offset - the space between channels
1574 * reg_shift - describes how the UART registers are mapped
1575 * to PCI memory by the card.
1576 * For example IER register on SBS, Inc. PMC-OctPro is located at
1577 * offset 0x10 from the UART base, while UART_IER is defined as 1
1578 * in include/linux/serial_reg.h,
1579 * see first lines of serial_in() and serial_out() in 8250.c
1582 static struct pciserial_board pci_boards[] __devinitdata = {
1586 .base_baud = 115200,
1589 [pbn_b0_1_115200] = {
1592 .base_baud = 115200,
1595 [pbn_b0_2_115200] = {
1598 .base_baud = 115200,
1601 [pbn_b0_4_115200] = {
1604 .base_baud = 115200,
1607 [pbn_b0_5_115200] = {
1610 .base_baud = 115200,
1613 [pbn_b0_8_115200] = {
1616 .base_baud = 115200,
1619 [pbn_b0_1_921600] = {
1622 .base_baud = 921600,
1625 [pbn_b0_2_921600] = {
1628 .base_baud = 921600,
1631 [pbn_b0_4_921600] = {
1634 .base_baud = 921600,
1638 [pbn_b0_2_1130000] = {
1641 .base_baud = 1130000,
1645 [pbn_b0_4_1152000] = {
1648 .base_baud = 1152000,
1652 [pbn_b0_2_1843200] = {
1655 .base_baud = 1843200,
1658 [pbn_b0_4_1843200] = {
1661 .base_baud = 1843200,
1665 [pbn_b0_2_1843200_200] = {
1668 .base_baud = 1843200,
1669 .uart_offset = 0x200,
1671 [pbn_b0_4_1843200_200] = {
1674 .base_baud = 1843200,
1675 .uart_offset = 0x200,
1677 [pbn_b0_8_1843200_200] = {
1680 .base_baud = 1843200,
1681 .uart_offset = 0x200,
1683 [pbn_b0_1_4000000] = {
1686 .base_baud = 4000000,
1690 [pbn_b0_bt_1_115200] = {
1691 .flags = FL_BASE0|FL_BASE_BARS,
1693 .base_baud = 115200,
1696 [pbn_b0_bt_2_115200] = {
1697 .flags = FL_BASE0|FL_BASE_BARS,
1699 .base_baud = 115200,
1702 [pbn_b0_bt_8_115200] = {
1703 .flags = FL_BASE0|FL_BASE_BARS,
1705 .base_baud = 115200,
1709 [pbn_b0_bt_1_460800] = {
1710 .flags = FL_BASE0|FL_BASE_BARS,
1712 .base_baud = 460800,
1715 [pbn_b0_bt_2_460800] = {
1716 .flags = FL_BASE0|FL_BASE_BARS,
1718 .base_baud = 460800,
1721 [pbn_b0_bt_4_460800] = {
1722 .flags = FL_BASE0|FL_BASE_BARS,
1724 .base_baud = 460800,
1728 [pbn_b0_bt_1_921600] = {
1729 .flags = FL_BASE0|FL_BASE_BARS,
1731 .base_baud = 921600,
1734 [pbn_b0_bt_2_921600] = {
1735 .flags = FL_BASE0|FL_BASE_BARS,
1737 .base_baud = 921600,
1740 [pbn_b0_bt_4_921600] = {
1741 .flags = FL_BASE0|FL_BASE_BARS,
1743 .base_baud = 921600,
1746 [pbn_b0_bt_8_921600] = {
1747 .flags = FL_BASE0|FL_BASE_BARS,
1749 .base_baud = 921600,
1753 [pbn_b1_1_115200] = {
1756 .base_baud = 115200,
1759 [pbn_b1_2_115200] = {
1762 .base_baud = 115200,
1765 [pbn_b1_4_115200] = {
1768 .base_baud = 115200,
1771 [pbn_b1_8_115200] = {
1774 .base_baud = 115200,
1777 [pbn_b1_16_115200] = {
1780 .base_baud = 115200,
1784 [pbn_b1_1_921600] = {
1787 .base_baud = 921600,
1790 [pbn_b1_2_921600] = {
1793 .base_baud = 921600,
1796 [pbn_b1_4_921600] = {
1799 .base_baud = 921600,
1802 [pbn_b1_8_921600] = {
1805 .base_baud = 921600,
1808 [pbn_b1_2_1250000] = {
1811 .base_baud = 1250000,
1815 [pbn_b1_bt_1_115200] = {
1816 .flags = FL_BASE1|FL_BASE_BARS,
1818 .base_baud = 115200,
1821 [pbn_b1_bt_2_115200] = {
1822 .flags = FL_BASE1|FL_BASE_BARS,
1824 .base_baud = 115200,
1827 [pbn_b1_bt_4_115200] = {
1828 .flags = FL_BASE1|FL_BASE_BARS,
1830 .base_baud = 115200,
1834 [pbn_b1_bt_2_921600] = {
1835 .flags = FL_BASE1|FL_BASE_BARS,
1837 .base_baud = 921600,
1841 [pbn_b1_1_1382400] = {
1844 .base_baud = 1382400,
1847 [pbn_b1_2_1382400] = {
1850 .base_baud = 1382400,
1853 [pbn_b1_4_1382400] = {
1856 .base_baud = 1382400,
1859 [pbn_b1_8_1382400] = {
1862 .base_baud = 1382400,
1866 [pbn_b2_1_115200] = {
1869 .base_baud = 115200,
1872 [pbn_b2_2_115200] = {
1875 .base_baud = 115200,
1878 [pbn_b2_4_115200] = {
1881 .base_baud = 115200,
1884 [pbn_b2_8_115200] = {
1887 .base_baud = 115200,
1891 [pbn_b2_1_460800] = {
1894 .base_baud = 460800,
1897 [pbn_b2_4_460800] = {
1900 .base_baud = 460800,
1903 [pbn_b2_8_460800] = {
1906 .base_baud = 460800,
1909 [pbn_b2_16_460800] = {
1912 .base_baud = 460800,
1916 [pbn_b2_1_921600] = {
1919 .base_baud = 921600,
1922 [pbn_b2_4_921600] = {
1925 .base_baud = 921600,
1928 [pbn_b2_8_921600] = {
1931 .base_baud = 921600,
1935 [pbn_b2_bt_1_115200] = {
1936 .flags = FL_BASE2|FL_BASE_BARS,
1938 .base_baud = 115200,
1941 [pbn_b2_bt_2_115200] = {
1942 .flags = FL_BASE2|FL_BASE_BARS,
1944 .base_baud = 115200,
1947 [pbn_b2_bt_4_115200] = {
1948 .flags = FL_BASE2|FL_BASE_BARS,
1950 .base_baud = 115200,
1954 [pbn_b2_bt_2_921600] = {
1955 .flags = FL_BASE2|FL_BASE_BARS,
1957 .base_baud = 921600,
1960 [pbn_b2_bt_4_921600] = {
1961 .flags = FL_BASE2|FL_BASE_BARS,
1963 .base_baud = 921600,
1967 [pbn_b3_2_115200] = {
1970 .base_baud = 115200,
1973 [pbn_b3_4_115200] = {
1976 .base_baud = 115200,
1979 [pbn_b3_8_115200] = {
1982 .base_baud = 115200,
1987 * Entries following this are board-specific.
1996 .base_baud = 921600,
1997 .uart_offset = 0x400,
2001 .flags = FL_BASE2|FL_BASE_BARS,
2003 .base_baud = 921600,
2004 .uart_offset = 0x400,
2008 .flags = FL_BASE2|FL_BASE_BARS,
2010 .base_baud = 921600,
2011 .uart_offset = 0x400,
2015 [pbn_exsys_4055] = {
2018 .base_baud = 115200,
2022 /* I think this entry is broken - the first_offset looks wrong --rmk */
2023 [pbn_plx_romulus] = {
2026 .base_baud = 921600,
2027 .uart_offset = 8 << 2,
2029 .first_offset = 0x03,
2033 * This board uses the size of PCI Base region 0 to
2034 * signal now many ports are available
2037 .flags = FL_BASE0|FL_REGION_SZ_CAP,
2039 .base_baud = 115200,
2042 [pbn_oxsemi_1_4000000] = {
2045 .base_baud = 4000000,
2046 .uart_offset = 0x200,
2047 .first_offset = 0x1000,
2049 [pbn_oxsemi_2_4000000] = {
2052 .base_baud = 4000000,
2053 .uart_offset = 0x200,
2054 .first_offset = 0x1000,
2056 [pbn_oxsemi_4_4000000] = {
2059 .base_baud = 4000000,
2060 .uart_offset = 0x200,
2061 .first_offset = 0x1000,
2063 [pbn_oxsemi_8_4000000] = {
2066 .base_baud = 4000000,
2067 .uart_offset = 0x200,
2068 .first_offset = 0x1000,
2073 * EKF addition for i960 Boards form EKF with serial port.
2076 [pbn_intel_i960] = {
2079 .base_baud = 921600,
2080 .uart_offset = 8 << 2,
2082 .first_offset = 0x10000,
2085 .flags = FL_BASE0|FL_NOIRQ,
2087 .base_baud = 458333,
2090 .first_offset = 0x20178,
2094 * Computone - uses IOMEM.
2096 [pbn_computone_4] = {
2099 .base_baud = 921600,
2100 .uart_offset = 0x40,
2102 .first_offset = 0x200,
2104 [pbn_computone_6] = {
2107 .base_baud = 921600,
2108 .uart_offset = 0x40,
2110 .first_offset = 0x200,
2112 [pbn_computone_8] = {
2115 .base_baud = 921600,
2116 .uart_offset = 0x40,
2118 .first_offset = 0x200,
2123 .base_baud = 460800,
2128 * Exar Corp. XR17C15[248] Dual/Quad/Octal UART
2129 * Only basic 16550A support.
2130 * XR17C15[24] are not tested, but they should work.
2132 [pbn_exar_XR17C152] = {
2135 .base_baud = 921600,
2136 .uart_offset = 0x200,
2138 [pbn_exar_XR17C154] = {
2141 .base_baud = 921600,
2142 .uart_offset = 0x200,
2144 [pbn_exar_XR17C158] = {
2147 .base_baud = 921600,
2148 .uart_offset = 0x200,
2151 * PA Semi PWRficient PA6T-1682M on-chip UART
2153 [pbn_pasemi_1682M] = {
2156 .base_baud = 8333333,
2159 * National Instruments 843x
2164 .base_baud = 3686400,
2165 .uart_offset = 0x10,
2166 .first_offset = 0x800,
2171 .base_baud = 3686400,
2172 .uart_offset = 0x10,
2173 .first_offset = 0x800,
2178 .base_baud = 3686400,
2179 .uart_offset = 0x10,
2180 .first_offset = 0x800,
2185 .base_baud = 3686400,
2186 .uart_offset = 0x10,
2187 .first_offset = 0x800,
2191 static const struct pci_device_id softmodem_blacklist[] = {
2192 { PCI_VDEVICE(AL, 0x5457), }, /* ALi Corporation M5457 AC'97 Modem */
2196 * Given a complete unknown PCI device, try to use some heuristics to
2197 * guess what the configuration might be, based on the pitiful PCI
2198 * serial specs. Returns 0 on success, 1 on failure.
2200 static int __devinit
2201 serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
2203 const struct pci_device_id *blacklist;
2204 int num_iomem, num_port, first_port = -1, i;
2207 * If it is not a communications device or the programming
2208 * interface is greater than 6, give up.
2210 * (Should we try to make guesses for multiport serial devices
2213 if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) &&
2214 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
2215 (dev->class & 0xff) > 6)
2219 * Do not access blacklisted devices that are known not to
2220 * feature serial ports.
2222 for (blacklist = softmodem_blacklist;
2223 blacklist < softmodem_blacklist + ARRAY_SIZE(softmodem_blacklist);
2225 if (dev->vendor == blacklist->vendor &&
2226 dev->device == blacklist->device)
2230 num_iomem = num_port = 0;
2231 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2232 if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
2234 if (first_port == -1)
2237 if (pci_resource_flags(dev, i) & IORESOURCE_MEM)
2242 * If there is 1 or 0 iomem regions, and exactly one port,
2243 * use it. We guess the number of ports based on the IO
2246 if (num_iomem <= 1 && num_port == 1) {
2247 board->flags = first_port;
2248 board->num_ports = pci_resource_len(dev, first_port) / 8;
2253 * Now guess if we've got a board which indexes by BARs.
2254 * Each IO BAR should be 8 bytes, and they should follow
2259 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2260 if (pci_resource_flags(dev, i) & IORESOURCE_IO &&
2261 pci_resource_len(dev, i) == 8 &&
2262 (first_port == -1 || (first_port + num_port) == i)) {
2264 if (first_port == -1)
2270 board->flags = first_port | FL_BASE_BARS;
2271 board->num_ports = num_port;
2279 serial_pci_matches(const struct pciserial_board *board,
2280 const struct pciserial_board *guessed)
2283 board->num_ports == guessed->num_ports &&
2284 board->base_baud == guessed->base_baud &&
2285 board->uart_offset == guessed->uart_offset &&
2286 board->reg_shift == guessed->reg_shift &&
2287 board->first_offset == guessed->first_offset;
2290 struct serial_private *
2291 pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board)
2293 struct uart_port serial_port;
2294 struct serial_private *priv;
2295 struct pci_serial_quirk *quirk;
2296 int rc, nr_ports, i;
2298 nr_ports = board->num_ports;
2301 * Find an init and setup quirks.
2303 quirk = find_quirk(dev);
2306 * Run the new-style initialization function.
2307 * The initialization function returns:
2309 * 0 - use board->num_ports
2310 * >0 - number of ports
2313 rc = quirk->init(dev);
2322 priv = kzalloc(sizeof(struct serial_private) +
2323 sizeof(unsigned int) * nr_ports,
2326 priv = ERR_PTR(-ENOMEM);
2331 priv->quirk = quirk;
2333 memset(&serial_port, 0, sizeof(struct uart_port));
2334 serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
2335 serial_port.uartclk = board->base_baud * 16;
2336 serial_port.irq = get_pci_irq(dev, board);
2337 serial_port.dev = &dev->dev;
2339 for (i = 0; i < nr_ports; i++) {
2340 if (quirk->setup(priv, board, &serial_port, i))
2343 #ifdef SERIAL_DEBUG_PCI
2344 printk(KERN_DEBUG "Setup PCI port: port %x, irq %d, type %d\n",
2345 serial_port.iobase, serial_port.irq, serial_port.iotype);
2348 priv->line[i] = serial8250_register_port(&serial_port);
2349 if (priv->line[i] < 0) {
2350 printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), priv->line[i]);
2363 EXPORT_SYMBOL_GPL(pciserial_init_ports);
2365 void pciserial_remove_ports(struct serial_private *priv)
2367 struct pci_serial_quirk *quirk;
2370 for (i = 0; i < priv->nr; i++)
2371 serial8250_unregister_port(priv->line[i]);
2373 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2374 if (priv->remapped_bar[i])
2375 iounmap(priv->remapped_bar[i]);
2376 priv->remapped_bar[i] = NULL;
2380 * Find the exit quirks.
2382 quirk = find_quirk(priv->dev);
2384 quirk->exit(priv->dev);
2388 EXPORT_SYMBOL_GPL(pciserial_remove_ports);
2390 void pciserial_suspend_ports(struct serial_private *priv)
2394 for (i = 0; i < priv->nr; i++)
2395 if (priv->line[i] >= 0)
2396 serial8250_suspend_port(priv->line[i]);
2398 EXPORT_SYMBOL_GPL(pciserial_suspend_ports);
2400 void pciserial_resume_ports(struct serial_private *priv)
2405 * Ensure that the board is correctly configured.
2407 if (priv->quirk->init)
2408 priv->quirk->init(priv->dev);
2410 for (i = 0; i < priv->nr; i++)
2411 if (priv->line[i] >= 0)
2412 serial8250_resume_port(priv->line[i]);
2414 EXPORT_SYMBOL_GPL(pciserial_resume_ports);
2417 * Probe one serial board. Unfortunately, there is no rhyme nor reason
2418 * to the arrangement of serial ports on a PCI card.
2420 static int __devinit
2421 pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
2423 struct serial_private *priv;
2424 const struct pciserial_board *board;
2425 struct pciserial_board tmp;
2428 if (ent->driver_data >= ARRAY_SIZE(pci_boards)) {
2429 printk(KERN_ERR "pci_init_one: invalid driver_data: %ld\n",
2434 board = &pci_boards[ent->driver_data];
2436 rc = pci_enable_device(dev);
2440 if (ent->driver_data == pbn_default) {
2442 * Use a copy of the pci_board entry for this;
2443 * avoid changing entries in the table.
2445 memcpy(&tmp, board, sizeof(struct pciserial_board));
2449 * We matched one of our class entries. Try to
2450 * determine the parameters of this board.
2452 rc = serial_pci_guess_board(dev, &tmp);
2457 * We matched an explicit entry. If we are able to
2458 * detect this boards settings with our heuristic,
2459 * then we no longer need this entry.
2461 memcpy(&tmp, &pci_boards[pbn_default],
2462 sizeof(struct pciserial_board));
2463 rc = serial_pci_guess_board(dev, &tmp);
2464 if (rc == 0 && serial_pci_matches(board, &tmp))
2465 moan_device("Redundant entry in serial pci_table.",
2469 priv = pciserial_init_ports(dev, board);
2470 if (!IS_ERR(priv)) {
2471 pci_set_drvdata(dev, priv);
2478 pci_disable_device(dev);
2482 static void __devexit pciserial_remove_one(struct pci_dev *dev)
2484 struct serial_private *priv = pci_get_drvdata(dev);
2486 pci_set_drvdata(dev, NULL);
2488 pciserial_remove_ports(priv);
2490 pci_disable_device(dev);
2494 static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
2496 struct serial_private *priv = pci_get_drvdata(dev);
2499 pciserial_suspend_ports(priv);
2501 pci_save_state(dev);
2502 pci_set_power_state(dev, pci_choose_state(dev, state));
2506 static int pciserial_resume_one(struct pci_dev *dev)
2509 struct serial_private *priv = pci_get_drvdata(dev);
2511 pci_set_power_state(dev, PCI_D0);
2512 pci_restore_state(dev);
2516 * The device may have been disabled. Re-enable it.
2518 err = pci_enable_device(dev);
2519 /* FIXME: We cannot simply error out here */
2521 printk(KERN_ERR "pciserial: Unable to re-enable ports, trying to continue.\n");
2522 pciserial_resume_ports(priv);
2528 static struct pci_device_id serial_pci_tbl[] = {
2529 /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */
2530 { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620,
2531 PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0,
2533 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2534 PCI_SUBVENDOR_ID_CONNECT_TECH,
2535 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_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_BH4_232, 0, 0,
2541 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2542 PCI_SUBVENDOR_ID_CONNECT_TECH,
2543 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_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_BH8_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_BH4_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_BH2_232, 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, 0, 0,
2561 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2562 PCI_SUBVENDOR_ID_CONNECT_TECH,
2563 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 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, 0, 0,
2569 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2570 PCI_SUBVENDOR_ID_CONNECT_TECH,
2571 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0,
2573 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2574 PCI_SUBVENDOR_ID_CONNECT_TECH,
2575 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0,
2577 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2578 PCI_SUBVENDOR_ID_CONNECT_TECH,
2579 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0,
2581 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2582 PCI_SUBVENDOR_ID_CONNECT_TECH,
2583 PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0,
2585 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2586 PCI_SUBVENDOR_ID_CONNECT_TECH,
2587 PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0,
2589 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2590 PCI_SUBVENDOR_ID_CONNECT_TECH,
2591 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ, 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_2, 0, 0,
2597 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2598 PCI_SUBVENDOR_ID_CONNECT_TECH,
2599 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4, 0, 0,
2601 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2602 PCI_VENDOR_ID_AFAVLAB,
2603 PCI_SUBDEVICE_ID_AFAVLAB_P061, 0, 0,
2605 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2606 PCI_SUBVENDOR_ID_CONNECT_TECH,
2607 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_232, 0, 0,
2608 pbn_b0_2_1843200_200 },
2609 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2610 PCI_SUBVENDOR_ID_CONNECT_TECH,
2611 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_232, 0, 0,
2612 pbn_b0_4_1843200_200 },
2613 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2614 PCI_SUBVENDOR_ID_CONNECT_TECH,
2615 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_232, 0, 0,
2616 pbn_b0_8_1843200_200 },
2617 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2618 PCI_SUBVENDOR_ID_CONNECT_TECH,
2619 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_1_1, 0, 0,
2620 pbn_b0_2_1843200_200 },
2621 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2622 PCI_SUBVENDOR_ID_CONNECT_TECH,
2623 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_2, 0, 0,
2624 pbn_b0_4_1843200_200 },
2625 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2626 PCI_SUBVENDOR_ID_CONNECT_TECH,
2627 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_4, 0, 0,
2628 pbn_b0_8_1843200_200 },
2629 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2630 PCI_SUBVENDOR_ID_CONNECT_TECH,
2631 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2, 0, 0,
2632 pbn_b0_2_1843200_200 },
2633 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2634 PCI_SUBVENDOR_ID_CONNECT_TECH,
2635 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4, 0, 0,
2636 pbn_b0_4_1843200_200 },
2637 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2638 PCI_SUBVENDOR_ID_CONNECT_TECH,
2639 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8, 0, 0,
2640 pbn_b0_8_1843200_200 },
2641 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2642 PCI_SUBVENDOR_ID_CONNECT_TECH,
2643 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_485, 0, 0,
2644 pbn_b0_2_1843200_200 },
2645 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2646 PCI_SUBVENDOR_ID_CONNECT_TECH,
2647 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485, 0, 0,
2648 pbn_b0_4_1843200_200 },
2649 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2650 PCI_SUBVENDOR_ID_CONNECT_TECH,
2651 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485, 0, 0,
2652 pbn_b0_8_1843200_200 },
2654 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,
2655 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2656 pbn_b2_bt_1_115200 },
2657 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2,
2658 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2659 pbn_b2_bt_2_115200 },
2660 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422,
2661 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2662 pbn_b2_bt_4_115200 },
2663 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232,
2664 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2665 pbn_b2_bt_2_115200 },
2666 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4,
2667 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2668 pbn_b2_bt_4_115200 },
2669 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,
2670 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2672 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_7803,
2673 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2675 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM8,
2676 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2679 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2,
2680 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2681 pbn_b2_bt_2_115200 },
2682 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200,
2683 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2684 pbn_b2_bt_2_921600 },
2686 * VScom SPCOM800, from sl@s.pl
2688 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800,
2689 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2691 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077,
2692 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2694 /* Unknown card - subdevice 0x1584 */
2695 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2697 PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0,
2699 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2700 PCI_SUBVENDOR_ID_KEYSPAN,
2701 PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0,
2703 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM,
2704 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2706 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM,
2707 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2709 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2710 PCI_VENDOR_ID_ESDGMBH,
2711 PCI_DEVICE_ID_ESDGMBH_CPCIASIO4, 0, 0,
2713 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2714 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2715 PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0,
2717 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2718 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2719 PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0,
2721 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2722 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2723 PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0,
2725 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2726 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2727 PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0,
2729 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2730 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2731 PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0,
2733 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2734 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2735 PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
2737 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2738 PCI_SUBVENDOR_ID_EXSYS,
2739 PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
2742 * Megawolf Romulus PCI Serial Card, from Mike Hudson
2745 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS,
2746 0x10b5, 0x106a, 0, 0,
2748 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100,
2749 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2751 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100,
2752 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2754 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D,
2755 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2757 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M,
2758 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2760 { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,
2761 PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4,
2764 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2765 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL,
2770 * The below card is a little controversial since it is the
2771 * subject of a PCI vendor/device ID clash. (See
2772 * www.ussg.iu.edu/hypermail/linux/kernel/0303.1/0516.html).
2773 * For now just used the hex ID 0x950a.
2775 { PCI_VENDOR_ID_OXSEMI, 0x950a,
2776 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL, 0, 0,
2778 { PCI_VENDOR_ID_OXSEMI, 0x950a,
2779 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2781 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2782 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2784 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,
2785 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2786 pbn_b0_bt_2_921600 },
2789 * Oxford Semiconductor Inc. Tornado PCI express device range.
2791 { PCI_VENDOR_ID_OXSEMI, 0xc101, /* OXPCIe952 1 Legacy UART */
2792 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2794 { PCI_VENDOR_ID_OXSEMI, 0xc105, /* OXPCIe952 1 Legacy UART */
2795 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2797 { PCI_VENDOR_ID_OXSEMI, 0xc11b, /* OXPCIe952 1 Native UART */
2798 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2799 pbn_oxsemi_1_4000000 },
2800 { PCI_VENDOR_ID_OXSEMI, 0xc11f, /* OXPCIe952 1 Native UART */
2801 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2802 pbn_oxsemi_1_4000000 },
2803 { PCI_VENDOR_ID_OXSEMI, 0xc120, /* OXPCIe952 1 Legacy UART */
2804 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2806 { PCI_VENDOR_ID_OXSEMI, 0xc124, /* OXPCIe952 1 Legacy UART */
2807 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2809 { PCI_VENDOR_ID_OXSEMI, 0xc138, /* OXPCIe952 1 Native UART */
2810 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2811 pbn_oxsemi_1_4000000 },
2812 { PCI_VENDOR_ID_OXSEMI, 0xc13d, /* OXPCIe952 1 Native UART */
2813 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2814 pbn_oxsemi_1_4000000 },
2815 { PCI_VENDOR_ID_OXSEMI, 0xc140, /* OXPCIe952 1 Legacy UART */
2816 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2818 { PCI_VENDOR_ID_OXSEMI, 0xc141, /* OXPCIe952 1 Legacy UART */
2819 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2821 { PCI_VENDOR_ID_OXSEMI, 0xc144, /* OXPCIe952 1 Legacy UART */
2822 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2824 { PCI_VENDOR_ID_OXSEMI, 0xc145, /* OXPCIe952 1 Legacy UART */
2825 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2827 { PCI_VENDOR_ID_OXSEMI, 0xc158, /* OXPCIe952 2 Native UART */
2828 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2829 pbn_oxsemi_2_4000000 },
2830 { PCI_VENDOR_ID_OXSEMI, 0xc15d, /* OXPCIe952 2 Native UART */
2831 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2832 pbn_oxsemi_2_4000000 },
2833 { PCI_VENDOR_ID_OXSEMI, 0xc208, /* OXPCIe954 4 Native UART */
2834 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2835 pbn_oxsemi_4_4000000 },
2836 { PCI_VENDOR_ID_OXSEMI, 0xc20d, /* OXPCIe954 4 Native UART */
2837 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2838 pbn_oxsemi_4_4000000 },
2839 { PCI_VENDOR_ID_OXSEMI, 0xc308, /* OXPCIe958 8 Native UART */
2840 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2841 pbn_oxsemi_8_4000000 },
2842 { PCI_VENDOR_ID_OXSEMI, 0xc30d, /* OXPCIe958 8 Native UART */
2843 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2844 pbn_oxsemi_8_4000000 },
2845 { PCI_VENDOR_ID_OXSEMI, 0xc40b, /* OXPCIe200 1 Native UART */
2846 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2847 pbn_oxsemi_1_4000000 },
2848 { PCI_VENDOR_ID_OXSEMI, 0xc40f, /* OXPCIe200 1 Native UART */
2849 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2850 pbn_oxsemi_1_4000000 },
2851 { PCI_VENDOR_ID_OXSEMI, 0xc41b, /* OXPCIe200 1 Native UART */
2852 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2853 pbn_oxsemi_1_4000000 },
2854 { PCI_VENDOR_ID_OXSEMI, 0xc41f, /* OXPCIe200 1 Native UART */
2855 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2856 pbn_oxsemi_1_4000000 },
2857 { PCI_VENDOR_ID_OXSEMI, 0xc42b, /* OXPCIe200 1 Native UART */
2858 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2859 pbn_oxsemi_1_4000000 },
2860 { PCI_VENDOR_ID_OXSEMI, 0xc42f, /* OXPCIe200 1 Native UART */
2861 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2862 pbn_oxsemi_1_4000000 },
2863 { PCI_VENDOR_ID_OXSEMI, 0xc43b, /* OXPCIe200 1 Native UART */
2864 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2865 pbn_oxsemi_1_4000000 },
2866 { PCI_VENDOR_ID_OXSEMI, 0xc43f, /* OXPCIe200 1 Native UART */
2867 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2868 pbn_oxsemi_1_4000000 },
2869 { PCI_VENDOR_ID_OXSEMI, 0xc44b, /* OXPCIe200 1 Native UART */
2870 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2871 pbn_oxsemi_1_4000000 },
2872 { PCI_VENDOR_ID_OXSEMI, 0xc44f, /* OXPCIe200 1 Native UART */
2873 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2874 pbn_oxsemi_1_4000000 },
2875 { PCI_VENDOR_ID_OXSEMI, 0xc45b, /* OXPCIe200 1 Native UART */
2876 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2877 pbn_oxsemi_1_4000000 },
2878 { PCI_VENDOR_ID_OXSEMI, 0xc45f, /* OXPCIe200 1 Native UART */
2879 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2880 pbn_oxsemi_1_4000000 },
2881 { PCI_VENDOR_ID_OXSEMI, 0xc46b, /* OXPCIe200 1 Native UART */
2882 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2883 pbn_oxsemi_1_4000000 },
2884 { PCI_VENDOR_ID_OXSEMI, 0xc46f, /* OXPCIe200 1 Native UART */
2885 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2886 pbn_oxsemi_1_4000000 },
2887 { PCI_VENDOR_ID_OXSEMI, 0xc47b, /* OXPCIe200 1 Native UART */
2888 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2889 pbn_oxsemi_1_4000000 },
2890 { PCI_VENDOR_ID_OXSEMI, 0xc47f, /* OXPCIe200 1 Native UART */
2891 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2892 pbn_oxsemi_1_4000000 },
2893 { PCI_VENDOR_ID_OXSEMI, 0xc48b, /* OXPCIe200 1 Native UART */
2894 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2895 pbn_oxsemi_1_4000000 },
2896 { PCI_VENDOR_ID_OXSEMI, 0xc48f, /* OXPCIe200 1 Native UART */
2897 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2898 pbn_oxsemi_1_4000000 },
2899 { PCI_VENDOR_ID_OXSEMI, 0xc49b, /* OXPCIe200 1 Native UART */
2900 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2901 pbn_oxsemi_1_4000000 },
2902 { PCI_VENDOR_ID_OXSEMI, 0xc49f, /* OXPCIe200 1 Native UART */
2903 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2904 pbn_oxsemi_1_4000000 },
2905 { PCI_VENDOR_ID_OXSEMI, 0xc4ab, /* OXPCIe200 1 Native UART */
2906 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2907 pbn_oxsemi_1_4000000 },
2908 { PCI_VENDOR_ID_OXSEMI, 0xc4af, /* OXPCIe200 1 Native UART */
2909 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2910 pbn_oxsemi_1_4000000 },
2911 { PCI_VENDOR_ID_OXSEMI, 0xc4bb, /* OXPCIe200 1 Native UART */
2912 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2913 pbn_oxsemi_1_4000000 },
2914 { PCI_VENDOR_ID_OXSEMI, 0xc4bf, /* OXPCIe200 1 Native UART */
2915 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2916 pbn_oxsemi_1_4000000 },
2917 { PCI_VENDOR_ID_OXSEMI, 0xc4cb, /* OXPCIe200 1 Native UART */
2918 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2919 pbn_oxsemi_1_4000000 },
2920 { PCI_VENDOR_ID_OXSEMI, 0xc4cf, /* OXPCIe200 1 Native UART */
2921 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2922 pbn_oxsemi_1_4000000 },
2924 * Mainpine Inc. IQ Express "Rev3" utilizing OxSemi Tornado
2926 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 1 Port V.34 Super-G3 Fax */
2927 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
2928 pbn_oxsemi_1_4000000 },
2929 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 2 Port V.34 Super-G3 Fax */
2930 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
2931 pbn_oxsemi_2_4000000 },
2932 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 4 Port V.34 Super-G3 Fax */
2933 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
2934 pbn_oxsemi_4_4000000 },
2935 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 8 Port V.34 Super-G3 Fax */
2936 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
2937 pbn_oxsemi_8_4000000 },
2939 * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards,
2940 * from skokodyn@yahoo.com
2942 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2943 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0,
2945 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2946 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0,
2948 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2949 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0,
2951 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2952 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0,
2956 * Digitan DS560-558, from jimd@esoft.com
2958 { PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM,
2959 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2963 * Titan Electronic cards
2964 * The 400L and 800L have a custom setup quirk.
2966 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100,
2967 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2969 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200,
2970 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2972 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400,
2973 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2975 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B,
2976 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2978 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L,
2979 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2981 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L,
2982 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2983 pbn_b1_bt_2_921600 },
2984 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L,
2985 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2986 pbn_b0_bt_4_921600 },
2987 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L,
2988 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2989 pbn_b0_bt_8_921600 },
2991 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550,
2992 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2994 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650,
2995 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2997 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850,
2998 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3000 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550,
3001 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3002 pbn_b2_bt_2_921600 },
3003 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650,
3004 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3005 pbn_b2_bt_2_921600 },
3006 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850,
3007 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3008 pbn_b2_bt_2_921600 },
3009 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550,
3010 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3011 pbn_b2_bt_4_921600 },
3012 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650,
3013 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3014 pbn_b2_bt_4_921600 },
3015 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850,
3016 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3017 pbn_b2_bt_4_921600 },
3018 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550,
3019 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3021 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650,
3022 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3024 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850,
3025 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3027 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550,
3028 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3029 pbn_b0_bt_2_921600 },
3030 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650,
3031 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3032 pbn_b0_bt_2_921600 },
3033 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850,
3034 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3035 pbn_b0_bt_2_921600 },
3036 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550,
3037 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3038 pbn_b0_bt_4_921600 },
3039 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650,
3040 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3041 pbn_b0_bt_4_921600 },
3042 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850,
3043 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3044 pbn_b0_bt_4_921600 },
3045 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_550,
3046 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3047 pbn_b0_bt_8_921600 },
3048 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_650,
3049 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3050 pbn_b0_bt_8_921600 },
3051 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_850,
3052 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3053 pbn_b0_bt_8_921600 },
3056 * Computone devices submitted by Doug McNash dmcnash@computone.com
3058 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3059 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4,
3060 0, 0, pbn_computone_4 },
3061 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3062 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8,
3063 0, 0, pbn_computone_8 },
3064 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3065 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6,
3066 0, 0, pbn_computone_6 },
3068 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N,
3069 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3071 { PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889,
3072 PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0,
3073 pbn_b0_bt_1_921600 },
3076 * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org>
3078 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P028,
3079 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3080 pbn_b0_bt_8_115200 },
3081 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P030,
3082 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3083 pbn_b0_bt_8_115200 },
3085 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL,
3086 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3087 pbn_b0_bt_2_115200 },
3088 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A,
3089 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3090 pbn_b0_bt_2_115200 },
3091 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B,
3092 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3093 pbn_b0_bt_2_115200 },
3094 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_A,
3095 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3096 pbn_b0_bt_4_460800 },
3097 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_B,
3098 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3099 pbn_b0_bt_4_460800 },
3100 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS,
3101 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3102 pbn_b0_bt_2_460800 },
3103 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A,
3104 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3105 pbn_b0_bt_2_460800 },
3106 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B,
3107 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3108 pbn_b0_bt_2_460800 },
3109 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL,
3110 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3111 pbn_b0_bt_1_115200 },
3112 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650,
3113 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3114 pbn_b0_bt_1_460800 },
3117 * Korenix Jetcard F0/F1 cards (JC1204, JC1208, JC1404, JC1408).
3118 * Cards are identified by their subsystem vendor IDs, which
3119 * (in hex) match the model number.
3121 * Note that JC140x are RS422/485 cards which require ox950
3122 * ACR = 0x10, and as such are not currently fully supported.
3124 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3125 0x1204, 0x0004, 0, 0,
3127 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3128 0x1208, 0x0004, 0, 0,
3130 /* { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3131 0x1402, 0x0002, 0, 0,
3132 pbn_b0_2_921600 }, */
3133 /* { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3134 0x1404, 0x0004, 0, 0,
3135 pbn_b0_4_921600 }, */
3136 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF1,
3137 0x1208, 0x0004, 0, 0,
3141 * Dell Remote Access Card 4 - Tim_T_Murphy@Dell.com
3143 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RAC4,
3144 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3148 * Dell Remote Access Card III - Tim_T_Murphy@Dell.com
3150 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RACIII,
3151 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3155 * RAStel 2 port modem, gerg@moreton.com.au
3157 { PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT,
3158 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3159 pbn_b2_bt_2_115200 },
3162 * EKF addition for i960 Boards form EKF with serial port
3164 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80960_RP,
3165 0xE4BF, PCI_ANY_ID, 0, 0,
3169 * Xircom Cardbus/Ethernet combos
3171 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM,
3172 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3175 * Xircom RBM56G cardbus modem - Dirk Arnold (temp entry)
3177 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_RBM56G,
3178 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3182 * Untested PCI modems, sent in from various folks...
3186 * Elsa Model 56K PCI Modem, from Andreas Rath <arh@01019freenet.de>
3188 { PCI_VENDOR_ID_ROCKWELL, 0x1004,
3189 0x1048, 0x1500, 0, 0,
3192 { PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
3199 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
3200 PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_RMP3, 0, 0,
3202 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
3203 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3205 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
3206 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3209 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2,
3210 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3212 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM4,
3213 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3215 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8,
3216 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3220 * Exar Corp. XR17C15[248] Dual/Quad/Octal UART
3222 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
3223 PCI_ANY_ID, PCI_ANY_ID,
3225 0, pbn_exar_XR17C152 },
3226 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
3227 PCI_ANY_ID, PCI_ANY_ID,
3229 0, pbn_exar_XR17C154 },
3230 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
3231 PCI_ANY_ID, PCI_ANY_ID,
3233 0, pbn_exar_XR17C158 },
3236 * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke)
3238 { PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560,
3239 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3244 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
3245 PCI_ANY_ID, PCI_ANY_ID,
3247 pbn_b1_bt_1_115200 },
3252 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS200,
3253 PCI_ANY_ID, PCI_ANY_ID, 0, 0, /* 135a.0811 */
3258 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS400,
3259 PCI_ANY_ID, PCI_ANY_ID, 0, 0, /* 135a.0dc0 */
3262 * Perle PCI-RAS cards
3264 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
3265 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4,
3266 0, 0, pbn_b2_4_921600 },
3267 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
3268 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8,
3269 0, 0, pbn_b2_8_921600 },
3272 * Mainpine series cards: Fairly standard layout but fools
3273 * parts of the autodetect in some cases and uses otherwise
3274 * unmatched communications subclasses in the PCI Express case
3277 { /* RockForceDUO */
3278 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3279 PCI_VENDOR_ID_MAINPINE, 0x0200,
3280 0, 0, pbn_b0_2_115200 },
3281 { /* RockForceQUATRO */
3282 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3283 PCI_VENDOR_ID_MAINPINE, 0x0300,
3284 0, 0, pbn_b0_4_115200 },
3285 { /* RockForceDUO+ */
3286 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3287 PCI_VENDOR_ID_MAINPINE, 0x0400,
3288 0, 0, pbn_b0_2_115200 },
3289 { /* RockForceQUATRO+ */
3290 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3291 PCI_VENDOR_ID_MAINPINE, 0x0500,
3292 0, 0, pbn_b0_4_115200 },
3294 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3295 PCI_VENDOR_ID_MAINPINE, 0x0600,
3296 0, 0, pbn_b0_2_115200 },
3298 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3299 PCI_VENDOR_ID_MAINPINE, 0x0700,
3300 0, 0, pbn_b0_4_115200 },
3301 { /* RockForceOCTO+ */
3302 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3303 PCI_VENDOR_ID_MAINPINE, 0x0800,
3304 0, 0, pbn_b0_8_115200 },
3305 { /* RockForceDUO+ */
3306 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3307 PCI_VENDOR_ID_MAINPINE, 0x0C00,
3308 0, 0, pbn_b0_2_115200 },
3309 { /* RockForceQUARTRO+ */
3310 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3311 PCI_VENDOR_ID_MAINPINE, 0x0D00,
3312 0, 0, pbn_b0_4_115200 },
3313 { /* RockForceOCTO+ */
3314 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3315 PCI_VENDOR_ID_MAINPINE, 0x1D00,
3316 0, 0, pbn_b0_8_115200 },
3318 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3319 PCI_VENDOR_ID_MAINPINE, 0x2000,
3320 0, 0, pbn_b0_1_115200 },
3322 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3323 PCI_VENDOR_ID_MAINPINE, 0x2100,
3324 0, 0, pbn_b0_1_115200 },
3326 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3327 PCI_VENDOR_ID_MAINPINE, 0x2200,
3328 0, 0, pbn_b0_2_115200 },
3330 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3331 PCI_VENDOR_ID_MAINPINE, 0x2300,
3332 0, 0, pbn_b0_2_115200 },
3334 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3335 PCI_VENDOR_ID_MAINPINE, 0x2400,
3336 0, 0, pbn_b0_4_115200 },
3338 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3339 PCI_VENDOR_ID_MAINPINE, 0x2500,
3340 0, 0, pbn_b0_4_115200 },
3342 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3343 PCI_VENDOR_ID_MAINPINE, 0x2600,
3344 0, 0, pbn_b0_8_115200 },
3346 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3347 PCI_VENDOR_ID_MAINPINE, 0x2700,
3348 0, 0, pbn_b0_8_115200 },
3349 { /* IQ Express D1 */
3350 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3351 PCI_VENDOR_ID_MAINPINE, 0x3000,
3352 0, 0, pbn_b0_1_115200 },
3353 { /* IQ Express F1 */
3354 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3355 PCI_VENDOR_ID_MAINPINE, 0x3100,
3356 0, 0, pbn_b0_1_115200 },
3357 { /* IQ Express D2 */
3358 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3359 PCI_VENDOR_ID_MAINPINE, 0x3200,
3360 0, 0, pbn_b0_2_115200 },
3361 { /* IQ Express F2 */
3362 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3363 PCI_VENDOR_ID_MAINPINE, 0x3300,
3364 0, 0, pbn_b0_2_115200 },
3365 { /* IQ Express D4 */
3366 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3367 PCI_VENDOR_ID_MAINPINE, 0x3400,
3368 0, 0, pbn_b0_4_115200 },
3369 { /* IQ Express F4 */
3370 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3371 PCI_VENDOR_ID_MAINPINE, 0x3500,
3372 0, 0, pbn_b0_4_115200 },
3373 { /* IQ Express D8 */
3374 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3375 PCI_VENDOR_ID_MAINPINE, 0x3C00,
3376 0, 0, pbn_b0_8_115200 },
3377 { /* IQ Express F8 */
3378 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3379 PCI_VENDOR_ID_MAINPINE, 0x3D00,
3380 0, 0, pbn_b0_8_115200 },
3384 * PA Semi PA6T-1682M on-chip UART
3386 { PCI_VENDOR_ID_PASEMI, 0xa004,
3387 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3391 * National Instruments
3393 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI23216,
3394 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3396 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2328,
3397 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3399 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324,
3400 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3401 pbn_b1_bt_4_115200 },
3402 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322,
3403 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3404 pbn_b1_bt_2_115200 },
3405 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324I,
3406 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3407 pbn_b1_bt_4_115200 },
3408 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322I,
3409 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3410 pbn_b1_bt_2_115200 },
3411 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_23216,
3412 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3414 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2328,
3415 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3417 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2324,
3418 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3419 pbn_b1_bt_4_115200 },
3420 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2322,
3421 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3422 pbn_b1_bt_2_115200 },
3423 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2324,
3424 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3425 pbn_b1_bt_4_115200 },
3426 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2322,
3427 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3428 pbn_b1_bt_2_115200 },
3429 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2322,
3430 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3432 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2322,
3433 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3435 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2324,
3436 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3438 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2324,
3439 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3441 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2328,
3442 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3444 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2328,
3445 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3447 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_23216,
3448 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3450 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_23216,
3451 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3453 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2322,
3454 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3456 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2322,
3457 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3459 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2324,
3460 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3462 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2324,
3463 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3467 * ADDI-DATA GmbH communication cards <info@addi-data.com>
3469 { PCI_VENDOR_ID_ADDIDATA,
3470 PCI_DEVICE_ID_ADDIDATA_APCI7500,
3477 { PCI_VENDOR_ID_ADDIDATA,
3478 PCI_DEVICE_ID_ADDIDATA_APCI7420,
3485 { PCI_VENDOR_ID_ADDIDATA,
3486 PCI_DEVICE_ID_ADDIDATA_APCI7300,
3493 { PCI_VENDOR_ID_ADDIDATA_OLD,
3494 PCI_DEVICE_ID_ADDIDATA_APCI7800,
3501 { PCI_VENDOR_ID_ADDIDATA,
3502 PCI_DEVICE_ID_ADDIDATA_APCI7500_2,
3509 { PCI_VENDOR_ID_ADDIDATA,
3510 PCI_DEVICE_ID_ADDIDATA_APCI7420_2,
3517 { PCI_VENDOR_ID_ADDIDATA,
3518 PCI_DEVICE_ID_ADDIDATA_APCI7300_2,
3525 { PCI_VENDOR_ID_ADDIDATA,
3526 PCI_DEVICE_ID_ADDIDATA_APCI7500_3,
3533 { PCI_VENDOR_ID_ADDIDATA,
3534 PCI_DEVICE_ID_ADDIDATA_APCI7420_3,
3541 { PCI_VENDOR_ID_ADDIDATA,
3542 PCI_DEVICE_ID_ADDIDATA_APCI7300_3,
3549 { PCI_VENDOR_ID_ADDIDATA,
3550 PCI_DEVICE_ID_ADDIDATA_APCI7800_3,
3557 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835,
3558 PCI_VENDOR_ID_IBM, 0x0299,
3559 0, 0, pbn_b0_bt_2_115200 },
3562 * These entries match devices with class COMMUNICATION_SERIAL,
3563 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
3565 { PCI_ANY_ID, PCI_ANY_ID,
3566 PCI_ANY_ID, PCI_ANY_ID,
3567 PCI_CLASS_COMMUNICATION_SERIAL << 8,
3568 0xffff00, pbn_default },
3569 { PCI_ANY_ID, PCI_ANY_ID,
3570 PCI_ANY_ID, PCI_ANY_ID,
3571 PCI_CLASS_COMMUNICATION_MODEM << 8,
3572 0xffff00, pbn_default },
3573 { PCI_ANY_ID, PCI_ANY_ID,
3574 PCI_ANY_ID, PCI_ANY_ID,
3575 PCI_CLASS_COMMUNICATION_MULTISERIAL << 8,
3576 0xffff00, pbn_default },
3580 static struct pci_driver serial_pci_driver = {
3582 .probe = pciserial_init_one,
3583 .remove = __devexit_p(pciserial_remove_one),
3585 .suspend = pciserial_suspend_one,
3586 .resume = pciserial_resume_one,
3588 .id_table = serial_pci_tbl,
3591 static int __init serial8250_pci_init(void)
3593 return pci_register_driver(&serial_pci_driver);
3596 static void __exit serial8250_pci_exit(void)
3598 pci_unregister_driver(&serial_pci_driver);
3601 module_init(serial8250_pci_init);
3602 module_exit(serial8250_pci_exit);
3604 MODULE_LICENSE("GPL");
3605 MODULE_DESCRIPTION("Generic 8250/16x50 PCI serial probe module");
3606 MODULE_DEVICE_TABLE(pci, serial_pci_tbl);