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 *,
46 const struct pciserial_board *,
47 struct uart_port *, int);
48 void (*exit)(struct pci_dev *dev);
49};
50
51#define PCI_NUM_BAR_RESOURCES 6
52
53struct serial_private {
54 struct pci_dev *dev;
55 unsigned int nr;
56 void __iomem *remapped_bar[PCI_NUM_BAR_RESOURCES];
57 struct pci_serial_quirk *quirk;
58 int line[0];
59};
60
61static void moan_device(const char *str, struct pci_dev *dev)
62{
63 printk(KERN_WARNING "%s: %s\n"
64 KERN_WARNING "Please send the output of lspci -vv, this\n"
65 KERN_WARNING "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n"
66 KERN_WARNING "manufacturer and name of serial board or\n"
67 KERN_WARNING "modem board to rmk+serial@arm.linux.org.uk.\n",
68 pci_name(dev), str, dev->vendor, dev->device,
69 dev->subsystem_vendor, dev->subsystem_device);
70}
71
72static int
73setup_port(struct serial_private *priv, struct uart_port *port,
74 int bar, int offset, int regshift)
75{
76 struct pci_dev *dev = priv->dev;
77 unsigned long base, len;
78
79 if (bar >= PCI_NUM_BAR_RESOURCES)
80 return -EINVAL;
81
82 base = pci_resource_start(dev, bar);
83
84 if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) {
85 len = pci_resource_len(dev, bar);
86
87 if (!priv->remapped_bar[bar])
88 priv->remapped_bar[bar] = ioremap_nocache(base, len);
89 if (!priv->remapped_bar[bar])
90 return -ENOMEM;
91
92 port->iotype = UPIO_MEM;
93 port->iobase = 0;
94 port->mapbase = base + offset;
95 port->membase = priv->remapped_bar[bar] + offset;
96 port->regshift = regshift;
97 } else {
98 port->iotype = UPIO_PORT;
99 port->iobase = base + offset;
100 port->mapbase = 0;
101 port->membase = NULL;
102 port->regshift = 0;
103 }
104 return 0;
105}
106
107
108
109
110static int addidata_apci7800_setup(struct serial_private *priv,
111 const struct pciserial_board *board,
112 struct uart_port *port, int idx)
113{
114 unsigned int bar = 0, offset = board->first_offset;
115 bar = FL_GET_BASE(board->flags);
116
117 if (idx < 2) {
118 offset += idx * board->uart_offset;
119 } else if ((idx >= 2) && (idx < 4)) {
120 bar += 1;
121 offset += ((idx - 2) * board->uart_offset);
122 } else if ((idx >= 4) && (idx < 6)) {
123 bar += 2;
124 offset += ((idx - 4) * board->uart_offset);
125 } else if (idx >= 6) {
126 bar += 3;
127 offset += ((idx - 6) * board->uart_offset);
128 }
129
130 return setup_port(priv, port, bar, offset, board->reg_shift);
131}
132
133
134
135
136
137static int
138afavlab_setup(struct serial_private *priv, const struct pciserial_board *board,
139 struct uart_port *port, int idx)
140{
141 unsigned int bar, offset = board->first_offset;
142
143 bar = FL_GET_BASE(board->flags);
144 if (idx < 4)
145 bar += idx;
146 else {
147 bar = 4;
148 offset += (idx - 4) * board->uart_offset;
149 }
150
151 return setup_port(priv, port, bar, offset, board->reg_shift);
152}
153
154
155
156
157
158
159
160
161static int pci_hp_diva_init(struct pci_dev *dev)
162{
163 int rc = 0;
164
165 switch (dev->subsystem_device) {
166 case PCI_DEVICE_ID_HP_DIVA_TOSCA1:
167 case PCI_DEVICE_ID_HP_DIVA_HALFDOME:
168 case PCI_DEVICE_ID_HP_DIVA_KEYSTONE:
169 case PCI_DEVICE_ID_HP_DIVA_EVEREST:
170 rc = 3;
171 break;
172 case PCI_DEVICE_ID_HP_DIVA_TOSCA2:
173 rc = 2;
174 break;
175 case PCI_DEVICE_ID_HP_DIVA_MAESTRO:
176 rc = 4;
177 break;
178 case PCI_DEVICE_ID_HP_DIVA_POWERBAR:
179 case PCI_DEVICE_ID_HP_DIVA_HURRICANE:
180 rc = 1;
181 break;
182 }
183
184 return rc;
185}
186
187
188
189
190
191static int
192pci_hp_diva_setup(struct serial_private *priv,
193 const struct pciserial_board *board,
194 struct uart_port *port, int idx)
195{
196 unsigned int offset = board->first_offset;
197 unsigned int bar = FL_GET_BASE(board->flags);
198
199 switch (priv->dev->subsystem_device) {
200 case PCI_DEVICE_ID_HP_DIVA_MAESTRO:
201 if (idx == 3)
202 idx++;
203 break;
204 case PCI_DEVICE_ID_HP_DIVA_EVEREST:
205 if (idx > 0)
206 idx++;
207 if (idx > 2)
208 idx++;
209 break;
210 }
211 if (idx > 2)
212 offset = 0x18;
213
214 offset += idx * board->uart_offset;
215
216 return setup_port(priv, port, bar, offset, board->reg_shift);
217}
218
219
220
221
222static int pci_inteli960ni_init(struct pci_dev *dev)
223{
224 unsigned long oldval;
225
226 if (!(dev->subsystem_device & 0x1000))
227 return -ENODEV;
228
229
230 pci_read_config_dword(dev, 0x44, (void *)&oldval);
231 if (oldval == 0x00001000L) {
232 printk(KERN_DEBUG "Local i960 firmware missing");
233 return -ENODEV;
234 }
235 return 0;
236}
237
238
239
240
241
242
243
244static int pci_plx9050_init(struct pci_dev *dev)
245{
246 u8 irq_config;
247 void __iomem *p;
248
249 if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0) {
250 moan_device("no memory in bar 0", dev);
251 return 0;
252 }
253
254 irq_config = 0x41;
255 if (dev->vendor == PCI_VENDOR_ID_PANACOM ||
256 dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS)
257 irq_config = 0x43;
258
259 if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
260 (dev->device == PCI_DEVICE_ID_PLX_ROMULUS))
261
262
263
264
265
266
267
268
269 irq_config = 0x5b;
270
271
272
273 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
274 if (p == NULL)
275 return -ENOMEM;
276 writel(irq_config, p + 0x4c);
277
278
279
280
281 readl(p + 0x4c);
282 iounmap(p);
283
284 return 0;
285}
286
287static void __devexit pci_plx9050_exit(struct pci_dev *dev)
288{
289 u8 __iomem *p;
290
291 if ((pci_resource_flags(dev, 0) & IORESOURCE_MEM) == 0)
292 return;
293
294
295
296
297 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
298 if (p != NULL) {
299 writel(0, p + 0x4c);
300
301
302
303
304 readl(p + 0x4c);
305 iounmap(p);
306 }
307}
308
309#define NI8420_INT_ENABLE_REG 0x38
310#define NI8420_INT_ENABLE_BIT 0x2000
311
312static void __devexit pci_ni8420_exit(struct pci_dev *dev)
313{
314 void __iomem *p;
315 unsigned long base, len;
316 unsigned int bar = 0;
317
318 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
319 moan_device("no memory in bar", dev);
320 return;
321 }
322
323 base = pci_resource_start(dev, bar);
324 len = pci_resource_len(dev, bar);
325 p = ioremap_nocache(base, len);
326 if (p == NULL)
327 return;
328
329
330 writel(readl(p + NI8420_INT_ENABLE_REG) & ~(NI8420_INT_ENABLE_BIT),
331 p + NI8420_INT_ENABLE_REG);
332 iounmap(p);
333}
334
335
336
337#define MITE_IOWBSR1 0xc4
338#define MITE_IOWCR1 0xf4
339#define MITE_LCIMR1 0x08
340#define MITE_LCIMR2 0x10
341
342#define MITE_LCIMR2_CLR_CPU_IE (1 << 30)
343
344static void __devexit pci_ni8430_exit(struct pci_dev *dev)
345{
346 void __iomem *p;
347 unsigned long base, len;
348 unsigned int bar = 0;
349
350 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
351 moan_device("no memory in bar", dev);
352 return;
353 }
354
355 base = pci_resource_start(dev, bar);
356 len = pci_resource_len(dev, bar);
357 p = ioremap_nocache(base, len);
358 if (p == NULL)
359 return;
360
361
362 writel(MITE_LCIMR2_CLR_CPU_IE, p + MITE_LCIMR2);
363 iounmap(p);
364}
365
366
367static int
368sbs_setup(struct serial_private *priv, const struct pciserial_board *board,
369 struct uart_port *port, int idx)
370{
371 unsigned int bar, offset = board->first_offset;
372
373 bar = 0;
374
375 if (idx < 4) {
376
377 offset += idx * board->uart_offset;
378 } else if (idx < 8) {
379
380 offset += idx * board->uart_offset + 0xC00;
381 } else
382 return 1;
383
384 return setup_port(priv, port, bar, offset, board->reg_shift);
385}
386
387
388
389
390
391
392
393
394
395#define OCT_REG_CR_OFF 0x500
396
397static int sbs_init(struct pci_dev *dev)
398{
399 u8 __iomem *p;
400
401 p = ioremap_nocache(pci_resource_start(dev, 0),
402 pci_resource_len(dev, 0));
403
404 if (p == NULL)
405 return -ENOMEM;
406
407 writeb(0x10, p + OCT_REG_CR_OFF);
408 udelay(50);
409 writeb(0x0, p + OCT_REG_CR_OFF);
410
411
412 writeb(0x4, p + OCT_REG_CR_OFF);
413 iounmap(p);
414
415 return 0;
416}
417
418
419
420
421
422static void __devexit sbs_exit(struct pci_dev *dev)
423{
424 u8 __iomem *p;
425
426 p = ioremap_nocache(pci_resource_start(dev, 0),
427 pci_resource_len(dev, 0));
428
429 if (p != NULL)
430 writeb(0, p + OCT_REG_CR_OFF);
431 iounmap(p);
432}
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461#define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc)
462#define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8)
463
464static int pci_siig10x_init(struct pci_dev *dev)
465{
466 u16 data;
467 void __iomem *p;
468
469 switch (dev->device & 0xfff8) {
470 case PCI_DEVICE_ID_SIIG_1S_10x:
471 data = 0xffdf;
472 break;
473 case PCI_DEVICE_ID_SIIG_2S_10x:
474 data = 0xf7ff;
475 break;
476 default:
477 data = 0xfffb;
478 break;
479 }
480
481 p = ioremap_nocache(pci_resource_start(dev, 0), 0x80);
482 if (p == NULL)
483 return -ENOMEM;
484
485 writew(readw(p + 0x28) & data, p + 0x28);
486 readw(p + 0x28);
487 iounmap(p);
488 return 0;
489}
490
491#define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc)
492#define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc)
493
494static int pci_siig20x_init(struct pci_dev *dev)
495{
496 u8 data;
497
498
499 pci_read_config_byte(dev, 0x6f, &data);
500 pci_write_config_byte(dev, 0x6f, data & 0xef);
501
502
503 if (((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S_20x) ||
504 ((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S1P_20x)) {
505 pci_read_config_byte(dev, 0x73, &data);
506 pci_write_config_byte(dev, 0x73, data & 0xef);
507 }
508 return 0;
509}
510
511static int pci_siig_init(struct pci_dev *dev)
512{
513 unsigned int type = dev->device & 0xff00;
514
515 if (type == 0x1000)
516 return pci_siig10x_init(dev);
517 else if (type == 0x2000)
518 return pci_siig20x_init(dev);
519
520 moan_device("Unknown SIIG card", dev);
521 return -ENODEV;
522}
523
524static int pci_siig_setup(struct serial_private *priv,
525 const struct pciserial_board *board,
526 struct uart_port *port, int idx)
527{
528 unsigned int bar = FL_GET_BASE(board->flags) + idx, offset = 0;
529
530 if (idx > 3) {
531 bar = 4;
532 offset = (idx - 4) * 8;
533 }
534
535 return setup_port(priv, port, bar, offset, 0);
536}
537
538
539
540
541
542
543static const unsigned short timedia_single_port[] = {
544 0x4025, 0x4027, 0x4028, 0x5025, 0x5027, 0
545};
546
547static const unsigned short timedia_dual_port[] = {
548 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085,
549 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079,
550 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079,
551 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079,
552 0xD079, 0
553};
554
555static const unsigned short timedia_quad_port[] = {
556 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157,
557 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159,
558 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056,
559 0xB157, 0
560};
561
562static const unsigned short timedia_eight_port[] = {
563 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166,
564 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0
565};
566
567static const struct timedia_struct {
568 int num;
569 const unsigned short *ids;
570} timedia_data[] = {
571 { 1, timedia_single_port },
572 { 2, timedia_dual_port },
573 { 4, timedia_quad_port },
574 { 8, timedia_eight_port }
575};
576
577static int pci_timedia_init(struct pci_dev *dev)
578{
579 const unsigned short *ids;
580 int i, j;
581
582 for (i = 0; i < ARRAY_SIZE(timedia_data); i++) {
583 ids = timedia_data[i].ids;
584 for (j = 0; ids[j]; j++)
585 if (dev->subsystem_device == ids[j])
586 return timedia_data[i].num;
587 }
588 return 0;
589}
590
591
592
593
594
595static int
596pci_timedia_setup(struct serial_private *priv,
597 const struct pciserial_board *board,
598 struct uart_port *port, int idx)
599{
600 unsigned int bar = 0, offset = board->first_offset;
601
602 switch (idx) {
603 case 0:
604 bar = 0;
605 break;
606 case 1:
607 offset = board->uart_offset;
608 bar = 0;
609 break;
610 case 2:
611 bar = 1;
612 break;
613 case 3:
614 offset = board->uart_offset;
615
616 case 4:
617 case 5:
618 case 6:
619 case 7:
620 bar = idx - 2;
621 }
622
623 return setup_port(priv, port, bar, offset, board->reg_shift);
624}
625
626
627
628
629static int
630titan_400l_800l_setup(struct serial_private *priv,
631 const struct pciserial_board *board,
632 struct uart_port *port, int idx)
633{
634 unsigned int bar, offset = board->first_offset;
635
636 switch (idx) {
637 case 0:
638 bar = 1;
639 break;
640 case 1:
641 bar = 2;
642 break;
643 default:
644 bar = 4;
645 offset = (idx - 2) * board->uart_offset;
646 }
647
648 return setup_port(priv, port, bar, offset, board->reg_shift);
649}
650
651static int pci_xircom_init(struct pci_dev *dev)
652{
653 msleep(100);
654 return 0;
655}
656
657static int pci_ni8420_init(struct pci_dev *dev)
658{
659 void __iomem *p;
660 unsigned long base, len;
661 unsigned int bar = 0;
662
663 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
664 moan_device("no memory in bar", dev);
665 return 0;
666 }
667
668 base = pci_resource_start(dev, bar);
669 len = pci_resource_len(dev, bar);
670 p = ioremap_nocache(base, len);
671 if (p == NULL)
672 return -ENOMEM;
673
674
675 writel(readl(p + NI8420_INT_ENABLE_REG) | NI8420_INT_ENABLE_BIT,
676 p + NI8420_INT_ENABLE_REG);
677
678 iounmap(p);
679 return 0;
680}
681
682#define MITE_IOWBSR1_WSIZE 0xa
683#define MITE_IOWBSR1_WIN_OFFSET 0x800
684#define MITE_IOWBSR1_WENAB (1 << 7)
685#define MITE_LCIMR1_IO_IE_0 (1 << 24)
686#define MITE_LCIMR2_SET_CPU_IE (1 << 31)
687#define MITE_IOWCR1_RAMSEL_MASK 0xfffffffe
688
689static int pci_ni8430_init(struct pci_dev *dev)
690{
691 void __iomem *p;
692 unsigned long base, len;
693 u32 device_window;
694 unsigned int bar = 0;
695
696 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
697 moan_device("no memory in bar", dev);
698 return 0;
699 }
700
701 base = pci_resource_start(dev, bar);
702 len = pci_resource_len(dev, bar);
703 p = ioremap_nocache(base, len);
704 if (p == NULL)
705 return -ENOMEM;
706
707
708 device_window = ((base + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00)
709 | MITE_IOWBSR1_WENAB | MITE_IOWBSR1_WSIZE;
710 writel(device_window, p + MITE_IOWBSR1);
711
712
713 writel((readl(p + MITE_IOWCR1) & MITE_IOWCR1_RAMSEL_MASK),
714 p + MITE_IOWCR1);
715
716
717 writel(MITE_LCIMR1_IO_IE_0, p + MITE_LCIMR1);
718
719
720 writel(MITE_LCIMR2_SET_CPU_IE, p + MITE_LCIMR2);
721
722 iounmap(p);
723 return 0;
724}
725
726
727#define NI8430_PORTCON 0x0f
728#define NI8430_PORTCON_TXVR_ENABLE (1 << 3)
729
730static int
731pci_ni8430_setup(struct serial_private *priv,
732 const struct pciserial_board *board,
733 struct uart_port *port, int idx)
734{
735 void __iomem *p;
736 unsigned long base, len;
737 unsigned int bar, offset = board->first_offset;
738
739 if (idx >= board->num_ports)
740 return 1;
741
742 bar = FL_GET_BASE(board->flags);
743 offset += idx * board->uart_offset;
744
745 base = pci_resource_start(priv->dev, bar);
746 len = pci_resource_len(priv->dev, bar);
747 p = ioremap_nocache(base, len);
748
749
750 writeb(readb(p + offset + NI8430_PORTCON) | NI8430_PORTCON_TXVR_ENABLE,
751 p + offset + NI8430_PORTCON);
752
753 iounmap(p);
754
755 return setup_port(priv, port, bar, offset, board->reg_shift);
756}
757
758
759static int pci_netmos_init(struct pci_dev *dev)
760{
761
762 unsigned int num_serial = dev->subsystem_device & 0xf;
763
764 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
765 dev->subsystem_device == 0x0299)
766 return 0;
767
768 if (num_serial == 0)
769 return -ENODEV;
770 return num_serial;
771}
772
773
774
775
776
777
778
779
780
781
782
783
784#define ITE_887x_MISCR 0x9c
785#define ITE_887x_INTCBAR 0x78
786#define ITE_887x_UARTBAR 0x7c
787#define ITE_887x_PS0BAR 0x10
788#define ITE_887x_POSIO0 0x60
789
790
791#define ITE_887x_IOSIZE 32
792
793#define ITE_887x_POSIO_IOSIZE_8 (3 << 24)
794
795#define ITE_887x_POSIO_IOSIZE_32 (5 << 24)
796
797#define ITE_887x_POSIO_SPEED (3 << 29)
798
799#define ITE_887x_POSIO_ENABLE (1 << 31)
800
801static int pci_ite887x_init(struct pci_dev *dev)
802{
803
804 static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0,
805 0x200, 0x280, 0 };
806 int ret, i, type;
807 struct resource *iobase = NULL;
808 u32 miscr, uartbar, ioport;
809
810
811 i = 0;
812 while (inta_addr[i] && iobase == NULL) {
813 iobase = request_region(inta_addr[i], ITE_887x_IOSIZE,
814 "ite887x");
815 if (iobase != NULL) {
816
817 pci_write_config_dword(dev, ITE_887x_POSIO0,
818 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
819 ITE_887x_POSIO_IOSIZE_32 | inta_addr[i]);
820
821 pci_write_config_dword(dev, ITE_887x_INTCBAR,
822 inta_addr[i]);
823 ret = inb(inta_addr[i]);
824 if (ret != 0xff) {
825
826 break;
827 }
828 release_region(iobase->start, ITE_887x_IOSIZE);
829 iobase = NULL;
830 }
831 i++;
832 }
833
834 if (!inta_addr[i]) {
835 printk(KERN_ERR "ite887x: could not find iobase\n");
836 return -ENODEV;
837 }
838
839
840 type = inb(iobase->start + 0x18) & 0x0f;
841
842 switch (type) {
843 case 0x2:
844 case 0xa:
845 ret = 0;
846 break;
847 case 0xe:
848 ret = 2;
849 break;
850 case 0x6:
851 ret = 1;
852 break;
853 case 0x8:
854 ret = 2;
855 break;
856 default:
857 moan_device("Unknown ITE887x", dev);
858 ret = -ENODEV;
859 }
860
861
862 for (i = 0; i < ret; i++) {
863
864 pci_read_config_dword(dev, ITE_887x_PS0BAR + (0x4 * (i + 1)),
865 &ioport);
866 ioport &= 0x0000FF00;
867 pci_write_config_dword(dev, ITE_887x_POSIO0 + (0x4 * (i + 1)),
868 ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
869 ITE_887x_POSIO_IOSIZE_8 | ioport);
870
871
872 pci_read_config_dword(dev, ITE_887x_UARTBAR, &uartbar);
873 uartbar &= ~(0xffff << (16 * i));
874 uartbar |= (ioport << (16 * i));
875 pci_write_config_dword(dev, ITE_887x_UARTBAR, uartbar);
876
877
878 pci_read_config_dword(dev, ITE_887x_MISCR, &miscr);
879
880 miscr &= ~(0xf << (12 - 4 * i));
881
882 miscr |= 1 << (23 - i);
883
884 pci_write_config_dword(dev, ITE_887x_MISCR, miscr);
885 }
886
887 if (ret <= 0) {
888
889 release_region(iobase->start, ITE_887x_IOSIZE);
890 }
891
892 return ret;
893}
894
895static void __devexit pci_ite887x_exit(struct pci_dev *dev)
896{
897 u32 ioport;
898
899 pci_read_config_dword(dev, ITE_887x_POSIO0, &ioport);
900 ioport &= 0xffff;
901 release_region(ioport, ITE_887x_IOSIZE);
902}
903
904
905
906
907
908
909static int pci_oxsemi_tornado_init(struct pci_dev *dev)
910{
911 u8 __iomem *p;
912 unsigned long deviceID;
913 unsigned int number_uarts = 0;
914
915
916 if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
917 (dev->device & 0xF000) != 0xC000)
918 return 0;
919
920 p = pci_iomap(dev, 0, 5);
921 if (p == NULL)
922 return -ENOMEM;
923
924 deviceID = ioread32(p);
925
926 if (deviceID == 0x07000200) {
927 number_uarts = ioread8(p + 4);
928 printk(KERN_DEBUG
929 "%d ports detected on Oxford PCI Express device\n",
930 number_uarts);
931 }
932 pci_iounmap(dev, p);
933 return number_uarts;
934}
935
936static int
937pci_default_setup(struct serial_private *priv,
938 const struct pciserial_board *board,
939 struct uart_port *port, int idx)
940{
941 unsigned int bar, offset = board->first_offset, maxnr;
942
943 bar = FL_GET_BASE(board->flags);
944 if (board->flags & FL_BASE_BARS)
945 bar += idx;
946 else
947 offset += idx * board->uart_offset;
948
949 maxnr = (pci_resource_len(priv->dev, bar) - board->first_offset) >>
950 (board->reg_shift + 3);
951
952 if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr)
953 return 1;
954
955 return setup_port(priv, port, bar, offset, board->reg_shift);
956}
957
958static int skip_tx_en_setup(struct serial_private *priv,
959 const struct pciserial_board *board,
960 struct uart_port *port, int idx)
961{
962 port->flags |= UPF_NO_TXEN_TEST;
963 printk(KERN_DEBUG "serial8250: skipping TxEn test for device "
964 "[%04x:%04x] subsystem [%04x:%04x]\n",
965 priv->dev->vendor,
966 priv->dev->device,
967 priv->dev->subsystem_vendor,
968 priv->dev->subsystem_device);
969
970 return pci_default_setup(priv, board, port, idx);
971}
972
973
974#define PCI_VENDOR_ID_SBSMODULARIO 0x124B
975#define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B
976#define PCI_DEVICE_ID_OCTPRO 0x0001
977#define PCI_SUBDEVICE_ID_OCTPRO232 0x0108
978#define PCI_SUBDEVICE_ID_OCTPRO422 0x0208
979#define PCI_SUBDEVICE_ID_POCTAL232 0x0308
980#define PCI_SUBDEVICE_ID_POCTAL422 0x0408
981#define PCI_VENDOR_ID_ADVANTECH 0x13fe
982#define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
983
984
985#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
986
987
988
989
990
991
992
993
994
995static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
996
997
998
999 {
1000 .vendor = PCI_VENDOR_ID_ADDIDATA_OLD,
1001 .device = PCI_DEVICE_ID_ADDIDATA_APCI7800,
1002 .subvendor = PCI_ANY_ID,
1003 .subdevice = PCI_ANY_ID,
1004 .setup = addidata_apci7800_setup,
1005 },
1006
1007
1008
1009
1010 {
1011 .vendor = PCI_VENDOR_ID_AFAVLAB,
1012 .device = PCI_ANY_ID,
1013 .subvendor = PCI_ANY_ID,
1014 .subdevice = PCI_ANY_ID,
1015 .setup = afavlab_setup,
1016 },
1017
1018
1019
1020 {
1021 .vendor = PCI_VENDOR_ID_HP,
1022 .device = PCI_DEVICE_ID_HP_DIVA,
1023 .subvendor = PCI_ANY_ID,
1024 .subdevice = PCI_ANY_ID,
1025 .init = pci_hp_diva_init,
1026 .setup = pci_hp_diva_setup,
1027 },
1028
1029
1030
1031 {
1032 .vendor = PCI_VENDOR_ID_INTEL,
1033 .device = PCI_DEVICE_ID_INTEL_80960_RP,
1034 .subvendor = 0xe4bf,
1035 .subdevice = PCI_ANY_ID,
1036 .init = pci_inteli960ni_init,
1037 .setup = pci_default_setup,
1038 },
1039 {
1040 .vendor = PCI_VENDOR_ID_INTEL,
1041 .device = PCI_DEVICE_ID_INTEL_8257X_SOL,
1042 .subvendor = PCI_ANY_ID,
1043 .subdevice = PCI_ANY_ID,
1044 .setup = skip_tx_en_setup,
1045 },
1046 {
1047 .vendor = PCI_VENDOR_ID_INTEL,
1048 .device = PCI_DEVICE_ID_INTEL_82573L_SOL,
1049 .subvendor = PCI_ANY_ID,
1050 .subdevice = PCI_ANY_ID,
1051 .setup = skip_tx_en_setup,
1052 },
1053 {
1054 .vendor = PCI_VENDOR_ID_INTEL,
1055 .device = PCI_DEVICE_ID_INTEL_82573E_SOL,
1056 .subvendor = PCI_ANY_ID,
1057 .subdevice = PCI_ANY_ID,
1058 .setup = skip_tx_en_setup,
1059 },
1060
1061
1062
1063 {
1064 .vendor = PCI_VENDOR_ID_ITE,
1065 .device = PCI_DEVICE_ID_ITE_8872,
1066 .subvendor = PCI_ANY_ID,
1067 .subdevice = PCI_ANY_ID,
1068 .init = pci_ite887x_init,
1069 .setup = pci_default_setup,
1070 .exit = __devexit_p(pci_ite887x_exit),
1071 },
1072
1073
1074
1075 {
1076 .vendor = PCI_VENDOR_ID_NI,
1077 .device = PCI_DEVICE_ID_NI_PCI23216,
1078 .subvendor = PCI_ANY_ID,
1079 .subdevice = PCI_ANY_ID,
1080 .init = pci_ni8420_init,
1081 .setup = pci_default_setup,
1082 .exit = __devexit_p(pci_ni8420_exit),
1083 },
1084 {
1085 .vendor = PCI_VENDOR_ID_NI,
1086 .device = PCI_DEVICE_ID_NI_PCI2328,
1087 .subvendor = PCI_ANY_ID,
1088 .subdevice = PCI_ANY_ID,
1089 .init = pci_ni8420_init,
1090 .setup = pci_default_setup,
1091 .exit = __devexit_p(pci_ni8420_exit),
1092 },
1093 {
1094 .vendor = PCI_VENDOR_ID_NI,
1095 .device = PCI_DEVICE_ID_NI_PCI2324,
1096 .subvendor = PCI_ANY_ID,
1097 .subdevice = PCI_ANY_ID,
1098 .init = pci_ni8420_init,
1099 .setup = pci_default_setup,
1100 .exit = __devexit_p(pci_ni8420_exit),
1101 },
1102 {
1103 .vendor = PCI_VENDOR_ID_NI,
1104 .device = PCI_DEVICE_ID_NI_PCI2322,
1105 .subvendor = PCI_ANY_ID,
1106 .subdevice = PCI_ANY_ID,
1107 .init = pci_ni8420_init,
1108 .setup = pci_default_setup,
1109 .exit = __devexit_p(pci_ni8420_exit),
1110 },
1111 {
1112 .vendor = PCI_VENDOR_ID_NI,
1113 .device = PCI_DEVICE_ID_NI_PCI2324I,
1114 .subvendor = PCI_ANY_ID,
1115 .subdevice = PCI_ANY_ID,
1116 .init = pci_ni8420_init,
1117 .setup = pci_default_setup,
1118 .exit = __devexit_p(pci_ni8420_exit),
1119 },
1120 {
1121 .vendor = PCI_VENDOR_ID_NI,
1122 .device = PCI_DEVICE_ID_NI_PCI2322I,
1123 .subvendor = PCI_ANY_ID,
1124 .subdevice = PCI_ANY_ID,
1125 .init = pci_ni8420_init,
1126 .setup = pci_default_setup,
1127 .exit = __devexit_p(pci_ni8420_exit),
1128 },
1129 {
1130 .vendor = PCI_VENDOR_ID_NI,
1131 .device = PCI_DEVICE_ID_NI_PXI8420_23216,
1132 .subvendor = PCI_ANY_ID,
1133 .subdevice = PCI_ANY_ID,
1134 .init = pci_ni8420_init,
1135 .setup = pci_default_setup,
1136 .exit = __devexit_p(pci_ni8420_exit),
1137 },
1138 {
1139 .vendor = PCI_VENDOR_ID_NI,
1140 .device = PCI_DEVICE_ID_NI_PXI8420_2328,
1141 .subvendor = PCI_ANY_ID,
1142 .subdevice = PCI_ANY_ID,
1143 .init = pci_ni8420_init,
1144 .setup = pci_default_setup,
1145 .exit = __devexit_p(pci_ni8420_exit),
1146 },
1147 {
1148 .vendor = PCI_VENDOR_ID_NI,
1149 .device = PCI_DEVICE_ID_NI_PXI8420_2324,
1150 .subvendor = PCI_ANY_ID,
1151 .subdevice = PCI_ANY_ID,
1152 .init = pci_ni8420_init,
1153 .setup = pci_default_setup,
1154 .exit = __devexit_p(pci_ni8420_exit),
1155 },
1156 {
1157 .vendor = PCI_VENDOR_ID_NI,
1158 .device = PCI_DEVICE_ID_NI_PXI8420_2322,
1159 .subvendor = PCI_ANY_ID,
1160 .subdevice = PCI_ANY_ID,
1161 .init = pci_ni8420_init,
1162 .setup = pci_default_setup,
1163 .exit = __devexit_p(pci_ni8420_exit),
1164 },
1165 {
1166 .vendor = PCI_VENDOR_ID_NI,
1167 .device = PCI_DEVICE_ID_NI_PXI8422_2324,
1168 .subvendor = PCI_ANY_ID,
1169 .subdevice = PCI_ANY_ID,
1170 .init = pci_ni8420_init,
1171 .setup = pci_default_setup,
1172 .exit = __devexit_p(pci_ni8420_exit),
1173 },
1174 {
1175 .vendor = PCI_VENDOR_ID_NI,
1176 .device = PCI_DEVICE_ID_NI_PXI8422_2322,
1177 .subvendor = PCI_ANY_ID,
1178 .subdevice = PCI_ANY_ID,
1179 .init = pci_ni8420_init,
1180 .setup = pci_default_setup,
1181 .exit = __devexit_p(pci_ni8420_exit),
1182 },
1183 {
1184 .vendor = PCI_VENDOR_ID_NI,
1185 .device = PCI_ANY_ID,
1186 .subvendor = PCI_ANY_ID,
1187 .subdevice = PCI_ANY_ID,
1188 .init = pci_ni8430_init,
1189 .setup = pci_ni8430_setup,
1190 .exit = __devexit_p(pci_ni8430_exit),
1191 },
1192
1193
1194
1195 {
1196 .vendor = PCI_VENDOR_ID_PANACOM,
1197 .device = PCI_DEVICE_ID_PANACOM_QUADMODEM,
1198 .subvendor = PCI_ANY_ID,
1199 .subdevice = PCI_ANY_ID,
1200 .init = pci_plx9050_init,
1201 .setup = pci_default_setup,
1202 .exit = __devexit_p(pci_plx9050_exit),
1203 },
1204 {
1205 .vendor = PCI_VENDOR_ID_PANACOM,
1206 .device = PCI_DEVICE_ID_PANACOM_DUALMODEM,
1207 .subvendor = PCI_ANY_ID,
1208 .subdevice = PCI_ANY_ID,
1209 .init = pci_plx9050_init,
1210 .setup = pci_default_setup,
1211 .exit = __devexit_p(pci_plx9050_exit),
1212 },
1213
1214
1215
1216 {
1217 .vendor = PCI_VENDOR_ID_PLX,
1218 .device = PCI_DEVICE_ID_PLX_9030,
1219 .subvendor = PCI_SUBVENDOR_ID_PERLE,
1220 .subdevice = PCI_ANY_ID,
1221 .setup = pci_default_setup,
1222 },
1223 {
1224 .vendor = PCI_VENDOR_ID_PLX,
1225 .device = PCI_DEVICE_ID_PLX_9050,
1226 .subvendor = PCI_SUBVENDOR_ID_EXSYS,
1227 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
1228 .init = pci_plx9050_init,
1229 .setup = pci_default_setup,
1230 .exit = __devexit_p(pci_plx9050_exit),
1231 },
1232 {
1233 .vendor = PCI_VENDOR_ID_PLX,
1234 .device = PCI_DEVICE_ID_PLX_9050,
1235 .subvendor = PCI_SUBVENDOR_ID_KEYSPAN,
1236 .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2,
1237 .init = pci_plx9050_init,
1238 .setup = pci_default_setup,
1239 .exit = __devexit_p(pci_plx9050_exit),
1240 },
1241 {
1242 .vendor = PCI_VENDOR_ID_PLX,
1243 .device = PCI_DEVICE_ID_PLX_9050,
1244 .subvendor = PCI_VENDOR_ID_PLX,
1245 .subdevice = PCI_SUBDEVICE_ID_UNKNOWN_0x1584,
1246 .init = pci_plx9050_init,
1247 .setup = pci_default_setup,
1248 .exit = __devexit_p(pci_plx9050_exit),
1249 },
1250 {
1251 .vendor = PCI_VENDOR_ID_PLX,
1252 .device = PCI_DEVICE_ID_PLX_ROMULUS,
1253 .subvendor = PCI_VENDOR_ID_PLX,
1254 .subdevice = PCI_DEVICE_ID_PLX_ROMULUS,
1255 .init = pci_plx9050_init,
1256 .setup = pci_default_setup,
1257 .exit = __devexit_p(pci_plx9050_exit),
1258 },
1259
1260
1261
1262 {
1263 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1264 .device = PCI_DEVICE_ID_OCTPRO,
1265 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1266 .subdevice = PCI_SUBDEVICE_ID_OCTPRO232,
1267 .init = sbs_init,
1268 .setup = sbs_setup,
1269 .exit = __devexit_p(sbs_exit),
1270 },
1271
1272
1273
1274 {
1275 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1276 .device = PCI_DEVICE_ID_OCTPRO,
1277 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1278 .subdevice = PCI_SUBDEVICE_ID_OCTPRO422,
1279 .init = sbs_init,
1280 .setup = sbs_setup,
1281 .exit = __devexit_p(sbs_exit),
1282 },
1283
1284
1285
1286 {
1287 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1288 .device = PCI_DEVICE_ID_OCTPRO,
1289 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1290 .subdevice = PCI_SUBDEVICE_ID_POCTAL232,
1291 .init = sbs_init,
1292 .setup = sbs_setup,
1293 .exit = __devexit_p(sbs_exit),
1294 },
1295
1296
1297
1298 {
1299 .vendor = PCI_VENDOR_ID_SBSMODULARIO,
1300 .device = PCI_DEVICE_ID_OCTPRO,
1301 .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO,
1302 .subdevice = PCI_SUBDEVICE_ID_POCTAL422,
1303 .init = sbs_init,
1304 .setup = sbs_setup,
1305 .exit = __devexit_p(sbs_exit),
1306 },
1307
1308
1309
1310 {
1311 .vendor = PCI_VENDOR_ID_SIIG,
1312 .device = PCI_ANY_ID,
1313 .subvendor = PCI_ANY_ID,
1314 .subdevice = PCI_ANY_ID,
1315 .init = pci_siig_init,
1316 .setup = pci_siig_setup,
1317 },
1318
1319
1320
1321 {
1322 .vendor = PCI_VENDOR_ID_TITAN,
1323 .device = PCI_DEVICE_ID_TITAN_400L,
1324 .subvendor = PCI_ANY_ID,
1325 .subdevice = PCI_ANY_ID,
1326 .setup = titan_400l_800l_setup,
1327 },
1328 {
1329 .vendor = PCI_VENDOR_ID_TITAN,
1330 .device = PCI_DEVICE_ID_TITAN_800L,
1331 .subvendor = PCI_ANY_ID,
1332 .subdevice = PCI_ANY_ID,
1333 .setup = titan_400l_800l_setup,
1334 },
1335
1336
1337
1338 {
1339 .vendor = PCI_VENDOR_ID_TIMEDIA,
1340 .device = PCI_DEVICE_ID_TIMEDIA_1889,
1341 .subvendor = PCI_VENDOR_ID_TIMEDIA,
1342 .subdevice = PCI_ANY_ID,
1343 .init = pci_timedia_init,
1344 .setup = pci_timedia_setup,
1345 },
1346 {
1347 .vendor = PCI_VENDOR_ID_TIMEDIA,
1348 .device = PCI_ANY_ID,
1349 .subvendor = PCI_ANY_ID,
1350 .subdevice = PCI_ANY_ID,
1351 .setup = pci_timedia_setup,
1352 },
1353
1354
1355
1356 {
1357 .vendor = PCI_VENDOR_ID_XIRCOM,
1358 .device = PCI_DEVICE_ID_XIRCOM_X3201_MDM,
1359 .subvendor = PCI_ANY_ID,
1360 .subdevice = PCI_ANY_ID,
1361 .init = pci_xircom_init,
1362 .setup = pci_default_setup,
1363 },
1364
1365
1366
1367 {
1368 .vendor = PCI_VENDOR_ID_NETMOS,
1369 .device = PCI_ANY_ID,
1370 .subvendor = PCI_ANY_ID,
1371 .subdevice = PCI_ANY_ID,
1372 .init = pci_netmos_init,
1373 .setup = pci_default_setup,
1374 },
1375
1376
1377
1378 {
1379 .vendor = PCI_VENDOR_ID_OXSEMI,
1380 .device = PCI_ANY_ID,
1381 .subvendor = PCI_ANY_ID,
1382 .subdevice = PCI_ANY_ID,
1383 .init = pci_oxsemi_tornado_init,
1384 .setup = pci_default_setup,
1385 },
1386 {
1387 .vendor = PCI_VENDOR_ID_MAINPINE,
1388 .device = PCI_ANY_ID,
1389 .subvendor = PCI_ANY_ID,
1390 .subdevice = PCI_ANY_ID,
1391 .init = pci_oxsemi_tornado_init,
1392 .setup = pci_default_setup,
1393 },
1394
1395
1396
1397 {
1398 .vendor = PCI_ANY_ID,
1399 .device = PCI_ANY_ID,
1400 .subvendor = PCI_ANY_ID,
1401 .subdevice = PCI_ANY_ID,
1402 .setup = pci_default_setup,
1403 }
1404};
1405
1406static inline int quirk_id_matches(u32 quirk_id, u32 dev_id)
1407{
1408 return quirk_id == PCI_ANY_ID || quirk_id == dev_id;
1409}
1410
1411static struct pci_serial_quirk *find_quirk(struct pci_dev *dev)
1412{
1413 struct pci_serial_quirk *quirk;
1414
1415 for (quirk = pci_serial_quirks; ; quirk++)
1416 if (quirk_id_matches(quirk->vendor, dev->vendor) &&
1417 quirk_id_matches(quirk->device, dev->device) &&
1418 quirk_id_matches(quirk->subvendor, dev->subsystem_vendor) &&
1419 quirk_id_matches(quirk->subdevice, dev->subsystem_device))
1420 break;
1421 return quirk;
1422}
1423
1424static inline int get_pci_irq(struct pci_dev *dev,
1425 const struct pciserial_board *board)
1426{
1427 if (board->flags & FL_NOIRQ)
1428 return 0;
1429 else
1430 return dev->irq;
1431}
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453enum pci_board_num_t {
1454 pbn_default = 0,
1455
1456 pbn_b0_1_115200,
1457 pbn_b0_2_115200,
1458 pbn_b0_4_115200,
1459 pbn_b0_5_115200,
1460 pbn_b0_8_115200,
1461
1462 pbn_b0_1_921600,
1463 pbn_b0_2_921600,
1464 pbn_b0_4_921600,
1465
1466 pbn_b0_2_1130000,
1467
1468 pbn_b0_4_1152000,
1469
1470 pbn_b0_2_1843200,
1471 pbn_b0_4_1843200,
1472
1473 pbn_b0_2_1843200_200,
1474 pbn_b0_4_1843200_200,
1475 pbn_b0_8_1843200_200,
1476
1477 pbn_b0_1_4000000,
1478
1479 pbn_b0_bt_1_115200,
1480 pbn_b0_bt_2_115200,
1481 pbn_b0_bt_8_115200,
1482
1483 pbn_b0_bt_1_460800,
1484 pbn_b0_bt_2_460800,
1485 pbn_b0_bt_4_460800,
1486
1487 pbn_b0_bt_1_921600,
1488 pbn_b0_bt_2_921600,
1489 pbn_b0_bt_4_921600,
1490 pbn_b0_bt_8_921600,
1491
1492 pbn_b1_1_115200,
1493 pbn_b1_2_115200,
1494 pbn_b1_4_115200,
1495 pbn_b1_8_115200,
1496 pbn_b1_16_115200,
1497
1498 pbn_b1_1_921600,
1499 pbn_b1_2_921600,
1500 pbn_b1_4_921600,
1501 pbn_b1_8_921600,
1502
1503 pbn_b1_2_1250000,
1504
1505 pbn_b1_bt_1_115200,
1506 pbn_b1_bt_2_115200,
1507 pbn_b1_bt_4_115200,
1508
1509 pbn_b1_bt_2_921600,
1510
1511 pbn_b1_1_1382400,
1512 pbn_b1_2_1382400,
1513 pbn_b1_4_1382400,
1514 pbn_b1_8_1382400,
1515
1516 pbn_b2_1_115200,
1517 pbn_b2_2_115200,
1518 pbn_b2_4_115200,
1519 pbn_b2_8_115200,
1520
1521 pbn_b2_1_460800,
1522 pbn_b2_4_460800,
1523 pbn_b2_8_460800,
1524 pbn_b2_16_460800,
1525
1526 pbn_b2_1_921600,
1527 pbn_b2_4_921600,
1528 pbn_b2_8_921600,
1529
1530 pbn_b2_bt_1_115200,
1531 pbn_b2_bt_2_115200,
1532 pbn_b2_bt_4_115200,
1533
1534 pbn_b2_bt_2_921600,
1535 pbn_b2_bt_4_921600,
1536
1537 pbn_b3_2_115200,
1538 pbn_b3_4_115200,
1539 pbn_b3_8_115200,
1540
1541
1542
1543
1544 pbn_panacom,
1545 pbn_panacom2,
1546 pbn_panacom4,
1547 pbn_exsys_4055,
1548 pbn_plx_romulus,
1549 pbn_oxsemi,
1550 pbn_oxsemi_1_4000000,
1551 pbn_oxsemi_2_4000000,
1552 pbn_oxsemi_4_4000000,
1553 pbn_oxsemi_8_4000000,
1554 pbn_intel_i960,
1555 pbn_sgi_ioc3,
1556 pbn_computone_4,
1557 pbn_computone_6,
1558 pbn_computone_8,
1559 pbn_sbsxrsio,
1560 pbn_exar_XR17C152,
1561 pbn_exar_XR17C154,
1562 pbn_exar_XR17C158,
1563 pbn_pasemi_1682M,
1564 pbn_ni8430_2,
1565 pbn_ni8430_4,
1566 pbn_ni8430_8,
1567 pbn_ni8430_16,
1568};
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580static struct pciserial_board pci_boards[] __devinitdata = {
1581 [pbn_default] = {
1582 .flags = FL_BASE0,
1583 .num_ports = 1,
1584 .base_baud = 115200,
1585 .uart_offset = 8,
1586 },
1587 [pbn_b0_1_115200] = {
1588 .flags = FL_BASE0,
1589 .num_ports = 1,
1590 .base_baud = 115200,
1591 .uart_offset = 8,
1592 },
1593 [pbn_b0_2_115200] = {
1594 .flags = FL_BASE0,
1595 .num_ports = 2,
1596 .base_baud = 115200,
1597 .uart_offset = 8,
1598 },
1599 [pbn_b0_4_115200] = {
1600 .flags = FL_BASE0,
1601 .num_ports = 4,
1602 .base_baud = 115200,
1603 .uart_offset = 8,
1604 },
1605 [pbn_b0_5_115200] = {
1606 .flags = FL_BASE0,
1607 .num_ports = 5,
1608 .base_baud = 115200,
1609 .uart_offset = 8,
1610 },
1611 [pbn_b0_8_115200] = {
1612 .flags = FL_BASE0,
1613 .num_ports = 8,
1614 .base_baud = 115200,
1615 .uart_offset = 8,
1616 },
1617 [pbn_b0_1_921600] = {
1618 .flags = FL_BASE0,
1619 .num_ports = 1,
1620 .base_baud = 921600,
1621 .uart_offset = 8,
1622 },
1623 [pbn_b0_2_921600] = {
1624 .flags = FL_BASE0,
1625 .num_ports = 2,
1626 .base_baud = 921600,
1627 .uart_offset = 8,
1628 },
1629 [pbn_b0_4_921600] = {
1630 .flags = FL_BASE0,
1631 .num_ports = 4,
1632 .base_baud = 921600,
1633 .uart_offset = 8,
1634 },
1635
1636 [pbn_b0_2_1130000] = {
1637 .flags = FL_BASE0,
1638 .num_ports = 2,
1639 .base_baud = 1130000,
1640 .uart_offset = 8,
1641 },
1642
1643 [pbn_b0_4_1152000] = {
1644 .flags = FL_BASE0,
1645 .num_ports = 4,
1646 .base_baud = 1152000,
1647 .uart_offset = 8,
1648 },
1649
1650 [pbn_b0_2_1843200] = {
1651 .flags = FL_BASE0,
1652 .num_ports = 2,
1653 .base_baud = 1843200,
1654 .uart_offset = 8,
1655 },
1656 [pbn_b0_4_1843200] = {
1657 .flags = FL_BASE0,
1658 .num_ports = 4,
1659 .base_baud = 1843200,
1660 .uart_offset = 8,
1661 },
1662
1663 [pbn_b0_2_1843200_200] = {
1664 .flags = FL_BASE0,
1665 .num_ports = 2,
1666 .base_baud = 1843200,
1667 .uart_offset = 0x200,
1668 },
1669 [pbn_b0_4_1843200_200] = {
1670 .flags = FL_BASE0,
1671 .num_ports = 4,
1672 .base_baud = 1843200,
1673 .uart_offset = 0x200,
1674 },
1675 [pbn_b0_8_1843200_200] = {
1676 .flags = FL_BASE0,
1677 .num_ports = 8,
1678 .base_baud = 1843200,
1679 .uart_offset = 0x200,
1680 },
1681 [pbn_b0_1_4000000] = {
1682 .flags = FL_BASE0,
1683 .num_ports = 1,
1684 .base_baud = 4000000,
1685 .uart_offset = 8,
1686 },
1687
1688 [pbn_b0_bt_1_115200] = {
1689 .flags = FL_BASE0|FL_BASE_BARS,
1690 .num_ports = 1,
1691 .base_baud = 115200,
1692 .uart_offset = 8,
1693 },
1694 [pbn_b0_bt_2_115200] = {
1695 .flags = FL_BASE0|FL_BASE_BARS,
1696 .num_ports = 2,
1697 .base_baud = 115200,
1698 .uart_offset = 8,
1699 },
1700 [pbn_b0_bt_8_115200] = {
1701 .flags = FL_BASE0|FL_BASE_BARS,
1702 .num_ports = 8,
1703 .base_baud = 115200,
1704 .uart_offset = 8,
1705 },
1706
1707 [pbn_b0_bt_1_460800] = {
1708 .flags = FL_BASE0|FL_BASE_BARS,
1709 .num_ports = 1,
1710 .base_baud = 460800,
1711 .uart_offset = 8,
1712 },
1713 [pbn_b0_bt_2_460800] = {
1714 .flags = FL_BASE0|FL_BASE_BARS,
1715 .num_ports = 2,
1716 .base_baud = 460800,
1717 .uart_offset = 8,
1718 },
1719 [pbn_b0_bt_4_460800] = {
1720 .flags = FL_BASE0|FL_BASE_BARS,
1721 .num_ports = 4,
1722 .base_baud = 460800,
1723 .uart_offset = 8,
1724 },
1725
1726 [pbn_b0_bt_1_921600] = {
1727 .flags = FL_BASE0|FL_BASE_BARS,
1728 .num_ports = 1,
1729 .base_baud = 921600,
1730 .uart_offset = 8,
1731 },
1732 [pbn_b0_bt_2_921600] = {
1733 .flags = FL_BASE0|FL_BASE_BARS,
1734 .num_ports = 2,
1735 .base_baud = 921600,
1736 .uart_offset = 8,
1737 },
1738 [pbn_b0_bt_4_921600] = {
1739 .flags = FL_BASE0|FL_BASE_BARS,
1740 .num_ports = 4,
1741 .base_baud = 921600,
1742 .uart_offset = 8,
1743 },
1744 [pbn_b0_bt_8_921600] = {
1745 .flags = FL_BASE0|FL_BASE_BARS,
1746 .num_ports = 8,
1747 .base_baud = 921600,
1748 .uart_offset = 8,
1749 },
1750
1751 [pbn_b1_1_115200] = {
1752 .flags = FL_BASE1,
1753 .num_ports = 1,
1754 .base_baud = 115200,
1755 .uart_offset = 8,
1756 },
1757 [pbn_b1_2_115200] = {
1758 .flags = FL_BASE1,
1759 .num_ports = 2,
1760 .base_baud = 115200,
1761 .uart_offset = 8,
1762 },
1763 [pbn_b1_4_115200] = {
1764 .flags = FL_BASE1,
1765 .num_ports = 4,
1766 .base_baud = 115200,
1767 .uart_offset = 8,
1768 },
1769 [pbn_b1_8_115200] = {
1770 .flags = FL_BASE1,
1771 .num_ports = 8,
1772 .base_baud = 115200,
1773 .uart_offset = 8,
1774 },
1775 [pbn_b1_16_115200] = {
1776 .flags = FL_BASE1,
1777 .num_ports = 16,
1778 .base_baud = 115200,
1779 .uart_offset = 8,
1780 },
1781
1782 [pbn_b1_1_921600] = {
1783 .flags = FL_BASE1,
1784 .num_ports = 1,
1785 .base_baud = 921600,
1786 .uart_offset = 8,
1787 },
1788 [pbn_b1_2_921600] = {
1789 .flags = FL_BASE1,
1790 .num_ports = 2,
1791 .base_baud = 921600,
1792 .uart_offset = 8,
1793 },
1794 [pbn_b1_4_921600] = {
1795 .flags = FL_BASE1,
1796 .num_ports = 4,
1797 .base_baud = 921600,
1798 .uart_offset = 8,
1799 },
1800 [pbn_b1_8_921600] = {
1801 .flags = FL_BASE1,
1802 .num_ports = 8,
1803 .base_baud = 921600,
1804 .uart_offset = 8,
1805 },
1806 [pbn_b1_2_1250000] = {
1807 .flags = FL_BASE1,
1808 .num_ports = 2,
1809 .base_baud = 1250000,
1810 .uart_offset = 8,
1811 },
1812
1813 [pbn_b1_bt_1_115200] = {
1814 .flags = FL_BASE1|FL_BASE_BARS,
1815 .num_ports = 1,
1816 .base_baud = 115200,
1817 .uart_offset = 8,
1818 },
1819 [pbn_b1_bt_2_115200] = {
1820 .flags = FL_BASE1|FL_BASE_BARS,
1821 .num_ports = 2,
1822 .base_baud = 115200,
1823 .uart_offset = 8,
1824 },
1825 [pbn_b1_bt_4_115200] = {
1826 .flags = FL_BASE1|FL_BASE_BARS,
1827 .num_ports = 4,
1828 .base_baud = 115200,
1829 .uart_offset = 8,
1830 },
1831
1832 [pbn_b1_bt_2_921600] = {
1833 .flags = FL_BASE1|FL_BASE_BARS,
1834 .num_ports = 2,
1835 .base_baud = 921600,
1836 .uart_offset = 8,
1837 },
1838
1839 [pbn_b1_1_1382400] = {
1840 .flags = FL_BASE1,
1841 .num_ports = 1,
1842 .base_baud = 1382400,
1843 .uart_offset = 8,
1844 },
1845 [pbn_b1_2_1382400] = {
1846 .flags = FL_BASE1,
1847 .num_ports = 2,
1848 .base_baud = 1382400,
1849 .uart_offset = 8,
1850 },
1851 [pbn_b1_4_1382400] = {
1852 .flags = FL_BASE1,
1853 .num_ports = 4,
1854 .base_baud = 1382400,
1855 .uart_offset = 8,
1856 },
1857 [pbn_b1_8_1382400] = {
1858 .flags = FL_BASE1,
1859 .num_ports = 8,
1860 .base_baud = 1382400,
1861 .uart_offset = 8,
1862 },
1863
1864 [pbn_b2_1_115200] = {
1865 .flags = FL_BASE2,
1866 .num_ports = 1,
1867 .base_baud = 115200,
1868 .uart_offset = 8,
1869 },
1870 [pbn_b2_2_115200] = {
1871 .flags = FL_BASE2,
1872 .num_ports = 2,
1873 .base_baud = 115200,
1874 .uart_offset = 8,
1875 },
1876 [pbn_b2_4_115200] = {
1877 .flags = FL_BASE2,
1878 .num_ports = 4,
1879 .base_baud = 115200,
1880 .uart_offset = 8,
1881 },
1882 [pbn_b2_8_115200] = {
1883 .flags = FL_BASE2,
1884 .num_ports = 8,
1885 .base_baud = 115200,
1886 .uart_offset = 8,
1887 },
1888
1889 [pbn_b2_1_460800] = {
1890 .flags = FL_BASE2,
1891 .num_ports = 1,
1892 .base_baud = 460800,
1893 .uart_offset = 8,
1894 },
1895 [pbn_b2_4_460800] = {
1896 .flags = FL_BASE2,
1897 .num_ports = 4,
1898 .base_baud = 460800,
1899 .uart_offset = 8,
1900 },
1901 [pbn_b2_8_460800] = {
1902 .flags = FL_BASE2,
1903 .num_ports = 8,
1904 .base_baud = 460800,
1905 .uart_offset = 8,
1906 },
1907 [pbn_b2_16_460800] = {
1908 .flags = FL_BASE2,
1909 .num_ports = 16,
1910 .base_baud = 460800,
1911 .uart_offset = 8,
1912 },
1913
1914 [pbn_b2_1_921600] = {
1915 .flags = FL_BASE2,
1916 .num_ports = 1,
1917 .base_baud = 921600,
1918 .uart_offset = 8,
1919 },
1920 [pbn_b2_4_921600] = {
1921 .flags = FL_BASE2,
1922 .num_ports = 4,
1923 .base_baud = 921600,
1924 .uart_offset = 8,
1925 },
1926 [pbn_b2_8_921600] = {
1927 .flags = FL_BASE2,
1928 .num_ports = 8,
1929 .base_baud = 921600,
1930 .uart_offset = 8,
1931 },
1932
1933 [pbn_b2_bt_1_115200] = {
1934 .flags = FL_BASE2|FL_BASE_BARS,
1935 .num_ports = 1,
1936 .base_baud = 115200,
1937 .uart_offset = 8,
1938 },
1939 [pbn_b2_bt_2_115200] = {
1940 .flags = FL_BASE2|FL_BASE_BARS,
1941 .num_ports = 2,
1942 .base_baud = 115200,
1943 .uart_offset = 8,
1944 },
1945 [pbn_b2_bt_4_115200] = {
1946 .flags = FL_BASE2|FL_BASE_BARS,
1947 .num_ports = 4,
1948 .base_baud = 115200,
1949 .uart_offset = 8,
1950 },
1951
1952 [pbn_b2_bt_2_921600] = {
1953 .flags = FL_BASE2|FL_BASE_BARS,
1954 .num_ports = 2,
1955 .base_baud = 921600,
1956 .uart_offset = 8,
1957 },
1958 [pbn_b2_bt_4_921600] = {
1959 .flags = FL_BASE2|FL_BASE_BARS,
1960 .num_ports = 4,
1961 .base_baud = 921600,
1962 .uart_offset = 8,
1963 },
1964
1965 [pbn_b3_2_115200] = {
1966 .flags = FL_BASE3,
1967 .num_ports = 2,
1968 .base_baud = 115200,
1969 .uart_offset = 8,
1970 },
1971 [pbn_b3_4_115200] = {
1972 .flags = FL_BASE3,
1973 .num_ports = 4,
1974 .base_baud = 115200,
1975 .uart_offset = 8,
1976 },
1977 [pbn_b3_8_115200] = {
1978 .flags = FL_BASE3,
1979 .num_ports = 8,
1980 .base_baud = 115200,
1981 .uart_offset = 8,
1982 },
1983
1984
1985
1986
1987
1988
1989
1990
1991 [pbn_panacom] = {
1992 .flags = FL_BASE2,
1993 .num_ports = 2,
1994 .base_baud = 921600,
1995 .uart_offset = 0x400,
1996 .reg_shift = 7,
1997 },
1998 [pbn_panacom2] = {
1999 .flags = FL_BASE2|FL_BASE_BARS,
2000 .num_ports = 2,
2001 .base_baud = 921600,
2002 .uart_offset = 0x400,
2003 .reg_shift = 7,
2004 },
2005 [pbn_panacom4] = {
2006 .flags = FL_BASE2|FL_BASE_BARS,
2007 .num_ports = 4,
2008 .base_baud = 921600,
2009 .uart_offset = 0x400,
2010 .reg_shift = 7,
2011 },
2012
2013 [pbn_exsys_4055] = {
2014 .flags = FL_BASE2,
2015 .num_ports = 4,
2016 .base_baud = 115200,
2017 .uart_offset = 8,
2018 },
2019
2020
2021 [pbn_plx_romulus] = {
2022 .flags = FL_BASE2,
2023 .num_ports = 4,
2024 .base_baud = 921600,
2025 .uart_offset = 8 << 2,
2026 .reg_shift = 2,
2027 .first_offset = 0x03,
2028 },
2029
2030
2031
2032
2033
2034 [pbn_oxsemi] = {
2035 .flags = FL_BASE0|FL_REGION_SZ_CAP,
2036 .num_ports = 32,
2037 .base_baud = 115200,
2038 .uart_offset = 8,
2039 },
2040 [pbn_oxsemi_1_4000000] = {
2041 .flags = FL_BASE0,
2042 .num_ports = 1,
2043 .base_baud = 4000000,
2044 .uart_offset = 0x200,
2045 .first_offset = 0x1000,
2046 },
2047 [pbn_oxsemi_2_4000000] = {
2048 .flags = FL_BASE0,
2049 .num_ports = 2,
2050 .base_baud = 4000000,
2051 .uart_offset = 0x200,
2052 .first_offset = 0x1000,
2053 },
2054 [pbn_oxsemi_4_4000000] = {
2055 .flags = FL_BASE0,
2056 .num_ports = 4,
2057 .base_baud = 4000000,
2058 .uart_offset = 0x200,
2059 .first_offset = 0x1000,
2060 },
2061 [pbn_oxsemi_8_4000000] = {
2062 .flags = FL_BASE0,
2063 .num_ports = 8,
2064 .base_baud = 4000000,
2065 .uart_offset = 0x200,
2066 .first_offset = 0x1000,
2067 },
2068
2069
2070
2071
2072
2073
2074 [pbn_intel_i960] = {
2075 .flags = FL_BASE0,
2076 .num_ports = 32,
2077 .base_baud = 921600,
2078 .uart_offset = 8 << 2,
2079 .reg_shift = 2,
2080 .first_offset = 0x10000,
2081 },
2082 [pbn_sgi_ioc3] = {
2083 .flags = FL_BASE0|FL_NOIRQ,
2084 .num_ports = 1,
2085 .base_baud = 458333,
2086 .uart_offset = 8,
2087 .reg_shift = 0,
2088 .first_offset = 0x20178,
2089 },
2090
2091
2092
2093
2094 [pbn_computone_4] = {
2095 .flags = FL_BASE0,
2096 .num_ports = 4,
2097 .base_baud = 921600,
2098 .uart_offset = 0x40,
2099 .reg_shift = 2,
2100 .first_offset = 0x200,
2101 },
2102 [pbn_computone_6] = {
2103 .flags = FL_BASE0,
2104 .num_ports = 6,
2105 .base_baud = 921600,
2106 .uart_offset = 0x40,
2107 .reg_shift = 2,
2108 .first_offset = 0x200,
2109 },
2110 [pbn_computone_8] = {
2111 .flags = FL_BASE0,
2112 .num_ports = 8,
2113 .base_baud = 921600,
2114 .uart_offset = 0x40,
2115 .reg_shift = 2,
2116 .first_offset = 0x200,
2117 },
2118 [pbn_sbsxrsio] = {
2119 .flags = FL_BASE0,
2120 .num_ports = 8,
2121 .base_baud = 460800,
2122 .uart_offset = 256,
2123 .reg_shift = 4,
2124 },
2125
2126
2127
2128
2129
2130 [pbn_exar_XR17C152] = {
2131 .flags = FL_BASE0,
2132 .num_ports = 2,
2133 .base_baud = 921600,
2134 .uart_offset = 0x200,
2135 },
2136 [pbn_exar_XR17C154] = {
2137 .flags = FL_BASE0,
2138 .num_ports = 4,
2139 .base_baud = 921600,
2140 .uart_offset = 0x200,
2141 },
2142 [pbn_exar_XR17C158] = {
2143 .flags = FL_BASE0,
2144 .num_ports = 8,
2145 .base_baud = 921600,
2146 .uart_offset = 0x200,
2147 },
2148
2149
2150
2151 [pbn_pasemi_1682M] = {
2152 .flags = FL_BASE0,
2153 .num_ports = 1,
2154 .base_baud = 8333333,
2155 },
2156
2157
2158
2159 [pbn_ni8430_16] = {
2160 .flags = FL_BASE0,
2161 .num_ports = 16,
2162 .base_baud = 3686400,
2163 .uart_offset = 0x10,
2164 .first_offset = 0x800,
2165 },
2166 [pbn_ni8430_8] = {
2167 .flags = FL_BASE0,
2168 .num_ports = 8,
2169 .base_baud = 3686400,
2170 .uart_offset = 0x10,
2171 .first_offset = 0x800,
2172 },
2173 [pbn_ni8430_4] = {
2174 .flags = FL_BASE0,
2175 .num_ports = 4,
2176 .base_baud = 3686400,
2177 .uart_offset = 0x10,
2178 .first_offset = 0x800,
2179 },
2180 [pbn_ni8430_2] = {
2181 .flags = FL_BASE0,
2182 .num_ports = 2,
2183 .base_baud = 3686400,
2184 .uart_offset = 0x10,
2185 .first_offset = 0x800,
2186 },
2187};
2188
2189static const struct pci_device_id softmodem_blacklist[] = {
2190 { PCI_VDEVICE(AL, 0x5457), },
2191};
2192
2193
2194
2195
2196
2197
2198static int __devinit
2199serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
2200{
2201 const struct pci_device_id *blacklist;
2202 int num_iomem, num_port, first_port = -1, i;
2203
2204
2205
2206
2207
2208
2209
2210
2211 if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) &&
2212 ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
2213 (dev->class & 0xff) > 6)
2214 return -ENODEV;
2215
2216
2217
2218
2219
2220 for (blacklist = softmodem_blacklist;
2221 blacklist < softmodem_blacklist + ARRAY_SIZE(softmodem_blacklist);
2222 blacklist++) {
2223 if (dev->vendor == blacklist->vendor &&
2224 dev->device == blacklist->device)
2225 return -ENODEV;
2226 }
2227
2228 num_iomem = num_port = 0;
2229 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2230 if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
2231 num_port++;
2232 if (first_port == -1)
2233 first_port = i;
2234 }
2235 if (pci_resource_flags(dev, i) & IORESOURCE_MEM)
2236 num_iomem++;
2237 }
2238
2239
2240
2241
2242
2243
2244 if (num_iomem <= 1 && num_port == 1) {
2245 board->flags = first_port;
2246 board->num_ports = pci_resource_len(dev, first_port) / 8;
2247 return 0;
2248 }
2249
2250
2251
2252
2253
2254
2255 first_port = -1;
2256 num_port = 0;
2257 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2258 if (pci_resource_flags(dev, i) & IORESOURCE_IO &&
2259 pci_resource_len(dev, i) == 8 &&
2260 (first_port == -1 || (first_port + num_port) == i)) {
2261 num_port++;
2262 if (first_port == -1)
2263 first_port = i;
2264 }
2265 }
2266
2267 if (num_port > 1) {
2268 board->flags = first_port | FL_BASE_BARS;
2269 board->num_ports = num_port;
2270 return 0;
2271 }
2272
2273 return -ENODEV;
2274}
2275
2276static inline int
2277serial_pci_matches(const struct pciserial_board *board,
2278 const struct pciserial_board *guessed)
2279{
2280 return
2281 board->num_ports == guessed->num_ports &&
2282 board->base_baud == guessed->base_baud &&
2283 board->uart_offset == guessed->uart_offset &&
2284 board->reg_shift == guessed->reg_shift &&
2285 board->first_offset == guessed->first_offset;
2286}
2287
2288struct serial_private *
2289pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board)
2290{
2291 struct uart_port serial_port;
2292 struct serial_private *priv;
2293 struct pci_serial_quirk *quirk;
2294 int rc, nr_ports, i;
2295
2296 nr_ports = board->num_ports;
2297
2298
2299
2300
2301 quirk = find_quirk(dev);
2302
2303
2304
2305
2306
2307
2308
2309
2310 if (quirk->init) {
2311 rc = quirk->init(dev);
2312 if (rc < 0) {
2313 priv = ERR_PTR(rc);
2314 goto err_out;
2315 }
2316 if (rc)
2317 nr_ports = rc;
2318 }
2319
2320 priv = kzalloc(sizeof(struct serial_private) +
2321 sizeof(unsigned int) * nr_ports,
2322 GFP_KERNEL);
2323 if (!priv) {
2324 priv = ERR_PTR(-ENOMEM);
2325 goto err_deinit;
2326 }
2327
2328 priv->dev = dev;
2329 priv->quirk = quirk;
2330
2331 memset(&serial_port, 0, sizeof(struct uart_port));
2332 serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
2333 serial_port.uartclk = board->base_baud * 16;
2334 serial_port.irq = get_pci_irq(dev, board);
2335 serial_port.dev = &dev->dev;
2336
2337 for (i = 0; i < nr_ports; i++) {
2338 if (quirk->setup(priv, board, &serial_port, i))
2339 break;
2340
2341#ifdef SERIAL_DEBUG_PCI
2342 printk(KERN_DEBUG "Setup PCI port: port %x, irq %d, type %d\n",
2343 serial_port.iobase, serial_port.irq, serial_port.iotype);
2344#endif
2345
2346 priv->line[i] = serial8250_register_port(&serial_port);
2347 if (priv->line[i] < 0) {
2348 printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), priv->line[i]);
2349 break;
2350 }
2351 }
2352 priv->nr = i;
2353 return priv;
2354
2355err_deinit:
2356 if (quirk->exit)
2357 quirk->exit(dev);
2358err_out:
2359 return priv;
2360}
2361EXPORT_SYMBOL_GPL(pciserial_init_ports);
2362
2363void pciserial_remove_ports(struct serial_private *priv)
2364{
2365 struct pci_serial_quirk *quirk;
2366 int i;
2367
2368 for (i = 0; i < priv->nr; i++)
2369 serial8250_unregister_port(priv->line[i]);
2370
2371 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
2372 if (priv->remapped_bar[i])
2373 iounmap(priv->remapped_bar[i]);
2374 priv->remapped_bar[i] = NULL;
2375 }
2376
2377
2378
2379
2380 quirk = find_quirk(priv->dev);
2381 if (quirk->exit)
2382 quirk->exit(priv->dev);
2383
2384 kfree(priv);
2385}
2386EXPORT_SYMBOL_GPL(pciserial_remove_ports);
2387
2388void pciserial_suspend_ports(struct serial_private *priv)
2389{
2390 int i;
2391
2392 for (i = 0; i < priv->nr; i++)
2393 if (priv->line[i] >= 0)
2394 serial8250_suspend_port(priv->line[i]);
2395}
2396EXPORT_SYMBOL_GPL(pciserial_suspend_ports);
2397
2398void pciserial_resume_ports(struct serial_private *priv)
2399{
2400 int i;
2401
2402
2403
2404
2405 if (priv->quirk->init)
2406 priv->quirk->init(priv->dev);
2407
2408 for (i = 0; i < priv->nr; i++)
2409 if (priv->line[i] >= 0)
2410 serial8250_resume_port(priv->line[i]);
2411}
2412EXPORT_SYMBOL_GPL(pciserial_resume_ports);
2413
2414
2415
2416
2417
2418static int __devinit
2419pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
2420{
2421 struct serial_private *priv;
2422 const struct pciserial_board *board;
2423 struct pciserial_board tmp;
2424 int rc;
2425
2426 if (ent->driver_data >= ARRAY_SIZE(pci_boards)) {
2427 printk(KERN_ERR "pci_init_one: invalid driver_data: %ld\n",
2428 ent->driver_data);
2429 return -EINVAL;
2430 }
2431
2432 board = &pci_boards[ent->driver_data];
2433
2434 rc = pci_enable_device(dev);
2435 if (rc)
2436 return rc;
2437
2438 if (ent->driver_data == pbn_default) {
2439
2440
2441
2442
2443 memcpy(&tmp, board, sizeof(struct pciserial_board));
2444 board = &tmp;
2445
2446
2447
2448
2449
2450 rc = serial_pci_guess_board(dev, &tmp);
2451 if (rc)
2452 goto disable;
2453 } else {
2454
2455
2456
2457
2458
2459 memcpy(&tmp, &pci_boards[pbn_default],
2460 sizeof(struct pciserial_board));
2461 rc = serial_pci_guess_board(dev, &tmp);
2462 if (rc == 0 && serial_pci_matches(board, &tmp))
2463 moan_device("Redundant entry in serial pci_table.",
2464 dev);
2465 }
2466
2467 priv = pciserial_init_ports(dev, board);
2468 if (!IS_ERR(priv)) {
2469 pci_set_drvdata(dev, priv);
2470 return 0;
2471 }
2472
2473 rc = PTR_ERR(priv);
2474
2475 disable:
2476 pci_disable_device(dev);
2477 return rc;
2478}
2479
2480static void __devexit pciserial_remove_one(struct pci_dev *dev)
2481{
2482 struct serial_private *priv = pci_get_drvdata(dev);
2483
2484 pci_set_drvdata(dev, NULL);
2485
2486 pciserial_remove_ports(priv);
2487
2488 pci_disable_device(dev);
2489}
2490
2491#ifdef CONFIG_PM
2492static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
2493{
2494 struct serial_private *priv = pci_get_drvdata(dev);
2495
2496 if (priv)
2497 pciserial_suspend_ports(priv);
2498
2499 pci_save_state(dev);
2500 pci_set_power_state(dev, pci_choose_state(dev, state));
2501 return 0;
2502}
2503
2504static int pciserial_resume_one(struct pci_dev *dev)
2505{
2506 int err;
2507 struct serial_private *priv = pci_get_drvdata(dev);
2508
2509 pci_set_power_state(dev, PCI_D0);
2510 pci_restore_state(dev);
2511
2512 if (priv) {
2513
2514
2515
2516 err = pci_enable_device(dev);
2517
2518 if (err)
2519 printk(KERN_ERR "pciserial: Unable to re-enable ports, trying to continue.\n");
2520 pciserial_resume_ports(priv);
2521 }
2522 return 0;
2523}
2524#endif
2525
2526static struct pci_device_id serial_pci_tbl[] = {
2527
2528 { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620,
2529 PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0,
2530 pbn_b2_8_921600 },
2531 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2532 PCI_SUBVENDOR_ID_CONNECT_TECH,
2533 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2534 pbn_b1_8_1382400 },
2535 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2536 PCI_SUBVENDOR_ID_CONNECT_TECH,
2537 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2538 pbn_b1_4_1382400 },
2539 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
2540 PCI_SUBVENDOR_ID_CONNECT_TECH,
2541 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2542 pbn_b1_2_1382400 },
2543 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2544 PCI_SUBVENDOR_ID_CONNECT_TECH,
2545 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
2546 pbn_b1_8_1382400 },
2547 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2548 PCI_SUBVENDOR_ID_CONNECT_TECH,
2549 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
2550 pbn_b1_4_1382400 },
2551 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2552 PCI_SUBVENDOR_ID_CONNECT_TECH,
2553 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
2554 pbn_b1_2_1382400 },
2555 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2556 PCI_SUBVENDOR_ID_CONNECT_TECH,
2557 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485, 0, 0,
2558 pbn_b1_8_921600 },
2559 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2560 PCI_SUBVENDOR_ID_CONNECT_TECH,
2561 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 0, 0,
2562 pbn_b1_8_921600 },
2563 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2564 PCI_SUBVENDOR_ID_CONNECT_TECH,
2565 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485, 0, 0,
2566 pbn_b1_4_921600 },
2567 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2568 PCI_SUBVENDOR_ID_CONNECT_TECH,
2569 PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0,
2570 pbn_b1_4_921600 },
2571 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2572 PCI_SUBVENDOR_ID_CONNECT_TECH,
2573 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0,
2574 pbn_b1_2_921600 },
2575 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2576 PCI_SUBVENDOR_ID_CONNECT_TECH,
2577 PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0,
2578 pbn_b1_8_921600 },
2579 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2580 PCI_SUBVENDOR_ID_CONNECT_TECH,
2581 PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0,
2582 pbn_b1_8_921600 },
2583 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2584 PCI_SUBVENDOR_ID_CONNECT_TECH,
2585 PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0,
2586 pbn_b1_4_921600 },
2587 { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
2588 PCI_SUBVENDOR_ID_CONNECT_TECH,
2589 PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ, 0, 0,
2590 pbn_b1_2_1250000 },
2591 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2592 PCI_SUBVENDOR_ID_CONNECT_TECH,
2593 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2, 0, 0,
2594 pbn_b0_2_1843200 },
2595 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2596 PCI_SUBVENDOR_ID_CONNECT_TECH,
2597 PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4, 0, 0,
2598 pbn_b0_4_1843200 },
2599 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2600 PCI_VENDOR_ID_AFAVLAB,
2601 PCI_SUBDEVICE_ID_AFAVLAB_P061, 0, 0,
2602 pbn_b0_4_1152000 },
2603 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2604 PCI_SUBVENDOR_ID_CONNECT_TECH,
2605 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_232, 0, 0,
2606 pbn_b0_2_1843200_200 },
2607 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2608 PCI_SUBVENDOR_ID_CONNECT_TECH,
2609 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_232, 0, 0,
2610 pbn_b0_4_1843200_200 },
2611 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2612 PCI_SUBVENDOR_ID_CONNECT_TECH,
2613 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_232, 0, 0,
2614 pbn_b0_8_1843200_200 },
2615 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2616 PCI_SUBVENDOR_ID_CONNECT_TECH,
2617 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_1_1, 0, 0,
2618 pbn_b0_2_1843200_200 },
2619 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2620 PCI_SUBVENDOR_ID_CONNECT_TECH,
2621 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_2, 0, 0,
2622 pbn_b0_4_1843200_200 },
2623 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2624 PCI_SUBVENDOR_ID_CONNECT_TECH,
2625 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_4, 0, 0,
2626 pbn_b0_8_1843200_200 },
2627 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2628 PCI_SUBVENDOR_ID_CONNECT_TECH,
2629 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2, 0, 0,
2630 pbn_b0_2_1843200_200 },
2631 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2632 PCI_SUBVENDOR_ID_CONNECT_TECH,
2633 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4, 0, 0,
2634 pbn_b0_4_1843200_200 },
2635 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2636 PCI_SUBVENDOR_ID_CONNECT_TECH,
2637 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8, 0, 0,
2638 pbn_b0_8_1843200_200 },
2639 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
2640 PCI_SUBVENDOR_ID_CONNECT_TECH,
2641 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_485, 0, 0,
2642 pbn_b0_2_1843200_200 },
2643 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
2644 PCI_SUBVENDOR_ID_CONNECT_TECH,
2645 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485, 0, 0,
2646 pbn_b0_4_1843200_200 },
2647 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
2648 PCI_SUBVENDOR_ID_CONNECT_TECH,
2649 PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485, 0, 0,
2650 pbn_b0_8_1843200_200 },
2651
2652 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,
2653 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2654 pbn_b2_bt_1_115200 },
2655 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2,
2656 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2657 pbn_b2_bt_2_115200 },
2658 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422,
2659 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2660 pbn_b2_bt_4_115200 },
2661 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232,
2662 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2663 pbn_b2_bt_2_115200 },
2664 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4,
2665 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2666 pbn_b2_bt_4_115200 },
2667 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,
2668 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2669 pbn_b2_8_115200 },
2670 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_7803,
2671 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2672 pbn_b2_8_460800 },
2673 { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM8,
2674 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2675 pbn_b2_8_115200 },
2676
2677 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2,
2678 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2679 pbn_b2_bt_2_115200 },
2680 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200,
2681 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2682 pbn_b2_bt_2_921600 },
2683
2684
2685
2686 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800,
2687 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2688 pbn_b2_8_921600 },
2689 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077,
2690 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2691 pbn_b2_4_921600 },
2692
2693 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2694 PCI_VENDOR_ID_PLX,
2695 PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0,
2696 pbn_b0_4_115200 },
2697 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2698 PCI_SUBVENDOR_ID_KEYSPAN,
2699 PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0,
2700 pbn_panacom },
2701 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM,
2702 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2703 pbn_panacom4 },
2704 { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM,
2705 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2706 pbn_panacom2 },
2707 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2708 PCI_VENDOR_ID_ESDGMBH,
2709 PCI_DEVICE_ID_ESDGMBH_CPCIASIO4, 0, 0,
2710 pbn_b2_4_115200 },
2711 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2712 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2713 PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0,
2714 pbn_b2_4_460800 },
2715 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2716 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2717 PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0,
2718 pbn_b2_8_460800 },
2719 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2720 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2721 PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0,
2722 pbn_b2_16_460800 },
2723 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2724 PCI_SUBVENDOR_ID_CHASE_PCIFAST,
2725 PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0,
2726 pbn_b2_16_460800 },
2727 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2728 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2729 PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0,
2730 pbn_b2_4_460800 },
2731 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2732 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
2733 PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
2734 pbn_b2_8_460800 },
2735 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2736 PCI_SUBVENDOR_ID_EXSYS,
2737 PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
2738 pbn_exsys_4055 },
2739
2740
2741
2742
2743 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS,
2744 0x10b5, 0x106a, 0, 0,
2745 pbn_plx_romulus },
2746 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100,
2747 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2748 pbn_b1_4_115200 },
2749 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100,
2750 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2751 pbn_b1_2_115200 },
2752 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D,
2753 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2754 pbn_b1_8_115200 },
2755 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M,
2756 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2757 pbn_b1_8_115200 },
2758 { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,
2759 PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4,
2760 0, 0,
2761 pbn_b0_4_921600 },
2762 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2763 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL,
2764 0, 0,
2765 pbn_b0_4_1152000 },
2766
2767
2768
2769
2770
2771
2772
2773 { PCI_VENDOR_ID_OXSEMI, 0x950a,
2774 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL, 0, 0,
2775 pbn_b0_2_115200 },
2776 { PCI_VENDOR_ID_OXSEMI, 0x950a,
2777 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2778 pbn_b0_2_1130000 },
2779 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
2780 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2781 pbn_b0_4_115200 },
2782 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,
2783 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2784 pbn_b0_bt_2_921600 },
2785
2786
2787
2788
2789 { PCI_VENDOR_ID_OXSEMI, 0xc101,
2790 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2791 pbn_b0_1_4000000 },
2792 { PCI_VENDOR_ID_OXSEMI, 0xc105,
2793 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2794 pbn_b0_1_4000000 },
2795 { PCI_VENDOR_ID_OXSEMI, 0xc11b,
2796 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2797 pbn_oxsemi_1_4000000 },
2798 { PCI_VENDOR_ID_OXSEMI, 0xc11f,
2799 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2800 pbn_oxsemi_1_4000000 },
2801 { PCI_VENDOR_ID_OXSEMI, 0xc120,
2802 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2803 pbn_b0_1_4000000 },
2804 { PCI_VENDOR_ID_OXSEMI, 0xc124,
2805 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2806 pbn_b0_1_4000000 },
2807 { PCI_VENDOR_ID_OXSEMI, 0xc138,
2808 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2809 pbn_oxsemi_1_4000000 },
2810 { PCI_VENDOR_ID_OXSEMI, 0xc13d,
2811 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2812 pbn_oxsemi_1_4000000 },
2813 { PCI_VENDOR_ID_OXSEMI, 0xc140,
2814 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2815 pbn_b0_1_4000000 },
2816 { PCI_VENDOR_ID_OXSEMI, 0xc141,
2817 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2818 pbn_b0_1_4000000 },
2819 { PCI_VENDOR_ID_OXSEMI, 0xc144,
2820 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2821 pbn_b0_1_4000000 },
2822 { PCI_VENDOR_ID_OXSEMI, 0xc145,
2823 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2824 pbn_b0_1_4000000 },
2825 { PCI_VENDOR_ID_OXSEMI, 0xc158,
2826 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2827 pbn_oxsemi_2_4000000 },
2828 { PCI_VENDOR_ID_OXSEMI, 0xc15d,
2829 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2830 pbn_oxsemi_2_4000000 },
2831 { PCI_VENDOR_ID_OXSEMI, 0xc208,
2832 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2833 pbn_oxsemi_4_4000000 },
2834 { PCI_VENDOR_ID_OXSEMI, 0xc20d,
2835 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2836 pbn_oxsemi_4_4000000 },
2837 { PCI_VENDOR_ID_OXSEMI, 0xc308,
2838 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2839 pbn_oxsemi_8_4000000 },
2840 { PCI_VENDOR_ID_OXSEMI, 0xc30d,
2841 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2842 pbn_oxsemi_8_4000000 },
2843 { PCI_VENDOR_ID_OXSEMI, 0xc40b,
2844 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2845 pbn_oxsemi_1_4000000 },
2846 { PCI_VENDOR_ID_OXSEMI, 0xc40f,
2847 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2848 pbn_oxsemi_1_4000000 },
2849 { PCI_VENDOR_ID_OXSEMI, 0xc41b,
2850 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2851 pbn_oxsemi_1_4000000 },
2852 { PCI_VENDOR_ID_OXSEMI, 0xc41f,
2853 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2854 pbn_oxsemi_1_4000000 },
2855 { PCI_VENDOR_ID_OXSEMI, 0xc42b,
2856 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2857 pbn_oxsemi_1_4000000 },
2858 { PCI_VENDOR_ID_OXSEMI, 0xc42f,
2859 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2860 pbn_oxsemi_1_4000000 },
2861 { PCI_VENDOR_ID_OXSEMI, 0xc43b,
2862 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2863 pbn_oxsemi_1_4000000 },
2864 { PCI_VENDOR_ID_OXSEMI, 0xc43f,
2865 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2866 pbn_oxsemi_1_4000000 },
2867 { PCI_VENDOR_ID_OXSEMI, 0xc44b,
2868 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2869 pbn_oxsemi_1_4000000 },
2870 { PCI_VENDOR_ID_OXSEMI, 0xc44f,
2871 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2872 pbn_oxsemi_1_4000000 },
2873 { PCI_VENDOR_ID_OXSEMI, 0xc45b,
2874 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2875 pbn_oxsemi_1_4000000 },
2876 { PCI_VENDOR_ID_OXSEMI, 0xc45f,
2877 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2878 pbn_oxsemi_1_4000000 },
2879 { PCI_VENDOR_ID_OXSEMI, 0xc46b,
2880 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2881 pbn_oxsemi_1_4000000 },
2882 { PCI_VENDOR_ID_OXSEMI, 0xc46f,
2883 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2884 pbn_oxsemi_1_4000000 },
2885 { PCI_VENDOR_ID_OXSEMI, 0xc47b,
2886 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2887 pbn_oxsemi_1_4000000 },
2888 { PCI_VENDOR_ID_OXSEMI, 0xc47f,
2889 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2890 pbn_oxsemi_1_4000000 },
2891 { PCI_VENDOR_ID_OXSEMI, 0xc48b,
2892 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2893 pbn_oxsemi_1_4000000 },
2894 { PCI_VENDOR_ID_OXSEMI, 0xc48f,
2895 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2896 pbn_oxsemi_1_4000000 },
2897 { PCI_VENDOR_ID_OXSEMI, 0xc49b,
2898 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2899 pbn_oxsemi_1_4000000 },
2900 { PCI_VENDOR_ID_OXSEMI, 0xc49f,
2901 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2902 pbn_oxsemi_1_4000000 },
2903 { PCI_VENDOR_ID_OXSEMI, 0xc4ab,
2904 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2905 pbn_oxsemi_1_4000000 },
2906 { PCI_VENDOR_ID_OXSEMI, 0xc4af,
2907 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2908 pbn_oxsemi_1_4000000 },
2909 { PCI_VENDOR_ID_OXSEMI, 0xc4bb,
2910 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2911 pbn_oxsemi_1_4000000 },
2912 { PCI_VENDOR_ID_OXSEMI, 0xc4bf,
2913 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2914 pbn_oxsemi_1_4000000 },
2915 { PCI_VENDOR_ID_OXSEMI, 0xc4cb,
2916 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2917 pbn_oxsemi_1_4000000 },
2918 { PCI_VENDOR_ID_OXSEMI, 0xc4cf,
2919 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2920 pbn_oxsemi_1_4000000 },
2921
2922
2923
2924 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2925 PCI_VENDOR_ID_MAINPINE, 0x4001, 0, 0,
2926 pbn_oxsemi_1_4000000 },
2927 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2928 PCI_VENDOR_ID_MAINPINE, 0x4002, 0, 0,
2929 pbn_oxsemi_2_4000000 },
2930 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2931 PCI_VENDOR_ID_MAINPINE, 0x4004, 0, 0,
2932 pbn_oxsemi_4_4000000 },
2933 { PCI_VENDOR_ID_MAINPINE, 0x4000,
2934 PCI_VENDOR_ID_MAINPINE, 0x4008, 0, 0,
2935 pbn_oxsemi_8_4000000 },
2936
2937
2938
2939
2940 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2941 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0,
2942 pbn_sbsxrsio },
2943 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2944 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0,
2945 pbn_sbsxrsio },
2946 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2947 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0,
2948 pbn_sbsxrsio },
2949 { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,
2950 PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0,
2951 pbn_sbsxrsio },
2952
2953
2954
2955
2956 { PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM,
2957 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2958 pbn_b1_1_115200 },
2959
2960
2961
2962
2963
2964 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100,
2965 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2966 pbn_b0_1_921600 },
2967 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200,
2968 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2969 pbn_b0_2_921600 },
2970 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400,
2971 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2972 pbn_b0_4_921600 },
2973 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B,
2974 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2975 pbn_b0_4_921600 },
2976 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L,
2977 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2978 pbn_b1_1_921600 },
2979 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L,
2980 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2981 pbn_b1_bt_2_921600 },
2982 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L,
2983 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2984 pbn_b0_bt_4_921600 },
2985 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L,
2986 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2987 pbn_b0_bt_8_921600 },
2988
2989 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550,
2990 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2991 pbn_b2_1_460800 },
2992 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650,
2993 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2994 pbn_b2_1_460800 },
2995 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850,
2996 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2997 pbn_b2_1_460800 },
2998 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550,
2999 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3000 pbn_b2_bt_2_921600 },
3001 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650,
3002 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3003 pbn_b2_bt_2_921600 },
3004 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850,
3005 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3006 pbn_b2_bt_2_921600 },
3007 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550,
3008 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3009 pbn_b2_bt_4_921600 },
3010 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650,
3011 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3012 pbn_b2_bt_4_921600 },
3013 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850,
3014 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3015 pbn_b2_bt_4_921600 },
3016 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550,
3017 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3018 pbn_b0_1_921600 },
3019 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650,
3020 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3021 pbn_b0_1_921600 },
3022 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850,
3023 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3024 pbn_b0_1_921600 },
3025 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550,
3026 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3027 pbn_b0_bt_2_921600 },
3028 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650,
3029 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3030 pbn_b0_bt_2_921600 },
3031 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850,
3032 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3033 pbn_b0_bt_2_921600 },
3034 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550,
3035 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3036 pbn_b0_bt_4_921600 },
3037 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650,
3038 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3039 pbn_b0_bt_4_921600 },
3040 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850,
3041 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3042 pbn_b0_bt_4_921600 },
3043 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_550,
3044 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3045 pbn_b0_bt_8_921600 },
3046 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_650,
3047 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3048 pbn_b0_bt_8_921600 },
3049 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_8S_20x_850,
3050 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3051 pbn_b0_bt_8_921600 },
3052
3053
3054
3055
3056 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3057 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4,
3058 0, 0, pbn_computone_4 },
3059 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3060 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8,
3061 0, 0, pbn_computone_8 },
3062 { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
3063 PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6,
3064 0, 0, pbn_computone_6 },
3065
3066 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N,
3067 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3068 pbn_oxsemi },
3069 { PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889,
3070 PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0,
3071 pbn_b0_bt_1_921600 },
3072
3073
3074
3075
3076 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P028,
3077 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3078 pbn_b0_bt_8_115200 },
3079 { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P030,
3080 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3081 pbn_b0_bt_8_115200 },
3082
3083 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL,
3084 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3085 pbn_b0_bt_2_115200 },
3086 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A,
3087 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3088 pbn_b0_bt_2_115200 },
3089 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B,
3090 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3091 pbn_b0_bt_2_115200 },
3092 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_A,
3093 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3094 pbn_b0_bt_4_460800 },
3095 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_B,
3096 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3097 pbn_b0_bt_4_460800 },
3098 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS,
3099 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3100 pbn_b0_bt_2_460800 },
3101 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A,
3102 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3103 pbn_b0_bt_2_460800 },
3104 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B,
3105 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3106 pbn_b0_bt_2_460800 },
3107 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL,
3108 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3109 pbn_b0_bt_1_115200 },
3110 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650,
3111 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3112 pbn_b0_bt_1_460800 },
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3123 0x1204, 0x0004, 0, 0,
3124 pbn_b0_4_921600 },
3125 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF0,
3126 0x1208, 0x0004, 0, 0,
3127 pbn_b0_4_921600 },
3128
3129
3130
3131
3132
3133
3134 { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF1,
3135 0x1208, 0x0004, 0, 0,
3136 pbn_b0_4_921600 },
3137
3138
3139
3140
3141 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RAC4,
3142 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3143 pbn_b1_1_1382400 },
3144
3145
3146
3147
3148 { PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_RACIII,
3149 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3150 pbn_b1_1_1382400 },
3151
3152
3153
3154
3155 { PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT,
3156 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3157 pbn_b2_bt_2_115200 },
3158
3159
3160
3161
3162 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80960_RP,
3163 0xE4BF, PCI_ANY_ID, 0, 0,
3164 pbn_intel_i960 },
3165
3166
3167
3168
3169 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM,
3170 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3171 pbn_b0_1_115200 },
3172
3173
3174
3175 { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_RBM56G,
3176 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3177 pbn_b0_1_115200 },
3178
3179
3180
3181
3182
3183
3184
3185
3186 { PCI_VENDOR_ID_ROCKWELL, 0x1004,
3187 0x1048, 0x1500, 0, 0,
3188 pbn_b1_1_115200 },
3189
3190 { PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
3191 0xFF00, 0, 0, 0,
3192 pbn_sgi_ioc3 },
3193
3194
3195
3196
3197 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
3198 PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_RMP3, 0, 0,
3199 pbn_b1_1_115200 },
3200 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,
3201 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3202 pbn_b0_5_115200 },
3203 { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
3204 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3205 pbn_b2_1_115200 },
3206
3207 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM2,
3208 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3209 pbn_b3_2_115200 },
3210 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM4,
3211 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3212 pbn_b3_4_115200 },
3213 { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8,
3214 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3215 pbn_b3_8_115200 },
3216
3217
3218
3219
3220 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,
3221 PCI_ANY_ID, PCI_ANY_ID,
3222 0,
3223 0, pbn_exar_XR17C152 },
3224 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,
3225 PCI_ANY_ID, PCI_ANY_ID,
3226 0,
3227 0, pbn_exar_XR17C154 },
3228 { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,
3229 PCI_ANY_ID, PCI_ANY_ID,
3230 0,
3231 0, pbn_exar_XR17C158 },
3232
3233
3234
3235
3236 { PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560,
3237 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3238 pbn_b0_1_115200 },
3239
3240
3241
3242 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
3243 PCI_ANY_ID, PCI_ANY_ID,
3244 0, 0,
3245 pbn_b1_bt_1_115200 },
3246
3247
3248
3249
3250 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS200,
3251 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3252 pbn_b2_2_115200 },
3253
3254
3255
3256 { PCI_VENDOR_ID_INTASHIELD, PCI_DEVICE_ID_INTASHIELD_IS400,
3257 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3258 pbn_b2_4_115200 },
3259
3260
3261
3262 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
3263 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4,
3264 0, 0, pbn_b2_4_921600 },
3265 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
3266 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8,
3267 0, 0, pbn_b2_8_921600 },
3268
3269
3270
3271
3272
3273
3274
3275 {
3276 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3277 PCI_VENDOR_ID_MAINPINE, 0x0200,
3278 0, 0, pbn_b0_2_115200 },
3279 {
3280 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3281 PCI_VENDOR_ID_MAINPINE, 0x0300,
3282 0, 0, pbn_b0_4_115200 },
3283 {
3284 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3285 PCI_VENDOR_ID_MAINPINE, 0x0400,
3286 0, 0, pbn_b0_2_115200 },
3287 {
3288 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3289 PCI_VENDOR_ID_MAINPINE, 0x0500,
3290 0, 0, pbn_b0_4_115200 },
3291 {
3292 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3293 PCI_VENDOR_ID_MAINPINE, 0x0600,
3294 0, 0, pbn_b0_2_115200 },
3295 {
3296 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3297 PCI_VENDOR_ID_MAINPINE, 0x0700,
3298 0, 0, pbn_b0_4_115200 },
3299 {
3300 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3301 PCI_VENDOR_ID_MAINPINE, 0x0800,
3302 0, 0, pbn_b0_8_115200 },
3303 {
3304 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3305 PCI_VENDOR_ID_MAINPINE, 0x0C00,
3306 0, 0, pbn_b0_2_115200 },
3307 {
3308 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3309 PCI_VENDOR_ID_MAINPINE, 0x0D00,
3310 0, 0, pbn_b0_4_115200 },
3311 {
3312 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3313 PCI_VENDOR_ID_MAINPINE, 0x1D00,
3314 0, 0, pbn_b0_8_115200 },
3315 {
3316 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3317 PCI_VENDOR_ID_MAINPINE, 0x2000,
3318 0, 0, pbn_b0_1_115200 },
3319 {
3320 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3321 PCI_VENDOR_ID_MAINPINE, 0x2100,
3322 0, 0, pbn_b0_1_115200 },
3323 {
3324 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3325 PCI_VENDOR_ID_MAINPINE, 0x2200,
3326 0, 0, pbn_b0_2_115200 },
3327 {
3328 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3329 PCI_VENDOR_ID_MAINPINE, 0x2300,
3330 0, 0, pbn_b0_2_115200 },
3331 {
3332 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3333 PCI_VENDOR_ID_MAINPINE, 0x2400,
3334 0, 0, pbn_b0_4_115200 },
3335 {
3336 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3337 PCI_VENDOR_ID_MAINPINE, 0x2500,
3338 0, 0, pbn_b0_4_115200 },
3339 {
3340 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3341 PCI_VENDOR_ID_MAINPINE, 0x2600,
3342 0, 0, pbn_b0_8_115200 },
3343 {
3344 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3345 PCI_VENDOR_ID_MAINPINE, 0x2700,
3346 0, 0, pbn_b0_8_115200 },
3347 {
3348 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3349 PCI_VENDOR_ID_MAINPINE, 0x3000,
3350 0, 0, pbn_b0_1_115200 },
3351 {
3352 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3353 PCI_VENDOR_ID_MAINPINE, 0x3100,
3354 0, 0, pbn_b0_1_115200 },
3355 {
3356 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3357 PCI_VENDOR_ID_MAINPINE, 0x3200,
3358 0, 0, pbn_b0_2_115200 },
3359 {
3360 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3361 PCI_VENDOR_ID_MAINPINE, 0x3300,
3362 0, 0, pbn_b0_2_115200 },
3363 {
3364 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3365 PCI_VENDOR_ID_MAINPINE, 0x3400,
3366 0, 0, pbn_b0_4_115200 },
3367 {
3368 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3369 PCI_VENDOR_ID_MAINPINE, 0x3500,
3370 0, 0, pbn_b0_4_115200 },
3371 {
3372 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3373 PCI_VENDOR_ID_MAINPINE, 0x3C00,
3374 0, 0, pbn_b0_8_115200 },
3375 {
3376 PCI_VENDOR_ID_MAINPINE, PCI_DEVICE_ID_MAINPINE_PBRIDGE,
3377 PCI_VENDOR_ID_MAINPINE, 0x3D00,
3378 0, 0, pbn_b0_8_115200 },
3379
3380
3381
3382
3383
3384 { PCI_VENDOR_ID_PASEMI, 0xa004,
3385 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3386 pbn_pasemi_1682M },
3387
3388
3389
3390
3391 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI23216,
3392 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3393 pbn_b1_16_115200 },
3394 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2328,
3395 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3396 pbn_b1_8_115200 },
3397 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324,
3398 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3399 pbn_b1_bt_4_115200 },
3400 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322,
3401 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3402 pbn_b1_bt_2_115200 },
3403 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324I,
3404 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3405 pbn_b1_bt_4_115200 },
3406 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322I,
3407 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3408 pbn_b1_bt_2_115200 },
3409 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_23216,
3410 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3411 pbn_b1_16_115200 },
3412 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2328,
3413 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3414 pbn_b1_8_115200 },
3415 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2324,
3416 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3417 pbn_b1_bt_4_115200 },
3418 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2322,
3419 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3420 pbn_b1_bt_2_115200 },
3421 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2324,
3422 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3423 pbn_b1_bt_4_115200 },
3424 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2322,
3425 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3426 pbn_b1_bt_2_115200 },
3427 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2322,
3428 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3429 pbn_ni8430_2 },
3430 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2322,
3431 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3432 pbn_ni8430_2 },
3433 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2324,
3434 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3435 pbn_ni8430_4 },
3436 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2324,
3437 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3438 pbn_ni8430_4 },
3439 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2328,
3440 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3441 pbn_ni8430_8 },
3442 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2328,
3443 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3444 pbn_ni8430_8 },
3445 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_23216,
3446 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3447 pbn_ni8430_16 },
3448 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_23216,
3449 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3450 pbn_ni8430_16 },
3451 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2322,
3452 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3453 pbn_ni8430_2 },
3454 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2322,
3455 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3456 pbn_ni8430_2 },
3457 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2324,
3458 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3459 pbn_ni8430_4 },
3460 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2324,
3461 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3462 pbn_ni8430_4 },
3463
3464
3465
3466
3467 { PCI_VENDOR_ID_ADDIDATA,
3468 PCI_DEVICE_ID_ADDIDATA_APCI7500,
3469 PCI_ANY_ID,
3470 PCI_ANY_ID,
3471 0,
3472 0,
3473 pbn_b0_4_115200 },
3474
3475 { PCI_VENDOR_ID_ADDIDATA,
3476 PCI_DEVICE_ID_ADDIDATA_APCI7420,
3477 PCI_ANY_ID,
3478 PCI_ANY_ID,
3479 0,
3480 0,
3481 pbn_b0_2_115200 },
3482
3483 { PCI_VENDOR_ID_ADDIDATA,
3484 PCI_DEVICE_ID_ADDIDATA_APCI7300,
3485 PCI_ANY_ID,
3486 PCI_ANY_ID,
3487 0,
3488 0,
3489 pbn_b0_1_115200 },
3490
3491 { PCI_VENDOR_ID_ADDIDATA_OLD,
3492 PCI_DEVICE_ID_ADDIDATA_APCI7800,
3493 PCI_ANY_ID,
3494 PCI_ANY_ID,
3495 0,
3496 0,
3497 pbn_b1_8_115200 },
3498
3499 { PCI_VENDOR_ID_ADDIDATA,
3500 PCI_DEVICE_ID_ADDIDATA_APCI7500_2,
3501 PCI_ANY_ID,
3502 PCI_ANY_ID,
3503 0,
3504 0,
3505 pbn_b0_4_115200 },
3506
3507 { PCI_VENDOR_ID_ADDIDATA,
3508 PCI_DEVICE_ID_ADDIDATA_APCI7420_2,
3509 PCI_ANY_ID,
3510 PCI_ANY_ID,
3511 0,
3512 0,
3513 pbn_b0_2_115200 },
3514
3515 { PCI_VENDOR_ID_ADDIDATA,
3516 PCI_DEVICE_ID_ADDIDATA_APCI7300_2,
3517 PCI_ANY_ID,
3518 PCI_ANY_ID,
3519 0,
3520 0,
3521 pbn_b0_1_115200 },
3522
3523 { PCI_VENDOR_ID_ADDIDATA,
3524 PCI_DEVICE_ID_ADDIDATA_APCI7500_3,
3525 PCI_ANY_ID,
3526 PCI_ANY_ID,
3527 0,
3528 0,
3529 pbn_b0_4_115200 },
3530
3531 { PCI_VENDOR_ID_ADDIDATA,
3532 PCI_DEVICE_ID_ADDIDATA_APCI7420_3,
3533 PCI_ANY_ID,
3534 PCI_ANY_ID,
3535 0,
3536 0,
3537 pbn_b0_2_115200 },
3538
3539 { PCI_VENDOR_ID_ADDIDATA,
3540 PCI_DEVICE_ID_ADDIDATA_APCI7300_3,
3541 PCI_ANY_ID,
3542 PCI_ANY_ID,
3543 0,
3544 0,
3545 pbn_b0_1_115200 },
3546
3547 { PCI_VENDOR_ID_ADDIDATA,
3548 PCI_DEVICE_ID_ADDIDATA_APCI7800_3,
3549 PCI_ANY_ID,
3550 PCI_ANY_ID,
3551 0,
3552 0,
3553 pbn_b0_8_115200 },
3554
3555 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835,
3556 PCI_VENDOR_ID_IBM, 0x0299,
3557 0, 0, pbn_b0_bt_2_115200 },
3558
3559
3560
3561
3562
3563 { PCI_ANY_ID, PCI_ANY_ID,
3564 PCI_ANY_ID, PCI_ANY_ID,
3565 PCI_CLASS_COMMUNICATION_SERIAL << 8,
3566 0xffff00, pbn_default },
3567 { PCI_ANY_ID, PCI_ANY_ID,
3568 PCI_ANY_ID, PCI_ANY_ID,
3569 PCI_CLASS_COMMUNICATION_MODEM << 8,
3570 0xffff00, pbn_default },
3571 { PCI_ANY_ID, PCI_ANY_ID,
3572 PCI_ANY_ID, PCI_ANY_ID,
3573 PCI_CLASS_COMMUNICATION_MULTISERIAL << 8,
3574 0xffff00, pbn_default },
3575 { 0, }
3576};
3577
3578static struct pci_driver serial_pci_driver = {
3579 .name = "serial",
3580 .probe = pciserial_init_one,
3581 .remove = __devexit_p(pciserial_remove_one),
3582#ifdef CONFIG_PM
3583 .suspend = pciserial_suspend_one,
3584 .resume = pciserial_resume_one,
3585#endif
3586 .id_table = serial_pci_tbl,
3587};
3588
3589static int __init serial8250_pci_init(void)
3590{
3591 return pci_register_driver(&serial_pci_driver);
3592}
3593
3594static void __exit serial8250_pci_exit(void)
3595{
3596 pci_unregister_driver(&serial_pci_driver);
3597}
3598
3599module_init(serial8250_pci_init);
3600module_exit(serial8250_pci_exit);
3601
3602MODULE_LICENSE("GPL");
3603MODULE_DESCRIPTION("Generic 8250/16x50 PCI serial probe module");
3604MODULE_DEVICE_TABLE(pci, serial_pci_tbl);
3605