xref: /freebsd/sys/dev/puc/pucdata.c (revision ae83180158c4c937f170e31eff311b18c0286a93)
1 /*	$NetBSD: pucdata.c,v 1.25 2001/12/16 22:23:01 thorpej Exp $	*/
2 
3 /*
4  * Copyright (c) 1998, 1999 Christopher G. Demetriou.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. All advertising materials mentioning features or use of this software
15  *    must display the following acknowledgement:
16  *      This product includes software developed by Christopher G. Demetriou
17  *	for the NetBSD Project.
18  * 4. The name of the author may not be used to endorse or promote products
19  *    derived from this software without specific prior written permission
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #include <sys/cdefs.h>
34 __FBSDID("$FreeBSD$");
35 
36 /*
37  * PCI "universal" communications card driver configuration data (used to
38  * match/attach the cards).
39  */
40 
41 #include <sys/param.h>
42 
43 #include <dev/pci/pcireg.h>
44 #include <dev/pci/pcivar.h>
45 #include <dev/sio/sioreg.h>
46 #include <dev/puc/pucvar.h>
47 
48 #define COM_FREQ	DEFAULT_RCLK
49 
50 const struct puc_device_description puc_devices[] = {
51 
52 	{   "Comtrol RocketPort 550/4 RJ45",
53 	    {	0x11fe,	0x8014,	0,	0	},
54 	    {	0xffff,	0xffff,	0,	0	},
55 	    {
56 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
57 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
58 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
59 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
60 	    },
61 	},
62 
63 	{   "Comtrol RocketPort 550/Quad",
64 	    {	0x11fe,	0x8015,	0,	0	},
65 	    {	0xffff,	0xffff,	0,	0	},
66 	    {
67 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
68 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
69 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
70 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
71 	    },
72 	},
73 
74 	{   "Comtrol RocketPort 550/8 RJ11 part A",
75 	    {	0x11fe,	0x8010,	0,	0	},
76 	    {	0xffff,	0xffff,	0,	0	},
77 	    {
78 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
79 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
80 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
81 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
82 	    },
83 	},
84 	{   "Comtrol RocketPort 550/8 RJ11 part B",
85 	    {	0x11fe,	0x8011,	0,	0	},
86 	    {	0xffff,	0xffff,	0,	0	},
87 	    {
88 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
89 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
90 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
91 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
92 	    },
93 	},
94 
95 	{   "Comtrol RocketPort 550/8 Octa part A",
96 	    {	0x11fe,	0x8012,	0,	0	},
97 	    {	0xffff,	0xffff,	0,	0	},
98 	    {
99 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
100 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
101 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
102 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
103 	    },
104 	},
105 	{   "Comtrol RocketPort 550/8 Octa part B",
106 	    {	0x11fe,	0x8013,	0,	0	},
107 	    {	0xffff,	0xffff,	0,	0	},
108 	    {
109 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
110 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
111 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
112 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
113 	    },
114 	},
115 
116 	{   "Comtrol RocketPort 550/8 part A",
117 	    {	0x11fe,	0x8018,	0,	0	},
118 	    {	0xffff,	0xffff,	0,	0	},
119 	    {
120 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
121 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
122 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
123 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
124 	    },
125 	},
126 	{   "Comtrol RocketPort 550/8 part B",
127 	    {	0x11fe,	0x8019,	0,	0	},
128 	    {	0xffff,	0xffff,	0,	0	},
129 	    {
130 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
131 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
132 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
133 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
134 	    },
135 	},
136 
137 	{   "Comtrol RocketPort 550/16 part A",
138 	    {	0x11fe,	0x8016,	0,	0	},
139 	    {	0xffff,	0xffff,	0,	0	},
140 	    {
141 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
142 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
143 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
144 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
145 	    },
146 	},
147 	{   "Comtrol RocketPort 550/16 part B",
148 	    {	0x11fe,	0x8017,	0,	0	},
149 	    {	0xffff,	0xffff,	0,	0	},
150 	    {
151 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
152 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
153 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
154 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
155 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ * 4 },
156 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ * 4 },
157 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ * 4 },
158 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ * 4 },
159 		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ * 4 },
160 		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ * 4 },
161 		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ * 4 },
162 		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ * 4 },
163 	    },
164 	},
165 
166 	/*
167 	 * XXX no entry because I have no data:
168 	 * XXX Dolphin Peripherals 4006 (single parallel)
169 	 */
170 
171 	/*
172 	 * Dolphin Peripherals 4014 (dual parallel port) card.  PLX 9050, with
173 	 * a seemingly-lame EEPROM setup that puts the Dolphin IDs
174 	 * into the subsystem fields, and claims that it's a
175 	 * network/misc (0x02/0x80) device.
176 	 */
177 	{   "Dolphin Peripherals 4014",
178 	    {	0x10b5,	0x9050,	0xd84d,	0x6810	},
179 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
180 	    {
181 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
182 		{ PUC_PORT_TYPE_LPT, 0x24, 0x00, 0x00 },
183 	    },
184 	},
185 
186 	/*
187 	 * XXX Dolphin Peripherals 4025 (single serial)
188 	 * (clashes with Dolphin Peripherals  4036 (2s variant)
189 	 */
190 
191 	/*
192 	 * Dolphin Peripherals 4035 (dual serial port) card.  PLX 9050, with
193 	 * a seemingly-lame EEPROM setup that puts the Dolphin IDs
194 	 * into the subsystem fields, and claims that it's a
195 	 * network/misc (0x02/0x80) device.
196 	 */
197 	{   "Dolphin Peripherals 4035",
198 	    {	0x10b5,	0x9050,	0xd84d,	0x6808	},
199 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
200 	    {
201 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
202 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
203 	    },
204 	},
205 
206 	/*
207 	 * Dolphin Peripherals 4036 (dual serial port) card.
208 	 * (Dolpin 4025 has the same ID but only one port)
209 	 */
210 	{   "Dolphin Peripherals 4036",
211 	    {	0x1409,	0x7168,	0x0,	0x0	},
212 	    {	0xffff,	0xffff,	0x0,	0x0	},
213 	    {
214 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8},
215 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8},
216 	    },
217 	},
218 
219 	/*
220 	 * XXX no entry because I have no data:
221 	 * XXX Dolphin Peripherals 4078 (dual serial and single parallel)
222 	 */
223 
224 
225 	/*
226 	 * SIIG Boards.
227 	 *
228 	 * SIIG provides documentation for their boards at:
229 	 * <URL:http://www.siig.com/driver.htm>
230 	 *
231 	 * Please excuse the weird ordering, it's the order they
232 	 * use in their documentation.
233 	 */
234 
235 	/*
236 	 * SIIG "10x" family boards.
237 	 */
238 
239 	/* SIIG Cyber Serial PCI 16C550 (10x family): 1S */
240 	{   "SIIG Cyber Serial PCI 16C550 (10x family)",
241 	    {	0x131f,	0x1000,	0,	0	},
242 	    {	0xffff,	0xffff,	0,	0	},
243 	    {
244 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
245 	    },
246 	},
247 
248 	/* SIIG Cyber Serial PCI 16C650 (10x family): 1S */
249 	{   "SIIG Cyber Serial PCI 16C650 (10x family)",
250 	    {	0x131f,	0x1001,	0,	0	},
251 	    {	0xffff,	0xffff,	0,	0	},
252 	    {
253 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
254 	    },
255 	},
256 
257 	/* SIIG Cyber Serial PCI 16C850 (10x family): 1S */
258 	{   "SIIG Cyber Serial PCI 16C850 (10x family)",
259 	    {	0x131f,	0x1002,	0,	0	},
260 	    {	0xffff,	0xffff,	0,	0	},
261 	    {
262 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
263 	    },
264 	},
265 
266 	/* SIIG Cyber I/O PCI 16C550 (10x family): 1S, 1P */
267 	{   "SIIG Cyber I/O PCI 16C550 (10x family)",
268 	    {	0x131f,	0x1010,	0,	0	},
269 	    {	0xffff,	0xffff,	0,	0	},
270 	    {
271 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
272 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
273 	    },
274 	},
275 
276 	/* SIIG Cyber I/O PCI 16C650 (10x family): 1S, 1P */
277 	{   "SIIG Cyber I/O PCI 16C650 (10x family)",
278 	    {	0x131f,	0x1011,	0,	0	},
279 	    {	0xffff,	0xffff,	0,	0	},
280 	    {
281 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
282 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
283 	    },
284 	},
285 
286 	/* SIIG Cyber I/O PCI 16C850 (10x family): 1S, 1P */
287 	{   "SIIG Cyber I/O PCI 16C850 (10x family)",
288 	    {	0x131f,	0x1012,	0,	0	},
289 	    {	0xffff,	0xffff,	0,	0	},
290 	    {
291 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
292 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
293 	    },
294 	},
295 
296 	/* SIIG Cyber Parallel PCI (10x family): 1P */
297 	{   "SIIG Cyber Parallel PCI (10x family)",
298 	    {	0x131f,	0x1020,	0,	0	},
299 	    {	0xffff,	0xffff,	0,	0	},
300 	    {
301 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
302 	    },
303 	},
304 
305 	/* SIIG Cyber Parallel Dual PCI (10x family): 2P */
306 	{   "SIIG Cyber Parallel Dual PCI (10x family)",
307 	    {	0x131f,	0x1021,	0,	0	},
308 	    {	0xffff,	0xffff,	0,	0	},
309 	    {
310 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
311 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
312 	    },
313 	},
314 
315 	/* SIIG Cyber Serial Dual PCI 16C550 (10x family): 2S */
316 	{   "SIIG Cyber Serial Dual PCI 16C550 (10x family)",
317 	    {	0x131f,	0x1030,	0,	0	},
318 	    {	0xffff,	0xffff,	0,	0	},
319 	    {
320 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
321 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
322 	    },
323 	},
324 
325 	/* SIIG Cyber Serial Dual PCI 16C650 (10x family): 2S */
326 	{   "SIIG Cyber Serial Dual PCI 16C650 (10x family)",
327 	    {	0x131f,	0x1031,	0,	0	},
328 	    {	0xffff,	0xffff,	0,	0	},
329 	    {
330 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
331 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
332 	    },
333 	},
334 
335 	/* SIIG Cyber Serial Dual PCI 16C850 (10x family): 2S */
336 	{   "SIIG Cyber Serial Dual PCI 16C850 (10x family)",
337 	    {	0x131f,	0x1032,	0,	0	},
338 	    {	0xffff,	0xffff,	0,	0	},
339 	    {
340 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
341 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
342 	    },
343 	},
344 
345 	/* SIIG Cyber 2S1P PCI 16C550 (10x family): 2S, 1P */
346 	{   "SIIG Cyber 2S1P PCI 16C550 (10x family)",
347 	    {	0x131f,	0x1034,	0,	0	},	/* XXX really? */
348 	    {	0xffff,	0xffff,	0,	0	},
349 	    {
350 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
351 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
352 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
353 	    },
354 	},
355 
356 	/* SIIG Cyber 2S1P PCI 16C650 (10x family): 2S, 1P */
357 	{   "SIIG Cyber 2S1P PCI 16C650 (10x family)",
358 	    {	0x131f,	0x1035,	0,	0	},	/* XXX really? */
359 	    {	0xffff,	0xffff,	0,	0	},
360 	    {
361 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
362 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
363 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
364 	    },
365 	},
366 
367 	/* SIIG Cyber 2S1P PCI 16C850 (10x family): 2S, 1P */
368 	{   "SIIG Cyber 2S1P PCI 16C850 (10x family)",
369 	    {	0x131f,	0x1036,	0,	0	},	/* XXX really? */
370 	    {	0xffff,	0xffff,	0,	0	},
371 	    {
372 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
373 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
374 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
375 	    },
376 	},
377 
378 	/* SIIG Cyber 4S PCI 16C550 (10x family): 4S */
379 	{   "SIIG Cyber 4S PCI 16C550 (10x family)",
380 	    {	0x131f,	0x1050,	0,	0	},
381 	    {	0xffff,	0xffff,	0,	0	},
382 	    {
383 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
384 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
385 		{ PUC_PORT_TYPE_COM, 0x20, 0x00, COM_FREQ },
386 		{ PUC_PORT_TYPE_COM, 0x24, 0x00, COM_FREQ },
387 	    },
388 	},
389 
390 	/* SIIG Cyber 4S PCI 16C650 (10x family): 4S */
391 	{   "SIIG Cyber 4S PCI 16C650 (10x family)",
392 	    {	0x131f,	0x1051,	0,	0	},
393 	    {	0xffff,	0xffff,	0,	0	},
394 	    {
395 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
396 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
397 		{ PUC_PORT_TYPE_COM, 0x20, 0x00, COM_FREQ },
398 		{ PUC_PORT_TYPE_COM, 0x24, 0x00, COM_FREQ },
399 	    },
400 	},
401 
402 	/* SIIG Cyber 4S PCI 16C850 (10x family): 4S */
403 	{   "SIIG Cyber 4S PCI 16C850 (10x family)",
404 	    {	0x131f,	0x1052,	0,	0	},
405 	    {	0xffff,	0xffff,	0,	0	},
406 	    {
407 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
408 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
409 		{ PUC_PORT_TYPE_COM, 0x20, 0x00, COM_FREQ },
410 		{ PUC_PORT_TYPE_COM, 0x24, 0x00, COM_FREQ },
411 	    },
412 	},
413 
414 	/*
415 	 * SIIG "20x" family boards.
416 	 */
417 
418 	/* SIIG Cyber Parallel PCI (20x family): 1P */
419 	{   "SIIG Cyber Parallel PCI (20x family)",
420 	    {	0x131f,	0x2020,	0,	0	},
421 	    {	0xffff,	0xffff,	0,	0	},
422 	    {
423 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
424 	    },
425 	},
426 
427 	/* SIIG Cyber Parallel Dual PCI (20x family): 2P */
428 	{   "SIIG Cyber Parallel Dual PCI (20x family)",
429 	    {	0x131f,	0x2021,	0,	0	},
430 	    {	0xffff,	0xffff,	0,	0	},
431 	    {
432 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
433 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
434 	    },
435 	},
436 
437 	/* SIIG Cyber 2P1S PCI 16C550 (20x family): 1S, 2P */
438 	{   "SIIG Cyber 2P1S PCI 16C550 (20x family)",
439 	    {	0x131f,	0x2040,	0,	0	},
440 	    {	0xffff,	0xffff,	0,	0	},
441 	    {
442 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
443 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
444 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
445 	    },
446 	},
447 
448 	/* SIIG Cyber 2P1S PCI 16C650 (20x family): 1S, 2P */
449 	{   "SIIG Cyber 2P1S PCI 16C650 (20x family)",
450 	    {	0x131f,	0x2041,	0,	0	},
451 	    {	0xffff,	0xffff,	0,	0	},
452 	    {
453 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
454 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
455 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
456 	    },
457 	},
458 
459 	/* SIIG Cyber 2P1S PCI 16C850 (20x family): 1S, 2P */
460 	{   "SIIG Cyber 2P1S PCI 16C850 (20x family)",
461 	    {	0x131f,	0x2042,	0,	0	},
462 	    {	0xffff,	0xffff,	0,	0	},
463 	    {
464 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
465 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
466 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
467 	    },
468 	},
469 
470 	/* SIIG Cyber Serial PCI 16C550 (20x family): 1S */
471 	{   "SIIG Cyber Serial PCI 16C550 (20x family)",
472 	    {	0x131f,	0x2000,	0,	0	},
473 	    {	0xffff,	0xffff,	0,	0	},
474 	    {
475 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
476 	    },
477 	},
478 
479 	/* SIIG Cyber Serial PCI 16C650 (20x family): 1S */
480 	{   "SIIG Cyber Serial PCI 16C650 (20x family)",
481 	    {	0x131f,	0x2001,	0,	0	},
482 	    {	0xffff,	0xffff,	0,	0	},
483 	    {
484 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
485 	    },
486 	},
487 
488 	/* SIIG Cyber Serial PCI 16C850 (20x family): 1S */
489 	{   "SIIG Cyber Serial PCI 16C850 (20x family)",
490 	    {	0x131f,	0x2002,	0,	0	},
491 	    {	0xffff,	0xffff,	0,	0	},
492 	    {
493 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
494 	    },
495 	},
496 
497 	/* SIIG Cyber I/O PCI 16C550 (20x family): 1S, 1P */
498 	{   "SIIG Cyber I/O PCI 16C550 (20x family)",
499 	    {	0x131f,	0x2010,	0,	0	},
500 	    {	0xffff,	0xffff,	0,	0	},
501 	    {
502 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
503 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
504 	    },
505 	},
506 
507 	/* SIIG Cyber I/O PCI 16C650 (20x family): 1S, 1P */
508 	{   "SIIG Cyber I/O PCI 16C650 (20x family)",
509 	    {	0x131f,	0x2011,	0,	0	},
510 	    {	0xffff,	0xffff,	0,	0	},
511 	    {
512 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
513 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
514 	    },
515 	},
516 
517 	/* SIIG Cyber I/O PCI 16C850 (20x family): 1S, 1P */
518 	{   "SIIG Cyber I/O PCI 16C850 (20x family)",
519 	    {	0x131f,	0x2012,	0,	0	},
520 	    {	0xffff,	0xffff,	0,	0	},
521 	    {
522 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
523 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
524 	    },
525 	},
526 
527 	/* SIIG Cyber Serial Dual PCI 16C550 (20x family): 2S */
528 	{   "SIIG Cyber Serial Dual PCI 16C550 (20x family)",
529 	    {	0x131f,	0x2030,	0,	0	},
530 	    {	0xffff,	0xffff,	0,	0	},
531 	    {
532 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
533 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
534 	    },
535 	},
536 
537 	/* SIIG Cyber Serial Dual PCI 16C650 (20x family): 2S */
538 	{   "SIIG Cyber Serial Dual PCI 16C650 (20x family)",
539 	    {	0x131f,	0x2031,	0,	0	},
540 	    {	0xffff,	0xffff,	0,	0	},
541 	    {
542 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
543 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
544 	    },
545 	},
546 
547 	/* SIIG Cyber Serial Dual PCI 16C850 (20x family): 2S */
548 	{   "SIIG Cyber Serial Dual PCI 16C850 (20x family)",
549 	    {	0x131f,	0x2032,	0,	0	},
550 	    {	0xffff,	0xffff,	0,	0	},
551 	    {
552 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
553 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
554 	    },
555 	},
556 
557 	/* SIIG Cyber 2S1P PCI 16C550 (20x family): 2S, 1P */
558 	{   "SIIG Cyber 2S1P PCI 16C550 (20x family)",
559 	    {	0x131f,	0x2060,	0,	0	},
560 	    {	0xffff,	0xffff,	0,	0	},
561 	    {
562 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
563 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
564 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
565 	    },
566 	},
567 
568 	/* SIIG Cyber 2S1P PCI 16C650 (20x family): 2S, 1P */
569 	{   "SIIG Cyber 2S1P PCI 16C650 (20x family)",
570 	    {	0x131f,	0x2061,	0,	0	},
571 	    {	0xffff,	0xffff,	0,	0	},
572 	    {
573 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
574 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
575 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
576 	    },
577 	},
578 
579 	/* SIIG Cyber 2S1P PCI 16C850 (20x family): 2S, 1P */
580 	{   "SIIG Cyber 2S1P PCI 16C850 (20x family)",
581 	    {	0x131f,	0x2062,	0,	0	},
582 	    {	0xffff,	0xffff,	0,	0	},
583 	    {
584 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
585 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
586 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
587 	    },
588 	},
589 
590 	/* SIIG Cyber 4S PCI 16C550 (20x family): 4S */
591 	{   "SIIG Cyber 4S PCI 16C550 (20x family)",
592 	    {	0x131f,	0x2050,	0,	0	},
593 	    {	0xffff,	0xffff,	0,	0	},
594 	    {
595 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
596 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
597 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
598 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
599 	    },
600 	},
601 
602 	/* SIIG Cyber 4S PCI 16C650 (20x family): 4S */
603 	{   "SIIG Cyber 4S PCI 16C650 (20x family)",
604 	    {	0x131f,	0x2051,	0,	0	},
605 	    {	0xffff,	0xffff,	0,	0	},
606 	    {
607 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
608 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
609 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
610 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
611 	    },
612 	},
613 
614 	/* SIIG Cyber 4S PCI 16C850 (20x family): 4S */
615 	{   "SIIG Cyber 4S PCI 16C850 (20x family)",
616 	    {	0x131f,	0x2052,	0,	0	},
617 	    {	0xffff,	0xffff,	0,	0	},
618 	    {
619 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
620 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
621 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
622 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
623 	    },
624 	},
625 
626 	/* VScom PCI-400: 4S */
627 	{   "VScom PCI-400",
628 	    {	0x10b5,	0x1077,	0x10b5,	0x1077	},
629 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
630 	    {
631 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
632 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
633 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
634 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
635 	    },
636 	},
637 
638 	/* VScom PCI-800: 8S */
639 	{   "VScom PCI-800",
640 	    {	0x10b5,	0x1076,	0x10b5,	0x1076	},
641 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
642 	    {
643 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
644 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
645 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
646 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
647 		{ PUC_PORT_TYPE_COM, 0x18, 0x20, COM_FREQ * 8 },
648 		{ PUC_PORT_TYPE_COM, 0x18, 0x28, COM_FREQ * 8 },
649 		{ PUC_PORT_TYPE_COM, 0x18, 0x30, COM_FREQ * 8 },
650 		{ PUC_PORT_TYPE_COM, 0x18, 0x38, COM_FREQ * 8 },
651 	    },
652 	},
653 	/*
654 	 * VScom PCI-800H. Uses 8 16950 UART, behind a PCI chips that offers
655 	 * 4 com port on PCI device 0 and 4 on PCI device 1. PCI device 0 has
656 	 * device ID 3 and PCI device 1 device ID 4.
657 	 */
658 	{   "Titan PCI-800H",
659 	    {	0x14d2,	0xa003,	0,	0	},
660 	    {	0xffff,	0xffff,	0,	0	},
661 	    {
662 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
663 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
664 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8 },
665 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8 },
666 	    },
667 	},
668 	{   "Titan PCI-800H",
669 	    {	0x14d2,	0xa004,	0,	0	},
670 	    {	0xffff,	0xffff,	0,	0	},
671 	    {
672 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
673 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
674 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8 },
675 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8 },
676 	    },
677 	},
678         {   "Titan PCI-200H",
679             {   0x14d2, 0xa005, 0,      0       },
680             {   0xffff, 0xffff, 0,      0       },
681             {
682                 { PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
683                 { PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
684             },
685         },
686 
687 	/* NEC PK-UG-X001 K56flex PCI Modem card.
688 	   NEC MARTH bridge chip and Rockwell RCVDL56ACF/SP using. */
689 	{   "NEC PK-UG-X001 K56flex PCI Modem",
690 	    {	0x1033,	0x0074,	0x1033,	0x8014	},
691 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
692 	    {
693 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
694 	    },
695 	},
696 
697 	/* NEC PK-UG-X008 */
698 	{   "NEC PK-UG-X008",
699 	    {	0x1033,	0x007d,	0x1033,	0x8012	},
700 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
701 	    {
702 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ},
703 	    },
704 	},
705 
706 	/* Lava Computers 2SP-PCI */
707 	{   "Lava Computers 2SP-PCI parallel port",
708 	    {	0x1407,	0x8000,	0,	0	},
709 	    {	0xffff,	0xffff,	0,	0	},
710 	    {
711 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
712 	    },
713 	},
714 
715 	/* Lava Computers 2SP-PCI and Quattro-PCI serial ports */
716 	{   "Lava Computers dual serial port",
717 	    {	0x1407,	0x0100,	0,	0	},
718 	    {	0xffff,	0xfffc,	0,	0	},
719 	    {
720 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
721 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
722 	    },
723 	},
724 
725 	/* Lava Computers newer Quattro-PCI serial ports */
726 	{   "Lava Computers Quattro-PCI serial port",
727 	    {	0x1407,	0x0120,	0,	0	},
728 	    {	0xffff,	0xfffc,	0,	0	},
729 	    {
730 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
731 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
732 	    },
733 	},
734 
735 	/* Lava Computers DSerial PCI serial ports */
736 	{   "Lava Computers serial port",
737 	    {	0x1407,	0x0110,	0,	0	},
738 	    {	0xffff,	0xfffc,	0,	0	},
739 	    {
740 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
741 	    },
742 	},
743 
744 	/* Lava Computers Octopus-550 serial ports */
745 	{   "Lava Computers Octopus-550 8-port serial",
746 	    {	0x1407,	0x0180,	0,	0	},
747 	    {	0xffff,	0xfffc,	0,	0	},
748 	    {
749 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
750 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
751 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
752 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
753 	    },
754 	},
755 
756 	/* US Robotics (3Com) PCI Modems */
757 	{   "US Robotics (3Com) 3CP5609 PCI 16550 Modem",
758 	    {	0x12b9,	0x1008,	0,	0	},
759 	    {	0xffff,	0xffff,	0,	0	},
760 	    {
761 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
762 	    },
763 	},
764 
765 	/* Actiontec  56K PCI Master */
766 	{   "Actiontec 56K PCI Master",
767 	    {	0x11c1,	0x0480,	0x0, 	0x0	},
768 	    {	0xffff,	0xffff,	0x0,	0x0	},
769 	    {
770 		{ PUC_PORT_TYPE_COM,	0x14,	0x00, COM_FREQ },
771 	    },
772 	},
773 
774 	/*
775 	 * Boards with an Oxford Semiconductor chip.
776 	 *
777 	 * Oxford Semiconductor provides documentation for their chip at:
778 	 * <URL:http://www.oxsemi.com/products/uarts/index.html>
779 	 *
780 	 * As sold by Kouwell <URL:http://www.kouwell.com/>.
781 	 * I/O Flex PCI I/O Card Model-223 with 4 serial and 1 parallel ports.
782 	 */
783 
784 	/* Oxford Semiconductor OX16PCI954 PCI UARTs */
785 	{   "Qxford Semiconductor OX16PCI954 UARTs",
786 	    {	0x1415,	0x9501,	0,	0	},
787 	    {	0xffff,	0xffff,	0,	0	},
788 	    {
789 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
790 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
791 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
792 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
793 	    },
794 	},
795 
796 	/* Oxford Semiconductor OX16PCI954 PCI Parallel port */
797 	{   "Qxford Semiconductor OX16PCI954 Parallel port",
798 	    {	0x1415,	0x9513,	0,	0	},
799 	    {	0xffff,	0xffff,	0,	0	},
800 	    {
801 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
802 	    },
803 	},
804 
805 	/* NetMos 2S1P PCI 16C650 : 2S, 1P */
806 	{   "NetMos NM9835 Dual UART and 1284 Printer port",
807 	    {	0x9710,	0x9835,	0,	0	},
808 	    {	0xffff,	0xffff,	0,	0	},
809 	    {
810 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
811 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
812 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
813 	    },
814 	},
815 
816 	/*
817 	 * This is the Middle Digital, Inc. PCI-Weasel, which
818 	 * uses a PCI interface implemented in FPGA.
819 	 */
820 	{   "Middle Digital, Inc. Weasel serial port",
821 	    {	0xdeaf,	0x9051,	0,	0	},
822 	    {	0xffff,	0xffff,	0,	0	},
823 	    {
824 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
825 	    },
826 	},
827 
828 	/* SD-LAB PCI I/O Card 4S2P */
829 	{   "Syba Tech Ltd. PCI-4S2P-550-ECP",
830 	    {	0x1592, 0x0781, 0,	0	},
831 	    {	0xffff, 0xffff, 0,	0	},
832 	    {
833 		{ PUC_PORT_TYPE_COM, 0x10, 0x2e8, COM_FREQ },
834 		{ PUC_PORT_TYPE_COM, 0x10, 0x2f8, COM_FREQ },
835 		{ PUC_PORT_TYPE_LPT, 0x10, 0x000, 0x00 },
836 		{ PUC_PORT_TYPE_COM, 0x10, 0x3e8, COM_FREQ },
837 		{ PUC_PORT_TYPE_COM, 0x10, 0x3f8, COM_FREQ },
838 		{ PUC_PORT_TYPE_LPT, 0x10, 0x000, 0x00 },
839 	    },
840 	},
841 
842 	/* Moxa Technologies Co., Ltd. PCI I/O Card 4S RS232/422/485 */
843 	{   "Moxa Technologies, Industio CP-114",
844 	    {	0x1393,	0x1141,	0,	0	},
845 	    {	0xffff,	0xffff,	0,	0,	},
846 	    {
847 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
848 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
849 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
850 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
851 	    },
852 	},
853 
854 	/* Moxa Technologies Co., Ltd. PCI I/O Card 8S RS232 */
855 	{   "Moxa Technologies, C168H/PCI",
856 	    {	0x1393,	0x1680,	0,	0	},
857 	    {	0xffff,	0xffff,	0,	0,	},
858 	    {
859 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
860 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
861 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
862 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
863 		{ PUC_PORT_TYPE_COM, 0x18, 0x20, COM_FREQ * 8 },
864 		{ PUC_PORT_TYPE_COM, 0x18, 0x28, COM_FREQ * 8 },
865 		{ PUC_PORT_TYPE_COM, 0x18, 0x30, COM_FREQ * 8 },
866 		{ PUC_PORT_TYPE_COM, 0x18, 0x38, COM_FREQ * 8 },
867 	    },
868 	},
869 
870 	{   "Avlab Technology, PCI IO 2S",
871 	    {	0x14db,	0x2130,	0,	0	},
872 	    {	0xffff,	0xffff,	0,	0	},
873 	    {
874 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
875 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
876 	    },
877 	},
878 
879         /* Decision Computer Inc, serial ports */
880         {   "Decision Computer Inc, PCCOM 4-port serial",
881             {   0x6666, 0x0001, 0,      0       },
882             {   0xffff, 0xffff, 0,      0       },
883             {
884                 { PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
885                 { PUC_PORT_TYPE_COM, 0x1c, 0x08, COM_FREQ },
886                 { PUC_PORT_TYPE_COM, 0x1c, 0x10, COM_FREQ },
887                 { PUC_PORT_TYPE_COM, 0x1c, 0x18, COM_FREQ },
888             },
889         },
890 
891 	{   "PCCOM dual port RS232/422/485",
892 	    {	0x6666,	0x0004,	0,	0	},
893 	    {	0xffff,	0xffff,	0,	0	},
894 	    {
895 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
896 		{ PUC_PORT_TYPE_COM, 0x1c, 0x08, COM_FREQ },
897 	    },
898 	},
899 
900 	{ 0 }
901 };
902