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
770
771#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
772
773
774
775
776
777
778
779
780
781static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
782
783
784
785 {
786 .vendor = PCI_VENDOR_ID_ADDIDATA_OLD,
787 .device = PCI_DEVICE_ID_ADDIDATA_APCI7800,
788 .subvendor = PCI_ANY_ID,
789 .subdevice = PCI_ANY_ID,
790 .setup = addidata_apci7800_setup,
791 },
792
793
794
795
796 {
797 .vendor = PCI_VENDOR_ID_AFAVLAB,
798 .device = PCI_ANY_ID,
799 .subvendor = PCI_ANY_ID,
800 .subdevice = PCI_ANY_ID,
801 .setup = afavlab_setup,
802 },
803
804
805
806 {
807 .vendor = PCI_VENDOR_ID_HP,
808 .device = PCI_DEVICE_ID_HP_DIVA,
809 .subvendor = PCI_ANY_ID,
810 .subdevice = PCI_ANY_ID,
811 .init = pci_hp_diva_init,
812 .setup = pci_hp_diva_setup,
813 },
814
815
816
817 {
818 .vendor = PCI_VENDOR_ID_INTEL,
819 .device = PCI_DEVICE_ID_INTEL_80960_RP,
820 .subvendor = 0xe4bf,
821 .subdevice = PCI_ANY_ID,
822 .init = pci_inteli960ni_init,
823 .setup = pci_default_setup,
824 },
825
826
827
828 {
829 .vendor = PCI_VENDOR_ID_ITE,
830 .device = PCI_DEVICE_ID_ITE_8872,
831 .subvendor = PCI_ANY_ID,
832 .subdevice = PCI_ANY_ID,
833 .init = pci_ite887x_init,
834 .setup = pci_default_setup,
835 .exit = __devexit_p(pci_ite887x_exit),
836 },
837
838
839
840 {
841 .vendor = PCI_VENDOR_ID_PANACOM,
842 .device = PCI_DEVICE_ID_PANACOM_QUADMODEM,
843 .subvendor = PCI_ANY_ID,
844 .subdevice = PCI_ANY_ID,
845 .init = pci_plx9050_init,
846 .setup = pci_default_setup,
847 .exit = __devexit_p(pci_plx9050_exit),
848 },
849 {
850 .vendor = PCI_VENDOR_ID_PANACOM,
851 .device = PCI_DEVICE_ID_PANACOM_DUALMODEM,
852 .subvendor = PCI_ANY_ID,
853 .subdevice = PCI_ANY_ID,
854 .init = pci_plx9050_init,
855 .setup = pci_default_setup,
856 .exit = __devexit_p(pci_plx9050_exit),
857 },
858
859
860
861 {
862 .vendor = PCI_VENDOR_ID_PLX,
863 .device = PCI_DEVICE_ID_PLX_9030,
864 .subvendor = PCI_SUBVENDOR_ID_PERLE,
865 .subdevice = PCI_ANY_ID,
866 .setup = pci_default_setup,
867 },
868 {
869 .vendor = PCI_VENDOR_ID_PLX,
870 .device = PCI_DEVICE_ID_PLX_9050,
871 .subvendor = PCI_SUBVENDOR_ID_EXSYS,
872 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
873 .init = pci_plx9050_init,
874 .setup = pci_default_setup,
875 .exit = __devexit_p(pci_plx9050_exit),
876 },
877 {
878 .vendor = PCI_VENDOR_ID_PLX,
879 .device = PCI_DEVICE_ID_PLX_9050,
880 .subvendor = PCI_SUBVENDOR_ID_KEYSPAN,
881 .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2,
882 .init = pci_plx9050_init,
883 .setup = pci_default_setup,
884 .exit = __devexit_p(pci_plx9050_exit),
885 },
886 {
887 .vendor = PCI_VENDOR_ID_PLX,
888 .device = PCI_DEVICE_ID_PLX_9050,
889 .subvendor = PCI_VENDOR_ID_PLX,
890 .subdevice = PCI_SUBDEVICE_ID_UNKNOWN_0x1584,
891 .init = pci_plx9050_init,
892 .setup = pci_default_setup,
893 .exit = __devexit_p(pci_plx9050_exit),
894 },
895 {
896 .vendor = PCI_VENDOR_ID_PLX,
897 .device = PCI_DEVICE_ID_PLX_ROMULUS,
898 .subvendor = PCI_VENDOR_ID_PLX,
899 .subdevice = PCI_DEVICE_ID_PLX_ROMULUS,
900 .init = pci_plx9050_init,
901 .setup = pci_default_setup,
902 .exit = __devexit_p(pci_plx9050_exit),
903 },
904
905
906
907 {
908 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
909 .device = PCI_DEVICE_ID_OCTPRO,
910 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
911 .subdevice = PCI_SUBDEVICE_ID_OCTPRO232,
912 .init = sbs_init,
913 .setup = sbs_setup,
914 .exit = __devexit_p(sbs_exit),
915 },
916
917
918
919 {
920 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
921 .device = PCI_DEVICE_ID_OCTPRO,
922 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
923 .subdevice = PCI_SUBDEVICE_ID_OCTPRO422,
924 .init = sbs_init,
925 .setup = sbs_setup,
926 .exit = __devexit_p(sbs_exit),
927 },
928
929
930
931 {
932 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
933 .device = PCI_DEVICE_ID_OCTPRO,
934 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
935 .subdevice = PCI_SUBDEVICE_ID_POCTAL232,
936 .init = sbs_init,
937 .setup = sbs_setup,
938 .exit = __devexit_p(sbs_exit),
939 },
940
941
942
943 {
944 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
945 .device = PCI_DEVICE_ID_OCTPRO,
946 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
947 .subdevice = PCI_SUBDEVICE_ID_POCTAL422,
948 .init = sbs_init,
949 .setup = sbs_setup,
950 .exit = __devexit_p(sbs_exit),
951 },
952
953
954
955 {
956 .vendor = PCI_VENDOR_ID_SIIG,
957 .device = PCI_ANY_ID,
958 .subvendor = PCI_ANY_ID,
959 .subdevice = PCI_ANY_ID,
960 .init = pci_siig_init,
961 .setup = pci_siig_setup,
962 },
963
964
965
966 {
967 .vendor = PCI_VENDOR_ID_TITAN,
968 .device = PCI_DEVICE_ID_TITAN_400L,
969 .subvendor = PCI_ANY_ID,
970 .subdevice = PCI_ANY_ID,
971 .setup = titan_400l_800l_setup,
972 },
973 {
974 .vendor = PCI_VENDOR_ID_TITAN,
975 .device = PCI_DEVICE_ID_TITAN_800L,
976 .subvendor = PCI_ANY_ID,
977 .subdevice = PCI_ANY_ID,
978 .setup = titan_400l_800l_setup,
979 },
980
981
982
983 {
984 .vendor = PCI_VENDOR_ID_TIMEDIA,
985 .device = PCI_DEVICE_ID_TIMEDIA_1889,
986 .subvendor = PCI_VENDOR_ID_TIMEDIA,
987 .subdevice = PCI_ANY_ID,
988 .init = pci_timedia_init,
989 .setup = pci_timedia_setup,
990 },
991 {
992 .vendor = PCI_VENDOR_ID_TIMEDIA,
993 .device = PCI_ANY_ID,
994 .subvendor = PCI_ANY_ID,
995 .subdevice = PCI_ANY_ID,
996 .setup = pci_timedia_setup,
997 },
998
999
1000
1001 {
1002 .vendor = PCI_VENDOR_ID_XIRCOM,
1003 .device = PCI_DEVICE_ID_XIRCOM_X3201_MDM,
1004 .subvendor = PCI_ANY_ID,
1005 .subdevice = PCI_ANY_ID,
1006 .init = pci_xircom_init,
1007 .setup = pci_default_setup,
1008 },
1009
1010
1011
1012 {
1013 .vendor = PCI_VENDOR_ID_NETMOS,
1014 .device = PCI_ANY_ID,
1015 .subvendor = PCI_ANY_ID,
1016 .subdevice = PCI_ANY_ID,
1017 .init = pci_netmos_init,
1018 .setup = pci_default_setup,
1019 },
1020
1021
1022
1023 {
1024 .vendor = PCI_ANY_ID,
1025 .device = PCI_ANY_ID,
1026 .subvendor = PCI_ANY_ID,
1027 .subdevice = PCI_ANY_ID,
1028 .setup = pci_default_setup,
1029 }
1030};
1031
1032static inline int quirk_id_matches(u32 quirk_id, u32 dev_id)
1033{
1034 return quirk_id == PCI_ANY_ID || quirk_id == dev_id;
1035}
1036
1037static struct pci_serial_quirk *find_quirk(struct pci_dev *dev)
1038{
1039 struct pci_serial_quirk *quirk;
1040
1041 for (quirk = pci_serial_quirks; ; quirk++)
1042 if (quirk_id_matches(quirk->vendor, dev->vendor) &&
1043 quirk_id_matches(quirk->device, dev->device) &&
1044 quirk_id_matches(quirk->subvendor, dev->subsystem_vendor) &&
1045 quirk_id_matches(quirk->subdevice, dev->subsystem_device))
1046 break;
1047 return quirk;
1048}
1049
1050static inline int get_pci_irq(struct pci_dev *dev,
1051 struct pciserial_board *board)
1052{
1053 if (board->flags & FL_NOIRQ)
1054 return 0;
1055 else
1056 return dev->irq;
1057}
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079enum pci_board_num_t {
1080 pbn_default = 0,
1081
1082 pbn_b0_1_115200,
1083 pbn_b0_2_115200,
1084 pbn_b0_4_115200,
1085 pbn_b0_5_115200,
1086 pbn_b0_8_115200,
1087
1088 pbn_b0_1_921600,
1089 pbn_b0_2_921600,
1090 pbn_b0_4_921600,
1091
1092 pbn_b0_2_1130000,
1093
1094 pbn_b0_4_1152000,
1095
1096 pbn_b0_2_1843200,
1097 pbn_b0_4_1843200,
1098
1099 pbn_b0_2_1843200_200,
1100 pbn_b0_4_1843200_200,
1101 pbn_b0_8_1843200_200,
1102
1103 pbn_b0_1_4000000,
1104
1105 pbn_b0_bt_1_115200,
1106 pbn_b0_bt_2_115200,
1107 pbn_b0_bt_8_115200,
1108
1109 pbn_b0_bt_1_460800,
1110 pbn_b0_bt_2_460800,
1111 pbn_b0_bt_4_460800,
1112
1113 pbn_b0_bt_1_921600,
1114 pbn_b0_bt_2_921600,
1115 pbn_b0_bt_4_921600,
1116 pbn_b0_bt_8_921600,
1117
1118 pbn_b1_1_115200,
1119 pbn_b1_2_115200,
1120 pbn_b1_4_115200,
1121 pbn_b1_8_115200,
1122
1123 pbn_b1_1_921600,
1124 pbn_b1_2_921600,
1125 pbn_b1_4_921600,
1126 pbn_b1_8_921600,
1127
1128 pbn_b1_2_1250000,
1129
1130 pbn_b1_bt_1_115200,
1131 pbn_b1_bt_2_921600,
1132
1133 pbn_b1_1_1382400,
1134 pbn_b1_2_1382400,
1135 pbn_b1_4_1382400,
1136 pbn_b1_8_1382400,
1137
1138 pbn_b2_1_115200,
1139 pbn_b2_2_115200,
1140 pbn_b2_4_115200,
1141 pbn_b2_8_115200,
1142
1143 pbn_b2_1_460800,
1144 pbn_b2_4_460800,
1145 pbn_b2_8_460800,
1146 pbn_b2_16_460800,
1147
1148 pbn_b2_1_921600,
1149 pbn_b2_4_921600,
1150 pbn_b2_8_921600,
1151
1152 pbn_b2_bt_1_115200,
1153 pbn_b2_bt_2_115200,
1154 pbn_b2_bt_4_115200,
1155
1156 pbn_b2_bt_2_921600,
1157 pbn_b2_bt_4_921600,
1158
1159 pbn_b3_2_115200,
1160 pbn_b3_4_115200,
1161 pbn_b3_8_115200,
1162
1163
1164
1165
1166 pbn_panacom,
1167 pbn_panacom2,
1168 pbn_panacom4,
1169 pbn_exsys_4055,
1170 pbn_plx_romulus,
1171 pbn_oxsemi,
1172 pbn_oxsemi_1_4000000,
1173 pbn_oxsemi_2_4000000,
1174 pbn_oxsemi_4_4000000,
1175 pbn_oxsemi_8_4000000,
1176 pbn_intel_i960,
1177 pbn_sgi_ioc3,
1178 pbn_computone_4,
1179 pbn_computone_6,
1180 pbn_computone_8,
1181 pbn_sbsxrsio,
1182 pbn_exar_XR17C152,
1183 pbn_exar_XR17C154,
1184 pbn_exar_XR17C158,
1185 pbn_pasemi_1682M,
1186};
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198static struct pciserial_board pci_boards[] __devinitdata = {
1199 [pbn_default] = {
1200 .flags = FL_BASE0,
1201 .num_ports = 1,
1202 .base_baud = 115200,
1203 .uart_offset = 8,
1204 },
1205 [pbn_b0_1_115200] = {
1206 .flags = FL_BASE0,
1207 .num_ports = 1,
1208 .base_baud = 115200,
1209 .uart_offset = 8,
1210 },
1211 [pbn_b0_2_115200] = {
1212 .flags = FL_BASE0,
1213 .num_ports = 2,
1214 .base_baud = 115200,
1215 .uart_offset = 8,
1216 },
1217 [pbn_b0_4_115200] = {
1218 .flags = FL_BASE0,
1219 .num_ports = 4,
1220 .base_baud = 115200,
1221 .uart_offset = 8,
1222 },
1223 [pbn_b0_5_115200] = {
1224 .flags = FL_BASE0,
1225 .num_ports = 5,
1226 .base_baud = 115200,
1227 .uart_offset = 8,
1228 },
1229 [pbn_b0_8_115200] = {
1230 .flags = FL_BASE0,
1231 .num_ports = 8,
1232 .base_baud = 115200,
1233 .uart_offset = 8,
1234 },
1235 [pbn_b0_1_921600] = {
1236 .flags = FL_BASE0,
1237 .num_ports = 1,
1238 .base_baud = 921600,
1239 .uart_offset = 8,
1240 },
1241 [pbn_b0_2_921600] = {
1242 .flags = FL_BASE0,
1243 .num_ports = 2,
1244 .base_baud = 921600,
1245 .uart_offset = 8,
1246 },
1247 [pbn_b0_4_921600] = {
1248 .flags = FL_BASE0,
1249 .num_ports = 4,
1250 .base_baud = 921600,
1251 .uart_offset = 8,
1252 },
1253
1254 [pbn_b0_2_1130000] = {
1255 .flags = FL_BASE0,
1256 .num_ports = 2,
1257 .base_baud = 1130000,
1258 .uart_offset = 8,
1259 },
1260
1261 [pbn_b0_4_1152000] = {
1262 .flags = FL_BASE0,
1263 .num_ports = 4,
1264 .base_baud = 1152000,
1265 .uart_offset = 8,
1266 },
1267
1268 [pbn_b0_2_1843200] = {
1269 .flags = FL_BASE0,
1270 .num_ports = 2,
1271 .base_baud = 1843200,
1272 .uart_offset = 8,
1273 },
1274 [pbn_b0_4_1843200] = {
1275 .flags = FL_BASE0,
1276 .num_ports = 4,
1277 .base_baud = 1843200,
1278 .uart_offset = 8,
1279 },
1280
1281 [pbn_b0_2_1843200_200] = {
1282 .flags = FL_BASE0,
1283 .num_ports = 2,
1284 .base_baud = 1843200,
1285 .uart_offset = 0x200,
1286 },
1287 [pbn_b0_4_1843200_200] = {
1288 .flags = FL_BASE0,
1289 .num_ports = 4,
1290 .base_baud = 1843200,
1291 .uart_offset = 0x200,
1292 },
1293 [pbn_b0_8_1843200_200] = {
1294 .flags = FL_BASE0,
1295 .num_ports = 8,
1296 .base_baud = 1843200,
1297 .uart_offset = 0x200,
1298 },
1299 [pbn_b0_1_4000000] = {
1300 .flags = FL_BASE0,
1301 .num_ports = 1,
1302 .base_baud = 4000000,
1303 .uart_offset = 8,
1304 },
1305
1306 [pbn_b0_bt_1_115200] = {
1307 .flags = FL_BASE0|FL_BASE_BARS,
1308 .num_ports = 1,
1309 .base_baud = 115200,
1310 .uart_offset = 8,
1311 },
1312 [pbn_b0_bt_2_115200] = {
1313 .flags = FL_BASE0|FL_BASE_BARS,
1314 .num_ports = 2,
1315 .base_baud = 115200,
1316 .uart_offset = 8,
1317 },
1318 [pbn_b0_bt_8_115200] = {
1319 .flags = FL_BASE0|FL_BASE_BARS,
1320 .num_ports = 8,
1321 .base_baud = 115200,
1322 .uart_offset = 8,
1323 },
1324
1325 [pbn_b0_bt_1_460800] = {
1326 .flags = FL_BASE0|FL_BASE_BARS,
1327 .num_ports = 1,
1328 .base_baud = 460800,
1329 .uart_offset = 8,
1330 },
1331 [pbn_b0_bt_2_460800] = {
1332 .flags = FL_BASE0|FL_BASE_BARS,
1333 .num_ports = 2,
1334 .base_baud = 460800,
1335 .uart_offset = 8,
1336 },
1337 [pbn_b0_bt_4_460800] = {
1338 .flags = FL_BASE0|FL_BASE_BARS,
1339 .num_ports = 4,
1340 .base_baud = 460800,
1341 .uart_offset = 8,
1342 },
1343
1344 [pbn_b0_bt_1_921600] = {
1345 .flags = FL_BASE0|FL_BASE_BARS,
1346 .num_ports = 1,
1347 .base_baud = 921600,
1348 .uart_offset = 8,
1349 },
1350 [pbn_b0_bt_2_921600] = {
1351 .flags = FL_BASE0|FL_BASE_BARS,
1352 .num_ports = 2,
1353 .base_baud = 921600,
1354 .uart_offset = 8,
1355 },
1356 [pbn_b0_bt_4_921600] = {
1357 .flags = FL_BASE0|FL_BASE_BARS,
1358 .num_ports = 4,
1359 .base_baud = 921600,
1360 .uart_offset = 8,
1361 },
1362 [pbn_b0_bt_8_921600] = {
1363 .flags = FL_BASE0|FL_BASE_BARS,
1364 .num_ports = 8,
1365 .base_baud = 921600,
1366 .uart_offset = 8,
1367 },
1368
1369 [pbn_b1_1_115200] = {
1370 .flags = FL_BASE1,
1371 .num_ports = 1,
1372 .base_baud = 115200,
1373 .uart_offset = 8,
1374 },
1375 [pbn_b1_2_115200] = {
1376 .flags = FL_BASE1,
1377 .num_ports = 2,
1378 .base_baud = 115200,
1379 .uart_offset = 8,
1380 },
1381 [pbn_b1_4_115200] = {
1382 .flags = FL_BASE1,
1383 .num_ports = 4,
1384 .base_baud = 115200,
1385 .uart_offset = 8,
1386 },
1387 [pbn_b1_8_115200] = {
1388 .flags = FL_BASE1,
1389 .num_ports = 8,
1390 .base_baud = 115200,
1391 .uart_offset = 8,
1392 },
1393
1394 [pbn_b1_1_921600] = {
1395 .flags = FL_BASE1,
1396 .num_ports = 1,
1397 .base_baud = 921600,
1398 .uart_offset = 8,
1399 },
1400 [pbn_b1_2_921600] = {
1401 .flags = FL_BASE1,
1402 .num_ports = 2,
1403 .base_baud = 921600,
1404 .uart_offset = 8,
1405 },
1406 [pbn_b1_4_921600] = {
1407 .flags = FL_BASE1,
1408 .num_ports = 4,
1409 .base_baud = 921600,
1410 .uart_offset = 8,
1411 },
1412 [pbn_b1_8_921600] = {
1413 .flags = FL_BASE1,
1414 .num_ports = 8,
1415 .base_baud = 921600,
1416 .uart_offset = 8,
1417 },
1418 [pbn_b1_2_1250000] = {
1419 .flags = FL_BASE1,
1420 .num_ports = 2,
1421 .base_baud = 1250000,
1422 .uart_offset = 8,
1423 },
1424
1425 [pbn_b1_bt_1_115200] = {
1426 .flags = FL_BASE1|FL_BASE_BARS,
1427 .num_ports = 1,
1428 .base_baud = 115200,
1429 .uart_offset = 8,
1430 },
1431
1432 [pbn_b1_bt_2_921600] = {
1433 .flags = FL_BASE1|FL_BASE_BARS,
1434 .num_ports = 2,
1435 .base_baud = 921600,
1436 .uart_offset = 8,
1437 },
1438
1439 [pbn_b1_1_1382400] = {
1440 .flags = FL_BASE1,
1441 .num_ports = 1,
1442 .base_baud = 1382400,
1443 .uart_offset = 8,
1444 },
1445 [pbn_b1_2_1382400] = {
1446 .flags = FL_BASE1,
1447 .num_ports = 2,
1448 .base_baud = 1382400,
1449 .uart_offset = 8,
1450 },
1451 [pbn_b1_4_1382400] = {
1452 .flags = FL_BASE1,
1453 .num_ports = 4,
1454 .base_baud = 1382400,
1455 .uart_offset = 8,
1456 },
1457 [pbn_b1_8_1382400] = {
1458 .flags = FL_BASE1,
1459 .num_ports = 8,
1460 .base_baud = 1382400,
1461 .uart_offset = 8,
1462 },
1463
1464 [pbn_b2_1_115200] = {
1465 .flags = FL_BASE2,
1466 .num_ports = 1,
1467 .base_baud = 115200,
1468 .uart_offset = 8,
1469 },
1470 [pbn_b2_2_115200] = {
1471 .flags = FL_BASE2,
1472 .num_ports = 2,
1473 .base_baud = 115200,
1474 .uart_offset = 8,
1475 },
1476 [pbn_b2_4_115200] = {
1477 .flags = FL_BASE2,
1478 .num_ports = 4,
1479 .base_baud = 115200,
1480 .uart_offset = 8,
1481 },
1482 [pbn_b2_8_115200] = {
1483 .flags = FL_BASE2,
1484 .num_ports = 8,
1485 .base_baud = 115200,
1486 .uart_offset = 8,
1487 },
1488
1489 [pbn_b2_1_460800] = {
1490 .flags = FL_BASE2,
1491 .num_ports = 1,
1492 .base_baud = 460800,
1493 .uart_offset = 8,
1494 },
1495 [pbn_b2_4_460800] = {
1496 .flags = FL_BASE2,
1497 .num_ports = 4,
1498 .base_baud = 460800,
1499 .uart_offset = 8,
1500 },
1501 [pbn_b2_8_460800] = {
1502 .flags = FL_BASE2,
1503 .num_ports = 8,
1504 .base_baud = 460800,
1505 .uart_offset = 8,
1506 },
1507 [pbn_b2_16_460800] = {
1508 .flags = FL_BASE2,
1509 .num_ports = 16,
1510 .base_baud = 460800,
1511 .uart_offset = 8,
1512 },
1513
1514 [pbn_b2_1_921600] = {
1515 .flags = FL_BASE2,
1516 .num_ports = 1,
1517 .base_baud = 921600,
1518 .uart_offset = 8,
1519 },
1520 [pbn_b2_4_921600] = {
1521 .flags = FL_BASE2,
1522 .num_ports = 4,
1523 .base_baud = 921600,
1524 .uart_offset = 8,
1525 },
1526 [pbn_b2_8_921600] = {
1527 .flags = FL_BASE2,
1528 .num_ports = 8,
1529 .base_baud = 921600,
1530 .uart_offset = 8,
1531 },
1532
1533 [pbn_b2_bt_1_115200] = {
1534 .flags = FL_BASE2|FL_BASE_BARS,
1535 .num_ports = 1,
1536 .base_baud = 115200,
1537 .uart_offset = 8,
1538 },
1539 [pbn_b2_bt_2_115200] = {
1540 .flags = FL_BASE2|FL_BASE_BARS,
1541 .num_ports = 2,
1542 .base_baud = 115200,
1543 .uart_offset = 8,
1544 },
1545 [pbn_b2_bt_4_115200] = {
1546 .flags = FL_BASE2|FL_BASE_BARS,
1547 .num_ports = 4,
1548 .base_baud = 115200,
1549 .uart_offset = 8,
1550 },
1551
1552 [pbn_b2_bt_2_921600] = {
1553 .flags = FL_BASE2|FL_BASE_BARS,
1554 .num_ports = 2,
1555 .base_baud = 921600,
1556 .uart_offset = 8,
1557 },
1558 [pbn_b2_bt_4_921600] = {
1559 .flags = FL_BASE2|FL_BASE_BARS,
1560 .num_ports = 4,
1561 .base_baud = 921600,
1562 .uart_offset = 8,
1563 },
1564
1565 [pbn_b3_2_115200] = {
1566 .flags = FL_BASE3,
1567 .num_ports = 2,
1568 .base_baud = 115200,
1569 .uart_offset = 8,
1570 },
1571 [pbn_b3_4_115200] = {
1572 .flags = FL_BASE3,
1573 .num_ports = 4,
1574 .base_baud = 115200,
1575 .uart_offset = 8,
1576 },
1577 [pbn_b3_8_115200] = {
1578 .flags = FL_BASE3,
1579 .num_ports = 8,
1580 .base_baud = 115200,
1581 .uart_offset = 8,
1582 },
1583
1584
1585
1586
1587
1588
1589
1590
1591 [pbn_panacom] = {
1592 .flags = FL_BASE2,
1593 .num_ports = 2,
1594 .base_baud = 921600,
1595 .uart_offset = 0x400,
1596 .reg_shift = 7,
1597 },
1598 [pbn_panacom2] = {
1599 .flags = FL_BASE2|FL_BASE_BARS,
1600 .num_ports = 2,
1601 .base_baud = 921600,
1602 .uart_offset = 0x400,
1603 .reg_shift = 7,
1604 },
1605 [pbn_panacom4] = {
1606 .flags = FL_BASE2|FL_BASE_BARS,
1607 .num_ports = 4,
1608 .base_baud = 921600,
1609 .uart_offset = 0x400,
1610 .reg_shift = 7,
1611 },
1612
1613 [pbn_exsys_4055] = {
1614 .flags = FL_BASE2,
1615 .num_ports = 4,
1616 .base_baud = 115200,
1617 .uart_offset = 8,
1618 },
1619
1620
1621 [pbn_plx_romulus] = {
1622 .flags = FL_BASE2,
1623 .num_ports = 4,
1624 .base_baud = 921600,
1625 .uart_offset = 8 << 2,
1626 .reg_shift = 2,
1627 .first_offset = 0x03,
1628 },
1629
1630
1631
1632
1633
1634 [pbn_oxsemi] = {
1635 .flags = FL_BASE0|FL_REGION_SZ_CAP,
1636 .num_ports = 32,
1637 .base_baud = 115200,
1638 .uart_offset = 8,
1639 },
1640 [pbn_oxsemi_1_4000000] = {
1641 .flags = FL_BASE0,
1642 .num_ports = 1,
1643 .base_baud = 4000000,
1644 .uart_offset = 0x200,
1645 .first_offset = 0x1000,
1646 },
1647 [pbn_oxsemi_2_4000000] = {
1648 .flags = FL_BASE0,
1649 .num_ports = 2,
1650 .base_baud = 4000000,
1651 .uart_offset = 0x200,
1652 .first_offset = 0x1000,
1653 },
1654 [pbn_oxsemi_4_4000000] = {
1655 .flags = FL_BASE0,
1656 .num_ports = 4,
1657 .base_baud = 4000000,
1658 .uart_offset = 0x200,
1659 .first_offset = 0x1000,
1660 },
1661 [pbn_oxsemi_8_4000000] = {
1662 .flags = FL_BASE0,
1663 .num_ports = 8,
1664 .base_baud = 4000000,
1665 .uart_offset = 0x200,
1666 .first_offset = 0x1000,
1667 },
1668
1669
1670
1671
1672
1673
1674 [pbn_intel_i960] = {
1675 .flags = FL_BASE0,
1676 .num_ports = 32,
1677 .base_baud = 921600,
1678 .uart_offset = 8 << 2,
1679 .reg_shift = 2,
1680 .first_offset = 0x10000,
1681 },
1682 [pbn_sgi_ioc3] = {
1683 .flags = FL_BASE0|FL_NOIRQ,
1684 .num_ports = 1,
1685 .base_baud = 458333,
1686 .uart_offset = 8,
1687 .reg_shift = 0,
1688 .first_offset = 0x20178,
1689 },
1690
1691
1692
1693
1694 [pbn_computone_4] = {
1695 .flags = FL_BASE0,
1696 .num_ports = 4,
1697 .base_baud = 921600,
1698 .uart_offset = 0x40,
1699 .reg_shift = 2,
1700 .first_offset = 0x200,
1701 },
1702 [pbn_computone_6] = {
1703 .flags = FL_BASE0,
1704 .num_ports = 6,
1705 .base_baud = 921600,
1706 .uart_offset = 0x40,
1707 .reg_shift = 2,
1708 .first_offset = 0x200,
1709 },
1710 [pbn_computone_8] = {
1711 .flags = FL_BASE0,
1712 .num_ports = 8,
1713 .base_baud = 921600,
1714 .uart_offset = 0x40,
1715 .reg_shift = 2,
1716 .first_offset = 0x200,
1717 },
1718 [pbn_sbsxrsio] = {
1719 .flags = FL_BASE0,
1720 .num_ports = 8,
1721 .base_baud = 460800,
1722 .uart_offset = 256,
1723 .reg_shift = 4,
1724 },
1725
1726
1727
1728
1729
1730 [pbn_exar_XR17C152] = {
1731 .flags = FL_BASE0,
1732 .num_ports = 2,
1733 .base_baud = 921600,
1734 .uart_offset = 0x200,
1735 },
1736 [pbn_exar_XR17C154] = {
1737 .flags = FL_BASE0,
1738 .num_ports = 4,
1739 .base_baud = 921600,
1740 .uart_offset = 0x200,
1741 },
1742 [pbn_exar_XR17C158] = {
1743 .flags = FL_BASE0,
1744 .num_ports = 8,
1745 .base_baud = 921600,
1746 .uart_offset = 0x200,
1747 },
1748
1749
1750
1751 [pbn_pasemi_1682M] = {
1752 .flags = FL_BASE0,
1753 .num_ports = 1,
1754 .base_baud = 8333333,
1755 },
1756};
1757
1758static const struct pci_device_id softmodem_blacklist[] = {
1759 { PCI_VDEVICE(AL, 0x5457), },
1760};
1761
1762
1763
1764
1765
1766
1767static int __devinit
1768serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
1769{
1770 const struct pci_device_id *blacklist;
1771 int num_iomem, num_port, first_port = -1, i;
1772
1773
1774
1775
1776
1777
1778
1779
1780 if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) &&
1781 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
1782 (dev->class & 0xff) > 6)
1783 return -ENODEV;
1784
1785
1786
1787
1788
1789 for (blacklist = softmodem_blacklist;
1790 blacklist < softmodem_blacklist + ARRAY_SIZE(softmodem_blacklist);
1791 blacklist++) {
1792 if (dev->vendor == blacklist->vendor &&
1793 dev->device == blacklist->device)
1794 return -ENODEV;
1795 }
1796
1797 num_iomem = num_port = 0;
1798 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
1799 if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
1800 num_port++;
1801 if (first_port == -1)
1802 first_port = i;
1803 }
1804 if (pci_resource_flags(dev, i) & IORESOURCE_MEM)
1805 num_iomem++;
1806 }
1807
1808
1809
1810
1811
1812
1813 if (num_iomem <= 1 && num_port == 1) {
1814 board->flags = first_port;
1815 board->num_ports = pci_resource_len(dev, first_port) / 8;
1816 return 0;
1817 }
1818
1819
1820
1821
1822
1823
1824 first_port = -1;
1825 num_port = 0;
1826 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
1827 if (pci_resource_flags(dev, i) & IORESOURCE_IO &&
1828 pci_resource_len(dev, i) == 8 &&
1829 (first_port == -1 || (first_port + num_port) == i)) {
1830 num_port++;
1831 if (first_port == -1)
1832 first_port = i;
1833 }
1834 }
1835
1836 if (num_port > 1) {
1837 board->flags = first_port | FL_BASE_BARS;
1838 board->num_ports = num_port;
1839 return 0;
1840 }
1841
1842 return -ENODEV;
1843}
1844
1845static inline int
1846serial_pci_matches(struct pciserial_board *board,
1847 struct pciserial_board *guessed)
1848{
1849 return
1850 board->num_ports == guessed->num_ports &&
1851 board->base_baud == guessed->base_baud &&
1852 board->uart_offset == guessed->uart_offset &&
1853 board->reg_shift == guessed->reg_shift &&
1854 board->first_offset == guessed->first_offset;
1855}
1856
1857
1858
1859
1860
1861
1862static int pci_oxsemi_tornado_init(struct pci_dev *dev, struct pciserial_board *board)
1863{
1864 u8 __iomem *p;
1865 unsigned long deviceID;
1866 unsigned int number_uarts;
1867
1868
1869 if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
1870 (dev->device & 0xF000) != 0xC000)
1871 return 0;
1872
1873 p = pci_iomap(dev, 0, 5);
1874 if (p == NULL)
1875 return -ENOMEM;
1876
1877 deviceID = ioread32(p);
1878
1879 if (deviceID == 0x07000200) {
1880 number_uarts = ioread8(p + 4);
1881 board->num_ports = number_uarts;
1882 printk(KERN_DEBUG
1883 "%d ports detected on Oxford PCI Express device\n",
1884 number_uarts);
1885 }
1886 pci_iounmap(dev, p);
1887 return 0;
1888}
1889
1890struct serial_private *
1891pciserial_init_ports(struct pci_dev *dev, struct pciserial_board *board)
1892{
1893 struct uart_port serial_port;
1894 struct serial_private *priv;
1895 struct pci_serial_quirk *quirk;
1896 int rc, nr_ports, i;
1897
1898
1899
1900
1901 if (dev->vendor == PCI_VENDOR_ID_OXSEMI ||
1902 dev->vendor == PCI_VENDOR_ID_MAINPINE)
1903 pci_oxsemi_tornado_init(dev, board);
1904
1905 nr_ports = board->num_ports;
1906
1907
1908
1909
1910 quirk = find_quirk(dev);
1911
1912
1913
1914
1915
1916
1917
1918
1919 if (quirk->init) {
1920 rc = quirk->init(dev);
1921 if (rc < 0) {
1922 priv = ERR_PTR(rc);
1923 goto err_out;
1924 }
1925 if (rc)
1926 nr_ports = rc;
1927 }
1928
1929 priv = kzalloc(sizeof(struct serial_private) +
1930 sizeof(unsigned int) * nr_ports,
1931 GFP_KERNEL);
1932 if (!priv) {
1933 priv = ERR_PTR(-ENOMEM);
1934 goto err_deinit;
1935 }
1936
1937 priv->dev = dev;
1938 priv->quirk = quirk;
1939
1940 memset(&serial_port, 0, sizeof(struct uart_port));
1941 serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
1942 serial_port.uartclk = board->base_baud * 16;
1943 serial_port.irq = get_pci_irq(dev, board);
1944 serial_port.dev = &dev->dev;
1945
1946 for (i = 0; i < nr_ports; i++) {
1947 if (quirk->setup(priv, board, &serial_port, i))
1948 break;
1949
1950#ifdef SERIAL_DEBUG_PCI
1951 printk(KERN_DEBUG "Setup PCI port: port %x, irq %d, type %d\n",
1952 serial_port.iobase, serial_port.irq, serial_port.iotype);
1953#endif
1954
1955 priv->line[i] = serial8250_register_port(&serial_port);
1956 if (priv->line[i] < 0) {
1957 printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), priv->line[i]);
1958 break;
1959 }
1960 }
1961 priv->nr = i;
1962 return priv;
1963
1964err_deinit:
1965 if (quirk->exit)
1966 quirk->exit(dev);
1967err_out:
1968 return priv;
1969}
1970EXPORT_SYMBOL_GPL(pciserial_init_ports);
1971
1972void pciserial_remove_ports(struct serial_private *priv)
1973{
1974 struct pci_serial_quirk *quirk;
1975 int i;
1976
1977 for (i = 0; i < priv->nr; i++)
1978 serial8250_unregister_port(priv->line[i]);
1979
1980 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
1981 if (priv->remapped_bar[i])
1982 iounmap(priv->remapped_bar[i]);
1983 priv->remapped_bar[i] = NULL;
1984 }
1985
1986
1987
1988
1989 quirk = find_quirk(priv->dev);
1990 if (quirk->exit)
1991 quirk->exit(priv->dev);
1992
1993 kfree(priv);
1994}
1995EXPORT_SYMBOL_GPL(pciserial_remove_ports);
1996
1997void pciserial_suspend_ports(struct serial_private *priv)
1998{
1999 int i;
2000
2001 for (i = 0; i < priv->nr; i++)
2002 if (priv->line[i] >= 0)
2003 serial8250_suspend_port(priv->line[i]);
2004}
2005EXPORT_SYMBOL_GPL(pciserial_suspend_ports);
2006
2007void pciserial_resume_ports(struct serial_private *priv)
2008{
2009 int i;
2010
2011
2012
2013
2014 if (priv->quirk->init)
2015 priv->quirk->init(priv->dev);
2016
2017 for (i = 0; i < priv->nr; i++)
2018 if (priv->line[i] >= 0)
2019 serial8250_resume_port(priv->line[i]);
2020}
2021EXPORT_SYMBOL_GPL(pciserial_resume_ports);
2022
2023
2024
2025
2026
2027static int __devinit
2028pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
2029{
2030 struct serial_private *priv;
2031 struct pciserial_board *board, tmp;
2032 int rc;
2033
2034 if (ent->driver_data >= ARRAY_SIZE(pci_boards)) {
2035 printk(KERN_ERR "pci_init_one: invalid driver_data: %ld\n",
2036 ent->driver_data);
2037 return -EINVAL;
2038 }
2039
2040 board = &pci_boards[ent->driver_data];
2041
2042 rc = pci_enable_device(dev);
2043 if (rc)
2044 return rc;
2045
2046 if (ent->driver_data == pbn_default) {
2047
2048
2049
2050
2051 memcpy(&tmp, board, sizeof(struct pciserial_board));
2052 board = &tmp;
2053
2054
2055
2056
2057
2058 rc = serial_pci_guess_board(dev, board);
2059 if (rc)
2060 goto disable;
2061 } else {
2062
2063
2064
2065
2066
2067 memcpy(&tmp, &pci_boards[pbn_default],
2068 sizeof(struct pciserial_board));
2069 rc = serial_pci_guess_board(dev, &tmp);
2070 if (rc == 0 && serial_pci_matches(board, &tmp))
2071 moan_device("Redundant entry in serial pci_table.",
2072 dev);
2073 }
2074
2075 priv = pciserial_init_ports(dev, board);
2076 if (!IS_ERR(priv)) {
2077 pci_set_drvdata(dev, priv);
2078 return 0;
2079 }
2080
2081 rc = PTR_ERR(priv);
2082
2083 disable:
2084 pci_disable_device(dev);
2085 return rc;
2086}
2087
2088static void __devexit pciserial_remove_one(struct pci_dev *dev)
2089{
2090 struct serial_private *priv = pci_get_drvdata(dev);
2091
2092 pci_set_drvdata(dev, NULL);
2093
2094 pciserial_remove_ports(priv);
2095
2096 pci_disable_device(dev);
2097}
2098
2099#ifdef CONFIG_PM
2100static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
2101{
2102 struct serial_private *priv = pci_get_drvdata(dev);
2103
2104 if (priv)
2105 pciserial_suspend_ports(priv);
2106
2107 pci_save_state(dev);
2108 pci_set_power_state(dev, pci_choose_state(dev, state));
2109 return 0;
2110}
2111
2112static int pciserial_resume_one(struct pci_dev *dev)
2113{
2114 int err;
2115 struct serial_private *priv = pci_get_drvdata(dev);
2116
2117 pci_set_power_state(dev, PCI_D0);
2118 pci_restore_state(dev);
2119
2120 if (priv) {
2121
2122
2123
2124 err = pci_enable_device(dev);
2125
2126 if (err)
2127 printk(KERN_ERR "pciserial: Unable to re-enable ports, trying to continue.\n");
2128 pciserial_resume_ports(priv);
2129 }
2130 return 0;
2131}
2132#endif
2133
2134static struct pci_device_id serial_pci_tbl[] = {
2135 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2136 PCI_SUBVENDOR_ID_CONNECT_TECH,
2137 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2138 pbn_b1_8_1382400 },
2139 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2140 PCI_SUBVENDOR_ID_CONNECT_TECH,
2141 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2142 pbn_b1_4_1382400 },
2143 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2144 PCI_SUBVENDOR_ID_CONNECT_TECH,
2145 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2146 pbn_b1_2_1382400 },
2147 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2148 PCI_SUBVENDOR_ID_CONNECT_TECH,
2149 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2150 pbn_b1_8_1382400 },
2151 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2152 PCI_SUBVENDOR_ID_CONNECT_TECH,
2153 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2154 pbn_b1_4_1382400 },
2155 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2156 PCI_SUBVENDOR_ID_CONNECT_TECH,
2157 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2158 pbn_b1_2_1382400 },
2159 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2160 PCI_SUBVENDOR_ID_CONNECT_TECH,
2161 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485, 0, 0,
2162 pbn_b1_8_921600 },
2163 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2164 PCI_SUBVENDOR_ID_CONNECT_TECH,
2165 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 0, 0,
2166 pbn_b1_8_921600 },
2167 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2168 PCI_SUBVENDOR_ID_CONNECT_TECH,
2169 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485, 0, 0,
2170 pbn_b1_4_921600 },
2171 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2172 PCI_SUBVENDOR_ID_CONNECT_TECH,
2173 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0,
2174 pbn_b1_4_921600 },
2175 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2176 PCI_SUBVENDOR_ID_CONNECT_TECH,
2177 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0,
2178 pbn_b1_2_921600 },
2179 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2180 PCI_SUBVENDOR_ID_CONNECT_TECH,
2181 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0,
2182 pbn_b1_8_921600 },
2183 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2184 PCI_SUBVENDOR_ID_CONNECT_TECH,
2185 PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0,
2186 pbn_b1_8_921600 },
2187 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2188 PCI_SUBVENDOR_ID_CONNECT_TECH,
2189 PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0,
2190 pbn_b1_4_921600 },
2191 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2192 PCI_SUBVENDOR_ID_CONNECT_TECH,
2193 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ, 0, 0,
2194 pbn_b1_2_1250000 },
2195 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2196 PCI_SUBVENDOR_ID_CONNECT_TECH,
2197 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2, 0, 0,
2198 pbn_b0_2_1843200 },
2199 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2200 PCI_SUBVENDOR_ID_CONNECT_TECH,
2201 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4, 0, 0,
2202 pbn_b0_4_1843200 },
2203 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2204 PCI_VENDOR_ID_AFAVLAB,
2205 PCI_SUBDEVICE_ID_AFAVLAB_P061, 0, 0,
2206 pbn_b0_4_1152000 },
2207 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2208 PCI_SUBVENDOR_ID_CONNECT_TECH,
2209 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_232, 0, 0,
2210 pbn_b0_2_1843200_200 },
2211 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2212 PCI_SUBVENDOR_ID_CONNECT_TECH,
2213 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_232, 0, 0,
2214 pbn_b0_4_1843200_200 },
2215 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2216 PCI_SUBVENDOR_ID_CONNECT_TECH,
2217 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_232, 0, 0,
2218 pbn_b0_8_1843200_200 },
2219 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2220 PCI_SUBVENDOR_ID_CONNECT_TECH,
2221 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_1_1, 0, 0,
2222 pbn_b0_2_1843200_200 },
2223 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2224 PCI_SUBVENDOR_ID_CONNECT_TECH,
2225 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_2, 0, 0,
2226 pbn_b0_4_1843200_200 },
2227 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2228 PCI_SUBVENDOR_ID_CONNECT_TECH,
2229 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_4, 0, 0,
2230 pbn_b0_8_1843200_200 },
2231 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2232 PCI_SUBVENDOR_ID_CONNECT_TECH,
2233 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2, 0, 0,
2234 pbn_b0_2_1843200_200 },
2235 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2236 PCI_SUBVENDOR_ID_CONNECT_TECH,
2237 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4, 0, 0,
2238 pbn_b0_4_1843200_200 },
2239 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2240 PCI_SUBVENDOR_ID_CONNECT_TECH,
2241 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8, 0, 0,
2242 pbn_b0_8_1843200_200 },
2243 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2244 PCI_SUBVENDOR_ID_CONNECT_TECH,
2245 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_485, 0, 0,
2246 pbn_b0_2_1843200_200 },
2247 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2248 PCI_SUBVENDOR_ID_CONNECT_TECH,
2249 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485, 0, 0,
2250 pbn_b0_4_1843200_200 },
2251 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2252 PCI_SUBVENDOR_ID_CONNECT_TECH,
2253 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485, 0, 0,
2254 pbn_b0_8_1843200_200 },
2255
2256 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,
2257 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2258 pbn_b2_bt_1_115200 },
2259 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2,
2260 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2261 pbn_b2_bt_2_115200 },
2262 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422,
2263 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2264 pbn_b2_bt_4_115200 },
2265 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232,
2266 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2267 pbn_b2_bt_2_115200 },
2268 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4,
2269 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2270 pbn_b2_bt_4_115200 },
2271 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,
2272 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2273 pbn_b2_8_115200 },
2274 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_7803,
2275 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2276 pbn_b2_8_460800 },
2277 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM8,
2278 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2279 pbn_b2_8_115200 },
2280
2281 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2,
2282 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2283 pbn_b2_bt_2_115200 },
2284 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200,
2285 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2286 pbn_b2_bt_2_921600 },
2287
2288
2289
2290 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800,
2291 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2292 pbn_b2_8_921600 },
2293 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077,
2294 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2295 pbn_b2_4_921600 },
2296
2297 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2298 PCI_VENDOR_ID_PLX,
2299 PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0,
2300 pbn_b0_4_115200 },
2301 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2302 PCI_SUBVENDOR_ID_KEYSPAN,
2303 PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0,
2304 pbn_panacom },
2305 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM,
2306 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2307 pbn_panacom4 },
2308 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM,
2309 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2310 pbn_panacom2 },
2311 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2312 PCI_VENDOR_ID_ESDGMBH,
2313 PCI_DEVICE_ID_ESDGMBH_CPCIASIO4, 0, 0,
2314 pbn_b2_4_115200 },
2315 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2316 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2317 PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0,
2318 pbn_b2_4_460800 },
2319 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2320 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2321 PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0,
2322 pbn_b2_8_460800 },
2323 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2324 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2325 PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0,
2326 pbn_b2_16_460800 },
2327 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2328 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2329 PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0,
2330 pbn_b2_16_460800 },
2331 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2332 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2333 PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0,
2334 pbn_b2_4_460800 },
2335 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2336 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2337 PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
2338 pbn_b2_8_460800 },
2339 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2340 PCI_SUBVENDOR_ID_EXSYS,
2341 PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
2342 pbn_exsys_4055 },
2343
2344
2345
2346
2347 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS,
2348 0x10b5, 0x106a, 0, 0,
2349 pbn_plx_romulus },
2350 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100,
2351 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2352 pbn_b1_4_115200 },
2353 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100,
2354 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2355 pbn_b1_2_115200 },
2356 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D,
2357 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2358 pbn_b1_8_115200 },
2359 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M,
2360 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2361 pbn_b1_8_115200 },
2362 { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,
2363 PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4,
2364 0, 0,
2365 pbn_b0_4_921600 },
2366 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2367 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL,
2368 0, 0,
2369 pbn_b0_4_1152000 },
2370
2371
2372
2373
2374
2375
2376
2377 { PCI_VENDOR_ID_OXSEMI, 0x950a,
2378 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2379 pbn_b0_2_1130000 },
2380 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2381 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2382 pbn_b0_4_115200 },
2383 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,
2384 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2385 pbn_b0_bt_2_921600 },
2386
2387
2388
2389
2390 { PCI_VENDOR_ID_OXSEMI, 0xc101,
2391 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2392 pbn_b0_1_4000000 },
2393 { PCI_VENDOR_ID_OXSEMI, 0xc105,
2394 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2395 pbn_b0_1_4000000 },
2396 { PCI_VENDOR_ID_OXSEMI, 0xc11b,
2397 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2398 pbn_oxsemi_1_4000000 },
2399 { PCI_VENDOR_ID_OXSEMI, 0xc11f,
2400 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2401 pbn_oxsemi_1_4000000 },
2402 { PCI_VENDOR_ID_OXSEMI, 0xc120,
2403 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2404 pbn_b0_1_4000000 },
2405 { PCI_VENDOR_ID_OXSEMI, 0xc124,
2406 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2407 pbn_b0_1_4000000 },
2408 { PCI_VENDOR_ID_OXSEMI, 0xc138,
2409 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2410 pbn_oxsemi_1_4000000 },
2411 { PCI_VENDOR_ID_OXSEMI, 0xc13d,
2412 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2413 pbn_oxsemi_1_4000000 },
2414 { PCI_VENDOR_ID_OXSEMI, 0xc140,
2415 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2416 pbn_b0_1_4000000 },
2417 { PCI_VENDOR_ID_OXSEMI, 0xc141,
2418 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2419 pbn_b0_1_4000000 },
2420 { PCI_VENDOR_ID_OXSEMI, 0xc144,
2421 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2422 pbn_b0_1_4000000 },
2423 { PCI_VENDOR_ID_OXSEMI, 0xc145,
2424 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2425 pbn_b0_1_4000000 },
2426 { PCI_VENDOR_ID_OXSEMI, 0xc158,
2427 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2428 pbn_oxsemi_2_4000000 },
2429 { PCI_VENDOR_ID_OXSEMI, 0xc15d,
2430 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2431 pbn_oxsemi_2_4000000 },
2432 { PCI_VENDOR_ID_OXSEMI, 0xc208,
2433 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2434 pbn_oxsemi_4_4000000 },
2435 { PCI_VENDOR_ID_OXSEMI, 0xc20d,
2436 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2437 pbn_oxsemi_4_4000000 },
2438 { PCI_VENDOR_ID_OXSEMI, 0xc308,
2439 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2440 pbn_oxsemi_8_4000000 },
2441 { PCI_VENDOR_ID_OXSEMI, 0xc30d,
2442 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2443 pbn_oxsemi_8_4000000 },
2444 { PCI_VENDOR_ID_OXSEMI, 0xc40b,
2445 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2446 pbn_oxsemi_1_4000000 },
2447 { PCI_VENDOR_ID_OXSEMI, 0xc40f,
2448 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2449 pbn_oxsemi_1_4000000 },
2450 { PCI_VENDOR_ID_OXSEMI, 0xc41b,
2451 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2452 pbn_oxsemi_1_4000000 },
2453 { PCI_VENDOR_ID_OXSEMI, 0xc41f,
2454 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2455 pbn_oxsemi_1_4000000 },
2456 { PCI_VENDOR_ID_OXSEMI, 0xc42b,
2457 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2458 pbn_oxsemi_1_4000000 },
2459 { PCI_VENDOR_ID_OXSEMI, 0xc42f,
2460 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2461 pbn_oxsemi_1_4000000 },
2462 { PCI_VENDOR_ID_OXSEMI, 0xc43b,
2463 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2464 pbn_oxsemi_1_4000000 },
2465 { PCI_VENDOR_ID_OXSEMI, 0xc43f,
2466 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2467 pbn_oxsemi_1_4000000 },
2468 { PCI_VENDOR_ID_OXSEMI, 0xc44b,
2469 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2470 pbn_oxsemi_1_4000000 },
2471 { PCI_VENDOR_ID_OXSEMI, 0xc44f,
2472 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2473 pbn_oxsemi_1_4000000 },
2474 { PCI_VENDOR_ID_OXSEMI, 0xc45b,
2475 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2476 pbn_oxsemi_1_4000000 },
2477 { PCI_VENDOR_ID_OXSEMI, 0xc45f,
2478 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2479 pbn_oxsemi_1_4000000 },
2480 { PCI_VENDOR_ID_OXSEMI, 0xc46b,
2481 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2482 pbn_oxsemi_1_4000000 },
2483 { PCI_VENDOR_ID_OXSEMI, 0xc46f,
2484 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2485 pbn_oxsemi_1_4000000 },
2486 { PCI_VENDOR_ID_OXSEMI, 0xc47b,
2487 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2488 pbn_oxsemi_1_4000000 },
2489 { PCI_VENDOR_ID_OXSEMI, 0xc47f,
2490 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2491 pbn_oxsemi_1_4000000 },
2492 { PCI_VENDOR_ID_OXSEMI, 0xc48b,
2493 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2494 pbn_oxsemi_1_4000000 },
2495 { PCI_VENDOR_ID_OXSEMI, 0xc48f,
2496 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2497 pbn_oxsemi_1_4000000 },
2498 { PCI_VENDOR_ID_OXSEMI, 0xc49b,
2499 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2500 pbn_oxsemi_1_4000000 },
2501 { PCI_VENDOR_ID_OXSEMI, 0xc49f,
2502 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2503 pbn_oxsemi_1_4000000 },
2504 { PCI_VENDOR_ID_OXSEMI, 0xc4ab,
2505 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2506 pbn_oxsemi_1_4000000 },
2507 { PCI_VENDOR_ID_OXSEMI, 0xc4af,
2508 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2509 pbn_oxsemi_1_4000000 },
2510 { PCI_VENDOR_ID_OXSEMI, 0xc4bb,
2511 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2512 pbn_oxsemi_1_4000000 },
2513 { PCI_VENDOR_ID_OXSEMI, 0xc4bf,
2514 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2515 pbn_oxsemi_1_4000000 },
2516 { PCI_VENDOR_ID_OXSEMI, 0xc4cb,
2517 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2518 pbn_oxsemi_1_4000000 },
2519 { PCI_VENDOR_ID_OXSEMI, 0xc4cf,
2520 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2521 pbn_oxsemi_1_4000000 },
2522
2523
2524
2525 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2526 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
2527 pbn_oxsemi_1_4000000 },
2528 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2529 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
2530 pbn_oxsemi_2_4000000 },
2531 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2532 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
2533 pbn_oxsemi_4_4000000 },
2534 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2535 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
2536 pbn_oxsemi_8_4000000 },
2537
2538
2539
2540
2541 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2542 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0,
2543 pbn_sbsxrsio },
2544 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2545 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0,
2546 pbn_sbsxrsio },
2547 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2548 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0,
2549 pbn_sbsxrsio },
2550 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2551 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0,
2552 pbn_sbsxrsio },
2553
2554
2555
2556
2557 { PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM,
2558 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2559 pbn_b1_1_115200 },
2560
2561
2562
2563
2564
2565 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100,
2566 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2567 pbn_b0_1_921600 },
2568 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200,
2569 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2570 pbn_b0_2_921600 },
2571 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400,
2572 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2573 pbn_b0_4_921600 },
2574 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B,
2575 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2576 pbn_b0_4_921600 },
2577 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L,
2578 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2579 pbn_b1_1_921600 },
2580 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L,
2581 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2582 pbn_b1_bt_2_921600 },
2583 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L,
2584 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2585 pbn_b0_bt_4_921600 },
2586 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L,
2587 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2588 pbn_b0_bt_8_921600 },
2589
2590 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550,
2591 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2592 pbn_b2_1_460800 },
2593 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650,
2594 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2595 pbn_b2_1_460800 },
2596 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850,
2597 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2598 pbn_b2_1_460800 },
2599 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550,
2600 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2601 pbn_b2_bt_2_921600 },
2602 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650,
2603 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2604 pbn_b2_bt_2_921600 },
2605 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850,
2606 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2607 pbn_b2_bt_2_921600 },
2608 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550,
2609 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2610 pbn_b2_bt_4_921600 },
2611 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650,
2612 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2613 pbn_b2_bt_4_921600 },
2614 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850,
2615 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2616 pbn_b2_bt_4_921600 },
2617 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550,
2618 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2619 pbn_b0_1_921600 },
2620 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650,
2621 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2622 pbn_b0_1_921600 },
2623 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850,
2624 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2625 pbn_b0_1_921600 },
2626 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550,
2627 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2628 pbn_b0_bt_2_921600 },
2629 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650,
2630 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2631 pbn_b0_bt_2_921600 },
2632 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850,
2633 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2634 pbn_b0_bt_2_921600 },
2635 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550,
2636 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2637 pbn_b0_bt_4_921600 },
2638 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650,
2639 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2640 pbn_b0_bt_4_921600 },
2641 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850,
2642 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2643 pbn_b0_bt_4_921600 },
2644 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_550,
2645 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2646 pbn_b0_bt_8_921600 },
2647 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_650,
2648 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2649 pbn_b0_bt_8_921600 },
2650 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_850,
2651 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2652 pbn_b0_bt_8_921600 },
2653
2654
2655
2656
2657 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
2658 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4,
2659 0, 0, pbn_computone_4 },
2660 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
2661 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8,
2662 0, 0, pbn_computone_8 },
2663 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
2664 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6,
2665 0, 0, pbn_computone_6 },
2666
2667 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N,
2668 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2669 pbn_oxsemi },
2670 { PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889,
2671 PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0,
2672 pbn_b0_bt_1_921600 },
2673
2674
2675
2676
2677 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P028,
2678 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2679 pbn_b0_bt_8_115200 },
2680 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P030,
2681 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2682 pbn_b0_bt_8_115200 },
2683
2684 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL,
2685 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2686 pbn_b0_bt_2_115200 },
2687 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A,
2688 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2689 pbn_b0_bt_2_115200 },
2690 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B,
2691 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2692 pbn_b0_bt_2_115200 },
2693 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_A,
2694 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2695 pbn_b0_bt_4_460800 },
2696 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_B,
2697 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2698 pbn_b0_bt_4_460800 },
2699 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS,
2700 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2701 pbn_b0_bt_2_460800 },
2702 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A,
2703 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2704 pbn_b0_bt_2_460800 },
2705 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B,
2706 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2707 pbn_b0_bt_2_460800 },
2708 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL,
2709 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2710 pbn_b0_bt_1_115200 },
2711 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650,
2712 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2713 pbn_b0_bt_1_460800 },
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
2724 0x1204, 0x0004, 0, 0,
2725 pbn_b0_4_921600 },
2726 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
2727 0x1208, 0x0004, 0, 0,
2728 pbn_b0_4_921600 },
2729
2730
2731
2732
2733
2734
2735 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF1,
2736 0x1208, 0x0004, 0, 0,
2737 pbn_b0_4_921600 },
2738
2739
2740
2741
2742 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RAC4,
2743 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2744 pbn_b1_1_1382400 },
2745
2746
2747
2748
2749 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RACIII,
2750 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2751 pbn_b1_1_1382400 },
2752
2753
2754
2755
2756 { PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT,
2757 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2758 pbn_b2_bt_2_115200 },
2759
2760
2761
2762
2763 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80960_RP,
2764 0xE4BF, PCI_ANY_ID, 0, 0,
2765 pbn_intel_i960 },
2766
2767
2768
2769
2770 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM,
2771 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2772 pbn_b0_1_115200 },
2773
2774
2775
2776 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_RBM56G,
2777 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2778 pbn_b0_1_115200 },
2779
2780
2781
2782
2783
2784
2785
2786
2787 { PCI_VENDOR_ID_ROCKWELL, 0x1004,
2788 0x1048, 0x1500, 0, 0,
2789 pbn_b1_1_115200 },
2790
2791 { PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
2792 0xFF00, 0, 0, 0,
2793 pbn_sgi_ioc3 },
2794
2795
2796
2797
2798 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
2799 PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_RMP3, 0, 0,
2800 pbn_b1_1_115200 },
2801 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
2802 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2803 pbn_b0_5_115200 },
2804 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
2805 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2806 pbn_b2_1_115200 },
2807
2808 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2,
2809 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2810 pbn_b3_2_115200 },
2811 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM4,
2812 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2813 pbn_b3_4_115200 },
2814 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8,
2815 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2816 pbn_b3_8_115200 },
2817
2818
2819
2820
2821 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2822 PCI_ANY_ID, PCI_ANY_ID,
2823 0,
2824 0, pbn_exar_XR17C152 },
2825 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2826 PCI_ANY_ID, PCI_ANY_ID,
2827 0,
2828 0, pbn_exar_XR17C154 },
2829 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2830 PCI_ANY_ID, PCI_ANY_ID,
2831 0,
2832 0, pbn_exar_XR17C158 },
2833
2834
2835
2836
2837 { PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560,
2838 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2839 pbn_b0_1_115200 },
2840
2841
2842
2843 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
2844 PCI_ANY_ID, PCI_ANY_ID,
2845 0, 0,
2846 pbn_b1_bt_1_115200 },
2847
2848
2849
2850
2851 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS200,
2852 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2853 pbn_b2_2_115200 },
2854
2855
2856
2857 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS400,
2858 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2859 pbn_b2_4_115200 },
2860
2861
2862
2863 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2864 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4,
2865 0, 0, pbn_b2_4_921600 },
2866 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2867 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8,
2868 0, 0, pbn_b2_8_921600 },
2869
2870
2871
2872
2873
2874
2875
2876 {
2877 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2878 PCI_VENDOR_ID_MAINPINE, 0x0200,
2879 0, 0, pbn_b0_2_115200 },
2880 {
2881 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2882 PCI_VENDOR_ID_MAINPINE, 0x0300,
2883 0, 0, pbn_b0_4_115200 },
2884 {
2885 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2886 PCI_VENDOR_ID_MAINPINE, 0x0400,
2887 0, 0, pbn_b0_2_115200 },
2888 {
2889 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2890 PCI_VENDOR_ID_MAINPINE, 0x0500,
2891 0, 0, pbn_b0_4_115200 },
2892 {
2893 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2894 PCI_VENDOR_ID_MAINPINE, 0x0600,
2895 0, 0, pbn_b0_2_115200 },
2896 {
2897 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2898 PCI_VENDOR_ID_MAINPINE, 0x0700,
2899 0, 0, pbn_b0_4_115200 },
2900 {
2901 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2902 PCI_VENDOR_ID_MAINPINE, 0x0800,
2903 0, 0, pbn_b0_8_115200 },
2904 {
2905 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2906 PCI_VENDOR_ID_MAINPINE, 0x0C00,
2907 0, 0, pbn_b0_2_115200 },
2908 {
2909 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2910 PCI_VENDOR_ID_MAINPINE, 0x0D00,
2911 0, 0, pbn_b0_4_115200 },
2912 {
2913 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2914 PCI_VENDOR_ID_MAINPINE, 0x1D00,
2915 0, 0, pbn_b0_8_115200 },
2916 {
2917 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2918 PCI_VENDOR_ID_MAINPINE, 0x2000,
2919 0, 0, pbn_b0_1_115200 },
2920 {
2921 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2922 PCI_VENDOR_ID_MAINPINE, 0x2100,
2923 0, 0, pbn_b0_1_115200 },
2924 {
2925 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2926 PCI_VENDOR_ID_MAINPINE, 0x2200,
2927 0, 0, pbn_b0_2_115200 },
2928 {
2929 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2930 PCI_VENDOR_ID_MAINPINE, 0x2300,
2931 0, 0, pbn_b0_2_115200 },
2932 {
2933 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2934 PCI_VENDOR_ID_MAINPINE, 0x2400,
2935 0, 0, pbn_b0_4_115200 },
2936 {
2937 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2938 PCI_VENDOR_ID_MAINPINE, 0x2500,
2939 0, 0, pbn_b0_4_115200 },
2940 {
2941 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2942 PCI_VENDOR_ID_MAINPINE, 0x2600,
2943 0, 0, pbn_b0_8_115200 },
2944 {
2945 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2946 PCI_VENDOR_ID_MAINPINE, 0x2700,
2947 0, 0, pbn_b0_8_115200 },
2948 {
2949 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2950 PCI_VENDOR_ID_MAINPINE, 0x3000,
2951 0, 0, pbn_b0_1_115200 },
2952 {
2953 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2954 PCI_VENDOR_ID_MAINPINE, 0x3100,
2955 0, 0, pbn_b0_1_115200 },
2956 {
2957 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2958 PCI_VENDOR_ID_MAINPINE, 0x3200,
2959 0, 0, pbn_b0_2_115200 },
2960 {
2961 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2962 PCI_VENDOR_ID_MAINPINE, 0x3300,
2963 0, 0, pbn_b0_2_115200 },
2964 {
2965 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2966 PCI_VENDOR_ID_MAINPINE, 0x3400,
2967 0, 0, pbn_b0_4_115200 },
2968 {
2969 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2970 PCI_VENDOR_ID_MAINPINE, 0x3500,
2971 0, 0, pbn_b0_4_115200 },
2972 {
2973 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2974 PCI_VENDOR_ID_MAINPINE, 0x3C00,
2975 0, 0, pbn_b0_8_115200 },
2976 {
2977 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
2978 PCI_VENDOR_ID_MAINPINE, 0x3D00,
2979 0, 0, pbn_b0_8_115200 },
2980
2981
2982
2983
2984
2985 { PCI_VENDOR_ID_PASEMI, 0xa004,
2986 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2987 pbn_pasemi_1682M },
2988
2989
2990
2991
2992 { PCI_VENDOR_ID_ADDIDATA,
2993 PCI_DEVICE_ID_ADDIDATA_APCI7500,
2994 PCI_ANY_ID,
2995 PCI_ANY_ID,
2996 0,
2997 0,
2998 pbn_b0_4_115200 },
2999
3000 { PCI_VENDOR_ID_ADDIDATA,
3001 PCI_DEVICE_ID_ADDIDATA_APCI7420,
3002 PCI_ANY_ID,
3003 PCI_ANY_ID,
3004 0,
3005 0,
3006 pbn_b0_2_115200 },
3007
3008 { PCI_VENDOR_ID_ADDIDATA,
3009 PCI_DEVICE_ID_ADDIDATA_APCI7300,
3010 PCI_ANY_ID,
3011 PCI_ANY_ID,
3012 0,
3013 0,
3014 pbn_b0_1_115200 },
3015
3016 { PCI_VENDOR_ID_ADDIDATA_OLD,
3017 PCI_DEVICE_ID_ADDIDATA_APCI7800,
3018 PCI_ANY_ID,
3019 PCI_ANY_ID,
3020 0,
3021 0,
3022 pbn_b1_8_115200 },
3023
3024 { PCI_VENDOR_ID_ADDIDATA,
3025 PCI_DEVICE_ID_ADDIDATA_APCI7500_2,
3026 PCI_ANY_ID,
3027 PCI_ANY_ID,
3028 0,
3029 0,
3030 pbn_b0_4_115200 },
3031
3032 { PCI_VENDOR_ID_ADDIDATA,
3033 PCI_DEVICE_ID_ADDIDATA_APCI7420_2,
3034 PCI_ANY_ID,
3035 PCI_ANY_ID,
3036 0,
3037 0,
3038 pbn_b0_2_115200 },
3039
3040 { PCI_VENDOR_ID_ADDIDATA,
3041 PCI_DEVICE_ID_ADDIDATA_APCI7300_2,
3042 PCI_ANY_ID,
3043 PCI_ANY_ID,
3044 0,
3045 0,
3046 pbn_b0_1_115200 },
3047
3048 { PCI_VENDOR_ID_ADDIDATA,
3049 PCI_DEVICE_ID_ADDIDATA_APCI7500_3,
3050 PCI_ANY_ID,
3051 PCI_ANY_ID,
3052 0,
3053 0,
3054 pbn_b0_4_115200 },
3055
3056 { PCI_VENDOR_ID_ADDIDATA,
3057 PCI_DEVICE_ID_ADDIDATA_APCI7420_3,
3058 PCI_ANY_ID,
3059 PCI_ANY_ID,
3060 0,
3061 0,
3062 pbn_b0_2_115200 },
3063
3064 { PCI_VENDOR_ID_ADDIDATA,
3065 PCI_DEVICE_ID_ADDIDATA_APCI7300_3,
3066 PCI_ANY_ID,
3067 PCI_ANY_ID,
3068 0,
3069 0,
3070 pbn_b0_1_115200 },
3071
3072 { PCI_VENDOR_ID_ADDIDATA,
3073 PCI_DEVICE_ID_ADDIDATA_APCI7800_3,
3074 PCI_ANY_ID,
3075 PCI_ANY_ID,
3076 0,
3077 0,
3078 pbn_b0_8_115200 },
3079
3080
3081
3082
3083
3084 { PCI_ANY_ID, PCI_ANY_ID,
3085 PCI_ANY_ID, PCI_ANY_ID,
3086 PCI_CLASS_COMMUNICATION_SERIAL << 8,
3087 0xffff00, pbn_default },
3088 { PCI_ANY_ID, PCI_ANY_ID,
3089 PCI_ANY_ID, PCI_ANY_ID,
3090 PCI_CLASS_COMMUNICATION_MODEM << 8,
3091 0xffff00, pbn_default },
3092 { PCI_ANY_ID, PCI_ANY_ID,
3093 PCI_ANY_ID, PCI_ANY_ID,
3094 PCI_CLASS_COMMUNICATION_MULTISERIAL << 8,
3095 0xffff00, pbn_default },
3096 { 0, }
3097};
3098
3099static struct pci_driver serial_pci_driver = {
3100 .name = "serial",
3101 .probe = pciserial_init_one,
3102 .remove = __devexit_p(pciserial_remove_one),
3103#ifdef CONFIG_PM
3104 .suspend = pciserial_suspend_one,
3105 .resume = pciserial_resume_one,
3106#endif
3107 .id_table = serial_pci_tbl,
3108};
3109
3110static int __init serial8250_pci_init(void)
3111{
3112 return pci_register_driver(&serial_pci_driver);
3113}
3114
3115static void __exit serial8250_pci_exit(void)
3116{
3117 pci_unregister_driver(&serial_pci_driver);
3118}
3119
3120module_init(serial8250_pci_init);
3121module_exit(serial8250_pci_exit);
3122
3123MODULE_LICENSE("GPL");
3124MODULE_DESCRIPTION("Generic 8250/16x50 PCI serial probe module");
3125MODULE_DEVICE_TABLE(pci, serial_pci_tbl);
3126