1
2
3
4
5
6
7
8
9
10
11
12
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
35
36
37
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
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
134
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
155
156
157
158
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
188
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
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
228 pci_read_config_dword(dev, 0x44, (void *)&oldval);
229 if (oldval == 0x00001000L) {
230 printk(KERN_DEBUG "Local i960 firmware missing");
231 return -ENODEV;
232 }
233 return 0;
234}
235
236
237
238
239
240
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
261
262
263
264
265
266
267 irq_config = 0x5b;
268
269
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
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
294
295 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
296 if (p != NULL) {
297 writel(0, p + 0x4c);
298
299
300
301
302 readl(p + 0x4c);
303 iounmap(p);
304 }
305}
306
307
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
318 offset += idx * board->uart_offset;
319 } else if (idx < 8) {
320
321 offset += idx * board->uart_offset + 0xC00;
322 } else
323 return 1;
324
325 return setup_port(priv, port, bar, offset, board->reg_shift);
326}
327
328
329
330
331
332
333
334
335
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
348 writeb(0x10, p + OCT_REG_CR_OFF);
349 udelay(50);
350 writeb(0x0, p + OCT_REG_CR_OFF);
351
352
353 writeb(0x4, p + OCT_REG_CR_OFF);
354 iounmap(p);
355
356 return 0;
357}
358
359
360
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
370 if (p != NULL)
371 writeb(0, p + OCT_REG_CR_OFF);
372 iounmap(p);
373}
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
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:
412 data = 0xffdf;
413 break;
414 case PCI_DEVICE_ID_SIIG_2S_10x:
415 data = 0xf7ff;
416 break;
417 default:
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
440 pci_read_config_byte(dev, 0x6f, &data);
441 pci_write_config_byte(dev, 0x6f, data & 0xef);
442
443
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
481
482
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
534
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
556 case 4:
557 case 5:
558 case 6:
559 case 7:
560 bar = idx - 2;
561 }
562
563 return setup_port(priv, port, bar, offset, board->reg_shift);
564}
565
566
567
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
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
609
610
611
612
613
614
615
616
617
618
619
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
627#define ITE_887x_IOSIZE 32
628
629#define ITE_887x_POSIO_IOSIZE_8 (3 << 24)
630
631#define ITE_887x_POSIO_IOSIZE_32 (5 << 24)
632
633#define ITE_887x_POSIO_SPEED (3 << 29)
634
635#define ITE_887x_POSIO_ENABLE (1 << 31)
636
637static int pci_ite887x_init(struct pci_dev *dev)
638{
639
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
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
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
657 pci_write_config_dword(dev, ITE_887x_INTCBAR,
658 inta_addr[i]);
659 ret = inb(inta_addr[i]);
660 if (ret != 0xff) {
661
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
676 type = inb(iobase->start + 0x18) & 0x0f;
677
678 switch (type) {
679 case 0x2:
680 case 0xa:
681 ret = 0;
682 break;
683 case 0xe:
684 ret = 2;
685 break;
686 case 0x6:
687 ret = 1;
688 break;
689 case 0x8:
690 ret = 2;
691 break;
692 default:
693 moan_device("Unknown ITE887x", dev);
694 ret = -ENODEV;
695 }
696
697
698 for (i = 0; i < ret; i++) {
699
700 pci_read_config_dword(dev, ITE_887x_PS0BAR + (0x4 * (i + 1)),
701 &ioport);
702 ioport &= 0x0000FF00;
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
708 pci_read_config_dword(dev, ITE_887x_UARTBAR, &uartbar);
709 uartbar &= ~(0xffff << (16 * i));
710 uartbar |= (ioport << (16 * i));
711 pci_write_config_dword(dev, ITE_887x_UARTBAR, uartbar);
712
713
714 pci_read_config_dword(dev, ITE_887x_MISCR, &miscr);
715
716 miscr &= ~(0xf << (12 - 4 * i));
717
718 miscr |= 1 << (23 - i);
719
720 pci_write_config_dword(dev, ITE_887x_MISCR, miscr);
721 }
722
723 if (ret <= 0) {
724
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
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
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
773#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
774
775
776
777
778
779
780
781
782
783static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
784
785
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
796
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
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
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
1192
1193
1194
1195
1196
1197
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
1588
1589
1590
1591
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
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
1634
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
1674
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
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
1729
1730
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
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), },
1762};
1763
1764
1765
1766
1767
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
1777
1778
1779
1780
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
1789
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
1812
1813
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
1823
1824
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
1861
1862
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
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
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
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
1911
1912 quirk = find_quirk(dev);
1913
1914
1915
1916
1917
1918
1919
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
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
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
2027
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
2051
2052
2053 memcpy(&tmp, board, sizeof(struct pciserial_board));
2054 board = &tmp;
2055
2056
2057
2058
2059
2060 rc = serial_pci_guess_board(dev, board);
2061 if (rc)
2062 goto disable;
2063 } else {
2064
2065
2066
2067
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
2125
2126 err = pci_enable_device(dev);
2127
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
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
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
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
2351
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
2379
2380
2381
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
2398
2399 { PCI_VENDOR_ID_OXSEMI, 0xc101,
2400 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2401 pbn_b0_1_4000000 },
2402 { PCI_VENDOR_ID_OXSEMI, 0xc105,
2403 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2404 pbn_b0_1_4000000 },
2405 { PCI_VENDOR_ID_OXSEMI, 0xc11b,
2406 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2407 pbn_oxsemi_1_4000000 },
2408 { PCI_VENDOR_ID_OXSEMI, 0xc11f,
2409 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2410 pbn_oxsemi_1_4000000 },
2411 { PCI_VENDOR_ID_OXSEMI, 0xc120,
2412 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2413 pbn_b0_1_4000000 },
2414 { PCI_VENDOR_ID_OXSEMI, 0xc124,
2415 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2416 pbn_b0_1_4000000 },
2417 { PCI_VENDOR_ID_OXSEMI, 0xc138,
2418 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2419 pbn_oxsemi_1_4000000 },
2420 { PCI_VENDOR_ID_OXSEMI, 0xc13d,
2421 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2422 pbn_oxsemi_1_4000000 },
2423 { PCI_VENDOR_ID_OXSEMI, 0xc140,
2424 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2425 pbn_b0_1_4000000 },
2426 { PCI_VENDOR_ID_OXSEMI, 0xc141,
2427 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2428 pbn_b0_1_4000000 },
2429 { PCI_VENDOR_ID_OXSEMI, 0xc144,
2430 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2431 pbn_b0_1_4000000 },
2432 { PCI_VENDOR_ID_OXSEMI, 0xc145,
2433 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2434 pbn_b0_1_4000000 },
2435 { PCI_VENDOR_ID_OXSEMI, 0xc158,
2436 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2437 pbn_oxsemi_2_4000000 },
2438 { PCI_VENDOR_ID_OXSEMI, 0xc15d,
2439 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2440 pbn_oxsemi_2_4000000 },
2441 { PCI_VENDOR_ID_OXSEMI, 0xc208,
2442 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2443 pbn_oxsemi_4_4000000 },
2444 { PCI_VENDOR_ID_OXSEMI, 0xc20d,
2445 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2446 pbn_oxsemi_4_4000000 },
2447 { PCI_VENDOR_ID_OXSEMI, 0xc308,
2448 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2449 pbn_oxsemi_8_4000000 },
2450 { PCI_VENDOR_ID_OXSEMI, 0xc30d,
2451 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2452 pbn_oxsemi_8_4000000 },
2453 { PCI_VENDOR_ID_OXSEMI, 0xc40b,
2454 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2455 pbn_oxsemi_1_4000000 },
2456 { PCI_VENDOR_ID_OXSEMI, 0xc40f,
2457 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2458 pbn_oxsemi_1_4000000 },
2459 { PCI_VENDOR_ID_OXSEMI, 0xc41b,
2460 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2461 pbn_oxsemi_1_4000000 },
2462 { PCI_VENDOR_ID_OXSEMI, 0xc41f,
2463 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2464 pbn_oxsemi_1_4000000 },
2465 { PCI_VENDOR_ID_OXSEMI, 0xc42b,
2466 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2467 pbn_oxsemi_1_4000000 },
2468 { PCI_VENDOR_ID_OXSEMI, 0xc42f,
2469 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2470 pbn_oxsemi_1_4000000 },
2471 { PCI_VENDOR_ID_OXSEMI, 0xc43b,
2472 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2473 pbn_oxsemi_1_4000000 },
2474 { PCI_VENDOR_ID_OXSEMI, 0xc43f,
2475 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2476 pbn_oxsemi_1_4000000 },
2477 { PCI_VENDOR_ID_OXSEMI, 0xc44b,
2478 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2479 pbn_oxsemi_1_4000000 },
2480 { PCI_VENDOR_ID_OXSEMI, 0xc44f,
2481 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2482 pbn_oxsemi_1_4000000 },
2483 { PCI_VENDOR_ID_OXSEMI, 0xc45b,
2484 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2485 pbn_oxsemi_1_4000000 },
2486 { PCI_VENDOR_ID_OXSEMI, 0xc45f,
2487 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2488 pbn_oxsemi_1_4000000 },
2489 { PCI_VENDOR_ID_OXSEMI, 0xc46b,
2490 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2491 pbn_oxsemi_1_4000000 },
2492 { PCI_VENDOR_ID_OXSEMI, 0xc46f,
2493 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2494 pbn_oxsemi_1_4000000 },
2495 { PCI_VENDOR_ID_OXSEMI, 0xc47b,
2496 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2497 pbn_oxsemi_1_4000000 },
2498 { PCI_VENDOR_ID_OXSEMI, 0xc47f,
2499 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2500 pbn_oxsemi_1_4000000 },
2501 { PCI_VENDOR_ID_OXSEMI, 0xc48b,
2502 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2503 pbn_oxsemi_1_4000000 },
2504 { PCI_VENDOR_ID_OXSEMI, 0xc48f,
2505 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2506 pbn_oxsemi_1_4000000 },
2507 { PCI_VENDOR_ID_OXSEMI, 0xc49b,
2508 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2509 pbn_oxsemi_1_4000000 },
2510 { PCI_VENDOR_ID_OXSEMI, 0xc49f,
2511 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2512 pbn_oxsemi_1_4000000 },
2513 { PCI_VENDOR_ID_OXSEMI, 0xc4ab,
2514 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2515 pbn_oxsemi_1_4000000 },
2516 { PCI_VENDOR_ID_OXSEMI, 0xc4af,
2517 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2518 pbn_oxsemi_1_4000000 },
2519 { PCI_VENDOR_ID_OXSEMI, 0xc4bb,
2520 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2521 pbn_oxsemi_1_4000000 },
2522 { PCI_VENDOR_ID_OXSEMI, 0xc4bf,
2523 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2524 pbn_oxsemi_1_4000000 },
2525 { PCI_VENDOR_ID_OXSEMI, 0xc4cb,
2526 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2527 pbn_oxsemi_1_4000000 },
2528 { PCI_VENDOR_ID_OXSEMI, 0xc4cf,
2529 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2530 pbn_oxsemi_1_4000000 },
2531
2532
2533
2534 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2535 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
2536 pbn_oxsemi_1_4000000 },
2537 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2538 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
2539 pbn_oxsemi_2_4000000 },
2540 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2541 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
2542 pbn_oxsemi_4_4000000 },
2543 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2544 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
2545 pbn_oxsemi_8_4000000 },
2546
2547
2548
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
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
2572
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
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
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
2726
2727
2728
2729
2730
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
2739
2740
2741
2742
2743
2744 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF1,
2745 0x1208, 0x0004, 0, 0,
2746 pbn_b0_4_921600 },
2747
2748
2749
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
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
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
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
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
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
2791
2792
2793
2794
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
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
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
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
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
2859
2860 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS200,
2861 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2862 pbn_b2_2_115200 },
2863
2864
2865
2866 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS400,
2867 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2868 pbn_b2_4_115200 },
2869
2870
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
2881
2882
2883
2884
2885 {
2886 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2887 PCI_VENDOR_ID_MAINPINE, 0x0200,
2888 0, 0, pbn_b0_2_115200 },
2889 {
2890 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2891 PCI_VENDOR_ID_MAINPINE, 0x0300,
2892 0, 0, pbn_b0_4_115200 },
2893 {
2894 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2895 PCI_VENDOR_ID_MAINPINE, 0x0400,
2896 0, 0, pbn_b0_2_115200 },
2897 {
2898 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2899 PCI_VENDOR_ID_MAINPINE, 0x0500,
2900 0, 0, pbn_b0_4_115200 },
2901 {
2902 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2903 PCI_VENDOR_ID_MAINPINE, 0x0600,
2904 0, 0, pbn_b0_2_115200 },
2905 {
2906 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2907 PCI_VENDOR_ID_MAINPINE, 0x0700,
2908 0, 0, pbn_b0_4_115200 },
2909 {
2910 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2911 PCI_VENDOR_ID_MAINPINE, 0x0800,
2912 0, 0, pbn_b0_8_115200 },
2913 {
2914 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2915 PCI_VENDOR_ID_MAINPINE, 0x0C00,
2916 0, 0, pbn_b0_2_115200 },
2917 {
2918 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2919 PCI_VENDOR_ID_MAINPINE, 0x0D00,
2920 0, 0, pbn_b0_4_115200 },
2921 {
2922 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2923 PCI_VENDOR_ID_MAINPINE, 0x1D00,
2924 0, 0, pbn_b0_8_115200 },
2925 {
2926 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2927 PCI_VENDOR_ID_MAINPINE, 0x2000,
2928 0, 0, pbn_b0_1_115200 },
2929 {
2930 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2931 PCI_VENDOR_ID_MAINPINE, 0x2100,
2932 0, 0, pbn_b0_1_115200 },
2933 {
2934 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2935 PCI_VENDOR_ID_MAINPINE, 0x2200,
2936 0, 0, pbn_b0_2_115200 },
2937 {
2938 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2939 PCI_VENDOR_ID_MAINPINE, 0x2300,
2940 0, 0, pbn_b0_2_115200 },
2941 {
2942 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2943 PCI_VENDOR_ID_MAINPINE, 0x2400,
2944 0, 0, pbn_b0_4_115200 },
2945 {
2946 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2947 PCI_VENDOR_ID_MAINPINE, 0x2500,
2948 0, 0, pbn_b0_4_115200 },
2949 {
2950 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2951 PCI_VENDOR_ID_MAINPINE, 0x2600,
2952 0, 0, pbn_b0_8_115200 },
2953 {
2954 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2955 PCI_VENDOR_ID_MAINPINE, 0x2700,
2956 0, 0, pbn_b0_8_115200 },
2957 {
2958 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2959 PCI_VENDOR_ID_MAINPINE, 0x3000,
2960 0, 0, pbn_b0_1_115200 },
2961 {
2962 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2963 PCI_VENDOR_ID_MAINPINE, 0x3100,
2964 0, 0, pbn_b0_1_115200 },
2965 {
2966 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2967 PCI_VENDOR_ID_MAINPINE, 0x3200,
2968 0, 0, pbn_b0_2_115200 },
2969 {
2970 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2971 PCI_VENDOR_ID_MAINPINE, 0x3300,
2972 0, 0, pbn_b0_2_115200 },
2973 {
2974 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2975 PCI_VENDOR_ID_MAINPINE, 0x3400,
2976 0, 0, pbn_b0_4_115200 },
2977 {
2978 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2979 PCI_VENDOR_ID_MAINPINE, 0x3500,
2980 0, 0, pbn_b0_4_115200 },
2981 {
2982 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2983 PCI_VENDOR_ID_MAINPINE, 0x3C00,
2984 0, 0, pbn_b0_8_115200 },
2985 {
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
2993
2994 { PCI_VENDOR_ID_PASEMI, 0xa004,
2995 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2996 pbn_pasemi_1682M },
2997
2998
2999
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
3091
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