forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 95099d4622f8cb224d94e314c7a8e0df60b13f87
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
....@@ -1688,6 +1879,7 @@
16881879 #define PCIE_VENDOR_ID_WCH 0x1c00
16891880 #define PCIE_DEVICE_ID_WCH_CH382_2S1P 0x3250
16901881 #define PCIE_DEVICE_ID_WCH_CH384_4S 0x3470
1882
+#define PCIE_DEVICE_ID_WCH_CH384_8S 0x3853
16911883 #define PCIE_DEVICE_ID_WCH_CH382_2S 0x3253
16921884
16931885 #define PCI_VENDOR_ID_ACCESIO 0x494f
....@@ -1726,6 +1918,18 @@
17261918 #define PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4SM 0x11D8
17271919
17281920
1921
+#define PCI_DEVICE_ID_MOXA_CP102E 0x1024
1922
+#define PCI_DEVICE_ID_MOXA_CP102EL 0x1025
1923
+#define PCI_DEVICE_ID_MOXA_CP104EL_A 0x1045
1924
+#define PCI_DEVICE_ID_MOXA_CP114EL 0x1144
1925
+#define PCI_DEVICE_ID_MOXA_CP116E_A_A 0x1160
1926
+#define PCI_DEVICE_ID_MOXA_CP116E_A_B 0x1161
1927
+#define PCI_DEVICE_ID_MOXA_CP118EL_A 0x1182
1928
+#define PCI_DEVICE_ID_MOXA_CP118E_A_I 0x1183
1929
+#define PCI_DEVICE_ID_MOXA_CP132EL 0x1322
1930
+#define PCI_DEVICE_ID_MOXA_CP134EL_A 0x1342
1931
+#define PCI_DEVICE_ID_MOXA_CP138E_A 0x1381
1932
+#define PCI_DEVICE_ID_MOXA_CP168EL_A 0x1683
17291933
17301934 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
17311935 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
....@@ -1770,6 +1974,16 @@
17701974 .subvendor = PCI_ANY_ID,
17711975 .subdevice = PCI_ANY_ID,
17721976 .init = pci_hp_diva_init,
1977
+ .setup = pci_hp_diva_setup,
1978
+ },
1979
+ /*
1980
+ * HPE PCI serial device
1981
+ */
1982
+ {
1983
+ .vendor = PCI_VENDOR_ID_HP_3PAR,
1984
+ .device = PCI_DEVICE_ID_HPE_PCI_SERIAL,
1985
+ .subvendor = PCI_ANY_ID,
1986
+ .subdevice = PCI_ANY_ID,
17731987 .setup = pci_hp_diva_setup,
17741988 },
17751989 /*
....@@ -1989,7 +2203,7 @@
19892203 .device = PCI_DEVICE_ID_PERICOM_PI7C9X7954,
19902204 .subvendor = PCI_ANY_ID,
19912205 .subdevice = PCI_ANY_ID,
1992
- .setup = pci_pericom_setup,
2206
+ .setup = pci_pericom_setup_four_at_eight,
19932207 },
19942208 /*
19952209 * PLX
....@@ -2026,107 +2240,120 @@
20262240 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SDB,
20272241 .subvendor = PCI_ANY_ID,
20282242 .subdevice = PCI_ANY_ID,
2029
- .setup = pci_pericom_setup,
2243
+ .setup = pci_pericom_setup_four_at_eight,
20302244 },
20312245 {
20322246 .vendor = PCI_VENDOR_ID_ACCESIO,
20332247 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM_4S,
20342248 .subvendor = PCI_ANY_ID,
20352249 .subdevice = PCI_ANY_ID,
2036
- .setup = pci_pericom_setup,
2250
+ .setup = pci_pericom_setup_four_at_eight,
20372251 },
20382252 {
20392253 .vendor = PCI_VENDOR_ID_ACCESIO,
20402254 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM232_4DB,
20412255 .subvendor = PCI_ANY_ID,
20422256 .subdevice = PCI_ANY_ID,
2043
- .setup = pci_pericom_setup,
2257
+ .setup = pci_pericom_setup_four_at_eight,
20442258 },
20452259 {
20462260 .vendor = PCI_VENDOR_ID_ACCESIO,
20472261 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM232_4,
20482262 .subvendor = PCI_ANY_ID,
20492263 .subdevice = PCI_ANY_ID,
2050
- .setup = pci_pericom_setup,
2264
+ .setup = pci_pericom_setup_four_at_eight,
20512265 },
20522266 {
20532267 .vendor = PCI_VENDOR_ID_ACCESIO,
20542268 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SMDB,
20552269 .subvendor = PCI_ANY_ID,
20562270 .subdevice = PCI_ANY_ID,
2057
- .setup = pci_pericom_setup,
2271
+ .setup = pci_pericom_setup_four_at_eight,
20582272 },
20592273 {
20602274 .vendor = PCI_VENDOR_ID_ACCESIO,
20612275 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM_4SM,
20622276 .subvendor = PCI_ANY_ID,
20632277 .subdevice = PCI_ANY_ID,
2064
- .setup = pci_pericom_setup,
2278
+ .setup = pci_pericom_setup_four_at_eight,
20652279 },
20662280 {
20672281 .vendor = PCI_VENDOR_ID_ACCESIO,
20682282 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM422_4,
20692283 .subvendor = PCI_ANY_ID,
20702284 .subdevice = PCI_ANY_ID,
2071
- .setup = pci_pericom_setup,
2285
+ .setup = pci_pericom_setup_four_at_eight,
20722286 },
20732287 {
20742288 .vendor = PCI_VENDOR_ID_ACCESIO,
20752289 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM485_4,
20762290 .subvendor = PCI_ANY_ID,
20772291 .subdevice = PCI_ANY_ID,
2078
- .setup = pci_pericom_setup,
2292
+ .setup = pci_pericom_setup_four_at_eight,
20792293 },
20802294 {
2081
- .vendor = PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4S,
2295
+ .vendor = PCI_VENDOR_ID_ACCESIO,
20822296 .device = PCI_DEVICE_ID_ACCESIO_PCIE_ICM232_4,
20832297 .subvendor = PCI_ANY_ID,
20842298 .subdevice = PCI_ANY_ID,
2085
- .setup = pci_pericom_setup,
2299
+ .setup = pci_pericom_setup_four_at_eight,
2300
+ },
2301
+ {
2302
+ .vendor = PCI_VENDOR_ID_ACCESIO,
2303
+ .device = PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4S,
2304
+ .subvendor = PCI_ANY_ID,
2305
+ .subdevice = PCI_ANY_ID,
2306
+ .setup = pci_pericom_setup_four_at_eight,
20862307 },
20872308 {
20882309 .vendor = PCI_VENDOR_ID_ACCESIO,
20892310 .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM232_4,
20902311 .subvendor = PCI_ANY_ID,
20912312 .subdevice = PCI_ANY_ID,
2092
- .setup = pci_pericom_setup,
2313
+ .setup = pci_pericom_setup_four_at_eight,
20932314 },
20942315 {
20952316 .vendor = PCI_VENDOR_ID_ACCESIO,
20962317 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM422_4,
20972318 .subvendor = PCI_ANY_ID,
20982319 .subdevice = PCI_ANY_ID,
2099
- .setup = pci_pericom_setup,
2320
+ .setup = pci_pericom_setup_four_at_eight,
21002321 },
21012322 {
21022323 .vendor = PCI_VENDOR_ID_ACCESIO,
21032324 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM485_4,
21042325 .subvendor = PCI_ANY_ID,
21052326 .subdevice = PCI_ANY_ID,
2106
- .setup = pci_pericom_setup,
2327
+ .setup = pci_pericom_setup_four_at_eight,
21072328 },
21082329 {
21092330 .vendor = PCI_VENDOR_ID_ACCESIO,
21102331 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM232_4,
21112332 .subvendor = PCI_ANY_ID,
21122333 .subdevice = PCI_ANY_ID,
2113
- .setup = pci_pericom_setup,
2334
+ .setup = pci_pericom_setup_four_at_eight,
21142335 },
21152336 {
21162337 .vendor = PCI_VENDOR_ID_ACCESIO,
21172338 .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SM,
21182339 .subvendor = PCI_ANY_ID,
21192340 .subdevice = PCI_ANY_ID,
2120
- .setup = pci_pericom_setup,
2341
+ .setup = pci_pericom_setup_four_at_eight,
21212342 },
21222343 {
21232344 .vendor = PCI_VENDOR_ID_ACCESIO,
21242345 .device = PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4SM,
21252346 .subvendor = PCI_ANY_ID,
21262347 .subdevice = PCI_ANY_ID,
2127
- .setup = pci_pericom_setup,
2348
+ .setup = pci_pericom_setup_four_at_eight,
21282349 },
2129
- /*
2350
+ {
2351
+ .vendor = PCI_VENDOR_ID_ACCESIO,
2352
+ .device = PCI_ANY_ID,
2353
+ .subvendor = PCI_ANY_ID,
2354
+ .subdevice = PCI_ANY_ID,
2355
+ .setup = pci_pericom_setup,
2356
+ }, /*
21302357 * SBS Technologies, Inc., PMC-OCTALPRO 232
21312358 */
21322359 {
....@@ -2222,21 +2449,14 @@
22222449 .setup = pci_timedia_setup,
22232450 },
22242451 /*
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.
2452
+ * Sunix PCI serial boards
22322453 */
22332454 {
22342455 .vendor = PCI_VENDOR_ID_SUNIX,
22352456 .device = PCI_DEVICE_ID_SUNIX_1999,
22362457 .subvendor = PCI_VENDOR_ID_SUNIX,
22372458 .subdevice = PCI_ANY_ID,
2238
- .init = pci_timedia_init,
2239
- .setup = pci_timedia_setup,
2459
+ .setup = pci_sunix_setup,
22402460 },
22412461 /*
22422462 * Xircom cards
....@@ -2268,7 +2488,7 @@
22682488 .device = PCI_ANY_ID,
22692489 .subvendor = PCI_ANY_ID,
22702490 .subdevice = PCI_ANY_ID,
2271
- .init = pci_endrun_init,
2491
+ .init = pci_oxsemi_tornado_init,
22722492 .setup = pci_default_setup,
22732493 },
22742494 /*
....@@ -2452,6 +2672,16 @@
24522672 .subdevice = PCI_ANY_ID,
24532673 .setup = pci_wch_ch38x_setup,
24542674 },
2675
+ /* WCH CH384 8S card (16850 clone) */
2676
+ {
2677
+ .vendor = PCIE_VENDOR_ID_WCH,
2678
+ .device = PCIE_DEVICE_ID_WCH_CH384_8S,
2679
+ .subvendor = PCI_ANY_ID,
2680
+ .subdevice = PCI_ANY_ID,
2681
+ .init = pci_wch_ch38x_init,
2682
+ .exit = pci_wch_ch38x_exit,
2683
+ .setup = pci_wch_ch38x_setup,
2684
+ },
24552685 /*
24562686 * ASIX devices with FIFO bug
24572687 */
....@@ -2496,6 +2726,40 @@
24962726 .setup = pci_fintek_setup,
24972727 .init = pci_fintek_init,
24982728 },
2729
+ /*
2730
+ * MOXA
2731
+ */
2732
+ {
2733
+ .vendor = PCI_VENDOR_ID_MOXA,
2734
+ .device = PCI_ANY_ID,
2735
+ .subvendor = PCI_ANY_ID,
2736
+ .subdevice = PCI_ANY_ID,
2737
+ .setup = pci_moxa_setup,
2738
+ },
2739
+ {
2740
+ .vendor = 0x1c29,
2741
+ .device = 0x1204,
2742
+ .subvendor = PCI_ANY_ID,
2743
+ .subdevice = PCI_ANY_ID,
2744
+ .setup = pci_fintek_f815xxa_setup,
2745
+ .init = pci_fintek_f815xxa_init,
2746
+ },
2747
+ {
2748
+ .vendor = 0x1c29,
2749
+ .device = 0x1208,
2750
+ .subvendor = PCI_ANY_ID,
2751
+ .subdevice = PCI_ANY_ID,
2752
+ .setup = pci_fintek_f815xxa_setup,
2753
+ .init = pci_fintek_f815xxa_init,
2754
+ },
2755
+ {
2756
+ .vendor = 0x1c29,
2757
+ .device = 0x1212,
2758
+ .subvendor = PCI_ANY_ID,
2759
+ .subdevice = PCI_ANY_ID,
2760
+ .setup = pci_fintek_f815xxa_setup,
2761
+ .init = pci_fintek_f815xxa_init,
2762
+ },
24992763
25002764 /*
25012765 * Default "match everything" terminator entry
....@@ -2525,15 +2789,6 @@
25252789 quirk_id_matches(quirk->subdevice, dev->subsystem_device))
25262790 break;
25272791 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;
25372792 }
25382793
25392794 /*
....@@ -2578,7 +2833,7 @@
25782833 pbn_b0_2_1843200,
25792834 pbn_b0_4_1843200,
25802835
2581
- pbn_b0_1_4000000,
2836
+ pbn_b0_1_3906250,
25822837
25832838 pbn_b0_bt_1_115200,
25842839 pbn_b0_bt_2_115200,
....@@ -2656,12 +2911,11 @@
26562911 pbn_panacom2,
26572912 pbn_panacom4,
26582913 pbn_plx_romulus,
2659
- pbn_endrun_2_4000000,
26602914 pbn_oxsemi,
2661
- pbn_oxsemi_1_4000000,
2662
- pbn_oxsemi_2_4000000,
2663
- pbn_oxsemi_4_4000000,
2664
- pbn_oxsemi_8_4000000,
2915
+ pbn_oxsemi_1_3906250,
2916
+ pbn_oxsemi_2_3906250,
2917
+ pbn_oxsemi_4_3906250,
2918
+ pbn_oxsemi_8_3906250,
26652919 pbn_intel_i960,
26662920 pbn_sgi_ioc3,
26672921 pbn_computone_4,
....@@ -2684,12 +2938,28 @@
26842938 pbn_fintek_4,
26852939 pbn_fintek_8,
26862940 pbn_fintek_12,
2941
+ pbn_fintek_F81504A,
2942
+ pbn_fintek_F81508A,
2943
+ pbn_fintek_F81512A,
26872944 pbn_wch382_2,
26882945 pbn_wch384_4,
2946
+ pbn_wch384_8,
26892947 pbn_pericom_PI7C9X7951,
26902948 pbn_pericom_PI7C9X7952,
26912949 pbn_pericom_PI7C9X7954,
26922950 pbn_pericom_PI7C9X7958,
2951
+ pbn_sunix_pci_1s,
2952
+ pbn_sunix_pci_2s,
2953
+ pbn_sunix_pci_4s,
2954
+ pbn_sunix_pci_8s,
2955
+ pbn_sunix_pci_16s,
2956
+ pbn_titan_1_4000000,
2957
+ pbn_titan_2_4000000,
2958
+ pbn_titan_4_4000000,
2959
+ pbn_titan_8_4000000,
2960
+ pbn_moxa8250_2p,
2961
+ pbn_moxa8250_4p,
2962
+ pbn_moxa8250_8p,
26932963 };
26942964
26952965 /*
....@@ -2792,10 +3062,10 @@
27923062 .uart_offset = 8,
27933063 },
27943064
2795
- [pbn_b0_1_4000000] = {
3065
+ [pbn_b0_1_3906250] = {
27963066 .flags = FL_BASE0,
27973067 .num_ports = 1,
2798
- .base_baud = 4000000,
3068
+ .base_baud = 3906250,
27993069 .uart_offset = 8,
28003070 },
28013071
....@@ -3167,20 +3437,6 @@
31673437 },
31683438
31693439 /*
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
- /*
31843440 * This board uses the size of PCI Base region 0 to
31853441 * signal now many ports are available
31863442 */
....@@ -3190,31 +3446,31 @@
31903446 .base_baud = 115200,
31913447 .uart_offset = 8,
31923448 },
3193
- [pbn_oxsemi_1_4000000] = {
3449
+ [pbn_oxsemi_1_3906250] = {
31943450 .flags = FL_BASE0,
31953451 .num_ports = 1,
3196
- .base_baud = 4000000,
3452
+ .base_baud = 3906250,
31973453 .uart_offset = 0x200,
31983454 .first_offset = 0x1000,
31993455 },
3200
- [pbn_oxsemi_2_4000000] = {
3456
+ [pbn_oxsemi_2_3906250] = {
32013457 .flags = FL_BASE0,
32023458 .num_ports = 2,
3203
- .base_baud = 4000000,
3459
+ .base_baud = 3906250,
32043460 .uart_offset = 0x200,
32053461 .first_offset = 0x1000,
32063462 },
3207
- [pbn_oxsemi_4_4000000] = {
3463
+ [pbn_oxsemi_4_3906250] = {
32083464 .flags = FL_BASE0,
32093465 .num_ports = 4,
3210
- .base_baud = 4000000,
3466
+ .base_baud = 3906250,
32113467 .uart_offset = 0x200,
32123468 .first_offset = 0x1000,
32133469 },
3214
- [pbn_oxsemi_8_4000000] = {
3470
+ [pbn_oxsemi_8_3906250] = {
32153471 .flags = FL_BASE0,
32163472 .num_ports = 8,
3217
- .base_baud = 4000000,
3473
+ .base_baud = 3906250,
32183474 .uart_offset = 0x200,
32193475 .first_offset = 0x1000,
32203476 },
....@@ -3386,6 +3642,21 @@
33863642 .base_baud = 115200,
33873643 .first_offset = 0x40,
33883644 },
3645
+ [pbn_fintek_F81504A] = {
3646
+ .num_ports = 4,
3647
+ .uart_offset = 8,
3648
+ .base_baud = 115200,
3649
+ },
3650
+ [pbn_fintek_F81508A] = {
3651
+ .num_ports = 8,
3652
+ .uart_offset = 8,
3653
+ .base_baud = 115200,
3654
+ },
3655
+ [pbn_fintek_F81512A] = {
3656
+ .num_ports = 12,
3657
+ .uart_offset = 8,
3658
+ .base_baud = 115200,
3659
+ },
33893660 [pbn_wch382_2] = {
33903661 .flags = FL_BASE0,
33913662 .num_ports = 2,
....@@ -3399,6 +3670,13 @@
33993670 .base_baud = 115200,
34003671 .uart_offset = 8,
34013672 .first_offset = 0xC0,
3673
+ },
3674
+ [pbn_wch384_8] = {
3675
+ .flags = FL_BASE0,
3676
+ .num_ports = 8,
3677
+ .base_baud = 115200,
3678
+ .uart_offset = 8,
3679
+ .first_offset = 0x00,
34023680 },
34033681 /*
34043682 * Pericom PI7C9X795[1248] Uno/Dual/Quad/Octal UART
....@@ -3427,6 +3705,77 @@
34273705 .base_baud = 921600,
34283706 .uart_offset = 0x8,
34293707 },
3708
+ [pbn_sunix_pci_1s] = {
3709
+ .num_ports = 1,
3710
+ .base_baud = 921600,
3711
+ .uart_offset = 0x8,
3712
+ },
3713
+ [pbn_sunix_pci_2s] = {
3714
+ .num_ports = 2,
3715
+ .base_baud = 921600,
3716
+ .uart_offset = 0x8,
3717
+ },
3718
+ [pbn_sunix_pci_4s] = {
3719
+ .num_ports = 4,
3720
+ .base_baud = 921600,
3721
+ .uart_offset = 0x8,
3722
+ },
3723
+ [pbn_sunix_pci_8s] = {
3724
+ .num_ports = 8,
3725
+ .base_baud = 921600,
3726
+ .uart_offset = 0x8,
3727
+ },
3728
+ [pbn_sunix_pci_16s] = {
3729
+ .num_ports = 16,
3730
+ .base_baud = 921600,
3731
+ .uart_offset = 0x8,
3732
+ },
3733
+ [pbn_titan_1_4000000] = {
3734
+ .flags = FL_BASE0,
3735
+ .num_ports = 1,
3736
+ .base_baud = 4000000,
3737
+ .uart_offset = 0x200,
3738
+ .first_offset = 0x1000,
3739
+ },
3740
+ [pbn_titan_2_4000000] = {
3741
+ .flags = FL_BASE0,
3742
+ .num_ports = 2,
3743
+ .base_baud = 4000000,
3744
+ .uart_offset = 0x200,
3745
+ .first_offset = 0x1000,
3746
+ },
3747
+ [pbn_titan_4_4000000] = {
3748
+ .flags = FL_BASE0,
3749
+ .num_ports = 4,
3750
+ .base_baud = 4000000,
3751
+ .uart_offset = 0x200,
3752
+ .first_offset = 0x1000,
3753
+ },
3754
+ [pbn_titan_8_4000000] = {
3755
+ .flags = FL_BASE0,
3756
+ .num_ports = 8,
3757
+ .base_baud = 4000000,
3758
+ .uart_offset = 0x200,
3759
+ .first_offset = 0x1000,
3760
+ },
3761
+ [pbn_moxa8250_2p] = {
3762
+ .flags = FL_BASE1,
3763
+ .num_ports = 2,
3764
+ .base_baud = 921600,
3765
+ .uart_offset = 0x200,
3766
+ },
3767
+ [pbn_moxa8250_4p] = {
3768
+ .flags = FL_BASE1,
3769
+ .num_ports = 4,
3770
+ .base_baud = 921600,
3771
+ .uart_offset = 0x200,
3772
+ },
3773
+ [pbn_moxa8250_8p] = {
3774
+ .flags = FL_BASE1,
3775
+ .num_ports = 8,
3776
+ .base_baud = 921600,
3777
+ .uart_offset = 0x200,
3778
+ },
34303779 };
34313780
34323781 static const struct pci_device_id blacklist[] = {
....@@ -3439,20 +3788,6 @@
34393788 { PCI_DEVICE(0x4348, 0x7053), }, /* WCH CH353 2S1P */
34403789 { PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */
34413790 { 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), },
34563791
34573792 /* Intel platforms with MID UART */
34583793 { PCI_VDEVICE(INTEL, 0x081b), },
....@@ -3468,12 +3803,21 @@
34683803 { PCI_VDEVICE(INTEL, 0x0f0c), },
34693804 { PCI_VDEVICE(INTEL, 0x228a), },
34703805 { PCI_VDEVICE(INTEL, 0x228c), },
3806
+ { PCI_VDEVICE(INTEL, 0x4b96), },
3807
+ { PCI_VDEVICE(INTEL, 0x4b97), },
3808
+ { PCI_VDEVICE(INTEL, 0x4b98), },
3809
+ { PCI_VDEVICE(INTEL, 0x4b99), },
3810
+ { PCI_VDEVICE(INTEL, 0x4b9a), },
3811
+ { PCI_VDEVICE(INTEL, 0x4b9b), },
34713812 { PCI_VDEVICE(INTEL, 0x9ce3), },
34723813 { PCI_VDEVICE(INTEL, 0x9ce4), },
34733814
34743815 /* Exar devices */
34753816 { PCI_VDEVICE(EXAR, PCI_ANY_ID), },
34763817 { PCI_VDEVICE(COMMTECH, PCI_ANY_ID), },
3818
+
3819
+ /* End of the black list */
3820
+ { }
34773821 };
34783822
34793823 static int serial_pci_is_class_communication(struct pci_dev *dev)
....@@ -3487,25 +3831,6 @@
34873831 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
34883832 (dev->class & 0xff) > 6)
34893833 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
- }
35093834
35103835 return 0;
35113836 }
....@@ -3532,7 +3857,7 @@
35323857 return -ENODEV;
35333858
35343859 num_iomem = num_port = 0;
3535
- for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
3860
+ for (i = 0; i < PCI_STD_NUM_BARS; i++) {
35363861 if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
35373862 num_port++;
35383863 if (first_port == -1)
....@@ -3560,7 +3885,7 @@
35603885 */
35613886 first_port = -1;
35623887 num_port = 0;
3563
- for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
3888
+ for (i = 0; i < PCI_STD_NUM_BARS; i++) {
35643889 if (pci_resource_flags(dev, i) & IORESOURCE_IO &&
35653890 pci_resource_len(dev, i) == 8 &&
35663891 (first_port == -1 || (first_port + num_port) == i)) {
....@@ -3637,19 +3962,40 @@
36373962 memset(&uart, 0, sizeof(uart));
36383963 uart.port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
36393964 uart.port.uartclk = board->base_baud * 16;
3640
- uart.port.irq = get_pci_irq(dev, board);
3965
+
3966
+ if (board->flags & FL_NOIRQ) {
3967
+ uart.port.irq = 0;
3968
+ } else {
3969
+ if (pci_match_id(pci_use_msi, dev)) {
3970
+ pci_dbg(dev, "Using MSI(-X) interrupts\n");
3971
+ pci_set_master(dev);
3972
+ uart.port.flags &= ~UPF_SHARE_IRQ;
3973
+ rc = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_ALL_TYPES);
3974
+ } else {
3975
+ pci_dbg(dev, "Using legacy interrupts\n");
3976
+ rc = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_LEGACY);
3977
+ }
3978
+ if (rc < 0) {
3979
+ kfree(priv);
3980
+ priv = ERR_PTR(rc);
3981
+ goto err_deinit;
3982
+ }
3983
+
3984
+ uart.port.irq = pci_irq_vector(dev, 0);
3985
+ }
3986
+
36413987 uart.port.dev = &dev->dev;
36423988
36433989 for (i = 0; i < nr_ports; i++) {
36443990 if (quirk->setup(priv, board, &uart, i))
36453991 break;
36463992
3647
- dev_dbg(&dev->dev, "Setup PCI port: port %lx, irq %d, type %d\n",
3993
+ pci_dbg(dev, "Setup PCI port: port %lx, irq %d, type %d\n",
36483994 uart.port.iobase, uart.port.irq, uart.port.iotype);
36493995
36503996 priv->line[i] = serial8250_register_8250_port(&uart);
36513997 if (priv->line[i] < 0) {
3652
- dev_err(&dev->dev,
3998
+ pci_err(dev,
36533999 "Couldn't register serial port %lx, irq %d, type %d, error %d\n",
36544000 uart.port.iobase, uart.port.irq,
36554001 uart.port.iotype, priv->line[i]);
....@@ -3733,6 +4079,7 @@
37334079 struct pci_serial_quirk *quirk;
37344080 struct serial_private *priv;
37354081 const struct pciserial_board *board;
4082
+ const struct pci_device_id *exclude;
37364083 struct pciserial_board tmp;
37374084 int rc;
37384085
....@@ -3744,16 +4091,15 @@
37444091 }
37454092
37464093 if (ent->driver_data >= ARRAY_SIZE(pci_boards)) {
3747
- dev_err(&dev->dev, "invalid driver_data: %ld\n",
3748
- ent->driver_data);
4094
+ pci_err(dev, "invalid driver_data: %ld\n", ent->driver_data);
37494095 return -EINVAL;
37504096 }
37514097
37524098 board = &pci_boards[ent->driver_data];
37534099
3754
- rc = serial_pci_is_blacklisted(dev);
3755
- if (rc)
3756
- return rc;
4100
+ exclude = pci_match_id(blacklist, dev);
4101
+ if (exclude)
4102
+ return -ENODEV;
37574103
37584104 rc = pcim_enable_device(dev);
37594105 pci_save_state(dev);
....@@ -3807,8 +4153,7 @@
38074153 #ifdef CONFIG_PM_SLEEP
38084154 static int pciserial_suspend_one(struct device *dev)
38094155 {
3810
- struct pci_dev *pdev = to_pci_dev(dev);
3811
- struct serial_private *priv = pci_get_drvdata(pdev);
4156
+ struct serial_private *priv = dev_get_drvdata(dev);
38124157
38134158 if (priv)
38144159 pciserial_suspend_ports(priv);
....@@ -3829,7 +4174,7 @@
38294174 err = pci_enable_device(pdev);
38304175 /* FIXME: We cannot simply error out here */
38314176 if (err)
3832
- dev_err(dev, "Unable to re-enable ports, trying to continue.\n");
4177
+ pci_err(pdev, "Unable to re-enable ports, trying to continue.\n");
38334178 pciserial_resume_ports(priv);
38344179 }
38354180 return 0;
....@@ -4023,13 +4368,6 @@
40234368 0x10b5, 0x106a, 0, 0,
40244369 pbn_plx_romulus },
40254370 /*
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
- /*
40334371 * Quatech cards. These actually have configurable clocks but for
40344372 * now we just use the default.
40354373 *
....@@ -4138,158 +4476,165 @@
41384476 */
41394477 { PCI_VENDOR_ID_OXSEMI, 0xc101, /* OXPCIe952 1 Legacy UART */
41404478 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4141
- pbn_b0_1_4000000 },
4479
+ pbn_b0_1_3906250 },
41424480 { PCI_VENDOR_ID_OXSEMI, 0xc105, /* OXPCIe952 1 Legacy UART */
41434481 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4144
- pbn_b0_1_4000000 },
4482
+ pbn_b0_1_3906250 },
41454483 { PCI_VENDOR_ID_OXSEMI, 0xc11b, /* OXPCIe952 1 Native UART */
41464484 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4147
- pbn_oxsemi_1_4000000 },
4485
+ pbn_oxsemi_1_3906250 },
41484486 { PCI_VENDOR_ID_OXSEMI, 0xc11f, /* OXPCIe952 1 Native UART */
41494487 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4150
- pbn_oxsemi_1_4000000 },
4488
+ pbn_oxsemi_1_3906250 },
41514489 { PCI_VENDOR_ID_OXSEMI, 0xc120, /* OXPCIe952 1 Legacy UART */
41524490 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4153
- pbn_b0_1_4000000 },
4491
+ pbn_b0_1_3906250 },
41544492 { PCI_VENDOR_ID_OXSEMI, 0xc124, /* OXPCIe952 1 Legacy UART */
41554493 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4156
- pbn_b0_1_4000000 },
4494
+ pbn_b0_1_3906250 },
41574495 { PCI_VENDOR_ID_OXSEMI, 0xc138, /* OXPCIe952 1 Native UART */
41584496 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4159
- pbn_oxsemi_1_4000000 },
4497
+ pbn_oxsemi_1_3906250 },
41604498 { PCI_VENDOR_ID_OXSEMI, 0xc13d, /* OXPCIe952 1 Native UART */
41614499 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4162
- pbn_oxsemi_1_4000000 },
4500
+ pbn_oxsemi_1_3906250 },
41634501 { PCI_VENDOR_ID_OXSEMI, 0xc140, /* OXPCIe952 1 Legacy UART */
41644502 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4165
- pbn_b0_1_4000000 },
4503
+ pbn_b0_1_3906250 },
41664504 { PCI_VENDOR_ID_OXSEMI, 0xc141, /* OXPCIe952 1 Legacy UART */
41674505 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4168
- pbn_b0_1_4000000 },
4506
+ pbn_b0_1_3906250 },
41694507 { PCI_VENDOR_ID_OXSEMI, 0xc144, /* OXPCIe952 1 Legacy UART */
41704508 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4171
- pbn_b0_1_4000000 },
4509
+ pbn_b0_1_3906250 },
41724510 { PCI_VENDOR_ID_OXSEMI, 0xc145, /* OXPCIe952 1 Legacy UART */
41734511 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4174
- pbn_b0_1_4000000 },
4512
+ pbn_b0_1_3906250 },
41754513 { PCI_VENDOR_ID_OXSEMI, 0xc158, /* OXPCIe952 2 Native UART */
41764514 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4177
- pbn_oxsemi_2_4000000 },
4515
+ pbn_oxsemi_2_3906250 },
41784516 { PCI_VENDOR_ID_OXSEMI, 0xc15d, /* OXPCIe952 2 Native UART */
41794517 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4180
- pbn_oxsemi_2_4000000 },
4518
+ pbn_oxsemi_2_3906250 },
41814519 { PCI_VENDOR_ID_OXSEMI, 0xc208, /* OXPCIe954 4 Native UART */
41824520 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4183
- pbn_oxsemi_4_4000000 },
4521
+ pbn_oxsemi_4_3906250 },
41844522 { PCI_VENDOR_ID_OXSEMI, 0xc20d, /* OXPCIe954 4 Native UART */
41854523 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4186
- pbn_oxsemi_4_4000000 },
4524
+ pbn_oxsemi_4_3906250 },
41874525 { PCI_VENDOR_ID_OXSEMI, 0xc308, /* OXPCIe958 8 Native UART */
41884526 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4189
- pbn_oxsemi_8_4000000 },
4527
+ pbn_oxsemi_8_3906250 },
41904528 { PCI_VENDOR_ID_OXSEMI, 0xc30d, /* OXPCIe958 8 Native UART */
41914529 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4192
- pbn_oxsemi_8_4000000 },
4530
+ pbn_oxsemi_8_3906250 },
41934531 { PCI_VENDOR_ID_OXSEMI, 0xc40b, /* OXPCIe200 1 Native UART */
41944532 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4195
- pbn_oxsemi_1_4000000 },
4533
+ pbn_oxsemi_1_3906250 },
41964534 { PCI_VENDOR_ID_OXSEMI, 0xc40f, /* OXPCIe200 1 Native UART */
41974535 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4198
- pbn_oxsemi_1_4000000 },
4536
+ pbn_oxsemi_1_3906250 },
41994537 { PCI_VENDOR_ID_OXSEMI, 0xc41b, /* OXPCIe200 1 Native UART */
42004538 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4201
- pbn_oxsemi_1_4000000 },
4539
+ pbn_oxsemi_1_3906250 },
42024540 { PCI_VENDOR_ID_OXSEMI, 0xc41f, /* OXPCIe200 1 Native UART */
42034541 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4204
- pbn_oxsemi_1_4000000 },
4542
+ pbn_oxsemi_1_3906250 },
42054543 { PCI_VENDOR_ID_OXSEMI, 0xc42b, /* OXPCIe200 1 Native UART */
42064544 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4207
- pbn_oxsemi_1_4000000 },
4545
+ pbn_oxsemi_1_3906250 },
42084546 { PCI_VENDOR_ID_OXSEMI, 0xc42f, /* OXPCIe200 1 Native UART */
42094547 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4210
- pbn_oxsemi_1_4000000 },
4548
+ pbn_oxsemi_1_3906250 },
42114549 { PCI_VENDOR_ID_OXSEMI, 0xc43b, /* OXPCIe200 1 Native UART */
42124550 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4213
- pbn_oxsemi_1_4000000 },
4551
+ pbn_oxsemi_1_3906250 },
42144552 { PCI_VENDOR_ID_OXSEMI, 0xc43f, /* OXPCIe200 1 Native UART */
42154553 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4216
- pbn_oxsemi_1_4000000 },
4554
+ pbn_oxsemi_1_3906250 },
42174555 { PCI_VENDOR_ID_OXSEMI, 0xc44b, /* OXPCIe200 1 Native UART */
42184556 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4219
- pbn_oxsemi_1_4000000 },
4557
+ pbn_oxsemi_1_3906250 },
42204558 { PCI_VENDOR_ID_OXSEMI, 0xc44f, /* OXPCIe200 1 Native UART */
42214559 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4222
- pbn_oxsemi_1_4000000 },
4560
+ pbn_oxsemi_1_3906250 },
42234561 { PCI_VENDOR_ID_OXSEMI, 0xc45b, /* OXPCIe200 1 Native UART */
42244562 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4225
- pbn_oxsemi_1_4000000 },
4563
+ pbn_oxsemi_1_3906250 },
42264564 { PCI_VENDOR_ID_OXSEMI, 0xc45f, /* OXPCIe200 1 Native UART */
42274565 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4228
- pbn_oxsemi_1_4000000 },
4566
+ pbn_oxsemi_1_3906250 },
42294567 { PCI_VENDOR_ID_OXSEMI, 0xc46b, /* OXPCIe200 1 Native UART */
42304568 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4231
- pbn_oxsemi_1_4000000 },
4569
+ pbn_oxsemi_1_3906250 },
42324570 { PCI_VENDOR_ID_OXSEMI, 0xc46f, /* OXPCIe200 1 Native UART */
42334571 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4234
- pbn_oxsemi_1_4000000 },
4572
+ pbn_oxsemi_1_3906250 },
42354573 { PCI_VENDOR_ID_OXSEMI, 0xc47b, /* OXPCIe200 1 Native UART */
42364574 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4237
- pbn_oxsemi_1_4000000 },
4575
+ pbn_oxsemi_1_3906250 },
42384576 { PCI_VENDOR_ID_OXSEMI, 0xc47f, /* OXPCIe200 1 Native UART */
42394577 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4240
- pbn_oxsemi_1_4000000 },
4578
+ pbn_oxsemi_1_3906250 },
42414579 { PCI_VENDOR_ID_OXSEMI, 0xc48b, /* OXPCIe200 1 Native UART */
42424580 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4243
- pbn_oxsemi_1_4000000 },
4581
+ pbn_oxsemi_1_3906250 },
42444582 { PCI_VENDOR_ID_OXSEMI, 0xc48f, /* OXPCIe200 1 Native UART */
42454583 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4246
- pbn_oxsemi_1_4000000 },
4584
+ pbn_oxsemi_1_3906250 },
42474585 { PCI_VENDOR_ID_OXSEMI, 0xc49b, /* OXPCIe200 1 Native UART */
42484586 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4249
- pbn_oxsemi_1_4000000 },
4587
+ pbn_oxsemi_1_3906250 },
42504588 { PCI_VENDOR_ID_OXSEMI, 0xc49f, /* OXPCIe200 1 Native UART */
42514589 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4252
- pbn_oxsemi_1_4000000 },
4590
+ pbn_oxsemi_1_3906250 },
42534591 { PCI_VENDOR_ID_OXSEMI, 0xc4ab, /* OXPCIe200 1 Native UART */
42544592 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4255
- pbn_oxsemi_1_4000000 },
4593
+ pbn_oxsemi_1_3906250 },
42564594 { PCI_VENDOR_ID_OXSEMI, 0xc4af, /* OXPCIe200 1 Native UART */
42574595 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4258
- pbn_oxsemi_1_4000000 },
4596
+ pbn_oxsemi_1_3906250 },
42594597 { PCI_VENDOR_ID_OXSEMI, 0xc4bb, /* OXPCIe200 1 Native UART */
42604598 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4261
- pbn_oxsemi_1_4000000 },
4599
+ pbn_oxsemi_1_3906250 },
42624600 { PCI_VENDOR_ID_OXSEMI, 0xc4bf, /* OXPCIe200 1 Native UART */
42634601 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4264
- pbn_oxsemi_1_4000000 },
4602
+ pbn_oxsemi_1_3906250 },
42654603 { PCI_VENDOR_ID_OXSEMI, 0xc4cb, /* OXPCIe200 1 Native UART */
42664604 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4267
- pbn_oxsemi_1_4000000 },
4605
+ pbn_oxsemi_1_3906250 },
42684606 { PCI_VENDOR_ID_OXSEMI, 0xc4cf, /* OXPCIe200 1 Native UART */
42694607 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4270
- pbn_oxsemi_1_4000000 },
4608
+ pbn_oxsemi_1_3906250 },
42714609 /*
42724610 * Mainpine Inc. IQ Express "Rev3" utilizing OxSemi Tornado
42734611 */
42744612 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 1 Port V.34 Super-G3 Fax */
42754613 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
4276
- pbn_oxsemi_1_4000000 },
4614
+ pbn_oxsemi_1_3906250 },
42774615 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 2 Port V.34 Super-G3 Fax */
42784616 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
4279
- pbn_oxsemi_2_4000000 },
4617
+ pbn_oxsemi_2_3906250 },
42804618 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 4 Port V.34 Super-G3 Fax */
42814619 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
4282
- pbn_oxsemi_4_4000000 },
4620
+ pbn_oxsemi_4_3906250 },
42834621 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 8 Port V.34 Super-G3 Fax */
42844622 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
4285
- pbn_oxsemi_8_4000000 },
4623
+ pbn_oxsemi_8_3906250 },
42864624
42874625 /*
42884626 * Digi/IBM PCIe 2-port Async EIA-232 Adapter utilizing OxSemi Tornado
42894627 */
42904628 { PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_2_OX_IBM,
42914629 PCI_SUBVENDOR_ID_IBM, PCI_ANY_ID, 0, 0,
4292
- pbn_oxsemi_2_4000000 },
4630
+ pbn_oxsemi_2_3906250 },
4631
+ /*
4632
+ * EndRun Technologies. PCI express device range.
4633
+ * EndRun PTP/1588 has 2 Native UARTs utilizing OxSemi 952.
4634
+ */
4635
+ { PCI_VENDOR_ID_ENDRUN, PCI_DEVICE_ID_ENDRUN_1588,
4636
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4637
+ pbn_oxsemi_2_3906250 },
42934638
42944639 /*
42954640 * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards,
....@@ -4363,22 +4708,22 @@
43634708 pbn_b0_4_921600 },
43644709 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100E,
43654710 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4366
- pbn_oxsemi_1_4000000 },
4711
+ pbn_titan_1_4000000 },
43674712 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200E,
43684713 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4369
- pbn_oxsemi_2_4000000 },
4714
+ pbn_titan_2_4000000 },
43704715 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400E,
43714716 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4372
- pbn_oxsemi_4_4000000 },
4717
+ pbn_titan_4_4000000 },
43734718 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800E,
43744719 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4375
- pbn_oxsemi_8_4000000 },
4720
+ pbn_titan_8_4000000 },
43764721 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EI,
43774722 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4378
- pbn_oxsemi_2_4000000 },
4723
+ pbn_titan_2_4000000 },
43794724 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EISI,
43804725 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
4381
- pbn_oxsemi_2_4000000 },
4726
+ pbn_titan_2_4000000 },
43824727 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200V3,
43834728 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
43844729 pbn_b0_bt_2_921600 },
....@@ -4480,17 +4825,29 @@
44804825 pbn_b0_bt_1_921600 },
44814826
44824827 /*
4483
- * SUNIX (TIMEDIA)
4828
+ * Sunix PCI serial boards
44844829 */
44854830 { 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
-
4831
+ PCI_VENDOR_ID_SUNIX, 0x0001, 0, 0,
4832
+ pbn_sunix_pci_1s },
44904833 { 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 },
4834
+ PCI_VENDOR_ID_SUNIX, 0x0002, 0, 0,
4835
+ pbn_sunix_pci_2s },
4836
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4837
+ PCI_VENDOR_ID_SUNIX, 0x0004, 0, 0,
4838
+ pbn_sunix_pci_4s },
4839
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4840
+ PCI_VENDOR_ID_SUNIX, 0x0084, 0, 0,
4841
+ pbn_sunix_pci_4s },
4842
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4843
+ PCI_VENDOR_ID_SUNIX, 0x0008, 0, 0,
4844
+ pbn_sunix_pci_8s },
4845
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4846
+ PCI_VENDOR_ID_SUNIX, 0x0088, 0, 0,
4847
+ pbn_sunix_pci_8s },
4848
+ { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
4849
+ PCI_VENDOR_ID_SUNIX, 0x0010, 0, 0,
4850
+ pbn_sunix_pci_16s },
44944851
44954852 /*
44964853 * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org>
....@@ -4640,6 +4997,10 @@
46404997 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
46414998 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
46424999 pbn_b2_1_115200 },
5000
+ /* HPE PCI serial device */
5001
+ { PCI_VENDOR_ID_HP_3PAR, PCI_DEVICE_ID_HPE_PCI_SERIAL,
5002
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5003
+ pbn_b1_1_115200 },
46435004
46445005 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2,
46455006 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
....@@ -5110,6 +5471,46 @@
51105471 pbn_ni8430_4 },
51115472
51125473 /*
5474
+ * MOXA
5475
+ */
5476
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102E,
5477
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5478
+ pbn_moxa8250_2p },
5479
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102EL,
5480
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5481
+ pbn_moxa8250_2p },
5482
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP104EL_A,
5483
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5484
+ pbn_moxa8250_4p },
5485
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP114EL,
5486
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5487
+ pbn_moxa8250_4p },
5488
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_A,
5489
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5490
+ pbn_moxa8250_8p },
5491
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_B,
5492
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5493
+ pbn_moxa8250_8p },
5494
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP118EL_A,
5495
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5496
+ pbn_moxa8250_8p },
5497
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP118E_A_I,
5498
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5499
+ pbn_moxa8250_8p },
5500
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP132EL,
5501
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5502
+ pbn_moxa8250_2p },
5503
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP134EL_A,
5504
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5505
+ pbn_moxa8250_4p },
5506
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP138E_A,
5507
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5508
+ pbn_moxa8250_8p },
5509
+ { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP168EL_A,
5510
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5511
+ pbn_moxa8250_8p },
5512
+
5513
+ /*
51135514 * ADDI-DATA GmbH communication cards <info@addi-data.com>
51145515 */
51155516 { PCI_VENDOR_ID_ADDIDATA,
....@@ -5332,6 +5733,9 @@
53325733 PCI_ANY_ID, PCI_ANY_ID,
53335734 0, 0, pbn_wch384_4 },
53345735
5736
+ { PCIE_VENDOR_ID_WCH, PCIE_DEVICE_ID_WCH_CH384_8S,
5737
+ PCI_ANY_ID, PCI_ANY_ID,
5738
+ 0, 0, pbn_wch384_8 },
53355739 /*
53365740 * Realtek RealManage
53375741 */
....@@ -5347,6 +5751,9 @@
53475751 { PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 },
53485752 { PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 },
53495753 { PCI_DEVICE(0x1c29, 0x1112), .driver_data = pbn_fintek_12 },
5754
+ { PCI_DEVICE(0x1c29, 0x1204), .driver_data = pbn_fintek_F81504A },
5755
+ { PCI_DEVICE(0x1c29, 0x1208), .driver_data = pbn_fintek_F81508A },
5756
+ { PCI_DEVICE(0x1c29, 0x1212), .driver_data = pbn_fintek_F81512A },
53505757
53515758 /* MKS Tenta SCOM-080x serial cards */
53525759 { PCI_DEVICE(0x1601, 0x0800), .driver_data = pbn_b0_4_1250000 },