8250_pci.c (148066B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Probe module for 8250/16550-type PCI serial ports. 4 * 5 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o. 6 * 7 * Copyright (C) 2001 Russell King, All Rights Reserved. 8 */ 9#undef DEBUG 10#include <linux/module.h> 11#include <linux/pci.h> 12#include <linux/string.h> 13#include <linux/kernel.h> 14#include <linux/math.h> 15#include <linux/slab.h> 16#include <linux/delay.h> 17#include <linux/tty.h> 18#include <linux/serial_reg.h> 19#include <linux/serial_core.h> 20#include <linux/8250_pci.h> 21#include <linux/bitops.h> 22 23#include <asm/byteorder.h> 24#include <asm/io.h> 25 26#include "8250.h" 27 28/* 29 * init function returns: 30 * > 0 - number of ports 31 * = 0 - use board->num_ports 32 * < 0 - error 33 */ 34struct pci_serial_quirk { 35 u32 vendor; 36 u32 device; 37 u32 subvendor; 38 u32 subdevice; 39 int (*probe)(struct pci_dev *dev); 40 int (*init)(struct pci_dev *dev); 41 int (*setup)(struct serial_private *, 42 const struct pciserial_board *, 43 struct uart_8250_port *, int); 44 void (*exit)(struct pci_dev *dev); 45}; 46 47struct f815xxa_data { 48 spinlock_t lock; 49 int idx; 50}; 51 52struct serial_private { 53 struct pci_dev *dev; 54 unsigned int nr; 55 struct pci_serial_quirk *quirk; 56 const struct pciserial_board *board; 57 int line[]; 58}; 59 60#define PCI_DEVICE_ID_HPE_PCI_SERIAL 0x37e 61 62static const struct pci_device_id pci_use_msi[] = { 63 { PCI_DEVICE_SUB(PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900, 64 0xA000, 0x1000) }, 65 { PCI_DEVICE_SUB(PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9912, 66 0xA000, 0x1000) }, 67 { PCI_DEVICE_SUB(PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9922, 68 0xA000, 0x1000) }, 69 { PCI_DEVICE_SUB(PCI_VENDOR_ID_HP_3PAR, PCI_DEVICE_ID_HPE_PCI_SERIAL, 70 PCI_ANY_ID, PCI_ANY_ID) }, 71 { } 72}; 73 74static int pci_default_setup(struct serial_private*, 75 const struct pciserial_board*, struct uart_8250_port *, int); 76 77static void moan_device(const char *str, struct pci_dev *dev) 78{ 79 pci_err(dev, "%s\n" 80 "Please send the output of lspci -vv, this\n" 81 "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n" 82 "manufacturer and name of serial board or\n" 83 "modem board to <linux-serial@vger.kernel.org>.\n", 84 str, dev->vendor, dev->device, 85 dev->subsystem_vendor, dev->subsystem_device); 86} 87 88static int 89setup_port(struct serial_private *priv, struct uart_8250_port *port, 90 u8 bar, unsigned int offset, int regshift) 91{ 92 struct pci_dev *dev = priv->dev; 93 94 if (bar >= PCI_STD_NUM_BARS) 95 return -EINVAL; 96 97 if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) { 98 if (!pcim_iomap(dev, bar, 0) && !pcim_iomap_table(dev)) 99 return -ENOMEM; 100 101 port->port.iotype = UPIO_MEM; 102 port->port.iobase = 0; 103 port->port.mapbase = pci_resource_start(dev, bar) + offset; 104 port->port.membase = pcim_iomap_table(dev)[bar] + offset; 105 port->port.regshift = regshift; 106 } else { 107 port->port.iotype = UPIO_PORT; 108 port->port.iobase = pci_resource_start(dev, bar) + offset; 109 port->port.mapbase = 0; 110 port->port.membase = NULL; 111 port->port.regshift = 0; 112 } 113 return 0; 114} 115 116/* 117 * ADDI-DATA GmbH communication cards <info@addi-data.com> 118 */ 119static int addidata_apci7800_setup(struct serial_private *priv, 120 const struct pciserial_board *board, 121 struct uart_8250_port *port, int idx) 122{ 123 unsigned int bar = 0, offset = board->first_offset; 124 bar = FL_GET_BASE(board->flags); 125 126 if (idx < 2) { 127 offset += idx * board->uart_offset; 128 } else if ((idx >= 2) && (idx < 4)) { 129 bar += 1; 130 offset += ((idx - 2) * board->uart_offset); 131 } else if ((idx >= 4) && (idx < 6)) { 132 bar += 2; 133 offset += ((idx - 4) * board->uart_offset); 134 } else if (idx >= 6) { 135 bar += 3; 136 offset += ((idx - 6) * board->uart_offset); 137 } 138 139 return setup_port(priv, port, bar, offset, board->reg_shift); 140} 141 142/* 143 * AFAVLAB uses a different mixture of BARs and offsets 144 * Not that ugly ;) -- HW 145 */ 146static int 147afavlab_setup(struct serial_private *priv, const struct pciserial_board *board, 148 struct uart_8250_port *port, int idx) 149{ 150 unsigned int bar, offset = board->first_offset; 151 152 bar = FL_GET_BASE(board->flags); 153 if (idx < 4) 154 bar += idx; 155 else { 156 bar = 4; 157 offset += (idx - 4) * board->uart_offset; 158 } 159 160 return setup_port(priv, port, bar, offset, board->reg_shift); 161} 162 163/* 164 * HP's Remote Management Console. The Diva chip came in several 165 * different versions. N-class, L2000 and A500 have two Diva chips, each 166 * with 3 UARTs (the third UART on the second chip is unused). Superdome 167 * and Keystone have one Diva chip with 3 UARTs. Some later machines have 168 * one Diva chip, but it has been expanded to 5 UARTs. 169 */ 170static int pci_hp_diva_init(struct pci_dev *dev) 171{ 172 int rc = 0; 173 174 switch (dev->subsystem_device) { 175 case PCI_DEVICE_ID_HP_DIVA_TOSCA1: 176 case PCI_DEVICE_ID_HP_DIVA_HALFDOME: 177 case PCI_DEVICE_ID_HP_DIVA_KEYSTONE: 178 case PCI_DEVICE_ID_HP_DIVA_EVEREST: 179 rc = 3; 180 break; 181 case PCI_DEVICE_ID_HP_DIVA_TOSCA2: 182 rc = 2; 183 break; 184 case PCI_DEVICE_ID_HP_DIVA_MAESTRO: 185 rc = 4; 186 break; 187 case PCI_DEVICE_ID_HP_DIVA_POWERBAR: 188 case PCI_DEVICE_ID_HP_DIVA_HURRICANE: 189 rc = 1; 190 break; 191 } 192 193 return rc; 194} 195 196/* 197 * HP's Diva chip puts the 4th/5th serial port further out, and 198 * some serial ports are supposed to be hidden on certain models. 199 */ 200static int 201pci_hp_diva_setup(struct serial_private *priv, 202 const struct pciserial_board *board, 203 struct uart_8250_port *port, int idx) 204{ 205 unsigned int offset = board->first_offset; 206 unsigned int bar = FL_GET_BASE(board->flags); 207 208 switch (priv->dev->subsystem_device) { 209 case PCI_DEVICE_ID_HP_DIVA_MAESTRO: 210 if (idx == 3) 211 idx++; 212 break; 213 case PCI_DEVICE_ID_HP_DIVA_EVEREST: 214 if (idx > 0) 215 idx++; 216 if (idx > 2) 217 idx++; 218 break; 219 } 220 if (idx > 2) 221 offset = 0x18; 222 223 offset += idx * board->uart_offset; 224 225 return setup_port(priv, port, bar, offset, board->reg_shift); 226} 227 228/* 229 * Added for EKF Intel i960 serial boards 230 */ 231static int pci_inteli960ni_init(struct pci_dev *dev) 232{ 233 u32 oldval; 234 235 if (!(dev->subsystem_device & 0x1000)) 236 return -ENODEV; 237 238 /* is firmware started? */ 239 pci_read_config_dword(dev, 0x44, &oldval); 240 if (oldval == 0x00001000L) { /* RESET value */ 241 pci_dbg(dev, "Local i960 firmware missing\n"); 242 return -ENODEV; 243 } 244 return 0; 245} 246 247/* 248 * Some PCI serial cards using the PLX 9050 PCI interface chip require 249 * that the card interrupt be explicitly enabled or disabled. This 250 * seems to be mainly needed on card using the PLX which also use I/O 251 * mapped memory. 252 */ 253static int pci_plx9050_init(struct pci_dev *dev) 254{ 255 u8 irq_config; 256 void __iomem *p; 257 258 if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0) { 259 moan_device("no memory in bar 0", dev); 260 return 0; 261 } 262 263 irq_config = 0x41; 264 if (dev->vendor == PCI_VENDOR_ID_PANACOM || 265 dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS) 266 irq_config = 0x43; 267 268 if ((dev->vendor == PCI_VENDOR_ID_PLX) && 269 (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) 270 /* 271 * As the megawolf cards have the int pins active 272 * high, and have 2 UART chips, both ints must be 273 * enabled on the 9050. Also, the UARTS are set in 274 * 16450 mode by default, so we have to enable the 275 * 16C950 'enhanced' mode so that we can use the 276 * deep FIFOs 277 */ 278 irq_config = 0x5b; 279 /* 280 * enable/disable interrupts 281 */ 282 p = ioremap(pci_resource_start(dev, 0), 0x80); 283 if (p == NULL) 284 return -ENOMEM; 285 writel(irq_config, p + 0x4c); 286 287 /* 288 * Read the register back to ensure that it took effect. 289 */ 290 readl(p + 0x4c); 291 iounmap(p); 292 293 return 0; 294} 295 296static void pci_plx9050_exit(struct pci_dev *dev) 297{ 298 u8 __iomem *p; 299 300 if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0) 301 return; 302 303 /* 304 * disable interrupts 305 */ 306 p = ioremap(pci_resource_start(dev, 0), 0x80); 307 if (p != NULL) { 308 writel(0, p + 0x4c); 309 310 /* 311 * Read the register back to ensure that it took effect. 312 */ 313 readl(p + 0x4c); 314 iounmap(p); 315 } 316} 317 318#define NI8420_INT_ENABLE_REG 0x38 319#define NI8420_INT_ENABLE_BIT 0x2000 320 321static void pci_ni8420_exit(struct pci_dev *dev) 322{ 323 void __iomem *p; 324 unsigned int bar = 0; 325 326 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) { 327 moan_device("no memory in bar", dev); 328 return; 329 } 330 331 p = pci_ioremap_bar(dev, bar); 332 if (p == NULL) 333 return; 334 335 /* Disable the CPU Interrupt */ 336 writel(readl(p + NI8420_INT_ENABLE_REG) & ~(NI8420_INT_ENABLE_BIT), 337 p + NI8420_INT_ENABLE_REG); 338 iounmap(p); 339} 340 341 342/* MITE registers */ 343#define MITE_IOWBSR1 0xc4 344#define MITE_IOWCR1 0xf4 345#define MITE_LCIMR1 0x08 346#define MITE_LCIMR2 0x10 347 348#define MITE_LCIMR2_CLR_CPU_IE (1 << 30) 349 350static void pci_ni8430_exit(struct pci_dev *dev) 351{ 352 void __iomem *p; 353 unsigned int bar = 0; 354 355 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) { 356 moan_device("no memory in bar", dev); 357 return; 358 } 359 360 p = pci_ioremap_bar(dev, bar); 361 if (p == NULL) 362 return; 363 364 /* Disable the CPU Interrupt */ 365 writel(MITE_LCIMR2_CLR_CPU_IE, p + MITE_LCIMR2); 366 iounmap(p); 367} 368 369/* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */ 370static int 371sbs_setup(struct serial_private *priv, const struct pciserial_board *board, 372 struct uart_8250_port *port, int idx) 373{ 374 unsigned int bar, offset = board->first_offset; 375 376 bar = 0; 377 378 if (idx < 4) { 379 /* first four channels map to 0, 0x100, 0x200, 0x300 */ 380 offset += idx * board->uart_offset; 381 } else if (idx < 8) { 382 /* last four channels map to 0x1000, 0x1100, 0x1200, 0x1300 */ 383 offset += idx * board->uart_offset + 0xC00; 384 } else /* we have only 8 ports on PMC-OCTALPRO */ 385 return 1; 386 387 return setup_port(priv, port, bar, offset, board->reg_shift); 388} 389 390/* 391* This does initialization for PMC OCTALPRO cards: 392* maps the device memory, resets the UARTs (needed, bc 393* if the module is removed and inserted again, the card 394* is in the sleep mode) and enables global interrupt. 395*/ 396 397/* global control register offset for SBS PMC-OctalPro */ 398#define OCT_REG_CR_OFF 0x500 399 400static int sbs_init(struct pci_dev *dev) 401{ 402 u8 __iomem *p; 403 404 p = pci_ioremap_bar(dev, 0); 405 406 if (p == NULL) 407 return -ENOMEM; 408 /* Set bit-4 Control Register (UART RESET) in to reset the uarts */ 409 writeb(0x10, p + OCT_REG_CR_OFF); 410 udelay(50); 411 writeb(0x0, p + OCT_REG_CR_OFF); 412 413 /* Set bit-2 (INTENABLE) of Control Register */ 414 writeb(0x4, p + OCT_REG_CR_OFF); 415 iounmap(p); 416 417 return 0; 418} 419 420/* 421 * Disables the global interrupt of PMC-OctalPro 422 */ 423 424static void sbs_exit(struct pci_dev *dev) 425{ 426 u8 __iomem *p; 427 428 p = pci_ioremap_bar(dev, 0); 429 /* FIXME: What if resource_len < OCT_REG_CR_OFF */ 430 if (p != NULL) 431 writeb(0, p + OCT_REG_CR_OFF); 432 iounmap(p); 433} 434 435/* 436 * SIIG serial cards have an PCI interface chip which also controls 437 * the UART clocking frequency. Each UART can be clocked independently 438 * (except cards equipped with 4 UARTs) and initial clocking settings 439 * are stored in the EEPROM chip. It can cause problems because this 440 * version of serial driver doesn't support differently clocked UART's 441 * on single PCI card. To prevent this, initialization functions set 442 * high frequency clocking for all UART's on given card. It is safe (I 443 * hope) because it doesn't touch EEPROM settings to prevent conflicts 444 * with other OSes (like M$ DOS). 445 * 446 * SIIG support added by Andrey Panin <pazke@donpac.ru>, 10/1999 447 * 448 * There is two family of SIIG serial cards with different PCI 449 * interface chip and different configuration methods: 450 * - 10x cards have control registers in IO and/or memory space; 451 * - 20x cards have control registers in standard PCI configuration space. 452 * 453 * Note: all 10x cards have PCI device ids 0x10.. 454 * all 20x cards have PCI device ids 0x20.. 455 * 456 * There are also Quartet Serial cards which use Oxford Semiconductor 457 * 16954 quad UART PCI chip clocked by 18.432 MHz quartz. 458 * 459 * Note: some SIIG cards are probed by the parport_serial object. 460 */ 461 462#define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc) 463#define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8) 464 465static int pci_siig10x_init(struct pci_dev *dev) 466{ 467 u16 data; 468 void __iomem *p; 469 470 switch (dev->device & 0xfff8) { 471 case PCI_DEVICE_ID_SIIG_1S_10x: /* 1S */ 472 data = 0xffdf; 473 break; 474 case PCI_DEVICE_ID_SIIG_2S_10x: /* 2S, 2S1P */ 475 data = 0xf7ff; 476 break; 477 default: /* 1S1P, 4S */ 478 data = 0xfffb; 479 break; 480 } 481 482 p = ioremap(pci_resource_start(dev, 0), 0x80); 483 if (p == NULL) 484 return -ENOMEM; 485 486 writew(readw(p + 0x28) & data, p + 0x28); 487 readw(p + 0x28); 488 iounmap(p); 489 return 0; 490} 491 492#define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc) 493#define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc) 494 495static int pci_siig20x_init(struct pci_dev *dev) 496{ 497 u8 data; 498 499 /* Change clock frequency for the first UART. */ 500 pci_read_config_byte(dev, 0x6f, &data); 501 pci_write_config_byte(dev, 0x6f, data & 0xef); 502 503 /* If this card has 2 UART, we have to do the same with second UART. */ 504 if (((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S_20x) || 505 ((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S1P_20x)) { 506 pci_read_config_byte(dev, 0x73, &data); 507 pci_write_config_byte(dev, 0x73, data & 0xef); 508 } 509 return 0; 510} 511 512static int pci_siig_init(struct pci_dev *dev) 513{ 514 unsigned int type = dev->device & 0xff00; 515 516 if (type == 0x1000) 517 return pci_siig10x_init(dev); 518 if (type == 0x2000) 519 return pci_siig20x_init(dev); 520 521 moan_device("Unknown SIIG card", dev); 522 return -ENODEV; 523} 524 525static int pci_siig_setup(struct serial_private *priv, 526 const struct pciserial_board *board, 527 struct uart_8250_port *port, int idx) 528{ 529 unsigned int bar = FL_GET_BASE(board->flags) + idx, offset = 0; 530 531 if (idx > 3) { 532 bar = 4; 533 offset = (idx - 4) * 8; 534 } 535 536 return setup_port(priv, port, bar, offset, 0); 537} 538 539/* 540 * Timedia has an explosion of boards, and to avoid the PCI table from 541 * growing *huge*, we use this function to collapse some 70 entries 542 * in the PCI table into one, for sanity's and compactness's sake. 543 */ 544static const unsigned short timedia_single_port[] = { 545 0x4025, 0x4027, 0x4028, 0x5025, 0x5027, 0 546}; 547 548static const unsigned short timedia_dual_port[] = { 549 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085, 550 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079, 551 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079, 552 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079, 553 0xD079, 0 554}; 555 556static const unsigned short timedia_quad_port[] = { 557 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157, 558 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159, 559 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056, 560 0xB157, 0 561}; 562 563static const unsigned short timedia_eight_port[] = { 564 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166, 565 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0 566}; 567 568static const struct timedia_struct { 569 int num; 570 const unsigned short *ids; 571} timedia_data[] = { 572 { 1, timedia_single_port }, 573 { 2, timedia_dual_port }, 574 { 4, timedia_quad_port }, 575 { 8, timedia_eight_port } 576}; 577 578/* 579 * There are nearly 70 different Timedia/SUNIX PCI serial devices. Instead of 580 * listing them individually, this driver merely grabs them all with 581 * PCI_ANY_ID. Some of these devices, however, also feature a parallel port, 582 * and should be left free to be claimed by parport_serial instead. 583 */ 584static int pci_timedia_probe(struct pci_dev *dev) 585{ 586 /* 587 * Check the third digit of the subdevice ID 588 * (0,2,3,5,6: serial only -- 7,8,9: serial + parallel) 589 */ 590 if ((dev->subsystem_device & 0x00f0) >= 0x70) { 591 pci_info(dev, "ignoring Timedia subdevice %04x for parport_serial\n", 592 dev->subsystem_device); 593 return -ENODEV; 594 } 595 596 return 0; 597} 598 599static int pci_timedia_init(struct pci_dev *dev) 600{ 601 const unsigned short *ids; 602 int i, j; 603 604 for (i = 0; i < ARRAY_SIZE(timedia_data); i++) { 605 ids = timedia_data[i].ids; 606 for (j = 0; ids[j]; j++) 607 if (dev->subsystem_device == ids[j]) 608 return timedia_data[i].num; 609 } 610 return 0; 611} 612 613/* 614 * Timedia/SUNIX uses a mixture of BARs and offsets 615 * Ugh, this is ugly as all hell --- TYT 616 */ 617static int 618pci_timedia_setup(struct serial_private *priv, 619 const struct pciserial_board *board, 620 struct uart_8250_port *port, int idx) 621{ 622 unsigned int bar = 0, offset = board->first_offset; 623 624 switch (idx) { 625 case 0: 626 bar = 0; 627 break; 628 case 1: 629 offset = board->uart_offset; 630 bar = 0; 631 break; 632 case 2: 633 bar = 1; 634 break; 635 case 3: 636 offset = board->uart_offset; 637 fallthrough; 638 case 4: /* BAR 2 */ 639 case 5: /* BAR 3 */ 640 case 6: /* BAR 4 */ 641 case 7: /* BAR 5 */ 642 bar = idx - 2; 643 } 644 645 return setup_port(priv, port, bar, offset, board->reg_shift); 646} 647 648/* 649 * Some Titan cards are also a little weird 650 */ 651static int 652titan_400l_800l_setup(struct serial_private *priv, 653 const struct pciserial_board *board, 654 struct uart_8250_port *port, int idx) 655{ 656 unsigned int bar, offset = board->first_offset; 657 658 switch (idx) { 659 case 0: 660 bar = 1; 661 break; 662 case 1: 663 bar = 2; 664 break; 665 default: 666 bar = 4; 667 offset = (idx - 2) * board->uart_offset; 668 } 669 670 return setup_port(priv, port, bar, offset, board->reg_shift); 671} 672 673static int pci_xircom_init(struct pci_dev *dev) 674{ 675 msleep(100); 676 return 0; 677} 678 679static int pci_ni8420_init(struct pci_dev *dev) 680{ 681 void __iomem *p; 682 unsigned int bar = 0; 683 684 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) { 685 moan_device("no memory in bar", dev); 686 return 0; 687 } 688 689 p = pci_ioremap_bar(dev, bar); 690 if (p == NULL) 691 return -ENOMEM; 692 693 /* Enable CPU Interrupt */ 694 writel(readl(p + NI8420_INT_ENABLE_REG) | NI8420_INT_ENABLE_BIT, 695 p + NI8420_INT_ENABLE_REG); 696 697 iounmap(p); 698 return 0; 699} 700 701#define MITE_IOWBSR1_WSIZE 0xa 702#define MITE_IOWBSR1_WIN_OFFSET 0x800 703#define MITE_IOWBSR1_WENAB (1 << 7) 704#define MITE_LCIMR1_IO_IE_0 (1 << 24) 705#define MITE_LCIMR2_SET_CPU_IE (1 << 31) 706#define MITE_IOWCR1_RAMSEL_MASK 0xfffffffe 707 708static int pci_ni8430_init(struct pci_dev *dev) 709{ 710 void __iomem *p; 711 struct pci_bus_region region; 712 u32 device_window; 713 unsigned int bar = 0; 714 715 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) { 716 moan_device("no memory in bar", dev); 717 return 0; 718 } 719 720 p = pci_ioremap_bar(dev, bar); 721 if (p == NULL) 722 return -ENOMEM; 723 724 /* 725 * Set device window address and size in BAR0, while acknowledging that 726 * the resource structure may contain a translated address that differs 727 * from the address the device responds to. 728 */ 729 pcibios_resource_to_bus(dev->bus, ®ion, &dev->resource[bar]); 730 device_window = ((region.start + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00) 731 | MITE_IOWBSR1_WENAB | MITE_IOWBSR1_WSIZE; 732 writel(device_window, p + MITE_IOWBSR1); 733 734 /* Set window access to go to RAMSEL IO address space */ 735 writel((readl(p + MITE_IOWCR1) & MITE_IOWCR1_RAMSEL_MASK), 736 p + MITE_IOWCR1); 737 738 /* Enable IO Bus Interrupt 0 */ 739 writel(MITE_LCIMR1_IO_IE_0, p + MITE_LCIMR1); 740 741 /* Enable CPU Interrupt */ 742 writel(MITE_LCIMR2_SET_CPU_IE, p + MITE_LCIMR2); 743 744 iounmap(p); 745 return 0; 746} 747 748/* UART Port Control Register */ 749#define NI8430_PORTCON 0x0f 750#define NI8430_PORTCON_TXVR_ENABLE (1 << 3) 751 752static int 753pci_ni8430_setup(struct serial_private *priv, 754 const struct pciserial_board *board, 755 struct uart_8250_port *port, int idx) 756{ 757 struct pci_dev *dev = priv->dev; 758 void __iomem *p; 759 unsigned int bar, offset = board->first_offset; 760 761 if (idx >= board->num_ports) 762 return 1; 763 764 bar = FL_GET_BASE(board->flags); 765 offset += idx * board->uart_offset; 766 767 p = pci_ioremap_bar(dev, bar); 768 if (!p) 769 return -ENOMEM; 770 771 /* enable the transceiver */ 772 writeb(readb(p + offset + NI8430_PORTCON) | NI8430_PORTCON_TXVR_ENABLE, 773 p + offset + NI8430_PORTCON); 774 775 iounmap(p); 776 777 return setup_port(priv, port, bar, offset, board->reg_shift); 778} 779 780static int pci_netmos_9900_setup(struct serial_private *priv, 781 const struct pciserial_board *board, 782 struct uart_8250_port *port, int idx) 783{ 784 unsigned int bar; 785 786 if ((priv->dev->device != PCI_DEVICE_ID_NETMOS_9865) && 787 (priv->dev->subsystem_device & 0xff00) == 0x3000) { 788 /* netmos apparently orders BARs by datasheet layout, so serial 789 * ports get BARs 0 and 3 (or 1 and 4 for memmapped) 790 */ 791 bar = 3 * idx; 792 793 return setup_port(priv, port, bar, 0, board->reg_shift); 794 } 795 796 return pci_default_setup(priv, board, port, idx); 797} 798 799/* the 99xx series comes with a range of device IDs and a variety 800 * of capabilities: 801 * 802 * 9900 has varying capabilities and can cascade to sub-controllers 803 * (cascading should be purely internal) 804 * 9904 is hardwired with 4 serial ports 805 * 9912 and 9922 are hardwired with 2 serial ports 806 */ 807static int pci_netmos_9900_numports(struct pci_dev *dev) 808{ 809 unsigned int c = dev->class; 810 unsigned int pi; 811 unsigned short sub_serports; 812 813 pi = c & 0xff; 814 815 if (pi == 2) 816 return 1; 817 818 if ((pi == 0) && (dev->device == PCI_DEVICE_ID_NETMOS_9900)) { 819 /* two possibilities: 0x30ps encodes number of parallel and 820 * serial ports, or 0x1000 indicates *something*. This is not 821 * immediately obvious, since the 2s1p+4s configuration seems 822 * to offer all functionality on functions 0..2, while still 823 * advertising the same function 3 as the 4s+2s1p config. 824 */ 825 sub_serports = dev->subsystem_device & 0xf; 826 if (sub_serports > 0) 827 return sub_serports; 828 829 pci_err(dev, "NetMos/Mostech serial driver ignoring port on ambiguous config.\n"); 830 return 0; 831 } 832 833 moan_device("unknown NetMos/Mostech program interface", dev); 834 return 0; 835} 836 837static int pci_netmos_init(struct pci_dev *dev) 838{ 839 /* subdevice 0x00PS means <P> parallel, <S> serial */ 840 unsigned int num_serial = dev->subsystem_device & 0xf; 841 842 if ((dev->device == PCI_DEVICE_ID_NETMOS_9901) || 843 (dev->device == PCI_DEVICE_ID_NETMOS_9865)) 844 return 0; 845 846 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM && 847 dev->subsystem_device == 0x0299) 848 return 0; 849 850 switch (dev->device) { /* FALLTHROUGH on all */ 851 case PCI_DEVICE_ID_NETMOS_9904: 852 case PCI_DEVICE_ID_NETMOS_9912: 853 case PCI_DEVICE_ID_NETMOS_9922: 854 case PCI_DEVICE_ID_NETMOS_9900: 855 num_serial = pci_netmos_9900_numports(dev); 856 break; 857 858 default: 859 break; 860 } 861 862 if (num_serial == 0) { 863 moan_device("unknown NetMos/Mostech device", dev); 864 return -ENODEV; 865 } 866 867 return num_serial; 868} 869 870/* 871 * These chips are available with optionally one parallel port and up to 872 * two serial ports. Unfortunately they all have the same product id. 873 * 874 * Basic configuration is done over a region of 32 I/O ports. The base 875 * ioport is called INTA or INTC, depending on docs/other drivers. 876 * 877 * The region of the 32 I/O ports is configured in POSIO0R... 878 */ 879 880/* registers */ 881#define ITE_887x_MISCR 0x9c 882#define ITE_887x_INTCBAR 0x78 883#define ITE_887x_UARTBAR 0x7c 884#define ITE_887x_PS0BAR 0x10 885#define ITE_887x_POSIO0 0x60 886 887/* I/O space size */ 888#define ITE_887x_IOSIZE 32 889/* I/O space size (bits 26-24; 8 bytes = 011b) */ 890#define ITE_887x_POSIO_IOSIZE_8 (3 << 24) 891/* I/O space size (bits 26-24; 32 bytes = 101b) */ 892#define ITE_887x_POSIO_IOSIZE_32 (5 << 24) 893/* Decoding speed (1 = slow, 2 = medium, 3 = fast) */ 894#define ITE_887x_POSIO_SPEED (3 << 29) 895/* enable IO_Space bit */ 896#define ITE_887x_POSIO_ENABLE (1 << 31) 897 898/* inta_addr are the configuration addresses of the ITE */ 899static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0, 0x200, 0x280 }; 900static int pci_ite887x_init(struct pci_dev *dev) 901{ 902 int ret, i, type; 903 struct resource *iobase = NULL; 904 u32 miscr, uartbar, ioport; 905 906 /* search for the base-ioport */ 907 for (i = 0; i < ARRAY_SIZE(inta_addr); i++) { 908 iobase = request_region(inta_addr[i], ITE_887x_IOSIZE, 909 "ite887x"); 910 if (iobase != NULL) { 911 /* write POSIO0R - speed | size | ioport */ 912 pci_write_config_dword(dev, ITE_887x_POSIO0, 913 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED | 914 ITE_887x_POSIO_IOSIZE_32 | inta_addr[i]); 915 /* write INTCBAR - ioport */ 916 pci_write_config_dword(dev, ITE_887x_INTCBAR, 917 inta_addr[i]); 918 ret = inb(inta_addr[i]); 919 if (ret != 0xff) { 920 /* ioport connected */ 921 break; 922 } 923 release_region(iobase->start, ITE_887x_IOSIZE); 924 } 925 } 926 927 if (i == ARRAY_SIZE(inta_addr)) { 928 pci_err(dev, "could not find iobase\n"); 929 return -ENODEV; 930 } 931 932 /* start of undocumented type checking (see parport_pc.c) */ 933 type = inb(iobase->start + 0x18) & 0x0f; 934 935 switch (type) { 936 case 0x2: /* ITE8871 (1P) */ 937 case 0xa: /* ITE8875 (1P) */ 938 ret = 0; 939 break; 940 case 0xe: /* ITE8872 (2S1P) */ 941 ret = 2; 942 break; 943 case 0x6: /* ITE8873 (1S) */ 944 ret = 1; 945 break; 946 case 0x8: /* ITE8874 (2S) */ 947 ret = 2; 948 break; 949 default: 950 moan_device("Unknown ITE887x", dev); 951 ret = -ENODEV; 952 } 953 954 /* configure all serial ports */ 955 for (i = 0; i < ret; i++) { 956 /* read the I/O port from the device */ 957 pci_read_config_dword(dev, ITE_887x_PS0BAR + (0x4 * (i + 1)), 958 &ioport); 959 ioport &= 0x0000FF00; /* the actual base address */ 960 pci_write_config_dword(dev, ITE_887x_POSIO0 + (0x4 * (i + 1)), 961 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED | 962 ITE_887x_POSIO_IOSIZE_8 | ioport); 963 964 /* write the ioport to the UARTBAR */ 965 pci_read_config_dword(dev, ITE_887x_UARTBAR, &uartbar); 966 uartbar &= ~(0xffff << (16 * i)); /* clear half the reg */ 967 uartbar |= (ioport << (16 * i)); /* set the ioport */ 968 pci_write_config_dword(dev, ITE_887x_UARTBAR, uartbar); 969 970 /* get current config */ 971 pci_read_config_dword(dev, ITE_887x_MISCR, &miscr); 972 /* disable interrupts (UARTx_Routing[3:0]) */ 973 miscr &= ~(0xf << (12 - 4 * i)); 974 /* activate the UART (UARTx_En) */ 975 miscr |= 1 << (23 - i); 976 /* write new config with activated UART */ 977 pci_write_config_dword(dev, ITE_887x_MISCR, miscr); 978 } 979 980 if (ret <= 0) { 981 /* the device has no UARTs if we get here */ 982 release_region(iobase->start, ITE_887x_IOSIZE); 983 } 984 985 return ret; 986} 987 988static void pci_ite887x_exit(struct pci_dev *dev) 989{ 990 u32 ioport; 991 /* the ioport is bit 0-15 in POSIO0R */ 992 pci_read_config_dword(dev, ITE_887x_POSIO0, &ioport); 993 ioport &= 0xffff; 994 release_region(ioport, ITE_887x_IOSIZE); 995} 996 997/* 998 * Oxford Semiconductor Inc. 999 * Check if an OxSemi device is part of the Tornado range of devices. 1000 */ 1001#define PCI_VENDOR_ID_ENDRUN 0x7401 1002#define PCI_DEVICE_ID_ENDRUN_1588 0xe100 1003 1004static bool pci_oxsemi_tornado_p(struct pci_dev *dev) 1005{ 1006 /* OxSemi Tornado devices are all 0xCxxx */ 1007 if (dev->vendor == PCI_VENDOR_ID_OXSEMI && 1008 (dev->device & 0xf000) != 0xc000) 1009 return false; 1010 1011 /* EndRun devices are all 0xExxx */ 1012 if (dev->vendor == PCI_VENDOR_ID_ENDRUN && 1013 (dev->device & 0xf000) != 0xe000) 1014 return false; 1015 1016 return true; 1017} 1018 1019/* 1020 * Determine the number of ports available on a Tornado device. 1021 */ 1022static int pci_oxsemi_tornado_init(struct pci_dev *dev) 1023{ 1024 u8 __iomem *p; 1025 unsigned long deviceID; 1026 unsigned int number_uarts = 0; 1027 1028 if (!pci_oxsemi_tornado_p(dev)) 1029 return 0; 1030 1031 p = pci_iomap(dev, 0, 5); 1032 if (p == NULL) 1033 return -ENOMEM; 1034 1035 deviceID = ioread32(p); 1036 /* Tornado device */ 1037 if (deviceID == 0x07000200) { 1038 number_uarts = ioread8(p + 4); 1039 pci_dbg(dev, "%d ports detected on %s PCI Express device\n", 1040 number_uarts, 1041 dev->vendor == PCI_VENDOR_ID_ENDRUN ? 1042 "EndRun" : "Oxford"); 1043 } 1044 pci_iounmap(dev, p); 1045 return number_uarts; 1046} 1047 1048/* Tornado-specific constants for the TCR and CPR registers; see below. */ 1049#define OXSEMI_TORNADO_TCR_MASK 0xf 1050#define OXSEMI_TORNADO_CPR_MASK 0x1ff 1051#define OXSEMI_TORNADO_CPR_MIN 0x008 1052#define OXSEMI_TORNADO_CPR_DEF 0x10f 1053 1054/* 1055 * Determine the oversampling rate, the clock prescaler, and the clock 1056 * divisor for the requested baud rate. The clock rate is 62.5 MHz, 1057 * which is four times the baud base, and the prescaler increments in 1058 * steps of 1/8. Therefore to make calculations on integers we need 1059 * to use a scaled clock rate, which is the baud base multiplied by 32 1060 * (or our assumed UART clock rate multiplied by 2). 1061 * 1062 * The allowed oversampling rates are from 4 up to 16 inclusive (values 1063 * from 0 to 3 inclusive map to 16). Likewise the clock prescaler allows 1064 * values between 1.000 and 63.875 inclusive (operation for values from 1065 * 0.000 to 0.875 has not been specified). The clock divisor is the usual 1066 * unsigned 16-bit integer. 1067 * 1068 * For the most accurate baud rate we use a table of predetermined 1069 * oversampling rates and clock prescalers that records all possible 1070 * products of the two parameters in the range from 4 up to 255 inclusive, 1071 * and additionally 335 for the 1500000bps rate, with the prescaler scaled 1072 * by 8. The table is sorted by the decreasing value of the oversampling 1073 * rate and ties are resolved by sorting by the decreasing value of the 1074 * product. This way preference is given to higher oversampling rates. 1075 * 1076 * We iterate over the table and choose the product of an oversampling 1077 * rate and a clock prescaler that gives the lowest integer division 1078 * result deviation, or if an exact integer divider is found we stop 1079 * looking for it right away. We do some fixup if the resulting clock 1080 * divisor required would be out of its unsigned 16-bit integer range. 1081 * 1082 * Finally we abuse the supposed fractional part returned to encode the 1083 * 4-bit value of the oversampling rate and the 9-bit value of the clock 1084 * prescaler which will end up in the TCR and CPR/CPR2 registers. 1085 */ 1086static unsigned int pci_oxsemi_tornado_get_divisor(struct uart_port *port, 1087 unsigned int baud, 1088 unsigned int *frac) 1089{ 1090 static u8 p[][2] = { 1091 { 16, 14, }, { 16, 13, }, { 16, 12, }, { 16, 11, }, 1092 { 16, 10, }, { 16, 9, }, { 16, 8, }, { 15, 17, }, 1093 { 15, 16, }, { 15, 15, }, { 15, 14, }, { 15, 13, }, 1094 { 15, 12, }, { 15, 11, }, { 15, 10, }, { 15, 9, }, 1095 { 15, 8, }, { 14, 18, }, { 14, 17, }, { 14, 14, }, 1096 { 14, 13, }, { 14, 12, }, { 14, 11, }, { 14, 10, }, 1097 { 14, 9, }, { 14, 8, }, { 13, 19, }, { 13, 18, }, 1098 { 13, 17, }, { 13, 13, }, { 13, 12, }, { 13, 11, }, 1099 { 13, 10, }, { 13, 9, }, { 13, 8, }, { 12, 19, }, 1100 { 12, 18, }, { 12, 17, }, { 12, 11, }, { 12, 9, }, 1101 { 12, 8, }, { 11, 23, }, { 11, 22, }, { 11, 21, }, 1102 { 11, 20, }, { 11, 19, }, { 11, 18, }, { 11, 17, }, 1103 { 11, 11, }, { 11, 10, }, { 11, 9, }, { 11, 8, }, 1104 { 10, 25, }, { 10, 23, }, { 10, 20, }, { 10, 19, }, 1105 { 10, 17, }, { 10, 10, }, { 10, 9, }, { 10, 8, }, 1106 { 9, 27, }, { 9, 23, }, { 9, 21, }, { 9, 19, }, 1107 { 9, 18, }, { 9, 17, }, { 9, 9, }, { 9, 8, }, 1108 { 8, 31, }, { 8, 29, }, { 8, 23, }, { 8, 19, }, 1109 { 8, 17, }, { 8, 8, }, { 7, 35, }, { 7, 31, }, 1110 { 7, 29, }, { 7, 25, }, { 7, 23, }, { 7, 21, }, 1111 { 7, 19, }, { 7, 17, }, { 7, 15, }, { 7, 14, }, 1112 { 7, 13, }, { 7, 12, }, { 7, 11, }, { 7, 10, }, 1113 { 7, 9, }, { 7, 8, }, { 6, 41, }, { 6, 37, }, 1114 { 6, 31, }, { 6, 29, }, { 6, 23, }, { 6, 19, }, 1115 { 6, 17, }, { 6, 13, }, { 6, 11, }, { 6, 10, }, 1116 { 6, 9, }, { 6, 8, }, { 5, 67, }, { 5, 47, }, 1117 { 5, 43, }, { 5, 41, }, { 5, 37, }, { 5, 31, }, 1118 { 5, 29, }, { 5, 25, }, { 5, 23, }, { 5, 19, }, 1119 { 5, 17, }, { 5, 15, }, { 5, 13, }, { 5, 11, }, 1120 { 5, 10, }, { 5, 9, }, { 5, 8, }, { 4, 61, }, 1121 { 4, 59, }, { 4, 53, }, { 4, 47, }, { 4, 43, }, 1122 { 4, 41, }, { 4, 37, }, { 4, 31, }, { 4, 29, }, 1123 { 4, 23, }, { 4, 19, }, { 4, 17, }, { 4, 13, }, 1124 { 4, 9, }, { 4, 8, }, 1125 }; 1126 /* Scale the quotient for comparison to get the fractional part. */ 1127 const unsigned int quot_scale = 65536; 1128 unsigned int sclk = port->uartclk * 2; 1129 unsigned int sdiv = DIV_ROUND_CLOSEST(sclk, baud); 1130 unsigned int best_squot; 1131 unsigned int squot; 1132 unsigned int quot; 1133 u16 cpr; 1134 u8 tcr; 1135 int i; 1136 1137 /* Old custom speed handling. */ 1138 if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) { 1139 unsigned int cust_div = port->custom_divisor; 1140 1141 quot = cust_div & UART_DIV_MAX; 1142 tcr = (cust_div >> 16) & OXSEMI_TORNADO_TCR_MASK; 1143 cpr = (cust_div >> 20) & OXSEMI_TORNADO_CPR_MASK; 1144 if (cpr < OXSEMI_TORNADO_CPR_MIN) 1145 cpr = OXSEMI_TORNADO_CPR_DEF; 1146 } else { 1147 best_squot = quot_scale; 1148 for (i = 0; i < ARRAY_SIZE(p); i++) { 1149 unsigned int spre; 1150 unsigned int srem; 1151 u8 cp; 1152 u8 tc; 1153 1154 tc = p[i][0]; 1155 cp = p[i][1]; 1156 spre = tc * cp; 1157 1158 srem = sdiv % spre; 1159 if (srem > spre / 2) 1160 srem = spre - srem; 1161 squot = DIV_ROUND_CLOSEST(srem * quot_scale, spre); 1162 1163 if (srem == 0) { 1164 tcr = tc; 1165 cpr = cp; 1166 quot = sdiv / spre; 1167 break; 1168 } else if (squot < best_squot) { 1169 best_squot = squot; 1170 tcr = tc; 1171 cpr = cp; 1172 quot = DIV_ROUND_CLOSEST(sdiv, spre); 1173 } 1174 } 1175 while (tcr <= (OXSEMI_TORNADO_TCR_MASK + 1) >> 1 && 1176 quot % 2 == 0) { 1177 quot >>= 1; 1178 tcr <<= 1; 1179 } 1180 while (quot > UART_DIV_MAX) { 1181 if (tcr <= (OXSEMI_TORNADO_TCR_MASK + 1) >> 1) { 1182 quot >>= 1; 1183 tcr <<= 1; 1184 } else if (cpr <= OXSEMI_TORNADO_CPR_MASK >> 1) { 1185 quot >>= 1; 1186 cpr <<= 1; 1187 } else { 1188 quot = quot * cpr / OXSEMI_TORNADO_CPR_MASK; 1189 cpr = OXSEMI_TORNADO_CPR_MASK; 1190 } 1191 } 1192 } 1193 1194 *frac = (cpr << 8) | (tcr & OXSEMI_TORNADO_TCR_MASK); 1195 return quot; 1196} 1197 1198/* 1199 * Set the oversampling rate in the transmitter clock cycle register (TCR), 1200 * the clock prescaler in the clock prescaler register (CPR and CPR2), and 1201 * the clock divisor in the divisor latch (DLL and DLM). Note that for 1202 * backwards compatibility any write to CPR clears CPR2 and therefore CPR 1203 * has to be written first, followed by CPR2, which occupies the location 1204 * of CKS used with earlier UART designs. 1205 */ 1206static void pci_oxsemi_tornado_set_divisor(struct uart_port *port, 1207 unsigned int baud, 1208 unsigned int quot, 1209 unsigned int quot_frac) 1210{ 1211 struct uart_8250_port *up = up_to_u8250p(port); 1212 u8 cpr2 = quot_frac >> 16; 1213 u8 cpr = quot_frac >> 8; 1214 u8 tcr = quot_frac; 1215 1216 serial_icr_write(up, UART_TCR, tcr); 1217 serial_icr_write(up, UART_CPR, cpr); 1218 serial_icr_write(up, UART_CKS, cpr2); 1219 serial8250_do_set_divisor(port, baud, quot, 0); 1220} 1221 1222/* 1223 * For Tornado devices we force MCR[7] set for the Divide-by-M N/8 baud rate 1224 * generator prescaler (CPR and CPR2). Otherwise no prescaler would be used. 1225 */ 1226static void pci_oxsemi_tornado_set_mctrl(struct uart_port *port, 1227 unsigned int mctrl) 1228{ 1229 struct uart_8250_port *up = up_to_u8250p(port); 1230 1231 up->mcr |= UART_MCR_CLKSEL; 1232 serial8250_do_set_mctrl(port, mctrl); 1233} 1234 1235static int pci_oxsemi_tornado_setup(struct serial_private *priv, 1236 const struct pciserial_board *board, 1237 struct uart_8250_port *up, int idx) 1238{ 1239 struct pci_dev *dev = priv->dev; 1240 1241 if (pci_oxsemi_tornado_p(dev)) { 1242 up->port.get_divisor = pci_oxsemi_tornado_get_divisor; 1243 up->port.set_divisor = pci_oxsemi_tornado_set_divisor; 1244 up->port.set_mctrl = pci_oxsemi_tornado_set_mctrl; 1245 } 1246 1247 return pci_default_setup(priv, board, up, idx); 1248} 1249 1250static int pci_asix_setup(struct serial_private *priv, 1251 const struct pciserial_board *board, 1252 struct uart_8250_port *port, int idx) 1253{ 1254 port->bugs |= UART_BUG_PARITY; 1255 return pci_default_setup(priv, board, port, idx); 1256} 1257 1258#define QPCR_TEST_FOR1 0x3F 1259#define QPCR_TEST_GET1 0x00 1260#define QPCR_TEST_FOR2 0x40 1261#define QPCR_TEST_GET2 0x40 1262#define QPCR_TEST_FOR3 0x80 1263#define QPCR_TEST_GET3 0x40 1264#define QPCR_TEST_FOR4 0xC0 1265#define QPCR_TEST_GET4 0x80 1266 1267#define QOPR_CLOCK_X1 0x0000 1268#define QOPR_CLOCK_X2 0x0001 1269#define QOPR_CLOCK_X4 0x0002 1270#define QOPR_CLOCK_X8 0x0003 1271#define QOPR_CLOCK_RATE_MASK 0x0003 1272 1273/* Quatech devices have their own extra interface features */ 1274static struct pci_device_id quatech_cards[] = { 1275 { PCI_DEVICE_DATA(QUATECH, QSC100, 1) }, 1276 { PCI_DEVICE_DATA(QUATECH, DSC100, 1) }, 1277 { PCI_DEVICE_DATA(QUATECH, DSC100E, 0) }, 1278 { PCI_DEVICE_DATA(QUATECH, DSC200, 1) }, 1279 { PCI_DEVICE_DATA(QUATECH, DSC200E, 0) }, 1280 { PCI_DEVICE_DATA(QUATECH, ESC100D, 1) }, 1281 { PCI_DEVICE_DATA(QUATECH, ESC100M, 1) }, 1282 { PCI_DEVICE_DATA(QUATECH, QSCP100, 1) }, 1283 { PCI_DEVICE_DATA(QUATECH, DSCP100, 1) }, 1284 { PCI_DEVICE_DATA(QUATECH, QSCP200, 1) }, 1285 { PCI_DEVICE_DATA(QUATECH, DSCP200, 1) }, 1286 { PCI_DEVICE_DATA(QUATECH, ESCLP100, 0) }, 1287 { PCI_DEVICE_DATA(QUATECH, QSCLP100, 0) }, 1288 { PCI_DEVICE_DATA(QUATECH, DSCLP100, 0) }, 1289 { PCI_DEVICE_DATA(QUATECH, SSCLP100, 0) }, 1290 { PCI_DEVICE_DATA(QUATECH, QSCLP200, 0) }, 1291 { PCI_DEVICE_DATA(QUATECH, DSCLP200, 0) }, 1292 { PCI_DEVICE_DATA(QUATECH, SSCLP200, 0) }, 1293 { PCI_DEVICE_DATA(QUATECH, SPPXP_100, 0) }, 1294 { 0, } 1295}; 1296 1297static int pci_quatech_rqopr(struct uart_8250_port *port) 1298{ 1299 unsigned long base = port->port.iobase; 1300 u8 LCR, val; 1301 1302 LCR = inb(base + UART_LCR); 1303 outb(0xBF, base + UART_LCR); 1304 val = inb(base + UART_SCR); 1305 outb(LCR, base + UART_LCR); 1306 return val; 1307} 1308 1309static void pci_quatech_wqopr(struct uart_8250_port *port, u8 qopr) 1310{ 1311 unsigned long base = port->port.iobase; 1312 u8 LCR; 1313 1314 LCR = inb(base + UART_LCR); 1315 outb(0xBF, base + UART_LCR); 1316 inb(base + UART_SCR); 1317 outb(qopr, base + UART_SCR); 1318 outb(LCR, base + UART_LCR); 1319} 1320 1321static int pci_quatech_rqmcr(struct uart_8250_port *port) 1322{ 1323 unsigned long base = port->port.iobase; 1324 u8 LCR, val, qmcr; 1325 1326 LCR = inb(base + UART_LCR); 1327 outb(0xBF, base + UART_LCR); 1328 val = inb(base + UART_SCR); 1329 outb(val | 0x10, base + UART_SCR); 1330 qmcr = inb(base + UART_MCR); 1331 outb(val, base + UART_SCR); 1332 outb(LCR, base + UART_LCR); 1333 1334 return qmcr; 1335} 1336 1337static void pci_quatech_wqmcr(struct uart_8250_port *port, u8 qmcr) 1338{ 1339 unsigned long base = port->port.iobase; 1340 u8 LCR, val; 1341 1342 LCR = inb(base + UART_LCR); 1343 outb(0xBF, base + UART_LCR); 1344 val = inb(base + UART_SCR); 1345 outb(val | 0x10, base + UART_SCR); 1346 outb(qmcr, base + UART_MCR); 1347 outb(val, base + UART_SCR); 1348 outb(LCR, base + UART_LCR); 1349} 1350 1351static int pci_quatech_has_qmcr(struct uart_8250_port *port) 1352{ 1353 unsigned long base = port->port.iobase; 1354 u8 LCR, val; 1355 1356 LCR = inb(base + UART_LCR); 1357 outb(0xBF, base + UART_LCR); 1358 val = inb(base + UART_SCR); 1359 if (val & 0x20) { 1360 outb(0x80, UART_LCR); 1361 if (!(inb(UART_SCR) & 0x20)) { 1362 outb(LCR, base + UART_LCR); 1363 return 1; 1364 } 1365 } 1366 return 0; 1367} 1368 1369static int pci_quatech_test(struct uart_8250_port *port) 1370{ 1371 u8 reg, qopr; 1372 1373 qopr = pci_quatech_rqopr(port); 1374 pci_quatech_wqopr(port, qopr & QPCR_TEST_FOR1); 1375 reg = pci_quatech_rqopr(port) & 0xC0; 1376 if (reg != QPCR_TEST_GET1) 1377 return -EINVAL; 1378 pci_quatech_wqopr(port, (qopr & QPCR_TEST_FOR1)|QPCR_TEST_FOR2); 1379 reg = pci_quatech_rqopr(port) & 0xC0; 1380 if (reg != QPCR_TEST_GET2) 1381 return -EINVAL; 1382 pci_quatech_wqopr(port, (qopr & QPCR_TEST_FOR1)|QPCR_TEST_FOR3); 1383 reg = pci_quatech_rqopr(port) & 0xC0; 1384 if (reg != QPCR_TEST_GET3) 1385 return -EINVAL; 1386 pci_quatech_wqopr(port, (qopr & QPCR_TEST_FOR1)|QPCR_TEST_FOR4); 1387 reg = pci_quatech_rqopr(port) & 0xC0; 1388 if (reg != QPCR_TEST_GET4) 1389 return -EINVAL; 1390 1391 pci_quatech_wqopr(port, qopr); 1392 return 0; 1393} 1394 1395static int pci_quatech_clock(struct uart_8250_port *port) 1396{ 1397 u8 qopr, reg, set; 1398 unsigned long clock; 1399 1400 if (pci_quatech_test(port) < 0) 1401 return 1843200; 1402 1403 qopr = pci_quatech_rqopr(port); 1404 1405 pci_quatech_wqopr(port, qopr & ~QOPR_CLOCK_X8); 1406 reg = pci_quatech_rqopr(port); 1407 if (reg & QOPR_CLOCK_X8) { 1408 clock = 1843200; 1409 goto out; 1410 } 1411 pci_quatech_wqopr(port, qopr | QOPR_CLOCK_X8); 1412 reg = pci_quatech_rqopr(port); 1413 if (!(reg & QOPR_CLOCK_X8)) { 1414 clock = 1843200; 1415 goto out; 1416 } 1417 reg &= QOPR_CLOCK_X8; 1418 if (reg == QOPR_CLOCK_X2) { 1419 clock = 3685400; 1420 set = QOPR_CLOCK_X2; 1421 } else if (reg == QOPR_CLOCK_X4) { 1422 clock = 7372800; 1423 set = QOPR_CLOCK_X4; 1424 } else if (reg == QOPR_CLOCK_X8) { 1425 clock = 14745600; 1426 set = QOPR_CLOCK_X8; 1427 } else { 1428 clock = 1843200; 1429 set = QOPR_CLOCK_X1; 1430 } 1431 qopr &= ~QOPR_CLOCK_RATE_MASK; 1432 qopr |= set; 1433 1434out: 1435 pci_quatech_wqopr(port, qopr); 1436 return clock; 1437} 1438 1439static int pci_quatech_rs422(struct uart_8250_port *port) 1440{ 1441 u8 qmcr; 1442 int rs422 = 0; 1443 1444 if (!pci_quatech_has_qmcr(port)) 1445 return 0; 1446 qmcr = pci_quatech_rqmcr(port); 1447 pci_quatech_wqmcr(port, 0xFF); 1448 if (pci_quatech_rqmcr(port)) 1449 rs422 = 1; 1450 pci_quatech_wqmcr(port, qmcr); 1451 return rs422; 1452} 1453 1454static int pci_quatech_init(struct pci_dev *dev) 1455{ 1456 const struct pci_device_id *match; 1457 bool amcc = false; 1458 1459 match = pci_match_id(quatech_cards, dev); 1460 if (match) 1461 amcc = match->driver_data; 1462 else 1463 pci_err(dev, "unknown port type '0x%04X'.\n", dev->device); 1464 1465 if (amcc) { 1466 unsigned long base = pci_resource_start(dev, 0); 1467 if (base) { 1468 u32 tmp; 1469 1470 outl(inl(base + 0x38) | 0x00002000, base + 0x38); 1471 tmp = inl(base + 0x3c); 1472 outl(tmp | 0x01000000, base + 0x3c); 1473 outl(tmp & ~0x01000000, base + 0x3c); 1474 } 1475 } 1476 return 0; 1477} 1478 1479static int pci_quatech_setup(struct serial_private *priv, 1480 const struct pciserial_board *board, 1481 struct uart_8250_port *port, int idx) 1482{ 1483 /* Needed by pci_quatech calls below */ 1484 port->port.iobase = pci_resource_start(priv->dev, FL_GET_BASE(board->flags)); 1485 /* Set up the clocking */ 1486 port->port.uartclk = pci_quatech_clock(port); 1487 /* For now just warn about RS422 */ 1488 if (pci_quatech_rs422(port)) 1489 pci_warn(priv->dev, "software control of RS422 features not currently supported.\n"); 1490 return pci_default_setup(priv, board, port, idx); 1491} 1492 1493static int pci_default_setup(struct serial_private *priv, 1494 const struct pciserial_board *board, 1495 struct uart_8250_port *port, int idx) 1496{ 1497 unsigned int bar, offset = board->first_offset, maxnr; 1498 1499 bar = FL_GET_BASE(board->flags); 1500 if (board->flags & FL_BASE_BARS) 1501 bar += idx; 1502 else 1503 offset += idx * board->uart_offset; 1504 1505 maxnr = (pci_resource_len(priv->dev, bar) - board->first_offset) >> 1506 (board->reg_shift + 3); 1507 1508 if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr) 1509 return 1; 1510 1511 return setup_port(priv, port, bar, offset, board->reg_shift); 1512} 1513 1514static int 1515ce4100_serial_setup(struct serial_private *priv, 1516 const struct pciserial_board *board, 1517 struct uart_8250_port *port, int idx) 1518{ 1519 int ret; 1520 1521 ret = setup_port(priv, port, idx, 0, board->reg_shift); 1522 port->port.iotype = UPIO_MEM32; 1523 port->port.type = PORT_XSCALE; 1524 port->port.flags = (port->port.flags | UPF_FIXED_PORT | UPF_FIXED_TYPE); 1525 port->port.regshift = 2; 1526 1527 return ret; 1528} 1529 1530static int 1531pci_omegapci_setup(struct serial_private *priv, 1532 const struct pciserial_board *board, 1533 struct uart_8250_port *port, int idx) 1534{ 1535 return setup_port(priv, port, 2, idx * 8, 0); 1536} 1537 1538static int 1539pci_brcm_trumanage_setup(struct serial_private *priv, 1540 const struct pciserial_board *board, 1541 struct uart_8250_port *port, int idx) 1542{ 1543 int ret = pci_default_setup(priv, board, port, idx); 1544 1545 port->port.type = PORT_BRCM_TRUMANAGE; 1546 port->port.flags = (port->port.flags | UPF_FIXED_PORT | UPF_FIXED_TYPE); 1547 return ret; 1548} 1549 1550/* RTS will control by MCR if this bit is 0 */ 1551#define FINTEK_RTS_CONTROL_BY_HW BIT(4) 1552/* only worked with FINTEK_RTS_CONTROL_BY_HW on */ 1553#define FINTEK_RTS_INVERT BIT(5) 1554 1555/* We should do proper H/W transceiver setting before change to RS485 mode */ 1556static int pci_fintek_rs485_config(struct uart_port *port, 1557 struct serial_rs485 *rs485) 1558{ 1559 struct pci_dev *pci_dev = to_pci_dev(port->dev); 1560 u8 setting; 1561 u8 *index = (u8 *) port->private_data; 1562 1563 pci_read_config_byte(pci_dev, 0x40 + 8 * *index + 7, &setting); 1564 1565 if (!rs485) 1566 rs485 = &port->rs485; 1567 else if (rs485->flags & SER_RS485_ENABLED) 1568 memset(rs485->padding, 0, sizeof(rs485->padding)); 1569 else 1570 memset(rs485, 0, sizeof(*rs485)); 1571 1572 /* F81504/508/512 not support RTS delay before or after send */ 1573 rs485->flags &= SER_RS485_ENABLED | SER_RS485_RTS_ON_SEND; 1574 1575 if (rs485->flags & SER_RS485_ENABLED) { 1576 /* Enable RTS H/W control mode */ 1577 setting |= FINTEK_RTS_CONTROL_BY_HW; 1578 1579 if (rs485->flags & SER_RS485_RTS_ON_SEND) { 1580 /* RTS driving high on TX */ 1581 setting &= ~FINTEK_RTS_INVERT; 1582 } else { 1583 /* RTS driving low on TX */ 1584 setting |= FINTEK_RTS_INVERT; 1585 } 1586 1587 rs485->delay_rts_after_send = 0; 1588 rs485->delay_rts_before_send = 0; 1589 } else { 1590 /* Disable RTS H/W control mode */ 1591 setting &= ~(FINTEK_RTS_CONTROL_BY_HW | FINTEK_RTS_INVERT); 1592 } 1593 1594 pci_write_config_byte(pci_dev, 0x40 + 8 * *index + 7, setting); 1595 1596 if (rs485 != &port->rs485) 1597 port->rs485 = *rs485; 1598 1599 return 0; 1600} 1601 1602static int pci_fintek_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 u8 *data; 1608 u8 config_base; 1609 u16 iobase; 1610 1611 config_base = 0x40 + 0x08 * idx; 1612 1613 /* Get the io address from configuration space */ 1614 pci_read_config_word(pdev, config_base + 4, &iobase); 1615 1616 pci_dbg(pdev, "idx=%d iobase=0x%x", idx, iobase); 1617 1618 port->port.iotype = UPIO_PORT; 1619 port->port.iobase = iobase; 1620 port->port.rs485_config = pci_fintek_rs485_config; 1621 1622 data = devm_kzalloc(&pdev->dev, sizeof(u8), GFP_KERNEL); 1623 if (!data) 1624 return -ENOMEM; 1625 1626 /* preserve index in PCI configuration space */ 1627 *data = idx; 1628 port->port.private_data = data; 1629 1630 return 0; 1631} 1632 1633static int pci_fintek_init(struct pci_dev *dev) 1634{ 1635 unsigned long iobase; 1636 u32 max_port, i; 1637 resource_size_t bar_data[3]; 1638 u8 config_base; 1639 struct serial_private *priv = pci_get_drvdata(dev); 1640 struct uart_8250_port *port; 1641 1642 if (!(pci_resource_flags(dev, 5) & IORESOURCE_IO) || 1643 !(pci_resource_flags(dev, 4) & IORESOURCE_IO) || 1644 !(pci_resource_flags(dev, 3) & IORESOURCE_IO)) 1645 return -ENODEV; 1646 1647 switch (dev->device) { 1648 case 0x1104: /* 4 ports */ 1649 case 0x1108: /* 8 ports */ 1650 max_port = dev->device & 0xff; 1651 break; 1652 case 0x1112: /* 12 ports */ 1653 max_port = 12; 1654 break; 1655 default: 1656 return -EINVAL; 1657 } 1658 1659 /* Get the io address dispatch from the BIOS */ 1660 bar_data[0] = pci_resource_start(dev, 5); 1661 bar_data[1] = pci_resource_start(dev, 4); 1662 bar_data[2] = pci_resource_start(dev, 3); 1663 1664 for (i = 0; i < max_port; ++i) { 1665 /* UART0 configuration offset start from 0x40 */ 1666 config_base = 0x40 + 0x08 * i; 1667 1668 /* Calculate Real IO Port */ 1669 iobase = (bar_data[i / 4] & 0xffffffe0) + (i % 4) * 8; 1670 1671 /* Enable UART I/O port */ 1672 pci_write_config_byte(dev, config_base + 0x00, 0x01); 1673 1674 /* Select 128-byte FIFO and 8x FIFO threshold */ 1675 pci_write_config_byte(dev, config_base + 0x01, 0x33); 1676 1677 /* LSB UART */ 1678 pci_write_config_byte(dev, config_base + 0x04, 1679 (u8)(iobase & 0xff)); 1680 1681 /* MSB UART */ 1682 pci_write_config_byte(dev, config_base + 0x05, 1683 (u8)((iobase & 0xff00) >> 8)); 1684 1685 pci_write_config_byte(dev, config_base + 0x06, dev->irq); 1686 1687 if (priv) { 1688 /* re-apply RS232/485 mode when 1689 * pciserial_resume_ports() 1690 */ 1691 port = serial8250_get_port(priv->line[i]); 1692 pci_fintek_rs485_config(&port->port, NULL); 1693 } else { 1694 /* First init without port data 1695 * force init to RS232 Mode 1696 */ 1697 pci_write_config_byte(dev, config_base + 0x07, 0x01); 1698 } 1699 } 1700 1701 return max_port; 1702} 1703 1704static void f815xxa_mem_serial_out(struct uart_port *p, int offset, int value) 1705{ 1706 struct f815xxa_data *data = p->private_data; 1707 unsigned long flags; 1708 1709 spin_lock_irqsave(&data->lock, flags); 1710 writeb(value, p->membase + offset); 1711 readb(p->membase + UART_SCR); /* Dummy read for flush pcie tx queue */ 1712 spin_unlock_irqrestore(&data->lock, flags); 1713} 1714 1715static int pci_fintek_f815xxa_setup(struct serial_private *priv, 1716 const struct pciserial_board *board, 1717 struct uart_8250_port *port, int idx) 1718{ 1719 struct pci_dev *pdev = priv->dev; 1720 struct f815xxa_data *data; 1721 1722 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); 1723 if (!data) 1724 return -ENOMEM; 1725 1726 data->idx = idx; 1727 spin_lock_init(&data->lock); 1728 1729 port->port.private_data = data; 1730 port->port.iotype = UPIO_MEM; 1731 port->port.flags |= UPF_IOREMAP; 1732 port->port.mapbase = pci_resource_start(pdev, 0) + 8 * idx; 1733 port->port.serial_out = f815xxa_mem_serial_out; 1734 1735 return 0; 1736} 1737 1738static int pci_fintek_f815xxa_init(struct pci_dev *dev) 1739{ 1740 u32 max_port, i; 1741 int config_base; 1742 1743 if (!(pci_resource_flags(dev, 0) & IORESOURCE_MEM)) 1744 return -ENODEV; 1745 1746 switch (dev->device) { 1747 case 0x1204: /* 4 ports */ 1748 case 0x1208: /* 8 ports */ 1749 max_port = dev->device & 0xff; 1750 break; 1751 case 0x1212: /* 12 ports */ 1752 max_port = 12; 1753 break; 1754 default: 1755 return -EINVAL; 1756 } 1757 1758 /* Set to mmio decode */ 1759 pci_write_config_byte(dev, 0x209, 0x40); 1760 1761 for (i = 0; i < max_port; ++i) { 1762 /* UART0 configuration offset start from 0x2A0 */ 1763 config_base = 0x2A0 + 0x08 * i; 1764 1765 /* Select 128-byte FIFO and 8x FIFO threshold */ 1766 pci_write_config_byte(dev, config_base + 0x01, 0x33); 1767 1768 /* Enable UART I/O port */ 1769 pci_write_config_byte(dev, config_base + 0, 0x01); 1770 } 1771 1772 return max_port; 1773} 1774 1775static int skip_tx_en_setup(struct serial_private *priv, 1776 const struct pciserial_board *board, 1777 struct uart_8250_port *port, int idx) 1778{ 1779 port->port.quirks |= UPQ_NO_TXEN_TEST; 1780 pci_dbg(priv->dev, 1781 "serial8250: skipping TxEn test for device [%04x:%04x] subsystem [%04x:%04x]\n", 1782 priv->dev->vendor, priv->dev->device, 1783 priv->dev->subsystem_vendor, priv->dev->subsystem_device); 1784 1785 return pci_default_setup(priv, board, port, idx); 1786} 1787 1788static void kt_handle_break(struct uart_port *p) 1789{ 1790 struct uart_8250_port *up = up_to_u8250p(p); 1791 /* 1792 * On receipt of a BI, serial device in Intel ME (Intel 1793 * management engine) needs to have its fifos cleared for sane 1794 * SOL (Serial Over Lan) output. 1795 */ 1796 serial8250_clear_and_reinit_fifos(up); 1797} 1798 1799static unsigned int kt_serial_in(struct uart_port *p, int offset) 1800{ 1801 struct uart_8250_port *up = up_to_u8250p(p); 1802 unsigned int val; 1803 1804 /* 1805 * When the Intel ME (management engine) gets reset its serial 1806 * port registers could return 0 momentarily. Functions like 1807 * serial8250_console_write, read and save the IER, perform 1808 * some operation and then restore it. In order to avoid 1809 * setting IER register inadvertently to 0, if the value read 1810 * is 0, double check with ier value in uart_8250_port and use 1811 * that instead. up->ier should be the same value as what is 1812 * currently configured. 1813 */ 1814 val = inb(p->iobase + offset); 1815 if (offset == UART_IER) { 1816 if (val == 0) 1817 val = up->ier; 1818 } 1819 return val; 1820} 1821 1822static int kt_serial_setup(struct serial_private *priv, 1823 const struct pciserial_board *board, 1824 struct uart_8250_port *port, int idx) 1825{ 1826 port->port.flags |= UPF_BUG_THRE; 1827 port->port.serial_in = kt_serial_in; 1828 port->port.handle_break = kt_handle_break; 1829 return skip_tx_en_setup(priv, board, port, idx); 1830} 1831 1832static int pci_eg20t_init(struct pci_dev *dev) 1833{ 1834#if defined(CONFIG_SERIAL_PCH_UART) || defined(CONFIG_SERIAL_PCH_UART_MODULE) 1835 return -ENODEV; 1836#else 1837 return 0; 1838#endif 1839} 1840 1841static int 1842pci_wch_ch353_setup(struct serial_private *priv, 1843 const struct pciserial_board *board, 1844 struct uart_8250_port *port, int idx) 1845{ 1846 port->port.flags |= UPF_FIXED_TYPE; 1847 port->port.type = PORT_16550A; 1848 return pci_default_setup(priv, board, port, idx); 1849} 1850 1851static int 1852pci_wch_ch355_setup(struct serial_private *priv, 1853 const struct pciserial_board *board, 1854 struct uart_8250_port *port, int idx) 1855{ 1856 port->port.flags |= UPF_FIXED_TYPE; 1857 port->port.type = PORT_16550A; 1858 return pci_default_setup(priv, board, port, idx); 1859} 1860 1861static int 1862pci_wch_ch38x_setup(struct serial_private *priv, 1863 const struct pciserial_board *board, 1864 struct uart_8250_port *port, int idx) 1865{ 1866 port->port.flags |= UPF_FIXED_TYPE; 1867 port->port.type = PORT_16850; 1868 return pci_default_setup(priv, board, port, idx); 1869} 1870 1871 1872#define CH384_XINT_ENABLE_REG 0xEB 1873#define CH384_XINT_ENABLE_BIT 0x02 1874 1875static int pci_wch_ch38x_init(struct pci_dev *dev) 1876{ 1877 int max_port; 1878 unsigned long iobase; 1879 1880 1881 switch (dev->device) { 1882 case 0x3853: /* 8 ports */ 1883 max_port = 8; 1884 break; 1885 default: 1886 return -EINVAL; 1887 } 1888 1889 iobase = pci_resource_start(dev, 0); 1890 outb(CH384_XINT_ENABLE_BIT, iobase + CH384_XINT_ENABLE_REG); 1891 1892 return max_port; 1893} 1894 1895static void pci_wch_ch38x_exit(struct pci_dev *dev) 1896{ 1897 unsigned long iobase; 1898 1899 iobase = pci_resource_start(dev, 0); 1900 outb(0x0, iobase + CH384_XINT_ENABLE_REG); 1901} 1902 1903 1904static int 1905pci_sunix_setup(struct serial_private *priv, 1906 const struct pciserial_board *board, 1907 struct uart_8250_port *port, int idx) 1908{ 1909 int bar; 1910 int offset; 1911 1912 port->port.flags |= UPF_FIXED_TYPE; 1913 port->port.type = PORT_SUNIX; 1914 1915 if (idx < 4) { 1916 bar = 0; 1917 offset = idx * board->uart_offset; 1918 } else { 1919 bar = 1; 1920 idx -= 4; 1921 idx = div_s64_rem(idx, 4, &offset); 1922 offset = idx * 64 + offset * board->uart_offset; 1923 } 1924 1925 return setup_port(priv, port, bar, offset, 0); 1926} 1927 1928static int 1929pci_moxa_setup(struct serial_private *priv, 1930 const struct pciserial_board *board, 1931 struct uart_8250_port *port, int idx) 1932{ 1933 unsigned int bar = FL_GET_BASE(board->flags); 1934 int offset; 1935 1936 if (board->num_ports == 4 && idx == 3) 1937 offset = 7 * board->uart_offset; 1938 else 1939 offset = idx * board->uart_offset; 1940 1941 return setup_port(priv, port, bar, offset, 0); 1942} 1943 1944#define PCI_VENDOR_ID_SBSMODULARIO 0x124B 1945#define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B 1946#define PCI_DEVICE_ID_OCTPRO 0x0001 1947#define PCI_SUBDEVICE_ID_OCTPRO232 0x0108 1948#define PCI_SUBDEVICE_ID_OCTPRO422 0x0208 1949#define PCI_SUBDEVICE_ID_POCTAL232 0x0308 1950#define PCI_SUBDEVICE_ID_POCTAL422 0x0408 1951#define PCI_SUBDEVICE_ID_SIIG_DUAL_00 0x2500 1952#define PCI_SUBDEVICE_ID_SIIG_DUAL_30 0x2530 1953#define PCI_VENDOR_ID_ADVANTECH 0x13fe 1954#define PCI_DEVICE_ID_INTEL_CE4100_UART 0x2e66 1955#define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620 1956#define PCI_DEVICE_ID_ADVANTECH_PCI3618 0x3618 1957#define PCI_DEVICE_ID_ADVANTECH_PCIf618 0xf618 1958#define PCI_DEVICE_ID_TITAN_200I 0x8028 1959#define PCI_DEVICE_ID_TITAN_400I 0x8048 1960#define PCI_DEVICE_ID_TITAN_800I 0x8088 1961#define PCI_DEVICE_ID_TITAN_800EH 0xA007 1962#define PCI_DEVICE_ID_TITAN_800EHB 0xA008 1963#define PCI_DEVICE_ID_TITAN_400EH 0xA009 1964#define PCI_DEVICE_ID_TITAN_100E 0xA010 1965#define PCI_DEVICE_ID_TITAN_200E 0xA012 1966#define PCI_DEVICE_ID_TITAN_400E 0xA013 1967#define PCI_DEVICE_ID_TITAN_800E 0xA014 1968#define PCI_DEVICE_ID_TITAN_200EI 0xA016 1969#define PCI_DEVICE_ID_TITAN_200EISI 0xA017 1970#define PCI_DEVICE_ID_TITAN_200V3 0xA306 1971#define PCI_DEVICE_ID_TITAN_400V3 0xA310 1972#define PCI_DEVICE_ID_TITAN_410V3 0xA312 1973#define PCI_DEVICE_ID_TITAN_800V3 0xA314 1974#define PCI_DEVICE_ID_TITAN_800V3B 0xA315 1975#define PCI_DEVICE_ID_OXSEMI_16PCI958 0x9538 1976#define PCIE_DEVICE_ID_NEO_2_OX_IBM 0x00F6 1977#define PCI_DEVICE_ID_PLX_CRONYX_OMEGA 0xc001 1978#define PCI_DEVICE_ID_INTEL_PATSBURG_KT 0x1d3d 1979#define PCI_VENDOR_ID_WCH 0x4348 1980#define PCI_DEVICE_ID_WCH_CH352_2S 0x3253 1981#define PCI_DEVICE_ID_WCH_CH353_4S 0x3453 1982#define PCI_DEVICE_ID_WCH_CH353_2S1PF 0x5046 1983#define PCI_DEVICE_ID_WCH_CH353_1S1P 0x5053 1984#define PCI_DEVICE_ID_WCH_CH353_2S1P 0x7053 1985#define PCI_DEVICE_ID_WCH_CH355_4S 0x7173 1986#define PCI_VENDOR_ID_AGESTAR 0x5372 1987#define PCI_DEVICE_ID_AGESTAR_9375 0x6872 1988#define PCI_VENDOR_ID_ASIX 0x9710 1989#define PCI_DEVICE_ID_BROADCOM_TRUMANAGE 0x160a 1990#define PCI_DEVICE_ID_AMCC_ADDIDATA_APCI7800 0x818e 1991 1992#define PCIE_VENDOR_ID_WCH 0x1c00 1993#define PCIE_DEVICE_ID_WCH_CH382_2S1P 0x3250 1994#define PCIE_DEVICE_ID_WCH_CH384_4S 0x3470 1995#define PCIE_DEVICE_ID_WCH_CH384_8S 0x3853 1996#define PCIE_DEVICE_ID_WCH_CH382_2S 0x3253 1997 1998#define PCI_DEVICE_ID_MOXA_CP102E 0x1024 1999#define PCI_DEVICE_ID_MOXA_CP102EL 0x1025 2000#define PCI_DEVICE_ID_MOXA_CP104EL_A 0x1045 2001#define PCI_DEVICE_ID_MOXA_CP114EL 0x1144 2002#define PCI_DEVICE_ID_MOXA_CP116E_A_A 0x1160 2003#define PCI_DEVICE_ID_MOXA_CP116E_A_B 0x1161 2004#define PCI_DEVICE_ID_MOXA_CP118EL_A 0x1182 2005#define PCI_DEVICE_ID_MOXA_CP118E_A_I 0x1183 2006#define PCI_DEVICE_ID_MOXA_CP132EL 0x1322 2007#define PCI_DEVICE_ID_MOXA_CP134EL_A 0x1342 2008#define PCI_DEVICE_ID_MOXA_CP138E_A 0x1381 2009#define PCI_DEVICE_ID_MOXA_CP168EL_A 0x1683 2010 2011/* Unknown vendors/cards - this should not be in linux/pci_ids.h */ 2012#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 2013#define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588 2014 2015/* 2016 * Master list of serial port init/setup/exit quirks. 2017 * This does not describe the general nature of the port. 2018 * (ie, baud base, number and location of ports, etc) 2019 * 2020 * This list is ordered alphabetically by vendor then device. 2021 * Specific entries must come before more generic entries. 2022 */ 2023static struct pci_serial_quirk pci_serial_quirks[] = { 2024 /* 2025 * ADDI-DATA GmbH communication cards <info@addi-data.com> 2026 */ 2027 { 2028 .vendor = PCI_VENDOR_ID_AMCC, 2029 .device = PCI_DEVICE_ID_AMCC_ADDIDATA_APCI7800, 2030 .subvendor = PCI_ANY_ID, 2031 .subdevice = PCI_ANY_ID, 2032 .setup = addidata_apci7800_setup, 2033 }, 2034 /* 2035 * AFAVLAB cards - these may be called via parport_serial 2036 * It is not clear whether this applies to all products. 2037 */ 2038 { 2039 .vendor = PCI_VENDOR_ID_AFAVLAB, 2040 .device = PCI_ANY_ID, 2041 .subvendor = PCI_ANY_ID, 2042 .subdevice = PCI_ANY_ID, 2043 .setup = afavlab_setup, 2044 }, 2045 /* 2046 * HP Diva 2047 */ 2048 { 2049 .vendor = PCI_VENDOR_ID_HP, 2050 .device = PCI_DEVICE_ID_HP_DIVA, 2051 .subvendor = PCI_ANY_ID, 2052 .subdevice = PCI_ANY_ID, 2053 .init = pci_hp_diva_init, 2054 .setup = pci_hp_diva_setup, 2055 }, 2056 /* 2057 * HPE PCI serial device 2058 */ 2059 { 2060 .vendor = PCI_VENDOR_ID_HP_3PAR, 2061 .device = PCI_DEVICE_ID_HPE_PCI_SERIAL, 2062 .subvendor = PCI_ANY_ID, 2063 .subdevice = PCI_ANY_ID, 2064 .setup = pci_hp_diva_setup, 2065 }, 2066 /* 2067 * Intel 2068 */ 2069 { 2070 .vendor = PCI_VENDOR_ID_INTEL, 2071 .device = PCI_DEVICE_ID_INTEL_80960_RP, 2072 .subvendor = 0xe4bf, 2073 .subdevice = PCI_ANY_ID, 2074 .init = pci_inteli960ni_init, 2075 .setup = pci_default_setup, 2076 }, 2077 { 2078 .vendor = PCI_VENDOR_ID_INTEL, 2079 .device = PCI_DEVICE_ID_INTEL_8257X_SOL, 2080 .subvendor = PCI_ANY_ID, 2081 .subdevice = PCI_ANY_ID, 2082 .setup = skip_tx_en_setup, 2083 }, 2084 { 2085 .vendor = PCI_VENDOR_ID_INTEL, 2086 .device = PCI_DEVICE_ID_INTEL_82573L_SOL, 2087 .subvendor = PCI_ANY_ID, 2088 .subdevice = PCI_ANY_ID, 2089 .setup = skip_tx_en_setup, 2090 }, 2091 { 2092 .vendor = PCI_VENDOR_ID_INTEL, 2093 .device = PCI_DEVICE_ID_INTEL_82573E_SOL, 2094 .subvendor = PCI_ANY_ID, 2095 .subdevice = PCI_ANY_ID, 2096 .setup = skip_tx_en_setup, 2097 }, 2098 { 2099 .vendor = PCI_VENDOR_ID_INTEL, 2100 .device = PCI_DEVICE_ID_INTEL_CE4100_UART, 2101 .subvendor = PCI_ANY_ID, 2102 .subdevice = PCI_ANY_ID, 2103 .setup = ce4100_serial_setup, 2104 }, 2105 { 2106 .vendor = PCI_VENDOR_ID_INTEL, 2107 .device = PCI_DEVICE_ID_INTEL_PATSBURG_KT, 2108 .subvendor = PCI_ANY_ID, 2109 .subdevice = PCI_ANY_ID, 2110 .setup = kt_serial_setup, 2111 }, 2112 /* 2113 * ITE 2114 */ 2115 { 2116 .vendor = PCI_VENDOR_ID_ITE, 2117 .device = PCI_DEVICE_ID_ITE_8872, 2118 .subvendor = PCI_ANY_ID, 2119 .subdevice = PCI_ANY_ID, 2120 .init = pci_ite887x_init, 2121 .setup = pci_default_setup, 2122 .exit = pci_ite887x_exit, 2123 }, 2124 /* 2125 * National Instruments 2126 */ 2127 { 2128 .vendor = PCI_VENDOR_ID_NI, 2129 .device = PCI_DEVICE_ID_NI_PCI23216, 2130 .subvendor = PCI_ANY_ID, 2131 .subdevice = PCI_ANY_ID, 2132 .init = pci_ni8420_init, 2133 .setup = pci_default_setup, 2134 .exit = pci_ni8420_exit, 2135 }, 2136 { 2137 .vendor = PCI_VENDOR_ID_NI, 2138 .device = PCI_DEVICE_ID_NI_PCI2328, 2139 .subvendor = PCI_ANY_ID, 2140 .subdevice = PCI_ANY_ID, 2141 .init = pci_ni8420_init, 2142 .setup = pci_default_setup, 2143 .exit = pci_ni8420_exit, 2144 }, 2145 { 2146 .vendor = PCI_VENDOR_ID_NI, 2147 .device = PCI_DEVICE_ID_NI_PCI2324, 2148 .subvendor = PCI_ANY_ID, 2149 .subdevice = PCI_ANY_ID, 2150 .init = pci_ni8420_init, 2151 .setup = pci_default_setup, 2152 .exit = pci_ni8420_exit, 2153 }, 2154 { 2155 .vendor = PCI_VENDOR_ID_NI, 2156 .device = PCI_DEVICE_ID_NI_PCI2322, 2157 .subvendor = PCI_ANY_ID, 2158 .subdevice = PCI_ANY_ID, 2159 .init = pci_ni8420_init, 2160 .setup = pci_default_setup, 2161 .exit = pci_ni8420_exit, 2162 }, 2163 { 2164 .vendor = PCI_VENDOR_ID_NI, 2165 .device = PCI_DEVICE_ID_NI_PCI2324I, 2166 .subvendor = PCI_ANY_ID, 2167 .subdevice = PCI_ANY_ID, 2168 .init = pci_ni8420_init, 2169 .setup = pci_default_setup, 2170 .exit = pci_ni8420_exit, 2171 }, 2172 { 2173 .vendor = PCI_VENDOR_ID_NI, 2174 .device = PCI_DEVICE_ID_NI_PCI2322I, 2175 .subvendor = PCI_ANY_ID, 2176 .subdevice = PCI_ANY_ID, 2177 .init = pci_ni8420_init, 2178 .setup = pci_default_setup, 2179 .exit = pci_ni8420_exit, 2180 }, 2181 { 2182 .vendor = PCI_VENDOR_ID_NI, 2183 .device = PCI_DEVICE_ID_NI_PXI8420_23216, 2184 .subvendor = PCI_ANY_ID, 2185 .subdevice = PCI_ANY_ID, 2186 .init = pci_ni8420_init, 2187 .setup = pci_default_setup, 2188 .exit = pci_ni8420_exit, 2189 }, 2190 { 2191 .vendor = PCI_VENDOR_ID_NI, 2192 .device = PCI_DEVICE_ID_NI_PXI8420_2328, 2193 .subvendor = PCI_ANY_ID, 2194 .subdevice = PCI_ANY_ID, 2195 .init = pci_ni8420_init, 2196 .setup = pci_default_setup, 2197 .exit = pci_ni8420_exit, 2198 }, 2199 { 2200 .vendor = PCI_VENDOR_ID_NI, 2201 .device = PCI_DEVICE_ID_NI_PXI8420_2324, 2202 .subvendor = PCI_ANY_ID, 2203 .subdevice = PCI_ANY_ID, 2204 .init = pci_ni8420_init, 2205 .setup = pci_default_setup, 2206 .exit = pci_ni8420_exit, 2207 }, 2208 { 2209 .vendor = PCI_VENDOR_ID_NI, 2210 .device = PCI_DEVICE_ID_NI_PXI8420_2322, 2211 .subvendor = PCI_ANY_ID, 2212 .subdevice = PCI_ANY_ID, 2213 .init = pci_ni8420_init, 2214 .setup = pci_default_setup, 2215 .exit = pci_ni8420_exit, 2216 }, 2217 { 2218 .vendor = PCI_VENDOR_ID_NI, 2219 .device = PCI_DEVICE_ID_NI_PXI8422_2324, 2220 .subvendor = PCI_ANY_ID, 2221 .subdevice = PCI_ANY_ID, 2222 .init = pci_ni8420_init, 2223 .setup = pci_default_setup, 2224 .exit = pci_ni8420_exit, 2225 }, 2226 { 2227 .vendor = PCI_VENDOR_ID_NI, 2228 .device = PCI_DEVICE_ID_NI_PXI8422_2322, 2229 .subvendor = PCI_ANY_ID, 2230 .subdevice = PCI_ANY_ID, 2231 .init = pci_ni8420_init, 2232 .setup = pci_default_setup, 2233 .exit = pci_ni8420_exit, 2234 }, 2235 { 2236 .vendor = PCI_VENDOR_ID_NI, 2237 .device = PCI_ANY_ID, 2238 .subvendor = PCI_ANY_ID, 2239 .subdevice = PCI_ANY_ID, 2240 .init = pci_ni8430_init, 2241 .setup = pci_ni8430_setup, 2242 .exit = pci_ni8430_exit, 2243 }, 2244 /* Quatech */ 2245 { 2246 .vendor = PCI_VENDOR_ID_QUATECH, 2247 .device = PCI_ANY_ID, 2248 .subvendor = PCI_ANY_ID, 2249 .subdevice = PCI_ANY_ID, 2250 .init = pci_quatech_init, 2251 .setup = pci_quatech_setup, 2252 }, 2253 /* 2254 * Panacom 2255 */ 2256 { 2257 .vendor = PCI_VENDOR_ID_PANACOM, 2258 .device = PCI_DEVICE_ID_PANACOM_QUADMODEM, 2259 .subvendor = PCI_ANY_ID, 2260 .subdevice = PCI_ANY_ID, 2261 .init = pci_plx9050_init, 2262 .setup = pci_default_setup, 2263 .exit = pci_plx9050_exit, 2264 }, 2265 { 2266 .vendor = PCI_VENDOR_ID_PANACOM, 2267 .device = PCI_DEVICE_ID_PANACOM_DUALMODEM, 2268 .subvendor = PCI_ANY_ID, 2269 .subdevice = PCI_ANY_ID, 2270 .init = pci_plx9050_init, 2271 .setup = pci_default_setup, 2272 .exit = pci_plx9050_exit, 2273 }, 2274 /* 2275 * PLX 2276 */ 2277 { 2278 .vendor = PCI_VENDOR_ID_PLX, 2279 .device = PCI_DEVICE_ID_PLX_9050, 2280 .subvendor = PCI_SUBVENDOR_ID_EXSYS, 2281 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055, 2282 .init = pci_plx9050_init, 2283 .setup = pci_default_setup, 2284 .exit = pci_plx9050_exit, 2285 }, 2286 { 2287 .vendor = PCI_VENDOR_ID_PLX, 2288 .device = PCI_DEVICE_ID_PLX_9050, 2289 .subvendor = PCI_SUBVENDOR_ID_KEYSPAN, 2290 .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2, 2291 .init = pci_plx9050_init, 2292 .setup = pci_default_setup, 2293 .exit = pci_plx9050_exit, 2294 }, 2295 { 2296 .vendor = PCI_VENDOR_ID_PLX, 2297 .device = PCI_DEVICE_ID_PLX_ROMULUS, 2298 .subvendor = PCI_VENDOR_ID_PLX, 2299 .subdevice = PCI_DEVICE_ID_PLX_ROMULUS, 2300 .init = pci_plx9050_init, 2301 .setup = pci_default_setup, 2302 .exit = pci_plx9050_exit, 2303 }, 2304 /* 2305 * SBS Technologies, Inc., PMC-OCTALPRO 232 2306 */ 2307 { 2308 .vendor = PCI_VENDOR_ID_SBSMODULARIO, 2309 .device = PCI_DEVICE_ID_OCTPRO, 2310 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO, 2311 .subdevice = PCI_SUBDEVICE_ID_OCTPRO232, 2312 .init = sbs_init, 2313 .setup = sbs_setup, 2314 .exit = sbs_exit, 2315 }, 2316 /* 2317 * SBS Technologies, Inc., PMC-OCTALPRO 422 2318 */ 2319 { 2320 .vendor = PCI_VENDOR_ID_SBSMODULARIO, 2321 .device = PCI_DEVICE_ID_OCTPRO, 2322 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO, 2323 .subdevice = PCI_SUBDEVICE_ID_OCTPRO422, 2324 .init = sbs_init, 2325 .setup = sbs_setup, 2326 .exit = sbs_exit, 2327 }, 2328 /* 2329 * SBS Technologies, Inc., P-Octal 232 2330 */ 2331 { 2332 .vendor = PCI_VENDOR_ID_SBSMODULARIO, 2333 .device = PCI_DEVICE_ID_OCTPRO, 2334 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO, 2335 .subdevice = PCI_SUBDEVICE_ID_POCTAL232, 2336 .init = sbs_init, 2337 .setup = sbs_setup, 2338 .exit = sbs_exit, 2339 }, 2340 /* 2341 * SBS Technologies, Inc., P-Octal 422 2342 */ 2343 { 2344 .vendor = PCI_VENDOR_ID_SBSMODULARIO, 2345 .device = PCI_DEVICE_ID_OCTPRO, 2346 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO, 2347 .subdevice = PCI_SUBDEVICE_ID_POCTAL422, 2348 .init = sbs_init, 2349 .setup = sbs_setup, 2350 .exit = sbs_exit, 2351 }, 2352 /* 2353 * SIIG cards - these may be called via parport_serial 2354 */ 2355 { 2356 .vendor = PCI_VENDOR_ID_SIIG, 2357 .device = PCI_ANY_ID, 2358 .subvendor = PCI_ANY_ID, 2359 .subdevice = PCI_ANY_ID, 2360 .init = pci_siig_init, 2361 .setup = pci_siig_setup, 2362 }, 2363 /* 2364 * Titan cards 2365 */ 2366 { 2367 .vendor = PCI_VENDOR_ID_TITAN, 2368 .device = PCI_DEVICE_ID_TITAN_400L, 2369 .subvendor = PCI_ANY_ID, 2370 .subdevice = PCI_ANY_ID, 2371 .setup = titan_400l_800l_setup, 2372 }, 2373 { 2374 .vendor = PCI_VENDOR_ID_TITAN, 2375 .device = PCI_DEVICE_ID_TITAN_800L, 2376 .subvendor = PCI_ANY_ID, 2377 .subdevice = PCI_ANY_ID, 2378 .setup = titan_400l_800l_setup, 2379 }, 2380 /* 2381 * Timedia cards 2382 */ 2383 { 2384 .vendor = PCI_VENDOR_ID_TIMEDIA, 2385 .device = PCI_DEVICE_ID_TIMEDIA_1889, 2386 .subvendor = PCI_VENDOR_ID_TIMEDIA, 2387 .subdevice = PCI_ANY_ID, 2388 .probe = pci_timedia_probe, 2389 .init = pci_timedia_init, 2390 .setup = pci_timedia_setup, 2391 }, 2392 { 2393 .vendor = PCI_VENDOR_ID_TIMEDIA, 2394 .device = PCI_ANY_ID, 2395 .subvendor = PCI_ANY_ID, 2396 .subdevice = PCI_ANY_ID, 2397 .setup = pci_timedia_setup, 2398 }, 2399 /* 2400 * Sunix PCI serial boards 2401 */ 2402 { 2403 .vendor = PCI_VENDOR_ID_SUNIX, 2404 .device = PCI_DEVICE_ID_SUNIX_1999, 2405 .subvendor = PCI_VENDOR_ID_SUNIX, 2406 .subdevice = PCI_ANY_ID, 2407 .setup = pci_sunix_setup, 2408 }, 2409 /* 2410 * Xircom cards 2411 */ 2412 { 2413 .vendor = PCI_VENDOR_ID_XIRCOM, 2414 .device = PCI_DEVICE_ID_XIRCOM_X3201_MDM, 2415 .subvendor = PCI_ANY_ID, 2416 .subdevice = PCI_ANY_ID, 2417 .init = pci_xircom_init, 2418 .setup = pci_default_setup, 2419 }, 2420 /* 2421 * Netmos cards - these may be called via parport_serial 2422 */ 2423 { 2424 .vendor = PCI_VENDOR_ID_NETMOS, 2425 .device = PCI_ANY_ID, 2426 .subvendor = PCI_ANY_ID, 2427 .subdevice = PCI_ANY_ID, 2428 .init = pci_netmos_init, 2429 .setup = pci_netmos_9900_setup, 2430 }, 2431 /* 2432 * EndRun Technologies 2433 */ 2434 { 2435 .vendor = PCI_VENDOR_ID_ENDRUN, 2436 .device = PCI_ANY_ID, 2437 .subvendor = PCI_ANY_ID, 2438 .subdevice = PCI_ANY_ID, 2439 .init = pci_oxsemi_tornado_init, 2440 .setup = pci_default_setup, 2441 }, 2442 /* 2443 * For Oxford Semiconductor Tornado based devices 2444 */ 2445 { 2446 .vendor = PCI_VENDOR_ID_OXSEMI, 2447 .device = PCI_ANY_ID, 2448 .subvendor = PCI_ANY_ID, 2449 .subdevice = PCI_ANY_ID, 2450 .init = pci_oxsemi_tornado_init, 2451 .setup = pci_oxsemi_tornado_setup, 2452 }, 2453 { 2454 .vendor = PCI_VENDOR_ID_MAINPINE, 2455 .device = PCI_ANY_ID, 2456 .subvendor = PCI_ANY_ID, 2457 .subdevice = PCI_ANY_ID, 2458 .init = pci_oxsemi_tornado_init, 2459 .setup = pci_oxsemi_tornado_setup, 2460 }, 2461 { 2462 .vendor = PCI_VENDOR_ID_DIGI, 2463 .device = PCIE_DEVICE_ID_NEO_2_OX_IBM, 2464 .subvendor = PCI_SUBVENDOR_ID_IBM, 2465 .subdevice = PCI_ANY_ID, 2466 .init = pci_oxsemi_tornado_init, 2467 .setup = pci_oxsemi_tornado_setup, 2468 }, 2469 { 2470 .vendor = PCI_VENDOR_ID_INTEL, 2471 .device = 0x8811, 2472 .subvendor = PCI_ANY_ID, 2473 .subdevice = PCI_ANY_ID, 2474 .init = pci_eg20t_init, 2475 .setup = pci_default_setup, 2476 }, 2477 { 2478 .vendor = PCI_VENDOR_ID_INTEL, 2479 .device = 0x8812, 2480 .subvendor = PCI_ANY_ID, 2481 .subdevice = PCI_ANY_ID, 2482 .init = pci_eg20t_init, 2483 .setup = pci_default_setup, 2484 }, 2485 { 2486 .vendor = PCI_VENDOR_ID_INTEL, 2487 .device = 0x8813, 2488 .subvendor = PCI_ANY_ID, 2489 .subdevice = PCI_ANY_ID, 2490 .init = pci_eg20t_init, 2491 .setup = pci_default_setup, 2492 }, 2493 { 2494 .vendor = PCI_VENDOR_ID_INTEL, 2495 .device = 0x8814, 2496 .subvendor = PCI_ANY_ID, 2497 .subdevice = PCI_ANY_ID, 2498 .init = pci_eg20t_init, 2499 .setup = pci_default_setup, 2500 }, 2501 { 2502 .vendor = 0x10DB, 2503 .device = 0x8027, 2504 .subvendor = PCI_ANY_ID, 2505 .subdevice = PCI_ANY_ID, 2506 .init = pci_eg20t_init, 2507 .setup = pci_default_setup, 2508 }, 2509 { 2510 .vendor = 0x10DB, 2511 .device = 0x8028, 2512 .subvendor = PCI_ANY_ID, 2513 .subdevice = PCI_ANY_ID, 2514 .init = pci_eg20t_init, 2515 .setup = pci_default_setup, 2516 }, 2517 { 2518 .vendor = 0x10DB, 2519 .device = 0x8029, 2520 .subvendor = PCI_ANY_ID, 2521 .subdevice = PCI_ANY_ID, 2522 .init = pci_eg20t_init, 2523 .setup = pci_default_setup, 2524 }, 2525 { 2526 .vendor = 0x10DB, 2527 .device = 0x800C, 2528 .subvendor = PCI_ANY_ID, 2529 .subdevice = PCI_ANY_ID, 2530 .init = pci_eg20t_init, 2531 .setup = pci_default_setup, 2532 }, 2533 { 2534 .vendor = 0x10DB, 2535 .device = 0x800D, 2536 .subvendor = PCI_ANY_ID, 2537 .subdevice = PCI_ANY_ID, 2538 .init = pci_eg20t_init, 2539 .setup = pci_default_setup, 2540 }, 2541 /* 2542 * Cronyx Omega PCI (PLX-chip based) 2543 */ 2544 { 2545 .vendor = PCI_VENDOR_ID_PLX, 2546 .device = PCI_DEVICE_ID_PLX_CRONYX_OMEGA, 2547 .subvendor = PCI_ANY_ID, 2548 .subdevice = PCI_ANY_ID, 2549 .setup = pci_omegapci_setup, 2550 }, 2551 /* WCH CH353 1S1P card (16550 clone) */ 2552 { 2553 .vendor = PCI_VENDOR_ID_WCH, 2554 .device = PCI_DEVICE_ID_WCH_CH353_1S1P, 2555 .subvendor = PCI_ANY_ID, 2556 .subdevice = PCI_ANY_ID, 2557 .setup = pci_wch_ch353_setup, 2558 }, 2559 /* WCH CH353 2S1P card (16550 clone) */ 2560 { 2561 .vendor = PCI_VENDOR_ID_WCH, 2562 .device = PCI_DEVICE_ID_WCH_CH353_2S1P, 2563 .subvendor = PCI_ANY_ID, 2564 .subdevice = PCI_ANY_ID, 2565 .setup = pci_wch_ch353_setup, 2566 }, 2567 /* WCH CH353 4S card (16550 clone) */ 2568 { 2569 .vendor = PCI_VENDOR_ID_WCH, 2570 .device = PCI_DEVICE_ID_WCH_CH353_4S, 2571 .subvendor = PCI_ANY_ID, 2572 .subdevice = PCI_ANY_ID, 2573 .setup = pci_wch_ch353_setup, 2574 }, 2575 /* WCH CH353 2S1PF card (16550 clone) */ 2576 { 2577 .vendor = PCI_VENDOR_ID_WCH, 2578 .device = PCI_DEVICE_ID_WCH_CH353_2S1PF, 2579 .subvendor = PCI_ANY_ID, 2580 .subdevice = PCI_ANY_ID, 2581 .setup = pci_wch_ch353_setup, 2582 }, 2583 /* WCH CH352 2S card (16550 clone) */ 2584 { 2585 .vendor = PCI_VENDOR_ID_WCH, 2586 .device = PCI_DEVICE_ID_WCH_CH352_2S, 2587 .subvendor = PCI_ANY_ID, 2588 .subdevice = PCI_ANY_ID, 2589 .setup = pci_wch_ch353_setup, 2590 }, 2591 /* WCH CH355 4S card (16550 clone) */ 2592 { 2593 .vendor = PCI_VENDOR_ID_WCH, 2594 .device = PCI_DEVICE_ID_WCH_CH355_4S, 2595 .subvendor = PCI_ANY_ID, 2596 .subdevice = PCI_ANY_ID, 2597 .setup = pci_wch_ch355_setup, 2598 }, 2599 /* WCH CH382 2S card (16850 clone) */ 2600 { 2601 .vendor = PCIE_VENDOR_ID_WCH, 2602 .device = PCIE_DEVICE_ID_WCH_CH382_2S, 2603 .subvendor = PCI_ANY_ID, 2604 .subdevice = PCI_ANY_ID, 2605 .setup = pci_wch_ch38x_setup, 2606 }, 2607 /* WCH CH382 2S1P card (16850 clone) */ 2608 { 2609 .vendor = PCIE_VENDOR_ID_WCH, 2610 .device = PCIE_DEVICE_ID_WCH_CH382_2S1P, 2611 .subvendor = PCI_ANY_ID, 2612 .subdevice = PCI_ANY_ID, 2613 .setup = pci_wch_ch38x_setup, 2614 }, 2615 /* WCH CH384 4S card (16850 clone) */ 2616 { 2617 .vendor = PCIE_VENDOR_ID_WCH, 2618 .device = PCIE_DEVICE_ID_WCH_CH384_4S, 2619 .subvendor = PCI_ANY_ID, 2620 .subdevice = PCI_ANY_ID, 2621 .setup = pci_wch_ch38x_setup, 2622 }, 2623 /* WCH CH384 8S card (16850 clone) */ 2624 { 2625 .vendor = PCIE_VENDOR_ID_WCH, 2626 .device = PCIE_DEVICE_ID_WCH_CH384_8S, 2627 .subvendor = PCI_ANY_ID, 2628 .subdevice = PCI_ANY_ID, 2629 .init = pci_wch_ch38x_init, 2630 .exit = pci_wch_ch38x_exit, 2631 .setup = pci_wch_ch38x_setup, 2632 }, 2633 /* 2634 * ASIX devices with FIFO bug 2635 */ 2636 { 2637 .vendor = PCI_VENDOR_ID_ASIX, 2638 .device = PCI_ANY_ID, 2639 .subvendor = PCI_ANY_ID, 2640 .subdevice = PCI_ANY_ID, 2641 .setup = pci_asix_setup, 2642 }, 2643 /* 2644 * Broadcom TruManage (NetXtreme) 2645 */ 2646 { 2647 .vendor = PCI_VENDOR_ID_BROADCOM, 2648 .device = PCI_DEVICE_ID_BROADCOM_TRUMANAGE, 2649 .subvendor = PCI_ANY_ID, 2650 .subdevice = PCI_ANY_ID, 2651 .setup = pci_brcm_trumanage_setup, 2652 }, 2653 { 2654 .vendor = 0x1c29, 2655 .device = 0x1104, 2656 .subvendor = PCI_ANY_ID, 2657 .subdevice = PCI_ANY_ID, 2658 .setup = pci_fintek_setup, 2659 .init = pci_fintek_init, 2660 }, 2661 { 2662 .vendor = 0x1c29, 2663 .device = 0x1108, 2664 .subvendor = PCI_ANY_ID, 2665 .subdevice = PCI_ANY_ID, 2666 .setup = pci_fintek_setup, 2667 .init = pci_fintek_init, 2668 }, 2669 { 2670 .vendor = 0x1c29, 2671 .device = 0x1112, 2672 .subvendor = PCI_ANY_ID, 2673 .subdevice = PCI_ANY_ID, 2674 .setup = pci_fintek_setup, 2675 .init = pci_fintek_init, 2676 }, 2677 /* 2678 * MOXA 2679 */ 2680 { 2681 .vendor = PCI_VENDOR_ID_MOXA, 2682 .device = PCI_ANY_ID, 2683 .subvendor = PCI_ANY_ID, 2684 .subdevice = PCI_ANY_ID, 2685 .setup = pci_moxa_setup, 2686 }, 2687 { 2688 .vendor = 0x1c29, 2689 .device = 0x1204, 2690 .subvendor = PCI_ANY_ID, 2691 .subdevice = PCI_ANY_ID, 2692 .setup = pci_fintek_f815xxa_setup, 2693 .init = pci_fintek_f815xxa_init, 2694 }, 2695 { 2696 .vendor = 0x1c29, 2697 .device = 0x1208, 2698 .subvendor = PCI_ANY_ID, 2699 .subdevice = PCI_ANY_ID, 2700 .setup = pci_fintek_f815xxa_setup, 2701 .init = pci_fintek_f815xxa_init, 2702 }, 2703 { 2704 .vendor = 0x1c29, 2705 .device = 0x1212, 2706 .subvendor = PCI_ANY_ID, 2707 .subdevice = PCI_ANY_ID, 2708 .setup = pci_fintek_f815xxa_setup, 2709 .init = pci_fintek_f815xxa_init, 2710 }, 2711 2712 /* 2713 * Default "match everything" terminator entry 2714 */ 2715 { 2716 .vendor = PCI_ANY_ID, 2717 .device = PCI_ANY_ID, 2718 .subvendor = PCI_ANY_ID, 2719 .subdevice = PCI_ANY_ID, 2720 .setup = pci_default_setup, 2721 } 2722}; 2723 2724static inline int quirk_id_matches(u32 quirk_id, u32 dev_id) 2725{ 2726 return quirk_id == PCI_ANY_ID || quirk_id == dev_id; 2727} 2728 2729static struct pci_serial_quirk *find_quirk(struct pci_dev *dev) 2730{ 2731 struct pci_serial_quirk *quirk; 2732 2733 for (quirk = pci_serial_quirks; ; quirk++) 2734 if (quirk_id_matches(quirk->vendor, dev->vendor) && 2735 quirk_id_matches(quirk->device, dev->device) && 2736 quirk_id_matches(quirk->subvendor, dev->subsystem_vendor) && 2737 quirk_id_matches(quirk->subdevice, dev->subsystem_device)) 2738 break; 2739 return quirk; 2740} 2741 2742/* 2743 * This is the configuration table for all of the PCI serial boards 2744 * which we support. It is directly indexed by the pci_board_num_t enum 2745 * value, which is encoded in the pci_device_id PCI probe table's 2746 * driver_data member. 2747 * 2748 * The makeup of these names are: 2749 * pbn_bn{_bt}_n_baud{_offsetinhex} 2750 * 2751 * bn = PCI BAR number 2752 * bt = Index using PCI BARs 2753 * n = number of serial ports 2754 * baud = baud rate 2755 * offsetinhex = offset for each sequential port (in hex) 2756 * 2757 * This table is sorted by (in order): bn, bt, baud, offsetindex, n. 2758 * 2759 * Please note: in theory if n = 1, _bt infix should make no difference. 2760 * ie, pbn_b0_1_115200 is the same as pbn_b0_bt_1_115200 2761 */ 2762enum pci_board_num_t { 2763 pbn_default = 0, 2764 2765 pbn_b0_1_115200, 2766 pbn_b0_2_115200, 2767 pbn_b0_4_115200, 2768 pbn_b0_5_115200, 2769 pbn_b0_8_115200, 2770 2771 pbn_b0_1_921600, 2772 pbn_b0_2_921600, 2773 pbn_b0_4_921600, 2774 2775 pbn_b0_2_1130000, 2776 2777 pbn_b0_4_1152000, 2778 2779 pbn_b0_4_1250000, 2780 2781 pbn_b0_2_1843200, 2782 pbn_b0_4_1843200, 2783 2784 pbn_b0_1_15625000, 2785 2786 pbn_b0_bt_1_115200, 2787 pbn_b0_bt_2_115200, 2788 pbn_b0_bt_4_115200, 2789 pbn_b0_bt_8_115200, 2790 2791 pbn_b0_bt_1_460800, 2792 pbn_b0_bt_2_460800, 2793 pbn_b0_bt_4_460800, 2794 2795 pbn_b0_bt_1_921600, 2796 pbn_b0_bt_2_921600, 2797 pbn_b0_bt_4_921600, 2798 pbn_b0_bt_8_921600, 2799 2800 pbn_b1_1_115200, 2801 pbn_b1_2_115200, 2802 pbn_b1_4_115200, 2803 pbn_b1_8_115200, 2804 pbn_b1_16_115200, 2805 2806 pbn_b1_1_921600, 2807 pbn_b1_2_921600, 2808 pbn_b1_4_921600, 2809 pbn_b1_8_921600, 2810 2811 pbn_b1_2_1250000, 2812 2813 pbn_b1_bt_1_115200, 2814 pbn_b1_bt_2_115200, 2815 pbn_b1_bt_4_115200, 2816 2817 pbn_b1_bt_2_921600, 2818 2819 pbn_b1_1_1382400, 2820 pbn_b1_2_1382400, 2821 pbn_b1_4_1382400, 2822 pbn_b1_8_1382400, 2823 2824 pbn_b2_1_115200, 2825 pbn_b2_2_115200, 2826 pbn_b2_4_115200, 2827 pbn_b2_8_115200, 2828 2829 pbn_b2_1_460800, 2830 pbn_b2_4_460800, 2831 pbn_b2_8_460800, 2832 pbn_b2_16_460800, 2833 2834 pbn_b2_1_921600, 2835 pbn_b2_4_921600, 2836 pbn_b2_8_921600, 2837 2838 pbn_b2_8_1152000, 2839 2840 pbn_b2_bt_1_115200, 2841 pbn_b2_bt_2_115200, 2842 pbn_b2_bt_4_115200, 2843 2844 pbn_b2_bt_2_921600, 2845 pbn_b2_bt_4_921600, 2846 2847 pbn_b3_2_115200, 2848 pbn_b3_4_115200, 2849 pbn_b3_8_115200, 2850 2851 pbn_b4_bt_2_921600, 2852 pbn_b4_bt_4_921600, 2853 pbn_b4_bt_8_921600, 2854 2855 /* 2856 * Board-specific versions. 2857 */ 2858 pbn_panacom, 2859 pbn_panacom2, 2860 pbn_panacom4, 2861 pbn_plx_romulus, 2862 pbn_oxsemi, 2863 pbn_oxsemi_1_15625000, 2864 pbn_oxsemi_2_15625000, 2865 pbn_oxsemi_4_15625000, 2866 pbn_oxsemi_8_15625000, 2867 pbn_intel_i960, 2868 pbn_sgi_ioc3, 2869 pbn_computone_4, 2870 pbn_computone_6, 2871 pbn_computone_8, 2872 pbn_sbsxrsio, 2873 pbn_pasemi_1682M, 2874 pbn_ni8430_2, 2875 pbn_ni8430_4, 2876 pbn_ni8430_8, 2877 pbn_ni8430_16, 2878 pbn_ADDIDATA_PCIe_1_3906250, 2879 pbn_ADDIDATA_PCIe_2_3906250, 2880 pbn_ADDIDATA_PCIe_4_3906250, 2881 pbn_ADDIDATA_PCIe_8_3906250, 2882 pbn_ce4100_1_115200, 2883 pbn_omegapci, 2884 pbn_NETMOS9900_2s_115200, 2885 pbn_brcm_trumanage, 2886 pbn_fintek_4, 2887 pbn_fintek_8, 2888 pbn_fintek_12, 2889 pbn_fintek_F81504A, 2890 pbn_fintek_F81508A, 2891 pbn_fintek_F81512A, 2892 pbn_wch382_2, 2893 pbn_wch384_4, 2894 pbn_wch384_8, 2895 pbn_sunix_pci_1s, 2896 pbn_sunix_pci_2s, 2897 pbn_sunix_pci_4s, 2898 pbn_sunix_pci_8s, 2899 pbn_sunix_pci_16s, 2900 pbn_titan_1_4000000, 2901 pbn_titan_2_4000000, 2902 pbn_titan_4_4000000, 2903 pbn_titan_8_4000000, 2904 pbn_moxa8250_2p, 2905 pbn_moxa8250_4p, 2906 pbn_moxa8250_8p, 2907}; 2908 2909/* 2910 * uart_offset - the space between channels 2911 * reg_shift - describes how the UART registers are mapped 2912 * to PCI memory by the card. 2913 * For example IER register on SBS, Inc. PMC-OctPro is located at 2914 * offset 0x10 from the UART base, while UART_IER is defined as 1 2915 * in include/linux/serial_reg.h, 2916 * see first lines of serial_in() and serial_out() in 8250.c 2917*/ 2918 2919static struct pciserial_board pci_boards[] = { 2920 [pbn_default] = { 2921 .flags = FL_BASE0, 2922 .num_ports = 1, 2923 .base_baud = 115200, 2924 .uart_offset = 8, 2925 }, 2926 [pbn_b0_1_115200] = { 2927 .flags = FL_BASE0, 2928 .num_ports = 1, 2929 .base_baud = 115200, 2930 .uart_offset = 8, 2931 }, 2932 [pbn_b0_2_115200] = { 2933 .flags = FL_BASE0, 2934 .num_ports = 2, 2935 .base_baud = 115200, 2936 .uart_offset = 8, 2937 }, 2938 [pbn_b0_4_115200] = { 2939 .flags = FL_BASE0, 2940 .num_ports = 4, 2941 .base_baud = 115200, 2942 .uart_offset = 8, 2943 }, 2944 [pbn_b0_5_115200] = { 2945 .flags = FL_BASE0, 2946 .num_ports = 5, 2947 .base_baud = 115200, 2948 .uart_offset = 8, 2949 }, 2950 [pbn_b0_8_115200] = { 2951 .flags = FL_BASE0, 2952 .num_ports = 8, 2953 .base_baud = 115200, 2954 .uart_offset = 8, 2955 }, 2956 [pbn_b0_1_921600] = { 2957 .flags = FL_BASE0, 2958 .num_ports = 1, 2959 .base_baud = 921600, 2960 .uart_offset = 8, 2961 }, 2962 [pbn_b0_2_921600] = { 2963 .flags = FL_BASE0, 2964 .num_ports = 2, 2965 .base_baud = 921600, 2966 .uart_offset = 8, 2967 }, 2968 [pbn_b0_4_921600] = { 2969 .flags = FL_BASE0, 2970 .num_ports = 4, 2971 .base_baud = 921600, 2972 .uart_offset = 8, 2973 }, 2974 2975 [pbn_b0_2_1130000] = { 2976 .flags = FL_BASE0, 2977 .num_ports = 2, 2978 .base_baud = 1130000, 2979 .uart_offset = 8, 2980 }, 2981 2982 [pbn_b0_4_1152000] = { 2983 .flags = FL_BASE0, 2984 .num_ports = 4, 2985 .base_baud = 1152000, 2986 .uart_offset = 8, 2987 }, 2988 2989 [pbn_b0_4_1250000] = { 2990 .flags = FL_BASE0, 2991 .num_ports = 4, 2992 .base_baud = 1250000, 2993 .uart_offset = 8, 2994 }, 2995 2996 [pbn_b0_2_1843200] = { 2997 .flags = FL_BASE0, 2998 .num_ports = 2, 2999 .base_baud = 1843200, 3000 .uart_offset = 8, 3001 }, 3002 [pbn_b0_4_1843200] = { 3003 .flags = FL_BASE0, 3004 .num_ports = 4, 3005 .base_baud = 1843200, 3006 .uart_offset = 8, 3007 }, 3008 3009 [pbn_b0_1_15625000] = { 3010 .flags = FL_BASE0, 3011 .num_ports = 1, 3012 .base_baud = 15625000, 3013 .uart_offset = 8, 3014 }, 3015 3016 [pbn_b0_bt_1_115200] = { 3017 .flags = FL_BASE0|FL_BASE_BARS, 3018 .num_ports = 1, 3019 .base_baud = 115200, 3020 .uart_offset = 8, 3021 }, 3022 [pbn_b0_bt_2_115200] = { 3023 .flags = FL_BASE0|FL_BASE_BARS, 3024 .num_ports = 2, 3025 .base_baud = 115200, 3026 .uart_offset = 8, 3027 }, 3028 [pbn_b0_bt_4_115200] = { 3029 .flags = FL_BASE0|FL_BASE_BARS, 3030 .num_ports = 4, 3031 .base_baud = 115200, 3032 .uart_offset = 8, 3033 }, 3034 [pbn_b0_bt_8_115200] = { 3035 .flags = FL_BASE0|FL_BASE_BARS, 3036 .num_ports = 8, 3037 .base_baud = 115200, 3038 .uart_offset = 8, 3039 }, 3040 3041 [pbn_b0_bt_1_460800] = { 3042 .flags = FL_BASE0|FL_BASE_BARS, 3043 .num_ports = 1, 3044 .base_baud = 460800, 3045 .uart_offset = 8, 3046 }, 3047 [pbn_b0_bt_2_460800] = { 3048 .flags = FL_BASE0|FL_BASE_BARS, 3049 .num_ports = 2, 3050 .base_baud = 460800, 3051 .uart_offset = 8, 3052 }, 3053 [pbn_b0_bt_4_460800] = { 3054 .flags = FL_BASE0|FL_BASE_BARS, 3055 .num_ports = 4, 3056 .base_baud = 460800, 3057 .uart_offset = 8, 3058 }, 3059 3060 [pbn_b0_bt_1_921600] = { 3061 .flags = FL_BASE0|FL_BASE_BARS, 3062 .num_ports = 1, 3063 .base_baud = 921600, 3064 .uart_offset = 8, 3065 }, 3066 [pbn_b0_bt_2_921600] = { 3067 .flags = FL_BASE0|FL_BASE_BARS, 3068 .num_ports = 2, 3069 .base_baud = 921600, 3070 .uart_offset = 8, 3071 }, 3072 [pbn_b0_bt_4_921600] = { 3073 .flags = FL_BASE0|FL_BASE_BARS, 3074 .num_ports = 4, 3075 .base_baud = 921600, 3076 .uart_offset = 8, 3077 }, 3078 [pbn_b0_bt_8_921600] = { 3079 .flags = FL_BASE0|FL_BASE_BARS, 3080 .num_ports = 8, 3081 .base_baud = 921600, 3082 .uart_offset = 8, 3083 }, 3084 3085 [pbn_b1_1_115200] = { 3086 .flags = FL_BASE1, 3087 .num_ports = 1, 3088 .base_baud = 115200, 3089 .uart_offset = 8, 3090 }, 3091 [pbn_b1_2_115200] = { 3092 .flags = FL_BASE1, 3093 .num_ports = 2, 3094 .base_baud = 115200, 3095 .uart_offset = 8, 3096 }, 3097 [pbn_b1_4_115200] = { 3098 .flags = FL_BASE1, 3099 .num_ports = 4, 3100 .base_baud = 115200, 3101 .uart_offset = 8, 3102 }, 3103 [pbn_b1_8_115200] = { 3104 .flags = FL_BASE1, 3105 .num_ports = 8, 3106 .base_baud = 115200, 3107 .uart_offset = 8, 3108 }, 3109 [pbn_b1_16_115200] = { 3110 .flags = FL_BASE1, 3111 .num_ports = 16, 3112 .base_baud = 115200, 3113 .uart_offset = 8, 3114 }, 3115 3116 [pbn_b1_1_921600] = { 3117 .flags = FL_BASE1, 3118 .num_ports = 1, 3119 .base_baud = 921600, 3120 .uart_offset = 8, 3121 }, 3122 [pbn_b1_2_921600] = { 3123 .flags = FL_BASE1, 3124 .num_ports = 2, 3125 .base_baud = 921600, 3126 .uart_offset = 8, 3127 }, 3128 [pbn_b1_4_921600] = { 3129 .flags = FL_BASE1, 3130 .num_ports = 4, 3131 .base_baud = 921600, 3132 .uart_offset = 8, 3133 }, 3134 [pbn_b1_8_921600] = { 3135 .flags = FL_BASE1, 3136 .num_ports = 8, 3137 .base_baud = 921600, 3138 .uart_offset = 8, 3139 }, 3140 [pbn_b1_2_1250000] = { 3141 .flags = FL_BASE1, 3142 .num_ports = 2, 3143 .base_baud = 1250000, 3144 .uart_offset = 8, 3145 }, 3146 3147 [pbn_b1_bt_1_115200] = { 3148 .flags = FL_BASE1|FL_BASE_BARS, 3149 .num_ports = 1, 3150 .base_baud = 115200, 3151 .uart_offset = 8, 3152 }, 3153 [pbn_b1_bt_2_115200] = { 3154 .flags = FL_BASE1|FL_BASE_BARS, 3155 .num_ports = 2, 3156 .base_baud = 115200, 3157 .uart_offset = 8, 3158 }, 3159 [pbn_b1_bt_4_115200] = { 3160 .flags = FL_BASE1|FL_BASE_BARS, 3161 .num_ports = 4, 3162 .base_baud = 115200, 3163 .uart_offset = 8, 3164 }, 3165 3166 [pbn_b1_bt_2_921600] = { 3167 .flags = FL_BASE1|FL_BASE_BARS, 3168 .num_ports = 2, 3169 .base_baud = 921600, 3170 .uart_offset = 8, 3171 }, 3172 3173 [pbn_b1_1_1382400] = { 3174 .flags = FL_BASE1, 3175 .num_ports = 1, 3176 .base_baud = 1382400, 3177 .uart_offset = 8, 3178 }, 3179 [pbn_b1_2_1382400] = { 3180 .flags = FL_BASE1, 3181 .num_ports = 2, 3182 .base_baud = 1382400, 3183 .uart_offset = 8, 3184 }, 3185 [pbn_b1_4_1382400] = { 3186 .flags = FL_BASE1, 3187 .num_ports = 4, 3188 .base_baud = 1382400, 3189 .uart_offset = 8, 3190 }, 3191 [pbn_b1_8_1382400] = { 3192 .flags = FL_BASE1, 3193 .num_ports = 8, 3194 .base_baud = 1382400, 3195 .uart_offset = 8, 3196 }, 3197 3198 [pbn_b2_1_115200] = { 3199 .flags = FL_BASE2, 3200 .num_ports = 1, 3201 .base_baud = 115200, 3202 .uart_offset = 8, 3203 }, 3204 [pbn_b2_2_115200] = { 3205 .flags = FL_BASE2, 3206 .num_ports = 2, 3207 .base_baud = 115200, 3208 .uart_offset = 8, 3209 }, 3210 [pbn_b2_4_115200] = { 3211 .flags = FL_BASE2, 3212 .num_ports = 4, 3213 .base_baud = 115200, 3214 .uart_offset = 8, 3215 }, 3216 [pbn_b2_8_115200] = { 3217 .flags = FL_BASE2, 3218 .num_ports = 8, 3219 .base_baud = 115200, 3220 .uart_offset = 8, 3221 }, 3222 3223 [pbn_b2_1_460800] = { 3224 .flags = FL_BASE2, 3225 .num_ports = 1, 3226 .base_baud = 460800, 3227 .uart_offset = 8, 3228 }, 3229 [pbn_b2_4_460800] = { 3230 .flags = FL_BASE2, 3231 .num_ports = 4, 3232 .base_baud = 460800, 3233 .uart_offset = 8, 3234 }, 3235 [pbn_b2_8_460800] = { 3236 .flags = FL_BASE2, 3237 .num_ports = 8, 3238 .base_baud = 460800, 3239 .uart_offset = 8, 3240 }, 3241 [pbn_b2_16_460800] = { 3242 .flags = FL_BASE2, 3243 .num_ports = 16, 3244 .base_baud = 460800, 3245 .uart_offset = 8, 3246 }, 3247 3248 [pbn_b2_1_921600] = { 3249 .flags = FL_BASE2, 3250 .num_ports = 1, 3251 .base_baud = 921600, 3252 .uart_offset = 8, 3253 }, 3254 [pbn_b2_4_921600] = { 3255 .flags = FL_BASE2, 3256 .num_ports = 4, 3257 .base_baud = 921600, 3258 .uart_offset = 8, 3259 }, 3260 [pbn_b2_8_921600] = { 3261 .flags = FL_BASE2, 3262 .num_ports = 8, 3263 .base_baud = 921600, 3264 .uart_offset = 8, 3265 }, 3266 3267 [pbn_b2_8_1152000] = { 3268 .flags = FL_BASE2, 3269 .num_ports = 8, 3270 .base_baud = 1152000, 3271 .uart_offset = 8, 3272 }, 3273 3274 [pbn_b2_bt_1_115200] = { 3275 .flags = FL_BASE2|FL_BASE_BARS, 3276 .num_ports = 1, 3277 .base_baud = 115200, 3278 .uart_offset = 8, 3279 }, 3280 [pbn_b2_bt_2_115200] = { 3281 .flags = FL_BASE2|FL_BASE_BARS, 3282 .num_ports = 2, 3283 .base_baud = 115200, 3284 .uart_offset = 8, 3285 }, 3286 [pbn_b2_bt_4_115200] = { 3287 .flags = FL_BASE2|FL_BASE_BARS, 3288 .num_ports = 4, 3289 .base_baud = 115200, 3290 .uart_offset = 8, 3291 }, 3292 3293 [pbn_b2_bt_2_921600] = { 3294 .flags = FL_BASE2|FL_BASE_BARS, 3295 .num_ports = 2, 3296 .base_baud = 921600, 3297 .uart_offset = 8, 3298 }, 3299 [pbn_b2_bt_4_921600] = { 3300 .flags = FL_BASE2|FL_BASE_BARS, 3301 .num_ports = 4, 3302 .base_baud = 921600, 3303 .uart_offset = 8, 3304 }, 3305 3306 [pbn_b3_2_115200] = { 3307 .flags = FL_BASE3, 3308 .num_ports = 2, 3309 .base_baud = 115200, 3310 .uart_offset = 8, 3311 }, 3312 [pbn_b3_4_115200] = { 3313 .flags = FL_BASE3, 3314 .num_ports = 4, 3315 .base_baud = 115200, 3316 .uart_offset = 8, 3317 }, 3318 [pbn_b3_8_115200] = { 3319 .flags = FL_BASE3, 3320 .num_ports = 8, 3321 .base_baud = 115200, 3322 .uart_offset = 8, 3323 }, 3324 3325 [pbn_b4_bt_2_921600] = { 3326 .flags = FL_BASE4, 3327 .num_ports = 2, 3328 .base_baud = 921600, 3329 .uart_offset = 8, 3330 }, 3331 [pbn_b4_bt_4_921600] = { 3332 .flags = FL_BASE4, 3333 .num_ports = 4, 3334 .base_baud = 921600, 3335 .uart_offset = 8, 3336 }, 3337 [pbn_b4_bt_8_921600] = { 3338 .flags = FL_BASE4, 3339 .num_ports = 8, 3340 .base_baud = 921600, 3341 .uart_offset = 8, 3342 }, 3343 3344 /* 3345 * Entries following this are board-specific. 3346 */ 3347 3348 /* 3349 * Panacom - IOMEM 3350 */ 3351 [pbn_panacom] = { 3352 .flags = FL_BASE2, 3353 .num_ports = 2, 3354 .base_baud = 921600, 3355 .uart_offset = 0x400, 3356 .reg_shift = 7, 3357 }, 3358 [pbn_panacom2] = { 3359 .flags = FL_BASE2|FL_BASE_BARS, 3360 .num_ports = 2, 3361 .base_baud = 921600, 3362 .uart_offset = 0x400, 3363 .reg_shift = 7, 3364 }, 3365 [pbn_panacom4] = { 3366 .flags = FL_BASE2|FL_BASE_BARS, 3367 .num_ports = 4, 3368 .base_baud = 921600, 3369 .uart_offset = 0x400, 3370 .reg_shift = 7, 3371 }, 3372 3373 /* I think this entry is broken - the first_offset looks wrong --rmk */ 3374 [pbn_plx_romulus] = { 3375 .flags = FL_BASE2, 3376 .num_ports = 4, 3377 .base_baud = 921600, 3378 .uart_offset = 8 << 2, 3379 .reg_shift = 2, 3380 .first_offset = 0x03, 3381 }, 3382 3383 /* 3384 * This board uses the size of PCI Base region 0 to 3385 * signal now many ports are available 3386 */ 3387 [pbn_oxsemi] = { 3388 .flags = FL_BASE0|FL_REGION_SZ_CAP, 3389 .num_ports = 32, 3390 .base_baud = 115200, 3391 .uart_offset = 8, 3392 }, 3393 [pbn_oxsemi_1_15625000] = { 3394 .flags = FL_BASE0, 3395 .num_ports = 1, 3396 .base_baud = 15625000, 3397 .uart_offset = 0x200, 3398 .first_offset = 0x1000, 3399 }, 3400 [pbn_oxsemi_2_15625000] = { 3401 .flags = FL_BASE0, 3402 .num_ports = 2, 3403 .base_baud = 15625000, 3404 .uart_offset = 0x200, 3405 .first_offset = 0x1000, 3406 }, 3407 [pbn_oxsemi_4_15625000] = { 3408 .flags = FL_BASE0, 3409 .num_ports = 4, 3410 .base_baud = 15625000, 3411 .uart_offset = 0x200, 3412 .first_offset = 0x1000, 3413 }, 3414 [pbn_oxsemi_8_15625000] = { 3415 .flags = FL_BASE0, 3416 .num_ports = 8, 3417 .base_baud = 15625000, 3418 .uart_offset = 0x200, 3419 .first_offset = 0x1000, 3420 }, 3421 3422 3423 /* 3424 * EKF addition for i960 Boards form EKF with serial port. 3425 * Max 256 ports. 3426 */ 3427 [pbn_intel_i960] = { 3428 .flags = FL_BASE0, 3429 .num_ports = 32, 3430 .base_baud = 921600, 3431 .uart_offset = 8 << 2, 3432 .reg_shift = 2, 3433 .first_offset = 0x10000, 3434 }, 3435 [pbn_sgi_ioc3] = { 3436 .flags = FL_BASE0|FL_NOIRQ, 3437 .num_ports = 1, 3438 .base_baud = 458333, 3439 .uart_offset = 8, 3440 .reg_shift = 0, 3441 .first_offset = 0x20178, 3442 }, 3443 3444 /* 3445 * Computone - uses IOMEM. 3446 */ 3447 [pbn_computone_4] = { 3448 .flags = FL_BASE0, 3449 .num_ports = 4, 3450 .base_baud = 921600, 3451 .uart_offset = 0x40, 3452 .reg_shift = 2, 3453 .first_offset = 0x200, 3454 }, 3455 [pbn_computone_6] = { 3456 .flags = FL_BASE0, 3457 .num_ports = 6, 3458 .base_baud = 921600, 3459 .uart_offset = 0x40, 3460 .reg_shift = 2, 3461 .first_offset = 0x200, 3462 }, 3463 [pbn_computone_8] = { 3464 .flags = FL_BASE0, 3465 .num_ports = 8, 3466 .base_baud = 921600, 3467 .uart_offset = 0x40, 3468 .reg_shift = 2, 3469 .first_offset = 0x200, 3470 }, 3471 [pbn_sbsxrsio] = { 3472 .flags = FL_BASE0, 3473 .num_ports = 8, 3474 .base_baud = 460800, 3475 .uart_offset = 256, 3476 .reg_shift = 4, 3477 }, 3478 /* 3479 * PA Semi PWRficient PA6T-1682M on-chip UART 3480 */ 3481 [pbn_pasemi_1682M] = { 3482 .flags = FL_BASE0, 3483 .num_ports = 1, 3484 .base_baud = 8333333, 3485 }, 3486 /* 3487 * National Instruments 843x 3488 */ 3489 [pbn_ni8430_16] = { 3490 .flags = FL_BASE0, 3491 .num_ports = 16, 3492 .base_baud = 3686400, 3493 .uart_offset = 0x10, 3494 .first_offset = 0x800, 3495 }, 3496 [pbn_ni8430_8] = { 3497 .flags = FL_BASE0, 3498 .num_ports = 8, 3499 .base_baud = 3686400, 3500 .uart_offset = 0x10, 3501 .first_offset = 0x800, 3502 }, 3503 [pbn_ni8430_4] = { 3504 .flags = FL_BASE0, 3505 .num_ports = 4, 3506 .base_baud = 3686400, 3507 .uart_offset = 0x10, 3508 .first_offset = 0x800, 3509 }, 3510 [pbn_ni8430_2] = { 3511 .flags = FL_BASE0, 3512 .num_ports = 2, 3513 .base_baud = 3686400, 3514 .uart_offset = 0x10, 3515 .first_offset = 0x800, 3516 }, 3517 /* 3518 * ADDI-DATA GmbH PCI-Express communication cards <info@addi-data.com> 3519 */ 3520 [pbn_ADDIDATA_PCIe_1_3906250] = { 3521 .flags = FL_BASE0, 3522 .num_ports = 1, 3523 .base_baud = 3906250, 3524 .uart_offset = 0x200, 3525 .first_offset = 0x1000, 3526 }, 3527 [pbn_ADDIDATA_PCIe_2_3906250] = { 3528 .flags = FL_BASE0, 3529 .num_ports = 2, 3530 .base_baud = 3906250, 3531 .uart_offset = 0x200, 3532 .first_offset = 0x1000, 3533 }, 3534 [pbn_ADDIDATA_PCIe_4_3906250] = { 3535 .flags = FL_BASE0, 3536 .num_ports = 4, 3537 .base_baud = 3906250, 3538 .uart_offset = 0x200, 3539 .first_offset = 0x1000, 3540 }, 3541 [pbn_ADDIDATA_PCIe_8_3906250] = { 3542 .flags = FL_BASE0, 3543 .num_ports = 8, 3544 .base_baud = 3906250, 3545 .uart_offset = 0x200, 3546 .first_offset = 0x1000, 3547 }, 3548 [pbn_ce4100_1_115200] = { 3549 .flags = FL_BASE_BARS, 3550 .num_ports = 2, 3551 .base_baud = 921600, 3552 .reg_shift = 2, 3553 }, 3554 [pbn_omegapci] = { 3555 .flags = FL_BASE0, 3556 .num_ports = 8, 3557 .base_baud = 115200, 3558 .uart_offset = 0x200, 3559 }, 3560 [pbn_NETMOS9900_2s_115200] = { 3561 .flags = FL_BASE0, 3562 .num_ports = 2, 3563 .base_baud = 115200, 3564 }, 3565 [pbn_brcm_trumanage] = { 3566 .flags = FL_BASE0, 3567 .num_ports = 1, 3568 .reg_shift = 2, 3569 .base_baud = 115200, 3570 }, 3571 [pbn_fintek_4] = { 3572 .num_ports = 4, 3573 .uart_offset = 8, 3574 .base_baud = 115200, 3575 .first_offset = 0x40, 3576 }, 3577 [pbn_fintek_8] = { 3578 .num_ports = 8, 3579 .uart_offset = 8, 3580 .base_baud = 115200, 3581 .first_offset = 0x40, 3582 }, 3583 [pbn_fintek_12] = { 3584 .num_ports = 12, 3585 .uart_offset = 8, 3586 .base_baud = 115200, 3587 .first_offset = 0x40, 3588 }, 3589 [pbn_fintek_F81504A] = { 3590 .num_ports = 4, 3591 .uart_offset = 8, 3592 .base_baud = 115200, 3593 }, 3594 [pbn_fintek_F81508A] = { 3595 .num_ports = 8, 3596 .uart_offset = 8, 3597 .base_baud = 115200, 3598 }, 3599 [pbn_fintek_F81512A] = { 3600 .num_ports = 12, 3601 .uart_offset = 8, 3602 .base_baud = 115200, 3603 }, 3604 [pbn_wch382_2] = { 3605 .flags = FL_BASE0, 3606 .num_ports = 2, 3607 .base_baud = 115200, 3608 .uart_offset = 8, 3609 .first_offset = 0xC0, 3610 }, 3611 [pbn_wch384_4] = { 3612 .flags = FL_BASE0, 3613 .num_ports = 4, 3614 .base_baud = 115200, 3615 .uart_offset = 8, 3616 .first_offset = 0xC0, 3617 }, 3618 [pbn_wch384_8] = { 3619 .flags = FL_BASE0, 3620 .num_ports = 8, 3621 .base_baud = 115200, 3622 .uart_offset = 8, 3623 .first_offset = 0x00, 3624 }, 3625 [pbn_sunix_pci_1s] = { 3626 .num_ports = 1, 3627 .base_baud = 921600, 3628 .uart_offset = 0x8, 3629 }, 3630 [pbn_sunix_pci_2s] = { 3631 .num_ports = 2, 3632 .base_baud = 921600, 3633 .uart_offset = 0x8, 3634 }, 3635 [pbn_sunix_pci_4s] = { 3636 .num_ports = 4, 3637 .base_baud = 921600, 3638 .uart_offset = 0x8, 3639 }, 3640 [pbn_sunix_pci_8s] = { 3641 .num_ports = 8, 3642 .base_baud = 921600, 3643 .uart_offset = 0x8, 3644 }, 3645 [pbn_sunix_pci_16s] = { 3646 .num_ports = 16, 3647 .base_baud = 921600, 3648 .uart_offset = 0x8, 3649 }, 3650 [pbn_titan_1_4000000] = { 3651 .flags = FL_BASE0, 3652 .num_ports = 1, 3653 .base_baud = 4000000, 3654 .uart_offset = 0x200, 3655 .first_offset = 0x1000, 3656 }, 3657 [pbn_titan_2_4000000] = { 3658 .flags = FL_BASE0, 3659 .num_ports = 2, 3660 .base_baud = 4000000, 3661 .uart_offset = 0x200, 3662 .first_offset = 0x1000, 3663 }, 3664 [pbn_titan_4_4000000] = { 3665 .flags = FL_BASE0, 3666 .num_ports = 4, 3667 .base_baud = 4000000, 3668 .uart_offset = 0x200, 3669 .first_offset = 0x1000, 3670 }, 3671 [pbn_titan_8_4000000] = { 3672 .flags = FL_BASE0, 3673 .num_ports = 8, 3674 .base_baud = 4000000, 3675 .uart_offset = 0x200, 3676 .first_offset = 0x1000, 3677 }, 3678 [pbn_moxa8250_2p] = { 3679 .flags = FL_BASE1, 3680 .num_ports = 2, 3681 .base_baud = 921600, 3682 .uart_offset = 0x200, 3683 }, 3684 [pbn_moxa8250_4p] = { 3685 .flags = FL_BASE1, 3686 .num_ports = 4, 3687 .base_baud = 921600, 3688 .uart_offset = 0x200, 3689 }, 3690 [pbn_moxa8250_8p] = { 3691 .flags = FL_BASE1, 3692 .num_ports = 8, 3693 .base_baud = 921600, 3694 .uart_offset = 0x200, 3695 }, 3696}; 3697 3698#define REPORT_CONFIG(option) \ 3699 (IS_ENABLED(CONFIG_##option) ? 0 : (kernel_ulong_t)&#option) 3700#define REPORT_8250_CONFIG(option) \ 3701 (IS_ENABLED(CONFIG_SERIAL_8250_##option) ? \ 3702 0 : (kernel_ulong_t)&"SERIAL_8250_"#option) 3703 3704static const struct pci_device_id blacklist[] = { 3705 /* softmodems */ 3706 { PCI_VDEVICE(AL, 0x5457), }, /* ALi Corporation M5457 AC'97 Modem */ 3707 { PCI_VDEVICE(MOTOROLA, 0x3052), }, /* Motorola Si3052-based modem */ 3708 { PCI_DEVICE(0x1543, 0x3052), }, /* Si3052-based modem, default IDs */ 3709 3710 /* multi-io cards handled by parport_serial */ 3711 /* WCH CH353 2S1P */ 3712 { PCI_DEVICE(0x4348, 0x7053), 0, 0, REPORT_CONFIG(PARPORT_SERIAL), }, 3713 /* WCH CH353 1S1P */ 3714 { PCI_DEVICE(0x4348, 0x5053), 0, 0, REPORT_CONFIG(PARPORT_SERIAL), }, 3715 /* WCH CH382 2S1P */ 3716 { PCI_DEVICE(0x1c00, 0x3250), 0, 0, REPORT_CONFIG(PARPORT_SERIAL), }, 3717 3718 /* Intel platforms with MID UART */ 3719 { PCI_VDEVICE(INTEL, 0x081b), REPORT_8250_CONFIG(MID), }, 3720 { PCI_VDEVICE(INTEL, 0x081c), REPORT_8250_CONFIG(MID), }, 3721 { PCI_VDEVICE(INTEL, 0x081d), REPORT_8250_CONFIG(MID), }, 3722 { PCI_VDEVICE(INTEL, 0x1191), REPORT_8250_CONFIG(MID), }, 3723 { PCI_VDEVICE(INTEL, 0x18d8), REPORT_8250_CONFIG(MID), }, 3724 { PCI_VDEVICE(INTEL, 0x19d8), REPORT_8250_CONFIG(MID), }, 3725 3726 /* Intel platforms with DesignWare UART */ 3727 { PCI_VDEVICE(INTEL, 0x0936), REPORT_8250_CONFIG(LPSS), }, 3728 { PCI_VDEVICE(INTEL, 0x0f0a), REPORT_8250_CONFIG(LPSS), }, 3729 { PCI_VDEVICE(INTEL, 0x0f0c), REPORT_8250_CONFIG(LPSS), }, 3730 { PCI_VDEVICE(INTEL, 0x228a), REPORT_8250_CONFIG(LPSS), }, 3731 { PCI_VDEVICE(INTEL, 0x228c), REPORT_8250_CONFIG(LPSS), }, 3732 { PCI_VDEVICE(INTEL, 0x4b96), REPORT_8250_CONFIG(LPSS), }, 3733 { PCI_VDEVICE(INTEL, 0x4b97), REPORT_8250_CONFIG(LPSS), }, 3734 { PCI_VDEVICE(INTEL, 0x4b98), REPORT_8250_CONFIG(LPSS), }, 3735 { PCI_VDEVICE(INTEL, 0x4b99), REPORT_8250_CONFIG(LPSS), }, 3736 { PCI_VDEVICE(INTEL, 0x4b9a), REPORT_8250_CONFIG(LPSS), }, 3737 { PCI_VDEVICE(INTEL, 0x4b9b), REPORT_8250_CONFIG(LPSS), }, 3738 { PCI_VDEVICE(INTEL, 0x9ce3), REPORT_8250_CONFIG(LPSS), }, 3739 { PCI_VDEVICE(INTEL, 0x9ce4), REPORT_8250_CONFIG(LPSS), }, 3740 3741 /* Exar devices */ 3742 { PCI_VDEVICE(EXAR, PCI_ANY_ID), REPORT_8250_CONFIG(EXAR), }, 3743 { PCI_VDEVICE(COMMTECH, PCI_ANY_ID), REPORT_8250_CONFIG(EXAR), }, 3744 3745 /* Pericom devices */ 3746 { PCI_VDEVICE(PERICOM, PCI_ANY_ID), REPORT_8250_CONFIG(PERICOM), }, 3747 { PCI_VDEVICE(ACCESSIO, PCI_ANY_ID), REPORT_8250_CONFIG(PERICOM), }, 3748 3749 /* End of the black list */ 3750 { } 3751}; 3752 3753static int serial_pci_is_class_communication(struct pci_dev *dev) 3754{ 3755 /* 3756 * If it is not a communications device or the programming 3757 * interface is greater than 6, give up. 3758 */ 3759 if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) && 3760 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MULTISERIAL) && 3761 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) || 3762 (dev->class & 0xff) > 6) 3763 return -ENODEV; 3764 3765 return 0; 3766} 3767 3768/* 3769 * Given a complete unknown PCI device, try to use some heuristics to 3770 * guess what the configuration might be, based on the pitiful PCI 3771 * serial specs. Returns 0 on success, -ENODEV on failure. 3772 */ 3773static int 3774serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board) 3775{ 3776 int num_iomem, num_port, first_port = -1, i; 3777 int rc; 3778 3779 rc = serial_pci_is_class_communication(dev); 3780 if (rc) 3781 return rc; 3782 3783 /* 3784 * Should we try to make guesses for multiport serial devices later? 3785 */ 3786 if ((dev->class >> 8) == PCI_CLASS_COMMUNICATION_MULTISERIAL) 3787 return -ENODEV; 3788 3789 num_iomem = num_port = 0; 3790 for (i = 0; i < PCI_STD_NUM_BARS; i++) { 3791 if (pci_resource_flags(dev, i) & IORESOURCE_IO) { 3792 num_port++; 3793 if (first_port == -1) 3794 first_port = i; 3795 } 3796 if (pci_resource_flags(dev, i) & IORESOURCE_MEM) 3797 num_iomem++; 3798 } 3799 3800 /* 3801 * If there is 1 or 0 iomem regions, and exactly one port, 3802 * use it. We guess the number of ports based on the IO 3803 * region size. 3804 */ 3805 if (num_iomem <= 1 && num_port == 1) { 3806 board->flags = first_port; 3807 board->num_ports = pci_resource_len(dev, first_port) / 8; 3808 return 0; 3809 } 3810 3811 /* 3812 * Now guess if we've got a board which indexes by BARs. 3813 * Each IO BAR should be 8 bytes, and they should follow 3814 * consecutively. 3815 */ 3816 first_port = -1; 3817 num_port = 0; 3818 for (i = 0; i < PCI_STD_NUM_BARS; i++) { 3819 if (pci_resource_flags(dev, i) & IORESOURCE_IO && 3820 pci_resource_len(dev, i) == 8 && 3821 (first_port == -1 || (first_port + num_port) == i)) { 3822 num_port++; 3823 if (first_port == -1) 3824 first_port = i; 3825 } 3826 } 3827 3828 if (num_port > 1) { 3829 board->flags = first_port | FL_BASE_BARS; 3830 board->num_ports = num_port; 3831 return 0; 3832 } 3833 3834 return -ENODEV; 3835} 3836 3837static inline int 3838serial_pci_matches(const struct pciserial_board *board, 3839 const struct pciserial_board *guessed) 3840{ 3841 return 3842 board->num_ports == guessed->num_ports && 3843 board->base_baud == guessed->base_baud && 3844 board->uart_offset == guessed->uart_offset && 3845 board->reg_shift == guessed->reg_shift && 3846 board->first_offset == guessed->first_offset; 3847} 3848 3849struct serial_private * 3850pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board) 3851{ 3852 struct uart_8250_port uart; 3853 struct serial_private *priv; 3854 struct pci_serial_quirk *quirk; 3855 int rc, nr_ports, i; 3856 3857 nr_ports = board->num_ports; 3858 3859 /* 3860 * Find an init and setup quirks. 3861 */ 3862 quirk = find_quirk(dev); 3863 3864 /* 3865 * Run the new-style initialization function. 3866 * The initialization function returns: 3867 * <0 - error 3868 * 0 - use board->num_ports 3869 * >0 - number of ports 3870 */ 3871 if (quirk->init) { 3872 rc = quirk->init(dev); 3873 if (rc < 0) { 3874 priv = ERR_PTR(rc); 3875 goto err_out; 3876 } 3877 if (rc) 3878 nr_ports = rc; 3879 } 3880 3881 priv = kzalloc(struct_size(priv, line, nr_ports), GFP_KERNEL); 3882 if (!priv) { 3883 priv = ERR_PTR(-ENOMEM); 3884 goto err_deinit; 3885 } 3886 3887 priv->dev = dev; 3888 priv->quirk = quirk; 3889 3890 memset(&uart, 0, sizeof(uart)); 3891 uart.port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ; 3892 uart.port.uartclk = board->base_baud * 16; 3893 3894 if (board->flags & FL_NOIRQ) { 3895 uart.port.irq = 0; 3896 } else { 3897 if (pci_match_id(pci_use_msi, dev)) { 3898 pci_dbg(dev, "Using MSI(-X) interrupts\n"); 3899 pci_set_master(dev); 3900 uart.port.flags &= ~UPF_SHARE_IRQ; 3901 rc = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_ALL_TYPES); 3902 } else { 3903 pci_dbg(dev, "Using legacy interrupts\n"); 3904 rc = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_LEGACY); 3905 } 3906 if (rc < 0) { 3907 kfree(priv); 3908 priv = ERR_PTR(rc); 3909 goto err_deinit; 3910 } 3911 3912 uart.port.irq = pci_irq_vector(dev, 0); 3913 } 3914 3915 uart.port.dev = &dev->dev; 3916 3917 for (i = 0; i < nr_ports; i++) { 3918 if (quirk->setup(priv, board, &uart, i)) 3919 break; 3920 3921 pci_dbg(dev, "Setup PCI port: port %lx, irq %d, type %d\n", 3922 uart.port.iobase, uart.port.irq, uart.port.iotype); 3923 3924 priv->line[i] = serial8250_register_8250_port(&uart); 3925 if (priv->line[i] < 0) { 3926 pci_err(dev, 3927 "Couldn't register serial port %lx, irq %d, type %d, error %d\n", 3928 uart.port.iobase, uart.port.irq, 3929 uart.port.iotype, priv->line[i]); 3930 break; 3931 } 3932 } 3933 priv->nr = i; 3934 priv->board = board; 3935 return priv; 3936 3937err_deinit: 3938 if (quirk->exit) 3939 quirk->exit(dev); 3940err_out: 3941 return priv; 3942} 3943EXPORT_SYMBOL_GPL(pciserial_init_ports); 3944 3945static void pciserial_detach_ports(struct serial_private *priv) 3946{ 3947 struct pci_serial_quirk *quirk; 3948 int i; 3949 3950 for (i = 0; i < priv->nr; i++) 3951 serial8250_unregister_port(priv->line[i]); 3952 3953 /* 3954 * Find the exit quirks. 3955 */ 3956 quirk = find_quirk(priv->dev); 3957 if (quirk->exit) 3958 quirk->exit(priv->dev); 3959} 3960 3961void pciserial_remove_ports(struct serial_private *priv) 3962{ 3963 pciserial_detach_ports(priv); 3964 kfree(priv); 3965} 3966EXPORT_SYMBOL_GPL(pciserial_remove_ports); 3967 3968void pciserial_suspend_ports(struct serial_private *priv) 3969{ 3970 int i; 3971 3972 for (i = 0; i < priv->nr; i++) 3973 if (priv->line[i] >= 0) 3974 serial8250_suspend_port(priv->line[i]); 3975 3976 /* 3977 * Ensure that every init quirk is properly torn down 3978 */ 3979 if (priv->quirk->exit) 3980 priv->quirk->exit(priv->dev); 3981} 3982EXPORT_SYMBOL_GPL(pciserial_suspend_ports); 3983 3984void pciserial_resume_ports(struct serial_private *priv) 3985{ 3986 int i; 3987 3988 /* 3989 * Ensure that the board is correctly configured. 3990 */ 3991 if (priv->quirk->init) 3992 priv->quirk->init(priv->dev); 3993 3994 for (i = 0; i < priv->nr; i++) 3995 if (priv->line[i] >= 0) 3996 serial8250_resume_port(priv->line[i]); 3997} 3998EXPORT_SYMBOL_GPL(pciserial_resume_ports); 3999 4000/* 4001 * Probe one serial board. Unfortunately, there is no rhyme nor reason 4002 * to the arrangement of serial ports on a PCI card. 4003 */ 4004static int 4005pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent) 4006{ 4007 struct pci_serial_quirk *quirk; 4008 struct serial_private *priv; 4009 const struct pciserial_board *board; 4010 const struct pci_device_id *exclude; 4011 struct pciserial_board tmp; 4012 int rc; 4013 4014 quirk = find_quirk(dev); 4015 if (quirk->probe) { 4016 rc = quirk->probe(dev); 4017 if (rc) 4018 return rc; 4019 } 4020 4021 if (ent->driver_data >= ARRAY_SIZE(pci_boards)) { 4022 pci_err(dev, "invalid driver_data: %ld\n", ent->driver_data); 4023 return -EINVAL; 4024 } 4025 4026 board = &pci_boards[ent->driver_data]; 4027 4028 exclude = pci_match_id(blacklist, dev); 4029 if (exclude) { 4030 if (exclude->driver_data) 4031 pci_warn(dev, "ignoring port, enable %s to handle\n", 4032 (const char *)exclude->driver_data); 4033 return -ENODEV; 4034 } 4035 4036 rc = pcim_enable_device(dev); 4037 pci_save_state(dev); 4038 if (rc) 4039 return rc; 4040 4041 if (ent->driver_data == pbn_default) { 4042 /* 4043 * Use a copy of the pci_board entry for this; 4044 * avoid changing entries in the table. 4045 */ 4046 memcpy(&tmp, board, sizeof(struct pciserial_board)); 4047 board = &tmp; 4048 4049 /* 4050 * We matched one of our class entries. Try to 4051 * determine the parameters of this board. 4052 */ 4053 rc = serial_pci_guess_board(dev, &tmp); 4054 if (rc) 4055 return rc; 4056 } else { 4057 /* 4058 * We matched an explicit entry. If we are able to 4059 * detect this boards settings with our heuristic, 4060 * then we no longer need this entry. 4061 */ 4062 memcpy(&tmp, &pci_boards[pbn_default], 4063 sizeof(struct pciserial_board)); 4064 rc = serial_pci_guess_board(dev, &tmp); 4065 if (rc == 0 && serial_pci_matches(board, &tmp)) 4066 moan_device("Redundant entry in serial pci_table.", 4067 dev); 4068 } 4069 4070 priv = pciserial_init_ports(dev, board); 4071 if (IS_ERR(priv)) 4072 return PTR_ERR(priv); 4073 4074 pci_set_drvdata(dev, priv); 4075 return 0; 4076} 4077 4078static void pciserial_remove_one(struct pci_dev *dev) 4079{ 4080 struct serial_private *priv = pci_get_drvdata(dev); 4081 4082 pciserial_remove_ports(priv); 4083} 4084 4085#ifdef CONFIG_PM_SLEEP 4086static int pciserial_suspend_one(struct device *dev) 4087{ 4088 struct serial_private *priv = dev_get_drvdata(dev); 4089 4090 if (priv) 4091 pciserial_suspend_ports(priv); 4092 4093 return 0; 4094} 4095 4096static int pciserial_resume_one(struct device *dev) 4097{ 4098 struct pci_dev *pdev = to_pci_dev(dev); 4099 struct serial_private *priv = pci_get_drvdata(pdev); 4100 int err; 4101 4102 if (priv) { 4103 /* 4104 * The device may have been disabled. Re-enable it. 4105 */ 4106 err = pci_enable_device(pdev); 4107 /* FIXME: We cannot simply error out here */ 4108 if (err) 4109 pci_err(pdev, "Unable to re-enable ports, trying to continue.\n"); 4110 pciserial_resume_ports(priv); 4111 } 4112 return 0; 4113} 4114#endif 4115 4116static SIMPLE_DEV_PM_OPS(pciserial_pm_ops, pciserial_suspend_one, 4117 pciserial_resume_one); 4118 4119static const struct pci_device_id serial_pci_tbl[] = { 4120 /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */ 4121 { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620, 4122 PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0, 4123 pbn_b2_8_921600 }, 4124 /* Advantech also use 0x3618 and 0xf618 */ 4125 { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3618, 4126 PCI_DEVICE_ID_ADVANTECH_PCI3618, PCI_ANY_ID, 0, 0, 4127 pbn_b0_4_921600 }, 4128 { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCIf618, 4129 PCI_DEVICE_ID_ADVANTECH_PCI3618, PCI_ANY_ID, 0, 0, 4130 pbn_b0_4_921600 }, 4131 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960, 4132 PCI_SUBVENDOR_ID_CONNECT_TECH, 4133 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0, 4134 pbn_b1_8_1382400 }, 4135 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960, 4136 PCI_SUBVENDOR_ID_CONNECT_TECH, 4137 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0, 4138 pbn_b1_4_1382400 }, 4139 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960, 4140 PCI_SUBVENDOR_ID_CONNECT_TECH, 4141 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0, 4142 pbn_b1_2_1382400 }, 4143 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4144 PCI_SUBVENDOR_ID_CONNECT_TECH, 4145 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0, 4146 pbn_b1_8_1382400 }, 4147 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4148 PCI_SUBVENDOR_ID_CONNECT_TECH, 4149 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0, 4150 pbn_b1_4_1382400 }, 4151 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4152 PCI_SUBVENDOR_ID_CONNECT_TECH, 4153 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0, 4154 pbn_b1_2_1382400 }, 4155 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4156 PCI_SUBVENDOR_ID_CONNECT_TECH, 4157 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485, 0, 0, 4158 pbn_b1_8_921600 }, 4159 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4160 PCI_SUBVENDOR_ID_CONNECT_TECH, 4161 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 0, 0, 4162 pbn_b1_8_921600 }, 4163 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4164 PCI_SUBVENDOR_ID_CONNECT_TECH, 4165 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485, 0, 0, 4166 pbn_b1_4_921600 }, 4167 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4168 PCI_SUBVENDOR_ID_CONNECT_TECH, 4169 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0, 4170 pbn_b1_4_921600 }, 4171 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4172 PCI_SUBVENDOR_ID_CONNECT_TECH, 4173 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0, 4174 pbn_b1_2_921600 }, 4175 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4176 PCI_SUBVENDOR_ID_CONNECT_TECH, 4177 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0, 4178 pbn_b1_8_921600 }, 4179 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4180 PCI_SUBVENDOR_ID_CONNECT_TECH, 4181 PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0, 4182 pbn_b1_8_921600 }, 4183 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4184 PCI_SUBVENDOR_ID_CONNECT_TECH, 4185 PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0, 4186 pbn_b1_4_921600 }, 4187 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351, 4188 PCI_SUBVENDOR_ID_CONNECT_TECH, 4189 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ, 0, 0, 4190 pbn_b1_2_1250000 }, 4191 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, 4192 PCI_SUBVENDOR_ID_CONNECT_TECH, 4193 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2, 0, 0, 4194 pbn_b0_2_1843200 }, 4195 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, 4196 PCI_SUBVENDOR_ID_CONNECT_TECH, 4197 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4, 0, 0, 4198 pbn_b0_4_1843200 }, 4199 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, 4200 PCI_VENDOR_ID_AFAVLAB, 4201 PCI_SUBDEVICE_ID_AFAVLAB_P061, 0, 0, 4202 pbn_b0_4_1152000 }, 4203 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530, 4204 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4205 pbn_b2_bt_1_115200 }, 4206 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2, 4207 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4208 pbn_b2_bt_2_115200 }, 4209 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422, 4210 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4211 pbn_b2_bt_4_115200 }, 4212 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232, 4213 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4214 pbn_b2_bt_2_115200 }, 4215 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4, 4216 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4217 pbn_b2_bt_4_115200 }, 4218 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8, 4219 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4220 pbn_b2_8_115200 }, 4221 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_7803, 4222 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4223 pbn_b2_8_460800 }, 4224 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM8, 4225 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4226 pbn_b2_8_115200 }, 4227 4228 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2, 4229 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4230 pbn_b2_bt_2_115200 }, 4231 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200, 4232 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4233 pbn_b2_bt_2_921600 }, 4234 /* 4235 * VScom SPCOM800, from sl@s.pl 4236 */ 4237 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800, 4238 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4239 pbn_b2_8_921600 }, 4240 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077, 4241 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4242 pbn_b2_4_921600 }, 4243 /* Unknown card - subdevice 0x1584 */ 4244 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4245 PCI_VENDOR_ID_PLX, 4246 PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0, 4247 pbn_b2_4_115200 }, 4248 /* Unknown card - subdevice 0x1588 */ 4249 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4250 PCI_VENDOR_ID_PLX, 4251 PCI_SUBDEVICE_ID_UNKNOWN_0x1588, 0, 0, 4252 pbn_b2_8_115200 }, 4253 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4254 PCI_SUBVENDOR_ID_KEYSPAN, 4255 PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0, 4256 pbn_panacom }, 4257 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM, 4258 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4259 pbn_panacom4 }, 4260 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM, 4261 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4262 pbn_panacom2 }, 4263 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030, 4264 PCI_VENDOR_ID_ESDGMBH, 4265 PCI_DEVICE_ID_ESDGMBH_CPCIASIO4, 0, 0, 4266 pbn_b2_4_115200 }, 4267 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4268 PCI_SUBVENDOR_ID_CHASE_PCIFAST, 4269 PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0, 4270 pbn_b2_4_460800 }, 4271 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4272 PCI_SUBVENDOR_ID_CHASE_PCIFAST, 4273 PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0, 4274 pbn_b2_8_460800 }, 4275 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4276 PCI_SUBVENDOR_ID_CHASE_PCIFAST, 4277 PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0, 4278 pbn_b2_16_460800 }, 4279 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4280 PCI_SUBVENDOR_ID_CHASE_PCIFAST, 4281 PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0, 4282 pbn_b2_16_460800 }, 4283 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4284 PCI_SUBVENDOR_ID_CHASE_PCIRAS, 4285 PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0, 4286 pbn_b2_4_460800 }, 4287 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4288 PCI_SUBVENDOR_ID_CHASE_PCIRAS, 4289 PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, 4290 pbn_b2_8_460800 }, 4291 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 4292 PCI_SUBVENDOR_ID_EXSYS, 4293 PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0, 4294 pbn_b2_4_115200 }, 4295 /* 4296 * Megawolf Romulus PCI Serial Card, from Mike Hudson 4297 * (Exoray@isys.ca) 4298 */ 4299 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS, 4300 0x10b5, 0x106a, 0, 0, 4301 pbn_plx_romulus }, 4302 /* 4303 * Quatech cards. These actually have configurable clocks but for 4304 * now we just use the default. 4305 * 4306 * 100 series are RS232, 200 series RS422, 4307 */ 4308 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100, 4309 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4310 pbn_b1_4_115200 }, 4311 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100, 4312 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4313 pbn_b1_2_115200 }, 4314 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100E, 4315 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4316 pbn_b2_2_115200 }, 4317 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC200, 4318 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4319 pbn_b1_2_115200 }, 4320 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC200E, 4321 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4322 pbn_b2_2_115200 }, 4323 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC200, 4324 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4325 pbn_b1_4_115200 }, 4326 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D, 4327 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4328 pbn_b1_8_115200 }, 4329 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M, 4330 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4331 pbn_b1_8_115200 }, 4332 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSCP100, 4333 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4334 pbn_b1_4_115200 }, 4335 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSCP100, 4336 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4337 pbn_b1_2_115200 }, 4338 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSCP200, 4339 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4340 pbn_b1_4_115200 }, 4341 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSCP200, 4342 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4343 pbn_b1_2_115200 }, 4344 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSCLP100, 4345 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4346 pbn_b2_4_115200 }, 4347 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSCLP100, 4348 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4349 pbn_b2_2_115200 }, 4350 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SSCLP100, 4351 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4352 pbn_b2_1_115200 }, 4353 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSCLP200, 4354 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4355 pbn_b2_4_115200 }, 4356 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSCLP200, 4357 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4358 pbn_b2_2_115200 }, 4359 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SSCLP200, 4360 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4361 pbn_b2_1_115200 }, 4362 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESCLP100, 4363 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4364 pbn_b0_8_115200 }, 4365 4366 { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954, 4367 PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 4368 0, 0, 4369 pbn_b0_4_921600 }, 4370 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, 4371 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL, 4372 0, 0, 4373 pbn_b0_4_1152000 }, 4374 { PCI_VENDOR_ID_OXSEMI, 0x9505, 4375 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4376 pbn_b0_bt_2_921600 }, 4377 4378 /* 4379 * The below card is a little controversial since it is the 4380 * subject of a PCI vendor/device ID clash. (See 4381 * www.ussg.iu.edu/hypermail/linux/kernel/0303.1/0516.html). 4382 * For now just used the hex ID 0x950a. 4383 */ 4384 { PCI_VENDOR_ID_OXSEMI, 0x950a, 4385 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_00, 4386 0, 0, pbn_b0_2_115200 }, 4387 { PCI_VENDOR_ID_OXSEMI, 0x950a, 4388 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_30, 4389 0, 0, pbn_b0_2_115200 }, 4390 { PCI_VENDOR_ID_OXSEMI, 0x950a, 4391 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4392 pbn_b0_2_1130000 }, 4393 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_C950, 4394 PCI_VENDOR_ID_OXSEMI, PCI_SUBDEVICE_ID_OXSEMI_C950, 0, 0, 4395 pbn_b0_1_921600 }, 4396 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, 4397 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4398 pbn_b0_4_115200 }, 4399 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952, 4400 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4401 pbn_b0_bt_2_921600 }, 4402 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI958, 4403 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4404 pbn_b2_8_1152000 }, 4405 4406 /* 4407 * Oxford Semiconductor Inc. Tornado PCI express device range. 4408 */ 4409 { PCI_VENDOR_ID_OXSEMI, 0xc101, /* OXPCIe952 1 Legacy UART */ 4410 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4411 pbn_b0_1_15625000 }, 4412 { PCI_VENDOR_ID_OXSEMI, 0xc105, /* OXPCIe952 1 Legacy UART */ 4413 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4414 pbn_b0_1_15625000 }, 4415 { PCI_VENDOR_ID_OXSEMI, 0xc11b, /* OXPCIe952 1 Native UART */ 4416 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4417 pbn_oxsemi_1_15625000 }, 4418 { PCI_VENDOR_ID_OXSEMI, 0xc11f, /* OXPCIe952 1 Native UART */ 4419 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4420 pbn_oxsemi_1_15625000 }, 4421 { PCI_VENDOR_ID_OXSEMI, 0xc120, /* OXPCIe952 1 Legacy UART */ 4422 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4423 pbn_b0_1_15625000 }, 4424 { PCI_VENDOR_ID_OXSEMI, 0xc124, /* OXPCIe952 1 Legacy UART */ 4425 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4426 pbn_b0_1_15625000 }, 4427 { PCI_VENDOR_ID_OXSEMI, 0xc138, /* OXPCIe952 1 Native UART */ 4428 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4429 pbn_oxsemi_1_15625000 }, 4430 { PCI_VENDOR_ID_OXSEMI, 0xc13d, /* OXPCIe952 1 Native UART */ 4431 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4432 pbn_oxsemi_1_15625000 }, 4433 { PCI_VENDOR_ID_OXSEMI, 0xc140, /* OXPCIe952 1 Legacy UART */ 4434 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4435 pbn_b0_1_15625000 }, 4436 { PCI_VENDOR_ID_OXSEMI, 0xc141, /* OXPCIe952 1 Legacy UART */ 4437 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4438 pbn_b0_1_15625000 }, 4439 { PCI_VENDOR_ID_OXSEMI, 0xc144, /* OXPCIe952 1 Legacy UART */ 4440 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4441 pbn_b0_1_15625000 }, 4442 { PCI_VENDOR_ID_OXSEMI, 0xc145, /* OXPCIe952 1 Legacy UART */ 4443 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4444 pbn_b0_1_15625000 }, 4445 { PCI_VENDOR_ID_OXSEMI, 0xc158, /* OXPCIe952 2 Native UART */ 4446 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4447 pbn_oxsemi_2_15625000 }, 4448 { PCI_VENDOR_ID_OXSEMI, 0xc15d, /* OXPCIe952 2 Native UART */ 4449 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4450 pbn_oxsemi_2_15625000 }, 4451 { PCI_VENDOR_ID_OXSEMI, 0xc208, /* OXPCIe954 4 Native UART */ 4452 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4453 pbn_oxsemi_4_15625000 }, 4454 { PCI_VENDOR_ID_OXSEMI, 0xc20d, /* OXPCIe954 4 Native UART */ 4455 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4456 pbn_oxsemi_4_15625000 }, 4457 { PCI_VENDOR_ID_OXSEMI, 0xc308, /* OXPCIe958 8 Native UART */ 4458 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4459 pbn_oxsemi_8_15625000 }, 4460 { PCI_VENDOR_ID_OXSEMI, 0xc30d, /* OXPCIe958 8 Native UART */ 4461 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4462 pbn_oxsemi_8_15625000 }, 4463 { PCI_VENDOR_ID_OXSEMI, 0xc40b, /* OXPCIe200 1 Native UART */ 4464 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4465 pbn_oxsemi_1_15625000 }, 4466 { PCI_VENDOR_ID_OXSEMI, 0xc40f, /* OXPCIe200 1 Native UART */ 4467 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4468 pbn_oxsemi_1_15625000 }, 4469 { PCI_VENDOR_ID_OXSEMI, 0xc41b, /* OXPCIe200 1 Native UART */ 4470 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4471 pbn_oxsemi_1_15625000 }, 4472 { PCI_VENDOR_ID_OXSEMI, 0xc41f, /* OXPCIe200 1 Native UART */ 4473 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4474 pbn_oxsemi_1_15625000 }, 4475 { PCI_VENDOR_ID_OXSEMI, 0xc42b, /* OXPCIe200 1 Native UART */ 4476 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4477 pbn_oxsemi_1_15625000 }, 4478 { PCI_VENDOR_ID_OXSEMI, 0xc42f, /* OXPCIe200 1 Native UART */ 4479 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4480 pbn_oxsemi_1_15625000 }, 4481 { PCI_VENDOR_ID_OXSEMI, 0xc43b, /* OXPCIe200 1 Native UART */ 4482 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4483 pbn_oxsemi_1_15625000 }, 4484 { PCI_VENDOR_ID_OXSEMI, 0xc43f, /* OXPCIe200 1 Native UART */ 4485 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4486 pbn_oxsemi_1_15625000 }, 4487 { PCI_VENDOR_ID_OXSEMI, 0xc44b, /* OXPCIe200 1 Native UART */ 4488 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4489 pbn_oxsemi_1_15625000 }, 4490 { PCI_VENDOR_ID_OXSEMI, 0xc44f, /* OXPCIe200 1 Native UART */ 4491 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4492 pbn_oxsemi_1_15625000 }, 4493 { PCI_VENDOR_ID_OXSEMI, 0xc45b, /* OXPCIe200 1 Native UART */ 4494 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4495 pbn_oxsemi_1_15625000 }, 4496 { PCI_VENDOR_ID_OXSEMI, 0xc45f, /* OXPCIe200 1 Native UART */ 4497 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4498 pbn_oxsemi_1_15625000 }, 4499 { PCI_VENDOR_ID_OXSEMI, 0xc46b, /* OXPCIe200 1 Native UART */ 4500 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4501 pbn_oxsemi_1_15625000 }, 4502 { PCI_VENDOR_ID_OXSEMI, 0xc46f, /* OXPCIe200 1 Native UART */ 4503 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4504 pbn_oxsemi_1_15625000 }, 4505 { PCI_VENDOR_ID_OXSEMI, 0xc47b, /* OXPCIe200 1 Native UART */ 4506 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4507 pbn_oxsemi_1_15625000 }, 4508 { PCI_VENDOR_ID_OXSEMI, 0xc47f, /* OXPCIe200 1 Native UART */ 4509 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4510 pbn_oxsemi_1_15625000 }, 4511 { PCI_VENDOR_ID_OXSEMI, 0xc48b, /* OXPCIe200 1 Native UART */ 4512 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4513 pbn_oxsemi_1_15625000 }, 4514 { PCI_VENDOR_ID_OXSEMI, 0xc48f, /* OXPCIe200 1 Native UART */ 4515 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4516 pbn_oxsemi_1_15625000 }, 4517 { PCI_VENDOR_ID_OXSEMI, 0xc49b, /* OXPCIe200 1 Native UART */ 4518 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4519 pbn_oxsemi_1_15625000 }, 4520 { PCI_VENDOR_ID_OXSEMI, 0xc49f, /* OXPCIe200 1 Native UART */ 4521 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4522 pbn_oxsemi_1_15625000 }, 4523 { PCI_VENDOR_ID_OXSEMI, 0xc4ab, /* OXPCIe200 1 Native UART */ 4524 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4525 pbn_oxsemi_1_15625000 }, 4526 { PCI_VENDOR_ID_OXSEMI, 0xc4af, /* OXPCIe200 1 Native UART */ 4527 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4528 pbn_oxsemi_1_15625000 }, 4529 { PCI_VENDOR_ID_OXSEMI, 0xc4bb, /* OXPCIe200 1 Native UART */ 4530 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4531 pbn_oxsemi_1_15625000 }, 4532 { PCI_VENDOR_ID_OXSEMI, 0xc4bf, /* OXPCIe200 1 Native UART */ 4533 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4534 pbn_oxsemi_1_15625000 }, 4535 { PCI_VENDOR_ID_OXSEMI, 0xc4cb, /* OXPCIe200 1 Native UART */ 4536 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4537 pbn_oxsemi_1_15625000 }, 4538 { PCI_VENDOR_ID_OXSEMI, 0xc4cf, /* OXPCIe200 1 Native UART */ 4539 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4540 pbn_oxsemi_1_15625000 }, 4541 /* 4542 * Mainpine Inc. IQ Express "Rev3" utilizing OxSemi Tornado 4543 */ 4544 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 1 Port V.34 Super-G3 Fax */ 4545 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0, 4546 pbn_oxsemi_1_15625000 }, 4547 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 2 Port V.34 Super-G3 Fax */ 4548 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0, 4549 pbn_oxsemi_2_15625000 }, 4550 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 4 Port V.34 Super-G3 Fax */ 4551 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0, 4552 pbn_oxsemi_4_15625000 }, 4553 { PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 8 Port V.34 Super-G3 Fax */ 4554 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0, 4555 pbn_oxsemi_8_15625000 }, 4556 4557 /* 4558 * Digi/IBM PCIe 2-port Async EIA-232 Adapter utilizing OxSemi Tornado 4559 */ 4560 { PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_2_OX_IBM, 4561 PCI_SUBVENDOR_ID_IBM, PCI_ANY_ID, 0, 0, 4562 pbn_oxsemi_2_15625000 }, 4563 /* 4564 * EndRun Technologies. PCI express device range. 4565 * EndRun PTP/1588 has 2 Native UARTs utilizing OxSemi 952. 4566 */ 4567 { PCI_VENDOR_ID_ENDRUN, PCI_DEVICE_ID_ENDRUN_1588, 4568 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4569 pbn_oxsemi_2_15625000 }, 4570 4571 /* 4572 * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards, 4573 * from skokodyn@yahoo.com 4574 */ 4575 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO, 4576 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0, 4577 pbn_sbsxrsio }, 4578 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO, 4579 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0, 4580 pbn_sbsxrsio }, 4581 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO, 4582 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0, 4583 pbn_sbsxrsio }, 4584 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO, 4585 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0, 4586 pbn_sbsxrsio }, 4587 4588 /* 4589 * Digitan DS560-558, from jimd@esoft.com 4590 */ 4591 { PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM, 4592 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4593 pbn_b1_1_115200 }, 4594 4595 /* 4596 * Titan Electronic cards 4597 * The 400L and 800L have a custom setup quirk. 4598 */ 4599 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100, 4600 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4601 pbn_b0_1_921600 }, 4602 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200, 4603 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4604 pbn_b0_2_921600 }, 4605 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400, 4606 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4607 pbn_b0_4_921600 }, 4608 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B, 4609 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4610 pbn_b0_4_921600 }, 4611 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L, 4612 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4613 pbn_b1_1_921600 }, 4614 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L, 4615 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4616 pbn_b1_bt_2_921600 }, 4617 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L, 4618 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4619 pbn_b0_bt_4_921600 }, 4620 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L, 4621 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4622 pbn_b0_bt_8_921600 }, 4623 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200I, 4624 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4625 pbn_b4_bt_2_921600 }, 4626 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400I, 4627 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4628 pbn_b4_bt_4_921600 }, 4629 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800I, 4630 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4631 pbn_b4_bt_8_921600 }, 4632 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400EH, 4633 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4634 pbn_b0_4_921600 }, 4635 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800EH, 4636 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4637 pbn_b0_4_921600 }, 4638 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800EHB, 4639 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4640 pbn_b0_4_921600 }, 4641 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100E, 4642 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4643 pbn_titan_1_4000000 }, 4644 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200E, 4645 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4646 pbn_titan_2_4000000 }, 4647 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400E, 4648 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4649 pbn_titan_4_4000000 }, 4650 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800E, 4651 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4652 pbn_titan_8_4000000 }, 4653 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EI, 4654 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4655 pbn_titan_2_4000000 }, 4656 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EISI, 4657 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4658 pbn_titan_2_4000000 }, 4659 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200V3, 4660 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4661 pbn_b0_bt_2_921600 }, 4662 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400V3, 4663 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4664 pbn_b0_4_921600 }, 4665 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_410V3, 4666 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4667 pbn_b0_4_921600 }, 4668 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800V3, 4669 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4670 pbn_b0_4_921600 }, 4671 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800V3B, 4672 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4673 pbn_b0_4_921600 }, 4674 4675 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550, 4676 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4677 pbn_b2_1_460800 }, 4678 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650, 4679 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4680 pbn_b2_1_460800 }, 4681 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850, 4682 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4683 pbn_b2_1_460800 }, 4684 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550, 4685 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4686 pbn_b2_bt_2_921600 }, 4687 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650, 4688 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4689 pbn_b2_bt_2_921600 }, 4690 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850, 4691 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4692 pbn_b2_bt_2_921600 }, 4693 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550, 4694 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4695 pbn_b2_bt_4_921600 }, 4696 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650, 4697 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4698 pbn_b2_bt_4_921600 }, 4699 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850, 4700 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4701 pbn_b2_bt_4_921600 }, 4702 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550, 4703 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4704 pbn_b0_1_921600 }, 4705 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650, 4706 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4707 pbn_b0_1_921600 }, 4708 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850, 4709 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4710 pbn_b0_1_921600 }, 4711 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550, 4712 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4713 pbn_b0_bt_2_921600 }, 4714 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650, 4715 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4716 pbn_b0_bt_2_921600 }, 4717 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850, 4718 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4719 pbn_b0_bt_2_921600 }, 4720 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550, 4721 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4722 pbn_b0_bt_4_921600 }, 4723 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650, 4724 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4725 pbn_b0_bt_4_921600 }, 4726 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850, 4727 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4728 pbn_b0_bt_4_921600 }, 4729 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_550, 4730 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4731 pbn_b0_bt_8_921600 }, 4732 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_650, 4733 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4734 pbn_b0_bt_8_921600 }, 4735 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_850, 4736 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4737 pbn_b0_bt_8_921600 }, 4738 4739 /* 4740 * Computone devices submitted by Doug McNash dmcnash@computone.com 4741 */ 4742 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG, 4743 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4, 4744 0, 0, pbn_computone_4 }, 4745 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG, 4746 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8, 4747 0, 0, pbn_computone_8 }, 4748 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG, 4749 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6, 4750 0, 0, pbn_computone_6 }, 4751 4752 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N, 4753 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4754 pbn_oxsemi }, 4755 { PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889, 4756 PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0, 4757 pbn_b0_bt_1_921600 }, 4758 4759 /* 4760 * Sunix PCI serial boards 4761 */ 4762 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999, 4763 PCI_VENDOR_ID_SUNIX, 0x0001, 0, 0, 4764 pbn_sunix_pci_1s }, 4765 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999, 4766 PCI_VENDOR_ID_SUNIX, 0x0002, 0, 0, 4767 pbn_sunix_pci_2s }, 4768 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999, 4769 PCI_VENDOR_ID_SUNIX, 0x0004, 0, 0, 4770 pbn_sunix_pci_4s }, 4771 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999, 4772 PCI_VENDOR_ID_SUNIX, 0x0084, 0, 0, 4773 pbn_sunix_pci_4s }, 4774 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999, 4775 PCI_VENDOR_ID_SUNIX, 0x0008, 0, 0, 4776 pbn_sunix_pci_8s }, 4777 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999, 4778 PCI_VENDOR_ID_SUNIX, 0x0088, 0, 0, 4779 pbn_sunix_pci_8s }, 4780 { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999, 4781 PCI_VENDOR_ID_SUNIX, 0x0010, 0, 0, 4782 pbn_sunix_pci_16s }, 4783 4784 /* 4785 * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org> 4786 */ 4787 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P028, 4788 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4789 pbn_b0_bt_8_115200 }, 4790 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P030, 4791 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4792 pbn_b0_bt_8_115200 }, 4793 4794 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL, 4795 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4796 pbn_b0_bt_2_115200 }, 4797 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A, 4798 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4799 pbn_b0_bt_2_115200 }, 4800 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B, 4801 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4802 pbn_b0_bt_2_115200 }, 4803 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATTRO_A, 4804 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4805 pbn_b0_bt_2_115200 }, 4806 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATTRO_B, 4807 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4808 pbn_b0_bt_2_115200 }, 4809 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_A, 4810 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4811 pbn_b0_bt_4_460800 }, 4812 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_B, 4813 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4814 pbn_b0_bt_4_460800 }, 4815 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS, 4816 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4817 pbn_b0_bt_2_460800 }, 4818 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A, 4819 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4820 pbn_b0_bt_2_460800 }, 4821 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B, 4822 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4823 pbn_b0_bt_2_460800 }, 4824 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL, 4825 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4826 pbn_b0_bt_1_115200 }, 4827 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650, 4828 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4829 pbn_b0_bt_1_460800 }, 4830 4831 /* 4832 * Korenix Jetcard F0/F1 cards (JC1204, JC1208, JC1404, JC1408). 4833 * Cards are identified by their subsystem vendor IDs, which 4834 * (in hex) match the model number. 4835 * 4836 * Note that JC140x are RS422/485 cards which require ox950 4837 * ACR = 0x10, and as such are not currently fully supported. 4838 */ 4839 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0, 4840 0x1204, 0x0004, 0, 0, 4841 pbn_b0_4_921600 }, 4842 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0, 4843 0x1208, 0x0004, 0, 0, 4844 pbn_b0_4_921600 }, 4845/* { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0, 4846 0x1402, 0x0002, 0, 0, 4847 pbn_b0_2_921600 }, */ 4848/* { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0, 4849 0x1404, 0x0004, 0, 0, 4850 pbn_b0_4_921600 }, */ 4851 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF1, 4852 0x1208, 0x0004, 0, 0, 4853 pbn_b0_4_921600 }, 4854 4855 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF2, 4856 0x1204, 0x0004, 0, 0, 4857 pbn_b0_4_921600 }, 4858 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF2, 4859 0x1208, 0x0004, 0, 0, 4860 pbn_b0_4_921600 }, 4861 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF3, 4862 0x1208, 0x0004, 0, 0, 4863 pbn_b0_4_921600 }, 4864 /* 4865 * Dell Remote Access Card 4 - Tim_T_Murphy@Dell.com 4866 */ 4867 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RAC4, 4868 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4869 pbn_b1_1_1382400 }, 4870 4871 /* 4872 * Dell Remote Access Card III - Tim_T_Murphy@Dell.com 4873 */ 4874 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RACIII, 4875 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4876 pbn_b1_1_1382400 }, 4877 4878 /* 4879 * RAStel 2 port modem, gerg@moreton.com.au 4880 */ 4881 { PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT, 4882 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4883 pbn_b2_bt_2_115200 }, 4884 4885 /* 4886 * EKF addition for i960 Boards form EKF with serial port 4887 */ 4888 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80960_RP, 4889 0xE4BF, PCI_ANY_ID, 0, 0, 4890 pbn_intel_i960 }, 4891 4892 /* 4893 * Xircom Cardbus/Ethernet combos 4894 */ 4895 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM, 4896 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4897 pbn_b0_1_115200 }, 4898 /* 4899 * Xircom RBM56G cardbus modem - Dirk Arnold (temp entry) 4900 */ 4901 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_RBM56G, 4902 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4903 pbn_b0_1_115200 }, 4904 4905 /* 4906 * Untested PCI modems, sent in from various folks... 4907 */ 4908 4909 /* 4910 * Elsa Model 56K PCI Modem, from Andreas Rath <arh@01019freenet.de> 4911 */ 4912 { PCI_VENDOR_ID_ROCKWELL, 0x1004, 4913 0x1048, 0x1500, 0, 0, 4914 pbn_b1_1_115200 }, 4915 4916 { PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3, 4917 0xFF00, 0, 0, 0, 4918 pbn_sgi_ioc3 }, 4919 4920 /* 4921 * HP Diva card 4922 */ 4923 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA, 4924 PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_RMP3, 0, 0, 4925 pbn_b1_1_115200 }, 4926 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA, 4927 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4928 pbn_b0_5_115200 }, 4929 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX, 4930 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4931 pbn_b2_1_115200 }, 4932 /* HPE PCI serial device */ 4933 { PCI_VENDOR_ID_HP_3PAR, PCI_DEVICE_ID_HPE_PCI_SERIAL, 4934 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4935 pbn_b1_1_115200 }, 4936 4937 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2, 4938 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4939 pbn_b3_2_115200 }, 4940 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM4, 4941 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4942 pbn_b3_4_115200 }, 4943 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8, 4944 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4945 pbn_b3_8_115200 }, 4946 /* 4947 * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke) 4948 */ 4949 { PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560, 4950 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4951 pbn_b0_1_115200 }, 4952 /* 4953 * ITE 4954 */ 4955 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872, 4956 PCI_ANY_ID, PCI_ANY_ID, 4957 0, 0, 4958 pbn_b1_bt_1_115200 }, 4959 4960 /* 4961 * IntaShield IS-200 4962 */ 4963 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS200, 4964 PCI_ANY_ID, PCI_ANY_ID, 0, 0, /* 135a.0811 */ 4965 pbn_b2_2_115200 }, 4966 /* 4967 * IntaShield IS-400 4968 */ 4969 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS400, 4970 PCI_ANY_ID, PCI_ANY_ID, 0, 0, /* 135a.0dc0 */ 4971 pbn_b2_4_115200 }, 4972 /* Brainboxes Devices */ 4973 /* 4974 * Brainboxes UC-101 4975 */ 4976 { PCI_VENDOR_ID_INTASHIELD, 0x0BA1, 4977 PCI_ANY_ID, PCI_ANY_ID, 4978 0, 0, 4979 pbn_b2_2_115200 }, 4980 /* 4981 * Brainboxes UC-235/246 4982 */ 4983 { PCI_VENDOR_ID_INTASHIELD, 0x0AA1, 4984 PCI_ANY_ID, PCI_ANY_ID, 4985 0, 0, 4986 pbn_b2_1_115200 }, 4987 /* 4988 * Brainboxes UC-257 4989 */ 4990 { PCI_VENDOR_ID_INTASHIELD, 0x0861, 4991 PCI_ANY_ID, PCI_ANY_ID, 4992 0, 0, 4993 pbn_b2_2_115200 }, 4994 /* 4995 * Brainboxes UC-260/271/701/756 4996 */ 4997 { PCI_VENDOR_ID_INTASHIELD, 0x0D21, 4998 PCI_ANY_ID, PCI_ANY_ID, 4999 PCI_CLASS_COMMUNICATION_MULTISERIAL << 8, 0xffff00, 5000 pbn_b2_4_115200 }, 5001 { PCI_VENDOR_ID_INTASHIELD, 0x0E34, 5002 PCI_ANY_ID, PCI_ANY_ID, 5003 PCI_CLASS_COMMUNICATION_MULTISERIAL << 8, 0xffff00, 5004 pbn_b2_4_115200 }, 5005 /* 5006 * Brainboxes UC-268 5007 */ 5008 { PCI_VENDOR_ID_INTASHIELD, 0x0841, 5009 PCI_ANY_ID, PCI_ANY_ID, 5010 0, 0, 5011 pbn_b2_4_115200 }, 5012 /* 5013 * Brainboxes UC-275/279 5014 */ 5015 { PCI_VENDOR_ID_INTASHIELD, 0x0881, 5016 PCI_ANY_ID, PCI_ANY_ID, 5017 0, 0, 5018 pbn_b2_8_115200 }, 5019 /* 5020 * Brainboxes UC-302 5021 */ 5022 { PCI_VENDOR_ID_INTASHIELD, 0x08E1, 5023 PCI_ANY_ID, PCI_ANY_ID, 5024 0, 0, 5025 pbn_b2_2_115200 }, 5026 /* 5027 * Brainboxes UC-310 5028 */ 5029 { PCI_VENDOR_ID_INTASHIELD, 0x08C1, 5030 PCI_ANY_ID, PCI_ANY_ID, 5031 0, 0, 5032 pbn_b2_2_115200 }, 5033 /* 5034 * Brainboxes UC-313 5035 */ 5036 { PCI_VENDOR_ID_INTASHIELD, 0x08A3, 5037 PCI_ANY_ID, PCI_ANY_ID, 5038 0, 0, 5039 pbn_b2_2_115200 }, 5040 /* 5041 * Brainboxes UC-320/324 5042 */ 5043 { PCI_VENDOR_ID_INTASHIELD, 0x0A61, 5044 PCI_ANY_ID, PCI_ANY_ID, 5045 0, 0, 5046 pbn_b2_1_115200 }, 5047 /* 5048 * Brainboxes UC-346 5049 */ 5050 { PCI_VENDOR_ID_INTASHIELD, 0x0B02, 5051 PCI_ANY_ID, PCI_ANY_ID, 5052 0, 0, 5053 pbn_b2_4_115200 }, 5054 /* 5055 * Brainboxes UC-357 5056 */ 5057 { PCI_VENDOR_ID_INTASHIELD, 0x0A81, 5058 PCI_ANY_ID, PCI_ANY_ID, 5059 0, 0, 5060 pbn_b2_2_115200 }, 5061 { PCI_VENDOR_ID_INTASHIELD, 0x0A83, 5062 PCI_ANY_ID, PCI_ANY_ID, 5063 0, 0, 5064 pbn_b2_2_115200 }, 5065 /* 5066 * Brainboxes UC-368 5067 */ 5068 { PCI_VENDOR_ID_INTASHIELD, 0x0C41, 5069 PCI_ANY_ID, PCI_ANY_ID, 5070 0, 0, 5071 pbn_b2_4_115200 }, 5072 /* 5073 * Brainboxes UC-420/431 5074 */ 5075 { PCI_VENDOR_ID_INTASHIELD, 0x0921, 5076 PCI_ANY_ID, PCI_ANY_ID, 5077 0, 0, 5078 pbn_b2_4_115200 }, 5079 /* 5080 * Perle PCI-RAS cards 5081 */ 5082 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030, 5083 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4, 5084 0, 0, pbn_b2_4_921600 }, 5085 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030, 5086 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8, 5087 0, 0, pbn_b2_8_921600 }, 5088 5089 /* 5090 * Mainpine series cards: Fairly standard layout but fools 5091 * parts of the autodetect in some cases and uses otherwise 5092 * unmatched communications subclasses in the PCI Express case 5093 */ 5094 5095 { /* RockForceDUO */ 5096 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5097 PCI_VENDOR_ID_MAINPINE, 0x0200, 5098 0, 0, pbn_b0_2_115200 }, 5099 { /* RockForceQUATRO */ 5100 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5101 PCI_VENDOR_ID_MAINPINE, 0x0300, 5102 0, 0, pbn_b0_4_115200 }, 5103 { /* RockForceDUO+ */ 5104 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5105 PCI_VENDOR_ID_MAINPINE, 0x0400, 5106 0, 0, pbn_b0_2_115200 }, 5107 { /* RockForceQUATRO+ */ 5108 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5109 PCI_VENDOR_ID_MAINPINE, 0x0500, 5110 0, 0, pbn_b0_4_115200 }, 5111 { /* RockForce+ */ 5112 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5113 PCI_VENDOR_ID_MAINPINE, 0x0600, 5114 0, 0, pbn_b0_2_115200 }, 5115 { /* RockForce+ */ 5116 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5117 PCI_VENDOR_ID_MAINPINE, 0x0700, 5118 0, 0, pbn_b0_4_115200 }, 5119 { /* RockForceOCTO+ */ 5120 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5121 PCI_VENDOR_ID_MAINPINE, 0x0800, 5122 0, 0, pbn_b0_8_115200 }, 5123 { /* RockForceDUO+ */ 5124 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5125 PCI_VENDOR_ID_MAINPINE, 0x0C00, 5126 0, 0, pbn_b0_2_115200 }, 5127 { /* RockForceQUARTRO+ */ 5128 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5129 PCI_VENDOR_ID_MAINPINE, 0x0D00, 5130 0, 0, pbn_b0_4_115200 }, 5131 { /* RockForceOCTO+ */ 5132 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5133 PCI_VENDOR_ID_MAINPINE, 0x1D00, 5134 0, 0, pbn_b0_8_115200 }, 5135 { /* RockForceD1 */ 5136 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5137 PCI_VENDOR_ID_MAINPINE, 0x2000, 5138 0, 0, pbn_b0_1_115200 }, 5139 { /* RockForceF1 */ 5140 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5141 PCI_VENDOR_ID_MAINPINE, 0x2100, 5142 0, 0, pbn_b0_1_115200 }, 5143 { /* RockForceD2 */ 5144 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5145 PCI_VENDOR_ID_MAINPINE, 0x2200, 5146 0, 0, pbn_b0_2_115200 }, 5147 { /* RockForceF2 */ 5148 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5149 PCI_VENDOR_ID_MAINPINE, 0x2300, 5150 0, 0, pbn_b0_2_115200 }, 5151 { /* RockForceD4 */ 5152 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5153 PCI_VENDOR_ID_MAINPINE, 0x2400, 5154 0, 0, pbn_b0_4_115200 }, 5155 { /* RockForceF4 */ 5156 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5157 PCI_VENDOR_ID_MAINPINE, 0x2500, 5158 0, 0, pbn_b0_4_115200 }, 5159 { /* RockForceD8 */ 5160 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5161 PCI_VENDOR_ID_MAINPINE, 0x2600, 5162 0, 0, pbn_b0_8_115200 }, 5163 { /* RockForceF8 */ 5164 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5165 PCI_VENDOR_ID_MAINPINE, 0x2700, 5166 0, 0, pbn_b0_8_115200 }, 5167 { /* IQ Express D1 */ 5168 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5169 PCI_VENDOR_ID_MAINPINE, 0x3000, 5170 0, 0, pbn_b0_1_115200 }, 5171 { /* IQ Express F1 */ 5172 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5173 PCI_VENDOR_ID_MAINPINE, 0x3100, 5174 0, 0, pbn_b0_1_115200 }, 5175 { /* IQ Express D2 */ 5176 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5177 PCI_VENDOR_ID_MAINPINE, 0x3200, 5178 0, 0, pbn_b0_2_115200 }, 5179 { /* IQ Express F2 */ 5180 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5181 PCI_VENDOR_ID_MAINPINE, 0x3300, 5182 0, 0, pbn_b0_2_115200 }, 5183 { /* IQ Express D4 */ 5184 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5185 PCI_VENDOR_ID_MAINPINE, 0x3400, 5186 0, 0, pbn_b0_4_115200 }, 5187 { /* IQ Express F4 */ 5188 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5189 PCI_VENDOR_ID_MAINPINE, 0x3500, 5190 0, 0, pbn_b0_4_115200 }, 5191 { /* IQ Express D8 */ 5192 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5193 PCI_VENDOR_ID_MAINPINE, 0x3C00, 5194 0, 0, pbn_b0_8_115200 }, 5195 { /* IQ Express F8 */ 5196 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE, 5197 PCI_VENDOR_ID_MAINPINE, 0x3D00, 5198 0, 0, pbn_b0_8_115200 }, 5199 5200 5201 /* 5202 * PA Semi PA6T-1682M on-chip UART 5203 */ 5204 { PCI_VENDOR_ID_PASEMI, 0xa004, 5205 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5206 pbn_pasemi_1682M }, 5207 5208 /* 5209 * National Instruments 5210 */ 5211 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI23216, 5212 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5213 pbn_b1_16_115200 }, 5214 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2328, 5215 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5216 pbn_b1_8_115200 }, 5217 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324, 5218 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5219 pbn_b1_bt_4_115200 }, 5220 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322, 5221 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5222 pbn_b1_bt_2_115200 }, 5223 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324I, 5224 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5225 pbn_b1_bt_4_115200 }, 5226 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322I, 5227 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5228 pbn_b1_bt_2_115200 }, 5229 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_23216, 5230 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5231 pbn_b1_16_115200 }, 5232 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2328, 5233 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5234 pbn_b1_8_115200 }, 5235 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2324, 5236 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5237 pbn_b1_bt_4_115200 }, 5238 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2322, 5239 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5240 pbn_b1_bt_2_115200 }, 5241 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2324, 5242 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5243 pbn_b1_bt_4_115200 }, 5244 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2322, 5245 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5246 pbn_b1_bt_2_115200 }, 5247 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2322, 5248 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5249 pbn_ni8430_2 }, 5250 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2322, 5251 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5252 pbn_ni8430_2 }, 5253 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2324, 5254 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5255 pbn_ni8430_4 }, 5256 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2324, 5257 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5258 pbn_ni8430_4 }, 5259 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2328, 5260 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5261 pbn_ni8430_8 }, 5262 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2328, 5263 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5264 pbn_ni8430_8 }, 5265 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_23216, 5266 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5267 pbn_ni8430_16 }, 5268 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_23216, 5269 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5270 pbn_ni8430_16 }, 5271 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2322, 5272 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5273 pbn_ni8430_2 }, 5274 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2322, 5275 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5276 pbn_ni8430_2 }, 5277 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2324, 5278 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5279 pbn_ni8430_4 }, 5280 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2324, 5281 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5282 pbn_ni8430_4 }, 5283 5284 /* 5285 * MOXA 5286 */ 5287 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102E, 5288 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5289 pbn_moxa8250_2p }, 5290 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP102EL, 5291 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5292 pbn_moxa8250_2p }, 5293 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP104EL_A, 5294 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5295 pbn_moxa8250_4p }, 5296 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP114EL, 5297 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5298 pbn_moxa8250_4p }, 5299 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_A, 5300 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5301 pbn_moxa8250_8p }, 5302 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_B, 5303 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5304 pbn_moxa8250_8p }, 5305 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP118EL_A, 5306 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5307 pbn_moxa8250_8p }, 5308 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP118E_A_I, 5309 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5310 pbn_moxa8250_8p }, 5311 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP132EL, 5312 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5313 pbn_moxa8250_2p }, 5314 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP134EL_A, 5315 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5316 pbn_moxa8250_4p }, 5317 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP138E_A, 5318 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5319 pbn_moxa8250_8p }, 5320 { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_MOXA_CP168EL_A, 5321 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5322 pbn_moxa8250_8p }, 5323 5324 /* 5325 * ADDI-DATA GmbH communication cards <info@addi-data.com> 5326 */ 5327 { PCI_VENDOR_ID_ADDIDATA, 5328 PCI_DEVICE_ID_ADDIDATA_APCI7500, 5329 PCI_ANY_ID, 5330 PCI_ANY_ID, 5331 0, 5332 0, 5333 pbn_b0_4_115200 }, 5334 5335 { PCI_VENDOR_ID_ADDIDATA, 5336 PCI_DEVICE_ID_ADDIDATA_APCI7420, 5337 PCI_ANY_ID, 5338 PCI_ANY_ID, 5339 0, 5340 0, 5341 pbn_b0_2_115200 }, 5342 5343 { PCI_VENDOR_ID_ADDIDATA, 5344 PCI_DEVICE_ID_ADDIDATA_APCI7300, 5345 PCI_ANY_ID, 5346 PCI_ANY_ID, 5347 0, 5348 0, 5349 pbn_b0_1_115200 }, 5350 5351 { PCI_VENDOR_ID_AMCC, 5352 PCI_DEVICE_ID_AMCC_ADDIDATA_APCI7800, 5353 PCI_ANY_ID, 5354 PCI_ANY_ID, 5355 0, 5356 0, 5357 pbn_b1_8_115200 }, 5358 5359 { PCI_VENDOR_ID_ADDIDATA, 5360 PCI_DEVICE_ID_ADDIDATA_APCI7500_2, 5361 PCI_ANY_ID, 5362 PCI_ANY_ID, 5363 0, 5364 0, 5365 pbn_b0_4_115200 }, 5366 5367 { PCI_VENDOR_ID_ADDIDATA, 5368 PCI_DEVICE_ID_ADDIDATA_APCI7420_2, 5369 PCI_ANY_ID, 5370 PCI_ANY_ID, 5371 0, 5372 0, 5373 pbn_b0_2_115200 }, 5374 5375 { PCI_VENDOR_ID_ADDIDATA, 5376 PCI_DEVICE_ID_ADDIDATA_APCI7300_2, 5377 PCI_ANY_ID, 5378 PCI_ANY_ID, 5379 0, 5380 0, 5381 pbn_b0_1_115200 }, 5382 5383 { PCI_VENDOR_ID_ADDIDATA, 5384 PCI_DEVICE_ID_ADDIDATA_APCI7500_3, 5385 PCI_ANY_ID, 5386 PCI_ANY_ID, 5387 0, 5388 0, 5389 pbn_b0_4_115200 }, 5390 5391 { PCI_VENDOR_ID_ADDIDATA, 5392 PCI_DEVICE_ID_ADDIDATA_APCI7420_3, 5393 PCI_ANY_ID, 5394 PCI_ANY_ID, 5395 0, 5396 0, 5397 pbn_b0_2_115200 }, 5398 5399 { PCI_VENDOR_ID_ADDIDATA, 5400 PCI_DEVICE_ID_ADDIDATA_APCI7300_3, 5401 PCI_ANY_ID, 5402 PCI_ANY_ID, 5403 0, 5404 0, 5405 pbn_b0_1_115200 }, 5406 5407 { PCI_VENDOR_ID_ADDIDATA, 5408 PCI_DEVICE_ID_ADDIDATA_APCI7800_3, 5409 PCI_ANY_ID, 5410 PCI_ANY_ID, 5411 0, 5412 0, 5413 pbn_b0_8_115200 }, 5414 5415 { PCI_VENDOR_ID_ADDIDATA, 5416 PCI_DEVICE_ID_ADDIDATA_APCIe7500, 5417 PCI_ANY_ID, 5418 PCI_ANY_ID, 5419 0, 5420 0, 5421 pbn_ADDIDATA_PCIe_4_3906250 }, 5422 5423 { PCI_VENDOR_ID_ADDIDATA, 5424 PCI_DEVICE_ID_ADDIDATA_APCIe7420, 5425 PCI_ANY_ID, 5426 PCI_ANY_ID, 5427 0, 5428 0, 5429 pbn_ADDIDATA_PCIe_2_3906250 }, 5430 5431 { PCI_VENDOR_ID_ADDIDATA, 5432 PCI_DEVICE_ID_ADDIDATA_APCIe7300, 5433 PCI_ANY_ID, 5434 PCI_ANY_ID, 5435 0, 5436 0, 5437 pbn_ADDIDATA_PCIe_1_3906250 }, 5438 5439 { PCI_VENDOR_ID_ADDIDATA, 5440 PCI_DEVICE_ID_ADDIDATA_APCIe7800, 5441 PCI_ANY_ID, 5442 PCI_ANY_ID, 5443 0, 5444 0, 5445 pbn_ADDIDATA_PCIe_8_3906250 }, 5446 5447 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835, 5448 PCI_VENDOR_ID_IBM, 0x0299, 5449 0, 0, pbn_b0_bt_2_115200 }, 5450 5451 /* 5452 * other NetMos 9835 devices are most likely handled by the 5453 * parport_serial driver, check drivers/parport/parport_serial.c 5454 * before adding them here. 5455 */ 5456 5457 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901, 5458 0xA000, 0x1000, 5459 0, 0, pbn_b0_1_115200 }, 5460 5461 /* the 9901 is a rebranded 9912 */ 5462 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9912, 5463 0xA000, 0x1000, 5464 0, 0, pbn_b0_1_115200 }, 5465 5466 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9922, 5467 0xA000, 0x1000, 5468 0, 0, pbn_b0_1_115200 }, 5469 5470 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9904, 5471 0xA000, 0x1000, 5472 0, 0, pbn_b0_1_115200 }, 5473 5474 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900, 5475 0xA000, 0x1000, 5476 0, 0, pbn_b0_1_115200 }, 5477 5478 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900, 5479 0xA000, 0x3002, 5480 0, 0, pbn_NETMOS9900_2s_115200 }, 5481 5482 /* 5483 * Best Connectivity and Rosewill PCI Multi I/O cards 5484 */ 5485 5486 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, 5487 0xA000, 0x1000, 5488 0, 0, pbn_b0_1_115200 }, 5489 5490 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, 5491 0xA000, 0x3002, 5492 0, 0, pbn_b0_bt_2_115200 }, 5493 5494 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, 5495 0xA000, 0x3004, 5496 0, 0, pbn_b0_bt_4_115200 }, 5497 /* Intel CE4100 */ 5498 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CE4100_UART, 5499 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5500 pbn_ce4100_1_115200 }, 5501 5502 /* 5503 * Cronyx Omega PCI 5504 */ 5505 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_CRONYX_OMEGA, 5506 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5507 pbn_omegapci }, 5508 5509 /* 5510 * Broadcom TruManage 5511 */ 5512 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BROADCOM_TRUMANAGE, 5513 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5514 pbn_brcm_trumanage }, 5515 5516 /* 5517 * AgeStar as-prs2-009 5518 */ 5519 { PCI_VENDOR_ID_AGESTAR, PCI_DEVICE_ID_AGESTAR_9375, 5520 PCI_ANY_ID, PCI_ANY_ID, 5521 0, 0, pbn_b0_bt_2_115200 }, 5522 5523 /* 5524 * WCH CH353 series devices: The 2S1P is handled by parport_serial 5525 * so not listed here. 5526 */ 5527 { PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH353_4S, 5528 PCI_ANY_ID, PCI_ANY_ID, 5529 0, 0, pbn_b0_bt_4_115200 }, 5530 5531 { PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH353_2S1PF, 5532 PCI_ANY_ID, PCI_ANY_ID, 5533 0, 0, pbn_b0_bt_2_115200 }, 5534 5535 { PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH355_4S, 5536 PCI_ANY_ID, PCI_ANY_ID, 5537 0, 0, pbn_b0_bt_4_115200 }, 5538 5539 { PCIE_VENDOR_ID_WCH, PCIE_DEVICE_ID_WCH_CH382_2S, 5540 PCI_ANY_ID, PCI_ANY_ID, 5541 0, 0, pbn_wch382_2 }, 5542 5543 { PCIE_VENDOR_ID_WCH, PCIE_DEVICE_ID_WCH_CH384_4S, 5544 PCI_ANY_ID, PCI_ANY_ID, 5545 0, 0, pbn_wch384_4 }, 5546 5547 { PCIE_VENDOR_ID_WCH, PCIE_DEVICE_ID_WCH_CH384_8S, 5548 PCI_ANY_ID, PCI_ANY_ID, 5549 0, 0, pbn_wch384_8 }, 5550 /* 5551 * Realtek RealManage 5552 */ 5553 { PCI_VENDOR_ID_REALTEK, 0x816a, 5554 PCI_ANY_ID, PCI_ANY_ID, 5555 0, 0, pbn_b0_1_115200 }, 5556 5557 { PCI_VENDOR_ID_REALTEK, 0x816b, 5558 PCI_ANY_ID, PCI_ANY_ID, 5559 0, 0, pbn_b0_1_115200 }, 5560 5561 /* Fintek PCI serial cards */ 5562 { PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 }, 5563 { PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 }, 5564 { PCI_DEVICE(0x1c29, 0x1112), .driver_data = pbn_fintek_12 }, 5565 { PCI_DEVICE(0x1c29, 0x1204), .driver_data = pbn_fintek_F81504A }, 5566 { PCI_DEVICE(0x1c29, 0x1208), .driver_data = pbn_fintek_F81508A }, 5567 { PCI_DEVICE(0x1c29, 0x1212), .driver_data = pbn_fintek_F81512A }, 5568 5569 /* MKS Tenta SCOM-080x serial cards */ 5570 { PCI_DEVICE(0x1601, 0x0800), .driver_data = pbn_b0_4_1250000 }, 5571 { PCI_DEVICE(0x1601, 0xa801), .driver_data = pbn_b0_4_1250000 }, 5572 5573 /* Amazon PCI serial device */ 5574 { PCI_DEVICE(0x1d0f, 0x8250), .driver_data = pbn_b0_1_115200 }, 5575 5576 /* 5577 * These entries match devices with class COMMUNICATION_SERIAL, 5578 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL 5579 */ 5580 { PCI_ANY_ID, PCI_ANY_ID, 5581 PCI_ANY_ID, PCI_ANY_ID, 5582 PCI_CLASS_COMMUNICATION_SERIAL << 8, 5583 0xffff00, pbn_default }, 5584 { PCI_ANY_ID, PCI_ANY_ID, 5585 PCI_ANY_ID, PCI_ANY_ID, 5586 PCI_CLASS_COMMUNICATION_MODEM << 8, 5587 0xffff00, pbn_default }, 5588 { PCI_ANY_ID, PCI_ANY_ID, 5589 PCI_ANY_ID, PCI_ANY_ID, 5590 PCI_CLASS_COMMUNICATION_MULTISERIAL << 8, 5591 0xffff00, pbn_default }, 5592 { 0, } 5593}; 5594 5595static pci_ers_result_t serial8250_io_error_detected(struct pci_dev *dev, 5596 pci_channel_state_t state) 5597{ 5598 struct serial_private *priv = pci_get_drvdata(dev); 5599 5600 if (state == pci_channel_io_perm_failure) 5601 return PCI_ERS_RESULT_DISCONNECT; 5602 5603 if (priv) 5604 pciserial_detach_ports(priv); 5605 5606 pci_disable_device(dev); 5607 5608 return PCI_ERS_RESULT_NEED_RESET; 5609} 5610 5611static pci_ers_result_t serial8250_io_slot_reset(struct pci_dev *dev) 5612{ 5613 int rc; 5614 5615 rc = pci_enable_device(dev); 5616 5617 if (rc) 5618 return PCI_ERS_RESULT_DISCONNECT; 5619 5620 pci_restore_state(dev); 5621 pci_save_state(dev); 5622 5623 return PCI_ERS_RESULT_RECOVERED; 5624} 5625 5626static void serial8250_io_resume(struct pci_dev *dev) 5627{ 5628 struct serial_private *priv = pci_get_drvdata(dev); 5629 struct serial_private *new; 5630 5631 if (!priv) 5632 return; 5633 5634 new = pciserial_init_ports(dev, priv->board); 5635 if (!IS_ERR(new)) { 5636 pci_set_drvdata(dev, new); 5637 kfree(priv); 5638 } 5639} 5640 5641static const struct pci_error_handlers serial8250_err_handler = { 5642 .error_detected = serial8250_io_error_detected, 5643 .slot_reset = serial8250_io_slot_reset, 5644 .resume = serial8250_io_resume, 5645}; 5646 5647static struct pci_driver serial_pci_driver = { 5648 .name = "serial", 5649 .probe = pciserial_init_one, 5650 .remove = pciserial_remove_one, 5651 .driver = { 5652 .pm = &pciserial_pm_ops, 5653 }, 5654 .id_table = serial_pci_tbl, 5655 .err_handler = &serial8250_err_handler, 5656}; 5657 5658module_pci_driver(serial_pci_driver); 5659 5660MODULE_LICENSE("GPL"); 5661MODULE_DESCRIPTION("Generic 8250/16x50 PCI serial probe module"); 5662MODULE_DEVICE_TABLE(pci, serial_pci_tbl);