linux/drivers/serial/8250_pci.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/char/8250_pci.c
   3 *
   4 *  Probe module for 8250/16550-type PCI serial ports.
   5 *
   6 *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
   7 *
   8 *  Copyright (C) 2001 Russell King, All Rights Reserved.
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License as published by
  12 * the Free Software Foundation; either version 2 of the License.
  13 */
  14#include <linux/module.h>
  15#include <linux/init.h>
  16#include <linux/pci.h>
  17#include <linux/string.h>
  18#include <linux/kernel.h>
  19#include <linux/slab.h>
  20#include <linux/delay.h>
  21#include <linux/tty.h>
  22#include <linux/serial_core.h>
  23#include <linux/8250_pci.h>
  24#include <linux/bitops.h>
  25
  26#include <asm/byteorder.h>
  27#include <asm/io.h>
  28
  29#include "8250.h"
  30
  31#undef SERIAL_DEBUG_PCI
  32
  33/*
  34 * init function returns:
  35 *  > 0 - number of ports
  36 *  = 0 - use board->num_ports
  37 *  < 0 - error
  38 */
  39struct pci_serial_quirk {
  40        u32     vendor;
  41        u32     device;
  42        u32     subvendor;
  43        u32     subdevice;
  44        int     (*init)(struct pci_dev *dev);
  45        int     (*setup)(struct serial_private *, struct pciserial_board *,
  46                         struct uart_port *, int);
  47        void    (*exit)(struct pci_dev *dev);
  48};
  49
  50#define PCI_NUM_BAR_RESOURCES   6
  51
  52struct serial_private {
  53        struct pci_dev          *dev;
  54        unsigned int            nr;
  55        void __iomem            *remapped_bar[PCI_NUM_BAR_RESOURCES];
  56        struct pci_serial_quirk *quirk;
  57        int                     line[0];
  58};
  59
  60static void moan_device(const char *str, struct pci_dev *dev)
  61{
  62        printk(KERN_WARNING "%s: %s\n"
  63               KERN_WARNING "Please send the output of lspci -vv, this\n"
  64               KERN_WARNING "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n"
  65               KERN_WARNING "manufacturer and name of serial board or\n"
  66               KERN_WARNING "modem board to rmk+serial@arm.linux.org.uk.\n",
  67               pci_name(dev), str, dev->vendor, dev->device,
  68               dev->subsystem_vendor, dev->subsystem_device);
  69}
  70
  71static int
  72setup_port(struct serial_private *priv, struct uart_port *port,
  73           int bar, int offset, int regshift)
  74{
  75        struct pci_dev *dev = priv->dev;
  76        unsigned long base, len;
  77
  78        if (bar >= PCI_NUM_BAR_RESOURCES)
  79                return -EINVAL;
  80
  81        base = pci_resource_start(dev, bar);
  82
  83        if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) {
  84                len =  pci_resource_len(dev, bar);
  85
  86                if (!priv->remapped_bar[bar])
  87                        priv->remapped_bar[bar] = ioremap_nocache(base, len);
  88                if (!priv->remapped_bar[bar])
  89                        return -ENOMEM;
  90
  91                port->iotype = UPIO_MEM;
  92                port->iobase = 0;
  93                port->mapbase = base + offset;
  94                port->membase = priv->remapped_bar[bar] + offset;
  95                port->regshift = regshift;
  96        } else {
  97                port->iotype = UPIO_PORT;
  98                port->iobase = base + offset;
  99                port->mapbase = 0;
 100                port->membase = NULL;
 101                port->regshift = 0;
 102        }
 103        return 0;
 104}
 105
 106/*
 107 * ADDI-DATA GmbH communication cards <info@addi-data.com>
 108 */
 109static int addidata_apci7800_setup(struct serial_private *priv,
 110                                struct pciserial_board *board,
 111                                struct uart_port *port, int idx)
 112{
 113        unsigned int bar = 0, offset = board->first_offset;
 114        bar = FL_GET_BASE(board->flags);
 115
 116        if (idx < 2) {
 117                offset += idx * board->uart_offset;
 118        } else if ((idx >= 2) && (idx < 4)) {
 119                bar += 1;
 120                offset += ((idx - 2) * board->uart_offset);
 121        } else if ((idx >= 4) && (idx < 6)) {
 122                bar += 2;
 123                offset += ((idx - 4) * board->uart_offset);
 124        } else if (idx >= 6) {
 125                bar += 3;
 126                offset += ((idx - 6) * board->uart_offset);
 127        }
 128
 129        return setup_port(priv, port, bar, offset, board->reg_shift);
 130}
 131
 132/*
 133 * AFAVLAB uses a different mixture of BARs and offsets
 134 * Not that ugly ;) -- HW
 135 */
 136static int
 137afavlab_setup(struct serial_private *priv, struct pciserial_board *board,
 138              struct uart_port *port, int idx)
 139{
 140        unsigned int bar, offset = board->first_offset;
 141
 142        bar = FL_GET_BASE(board->flags);
 143        if (idx < 4)
 144                bar += idx;
 145        else {
 146                bar = 4;
 147                offset += (idx - 4) * board->uart_offset;
 148        }
 149
 150        return setup_port(priv, port, bar, offset, board->reg_shift);
 151}
 152
 153/*
 154 * HP's Remote Management Console.  The Diva chip came in several
 155 * different versions.  N-class, L2000 and A500 have two Diva chips, each
 156 * with 3 UARTs (the third UART on the second chip is unused).  Superdome
 157 * and Keystone have one Diva chip with 3 UARTs.  Some later machines have
 158 * one Diva chip, but it has been expanded to 5 UARTs.
 159 */
 160static int pci_hp_diva_init(struct pci_dev *dev)
 161{
 162        int rc = 0;
 163
 164        switch (dev->subsystem_device) {
 165        case PCI_DEVICE_ID_HP_DIVA_TOSCA1:
 166        case PCI_DEVICE_ID_HP_DIVA_HALFDOME:
 167        case PCI_DEVICE_ID_HP_DIVA_KEYSTONE:
 168        case PCI_DEVICE_ID_HP_DIVA_EVEREST:
 169                rc = 3;
 170                break;
 171        case PCI_DEVICE_ID_HP_DIVA_TOSCA2:
 172                rc = 2;
 173                break;
 174        case PCI_DEVICE_ID_HP_DIVA_MAESTRO:
 175                rc = 4;
 176                break;
 177        case PCI_DEVICE_ID_HP_DIVA_POWERBAR:
 178        case PCI_DEVICE_ID_HP_DIVA_HURRICANE:
 179                rc = 1;
 180                break;
 181        }
 182
 183        return rc;
 184}
 185
 186/*
 187 * HP's Diva chip puts the 4th/5th serial port further out, and
 188 * some serial ports are supposed to be hidden on certain models.
 189 */
 190static int
 191pci_hp_diva_setup(struct serial_private *priv, struct pciserial_board *board,
 192              struct uart_port *port, int idx)
 193{
 194        unsigned int offset = board->first_offset;
 195        unsigned int bar = FL_GET_BASE(board->flags);
 196
 197        switch (priv->dev->subsystem_device) {
 198        case PCI_DEVICE_ID_HP_DIVA_MAESTRO:
 199                if (idx == 3)
 200                        idx++;
 201                break;
 202        case PCI_DEVICE_ID_HP_DIVA_EVEREST:
 203                if (idx > 0)
 204                        idx++;
 205                if (idx > 2)
 206                        idx++;
 207                break;
 208        }
 209        if (idx > 2)
 210                offset = 0x18;
 211
 212        offset += idx * board->uart_offset;
 213
 214        return setup_port(priv, port, bar, offset, board->reg_shift);
 215}
 216
 217/*
 218 * Added for EKF Intel i960 serial boards
 219 */
 220static int pci_inteli960ni_init(struct pci_dev *dev)
 221{
 222        unsigned long oldval;
 223
 224        if (!(dev->subsystem_device & 0x1000))
 225                return -ENODEV;
 226
 227        /* is firmware started? */
 228        pci_read_config_dword(dev, 0x44, (void *)&oldval);
 229        if (oldval == 0x00001000L) { /* RESET value */
 230                printk(KERN_DEBUG "Local i960 firmware missing");
 231                return -ENODEV;
 232        }
 233        return 0;
 234}
 235
 236/*
 237 * Some PCI serial cards using the PLX 9050 PCI interface chip require
 238 * that the card interrupt be explicitly enabled or disabled.  This
 239 * seems to be mainly needed on card using the PLX which also use I/O
 240 * mapped memory.
 241 */
 242static int pci_plx9050_init(struct pci_dev *dev)
 243{
 244        u8 irq_config;
 245        void __iomem *p;
 246
 247        if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0) {
 248                moan_device("no memory in bar 0", dev);
 249                return 0;
 250        }
 251
 252        irq_config = 0x41;
 253        if (dev->vendor == PCI_VENDOR_ID_PANACOM ||
 254            dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS)
 255                irq_config = 0x43;
 256
 257        if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
 258            (dev->device == PCI_DEVICE_ID_PLX_ROMULUS))
 259                /*
 260                 * As the megawolf cards have the int pins active
 261                 * high, and have 2 UART chips, both ints must be
 262                 * enabled on the 9050. Also, the UARTS are set in
 263                 * 16450 mode by default, so we have to enable the
 264                 * 16C950 'enhanced' mode so that we can use the
 265                 * deep FIFOs
 266                 */
 267                irq_config = 0x5b;
 268        /*
 269         * enable/disable interrupts
 270         */
 271        p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
 272        if (p == NULL)
 273                return -ENOMEM;
 274        writel(irq_config, p + 0x4c);
 275
 276        /*
 277         * Read the register back to ensure that it took effect.
 278         */
 279        readl(p + 0x4c);
 280        iounmap(p);
 281
 282        return 0;
 283}
 284
 285static void __devexit pci_plx9050_exit(struct pci_dev *dev)
 286{
 287        u8 __iomem *p;
 288
 289        if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0)
 290                return;
 291
 292        /*
 293         * disable interrupts
 294         */
 295        p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
 296        if (p != NULL) {
 297                writel(0, p + 0x4c);
 298
 299                /*
 300                 * Read the register back to ensure that it took effect.
 301                 */
 302                readl(p + 0x4c);
 303                iounmap(p);
 304        }
 305}
 306
 307/* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */
 308static int
 309sbs_setup(struct serial_private *priv, struct pciserial_board *board,
 310                struct uart_port *port, int idx)
 311{
 312        unsigned int bar, offset = board->first_offset;
 313
 314        bar = 0;
 315
 316        if (idx < 4) {
 317                /* first four channels map to 0, 0x100, 0x200, 0x300 */
 318                offset += idx * board->uart_offset;
 319        } else if (idx < 8) {
 320                /* last four channels map to 0x1000, 0x1100, 0x1200, 0x1300 */
 321                offset += idx * board->uart_offset + 0xC00;
 322        } else /* we have only 8 ports on PMC-OCTALPRO */
 323                return 1;
 324
 325        return setup_port(priv, port, bar, offset, board->reg_shift);
 326}
 327
 328/*
 329* This does initialization for PMC OCTALPRO cards:
 330* maps the device memory, resets the UARTs (needed, bc
 331* if the module is removed and inserted again, the card
 332* is in the sleep mode) and enables global interrupt.
 333*/
 334
 335/* global control register offset for SBS PMC-OctalPro */
 336#define OCT_REG_CR_OFF          0x500
 337
 338static int sbs_init(struct pci_dev *dev)
 339{
 340        u8 __iomem *p;
 341
 342        p = ioremap_nocache(pci_resource_start(dev, 0),
 343                                                pci_resource_len(dev, 0));
 344
 345        if (p == NULL)
 346                return -ENOMEM;
 347        /* Set bit-4 Control Register (UART RESET) in to reset the uarts */
 348        writeb(0x10, p + OCT_REG_CR_OFF);
 349        udelay(50);
 350        writeb(0x0, p + OCT_REG_CR_OFF);
 351
 352        /* Set bit-2 (INTENABLE) of Control Register */
 353        writeb(0x4, p + OCT_REG_CR_OFF);
 354        iounmap(p);
 355
 356        return 0;
 357}
 358
 359/*
 360 * Disables the global interrupt of PMC-OctalPro
 361 */
 362
 363static void __devexit sbs_exit(struct pci_dev *dev)
 364{
 365        u8 __iomem *p;
 366
 367        p = ioremap_nocache(pci_resource_start(dev, 0),
 368                                        pci_resource_len(dev, 0));
 369        /* FIXME: What if resource_len < OCT_REG_CR_OFF */
 370        if (p != NULL)
 371                writeb(0, p + OCT_REG_CR_OFF);
 372        iounmap(p);
 373}
 374
 375/*
 376 * SIIG serial cards have an PCI interface chip which also controls
 377 * the UART clocking frequency. Each UART can be clocked independently
 378 * (except cards equiped with 4 UARTs) and initial clocking settings
 379 * are stored in the EEPROM chip. It can cause problems because this
 380 * version of serial driver doesn't support differently clocked UART's
 381 * on single PCI card. To prevent this, initialization functions set
 382 * high frequency clocking for all UART's on given card. It is safe (I
 383 * hope) because it doesn't touch EEPROM settings to prevent conflicts
 384 * with other OSes (like M$ DOS).
 385 *
 386 *  SIIG support added by Andrey Panin <pazke@donpac.ru>, 10/1999
 387 *
 388 * There is two family of SIIG serial cards with different PCI
 389 * interface chip and different configuration methods:
 390 *     - 10x cards have control registers in IO and/or memory space;
 391 *     - 20x cards have control registers in standard PCI configuration space.
 392 *
 393 * Note: all 10x cards have PCI device ids 0x10..
 394 *       all 20x cards have PCI device ids 0x20..
 395 *
 396 * There are also Quartet Serial cards which use Oxford Semiconductor
 397 * 16954 quad UART PCI chip clocked by 18.432 MHz quartz.
 398 *
 399 * Note: some SIIG cards are probed by the parport_serial object.
 400 */
 401
 402#define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc)
 403#define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8)
 404
 405static int pci_siig10x_init(struct pci_dev *dev)
 406{
 407        u16 data;
 408        void __iomem *p;
 409
 410        switch (dev->device & 0xfff8) {
 411        case PCI_DEVICE_ID_SIIG_1S_10x: /* 1S */
 412                data = 0xffdf;
 413                break;
 414        case PCI_DEVICE_ID_SIIG_2S_10x: /* 2S, 2S1P */
 415                data = 0xf7ff;
 416                break;
 417        default:                        /* 1S1P, 4S */
 418                data = 0xfffb;
 419                break;
 420        }
 421
 422        p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
 423        if (p == NULL)
 424                return -ENOMEM;
 425
 426        writew(readw(p + 0x28) & data, p + 0x28);
 427        readw(p + 0x28);
 428        iounmap(p);
 429        return 0;
 430}
 431
 432#define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc)
 433#define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc)
 434
 435static int pci_siig20x_init(struct pci_dev *dev)
 436{
 437        u8 data;
 438
 439        /* Change clock frequency for the first UART. */
 440        pci_read_config_byte(dev, 0x6f, &data);
 441        pci_write_config_byte(dev, 0x6f, data & 0xef);
 442
 443        /* If this card has 2 UART, we have to do the same with second UART. */
 444        if (((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S_20x) ||
 445            ((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S1P_20x)) {
 446                pci_read_config_byte(dev, 0x73, &data);
 447                pci_write_config_byte(dev, 0x73, data & 0xef);
 448        }
 449        return 0;
 450}
 451
 452static int pci_siig_init(struct pci_dev *dev)
 453{
 454        unsigned int type = dev->device & 0xff00;
 455
 456        if (type == 0x1000)
 457                return pci_siig10x_init(dev);
 458        else if (type == 0x2000)
 459                return pci_siig20x_init(dev);
 460
 461        moan_device("Unknown SIIG card", dev);
 462        return -ENODEV;
 463}
 464
 465static int pci_siig_setup(struct serial_private *priv,
 466                          struct pciserial_board *board,
 467                          struct uart_port *port, int idx)
 468{
 469        unsigned int bar = FL_GET_BASE(board->flags) + idx, offset = 0;
 470
 471        if (idx > 3) {
 472                bar = 4;
 473                offset = (idx - 4) * 8;
 474        }
 475
 476        return setup_port(priv, port, bar, offset, 0);
 477}
 478
 479/*
 480 * Timedia has an explosion of boards, and to avoid the PCI table from
 481 * growing *huge*, we use this function to collapse some 70 entries
 482 * in the PCI table into one, for sanity's and compactness's sake.
 483 */
 484static const unsigned short timedia_single_port[] = {
 485        0x4025, 0x4027, 0x4028, 0x5025, 0x5027, 0
 486};
 487
 488static const unsigned short timedia_dual_port[] = {
 489        0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085,
 490        0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079,
 491        0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079,
 492        0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079,
 493        0xD079, 0
 494};
 495
 496static const unsigned short timedia_quad_port[] = {
 497        0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157,
 498        0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159,
 499        0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056,
 500        0xB157, 0
 501};
 502
 503static const unsigned short timedia_eight_port[] = {
 504        0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166,
 505        0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0
 506};
 507
 508static const struct timedia_struct {
 509        int num;
 510        const unsigned short *ids;
 511} timedia_data[] = {
 512        { 1, timedia_single_port },
 513        { 2, timedia_dual_port },
 514        { 4, timedia_quad_port },
 515        { 8, timedia_eight_port }
 516};
 517
 518static int pci_timedia_init(struct pci_dev *dev)
 519{
 520        const unsigned short *ids;
 521        int i, j;
 522
 523        for (i = 0; i < ARRAY_SIZE(timedia_data); i++) {
 524                ids = timedia_data[i].ids;
 525                for (j = 0; ids[j]; j++)
 526                        if (dev->subsystem_device == ids[j])
 527                                return timedia_data[i].num;
 528        }
 529        return 0;
 530}
 531
 532/*
 533 * Timedia/SUNIX uses a mixture of BARs and offsets
 534 * Ugh, this is ugly as all hell --- TYT
 535 */
 536static int
 537pci_timedia_setup(struct serial_private *priv, struct pciserial_board *board,
 538                  struct uart_port *port, int idx)
 539{
 540        unsigned int bar = 0, offset = board->first_offset;
 541
 542        switch (idx) {
 543        case 0:
 544                bar = 0;
 545                break;
 546        case 1:
 547                offset = board->uart_offset;
 548                bar = 0;
 549                break;
 550        case 2:
 551                bar = 1;
 552                break;
 553        case 3:
 554                offset = board->uart_offset;
 555                /* FALLTHROUGH */
 556        case 4: /* BAR 2 */
 557        case 5: /* BAR 3 */
 558        case 6: /* BAR 4 */
 559        case 7: /* BAR 5 */
 560                bar = idx - 2;
 561        }
 562
 563        return setup_port(priv, port, bar, offset, board->reg_shift);
 564}
 565
 566/*
 567 * Some Titan cards are also a little weird
 568 */
 569static int
 570titan_400l_800l_setup(struct serial_private *priv,
 571                      struct pciserial_board *board,
 572                      struct uart_port *port, int idx)
 573{
 574        unsigned int bar, offset = board->first_offset;
 575
 576        switch (idx) {
 577        case 0:
 578                bar = 1;
 579                break;
 580        case 1:
 581                bar = 2;
 582                break;
 583        default:
 584                bar = 4;
 585                offset = (idx - 2) * board->uart_offset;
 586        }
 587
 588        return setup_port(priv, port, bar, offset, board->reg_shift);
 589}
 590
 591static int pci_xircom_init(struct pci_dev *dev)
 592{
 593        msleep(100);
 594        return 0;
 595}
 596
 597static int pci_netmos_init(struct pci_dev *dev)
 598{
 599        /* subdevice 0x00PS means <P> parallel, <S> serial */
 600        unsigned int num_serial = dev->subsystem_device & 0xf;
 601
 602        if (num_serial == 0)
 603                return -ENODEV;
 604        return num_serial;
 605}
 606
 607/*
 608 * ITE support by Niels de Vos <niels.devos@wincor-nixdorf.com>
 609 *
 610 * These chips are available with optionally one parallel port and up to
 611 * two serial ports. Unfortunately they all have the same product id.
 612 *
 613 * Basic configuration is done over a region of 32 I/O ports. The base
 614 * ioport is called INTA or INTC, depending on docs/other drivers.
 615 *
 616 * The region of the 32 I/O ports is configured in POSIO0R...
 617 */
 618
 619/* registers */
 620#define ITE_887x_MISCR          0x9c
 621#define ITE_887x_INTCBAR        0x78
 622#define ITE_887x_UARTBAR        0x7c
 623#define ITE_887x_PS0BAR         0x10
 624#define ITE_887x_POSIO0         0x60
 625
 626/* I/O space size */
 627#define ITE_887x_IOSIZE         32
 628/* I/O space size (bits 26-24; 8 bytes = 011b) */
 629#define ITE_887x_POSIO_IOSIZE_8         (3 << 24)
 630/* I/O space size (bits 26-24; 32 bytes = 101b) */
 631#define ITE_887x_POSIO_IOSIZE_32        (5 << 24)
 632/* Decoding speed (1 = slow, 2 = medium, 3 = fast) */
 633#define ITE_887x_POSIO_SPEED            (3 << 29)
 634/* enable IO_Space bit */
 635#define ITE_887x_POSIO_ENABLE           (1 << 31)
 636
 637static int pci_ite887x_init(struct pci_dev *dev)
 638{
 639        /* inta_addr are the configuration addresses of the ITE */
 640        static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0,
 641                                                        0x200, 0x280, 0 };
 642        int ret, i, type;
 643        struct resource *iobase = NULL;
 644        u32 miscr, uartbar, ioport;
 645
 646        /* search for the base-ioport */
 647        i = 0;
 648        while (inta_addr[i] && iobase == NULL) {
 649                iobase = request_region(inta_addr[i], ITE_887x_IOSIZE,
 650                                                                "ite887x");
 651                if (iobase != NULL) {
 652                        /* write POSIO0R - speed | size | ioport */
 653                        pci_write_config_dword(dev, ITE_887x_POSIO0,
 654                                ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
 655                                ITE_887x_POSIO_IOSIZE_32 | inta_addr[i]);
 656                        /* write INTCBAR - ioport */
 657                        pci_write_config_dword(dev, ITE_887x_INTCBAR,
 658                                                                inta_addr[i]);
 659                        ret = inb(inta_addr[i]);
 660                        if (ret != 0xff) {
 661                                /* ioport connected */
 662                                break;
 663                        }
 664                        release_region(iobase->start, ITE_887x_IOSIZE);
 665                        iobase = NULL;
 666                }
 667                i++;
 668        }
 669
 670        if (!inta_addr[i]) {
 671                printk(KERN_ERR "ite887x: could not find iobase\n");
 672                return -ENODEV;
 673        }
 674
 675        /* start of undocumented type checking (see parport_pc.c) */
 676        type = inb(iobase->start + 0x18) & 0x0f;
 677
 678        switch (type) {
 679        case 0x2:       /* ITE8871 (1P) */
 680        case 0xa:       /* ITE8875 (1P) */
 681                ret = 0;
 682                break;
 683        case 0xe:       /* ITE8872 (2S1P) */
 684                ret = 2;
 685                break;
 686        case 0x6:       /* ITE8873 (1S) */
 687                ret = 1;
 688                break;
 689        case 0x8:       /* ITE8874 (2S) */
 690                ret = 2;
 691                break;
 692        default:
 693                moan_device("Unknown ITE887x", dev);
 694                ret = -ENODEV;
 695        }
 696
 697        /* configure all serial ports */
 698        for (i = 0; i < ret; i++) {
 699                /* read the I/O port from the device */
 700                pci_read_config_dword(dev, ITE_887x_PS0BAR + (0x4 * (i + 1)),
 701                                                                &ioport);
 702                ioport &= 0x0000FF00;   /* the actual base address */
 703                pci_write_config_dword(dev, ITE_887x_POSIO0 + (0x4 * (i + 1)),
 704                        ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
 705                        ITE_887x_POSIO_IOSIZE_8 | ioport);
 706
 707                /* write the ioport to the UARTBAR */
 708                pci_read_config_dword(dev, ITE_887x_UARTBAR, &uartbar);
 709                uartbar &= ~(0xffff << (16 * i));       /* clear half the reg */
 710                uartbar |= (ioport << (16 * i));        /* set the ioport */
 711                pci_write_config_dword(dev, ITE_887x_UARTBAR, uartbar);
 712
 713                /* get current config */
 714                pci_read_config_dword(dev, ITE_887x_MISCR, &miscr);
 715                /* disable interrupts (UARTx_Routing[3:0]) */
 716                miscr &= ~(0xf << (12 - 4 * i));
 717                /* activate the UART (UARTx_En) */
 718                miscr |= 1 << (23 - i);
 719                /* write new config with activated UART */
 720                pci_write_config_dword(dev, ITE_887x_MISCR, miscr);
 721        }
 722
 723        if (ret <= 0) {
 724                /* the device has no UARTs if we get here */
 725                release_region(iobase->start, ITE_887x_IOSIZE);
 726        }
 727
 728        return ret;
 729}
 730
 731static void __devexit pci_ite887x_exit(struct pci_dev *dev)
 732{
 733        u32 ioport;
 734        /* the ioport is bit 0-15 in POSIO0R */
 735        pci_read_config_dword(dev, ITE_887x_POSIO0, &ioport);
 736        ioport &= 0xffff;
 737        release_region(ioport, ITE_887x_IOSIZE);
 738}
 739
 740static int
 741pci_default_setup(struct serial_private *priv, struct pciserial_board *board,
 742                  struct uart_port *port, int idx)
 743{
 744        unsigned int bar, offset = board->first_offset, maxnr;
 745
 746        bar = FL_GET_BASE(board->flags);
 747        if (board->flags & FL_BASE_BARS)
 748                bar += idx;
 749        else
 750                offset += idx * board->uart_offset;
 751
 752        maxnr = (pci_resource_len(priv->dev, bar) - board->first_offset) >>
 753                (board->reg_shift + 3);
 754
 755        if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr)
 756                return 1;
 757
 758        return setup_port(priv, port, bar, offset, board->reg_shift);
 759}
 760
 761/* This should be in linux/pci_ids.h */
 762#define PCI_VENDOR_ID_SBSMODULARIO      0x124B
 763#define PCI_SUBVENDOR_ID_SBSMODULARIO   0x124B
 764#define PCI_DEVICE_ID_OCTPRO            0x0001
 765#define PCI_SUBDEVICE_ID_OCTPRO232      0x0108
 766#define PCI_SUBDEVICE_ID_OCTPRO422      0x0208
 767#define PCI_SUBDEVICE_ID_POCTAL232      0x0308
 768#define PCI_SUBDEVICE_ID_POCTAL422      0x0408
 769#define PCI_VENDOR_ID_ADVANTECH         0x13fe
 770#define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
 771
 772/* Unknown vendors/cards - this should not be in linux/pci_ids.h */
 773#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
 774
 775/*
 776 * Master list of serial port init/setup/exit quirks.
 777 * This does not describe the general nature of the port.
 778 * (ie, baud base, number and location of ports, etc)
 779 *
 780 * This list is ordered alphabetically by vendor then device.
 781 * Specific entries must come before more generic entries.
 782 */
 783static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
 784        /*
 785        * ADDI-DATA GmbH communication cards <info@addi-data.com>
 786        */
 787        {
 788                .vendor         = PCI_VENDOR_ID_ADDIDATA_OLD,
 789                .device         = PCI_DEVICE_ID_ADDIDATA_APCI7800,
 790                .subvendor      = PCI_ANY_ID,
 791                .subdevice      = PCI_ANY_ID,
 792                .setup          = addidata_apci7800_setup,
 793        },
 794        /*
 795         * AFAVLAB cards - these may be called via parport_serial
 796         *  It is not clear whether this applies to all products.
 797         */
 798        {
 799                .vendor         = PCI_VENDOR_ID_AFAVLAB,
 800                .device         = PCI_ANY_ID,
 801                .subvendor      = PCI_ANY_ID,
 802                .subdevice      = PCI_ANY_ID,
 803                .setup          = afavlab_setup,
 804        },
 805        /*
 806         * HP Diva
 807         */
 808        {
 809                .vendor         = PCI_VENDOR_ID_HP,
 810                .device         = PCI_DEVICE_ID_HP_DIVA,
 811                .subvendor      = PCI_ANY_ID,
 812                .subdevice      = PCI_ANY_ID,
 813                .init           = pci_hp_diva_init,
 814                .setup          = pci_hp_diva_setup,
 815        },
 816        /*
 817         * Intel
 818         */
 819        {
 820                .vendor         = PCI_VENDOR_ID_INTEL,
 821                .device         = PCI_DEVICE_ID_INTEL_80960_RP,
 822                .subvendor      = 0xe4bf,
 823                .subdevice      = PCI_ANY_ID,
 824                .init           = pci_inteli960ni_init,
 825                .setup          = pci_default_setup,
 826        },
 827        /*
 828         * ITE
 829         */
 830        {
 831                .vendor         = PCI_VENDOR_ID_ITE,
 832                .device         = PCI_DEVICE_ID_ITE_8872,
 833                .subvendor      = PCI_ANY_ID,
 834                .subdevice      = PCI_ANY_ID,
 835                .init           = pci_ite887x_init,
 836                .setup          = pci_default_setup,
 837                .exit           = __devexit_p(pci_ite887x_exit),
 838        },
 839        /*
 840         * Panacom
 841         */
 842        {
 843                .vendor         = PCI_VENDOR_ID_PANACOM,
 844                .device         = PCI_DEVICE_ID_PANACOM_QUADMODEM,
 845                .subvendor      = PCI_ANY_ID,
 846                .subdevice      = PCI_ANY_ID,
 847                .init           = pci_plx9050_init,
 848                .setup          = pci_default_setup,
 849                .exit           = __devexit_p(pci_plx9050_exit),
 850        },
 851        {
 852                .vendor         = PCI_VENDOR_ID_PANACOM,
 853                .device         = PCI_DEVICE_ID_PANACOM_DUALMODEM,
 854                .subvendor      = PCI_ANY_ID,
 855                .subdevice      = PCI_ANY_ID,
 856                .init           = pci_plx9050_init,
 857                .setup          = pci_default_setup,
 858                .exit           = __devexit_p(pci_plx9050_exit),
 859        },
 860        /*
 861         * PLX
 862         */
 863        {
 864                .vendor         = PCI_VENDOR_ID_PLX,
 865                .device         = PCI_DEVICE_ID_PLX_9030,
 866                .subvendor      = PCI_SUBVENDOR_ID_PERLE,
 867                .subdevice      = PCI_ANY_ID,
 868                .setup          = pci_default_setup,
 869        },
 870        {
 871                .vendor         = PCI_VENDOR_ID_PLX,
 872                .device         = PCI_DEVICE_ID_PLX_9050,
 873                .subvendor      = PCI_SUBVENDOR_ID_EXSYS,
 874                .subdevice      = PCI_SUBDEVICE_ID_EXSYS_4055,
 875                .init           = pci_plx9050_init,
 876                .setup          = pci_default_setup,
 877                .exit           = __devexit_p(pci_plx9050_exit),
 878        },
 879        {
 880                .vendor         = PCI_VENDOR_ID_PLX,
 881                .device         = PCI_DEVICE_ID_PLX_9050,
 882                .subvendor      = PCI_SUBVENDOR_ID_KEYSPAN,
 883                .subdevice      = PCI_SUBDEVICE_ID_KEYSPAN_SX2,
 884                .init           = pci_plx9050_init,
 885                .setup          = pci_default_setup,
 886                .exit           = __devexit_p(pci_plx9050_exit),
 887        },
 888        {
 889                .vendor         = PCI_VENDOR_ID_PLX,
 890                .device         = PCI_DEVICE_ID_PLX_9050,
 891                .subvendor      = PCI_VENDOR_ID_PLX,
 892                .subdevice      = PCI_SUBDEVICE_ID_UNKNOWN_0x1584,
 893                .init           = pci_plx9050_init,
 894                .setup          = pci_default_setup,
 895                .exit           = __devexit_p(pci_plx9050_exit),
 896        },
 897        {
 898                .vendor         = PCI_VENDOR_ID_PLX,
 899                .device         = PCI_DEVICE_ID_PLX_ROMULUS,
 900                .subvendor      = PCI_VENDOR_ID_PLX,
 901                .subdevice      = PCI_DEVICE_ID_PLX_ROMULUS,
 902                .init           = pci_plx9050_init,
 903                .setup          = pci_default_setup,
 904                .exit           = __devexit_p(pci_plx9050_exit),
 905        },
 906        /*
 907         * SBS Technologies, Inc., PMC-OCTALPRO 232
 908         */
 909        {
 910                .vendor         = PCI_VENDOR_ID_SBSMODULARIO,
 911                .device         = PCI_DEVICE_ID_OCTPRO,
 912                .subvendor      = PCI_SUBVENDOR_ID_SBSMODULARIO,
 913                .subdevice      = PCI_SUBDEVICE_ID_OCTPRO232,
 914                .init           = sbs_init,
 915                .setup          = sbs_setup,
 916                .exit           = __devexit_p(sbs_exit),
 917        },
 918        /*
 919         * SBS Technologies, Inc., PMC-OCTALPRO 422
 920         */
 921        {
 922                .vendor         = PCI_VENDOR_ID_SBSMODULARIO,
 923                .device         = PCI_DEVICE_ID_OCTPRO,
 924                .subvendor      = PCI_SUBVENDOR_ID_SBSMODULARIO,
 925                .subdevice      = PCI_SUBDEVICE_ID_OCTPRO422,
 926                .init           = sbs_init,
 927                .setup          = sbs_setup,
 928                .exit           = __devexit_p(sbs_exit),
 929        },
 930        /*
 931         * SBS Technologies, Inc., P-Octal 232
 932         */
 933        {
 934                .vendor         = PCI_VENDOR_ID_SBSMODULARIO,
 935                .device         = PCI_DEVICE_ID_OCTPRO,
 936                .subvendor      = PCI_SUBVENDOR_ID_SBSMODULARIO,
 937                .subdevice      = PCI_SUBDEVICE_ID_POCTAL232,
 938                .init           = sbs_init,
 939                .setup          = sbs_setup,
 940                .exit           = __devexit_p(sbs_exit),
 941        },
 942        /*
 943         * SBS Technologies, Inc., P-Octal 422
 944         */
 945        {
 946                .vendor         = PCI_VENDOR_ID_SBSMODULARIO,
 947                .device         = PCI_DEVICE_ID_OCTPRO,
 948                .subvendor      = PCI_SUBVENDOR_ID_SBSMODULARIO,
 949                .subdevice      = PCI_SUBDEVICE_ID_POCTAL422,
 950                .init           = sbs_init,
 951                .setup          = sbs_setup,
 952                .exit           = __devexit_p(sbs_exit),
 953        },
 954        /*
 955         * SIIG cards - these may be called via parport_serial
 956         */
 957        {
 958                .vendor         = PCI_VENDOR_ID_SIIG,
 959                .device         = PCI_ANY_ID,
 960                .subvendor      = PCI_ANY_ID,
 961                .subdevice      = PCI_ANY_ID,
 962                .init           = pci_siig_init,
 963                .setup          = pci_siig_setup,
 964        },
 965        /*
 966         * Titan cards
 967         */
 968        {
 969                .vendor         = PCI_VENDOR_ID_TITAN,
 970                .device         = PCI_DEVICE_ID_TITAN_400L,
 971                .subvendor      = PCI_ANY_ID,
 972                .subdevice      = PCI_ANY_ID,
 973                .setup          = titan_400l_800l_setup,
 974        },
 975        {
 976                .vendor         = PCI_VENDOR_ID_TITAN,
 977                .device         = PCI_DEVICE_ID_TITAN_800L,
 978                .subvendor      = PCI_ANY_ID,
 979                .subdevice      = PCI_ANY_ID,
 980                .setup          = titan_400l_800l_setup,
 981        },
 982        /*
 983         * Timedia cards
 984         */
 985        {
 986                .vendor         = PCI_VENDOR_ID_TIMEDIA,
 987                .device         = PCI_DEVICE_ID_TIMEDIA_1889,
 988                .subvendor      = PCI_VENDOR_ID_TIMEDIA,
 989                .subdevice      = PCI_ANY_ID,
 990                .init           = pci_timedia_init,
 991                .setup          = pci_timedia_setup,
 992        },
 993        {
 994                .vendor         = PCI_VENDOR_ID_TIMEDIA,
 995                .device         = PCI_ANY_ID,
 996                .subvendor      = PCI_ANY_ID,
 997                .subdevice      = PCI_ANY_ID,
 998                .setup          = pci_timedia_setup,
 999        },
1000        /*
1001         * Xircom cards
1002         */
1003        {
1004                .vendor         = PCI_VENDOR_ID_XIRCOM,
1005                .device         = PCI_DEVICE_ID_XIRCOM_X3201_MDM,
1006                .subvendor      = PCI_ANY_ID,
1007                .subdevice      = PCI_ANY_ID,
1008                .init           = pci_xircom_init,
1009                .setup          = pci_default_setup,
1010        },
1011        /*
1012         * Netmos cards - these may be called via parport_serial
1013         */
1014        {
1015                .vendor         = PCI_VENDOR_ID_NETMOS,
1016                .device         = PCI_ANY_ID,
1017                .subvendor      = PCI_ANY_ID,
1018                .subdevice      = PCI_ANY_ID,
1019                .init           = pci_netmos_init,
1020                .setup          = pci_default_setup,
1021        },
1022        /*
1023         * Default "match everything" terminator entry
1024         */
1025        {
1026                .vendor         = PCI_ANY_ID,
1027                .device         = PCI_ANY_ID,
1028                .subvendor      = PCI_ANY_ID,
1029                .subdevice      = PCI_ANY_ID,
1030                .setup          = pci_default_setup,
1031        }
1032};
1033
1034static inline int quirk_id_matches(u32 quirk_id, u32 dev_id)
1035{
1036        return quirk_id == PCI_ANY_ID || quirk_id == dev_id;
1037}
1038
1039static struct pci_serial_quirk *find_quirk(struct pci_dev *dev)
1040{
1041        struct pci_serial_quirk *quirk;
1042
1043        for (quirk = pci_serial_quirks; ; quirk++)
1044                if (quirk_id_matches(quirk->vendor, dev->vendor) &&
1045                    quirk_id_matches(quirk->device, dev->device) &&
1046                    quirk_id_matches(quirk->subvendor, dev->subsystem_vendor) &&
1047                    quirk_id_matches(quirk->subdevice, dev->subsystem_device))
1048                        break;
1049        return quirk;
1050}
1051
1052static inline int get_pci_irq(struct pci_dev *dev,
1053                                struct pciserial_board *board)
1054{
1055        if (board->flags & FL_NOIRQ)
1056                return 0;
1057        else
1058                return dev->irq;
1059}
1060
1061/*
1062 * This is the configuration table for all of the PCI serial boards
1063 * which we support.  It is directly indexed by the pci_board_num_t enum
1064 * value, which is encoded in the pci_device_id PCI probe table's
1065 * driver_data member.
1066 *
1067 * The makeup of these names are:
1068 *  pbn_bn{_bt}_n_baud{_offsetinhex}
1069 *
1070 *  bn          = PCI BAR number
1071 *  bt          = Index using PCI BARs
1072 *  n           = number of serial ports
1073 *  baud        = baud rate
1074 *  offsetinhex = offset for each sequential port (in hex)
1075 *
1076 * This table is sorted by (in order): bn, bt, baud, offsetindex, n.
1077 *
1078 * Please note: in theory if n = 1, _bt infix should make no difference.
1079 * ie, pbn_b0_1_115200 is the same as pbn_b0_bt_1_115200
1080 */
1081enum pci_board_num_t {
1082        pbn_default = 0,
1083
1084        pbn_b0_1_115200,
1085        pbn_b0_2_115200,
1086        pbn_b0_4_115200,
1087        pbn_b0_5_115200,
1088        pbn_b0_8_115200,
1089
1090        pbn_b0_1_921600,
1091        pbn_b0_2_921600,
1092        pbn_b0_4_921600,
1093
1094        pbn_b0_2_1130000,
1095
1096        pbn_b0_4_1152000,
1097
1098        pbn_b0_2_1843200,
1099        pbn_b0_4_1843200,
1100
1101        pbn_b0_2_1843200_200,
1102        pbn_b0_4_1843200_200,
1103        pbn_b0_8_1843200_200,
1104
1105        pbn_b0_1_4000000,
1106
1107        pbn_b0_bt_1_115200,
1108        pbn_b0_bt_2_115200,
1109        pbn_b0_bt_8_115200,
1110
1111        pbn_b0_bt_1_460800,
1112        pbn_b0_bt_2_460800,
1113        pbn_b0_bt_4_460800,
1114
1115        pbn_b0_bt_1_921600,
1116        pbn_b0_bt_2_921600,
1117        pbn_b0_bt_4_921600,
1118        pbn_b0_bt_8_921600,
1119
1120        pbn_b1_1_115200,
1121        pbn_b1_2_115200,
1122        pbn_b1_4_115200,
1123        pbn_b1_8_115200,
1124
1125        pbn_b1_1_921600,
1126        pbn_b1_2_921600,
1127        pbn_b1_4_921600,
1128        pbn_b1_8_921600,
1129
1130        pbn_b1_2_1250000,
1131
1132        pbn_b1_bt_1_115200,
1133        pbn_b1_bt_2_921600,
1134
1135        pbn_b1_1_1382400,
1136        pbn_b1_2_1382400,
1137        pbn_b1_4_1382400,
1138        pbn_b1_8_1382400,
1139
1140        pbn_b2_1_115200,
1141        pbn_b2_2_115200,
1142        pbn_b2_4_115200,
1143        pbn_b2_8_115200,
1144
1145        pbn_b2_1_460800,
1146        pbn_b2_4_460800,
1147        pbn_b2_8_460800,
1148        pbn_b2_16_460800,
1149
1150        pbn_b2_1_921600,
1151        pbn_b2_4_921600,
1152        pbn_b2_8_921600,
1153
1154        pbn_b2_bt_1_115200,
1155        pbn_b2_bt_2_115200,
1156        pbn_b2_bt_4_115200,
1157
1158        pbn_b2_bt_2_921600,
1159        pbn_b2_bt_4_921600,
1160
1161        pbn_b3_2_115200,
1162        pbn_b3_4_115200,
1163        pbn_b3_8_115200,
1164
1165        /*
1166         * Board-specific versions.
1167         */
1168        pbn_panacom,
1169        pbn_panacom2,
1170        pbn_panacom4,
1171        pbn_exsys_4055,
1172        pbn_plx_romulus,
1173        pbn_oxsemi,
1174        pbn_oxsemi_1_4000000,
1175        pbn_oxsemi_2_4000000,
1176        pbn_oxsemi_4_4000000,
1177        pbn_oxsemi_8_4000000,
1178        pbn_intel_i960,
1179        pbn_sgi_ioc3,
1180        pbn_computone_4,
1181        pbn_computone_6,
1182        pbn_computone_8,
1183        pbn_sbsxrsio,
1184        pbn_exar_XR17C152,
1185        pbn_exar_XR17C154,
1186        pbn_exar_XR17C158,
1187        pbn_pasemi_1682M,
1188};
1189
1190/*
1191 * uart_offset - the space between channels
1192 * reg_shift   - describes how the UART registers are mapped
1193 *               to PCI memory by the card.
1194 * For example IER register on SBS, Inc. PMC-OctPro is located at
1195 * offset 0x10 from the UART base, while UART_IER is defined as 1
1196 * in include/linux/serial_reg.h,
1197 * see first lines of serial_in() and serial_out() in 8250.c
1198*/
1199
1200static struct pciserial_board pci_boards[] __devinitdata = {
1201        [pbn_default] = {
1202                .flags          = FL_BASE0,
1203                .num_ports      = 1,
1204                .base_baud      = 115200,
1205                .uart_offset    = 8,
1206        },
1207        [pbn_b0_1_115200] = {
1208                .flags          = FL_BASE0,
1209                .num_ports      = 1,
1210                .base_baud      = 115200,
1211                .uart_offset    = 8,
1212        },
1213        [pbn_b0_2_115200] = {
1214                .flags          = FL_BASE0,
1215                .num_ports      = 2,
1216                .base_baud      = 115200,
1217                .uart_offset    = 8,
1218        },
1219        [pbn_b0_4_115200] = {
1220                .flags          = FL_BASE0,
1221                .num_ports      = 4,
1222                .base_baud      = 115200,
1223                .uart_offset    = 8,
1224        },
1225        [pbn_b0_5_115200] = {
1226                .flags          = FL_BASE0,
1227                .num_ports      = 5,
1228                .base_baud      = 115200,
1229                .uart_offset    = 8,
1230        },
1231        [pbn_b0_8_115200] = {
1232                .flags          = FL_BASE0,
1233                .num_ports      = 8,
1234                .base_baud      = 115200,
1235                .uart_offset    = 8,
1236        },
1237        [pbn_b0_1_921600] = {
1238                .flags          = FL_BASE0,
1239                .num_ports      = 1,
1240                .base_baud      = 921600,
1241                .uart_offset    = 8,
1242        },
1243        [pbn_b0_2_921600] = {
1244                .flags          = FL_BASE0,
1245                .num_ports      = 2,
1246                .base_baud      = 921600,
1247                .uart_offset    = 8,
1248        },
1249        [pbn_b0_4_921600] = {
1250                .flags          = FL_BASE0,
1251                .num_ports      = 4,
1252                .base_baud      = 921600,
1253                .uart_offset    = 8,
1254        },
1255
1256        [pbn_b0_2_1130000] = {
1257                .flags          = FL_BASE0,
1258                .num_ports      = 2,
1259                .base_baud      = 1130000,
1260                .uart_offset    = 8,
1261        },
1262
1263        [pbn_b0_4_1152000] = {
1264                .flags          = FL_BASE0,
1265                .num_ports      = 4,
1266                .base_baud      = 1152000,
1267                .uart_offset    = 8,
1268        },
1269
1270        [pbn_b0_2_1843200] = {
1271                .flags          = FL_BASE0,
1272                .num_ports      = 2,
1273                .base_baud      = 1843200,
1274                .uart_offset    = 8,
1275        },
1276        [pbn_b0_4_1843200] = {
1277                .flags          = FL_BASE0,
1278                .num_ports      = 4,
1279                .base_baud      = 1843200,
1280                .uart_offset    = 8,
1281        },
1282
1283        [pbn_b0_2_1843200_200] = {
1284                .flags          = FL_BASE0,
1285                .num_ports      = 2,
1286                .base_baud      = 1843200,
1287                .uart_offset    = 0x200,
1288        },
1289        [pbn_b0_4_1843200_200] = {
1290                .flags          = FL_BASE0,
1291                .num_ports      = 4,
1292                .base_baud      = 1843200,
1293                .uart_offset    = 0x200,
1294        },
1295        [pbn_b0_8_1843200_200] = {
1296                .flags          = FL_BASE0,
1297                .num_ports      = 8,
1298                .base_baud      = 1843200,
1299                .uart_offset    = 0x200,
1300        },
1301        [pbn_b0_1_4000000] = {
1302                .flags          = FL_BASE0,
1303                .num_ports      = 1,
1304                .base_baud      = 4000000,
1305                .uart_offset    = 8,
1306        },
1307
1308        [pbn_b0_bt_1_115200] = {
1309                .flags          = FL_BASE0|FL_BASE_BARS,
1310                .num_ports      = 1,
1311                .base_baud      = 115200,
1312                .uart_offset    = 8,
1313        },
1314        [pbn_b0_bt_2_115200] = {
1315                .flags          = FL_BASE0|FL_BASE_BARS,
1316                .num_ports      = 2,
1317                .base_baud      = 115200,
1318                .uart_offset    = 8,
1319        },
1320        [pbn_b0_bt_8_115200] = {
1321                .flags          = FL_BASE0|FL_BASE_BARS,
1322                .num_ports      = 8,
1323                .base_baud      = 115200,
1324                .uart_offset    = 8,
1325        },
1326
1327        [pbn_b0_bt_1_460800] = {
1328                .flags          = FL_BASE0|FL_BASE_BARS,
1329                .num_ports      = 1,
1330                .base_baud      = 460800,
1331                .uart_offset    = 8,
1332        },
1333        [pbn_b0_bt_2_460800] = {
1334                .flags          = FL_BASE0|FL_BASE_BARS,
1335                .num_ports      = 2,
1336                .base_baud      = 460800,
1337                .uart_offset    = 8,
1338        },
1339        [pbn_b0_bt_4_460800] = {
1340                .flags          = FL_BASE0|FL_BASE_BARS,
1341                .num_ports      = 4,
1342                .base_baud      = 460800,
1343                .uart_offset    = 8,
1344        },
1345
1346        [pbn_b0_bt_1_921600] = {
1347                .flags          = FL_BASE0|FL_BASE_BARS,
1348                .num_ports      = 1,
1349                .base_baud      = 921600,
1350                .uart_offset    = 8,
1351        },
1352        [pbn_b0_bt_2_921600] = {
1353                .flags          = FL_BASE0|FL_BASE_BARS,
1354                .num_ports      = 2,
1355                .base_baud      = 921600,
1356                .uart_offset    = 8,
1357        },
1358        [pbn_b0_bt_4_921600] = {
1359                .flags          = FL_BASE0|FL_BASE_BARS,
1360                .num_ports      = 4,
1361                .base_baud      = 921600,
1362                .uart_offset    = 8,
1363        },
1364        [pbn_b0_bt_8_921600] = {
1365                .flags          = FL_BASE0|FL_BASE_BARS,
1366                .num_ports      = 8,
1367                .base_baud      = 921600,
1368                .uart_offset    = 8,
1369        },
1370
1371        [pbn_b1_1_115200] = {
1372                .flags          = FL_BASE1,
1373                .num_ports      = 1,
1374                .base_baud      = 115200,
1375                .uart_offset    = 8,
1376        },
1377        [pbn_b1_2_115200] = {
1378                .flags          = FL_BASE1,
1379                .num_ports      = 2,
1380                .base_baud      = 115200,
1381                .uart_offset    = 8,
1382        },
1383        [pbn_b1_4_115200] = {
1384                .flags          = FL_BASE1,
1385                .num_ports      = 4,
1386                .base_baud      = 115200,
1387                .uart_offset    = 8,
1388        },
1389        [pbn_b1_8_115200] = {
1390                .flags          = FL_BASE1,
1391                .num_ports      = 8,
1392                .base_baud      = 115200,
1393                .uart_offset    = 8,
1394        },
1395
1396        [pbn_b1_1_921600] = {
1397                .flags          = FL_BASE1,
1398                .num_ports      = 1,
1399                .base_baud      = 921600,
1400                .uart_offset    = 8,
1401        },
1402        [pbn_b1_2_921600] = {
1403                .flags          = FL_BASE1,
1404                .num_ports      = 2,
1405                .base_baud      = 921600,
1406                .uart_offset    = 8,
1407        },
1408        [pbn_b1_4_921600] = {
1409                .flags          = FL_BASE1,
1410                .num_ports      = 4,
1411                .base_baud      = 921600,
1412                .uart_offset    = 8,
1413        },
1414        [pbn_b1_8_921600] = {
1415                .flags          = FL_BASE1,
1416                .num_ports      = 8,
1417                .base_baud      = 921600,
1418                .uart_offset    = 8,
1419        },
1420        [pbn_b1_2_1250000] = {
1421                .flags          = FL_BASE1,
1422                .num_ports      = 2,
1423                .base_baud      = 1250000,
1424                .uart_offset    = 8,
1425        },
1426
1427        [pbn_b1_bt_1_115200] = {
1428                .flags          = FL_BASE1|FL_BASE_BARS,
1429                .num_ports      = 1,
1430                .base_baud      = 115200,
1431                .uart_offset    = 8,
1432        },
1433
1434        [pbn_b1_bt_2_921600] = {
1435                .flags          = FL_BASE1|FL_BASE_BARS,
1436                .num_ports      = 2,
1437                .base_baud      = 921600,
1438                .uart_offset    = 8,
1439        },
1440
1441        [pbn_b1_1_1382400] = {
1442                .flags          = FL_BASE1,
1443                .num_ports      = 1,
1444                .base_baud      = 1382400,
1445                .uart_offset    = 8,
1446        },
1447        [pbn_b1_2_1382400] = {
1448                .flags          = FL_BASE1,
1449                .num_ports      = 2,
1450                .base_baud      = 1382400,
1451                .uart_offset    = 8,
1452        },
1453        [pbn_b1_4_1382400] = {
1454                .flags          = FL_BASE1,
1455                .num_ports      = 4,
1456                .base_baud      = 1382400,
1457                .uart_offset    = 8,
1458        },
1459        [pbn_b1_8_1382400] = {
1460                .flags          = FL_BASE1,
1461                .num_ports      = 8,
1462                .base_baud      = 1382400,
1463                .uart_offset    = 8,
1464        },
1465
1466        [pbn_b2_1_115200] = {
1467                .flags          = FL_BASE2,
1468                .num_ports      = 1,
1469                .base_baud      = 115200,
1470                .uart_offset    = 8,
1471        },
1472        [pbn_b2_2_115200] = {
1473                .flags          = FL_BASE2,
1474                .num_ports      = 2,
1475                .base_baud      = 115200,
1476                .uart_offset    = 8,
1477        },
1478        [pbn_b2_4_115200] = {
1479                .flags          = FL_BASE2,
1480                .num_ports      = 4,
1481                .base_baud      = 115200,
1482                .uart_offset    = 8,
1483        },
1484        [pbn_b2_8_115200] = {
1485                .flags          = FL_BASE2,
1486                .num_ports      = 8,
1487                .base_baud      = 115200,
1488                .uart_offset    = 8,
1489        },
1490
1491        [pbn_b2_1_460800] = {
1492                .flags          = FL_BASE2,
1493                .num_ports      = 1,
1494                .base_baud      = 460800,
1495                .uart_offset    = 8,
1496        },
1497        [pbn_b2_4_460800] = {
1498                .flags          = FL_BASE2,
1499                .num_ports      = 4,
1500                .base_baud      = 460800,
1501                .uart_offset    = 8,
1502        },
1503        [pbn_b2_8_460800] = {
1504                .flags          = FL_BASE2,
1505                .num_ports      = 8,
1506                .base_baud      = 460800,
1507                .uart_offset    = 8,
1508        },
1509        [pbn_b2_16_460800] = {
1510                .flags          = FL_BASE2,
1511                .num_ports      = 16,
1512                .base_baud      = 460800,
1513                .uart_offset    = 8,
1514         },
1515
1516        [pbn_b2_1_921600] = {
1517                .flags          = FL_BASE2,
1518                .num_ports      = 1,
1519                .base_baud      = 921600,
1520                .uart_offset    = 8,
1521        },
1522        [pbn_b2_4_921600] = {
1523                .flags          = FL_BASE2,
1524                .num_ports      = 4,
1525                .base_baud      = 921600,
1526                .uart_offset    = 8,
1527        },
1528        [pbn_b2_8_921600] = {
1529                .flags          = FL_BASE2,
1530                .num_ports      = 8,
1531                .base_baud      = 921600,
1532                .uart_offset    = 8,
1533        },
1534
1535        [pbn_b2_bt_1_115200] = {
1536                .flags          = FL_BASE2|FL_BASE_BARS,
1537                .num_ports      = 1,
1538                .base_baud      = 115200,
1539                .uart_offset    = 8,
1540        },
1541        [pbn_b2_bt_2_115200] = {
1542                .flags          = FL_BASE2|FL_BASE_BARS,
1543                .num_ports      = 2,
1544                .base_baud      = 115200,
1545                .uart_offset    = 8,
1546        },
1547        [pbn_b2_bt_4_115200] = {
1548                .flags          = FL_BASE2|FL_BASE_BARS,
1549                .num_ports      = 4,
1550                .base_baud      = 115200,
1551                .uart_offset    = 8,
1552        },
1553
1554        [pbn_b2_bt_2_921600] = {
1555                .flags          = FL_BASE2|FL_BASE_BARS,
1556                .num_ports      = 2,
1557                .base_baud      = 921600,
1558                .uart_offset    = 8,
1559        },
1560        [pbn_b2_bt_4_921600] = {
1561                .flags          = FL_BASE2|FL_BASE_BARS,
1562                .num_ports      = 4,
1563                .base_baud      = 921600,
1564                .uart_offset    = 8,
1565        },
1566
1567        [pbn_b3_2_115200] = {
1568                .flags          = FL_BASE3,
1569                .num_ports      = 2,
1570                .base_baud      = 115200,
1571                .uart_offset    = 8,
1572        },
1573        [pbn_b3_4_115200] = {
1574                .flags          = FL_BASE3,
1575                .num_ports      = 4,
1576                .base_baud      = 115200,
1577                .uart_offset    = 8,
1578        },
1579        [pbn_b3_8_115200] = {
1580                .flags          = FL_BASE3,
1581                .num_ports      = 8,
1582                .base_baud      = 115200,
1583                .uart_offset    = 8,
1584        },
1585
1586        /*
1587         * Entries following this are board-specific.
1588         */
1589
1590        /*
1591         * Panacom - IOMEM
1592         */
1593        [pbn_panacom] = {
1594                .flags          = FL_BASE2,
1595                .num_ports      = 2,
1596                .base_baud      = 921600,
1597                .uart_offset    = 0x400,
1598                .reg_shift      = 7,
1599        },
1600        [pbn_panacom2] = {
1601                .flags          = FL_BASE2|FL_BASE_BARS,
1602                .num_ports      = 2,
1603                .base_baud      = 921600,
1604                .uart_offset    = 0x400,
1605                .reg_shift      = 7,
1606        },
1607        [pbn_panacom4] = {
1608                .flags          = FL_BASE2|FL_BASE_BARS,
1609                .num_ports      = 4,
1610                .base_baud      = 921600,
1611                .uart_offset    = 0x400,
1612                .reg_shift      = 7,
1613        },
1614
1615        [pbn_exsys_4055] = {
1616                .flags          = FL_BASE2,
1617                .num_ports      = 4,
1618                .base_baud      = 115200,
1619                .uart_offset    = 8,
1620        },
1621
1622        /* I think this entry is broken - the first_offset looks wrong --rmk */
1623        [pbn_plx_romulus] = {
1624                .flags          = FL_BASE2,
1625                .num_ports      = 4,
1626                .base_baud      = 921600,
1627                .uart_offset    = 8 << 2,
1628                .reg_shift      = 2,
1629                .first_offset   = 0x03,
1630        },
1631
1632        /*
1633         * This board uses the size of PCI Base region 0 to
1634         * signal now many ports are available
1635         */
1636        [pbn_oxsemi] = {
1637                .flags          = FL_BASE0|FL_REGION_SZ_CAP,
1638                .num_ports      = 32,
1639                .base_baud      = 115200,
1640                .uart_offset    = 8,
1641        },
1642        [pbn_oxsemi_1_4000000] = {
1643                .flags          = FL_BASE0,
1644                .num_ports      = 1,
1645                .base_baud      = 4000000,
1646                .uart_offset    = 0x200,
1647                .first_offset   = 0x1000,
1648        },
1649        [pbn_oxsemi_2_4000000] = {
1650                .flags          = FL_BASE0,
1651                .num_ports      = 2,
1652                .base_baud      = 4000000,
1653                .uart_offset    = 0x200,
1654                .first_offset   = 0x1000,
1655        },
1656        [pbn_oxsemi_4_4000000] = {
1657                .flags          = FL_BASE0,
1658                .num_ports      = 4,
1659                .base_baud      = 4000000,
1660                .uart_offset    = 0x200,
1661                .first_offset   = 0x1000,
1662        },
1663        [pbn_oxsemi_8_4000000] = {
1664                .flags          = FL_BASE0,
1665                .num_ports      = 8,
1666                .base_baud      = 4000000,
1667                .uart_offset    = 0x200,
1668                .first_offset   = 0x1000,
1669        },
1670
1671
1672        /*
1673         * EKF addition for i960 Boards form EKF with serial port.
1674         * Max 256 ports.
1675         */
1676        [pbn_intel_i960] = {
1677                .flags          = FL_BASE0,
1678                .num_ports      = 32,
1679                .base_baud      = 921600,
1680                .uart_offset    = 8 << 2,
1681                .reg_shift      = 2,
1682                .first_offset   = 0x10000,
1683        },
1684        [pbn_sgi_ioc3] = {
1685                .flags          = FL_BASE0|FL_NOIRQ,
1686                .num_ports      = 1,
1687                .base_baud      = 458333,
1688                .uart_offset    = 8,
1689                .reg_shift      = 0,
1690                .first_offset   = 0x20178,
1691        },
1692
1693        /*
1694         * Computone - uses IOMEM.
1695         */
1696        [pbn_computone_4] = {
1697                .flags          = FL_BASE0,
1698                .num_ports      = 4,
1699                .base_baud      = 921600,
1700                .uart_offset    = 0x40,
1701                .reg_shift      = 2,
1702                .first_offset   = 0x200,
1703        },
1704        [pbn_computone_6] = {
1705                .flags          = FL_BASE0,
1706                .num_ports      = 6,
1707                .base_baud      = 921600,
1708                .uart_offset    = 0x40,
1709                .reg_shift      = 2,
1710                .first_offset   = 0x200,
1711        },
1712        [pbn_computone_8] = {
1713                .flags          = FL_BASE0,
1714                .num_ports      = 8,
1715                .base_baud      = 921600,
1716                .uart_offset    = 0x40,
1717                .reg_shift      = 2,
1718                .first_offset   = 0x200,
1719        },
1720        [pbn_sbsxrsio] = {
1721                .flags          = FL_BASE0,
1722                .num_ports      = 8,
1723                .base_baud      = 460800,
1724                .uart_offset    = 256,
1725                .reg_shift      = 4,
1726        },
1727        /*
1728         * Exar Corp. XR17C15[248] Dual/Quad/Octal UART
1729         *  Only basic 16550A support.
1730         *  XR17C15[24] are not tested, but they should work.
1731         */
1732        [pbn_exar_XR17C152] = {
1733                .flags          = FL_BASE0,
1734                .num_ports      = 2,
1735                .base_baud      = 921600,
1736                .uart_offset    = 0x200,
1737        },
1738        [pbn_exar_XR17C154] = {
1739                .flags          = FL_BASE0,
1740                .num_ports      = 4,
1741                .base_baud      = 921600,
1742                .uart_offset    = 0x200,
1743        },
1744        [pbn_exar_XR17C158] = {
1745                .flags          = FL_BASE0,
1746                .num_ports      = 8,
1747                .base_baud      = 921600,
1748                .uart_offset    = 0x200,
1749        },
1750        /*
1751         * PA Semi PWRficient PA6T-1682M on-chip UART
1752         */
1753        [pbn_pasemi_1682M] = {
1754                .flags          = FL_BASE0,
1755                .num_ports      = 1,
1756                .base_baud      = 8333333,
1757        },
1758};
1759
1760static const struct pci_device_id softmodem_blacklist[] = {
1761        { PCI_VDEVICE(AL, 0x5457), }, /* ALi Corporation M5457 AC'97 Modem */
1762};
1763
1764/*
1765 * Given a complete unknown PCI device, try to use some heuristics to
1766 * guess what the configuration might be, based on the pitiful PCI
1767 * serial specs.  Returns 0 on success, 1 on failure.
1768 */
1769static int __devinit
1770serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
1771{
1772        const struct pci_device_id *blacklist;
1773        int num_iomem, num_port, first_port = -1, i;
1774
1775        /*
1776         * If it is not a communications device or the programming
1777         * interface is greater than 6, give up.
1778         *
1779         * (Should we try to make guesses for multiport serial devices
1780         * later?)
1781         */
1782        if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) &&
1783             ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
1784            (dev->class & 0xff) > 6)
1785                return -ENODEV;
1786
1787        /*
1788         * Do not access blacklisted devices that are known not to
1789         * feature serial ports.
1790         */
1791        for (blacklist = softmodem_blacklist;
1792             blacklist < softmodem_blacklist + ARRAY_SIZE(softmodem_blacklist);
1793             blacklist++) {
1794                if (dev->vendor == blacklist->vendor &&
1795                    dev->device == blacklist->device)
1796                        return -ENODEV;
1797        }
1798
1799        num_iomem = num_port = 0;
1800        for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
1801                if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
1802                        num_port++;
1803                        if (first_port == -1)
1804                                first_port = i;
1805                }
1806                if (pci_resource_flags(dev, i) & IORESOURCE_MEM)
1807                        num_iomem++;
1808        }
1809
1810        /*
1811         * If there is 1 or 0 iomem regions, and exactly one port,
1812         * use it.  We guess the number of ports based on the IO
1813         * region size.
1814         */
1815        if (num_iomem <= 1 && num_port == 1) {
1816                board->flags = first_port;
1817                board->num_ports = pci_resource_len(dev, first_port) / 8;
1818                return 0;
1819        }
1820
1821        /*
1822         * Now guess if we've got a board which indexes by BARs.
1823         * Each IO BAR should be 8 bytes, and they should follow
1824         * consecutively.
1825         */
1826        first_port = -1;
1827        num_port = 0;
1828        for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
1829                if (pci_resource_flags(dev, i) & IORESOURCE_IO &&
1830                    pci_resource_len(dev, i) == 8 &&
1831                    (first_port == -1 || (first_port + num_port) == i)) {
1832                        num_port++;
1833                        if (first_port == -1)
1834                                first_port = i;
1835                }
1836        }
1837
1838        if (num_port > 1) {
1839                board->flags = first_port | FL_BASE_BARS;
1840                board->num_ports = num_port;
1841                return 0;
1842        }
1843
1844        return -ENODEV;
1845}
1846
1847static inline int
1848serial_pci_matches(struct pciserial_board *board,
1849                   struct pciserial_board *guessed)
1850{
1851        return
1852            board->num_ports == guessed->num_ports &&
1853            board->base_baud == guessed->base_baud &&
1854            board->uart_offset == guessed->uart_offset &&
1855            board->reg_shift == guessed->reg_shift &&
1856            board->first_offset == guessed->first_offset;
1857}
1858
1859/*
1860 * Oxford Semiconductor Inc.
1861 * Check that device is part of the Tornado range of devices, then determine
1862 * the number of ports available on the device.
1863 */
1864static int pci_oxsemi_tornado_init(struct pci_dev *dev, struct pciserial_board *board)
1865{
1866        u8 __iomem *p;
1867        unsigned long deviceID;
1868        unsigned int  number_uarts;
1869
1870        /* OxSemi Tornado devices are all 0xCxxx */
1871        if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
1872            (dev->device & 0xF000) != 0xC000)
1873                return 0;
1874
1875        p = pci_iomap(dev, 0, 5);
1876        if (p == NULL)
1877                return -ENOMEM;
1878
1879        deviceID = ioread32(p);
1880        /* Tornado device */
1881        if (deviceID == 0x07000200) {
1882                number_uarts = ioread8(p + 4);
1883                board->num_ports = number_uarts;
1884                printk(KERN_DEBUG
1885                        "%d ports detected on Oxford PCI Express device\n",
1886                                                                number_uarts);
1887        }
1888        pci_iounmap(dev, p);
1889        return 0;
1890}
1891
1892struct serial_private *
1893pciserial_init_ports(struct pci_dev *dev, struct pciserial_board *board)
1894{
1895        struct uart_port serial_port;
1896        struct serial_private *priv;
1897        struct pci_serial_quirk *quirk;
1898        int rc, nr_ports, i;
1899
1900        /*
1901         * Find number of ports on board
1902         */
1903        if (dev->vendor == PCI_VENDOR_ID_OXSEMI ||
1904            dev->vendor == PCI_VENDOR_ID_MAINPINE)
1905                pci_oxsemi_tornado_init(dev, board);
1906
1907        nr_ports = board->num_ports;
1908
1909        /*
1910         * Find an init and setup quirks.
1911         */
1912        quirk = find_quirk(dev);
1913
1914        /*
1915         * Run the new-style initialization function.
1916         * The initialization function returns:
1917         *  <0  - error
1918         *   0  - use board->num_ports
1919         *  >0  - number of ports
1920         */
1921        if (quirk->init) {
1922                rc = quirk->init(dev);
1923                if (rc < 0) {
1924                        priv = ERR_PTR(rc);
1925                        goto err_out;
1926                }
1927                if (rc)
1928                        nr_ports = rc;
1929        }
1930
1931        priv = kzalloc(sizeof(struct serial_private) +
1932                       sizeof(unsigned int) * nr_ports,
1933                       GFP_KERNEL);
1934        if (!priv) {
1935                priv = ERR_PTR(-ENOMEM);
1936                goto err_deinit;
1937        }
1938
1939        priv->dev = dev;
1940        priv->quirk = quirk;
1941
1942        memset(&serial_port, 0, sizeof(struct uart_port));
1943        serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
1944        serial_port.uartclk = board->base_baud * 16;
1945        serial_port.irq = get_pci_irq(dev, board);
1946        serial_port.dev = &dev->dev;
1947
1948        for (i = 0; i < nr_ports; i++) {
1949                if (quirk->setup(priv, board, &serial_port, i))
1950                        break;
1951
1952#ifdef SERIAL_DEBUG_PCI
1953                printk(KERN_DEBUG "Setup PCI port: port %x, irq %d, type %d\n",
1954                       serial_port.iobase, serial_port.irq, serial_port.iotype);
1955#endif
1956
1957                priv->line[i] = serial8250_register_port(&serial_port);
1958                if (priv->line[i] < 0) {
1959                        printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), priv->line[i]);
1960                        break;
1961                }
1962        }
1963        priv->nr = i;
1964        return priv;
1965
1966err_deinit:
1967        if (quirk->exit)
1968                quirk->exit(dev);
1969err_out:
1970        return priv;
1971}
1972EXPORT_SYMBOL_GPL(pciserial_init_ports);
1973
1974void pciserial_remove_ports(struct serial_private *priv)
1975{
1976        struct pci_serial_quirk *quirk;
1977        int i;
1978
1979        for (i = 0; i < priv->nr; i++)
1980                serial8250_unregister_port(priv->line[i]);
1981
1982        for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
1983                if (priv->remapped_bar[i])
1984                        iounmap(priv->remapped_bar[i]);
1985                priv->remapped_bar[i] = NULL;
1986        }
1987
1988        /*
1989         * Find the exit quirks.
1990         */
1991        quirk = find_quirk(priv->dev);
1992        if (quirk->exit)
1993                quirk->exit(priv->dev);
1994
1995        kfree(priv);
1996}
1997EXPORT_SYMBOL_GPL(pciserial_remove_ports);
1998
1999void pciserial_suspend_ports(struct serial_private *priv)
2000{
2001        int i;
2002
2003        for (i = 0; i < priv->nr; i++)
2004                if (priv->line[i] >= 0)
2005                        serial8250_suspend_port(priv->line[i]);
2006}
2007EXPORT_SYMBOL_GPL(pciserial_suspend_ports);
2008
2009void pciserial_resume_ports(struct serial_private *priv)
2010{
2011        int i;
2012
2013        /*
2014         * Ensure that the board is correctly configured.
2015         */
2016        if (priv->quirk->init)
2017                priv->quirk->init(priv->dev);
2018
2019        for (i = 0; i < priv->nr; i++)
2020                if (priv->line[i] >= 0)
2021                        serial8250_resume_port(priv->line[i]);
2022}
2023EXPORT_SYMBOL_GPL(pciserial_resume_ports);
2024
2025/*
2026 * Probe one serial board.  Unfortunately, there is no rhyme nor reason
2027 * to the arrangement of serial ports on a PCI card.
2028 */
2029static int __devinit
2030pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
2031{
2032        struct serial_private *priv;
2033        struct pciserial_board *board, tmp;
2034        int rc;
2035
2036        if (ent->driver_data >= ARRAY_SIZE(pci_boards)) {
2037                printk(KERN_ERR "pci_init_one: invalid driver_data: %ld\n",
2038                        ent->driver_data);
2039                return -EINVAL;
2040        }
2041
2042        board = &pci_boards[ent->driver_data];
2043
2044        rc = pci_enable_device(dev);
2045        if (rc)
2046                return rc;
2047
2048        if (ent->driver_data == pbn_default) {
2049                /*
2050                 * Use a copy of the pci_board entry for this;
2051                 * avoid changing entries in the table.
2052                 */
2053                memcpy(&tmp, board, sizeof(struct pciserial_board));
2054                board = &tmp;
2055
2056                /*
2057                 * We matched one of our class entries.  Try to
2058                 * determine the parameters of this board.
2059                 */
2060                rc = serial_pci_guess_board(dev, board);
2061                if (rc)
2062                        goto disable;
2063        } else {
2064                /*
2065                 * We matched an explicit entry.  If we are able to
2066                 * detect this boards settings with our heuristic,
2067                 * then we no longer need this entry.
2068                 */
2069                memcpy(&tmp, &pci_boards[pbn_default],
2070                       sizeof(struct pciserial_board));
2071                rc = serial_pci_guess_board(dev, &tmp);
2072                if (rc == 0 && serial_pci_matches(board, &tmp))
2073                        moan_device("Redundant entry in serial pci_table.",
2074                                    dev);
2075        }
2076
2077        priv = pciserial_init_ports(dev, board);
2078        if (!IS_ERR(priv)) {
2079                pci_set_drvdata(dev, priv);
2080                return 0;
2081        }
2082
2083        rc = PTR_ERR(priv);
2084
2085 disable:
2086        pci_disable_device(dev);
2087        return rc;
2088}
2089
2090static void __devexit pciserial_remove_one(struct pci_dev *dev)
2091{
2092        struct serial_private *priv = pci_get_drvdata(dev);
2093
2094        pci_set_drvdata(dev, NULL);
2095
2096        pciserial_remove_ports(priv);
2097
2098        pci_disable_device(dev);
2099}
2100
2101#ifdef CONFIG_PM
2102static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
2103{
2104        struct serial_private *priv = pci_get_drvdata(dev);
2105
2106        if (priv)
2107                pciserial_suspend_ports(priv);
2108
2109        pci_save_state(dev);
2110        pci_set_power_state(dev, pci_choose_state(dev, state));
2111        return 0;
2112}
2113
2114static int pciserial_resume_one(struct pci_dev *dev)
2115{
2116        int err;
2117        struct serial_private *priv = pci_get_drvdata(dev);
2118
2119        pci_set_power_state(dev, PCI_D0);
2120        pci_restore_state(dev);
2121
2122        if (priv) {
2123                /*
2124                 * The device may have been disabled.  Re-enable it.
2125                 */
2126                err = pci_enable_device(dev);
2127                /* FIXME: We cannot simply error out here */
2128                if (err)
2129                        printk(KERN_ERR "pciserial: Unable to re-enable ports, trying to continue.\n");
2130                pciserial_resume_ports(priv);
2131        }
2132        return 0;
2133}
2134#endif
2135
2136static struct pci_device_id serial_pci_tbl[] = {
2137        /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */
2138        {       PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620,
2139                PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0,
2140                pbn_b2_8_921600 },
2141        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2142                PCI_SUBVENDOR_ID_CONNECT_TECH,
2143                PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2144                pbn_b1_8_1382400 },
2145        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2146                PCI_SUBVENDOR_ID_CONNECT_TECH,
2147                PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2148                pbn_b1_4_1382400 },
2149        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2150                PCI_SUBVENDOR_ID_CONNECT_TECH,
2151                PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2152                pbn_b1_2_1382400 },
2153        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2154                PCI_SUBVENDOR_ID_CONNECT_TECH,
2155                PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2156                pbn_b1_8_1382400 },
2157        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2158                PCI_SUBVENDOR_ID_CONNECT_TECH,
2159                PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2160                pbn_b1_4_1382400 },
2161        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2162                PCI_SUBVENDOR_ID_CONNECT_TECH,
2163                PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2164                pbn_b1_2_1382400 },
2165        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2166                PCI_SUBVENDOR_ID_CONNECT_TECH,
2167                PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485, 0, 0,
2168                pbn_b1_8_921600 },
2169        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2170                PCI_SUBVENDOR_ID_CONNECT_TECH,
2171                PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 0, 0,
2172                pbn_b1_8_921600 },
2173        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2174                PCI_SUBVENDOR_ID_CONNECT_TECH,
2175                PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485, 0, 0,
2176                pbn_b1_4_921600 },
2177        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2178                PCI_SUBVENDOR_ID_CONNECT_TECH,
2179                PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0,
2180                pbn_b1_4_921600 },
2181        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2182                PCI_SUBVENDOR_ID_CONNECT_TECH,
2183                PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0,
2184                pbn_b1_2_921600 },
2185        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2186                PCI_SUBVENDOR_ID_CONNECT_TECH,
2187                PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0,
2188                pbn_b1_8_921600 },
2189        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2190                PCI_SUBVENDOR_ID_CONNECT_TECH,
2191                PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0,
2192                pbn_b1_8_921600 },
2193        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2194                PCI_SUBVENDOR_ID_CONNECT_TECH,
2195                PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0,
2196                pbn_b1_4_921600 },
2197        {       PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2198                PCI_SUBVENDOR_ID_CONNECT_TECH,
2199                PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ, 0, 0,
2200                pbn_b1_2_1250000 },
2201        {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2202                PCI_SUBVENDOR_ID_CONNECT_TECH,
2203                PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2, 0, 0,
2204                pbn_b0_2_1843200 },
2205        {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2206                PCI_SUBVENDOR_ID_CONNECT_TECH,
2207                PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4, 0, 0,
2208                pbn_b0_4_1843200 },
2209        {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2210                PCI_VENDOR_ID_AFAVLAB,
2211                PCI_SUBDEVICE_ID_AFAVLAB_P061, 0, 0,
2212                pbn_b0_4_1152000 },
2213        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2214                PCI_SUBVENDOR_ID_CONNECT_TECH,
2215                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_232, 0, 0,
2216                pbn_b0_2_1843200_200 },
2217        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2218                PCI_SUBVENDOR_ID_CONNECT_TECH,
2219                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_232, 0, 0,
2220                pbn_b0_4_1843200_200 },
2221        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2222                PCI_SUBVENDOR_ID_CONNECT_TECH,
2223                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_232, 0, 0,
2224                pbn_b0_8_1843200_200 },
2225        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2226                PCI_SUBVENDOR_ID_CONNECT_TECH,
2227                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_1_1, 0, 0,
2228                pbn_b0_2_1843200_200 },
2229        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2230                PCI_SUBVENDOR_ID_CONNECT_TECH,
2231                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_2, 0, 0,
2232                pbn_b0_4_1843200_200 },
2233        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2234                PCI_SUBVENDOR_ID_CONNECT_TECH,
2235                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_4, 0, 0,
2236                pbn_b0_8_1843200_200 },
2237        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2238                PCI_SUBVENDOR_ID_CONNECT_TECH,
2239                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2, 0, 0,
2240                pbn_b0_2_1843200_200 },
2241        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2242                PCI_SUBVENDOR_ID_CONNECT_TECH,
2243                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4, 0, 0,
2244                pbn_b0_4_1843200_200 },
2245        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2246                PCI_SUBVENDOR_ID_CONNECT_TECH,
2247                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8, 0, 0,
2248                pbn_b0_8_1843200_200 },
2249        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2250                PCI_SUBVENDOR_ID_CONNECT_TECH,
2251                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_485, 0, 0,
2252                pbn_b0_2_1843200_200 },
2253        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2254                PCI_SUBVENDOR_ID_CONNECT_TECH,
2255                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485, 0, 0,
2256                pbn_b0_4_1843200_200 },
2257        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2258                PCI_SUBVENDOR_ID_CONNECT_TECH,
2259                PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485, 0, 0,
2260                pbn_b0_8_1843200_200 },
2261
2262        {       PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,
2263                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2264                pbn_b2_bt_1_115200 },
2265        {       PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2,
2266                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2267                pbn_b2_bt_2_115200 },
2268        {       PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422,
2269                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2270                pbn_b2_bt_4_115200 },
2271        {       PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232,
2272                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2273                pbn_b2_bt_2_115200 },
2274        {       PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4,
2275                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2276                pbn_b2_bt_4_115200 },
2277        {       PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,
2278                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2279                pbn_b2_8_115200 },
2280        {       PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_7803,
2281                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2282                pbn_b2_8_460800 },
2283        {       PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM8,
2284                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2285                pbn_b2_8_115200 },
2286
2287        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2,
2288                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2289                pbn_b2_bt_2_115200 },
2290        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200,
2291                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2292                pbn_b2_bt_2_921600 },
2293        /*
2294         * VScom SPCOM800, from sl@s.pl
2295         */
2296        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800,
2297                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2298                pbn_b2_8_921600 },
2299        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077,
2300                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2301                pbn_b2_4_921600 },
2302        /* Unknown card - subdevice 0x1584 */
2303        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2304                PCI_VENDOR_ID_PLX,
2305                PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0,
2306                pbn_b0_4_115200 },
2307        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2308                PCI_SUBVENDOR_ID_KEYSPAN,
2309                PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0,
2310                pbn_panacom },
2311        {       PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM,
2312                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2313                pbn_panacom4 },
2314        {       PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM,
2315                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2316                pbn_panacom2 },
2317        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2318                PCI_VENDOR_ID_ESDGMBH,
2319                PCI_DEVICE_ID_ESDGMBH_CPCIASIO4, 0, 0,
2320                pbn_b2_4_115200 },
2321        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2322                PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2323                PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0,
2324                pbn_b2_4_460800 },
2325        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2326                PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2327                PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0,
2328                pbn_b2_8_460800 },
2329        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2330                PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2331                PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0,
2332                pbn_b2_16_460800 },
2333        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2334                PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2335                PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0,
2336                pbn_b2_16_460800 },
2337        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2338                PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2339                PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0,
2340                pbn_b2_4_460800 },
2341        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2342                PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2343                PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
2344                pbn_b2_8_460800 },
2345        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2346                PCI_SUBVENDOR_ID_EXSYS,
2347                PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
2348                pbn_exsys_4055 },
2349        /*
2350         * Megawolf Romulus PCI Serial Card, from Mike Hudson
2351         * (Exoray@isys.ca)
2352         */
2353        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS,
2354                0x10b5, 0x106a, 0, 0,
2355                pbn_plx_romulus },
2356        {       PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100,
2357                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2358                pbn_b1_4_115200 },
2359        {       PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100,
2360                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2361                pbn_b1_2_115200 },
2362        {       PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D,
2363                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2364                pbn_b1_8_115200 },
2365        {       PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M,
2366                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2367                pbn_b1_8_115200 },
2368        {       PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,
2369                PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4,
2370                0, 0,
2371                pbn_b0_4_921600 },
2372        {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2373                PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL,
2374                0, 0,
2375                pbn_b0_4_1152000 },
2376
2377                /*
2378                 * The below card is a little controversial since it is the
2379                 * subject of a PCI vendor/device ID clash.  (See
2380                 * www.ussg.iu.edu/hypermail/linux/kernel/0303.1/0516.html).
2381                 * For now just used the hex ID 0x950a.
2382                 */
2383        {       PCI_VENDOR_ID_OXSEMI, 0x950a,
2384                PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL, 0, 0,
2385                pbn_b0_2_115200 },
2386        {       PCI_VENDOR_ID_OXSEMI, 0x950a,
2387                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2388                pbn_b0_2_1130000 },
2389        {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2390                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2391                pbn_b0_4_115200 },
2392        {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,
2393                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2394                pbn_b0_bt_2_921600 },
2395
2396        /*
2397         * Oxford Semiconductor Inc. Tornado PCI express device range.
2398         */
2399        {       PCI_VENDOR_ID_OXSEMI, 0xc101,    /* OXPCIe952 1 Legacy UART */
2400                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2401                pbn_b0_1_4000000 },
2402        {       PCI_VENDOR_ID_OXSEMI, 0xc105,    /* OXPCIe952 1 Legacy UART */
2403                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2404                pbn_b0_1_4000000 },
2405        {       PCI_VENDOR_ID_OXSEMI, 0xc11b,    /* OXPCIe952 1 Native UART */
2406                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2407                pbn_oxsemi_1_4000000 },
2408        {       PCI_VENDOR_ID_OXSEMI, 0xc11f,    /* OXPCIe952 1 Native UART */
2409                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2410                pbn_oxsemi_1_4000000 },
2411        {       PCI_VENDOR_ID_OXSEMI, 0xc120,    /* OXPCIe952 1 Legacy UART */
2412                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2413                pbn_b0_1_4000000 },
2414        {       PCI_VENDOR_ID_OXSEMI, 0xc124,    /* OXPCIe952 1 Legacy UART */
2415                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2416                pbn_b0_1_4000000 },
2417        {       PCI_VENDOR_ID_OXSEMI, 0xc138,    /* OXPCIe952 1 Native UART */
2418                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2419                pbn_oxsemi_1_4000000 },
2420        {       PCI_VENDOR_ID_OXSEMI, 0xc13d,    /* OXPCIe952 1 Native UART */
2421                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2422                pbn_oxsemi_1_4000000 },
2423        {       PCI_VENDOR_ID_OXSEMI, 0xc140,    /* OXPCIe952 1 Legacy UART */
2424                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2425                pbn_b0_1_4000000 },
2426        {       PCI_VENDOR_ID_OXSEMI, 0xc141,    /* OXPCIe952 1 Legacy UART */
2427                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2428                pbn_b0_1_4000000 },
2429        {       PCI_VENDOR_ID_OXSEMI, 0xc144,    /* OXPCIe952 1 Legacy UART */
2430                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2431                pbn_b0_1_4000000 },
2432        {       PCI_VENDOR_ID_OXSEMI, 0xc145,    /* OXPCIe952 1 Legacy UART */
2433                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2434                pbn_b0_1_4000000 },
2435        {       PCI_VENDOR_ID_OXSEMI, 0xc158,    /* OXPCIe952 2 Native UART */
2436                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2437                pbn_oxsemi_2_4000000 },
2438        {       PCI_VENDOR_ID_OXSEMI, 0xc15d,    /* OXPCIe952 2 Native UART */
2439                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2440                pbn_oxsemi_2_4000000 },
2441        {       PCI_VENDOR_ID_OXSEMI, 0xc208,    /* OXPCIe954 4 Native UART */
2442                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2443                pbn_oxsemi_4_4000000 },
2444        {       PCI_VENDOR_ID_OXSEMI, 0xc20d,    /* OXPCIe954 4 Native UART */
2445                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2446                pbn_oxsemi_4_4000000 },
2447        {       PCI_VENDOR_ID_OXSEMI, 0xc308,    /* OXPCIe958 8 Native UART */
2448                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2449                pbn_oxsemi_8_4000000 },
2450        {       PCI_VENDOR_ID_OXSEMI, 0xc30d,    /* OXPCIe958 8 Native UART */
2451                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2452                pbn_oxsemi_8_4000000 },
2453        {       PCI_VENDOR_ID_OXSEMI, 0xc40b,    /* OXPCIe200 1 Native UART */
2454                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2455                pbn_oxsemi_1_4000000 },
2456        {       PCI_VENDOR_ID_OXSEMI, 0xc40f,    /* OXPCIe200 1 Native UART */
2457                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2458                pbn_oxsemi_1_4000000 },
2459        {       PCI_VENDOR_ID_OXSEMI, 0xc41b,    /* OXPCIe200 1 Native UART */
2460                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2461                pbn_oxsemi_1_4000000 },
2462        {       PCI_VENDOR_ID_OXSEMI, 0xc41f,    /* OXPCIe200 1 Native UART */
2463                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2464                pbn_oxsemi_1_4000000 },
2465        {       PCI_VENDOR_ID_OXSEMI, 0xc42b,    /* OXPCIe200 1 Native UART */
2466                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2467                pbn_oxsemi_1_4000000 },
2468        {       PCI_VENDOR_ID_OXSEMI, 0xc42f,    /* OXPCIe200 1 Native UART */
2469                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2470                pbn_oxsemi_1_4000000 },
2471        {       PCI_VENDOR_ID_OXSEMI, 0xc43b,    /* OXPCIe200 1 Native UART */
2472                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2473                pbn_oxsemi_1_4000000 },
2474        {       PCI_VENDOR_ID_OXSEMI, 0xc43f,    /* OXPCIe200 1 Native UART */
2475                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2476                pbn_oxsemi_1_4000000 },
2477        {       PCI_VENDOR_ID_OXSEMI, 0xc44b,    /* OXPCIe200 1 Native UART */
2478                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2479                pbn_oxsemi_1_4000000 },
2480        {       PCI_VENDOR_ID_OXSEMI, 0xc44f,    /* OXPCIe200 1 Native UART */
2481                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2482                pbn_oxsemi_1_4000000 },
2483        {       PCI_VENDOR_ID_OXSEMI, 0xc45b,    /* OXPCIe200 1 Native UART */
2484                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2485                pbn_oxsemi_1_4000000 },
2486        {       PCI_VENDOR_ID_OXSEMI, 0xc45f,    /* OXPCIe200 1 Native UART */
2487                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2488                pbn_oxsemi_1_4000000 },
2489        {       PCI_VENDOR_ID_OXSEMI, 0xc46b,    /* OXPCIe200 1 Native UART */
2490                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2491                pbn_oxsemi_1_4000000 },
2492        {       PCI_VENDOR_ID_OXSEMI, 0xc46f,    /* OXPCIe200 1 Native UART */
2493                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2494                pbn_oxsemi_1_4000000 },
2495        {       PCI_VENDOR_ID_OXSEMI, 0xc47b,    /* OXPCIe200 1 Native UART */
2496                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2497                pbn_oxsemi_1_4000000 },
2498        {       PCI_VENDOR_ID_OXSEMI, 0xc47f,    /* OXPCIe200 1 Native UART */
2499                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2500                pbn_oxsemi_1_4000000 },
2501        {       PCI_VENDOR_ID_OXSEMI, 0xc48b,    /* OXPCIe200 1 Native UART */
2502                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2503                pbn_oxsemi_1_4000000 },
2504        {       PCI_VENDOR_ID_OXSEMI, 0xc48f,    /* OXPCIe200 1 Native UART */
2505                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2506                pbn_oxsemi_1_4000000 },
2507        {       PCI_VENDOR_ID_OXSEMI, 0xc49b,    /* OXPCIe200 1 Native UART */
2508                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2509                pbn_oxsemi_1_4000000 },
2510        {       PCI_VENDOR_ID_OXSEMI, 0xc49f,    /* OXPCIe200 1 Native UART */
2511                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2512                pbn_oxsemi_1_4000000 },
2513        {       PCI_VENDOR_ID_OXSEMI, 0xc4ab,    /* OXPCIe200 1 Native UART */
2514                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2515                pbn_oxsemi_1_4000000 },
2516        {       PCI_VENDOR_ID_OXSEMI, 0xc4af,    /* OXPCIe200 1 Native UART */
2517                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2518                pbn_oxsemi_1_4000000 },
2519        {       PCI_VENDOR_ID_OXSEMI, 0xc4bb,    /* OXPCIe200 1 Native UART */
2520                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2521                pbn_oxsemi_1_4000000 },
2522        {       PCI_VENDOR_ID_OXSEMI, 0xc4bf,    /* OXPCIe200 1 Native UART */
2523                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2524                pbn_oxsemi_1_4000000 },
2525        {       PCI_VENDOR_ID_OXSEMI, 0xc4cb,    /* OXPCIe200 1 Native UART */
2526                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2527                pbn_oxsemi_1_4000000 },
2528        {       PCI_VENDOR_ID_OXSEMI, 0xc4cf,    /* OXPCIe200 1 Native UART */
2529                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2530                pbn_oxsemi_1_4000000 },
2531        /*
2532         * Mainpine Inc. IQ Express "Rev3" utilizing OxSemi Tornado
2533         */
2534        {       PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 1 Port V.34 Super-G3 Fax */
2535                PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
2536                pbn_oxsemi_1_4000000 },
2537        {       PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 2 Port V.34 Super-G3 Fax */
2538                PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
2539                pbn_oxsemi_2_4000000 },
2540        {       PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 4 Port V.34 Super-G3 Fax */
2541                PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
2542                pbn_oxsemi_4_4000000 },
2543        {       PCI_VENDOR_ID_MAINPINE, 0x4000, /* IQ Express 8 Port V.34 Super-G3 Fax */
2544                PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
2545                pbn_oxsemi_8_4000000 },
2546        /*
2547         * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards,
2548         * from skokodyn@yahoo.com
2549         */
2550        {       PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2551                PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0,
2552                pbn_sbsxrsio },
2553        {       PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2554                PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0,
2555                pbn_sbsxrsio },
2556        {       PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2557                PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0,
2558                pbn_sbsxrsio },
2559        {       PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2560                PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0,
2561                pbn_sbsxrsio },
2562
2563        /*
2564         * Digitan DS560-558, from jimd@esoft.com
2565         */
2566        {       PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM,
2567                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2568                pbn_b1_1_115200 },
2569
2570        /*
2571         * Titan Electronic cards
2572         *  The 400L and 800L have a custom setup quirk.
2573         */
2574        {       PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100,
2575                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2576                pbn_b0_1_921600 },
2577        {       PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200,
2578                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2579                pbn_b0_2_921600 },
2580        {       PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400,
2581                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2582                pbn_b0_4_921600 },
2583        {       PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B,
2584                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2585                pbn_b0_4_921600 },
2586        {       PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L,
2587                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2588                pbn_b1_1_921600 },
2589        {       PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L,
2590                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2591                pbn_b1_bt_2_921600 },
2592        {       PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L,
2593                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2594                pbn_b0_bt_4_921600 },
2595        {       PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L,
2596                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2597                pbn_b0_bt_8_921600 },
2598
2599        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550,
2600                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2601                pbn_b2_1_460800 },
2602        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650,
2603                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2604                pbn_b2_1_460800 },
2605        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850,
2606                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2607                pbn_b2_1_460800 },
2608        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550,
2609                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2610                pbn_b2_bt_2_921600 },
2611        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650,
2612                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2613                pbn_b2_bt_2_921600 },
2614        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850,
2615                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2616                pbn_b2_bt_2_921600 },
2617        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550,
2618                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2619                pbn_b2_bt_4_921600 },
2620        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650,
2621                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2622                pbn_b2_bt_4_921600 },
2623        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850,
2624                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2625                pbn_b2_bt_4_921600 },
2626        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550,
2627                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2628                pbn_b0_1_921600 },
2629        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650,
2630                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2631                pbn_b0_1_921600 },
2632        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850,
2633                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2634                pbn_b0_1_921600 },
2635        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550,
2636                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2637                pbn_b0_bt_2_921600 },
2638        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650,
2639                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2640                pbn_b0_bt_2_921600 },
2641        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850,
2642                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2643                pbn_b0_bt_2_921600 },
2644        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550,
2645                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2646                pbn_b0_bt_4_921600 },
2647        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650,
2648                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2649                pbn_b0_bt_4_921600 },
2650        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850,
2651                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2652                pbn_b0_bt_4_921600 },
2653        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_550,
2654                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2655                pbn_b0_bt_8_921600 },
2656        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_650,
2657                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2658                pbn_b0_bt_8_921600 },
2659        {       PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_850,
2660                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2661                pbn_b0_bt_8_921600 },
2662
2663        /*
2664         * Computone devices submitted by Doug McNash dmcnash@computone.com
2665         */
2666        {       PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
2667                PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4,
2668                0, 0, pbn_computone_4 },
2669        {       PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
2670                PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8,
2671                0, 0, pbn_computone_8 },
2672        {       PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
2673                PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6,
2674                0, 0, pbn_computone_6 },
2675
2676        {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N,
2677                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2678                pbn_oxsemi },
2679        {       PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889,
2680                PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0,
2681                pbn_b0_bt_1_921600 },
2682
2683        /*
2684         * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org>
2685         */
2686        {       PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P028,
2687                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2688                pbn_b0_bt_8_115200 },
2689        {       PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P030,
2690                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2691                pbn_b0_bt_8_115200 },
2692
2693        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL,
2694                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2695                pbn_b0_bt_2_115200 },
2696        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A,
2697                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2698                pbn_b0_bt_2_115200 },
2699        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B,
2700                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2701                pbn_b0_bt_2_115200 },
2702        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_A,
2703                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2704                pbn_b0_bt_4_460800 },
2705        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_B,
2706                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2707                pbn_b0_bt_4_460800 },
2708        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS,
2709                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2710                pbn_b0_bt_2_460800 },
2711        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A,
2712                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2713                pbn_b0_bt_2_460800 },
2714        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B,
2715                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2716                pbn_b0_bt_2_460800 },
2717        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL,
2718                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2719                pbn_b0_bt_1_115200 },
2720        {       PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650,
2721                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2722                pbn_b0_bt_1_460800 },
2723
2724        /*
2725         * Korenix Jetcard F0/F1 cards (JC1204, JC1208, JC1404, JC1408).
2726         * Cards are identified by their subsystem vendor IDs, which
2727         * (in hex) match the model number.
2728         *
2729         * Note that JC140x are RS422/485 cards which require ox950
2730         * ACR = 0x10, and as such are not currently fully supported.
2731         */
2732        {       PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
2733                0x1204, 0x0004, 0, 0,
2734                pbn_b0_4_921600 },
2735        {       PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
2736                0x1208, 0x0004, 0, 0,
2737                pbn_b0_4_921600 },
2738/*      {       PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
2739                0x1402, 0x0002, 0, 0,
2740                pbn_b0_2_921600 }, */
2741/*      {       PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
2742                0x1404, 0x0004, 0, 0,
2743                pbn_b0_4_921600 }, */
2744        {       PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF1,
2745                0x1208, 0x0004, 0, 0,
2746                pbn_b0_4_921600 },
2747
2748        /*
2749         * Dell Remote Access Card 4 - Tim_T_Murphy@Dell.com
2750         */
2751        {       PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RAC4,
2752                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2753                pbn_b1_1_1382400 },
2754
2755        /*
2756         * Dell Remote Access Card III - Tim_T_Murphy@Dell.com
2757         */
2758        {       PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RACIII,
2759                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2760                pbn_b1_1_1382400 },
2761
2762        /*
2763         * RAStel 2 port modem, gerg@moreton.com.au
2764         */
2765        {       PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT,
2766                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2767                pbn_b2_bt_2_115200 },
2768
2769        /*
2770         * EKF addition for i960 Boards form EKF with serial port
2771         */
2772        {       PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80960_RP,
2773                0xE4BF, PCI_ANY_ID, 0, 0,
2774                pbn_intel_i960 },
2775
2776        /*
2777         * Xircom Cardbus/Ethernet combos
2778         */
2779        {       PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM,
2780                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2781                pbn_b0_1_115200 },
2782        /*
2783         * Xircom RBM56G cardbus modem - Dirk Arnold (temp entry)
2784         */
2785        {       PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_RBM56G,
2786                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2787                pbn_b0_1_115200 },
2788
2789        /*
2790         * Untested PCI modems, sent in from various folks...
2791         */
2792
2793        /*
2794         * Elsa Model 56K PCI Modem, from Andreas Rath <arh@01019freenet.de>
2795         */
2796        {       PCI_VENDOR_ID_ROCKWELL, 0x1004,
2797                0x1048, 0x1500, 0, 0,
2798                pbn_b1_1_115200 },
2799
2800        {       PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
2801                0xFF00, 0, 0, 0,
2802                pbn_sgi_ioc3 },
2803
2804        /*
2805         * HP Diva card
2806         */
2807        {       PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
2808                PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_RMP3, 0, 0,
2809                pbn_b1_1_115200 },
2810        {       PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
2811                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2812                pbn_b0_5_115200 },
2813        {       PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
2814                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2815                pbn_b2_1_115200 },
2816
2817        {       PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2,
2818                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2819                pbn_b3_2_115200 },
2820        {       PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM4,
2821                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2822                pbn_b3_4_115200 },
2823        {       PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8,
2824                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2825                pbn_b3_8_115200 },
2826
2827        /*
2828         * Exar Corp. XR17C15[248] Dual/Quad/Octal UART
2829         */
2830        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2831                PCI_ANY_ID, PCI_ANY_ID,
2832                0,
2833                0, pbn_exar_XR17C152 },
2834        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2835                PCI_ANY_ID, PCI_ANY_ID,
2836                0,
2837                0, pbn_exar_XR17C154 },
2838        {       PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2839                PCI_ANY_ID, PCI_ANY_ID,
2840                0,
2841                0, pbn_exar_XR17C158 },
2842
2843        /*
2844         * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke)
2845         */
2846        {       PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560,
2847                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2848                pbn_b0_1_115200 },
2849        /*
2850         * ITE
2851         */
2852        {       PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
2853                PCI_ANY_ID, PCI_ANY_ID,
2854                0, 0,
2855                pbn_b1_bt_1_115200 },
2856
2857        /*
2858         * IntaShield IS-200
2859         */
2860        {       PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS200,
2861                PCI_ANY_ID, PCI_ANY_ID, 0, 0,   /* 135a.0811 */
2862                pbn_b2_2_115200 },
2863        /*
2864         * IntaShield IS-400
2865         */
2866        {       PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS400,
2867                PCI_ANY_ID, PCI_ANY_ID, 0, 0,    /* 135a.0dc0 */
2868                pbn_b2_4_115200 },
2869        /*
2870         * Perle PCI-RAS cards
2871         */
2872        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2873                PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4,
2874                0, 0, pbn_b2_4_921600 },
2875        {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2876                PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8,
2877                0, 0, pbn_b2_8_921600 },
2878
2879        /*
2880         * Mainpine series cards: Fairly standard layout but fools
2881         * parts of the autodetect in some cases and uses otherwise
2882         * unmatched communications subclasses in the PCI Express case
2883         */
2884
2885        {       /* RockForceDUO */
2886                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2887                PCI_VENDOR_ID_MAINPINE, 0x0200,
2888                0, 0, pbn_b0_2_115200 },
2889        {       /* RockForceQUATRO */
2890                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2891                PCI_VENDOR_ID_MAINPINE, 0x0300,
2892                0, 0, pbn_b0_4_115200 },
2893        {       /* RockForceDUO+ */
2894                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2895                PCI_VENDOR_ID_MAINPINE, 0x0400,
2896                0, 0, pbn_b0_2_115200 },
2897        {       /* RockForceQUATRO+ */
2898                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2899                PCI_VENDOR_ID_MAINPINE, 0x0500,
2900                0, 0, pbn_b0_4_115200 },
2901        {       /* RockForce+ */
2902                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2903                PCI_VENDOR_ID_MAINPINE, 0x0600,
2904                0, 0, pbn_b0_2_115200 },
2905        {       /* RockForce+ */
2906                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2907                PCI_VENDOR_ID_MAINPINE, 0x0700,
2908                0, 0, pbn_b0_4_115200 },
2909        {       /* RockForceOCTO+ */
2910                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2911                PCI_VENDOR_ID_MAINPINE, 0x0800,
2912                0, 0, pbn_b0_8_115200 },
2913        {       /* RockForceDUO+ */
2914                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2915                PCI_VENDOR_ID_MAINPINE, 0x0C00,
2916                0, 0, pbn_b0_2_115200 },
2917        {       /* RockForceQUARTRO+ */
2918                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2919                PCI_VENDOR_ID_MAINPINE, 0x0D00,
2920                0, 0, pbn_b0_4_115200 },
2921        {       /* RockForceOCTO+ */
2922                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2923                PCI_VENDOR_ID_MAINPINE, 0x1D00,
2924                0, 0, pbn_b0_8_115200 },
2925        {       /* RockForceD1 */
2926                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2927                PCI_VENDOR_ID_MAINPINE, 0x2000,
2928                0, 0, pbn_b0_1_115200 },
2929        {       /* RockForceF1 */
2930                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2931                PCI_VENDOR_ID_MAINPINE, 0x2100,
2932                0, 0, pbn_b0_1_115200 },
2933        {       /* RockForceD2 */
2934                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2935                PCI_VENDOR_ID_MAINPINE, 0x2200,
2936                0, 0, pbn_b0_2_115200 },
2937        {       /* RockForceF2 */
2938                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2939                PCI_VENDOR_ID_MAINPINE, 0x2300,
2940                0, 0, pbn_b0_2_115200 },
2941        {       /* RockForceD4 */
2942                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2943                PCI_VENDOR_ID_MAINPINE, 0x2400,
2944                0, 0, pbn_b0_4_115200 },
2945        {       /* RockForceF4 */
2946                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2947                PCI_VENDOR_ID_MAINPINE, 0x2500,
2948                0, 0, pbn_b0_4_115200 },
2949        {       /* RockForceD8 */
2950                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2951                PCI_VENDOR_ID_MAINPINE, 0x2600,
2952                0, 0, pbn_b0_8_115200 },
2953        {       /* RockForceF8 */
2954                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2955                PCI_VENDOR_ID_MAINPINE, 0x2700,
2956                0, 0, pbn_b0_8_115200 },
2957        {       /* IQ Express D1 */
2958                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2959                PCI_VENDOR_ID_MAINPINE, 0x3000,
2960                0, 0, pbn_b0_1_115200 },
2961        {       /* IQ Express F1 */
2962                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2963                PCI_VENDOR_ID_MAINPINE, 0x3100,
2964                0, 0, pbn_b0_1_115200 },
2965        {       /* IQ Express D2 */
2966                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2967                PCI_VENDOR_ID_MAINPINE, 0x3200,
2968                0, 0, pbn_b0_2_115200 },
2969        {       /* IQ Express F2 */
2970                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2971                PCI_VENDOR_ID_MAINPINE, 0x3300,
2972                0, 0, pbn_b0_2_115200 },
2973        {       /* IQ Express D4 */
2974                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2975                PCI_VENDOR_ID_MAINPINE, 0x3400,
2976                0, 0, pbn_b0_4_115200 },
2977        {       /* IQ Express F4 */
2978                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2979                PCI_VENDOR_ID_MAINPINE, 0x3500,
2980                0, 0, pbn_b0_4_115200 },
2981        {       /* IQ Express D8 */
2982                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2983                PCI_VENDOR_ID_MAINPINE, 0x3C00,
2984                0, 0, pbn_b0_8_115200 },
2985        {       /* IQ Express F8 */
2986                PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2987                PCI_VENDOR_ID_MAINPINE, 0x3D00,
2988                0, 0, pbn_b0_8_115200 },
2989
2990
2991        /*
2992         * PA Semi PA6T-1682M on-chip UART
2993         */
2994        {       PCI_VENDOR_ID_PASEMI, 0xa004,
2995                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2996                pbn_pasemi_1682M },
2997
2998        /*
2999        * ADDI-DATA GmbH communication cards <info@addi-data.com>
3000        */
3001        {       PCI_VENDOR_ID_ADDIDATA,
3002                PCI_DEVICE_ID_ADDIDATA_APCI7500,
3003                PCI_ANY_ID,
3004                PCI_ANY_ID,
3005                0,
3006                0,
3007                pbn_b0_4_115200 },
3008
3009        {       PCI_VENDOR_ID_ADDIDATA,
3010                PCI_DEVICE_ID_ADDIDATA_APCI7420,
3011                PCI_ANY_ID,
3012                PCI_ANY_ID,
3013                0,
3014                0,
3015                pbn_b0_2_115200 },
3016
3017        {       PCI_VENDOR_ID_ADDIDATA,
3018                PCI_DEVICE_ID_ADDIDATA_APCI7300,
3019                PCI_ANY_ID,
3020                PCI_ANY_ID,
3021                0,
3022                0,
3023                pbn_b0_1_115200 },
3024
3025        {       PCI_VENDOR_ID_ADDIDATA_OLD,
3026                PCI_DEVICE_ID_ADDIDATA_APCI7800,
3027                PCI_ANY_ID,
3028                PCI_ANY_ID,
3029                0,
3030                0,
3031                pbn_b1_8_115200 },
3032
3033        {       PCI_VENDOR_ID_ADDIDATA,
3034                PCI_DEVICE_ID_ADDIDATA_APCI7500_2,
3035                PCI_ANY_ID,
3036                PCI_ANY_ID,
3037                0,
3038                0,
3039                pbn_b0_4_115200 },
3040
3041        {       PCI_VENDOR_ID_ADDIDATA,
3042                PCI_DEVICE_ID_ADDIDATA_APCI7420_2,
3043                PCI_ANY_ID,
3044                PCI_ANY_ID,
3045                0,
3046                0,
3047                pbn_b0_2_115200 },
3048
3049        {       PCI_VENDOR_ID_ADDIDATA,
3050                PCI_DEVICE_ID_ADDIDATA_APCI7300_2,
3051                PCI_ANY_ID,
3052                PCI_ANY_ID,
3053                0,
3054                0,
3055                pbn_b0_1_115200 },
3056
3057        {       PCI_VENDOR_ID_ADDIDATA,
3058                PCI_DEVICE_ID_ADDIDATA_APCI7500_3,
3059                PCI_ANY_ID,
3060                PCI_ANY_ID,
3061                0,
3062                0,
3063                pbn_b0_4_115200 },
3064
3065        {       PCI_VENDOR_ID_ADDIDATA,
3066                PCI_DEVICE_ID_ADDIDATA_APCI7420_3,
3067                PCI_ANY_ID,
3068                PCI_ANY_ID,
3069                0,
3070                0,
3071                pbn_b0_2_115200 },
3072
3073        {       PCI_VENDOR_ID_ADDIDATA,
3074                PCI_DEVICE_ID_ADDIDATA_APCI7300_3,
3075                PCI_ANY_ID,
3076                PCI_ANY_ID,
3077                0,
3078                0,
3079                pbn_b0_1_115200 },
3080
3081        {       PCI_VENDOR_ID_ADDIDATA,
3082                PCI_DEVICE_ID_ADDIDATA_APCI7800_3,
3083                PCI_ANY_ID,
3084                PCI_ANY_ID,
3085                0,
3086                0,
3087                pbn_b0_8_115200 },
3088
3089        /*
3090         * These entries match devices with class COMMUNICATION_SERIAL,
3091         * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
3092         */
3093        {       PCI_ANY_ID, PCI_ANY_ID,
3094                PCI_ANY_ID, PCI_ANY_ID,
3095                PCI_CLASS_COMMUNICATION_SERIAL << 8,
3096                0xffff00, pbn_default },
3097        {       PCI_ANY_ID, PCI_ANY_ID,
3098                PCI_ANY_ID, PCI_ANY_ID,
3099                PCI_CLASS_COMMUNICATION_MODEM << 8,
3100                0xffff00, pbn_default },
3101        {       PCI_ANY_ID, PCI_ANY_ID,
3102                PCI_ANY_ID, PCI_ANY_ID,
3103                PCI_CLASS_COMMUNICATION_MULTISERIAL << 8,
3104                0xffff00, pbn_default },
3105        { 0, }
3106};
3107
3108static struct pci_driver serial_pci_driver = {
3109        .name           = "serial",
3110        .probe          = pciserial_init_one,
3111        .remove         = __devexit_p(pciserial_remove_one),
3112#ifdef CONFIG_PM
3113        .suspend        = pciserial_suspend_one,
3114        .resume         = pciserial_resume_one,
3115#endif
3116        .id_table       = serial_pci_tbl,
3117};
3118
3119static int __init serial8250_pci_init(void)
3120{
3121        return pci_register_driver(&serial_pci_driver);
3122}
3123
3124static void __exit serial8250_pci_exit(void)
3125{
3126        pci_unregister_driver(&serial_pci_driver);
3127}
3128
3129module_init(serial8250_pci_init);
3130module_exit(serial8250_pci_exit);
3131
3132MODULE_LICENSE("GPL");
3133MODULE_DESCRIPTION("Generic 8250/16x50 PCI serial probe module");
3134MODULE_DEVICE_TABLE(pci, serial_pci_tbl);
3135