forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/tty/serial/8250/8250_pci.c
....@@ -43,14 +43,31 @@
4343 void (*exit)(struct pci_dev *dev);
4444 };
4545
46
-#define PCI_NUM_BAR_RESOURCES 6
46
+struct f815xxa_data {
47
+ spinlock_t lock;
48
+ int idx;
49
+};
4750
4851 struct serial_private {
4952 struct pci_dev *dev;
5053 unsigned int nr;
5154 struct pci_serial_quirk *quirk;
5255 const struct pciserial_board *board;
53
- int line[0];
56
+ int line[];
57
+};
58
+
59
+#define PCI_DEVICE_ID_HPE_PCI_SERIAL 0x37e
60
+
61
+static const struct pci_device_id pci_use_msi[] = {
62
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900,
63
+ 0xA000, 0x1000) },
64
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9912,
65
+ 0xA000, 0x1000) },
66
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9922,
67
+ 0xA000, 0x1000) },
68
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_HP_3PAR, PCI_DEVICE_ID_HPE_PCI_SERIAL,
69
+ PCI_ANY_ID, PCI_ANY_ID) },
70
+ { }
5471 };
5572
5673 static int pci_default_setup(struct serial_private*,
....@@ -58,13 +75,12 @@
5875
5976 static void moan_device(const char *str, struct pci_dev *dev)
6077 {
61
- dev_err(&dev->dev,
62
- "%s: %s\n"
78
+ pci_err(dev, "%s\n"
6379 "Please send the output of lspci -vv, this\n"
6480 "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n"
6581 "manufacturer and name of serial board or\n"
6682 "modem board to <linux-serial@vger.kernel.org>.\n",
67
- pci_name(dev), str, dev->vendor, dev->device,
83
+ str, dev->vendor, dev->device,
6884 dev->subsystem_vendor, dev->subsystem_device);
6985 }
7086
....@@ -74,7 +90,7 @@
7490 {
7591 struct pci_dev *dev = priv->dev;
7692
77
- if (bar >= PCI_NUM_BAR_RESOURCES)
93
+ if (bar >= PCI_STD_NUM_BARS)
7894 return -EINVAL;
7995
8096 if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) {
....@@ -221,7 +237,7 @@
221237 /* is firmware started? */
222238 pci_read_config_dword(dev, 0x44, &oldval);
223239 if (oldval == 0x00001000L) { /* RESET value */
224
- dev_dbg(&dev->dev, "Local i960 firmware missing\n");
240
+ pci_dbg(dev, "Local i960 firmware missing\n");
225241 return -ENODEV;
226242 }
227243 return 0;
....@@ -262,7 +278,7 @@
262278 /*
263279 * enable/disable interrupts
264280 */
265
- p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
281
+ p = ioremap(pci_resource_start(dev, 0), 0x80);
266282 if (p == NULL)
267283 return -ENOMEM;
268284 writel(irq_config, p + 0x4c);
....@@ -286,7 +302,7 @@
286302 /*
287303 * disable interrupts
288304 */
289
- p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
305
+ p = ioremap(pci_resource_start(dev, 0), 0x80);
290306 if (p != NULL) {
291307 writel(0, p + 0x4c);
292308
....@@ -462,7 +478,7 @@
462478 break;
463479 }
464480
465
- p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
481
+ p = ioremap(pci_resource_start(dev, 0), 0x80);
466482 if (p == NULL)
467483 return -ENOMEM;
468484
....@@ -571,9 +587,8 @@
571587 * (0,2,3,5,6: serial only -- 7,8,9: serial + parallel)
572588 */
573589 if ((dev->subsystem_device & 0x00f0) >= 0x70) {
574
- dev_info(&dev->dev,
575
- "ignoring Timedia subdevice %04x for parport_serial\n",
576
- dev->subsystem_device);
590
+ pci_info(dev, "ignoring Timedia subdevice %04x for parport_serial\n",
591
+ dev->subsystem_device);
577592 return -ENODEV;
578593 }
579594
....@@ -618,7 +633,7 @@
618633 break;
619634 case 3:
620635 offset = board->uart_offset;
621
- /* FALLTHROUGH */
636
+ fallthrough;
622637 case 4: /* BAR 2 */
623638 case 5: /* BAR 3 */
624639 case 6: /* BAR 4 */
....@@ -810,8 +825,7 @@
810825 if (sub_serports > 0)
811826 return sub_serports;
812827
813
- dev_err(&dev->dev,
814
- "NetMos/Mostech serial driver ignoring port on ambiguous config.\n");
828
+ pci_err(dev, "NetMos/Mostech serial driver ignoring port on ambiguous config.\n");
815829 return 0;
816830 }
817831
....@@ -880,18 +894,16 @@
880894 /* enable IO_Space bit */
881895 #define ITE_887x_POSIO_ENABLE (1 << 31)
882896
897
+/* inta_addr are the configuration addresses of the ITE */
898
+static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0, 0x200, 0x280 };
883899 static int pci_ite887x_init(struct pci_dev *dev)
884900 {
885
- /* inta_addr are the configuration addresses of the ITE */
886
- static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0,
887
- 0x200, 0x280, 0 };
888901 int ret, i, type;
889902 struct resource *iobase = NULL;
890903 u32 miscr, uartbar, ioport;
891904
892905 /* search for the base-ioport */
893
- i = 0;
894
- while (inta_addr[i] && iobase == NULL) {
906
+ for (i = 0; i < ARRAY_SIZE(inta_addr); i++) {
895907 iobase = request_region(inta_addr[i], ITE_887x_IOSIZE,
896908 "ite887x");
897909 if (iobase != NULL) {
....@@ -908,13 +920,11 @@
908920 break;
909921 }
910922 release_region(iobase->start, ITE_887x_IOSIZE);
911
- iobase = NULL;
912923 }
913
- i++;
914924 }
915925
916
- if (!inta_addr[i]) {
917
- dev_err(&dev->dev, "ite887x: could not find iobase\n");
926
+ if (i == ARRAY_SIZE(inta_addr)) {
927
+ pci_err(dev, "could not find iobase\n");
918928 return -ENODEV;
919929 }
920930
....@@ -984,43 +994,29 @@
984994 }
985995
986996 /*
987
- * EndRun Technologies.
988
- * Determine the number of ports available on the device.
997
+ * Oxford Semiconductor Inc.
998
+ * Check if an OxSemi device is part of the Tornado range of devices.
989999 */
9901000 #define PCI_VENDOR_ID_ENDRUN 0x7401
9911001 #define PCI_DEVICE_ID_ENDRUN_1588 0xe100
9921002
993
-static int pci_endrun_init(struct pci_dev *dev)
1003
+static bool pci_oxsemi_tornado_p(struct pci_dev *dev)
9941004 {
995
- u8 __iomem *p;
996
- unsigned long deviceID;
997
- unsigned int number_uarts = 0;
1005
+ /* OxSemi Tornado devices are all 0xCxxx */
1006
+ if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
1007
+ (dev->device & 0xf000) != 0xc000)
1008
+ return false;
9981009
999
- /* EndRun device is all 0xexxx */
1010
+ /* EndRun devices are all 0xExxx */
10001011 if (dev->vendor == PCI_VENDOR_ID_ENDRUN &&
1001
- (dev->device & 0xf000) != 0xe000)
1002
- return 0;
1012
+ (dev->device & 0xf000) != 0xe000)
1013
+ return false;
10031014
1004
- p = pci_iomap(dev, 0, 5);
1005
- if (p == NULL)
1006
- return -ENOMEM;
1007
-
1008
- deviceID = ioread32(p);
1009
- /* EndRun device */
1010
- if (deviceID == 0x07000200) {
1011
- number_uarts = ioread8(p + 4);
1012
- dev_dbg(&dev->dev,
1013
- "%d ports detected on EndRun PCI Express device\n",
1014
- number_uarts);
1015
- }
1016
- pci_iounmap(dev, p);
1017
- return number_uarts;
1015
+ return true;
10181016 }
10191017
10201018 /*
1021
- * Oxford Semiconductor Inc.
1022
- * Check that device is part of the Tornado range of devices, then determine
1023
- * the number of ports available on the device.
1019
+ * Determine the number of ports available on a Tornado device.
10241020 */
10251021 static int pci_oxsemi_tornado_init(struct pci_dev *dev)
10261022 {
....@@ -1028,9 +1024,7 @@
10281024 unsigned long deviceID;
10291025 unsigned int number_uarts = 0;
10301026
1031
- /* OxSemi Tornado devices are all 0xCxxx */
1032
- if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
1033
- (dev->device & 0xF000) != 0xC000)
1027
+ if (!pci_oxsemi_tornado_p(dev))
10341028 return 0;
10351029
10361030 p = pci_iomap(dev, 0, 5);
....@@ -1041,9 +1035,10 @@
10411035 /* Tornado device */
10421036 if (deviceID == 0x07000200) {
10431037 number_uarts = ioread8(p + 4);
1044
- dev_dbg(&dev->dev,
1045
- "%d ports detected on Oxford PCI Express device\n",
1046
- number_uarts);
1038
+ pci_dbg(dev, "%d ports detected on %s PCI Express device\n",
1039
+ number_uarts,
1040
+ dev->vendor == PCI_VENDOR_ID_ENDRUN ?
1041
+ "EndRun" : "Oxford");
10471042 }
10481043 pci_iounmap(dev, p);
10491044 return number_uarts;
....@@ -1103,15 +1098,15 @@
11031098 { 0, }
11041099 };
11051100
1106
-static int pci_quatech_amcc(u16 devid)
1101
+static int pci_quatech_amcc(struct pci_dev *dev)
11071102 {
11081103 struct quatech_feature *qf = &quatech_cards[0];
11091104 while (qf->devid) {
1110
- if (qf->devid == devid)
1105
+ if (qf->devid == dev->device)
11111106 return qf->amcc;
11121107 qf++;
11131108 }
1114
- pr_err("quatech: unknown port type '0x%04X'.\n", devid);
1109
+ pci_err(dev, "unknown port type '0x%04X'.\n", dev->device);
11151110 return 0;
11161111 };
11171112
....@@ -1274,7 +1269,7 @@
12741269
12751270 static int pci_quatech_init(struct pci_dev *dev)
12761271 {
1277
- if (pci_quatech_amcc(dev->device)) {
1272
+ if (pci_quatech_amcc(dev)) {
12781273 unsigned long base = pci_resource_start(dev, 0);
12791274 if (base) {
12801275 u32 tmp;
....@@ -1298,7 +1293,7 @@
12981293 port->port.uartclk = pci_quatech_clock(port);
12991294 /* For now just warn about RS422 */
13001295 if (pci_quatech_rs422(port))
1301
- pr_warn("quatech: software control of RS422 features not currently supported.\n");
1296
+ pci_warn(priv->dev, "software control of RS422 features not currently supported.\n");
13021297 return pci_default_setup(priv, board, port, idx);
13031298 }
13041299
....@@ -1326,8 +1321,65 @@
13261321
13271322 return setup_port(priv, port, bar, offset, board->reg_shift);
13281323 }
1324
+static void
1325
+pericom_do_set_divisor(struct uart_port *port, unsigned int baud,
1326
+ unsigned int quot, unsigned int quot_frac)
1327
+{
1328
+ int scr;
1329
+ int lcr;
13291330
1331
+ for (scr = 16; scr > 4; scr--) {
1332
+ unsigned int maxrate = port->uartclk / scr;
1333
+ unsigned int divisor = max(maxrate / baud, 1U);
1334
+ int delta = maxrate / divisor - baud;
1335
+
1336
+ if (baud > maxrate + baud / 50)
1337
+ continue;
1338
+
1339
+ if (delta > baud / 50)
1340
+ divisor++;
1341
+
1342
+ if (divisor > 0xffff)
1343
+ continue;
1344
+
1345
+ /* Update delta due to possible divisor change */
1346
+ delta = maxrate / divisor - baud;
1347
+ if (abs(delta) < baud / 50) {
1348
+ lcr = serial_port_in(port, UART_LCR);
1349
+ serial_port_out(port, UART_LCR, lcr | 0x80);
1350
+ serial_port_out(port, UART_DLL, divisor & 0xff);
1351
+ serial_port_out(port, UART_DLM, divisor >> 8 & 0xff);
1352
+ serial_port_out(port, 2, 16 - scr);
1353
+ serial_port_out(port, UART_LCR, lcr);
1354
+ return;
1355
+ }
1356
+ }
1357
+}
13301358 static int pci_pericom_setup(struct serial_private *priv,
1359
+ const struct pciserial_board *board,
1360
+ struct uart_8250_port *port, int idx)
1361
+{
1362
+ unsigned int bar, offset = board->first_offset, maxnr;
1363
+
1364
+ bar = FL_GET_BASE(board->flags);
1365
+ if (board->flags & FL_BASE_BARS)
1366
+ bar += idx;
1367
+ else
1368
+ offset += idx * board->uart_offset;
1369
+
1370
+
1371
+ maxnr = (pci_resource_len(priv->dev, bar) - board->first_offset) >>
1372
+ (board->reg_shift + 3);
1373
+
1374
+ if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr)
1375
+ return 1;
1376
+
1377
+ port->port.set_divisor = pericom_do_set_divisor;
1378
+
1379
+ return setup_port(priv, port, bar, offset, board->reg_shift);
1380
+}
1381
+
1382
+static int pci_pericom_setup_four_at_eight(struct serial_private *priv,
13311383 const struct pciserial_board *board,
13321384 struct uart_8250_port *port, int idx)
13331385 {
....@@ -1347,6 +1399,8 @@
13471399
13481400 if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr)
13491401 return 1;
1402
+
1403
+ port->port.set_divisor = pericom_do_set_divisor;
13501404
13511405 return setup_port(priv, port, bar, offset, board->reg_shift);
13521406 }
....@@ -1453,7 +1507,7 @@
14531507 /* Get the io address from configuration space */
14541508 pci_read_config_word(pdev, config_base + 4, &iobase);
14551509
1456
- dev_dbg(&pdev->dev, "%s: idx=%d iobase=0x%x", __func__, idx, iobase);
1510
+ pci_dbg(pdev, "idx=%d iobase=0x%x", idx, iobase);
14571511
14581512 port->port.iotype = UPIO_PORT;
14591513 port->port.iobase = iobase;
....@@ -1477,7 +1531,6 @@
14771531 resource_size_t bar_data[3];
14781532 u8 config_base;
14791533 struct serial_private *priv = pci_get_drvdata(dev);
1480
- struct uart_8250_port *port;
14811534
14821535 if (!(pci_resource_flags(dev, 5) & IORESOURCE_IO) ||
14831536 !(pci_resource_flags(dev, 4) & IORESOURCE_IO) ||
....@@ -1524,13 +1577,7 @@
15241577
15251578 pci_write_config_byte(dev, config_base + 0x06, dev->irq);
15261579
1527
- if (priv) {
1528
- /* re-apply RS232/485 mode when
1529
- * pciserial_resume_ports()
1530
- */
1531
- port = serial8250_get_port(priv->line[i]);
1532
- pci_fintek_rs485_config(&port->port, NULL);
1533
- } else {
1580
+ if (!priv) {
15341581 /* First init without port data
15351582 * force init to RS232 Mode
15361583 */
....@@ -1541,12 +1588,83 @@
15411588 return max_port;
15421589 }
15431590
1591
+static void f815xxa_mem_serial_out(struct uart_port *p, int offset, int value)
1592
+{
1593
+ struct f815xxa_data *data = p->private_data;
1594
+ unsigned long flags;
1595
+
1596
+ spin_lock_irqsave(&data->lock, flags);
1597
+ writeb(value, p->membase + offset);
1598
+ readb(p->membase + UART_SCR); /* Dummy read for flush pcie tx queue */
1599
+ spin_unlock_irqrestore(&data->lock, flags);
1600
+}
1601
+
1602
+static int pci_fintek_f815xxa_setup(struct serial_private *priv,
1603
+ const struct pciserial_board *board,
1604
+ struct uart_8250_port *port, int idx)
1605
+{
1606
+ struct pci_dev *pdev = priv->dev;
1607
+ struct f815xxa_data *data;
1608
+
1609
+ data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
1610
+ if (!data)
1611
+ return -ENOMEM;
1612
+
1613
+ data->idx = idx;
1614
+ spin_lock_init(&data->lock);
1615
+
1616
+ port->port.private_data = data;
1617
+ port->port.iotype = UPIO_MEM;
1618
+ port->port.flags |= UPF_IOREMAP;
1619
+ port->port.mapbase = pci_resource_start(pdev, 0) + 8 * idx;
1620
+ port->port.serial_out = f815xxa_mem_serial_out;
1621
+
1622
+ return 0;
1623
+}
1624
+
1625
+static int pci_fintek_f815xxa_init(struct pci_dev *dev)
1626
+{
1627
+ u32 max_port, i;
1628
+ int config_base;
1629
+
1630
+ if (!(pci_resource_flags(dev, 0) & IORESOURCE_MEM))
1631
+ return -ENODEV;
1632
+
1633
+ switch (dev->device) {
1634
+ case 0x1204: /* 4 ports */
1635
+ case 0x1208: /* 8 ports */
1636
+ max_port = dev->device & 0xff;
1637
+ break;
1638
+ case 0x1212: /* 12 ports */
1639
+ max_port = 12;
1640
+ break;
1641
+ default:
1642
+ return -EINVAL;
1643
+ }
1644
+
1645
+ /* Set to mmio decode */
1646
+ pci_write_config_byte(dev, 0x209, 0x40);
1647
+
1648
+ for (i = 0; i < max_port; ++i) {
1649
+ /* UART0 configuration offset start from 0x2A0 */
1650
+ config_base = 0x2A0 + 0x08 * i;
1651
+
1652
+ /* Select 128-byte FIFO and 8x FIFO threshold */
1653
+ pci_write_config_byte(dev, config_base + 0x01, 0x33);
1654
+
1655
+ /* Enable UART I/O port */
1656
+ pci_write_config_byte(dev, config_base + 0, 0x01);
1657
+ }
1658
+
1659
+ return max_port;
1660
+}
1661
+
15441662 static int skip_tx_en_setup(struct serial_private *priv,
15451663 const struct pciserial_board *board,
15461664 struct uart_8250_port *port, int idx)
15471665 {
15481666 port->port.quirks |= UPQ_NO_TXEN_TEST;
1549
- dev_dbg(&priv->dev->dev,
1667
+ pci_dbg(priv->dev,
15501668 "serial8250: skipping TxEn test for device [%04x:%04x] subsystem [%04x:%04x]\n",
15511669 priv->dev->vendor, priv->dev->device,
15521670 priv->dev->subsystem_vendor, priv->dev->subsystem_device);
....@@ -1637,6 +1755,79 @@
16371755 return pci_default_setup(priv, board, port, idx);
16381756 }
16391757
1758
+
1759
+#define CH384_XINT_ENABLE_REG 0xEB
1760
+#define CH384_XINT_ENABLE_BIT 0x02
1761
+
1762
+static int pci_wch_ch38x_init(struct pci_dev *dev)
1763
+{
1764
+ int max_port;
1765
+ unsigned long iobase;
1766
+
1767
+
1768
+ switch (dev->device) {
1769
+ case 0x3853: /* 8 ports */
1770
+ max_port = 8;
1771
+ break;
1772
+ default:
1773
+ return -EINVAL;
1774
+ }
1775
+
1776
+ iobase = pci_resource_start(dev, 0);
1777
+ outb(CH384_XINT_ENABLE_BIT, iobase + CH384_XINT_ENABLE_REG);
1778
+
1779
+ return max_port;
1780
+}
1781
+
1782
+static void pci_wch_ch38x_exit(struct pci_dev *dev)
1783
+{
1784
+ unsigned long iobase;
1785
+
1786
+ iobase = pci_resource_start(dev, 0);
1787
+ outb(0x0, iobase + CH384_XINT_ENABLE_REG);
1788
+}
1789
+
1790
+
1791
+static int
1792
+pci_sunix_setup(struct serial_private *priv,
1793
+ const struct pciserial_board *board,
1794
+ struct uart_8250_port *port, int idx)
1795
+{
1796
+ int bar;
1797
+ int offset;
1798
+
1799
+ port->port.flags |= UPF_FIXED_TYPE;
1800
+ port->port.type = PORT_SUNIX;
1801
+
1802
+ if (idx < 4) {
1803
+ bar = 0;
1804
+ offset = idx * board->uart_offset;
1805
+ } else {
1806
+ bar = 1;
1807
+ idx -= 4;
1808
+ idx = div_s64_rem(idx, 4, &offset);
1809
+ offset = idx * 64 + offset * board->uart_offset;
1810
+ }
1811
+
1812
+ return setup_port(priv, port, bar, offset, 0);
1813
+}
1814
+
1815
+static int
1816
+pci_moxa_setup(struct serial_private *priv,
1817
+ const struct pciserial_board *board,
1818
+ struct uart_8250_port *port, int idx)
1819
+{
1820
+ unsigned int bar = FL_GET_BASE(board->flags);
1821
+ int offset;
1822
+
1823
+ if (board->num_ports == 4 && idx == 3)
1824
+ offset = 7 * board->uart_offset;
1825
+ else
1826
+ offset = idx * board->uart_offset;
1827
+
1828
+ return setup_port(priv, port, bar, offset, 0);
1829
+}
1830
+
16401831 #define PCI_VENDOR_ID_SBSMODULARIO 0x124B
16411832 #define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B
16421833 #define PCI_DEVICE_ID_OCTPRO 0x0001
....@@ -1648,6 +1839,8 @@
16481839 #define PCI_SUBDEVICE_ID_SIIG_DUAL_30 0x2530
16491840 #define PCI_VENDOR_ID_ADVANTECH 0x13fe
16501841 #define PCI_DEVICE_ID_INTEL_CE4100_UART 0x2e66
1842
+#define PCI_DEVICE_ID_ADVANTECH_PCI1600 0x1600
1843
+#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1611 0x1611
16511844 #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
16521845 #define PCI_DEVICE_ID_ADVANTECH_PCI3618 0x3618
16531846 #define PCI_DEVICE_ID_ADVANTECH_PCIf618 0xf618
....@@ -1688,6 +1881,7 @@
16881881 #define PCIE_VENDOR_ID_WCH 0x1c00
16891882 #define PCIE_DEVICE_ID_WCH_CH382_2S1P 0x3250
16901883 #define PCIE_DEVICE_ID_WCH_CH384_4S 0x3470
1884
+#define PCIE_DEVICE_ID_WCH_CH384_8S 0x3853
16911885 #define PCIE_DEVICE_ID_WCH_CH382_2S 0x3253
16921886
16931887 #define PCI_VENDOR_ID_ACCESIO 0x494f
....@@ -1726,6 +1920,18 @@
17261920 #define PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4SM 0x11D8
17271921
17281922
1923
+#define PCI_DEVICE_ID_MOXA_CP102E 0x1024
1924
+#define PCI_DEVICE_ID_MOXA_CP102EL 0x1025
1925
+#define PCI_DEVICE_ID_MOXA_CP104EL_A 0x1045
1926
+#define PCI_DEVICE_ID_MOXA_CP114EL 0x1144
1927
+#define PCI_DEVICE_ID_MOXA_CP116E_A_A 0x1160
1928
+#define PCI_DEVICE_ID_MOXA_CP116E_A_B 0x1161
1929
+#define PCI_DEVICE_ID_MOXA_CP118EL_A 0x1182
1930
+#define PCI_DEVICE_ID_MOXA_CP118E_A_I 0x1183
1931
+#define PCI_DEVICE_ID_MOXA_CP132EL 0x1322
1932
+#define PCI_DEVICE_ID_MOXA_CP134EL_A 0x1342
1933
+#define PCI_DEVICE_ID_MOXA_CP138E_A 0x1381
1934
+#define PCI_DEVICE_ID_MOXA_CP168EL_A 0x1683
17291935
17301936 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
17311937 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
....@@ -1770,6 +1976,16 @@
17701976 .subvendor = PCI_ANY_ID,
17711977 .subdevice = PCI_ANY_ID,
17721978 .init = pci_hp_diva_init,
1979
+ .setup = pci_hp_diva_setup,
1980
+ },
1981
+ /*
1982
+ * HPE PCI serial device
1983
+ */
1984
+ {
1985
+ .vendor = PCI_VENDOR_ID_HP_3PAR,
1986
+ .device = PCI_DEVICE_ID_HPE_PCI_SERIAL,
1987
+ .subvendor = PCI_ANY_ID,
1988
+ .subdevice = PCI_ANY_ID,
17731989 .setup = pci_hp_diva_setup,
17741990 },
17751991 /*
....@@ -1989,7 +2205,7 @@
19892205 .device = PCI_DEVICE_ID_PERICOM_PI7C9X7954,
19902206 .subvendor = PCI_ANY_ID,
19912207 .subdevice = PCI_ANY_ID,
1992
- .setup = pci_pericom_setup,
2208
+ .setup = pci_pericom_setup_four_at_eight,
19932209 },
19942210 /*
19952211 * PLX
....@@ -2026,107 +2242,120 @@
20262242 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SDB,
20272243 .subvendor = PCI_ANY_ID,
20282244 .subdevice = PCI_ANY_ID,
2029
- .setup = pci_pericom_setup,
2245
+ .setup = pci_pericom_setup_four_at_eight,
20302246 },
20312247 {
20322248 .vendor = PCI_VENDOR_ID_ACCESIO,
20332249 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM_4S,
20342250 .subvendor = PCI_ANY_ID,
20352251 .subdevice = PCI_ANY_ID,
2036
- .setup = pci_pericom_setup,
2252
+ .setup = pci_pericom_setup_four_at_eight,
20372253 },
20382254 {
20392255 .vendor = PCI_VENDOR_ID_ACCESIO,
20402256 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM232_4DB,
20412257 .subvendor = PCI_ANY_ID,
20422258 .subdevice = PCI_ANY_ID,
2043
- .setup = pci_pericom_setup,
2259
+ .setup = pci_pericom_setup_four_at_eight,
20442260 },
20452261 {
20462262 .vendor = PCI_VENDOR_ID_ACCESIO,
20472263 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM232_4,
20482264 .subvendor = PCI_ANY_ID,
20492265 .subdevice = PCI_ANY_ID,
2050
- .setup = pci_pericom_setup,
2266
+ .setup = pci_pericom_setup_four_at_eight,
20512267 },
20522268 {
20532269 .vendor = PCI_VENDOR_ID_ACCESIO,
20542270 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SMDB,
20552271 .subvendor = PCI_ANY_ID,
20562272 .subdevice = PCI_ANY_ID,
2057
- .setup = pci_pericom_setup,
2273
+ .setup = pci_pericom_setup_four_at_eight,
20582274 },
20592275 {
20602276 .vendor = PCI_VENDOR_ID_ACCESIO,
20612277 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM_4SM,
20622278 .subvendor = PCI_ANY_ID,
20632279 .subdevice = PCI_ANY_ID,
2064
- .setup = pci_pericom_setup,
2280
+ .setup = pci_pericom_setup_four_at_eight,
20652281 },
20662282 {
20672283 .vendor = PCI_VENDOR_ID_ACCESIO,
20682284 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM422_4,
20692285 .subvendor = PCI_ANY_ID,
20702286 .subdevice = PCI_ANY_ID,
2071
- .setup = pci_pericom_setup,
2287
+ .setup = pci_pericom_setup_four_at_eight,
20722288 },
20732289 {
20742290 .vendor = PCI_VENDOR_ID_ACCESIO,
20752291 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM485_4,
20762292 .subvendor = PCI_ANY_ID,
20772293 .subdevice = PCI_ANY_ID,
2078
- .setup = pci_pericom_setup,
2294
+ .setup = pci_pericom_setup_four_at_eight,
20792295 },
20802296 {
2081
- .vendor = PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4S,
2297
+ .vendor = PCI_VENDOR_ID_ACCESIO,
20822298 .device = PCI_DEVICE_ID_ACCESIO_PCIE_ICM232_4,
20832299 .subvendor = PCI_ANY_ID,
20842300 .subdevice = PCI_ANY_ID,
2085
- .setup = pci_pericom_setup,
2301
+ .setup = pci_pericom_setup_four_at_eight,
2302
+ },
2303
+ {
2304
+ .vendor = PCI_VENDOR_ID_ACCESIO,
2305
+ .device = PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4S,
2306
+ .subvendor = PCI_ANY_ID,
2307
+ .subdevice = PCI_ANY_ID,
2308
+ .setup = pci_pericom_setup_four_at_eight,
20862309 },
20872310 {
20882311 .vendor = PCI_VENDOR_ID_ACCESIO,
20892312 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM232_4,
20902313 .subvendor = PCI_ANY_ID,
20912314 .subdevice = PCI_ANY_ID,
2092
- .setup = pci_pericom_setup,
2315
+ .setup = pci_pericom_setup_four_at_eight,
20932316 },
20942317 {
20952318 .vendor = PCI_VENDOR_ID_ACCESIO,
20962319 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM422_4,
20972320 .subvendor = PCI_ANY_ID,
20982321 .subdevice = PCI_ANY_ID,
2099
- .setup = pci_pericom_setup,
2322
+ .setup = pci_pericom_setup_four_at_eight,
21002323 },
21012324 {
21022325 .vendor = PCI_VENDOR_ID_ACCESIO,
21032326 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM485_4,
21042327 .subvendor = PCI_ANY_ID,
21052328 .subdevice = PCI_ANY_ID,
2106
- .setup = pci_pericom_setup,
2329
+ .setup = pci_pericom_setup_four_at_eight,
21072330 },
21082331 {
21092332 .vendor = PCI_VENDOR_ID_ACCESIO,
21102333 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM232_4,
21112334 .subvendor = PCI_ANY_ID,
21122335 .subdevice = PCI_ANY_ID,
2113
- .setup = pci_pericom_setup,
2336
+ .setup = pci_pericom_setup_four_at_eight,
21142337 },
21152338 {
21162339 .vendor = PCI_VENDOR_ID_ACCESIO,
21172340 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SM,
21182341 .subvendor = PCI_ANY_ID,
21192342 .subdevice = PCI_ANY_ID,
2120
- .setup = pci_pericom_setup,
2343
+ .setup = pci_pericom_setup_four_at_eight,
21212344 },
21222345 {
21232346 .vendor = PCI_VENDOR_ID_ACCESIO,
21242347 .device = PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4SM,
21252348 .subvendor = PCI_ANY_ID,
21262349 .subdevice = PCI_ANY_ID,
2127
- .setup = pci_pericom_setup,
2350
+ .setup = pci_pericom_setup_four_at_eight,
21282351 },
2129
- /*
2352
+ {
2353
+ .vendor = PCI_VENDOR_ID_ACCESIO,
2354
+ .device = PCI_ANY_ID,
2355
+ .subvendor = PCI_ANY_ID,
2356
+ .subdevice = PCI_ANY_ID,
2357
+ .setup = pci_pericom_setup,
2358
+ }, /*
21302359 * SBS Technologies, Inc., PMC-OCTALPRO 232
21312360 */
21322361 {
....@@ -2222,21 +2451,14 @@
22222451 .setup = pci_timedia_setup,
22232452 },
22242453 /*
2225
- * SUNIX (Timedia) cards
2226
- * Do not "probe" for these cards as there is at least one combination
2227
- * card that should be handled by parport_pc that doesn't match the
2228
- * rule in pci_timedia_probe.
2229
- * It is part number is MIO5079A but its subdevice ID is 0x0102.
2230
- * There are some boards with part number SER5037AL that report
2231
- * subdevice ID 0x0002.
2454
+ * Sunix PCI serial boards
22322455 */
22332456 {
22342457 .vendor = PCI_VENDOR_ID_SUNIX,
22352458 .device = PCI_DEVICE_ID_SUNIX_1999,
22362459 .subvendor = PCI_VENDOR_ID_SUNIX,
22372460 .subdevice = PCI_ANY_ID,
2238
- .init = pci_timedia_init,
2239
- .setup = pci_timedia_setup,
2461
+ .setup = pci_sunix_setup,
22402462 },
22412463 /*
22422464 * Xircom cards
....@@ -2268,7 +2490,7 @@
22682490 .device = PCI_ANY_ID,
22692491 .subvendor = PCI_ANY_ID,
22702492 .subdevice = PCI_ANY_ID,
2271
- .init = pci_endrun_init,
2493
+ .init = pci_oxsemi_tornado_init,
22722494 .setup = pci_default_setup,
22732495 },
22742496 /*
....@@ -2452,6 +2674,16 @@
24522674 .subdevice = PCI_ANY_ID,
24532675 .setup = pci_wch_ch38x_setup,
24542676 },
2677
+ /* WCH CH384 8S card (16850 clone) */
2678
+ {
2679
+ .vendor = PCIE_VENDOR_ID_WCH,
2680
+ .device = PCIE_DEVICE_ID_WCH_CH384_8S,
2681
+ .subvendor = PCI_ANY_ID,
2682
+ .subdevice = PCI_ANY_ID,
2683
+ .init = pci_wch_ch38x_init,
2684
+ .exit = pci_wch_ch38x_exit,
2685
+ .setup = pci_wch_ch38x_setup,
2686
+ },
24552687 /*
24562688 * ASIX devices with FIFO bug
24572689 */
....@@ -2496,6 +2728,40 @@
24962728 .setup = pci_fintek_setup,
24972729 .init = pci_fintek_init,
24982730 },
2731
+ /*
2732
+ * MOXA
2733
+ */
2734
+ {
2735
+ .vendor = PCI_VENDOR_ID_MOXA,
2736
+ .device = PCI_ANY_ID,
2737
+ .subvendor = PCI_ANY_ID,
2738
+ .subdevice = PCI_ANY_ID,
2739
+ .setup = pci_moxa_setup,
2740
+ },
2741
+ {
2742
+ .vendor = 0x1c29,
2743
+ .device = 0x1204,
2744
+ .subvendor = PCI_ANY_ID,
2745
+ .subdevice = PCI_ANY_ID,
2746
+ .setup = pci_fintek_f815xxa_setup,
2747
+ .init = pci_fintek_f815xxa_init,
2748
+ },
2749
+ {
2750
+ .vendor = 0x1c29,
2751
+ .device = 0x1208,
2752
+ .subvendor = PCI_ANY_ID,
2753
+ .subdevice = PCI_ANY_ID,
2754
+ .setup = pci_fintek_f815xxa_setup,
2755
+ .init = pci_fintek_f815xxa_init,
2756
+ },
2757
+ {
2758
+ .vendor = 0x1c29,
2759
+ .device = 0x1212,
2760
+ .subvendor = PCI_ANY_ID,
2761
+ .subdevice = PCI_ANY_ID,
2762
+ .setup = pci_fintek_f815xxa_setup,
2763
+ .init = pci_fintek_f815xxa_init,
2764
+ },
24992765
25002766 /*
25012767 * Default "match everything" terminator entry
....@@ -2525,15 +2791,6 @@
25252791 quirk_id_matches(quirk->subdevice, dev->subsystem_device))
25262792 break;
25272793 return quirk;
2528
-}
2529
-
2530
-static inline int get_pci_irq(struct pci_dev *dev,
2531
- const struct pciserial_board *board)
2532
-{
2533
- if (board->flags & FL_NOIRQ)
2534
- return 0;
2535
- else
2536
- return dev->irq;
25372794 }
25382795
25392796 /*
....@@ -2578,7 +2835,7 @@
25782835 pbn_b0_2_1843200,
25792836 pbn_b0_4_1843200,
25802837
2581
- pbn_b0_1_4000000,
2838
+ pbn_b0_1_3906250,
25822839
25832840 pbn_b0_bt_1_115200,
25842841 pbn_b0_bt_2_115200,
....@@ -2656,12 +2913,11 @@
26562913 pbn_panacom2,
26572914 pbn_panacom4,
26582915 pbn_plx_romulus,
2659
- pbn_endrun_2_4000000,
26602916 pbn_oxsemi,
2661
- pbn_oxsemi_1_4000000,
2662
- pbn_oxsemi_2_4000000,
2663
- pbn_oxsemi_4_4000000,
2664
- pbn_oxsemi_8_4000000,
2917
+ pbn_oxsemi_1_3906250,
2918
+ pbn_oxsemi_2_3906250,
2919
+ pbn_oxsemi_4_3906250,
2920
+ pbn_oxsemi_8_3906250,
26652921 pbn_intel_i960,
26662922 pbn_sgi_ioc3,
26672923 pbn_computone_4,
....@@ -2684,12 +2940,28 @@
26842940 pbn_fintek_4,
26852941 pbn_fintek_8,
26862942 pbn_fintek_12,
2943
+ pbn_fintek_F81504A,
2944
+ pbn_fintek_F81508A,
2945
+ pbn_fintek_F81512A,
26872946 pbn_wch382_2,
26882947 pbn_wch384_4,
2948
+ pbn_wch384_8,
26892949 pbn_pericom_PI7C9X7951,
26902950 pbn_pericom_PI7C9X7952,
26912951 pbn_pericom_PI7C9X7954,
26922952 pbn_pericom_PI7C9X7958,
2953
+ pbn_sunix_pci_1s,
2954
+ pbn_sunix_pci_2s,
2955
+ pbn_sunix_pci_4s,
2956
+ pbn_sunix_pci_8s,
2957
+ pbn_sunix_pci_16s,
2958
+ pbn_titan_1_4000000,
2959
+ pbn_titan_2_4000000,
2960
+ pbn_titan_4_4000000,
2961
+ pbn_titan_8_4000000,
2962
+ pbn_moxa8250_2p,
2963
+ pbn_moxa8250_4p,
2964
+ pbn_moxa8250_8p,
26932965 };
26942966
26952967 /*
....@@ -2792,10 +3064,10 @@
27923064 .uart_offset = 8,
27933065 },
27943066
2795
- [pbn_b0_1_4000000] = {
3067
+ [pbn_b0_1_3906250] = {
27963068 .flags = FL_BASE0,
27973069 .num_ports = 1,
2798
- .base_baud = 4000000,
3070
+ .base_baud = 3906250,
27993071 .uart_offset = 8,
28003072 },
28013073
....@@ -3167,20 +3439,6 @@
31673439 },
31683440
31693441 /*
3170
- * EndRun Technologies
3171
- * Uses the size of PCI Base region 0 to
3172
- * signal now many ports are available
3173
- * 2 port 952 Uart support
3174
- */
3175
- [pbn_endrun_2_4000000] = {
3176
- .flags = FL_BASE0,
3177
- .num_ports = 2,
3178
- .base_baud = 4000000,
3179
- .uart_offset = 0x200,
3180
- .first_offset = 0x1000,
3181
- },
3182
-
3183
- /*
31843442 * This board uses the size of PCI Base region 0 to
31853443 * signal now many ports are available
31863444 */
....@@ -3190,31 +3448,31 @@
31903448 .base_baud = 115200,
31913449 .uart_offset = 8,
31923450 },
3193
- [pbn_oxsemi_1_4000000] = {
3451
+ [pbn_oxsemi_1_3906250] = {
31943452 .flags = FL_BASE0,
31953453 .num_ports = 1,
3196
- .base_baud = 4000000,
3454
+ .base_baud = 3906250,
31973455 .uart_offset = 0x200,
31983456 .first_offset = 0x1000,
31993457 },
3200
- [pbn_oxsemi_2_4000000] = {
3458
+ [pbn_oxsemi_2_3906250] = {
32013459 .flags = FL_BASE0,
32023460 .num_ports = 2,
3203
- .base_baud = 4000000,
3461
+ .base_baud = 3906250,
32043462 .uart_offset = 0x200,
32053463 .first_offset = 0x1000,
32063464 },
3207
- [pbn_oxsemi_4_4000000] = {
3465
+ [pbn_oxsemi_4_3906250] = {
32083466 .flags = FL_BASE0,
32093467 .num_ports = 4,
3210
- .base_baud = 4000000,
3468
+ .base_baud = 3906250,
32113469 .uart_offset = 0x200,
32123470 .first_offset = 0x1000,
32133471 },
3214
- [pbn_oxsemi_8_4000000] = {
3472
+ [pbn_oxsemi_8_3906250] = {
32153473 .flags = FL_BASE0,
32163474 .num_ports = 8,
3217
- .base_baud = 4000000,
3475
+ .base_baud = 3906250,
32183476 .uart_offset = 0x200,
32193477 .first_offset = 0x1000,
32203478 },
....@@ -3386,6 +3644,21 @@
33863644 .base_baud = 115200,
33873645 .first_offset = 0x40,
33883646 },
3647
+ [pbn_fintek_F81504A] = {
3648
+ .num_ports = 4,
3649
+ .uart_offset = 8,
3650
+ .base_baud = 115200,
3651
+ },
3652
+ [pbn_fintek_F81508A] = {
3653
+ .num_ports = 8,
3654
+ .uart_offset = 8,
3655
+ .base_baud = 115200,
3656
+ },
3657
+ [pbn_fintek_F81512A] = {
3658
+ .num_ports = 12,
3659
+ .uart_offset = 8,
3660
+ .base_baud = 115200,
3661
+ },
33893662 [pbn_wch382_2] = {
33903663 .flags = FL_BASE0,
33913664 .num_ports = 2,
....@@ -3399,6 +3672,13 @@
33993672 .base_baud = 115200,
34003673 .uart_offset = 8,
34013674 .first_offset = 0xC0,
3675
+ },
3676
+ [pbn_wch384_8] = {
3677
+ .flags = FL_BASE0,
3678
+ .num_ports = 8,
3679
+ .base_baud = 115200,
3680
+ .uart_offset = 8,
3681
+ .first_offset = 0x00,
34023682 },
34033683 /*
34043684 * Pericom PI7C9X795[1248] Uno/Dual/Quad/Octal UART
....@@ -3427,6 +3707,77 @@
34273707 .base_baud = 921600,
34283708 .uart_offset = 0x8,
34293709 },
3710
+ [pbn_sunix_pci_1s] = {
3711
+ .num_ports = 1,
3712
+ .base_baud = 921600,
3713
+ .uart_offset = 0x8,
3714
+ },
3715
+ [pbn_sunix_pci_2s] = {
3716
+ .num_ports = 2,
3717
+ .base_baud = 921600,
3718
+ .uart_offset = 0x8,
3719
+ },
3720
+ [pbn_sunix_pci_4s] = {
3721
+ .num_ports = 4,
3722
+ .base_baud = 921600,
3723
+ .uart_offset = 0x8,
3724
+ },
3725
+ [pbn_sunix_pci_8s] = {
3726
+ .num_ports = 8,
3727
+ .base_baud = 921600,
3728
+ .uart_offset = 0x8,
3729
+ },
3730
+ [pbn_sunix_pci_16s] = {
3731
+ .num_ports = 16,
3732
+ .base_baud = 921600,
3733
+ .uart_offset = 0x8,
3734
+ },
3735
+ [pbn_titan_1_4000000] = {
3736
+ .flags = FL_BASE0,
3737
+ .num_ports = 1,
3738
+ .base_baud = 4000000,
3739
+ .uart_offset = 0x200,
3740
+ .first_offset = 0x1000,
3741
+ },
3742
+ [pbn_titan_2_4000000] = {
3743
+ .flags = FL_BASE0,
3744
+ .num_ports = 2,
3745
+ .base_baud = 4000000,
3746
+ .uart_offset = 0x200,
3747
+ .first_offset = 0x1000,
3748
+ },
3749
+ [pbn_titan_4_4000000] = {
3750
+ .flags = FL_BASE0,
3751
+ .num_ports = 4,
3752
+ .base_baud = 4000000,
3753
+ .uart_offset = 0x200,
3754
+ .first_offset = 0x1000,
3755
+ },
3756
+ [pbn_titan_8_4000000] = {
3757
+ .flags = FL_BASE0,
3758
+ .num_ports = 8,
3759
+ .base_baud = 4000000,
3760
+ .uart_offset = 0x200,
3761
+ .first_offset = 0x1000,
3762
+ },
3763
+ [pbn_moxa8250_2p] = {
3764
+ .flags = FL_BASE1,
3765
+ .num_ports = 2,
3766
+ .base_baud = 921600,
3767
+ .uart_offset = 0x200,
3768
+ },
3769
+ [pbn_moxa8250_4p] = {
3770
+ .flags = FL_BASE1,
3771
+ .num_ports = 4,
3772
+ .base_baud = 921600,
3773
+ .uart_offset = 0x200,
3774
+ },
3775
+ [pbn_moxa8250_8p] = {
3776
+ .flags = FL_BASE1,
3777
+ .num_ports = 8,
3778
+ .base_baud = 921600,
3779
+ .uart_offset = 0x200,
3780
+ },
34303781 };
34313782
34323783 static const struct pci_device_id blacklist[] = {
....@@ -3439,20 +3790,6 @@
34393790 { PCI_DEVICE(0x4348, 0x7053), }, /* WCH CH353 2S1P */
34403791 { PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */
34413792 { PCI_DEVICE(0x1c00, 0x3250), }, /* WCH CH382 2S1P */
3442
-
3443
- /* Moxa Smartio MUE boards handled by 8250_moxa */
3444
- { PCI_VDEVICE(MOXA, 0x1024), },
3445
- { PCI_VDEVICE(MOXA, 0x1025), },
3446
- { PCI_VDEVICE(MOXA, 0x1045), },
3447
- { PCI_VDEVICE(MOXA, 0x1144), },
3448
- { PCI_VDEVICE(MOXA, 0x1160), },
3449
- { PCI_VDEVICE(MOXA, 0x1161), },
3450
- { PCI_VDEVICE(MOXA, 0x1182), },
3451
- { PCI_VDEVICE(MOXA, 0x1183), },
3452
- { PCI_VDEVICE(MOXA, 0x1322), },
3453
- { PCI_VDEVICE(MOXA, 0x1342), },
3454
- { PCI_VDEVICE(MOXA, 0x1381), },
3455
- { PCI_VDEVICE(MOXA, 0x1683), },
34563793
34573794 /* Intel platforms with MID UART */
34583795 { PCI_VDEVICE(INTEL, 0x081b), },
....@@ -3468,12 +3805,21 @@
34683805 { PCI_VDEVICE(INTEL, 0x0f0c), },
34693806 { PCI_VDEVICE(INTEL, 0x228a), },
34703807 { PCI_VDEVICE(INTEL, 0x228c), },
3808
+ { PCI_VDEVICE(INTEL, 0x4b96), },
3809
+ { PCI_VDEVICE(INTEL, 0x4b97), },
3810
+ { PCI_VDEVICE(INTEL, 0x4b98), },
3811
+ { PCI_VDEVICE(INTEL, 0x4b99), },
3812
+ { PCI_VDEVICE(INTEL, 0x4b9a), },
3813
+ { PCI_VDEVICE(INTEL, 0x4b9b), },
34713814 { PCI_VDEVICE(INTEL, 0x9ce3), },
34723815 { PCI_VDEVICE(INTEL, 0x9ce4), },
34733816
34743817 /* Exar devices */
34753818 { PCI_VDEVICE(EXAR, PCI_ANY_ID), },
34763819 { PCI_VDEVICE(COMMTECH, PCI_ANY_ID), },
3820
+
3821
+ /* End of the black list */
3822
+ { }
34773823 };
34783824
34793825 static int serial_pci_is_class_communication(struct pci_dev *dev)
....@@ -3487,25 +3833,6 @@
34873833 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
34883834 (dev->class & 0xff) > 6)
34893835 return -ENODEV;
3490
-
3491
- return 0;
3492
-}
3493
-
3494
-static int serial_pci_is_blacklisted(struct pci_dev *dev)
3495
-{
3496
- const struct pci_device_id *bldev;
3497
-
3498
- /*
3499
- * Do not access blacklisted devices that are known not to
3500
- * feature serial ports or are handled by other modules.
3501
- */
3502
- for (bldev = blacklist;
3503
- bldev < blacklist + ARRAY_SIZE(blacklist);
3504
- bldev++) {
3505
- if (dev->vendor == bldev->vendor &&
3506
- dev->device == bldev->device)
3507
- return -ENODEV;
3508
- }
35093836
35103837 return 0;
35113838 }
....@@ -3532,7 +3859,7 @@
35323859 return -ENODEV;
35333860
35343861 num_iomem = num_port = 0;
3535
- for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
3862
+ for (i = 0; i < PCI_STD_NUM_BARS; i++) {
35363863 if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
35373864 num_port++;
35383865 if (first_port == -1)
....@@ -3560,7 +3887,7 @@
35603887 */
35613888 first_port = -1;
35623889 num_port = 0;
3563
- for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
3890
+ for (i = 0; i < PCI_STD_NUM_BARS; i++) {
35643891 if (pci_resource_flags(dev, i) & IORESOURCE_IO &&
35653892 pci_resource_len(dev, i) == 8 &&
35663893 (first_port == -1 || (first_port + num_port) == i)) {
....@@ -3637,19 +3964,40 @@
36373964 memset(&uart, 0, sizeof(uart));
36383965 uart.port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
36393966 uart.port.uartclk = board->base_baud * 16;
3640
- uart.port.irq = get_pci_irq(dev, board);
3967
+
3968
+ if (board->flags & FL_NOIRQ) {
3969
+ uart.port.irq = 0;
3970
+ } else {
3971
+ if (pci_match_id(pci_use_msi, dev)) {
3972
+ pci_dbg(dev, "Using MSI(-X) interrupts\n");
3973
+ pci_set_master(dev);
3974
+ uart.port.flags &= ~UPF_SHARE_IRQ;
3975
+ rc = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_ALL_TYPES);
3976
+ } else {
3977
+ pci_dbg(dev, "Using legacy interrupts\n");
3978
+ rc = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_LEGACY);
3979
+ }
3980
+ if (rc < 0) {
3981
+ kfree(priv);
3982
+ priv = ERR_PTR(rc);
3983
+ goto err_deinit;
3984
+ }
3985
+
3986
+ uart.port.irq = pci_irq_vector(dev, 0);
3987
+ }
3988
+
36413989 uart.port.dev = &dev->dev;
36423990
36433991 for (i = 0; i < nr_ports; i++) {
36443992 if (quirk->setup(priv, board, &uart, i))
36453993 break;
36463994
3647
- dev_dbg(&dev->dev, "Setup PCI port: port %lx, irq %d, type %d\n",
3995
+ pci_dbg(dev, "Setup PCI port: port %lx, irq %d, type %d\n",
36483996 uart.port.iobase, uart.port.irq, uart.port.iotype);
36493997
36503998 priv->line[i] = serial8250_register_8250_port(&uart);
36513999 if (priv->line[i] < 0) {
3652
- dev_err(&dev->dev,
4000
+ pci_err(dev,
36534001 "Couldn't register serial port %lx, irq %d, type %d, error %d\n",
36544002 uart.port.iobase, uart.port.irq,
36554003 uart.port.iotype, priv->line[i]);
....@@ -3733,6 +4081,7 @@
37334081 struct pci_serial_quirk *quirk;
37344082 struct serial_private *priv;
37354083 const struct pciserial_board *board;
4084
+ const struct pci_device_id *exclude;
37364085 struct pciserial_board tmp;
37374086 int rc;
37384087
....@@ -3744,16 +4093,15 @@
37444093 }
37454094
37464095 if (ent->driver_data >= ARRAY_SIZE(pci_boards)) {
3747
- dev_err(&dev->dev, "invalid driver_data: %ld\n",
3748
- ent->driver_data);
4096
+ pci_err(dev, "invalid driver_data: %ld\n", ent->driver_data);
37494097 return -EINVAL;
37504098 }
37514099
37524100 board = &pci_boards[ent->driver_data];
37534101
3754
- rc = serial_pci_is_blacklisted(dev);
3755
- if (rc)
3756
- return rc;
4102
+ exclude = pci_match_id(blacklist, dev);
4103
+ if (exclude)
4104
+ return -ENODEV;
37574105
37584106 rc = pcim_enable_device(dev);
37594107 pci_save_state(dev);
....@@ -3807,8 +4155,7 @@
38074155 #ifdef CONFIG_PM_SLEEP
38084156 static int pciserial_suspend_one(struct device *dev)
38094157 {
3810
- struct pci_dev *pdev = to_pci_dev(dev);
3811
- struct serial_private *priv = pci_get_drvdata(pdev);
4158
+ struct serial_private *priv = dev_get_drvdata(dev);
38124159
38134160 if (priv)
38144161 pciserial_suspend_ports(priv);
....@@ -3829,7 +4176,7 @@
38294176 err = pci_enable_device(pdev);
38304177 /* FIXME: We cannot simply error out here */
38314178 if (err)
3832
- dev_err(dev, "Unable to re-enable ports, trying to continue.\n");
4179
+ pci_err(pdev, "Unable to re-enable ports, trying to continue.\n");
38334180 pciserial_resume_ports(priv);
38344181 }
38354182 return 0;
....@@ -3840,6 +4187,9 @@
38404187 pciserial_resume_one);
38414188
38424189 static const struct pci_device_id serial_pci_tbl[] = {
4190
+ { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI1600,
4191
+ PCI_DEVICE_ID_ADVANTECH_PCI1600_1611, PCI_ANY_ID, 0, 0,
4192
+ pbn_b0_4_921600 },
38434193 /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */
38444194 { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620,
38454195 PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0,
....@@ -4023,13 +4373,6 @@
40234373 0x10b5, 0x106a, 0, 0,
40244374 pbn_plx_romulus },
40254375 /*
4026
- * EndRun Technologies. PCI express device range.
4027
- * EndRun PTP/1588 has 2 Native UARTs.
4028
- */
4029
- { PCI_VENDOR_ID_ENDRUN, PCI_DEVICE_ID_ENDRUN_1588,
4030
- PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4031
- pbn_endrun_2_4000000 },
4032
- /*
40334376 * Quatech cards. These actually have configurable clocks but for
40344377 * now we just use the default.
40354378 *
....@@ -4138,158 +4481,165 @@
41384481 */
41394482 { PCI_VENDOR_ID_OXSEMI, 0xc101, /* OXPCIe952 1 Legacy UART */
41404483 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4141
- pbn_b0_1_4000000 },
4484
+ pbn_b0_1_3906250 },
41424485 { PCI_VENDOR_ID_OXSEMI, 0xc105, /* OXPCIe952 1 Legacy UART */
41434486 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4144
- pbn_b0_1_4000000 },
4487
+ pbn_b0_1_3906250 },
41454488 { PCI_VENDOR_ID_OXSEMI, 0xc11b, /* OXPCIe952 1 Native UART */
41464489 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4147
- pbn_oxsemi_1_4000000 },
4490
+ pbn_oxsemi_1_3906250 },
41484491 { PCI_VENDOR_ID_OXSEMI, 0xc11f, /* OXPCIe952 1 Native UART */
41494492 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4150
- pbn_oxsemi_1_4000000 },
4493
+ pbn_oxsemi_1_3906250 },
41514494 { PCI_VENDOR_ID_OXSEMI, 0xc120, /* OXPCIe952 1 Legacy UART */
41524495 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4153
- pbn_b0_1_4000000 },
4496
+ pbn_b0_1_3906250 },
41544497 { PCI_VENDOR_ID_OXSEMI, 0xc124, /* OXPCIe952 1 Legacy UART */
41554498 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4156
- pbn_b0_1_4000000 },
4499
+ pbn_b0_1_3906250 },
41574500 { PCI_VENDOR_ID_OXSEMI, 0xc138, /* OXPCIe952 1 Native UART */
41584501 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4159
- pbn_oxsemi_1_4000000 },
4502
+ pbn_oxsemi_1_3906250 },
41604503 { PCI_VENDOR_ID_OXSEMI, 0xc13d, /* OXPCIe952 1 Native UART */
41614504 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4162
- pbn_oxsemi_1_4000000 },
4505
+ pbn_oxsemi_1_3906250 },
41634506 { PCI_VENDOR_ID_OXSEMI, 0xc140, /* OXPCIe952 1 Legacy UART */
41644507 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4165
- pbn_b0_1_4000000 },
4508
+ pbn_b0_1_3906250 },
41664509 { PCI_VENDOR_ID_OXSEMI, 0xc141, /* OXPCIe952 1 Legacy UART */
41674510 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4168
- pbn_b0_1_4000000 },
4511
+ pbn_b0_1_3906250 },
41694512 { PCI_VENDOR_ID_OXSEMI, 0xc144, /* OXPCIe952 1 Legacy UART */
41704513 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4171
- pbn_b0_1_4000000 },
4514
+ pbn_b0_1_3906250 },
41724515 { PCI_VENDOR_ID_OXSEMI, 0xc145, /* OXPCIe952 1 Legacy UART */
41734516 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4174
- pbn_b0_1_4000000 },
4517
+ pbn_b0_1_3906250 },
41754518 { PCI_VENDOR_ID_OXSEMI, 0xc158, /* OXPCIe952 2 Native UART */
41764519 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4177
- pbn_oxsemi_2_4000000 },
4520
+ pbn_oxsemi_2_3906250 },
41784521 { PCI_VENDOR_ID_OXSEMI, 0xc15d, /* OXPCIe952 2 Native UART */
41794522 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4180
- pbn_oxsemi_2_4000000 },
4523
+ pbn_oxsemi_2_3906250 },
41814524 { PCI_VENDOR_ID_OXSEMI, 0xc208, /* OXPCIe954 4 Native UART */
41824525 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4183
- pbn_oxsemi_4_4000000 },
4526
+ pbn_oxsemi_4_3906250 },
41844527 { PCI_VENDOR_ID_OXSEMI, 0xc20d, /* OXPCIe954 4 Native UART */
41854528 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4186
- pbn_oxsemi_4_4000000 },
4529
+ pbn_oxsemi_4_3906250 },
41874530 { PCI_VENDOR_ID_OXSEMI, 0xc308, /* OXPCIe958 8 Native UART */
41884531 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4189
- pbn_oxsemi_8_4000000 },
4532
+ pbn_oxsemi_8_3906250 },
41904533 { PCI_VENDOR_ID_OXSEMI, 0xc30d, /* OXPCIe958 8 Native UART */
41914534 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4192
- pbn_oxsemi_8_4000000 },
4535
+ pbn_oxsemi_8_3906250 },
41934536 { PCI_VENDOR_ID_OXSEMI, 0xc40b, /* OXPCIe200 1 Native UART */
41944537 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4195
- pbn_oxsemi_1_4000000 },
4538
+ pbn_oxsemi_1_3906250 },
41964539 { PCI_VENDOR_ID_OXSEMI, 0xc40f, /* OXPCIe200 1 Native UART */
41974540 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4198
- pbn_oxsemi_1_4000000 },
4541
+ pbn_oxsemi_1_3906250 },
41994542 { PCI_VENDOR_ID_OXSEMI, 0xc41b, /* OXPCIe200 1 Native UART */
42004543 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4201
- pbn_oxsemi_1_4000000 },
4544
+ pbn_oxsemi_1_3906250 },
42024545 { PCI_VENDOR_ID_OXSEMI, 0xc41f, /* OXPCIe200 1 Native UART */
42034546 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4204
- pbn_oxsemi_1_4000000 },
4547
+ pbn_oxsemi_1_3906250 },
42054548 { PCI_VENDOR_ID_OXSEMI, 0xc42b, /* OXPCIe200 1 Native UART */
42064549 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4207
- pbn_oxsemi_1_4000000 },
4550
+ pbn_oxsemi_1_3906250 },
42084551 { PCI_VENDOR_ID_OXSEMI, 0xc42f, /* OXPCIe200 1 Native UART */
42094552 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4210
- pbn_oxsemi_1_4000000 },
4553
+ pbn_oxsemi_1_3906250 },
42114554 { PCI_VENDOR_ID_OXSEMI, 0xc43b, /* OXPCIe200 1 Native UART */
42124555 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4213
- pbn_oxsemi_1_4000000 },
4556
+ pbn_oxsemi_1_3906250 },
42144557 { PCI_VENDOR_ID_OXSEMI, 0xc43f, /* OXPCIe200 1 Native UART */
42154558 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4216
- pbn_oxsemi_1_4000000 },
4559
+ pbn_oxsemi_1_3906250 },
42174560 { PCI_VENDOR_ID_OXSEMI, 0xc44b, /* OXPCIe200 1 Native UART */
42184561 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4219
- pbn_oxsemi_1_4000000 },
4562
+ pbn_oxsemi_1_3906250 },
42204563 { PCI_VENDOR_ID_OXSEMI, 0xc44f, /* OXPCIe200 1 Native UART */
42214564 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4222
- pbn_oxsemi_1_4000000 },
4565
+ pbn_oxsemi_1_3906250 },
42234566 { PCI_VENDOR_ID_OXSEMI, 0xc45b, /* OXPCIe200 1 Native UART */
42244567 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4225
- pbn_oxsemi_1_4000000 },
4568
+ pbn_oxsemi_1_3906250 },
42264569 { PCI_VENDOR_ID_OXSEMI, 0xc45f, /* OXPCIe200 1 Native UART */
42274570 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4228
- pbn_oxsemi_1_4000000 },
4571
+ pbn_oxsemi_1_3906250 },
42294572 { PCI_VENDOR_ID_OXSEMI, 0xc46b, /* OXPCIe200 1 Native UART */
42304573 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4231
- pbn_oxsemi_1_4000000 },
4574
+ pbn_oxsemi_1_3906250 },
42324575 { PCI_VENDOR_ID_OXSEMI, 0xc46f, /* OXPCIe200 1 Native UART */
42334576 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4234
- pbn_oxsemi_1_4000000 },
4577
+ pbn_oxsemi_1_3906250 },
42354578 { PCI_VENDOR_ID_OXSEMI, 0xc47b, /* OXPCIe200 1 Native UART */
42364579 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4237
- pbn_oxsemi_1_4000000 },
4580
+ pbn_oxsemi_1_3906250 },
42384581 { PCI_VENDOR_ID_OXSEMI, 0xc47f, /* OXPCIe200 1 Native UART */
42394582 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4240
- pbn_oxsemi_1_4000000 },
4583
+ pbn_oxsemi_1_3906250 },
42414584 { PCI_VENDOR_ID_OXSEMI, 0xc48b, /* OXPCIe200 1 Native UART */
42424585 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4243
- pbn_oxsemi_1_4000000 },
4586
+ pbn_oxsemi_1_3906250 },
42444587 { PCI_VENDOR_ID_OXSEMI, 0xc48f, /* OXPCIe200 1 Native UART */
42454588 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4246
- pbn_oxsemi_1_4000000 },
4589
+ pbn_oxsemi_1_3906250 },
42474590 { PCI_VENDOR_ID_OXSEMI, 0xc49b, /* OXPCIe200 1 Native UART */
42484591 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4249
- pbn_oxsemi_1_4000000 },
4592
+ pbn_oxsemi_1_3906250 },
42504593 { PCI_VENDOR_ID_OXSEMI, 0xc49f, /* OXPCIe200 1 Native UART */
42514594 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4252
- pbn_oxsemi_1_4000000 },
4595
+ pbn_oxsemi_1_3906250 },
42534596 { PCI_VENDOR_ID_OXSEMI, 0xc4ab, /* OXPCIe200 1 Native UART */
42544597 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4255
- pbn_oxsemi_1_4000000 },
4598
+ pbn_oxsemi_1_3906250 },
42564599 { PCI_VENDOR_ID_OXSEMI, 0xc4af, /* OXPCIe200 1 Native UART */
42574600 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4258
- pbn_oxsemi_1_4000000 },
4601
+ pbn_oxsemi_1_3906250 },
42594602 { PCI_VENDOR_ID_OXSEMI, 0xc4bb, /* OXPCIe200 1 Native UART */
42604603 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4261
- pbn_oxsemi_1_4000000 },
4604
+ pbn_oxsemi_1_3906250 },
42624605 { PCI_VENDOR_ID_OXSEMI, 0xc4bf, /* OXPCIe200 1 Native UART */
42634606 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4264
- pbn_oxsemi_1_4000000 },
4607
+ pbn_oxsemi_1_3906250 },
42654608 { PCI_VENDOR_ID_OXSEMI, 0xc4cb, /* OXPCIe200 1 Native UART */
42664609 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4267
- pbn_oxsemi_1_4000000 },
4610
+ pbn_oxsemi_1_3906250 },
42684611 { PCI_VENDOR_ID_OXSEMI, 0xc4cf, /* OXPCIe200 1 Native UART */
42694612 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4270
- pbn_oxsemi_1_4000000 },
4613
+ pbn_oxsemi_1_3906250 },
42714614 /*
42724615 * Mainpine Inc. IQ Express "Rev3" utilizing OxSemi Tornado
42734616 */
42744617 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 1 Port V.34 Super-G3 Fax */
42754618 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
4276
- pbn_oxsemi_1_4000000 },
4619
+ pbn_oxsemi_1_3906250 },
42774620 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 2 Port V.34 Super-G3 Fax */
42784621 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
4279
- pbn_oxsemi_2_4000000 },
4622
+ pbn_oxsemi_2_3906250 },
42804623 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 4 Port V.34 Super-G3 Fax */
42814624 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
4282
- pbn_oxsemi_4_4000000 },
4625
+ pbn_oxsemi_4_3906250 },
42834626 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 8 Port V.34 Super-G3 Fax */
42844627 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
4285
- pbn_oxsemi_8_4000000 },
4628
+ pbn_oxsemi_8_3906250 },
42864629
42874630 /*
42884631 * Digi/IBM PCIe 2-port Async EIA-232 Adapter utilizing OxSemi Tornado
42894632 */
42904633 { PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_2_OX_IBM,
42914634 PCI_SUBVENDOR_ID_IBM, PCI_ANY_ID, 0, 0,
4292
- pbn_oxsemi_2_4000000 },
4635
+ pbn_oxsemi_2_3906250 },
4636
+ /*
4637
+ * EndRun Technologies. PCI express device range.
4638
+ * EndRun PTP/1588 has 2 Native UARTs utilizing OxSemi 952.
4639
+ */
4640
+ { PCI_VENDOR_ID_ENDRUN, PCI_DEVICE_ID_ENDRUN_1588,
4641
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4642
+ pbn_oxsemi_2_3906250 },
42934643
42944644 /*
42954645 * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards,
....@@ -4363,22 +4713,22 @@
43634713 pbn_b0_4_921600 },
43644714 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100E,
43654715 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4366
- pbn_oxsemi_1_4000000 },
4716
+ pbn_titan_1_4000000 },
43674717 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200E,
43684718 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4369
- pbn_oxsemi_2_4000000 },
4719
+ pbn_titan_2_4000000 },
43704720 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400E,
43714721 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4372
- pbn_oxsemi_4_4000000 },
4722
+ pbn_titan_4_4000000 },
43734723 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800E,
43744724 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4375
- pbn_oxsemi_8_4000000 },
4725
+ pbn_titan_8_4000000 },
43764726 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EI,
43774727 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4378
- pbn_oxsemi_2_4000000 },
4728
+ pbn_titan_2_4000000 },
43794729 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EISI,
43804730 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4381
- pbn_oxsemi_2_4000000 },
4731
+ pbn_titan_2_4000000 },
43824732 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200V3,
43834733 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
43844734 pbn_b0_bt_2_921600 },
....@@ -4480,17 +4830,29 @@
44804830 pbn_b0_bt_1_921600 },
44814831
44824832 /*
4483
- * SUNIX (TIMEDIA)
4833
+ * Sunix PCI serial boards
44844834 */
44854835 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4486
- PCI_VENDOR_ID_SUNIX, PCI_ANY_ID,
4487
- PCI_CLASS_COMMUNICATION_SERIAL << 8, 0xffff00,
4488
- pbn_b0_bt_1_921600 },
4489
-
4836
+ PCI_VENDOR_ID_SUNIX, 0x0001, 0, 0,
4837
+ pbn_sunix_pci_1s },
44904838 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4491
- PCI_VENDOR_ID_SUNIX, PCI_ANY_ID,
4492
- PCI_CLASS_COMMUNICATION_MULTISERIAL << 8, 0xffff00,
4493
- pbn_b0_bt_1_921600 },
4839
+ PCI_VENDOR_ID_SUNIX, 0x0002, 0, 0,
4840
+ pbn_sunix_pci_2s },
4841
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4842
+ PCI_VENDOR_ID_SUNIX, 0x0004, 0, 0,
4843
+ pbn_sunix_pci_4s },
4844
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4845
+ PCI_VENDOR_ID_SUNIX, 0x0084, 0, 0,
4846
+ pbn_sunix_pci_4s },
4847
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4848
+ PCI_VENDOR_ID_SUNIX, 0x0008, 0, 0,
4849
+ pbn_sunix_pci_8s },
4850
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4851
+ PCI_VENDOR_ID_SUNIX, 0x0088, 0, 0,
4852
+ pbn_sunix_pci_8s },
4853
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4854
+ PCI_VENDOR_ID_SUNIX, 0x0010, 0, 0,
4855
+ pbn_sunix_pci_16s },
44944856
44954857 /*
44964858 * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org>
....@@ -4640,6 +5002,10 @@
46405002 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
46415003 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
46425004 pbn_b2_1_115200 },
5005
+ /* HPE PCI serial device */
5006
+ { PCI_VENDOR_ID_HP_3PAR, PCI_DEVICE_ID_HPE_PCI_SERIAL,
5007
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5008
+ pbn_b1_1_115200 },
46435009
46445010 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2,
46455011 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
....@@ -5110,6 +5476,46 @@
51105476 pbn_ni8430_4 },
51115477
51125478 /*
5479
+ * MOXA
5480
+ */
5481
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102E,
5482
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5483
+ pbn_moxa8250_2p },
5484
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102EL,
5485
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5486
+ pbn_moxa8250_2p },
5487
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP104EL_A,
5488
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5489
+ pbn_moxa8250_4p },
5490
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP114EL,
5491
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5492
+ pbn_moxa8250_4p },
5493
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_A,
5494
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5495
+ pbn_moxa8250_8p },
5496
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_B,
5497
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5498
+ pbn_moxa8250_8p },
5499
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP118EL_A,
5500
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5501
+ pbn_moxa8250_8p },
5502
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP118E_A_I,
5503
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5504
+ pbn_moxa8250_8p },
5505
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP132EL,
5506
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5507
+ pbn_moxa8250_2p },
5508
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP134EL_A,
5509
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5510
+ pbn_moxa8250_4p },
5511
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP138E_A,
5512
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5513
+ pbn_moxa8250_8p },
5514
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP168EL_A,
5515
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5516
+ pbn_moxa8250_8p },
5517
+
5518
+ /*
51135519 * ADDI-DATA GmbH communication cards <info@addi-data.com>
51145520 */
51155521 { PCI_VENDOR_ID_ADDIDATA,
....@@ -5332,6 +5738,9 @@
53325738 PCI_ANY_ID, PCI_ANY_ID,
53335739 0, 0, pbn_wch384_4 },
53345740
5741
+ { PCIE_VENDOR_ID_WCH, PCIE_DEVICE_ID_WCH_CH384_8S,
5742
+ PCI_ANY_ID, PCI_ANY_ID,
5743
+ 0, 0, pbn_wch384_8 },
53355744 /*
53365745 * Realtek RealManage
53375746 */
....@@ -5347,6 +5756,9 @@
53475756 { PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 },
53485757 { PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 },
53495758 { PCI_DEVICE(0x1c29, 0x1112), .driver_data = pbn_fintek_12 },
5759
+ { PCI_DEVICE(0x1c29, 0x1204), .driver_data = pbn_fintek_F81504A },
5760
+ { PCI_DEVICE(0x1c29, 0x1208), .driver_data = pbn_fintek_F81508A },
5761
+ { PCI_DEVICE(0x1c29, 0x1212), .driver_data = pbn_fintek_F81512A },
53505762
53515763 /* MKS Tenta SCOM-080x serial cards */
53525764 { PCI_DEVICE(0x1601, 0x0800), .driver_data = pbn_b0_4_1250000 },