xref: /freebsd/sys/dev/puc/pucdata.c (revision 2546665afcaf0d53dc2c7058fee96354b3680f5a)
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 int puc_config_win877(struct puc_softc *);
51 
52 const struct puc_device_description puc_devices[] = {
53 
54 	{   "Sunix SUN1889",
55 	    {	0x0009,	0x7168,	0,	0	},
56 	    {	0xffff,	0xffff,	0,	0	},
57 	    {
58 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
59 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
60 	    },
61 	},
62 
63 	{   "Diva Serial [GSP] Multiport UART",
64 	    {	0x103c,	0x1048,	0x103c,	0x1282	},
65 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
66 	    {
67 		{ PUC_PORT_TYPE_UART, 0x10, 0x00, 0, PUC_FLAGS_MEMORY },
68 		{ PUC_PORT_TYPE_UART, 0x10, 0x10, 0, PUC_FLAGS_MEMORY },
69 		{ PUC_PORT_TYPE_UART, 0x10, 0x38, 0, PUC_FLAGS_MEMORY },
70 	    },
71 	},
72 
73 	{   "Comtrol RocketPort 550/4 RJ45",
74 	    {	0x11fe,	0x8014,	0,	0	},
75 	    {	0xffff,	0xffff,	0,	0	},
76 	    {
77 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
78 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
79 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
80 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
81 	    },
82 	},
83 
84 	{   "Comtrol RocketPort 550/Quad",
85 	    {	0x11fe,	0x8015,	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 RJ11 part A",
96 	    {	0x11fe,	0x8010,	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 RJ11 part B",
106 	    {	0x11fe,	0x8011,	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 Octa part A",
117 	    {	0x11fe,	0x8012,	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 Octa part B",
127 	    {	0x11fe,	0x8013,	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/8 part A",
138 	    {	0x11fe,	0x8018,	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/8 part B",
148 	    {	0x11fe,	0x8019,	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 	    },
156 	},
157 
158 	{   "Comtrol RocketPort 550/16 part A",
159 	    {	0x11fe,	0x8016,	0,	0	},
160 	    {	0xffff,	0xffff,	0,	0	},
161 	    {
162 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
163 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
164 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
165 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
166 	    },
167 	},
168 	{   "Comtrol RocketPort 550/16 part B",
169 	    {	0x11fe,	0x8017,	0,	0	},
170 	    {	0xffff,	0xffff,	0,	0	},
171 	    {
172 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
173 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
174 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
175 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
176 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ * 4 },
177 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ * 4 },
178 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ * 4 },
179 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ * 4 },
180 		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ * 4 },
181 		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ * 4 },
182 		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ * 4 },
183 		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ * 4 },
184 	    },
185 	},
186 
187 	/*
188 	 * XXX no entry because I have no data:
189 	 * XXX Dolphin Peripherals 4006 (single parallel)
190 	 */
191 
192 	/*
193 	 * Dolphin Peripherals 4014 (dual parallel port) card.  PLX 9050, with
194 	 * a seemingly-lame EEPROM setup that puts the Dolphin IDs
195 	 * into the subsystem fields, and claims that it's a
196 	 * network/misc (0x02/0x80) device.
197 	 */
198 	{   "Dolphin Peripherals 4014",
199 	    {	0x10b5,	0x9050,	0xd84d,	0x6810	},
200 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
201 	    {
202 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
203 		{ PUC_PORT_TYPE_LPT, 0x24, 0x00, 0x00 },
204 	    },
205 	},
206 
207 	/*
208 	 * XXX Dolphin Peripherals 4025 (single serial)
209 	 * (clashes with Dolphin Peripherals  4036 (2s variant)
210 	 */
211 
212 	/*
213 	 * Dolphin Peripherals 4035 (dual serial port) card.  PLX 9050, with
214 	 * a seemingly-lame EEPROM setup that puts the Dolphin IDs
215 	 * into the subsystem fields, and claims that it's a
216 	 * network/misc (0x02/0x80) device.
217 	 */
218 	{   "Dolphin Peripherals 4035",
219 	    {	0x10b5,	0x9050,	0xd84d,	0x6808	},
220 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
221 	    {
222 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
223 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
224 	    },
225 	},
226 
227 	/*
228 	 * Dolphin Peripherals 4036 (dual serial port) card.
229 	 * (Dolpin 4025 has the same ID but only one port)
230 	 */
231 	{   "Dolphin Peripherals 4036",
232 	    {	0x1409,	0x7168,	0,	0	},
233 	    {	0xffff,	0xffff,	0,	0	},
234 	    {
235 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
236 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
237 	    },
238 	},
239 
240 	/*
241 	 * XXX no entry because I have no data:
242 	 * XXX Dolphin Peripherals 4078 (dual serial and single parallel)
243 	 */
244 
245 
246 	/*
247 	 * SIIG Boards.
248 	 *
249 	 * SIIG provides documentation for their boards at:
250 	 * <URL:http://www.siig.com/driver.htm>
251 	 *
252 	 * Please excuse the weird ordering, it's the order they
253 	 * use in their documentation.
254 	 */
255 
256 	/*
257 	 * SIIG "10x" family boards.
258 	 */
259 
260 	/* SIIG Cyber Serial PCI 16C550 (10x family): 1S */
261 	{   "SIIG Cyber Serial PCI 16C550 (10x family)",
262 	    {	0x131f,	0x1000,	0,	0	},
263 	    {	0xffff,	0xffff,	0,	0	},
264 	    {
265 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
266 	    },
267 	},
268 
269 	/* SIIG Cyber Serial PCI 16C650 (10x family): 1S */
270 	{   "SIIG Cyber Serial PCI 16C650 (10x family)",
271 	    {	0x131f,	0x1001,	0,	0	},
272 	    {	0xffff,	0xffff,	0,	0	},
273 	    {
274 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
275 	    },
276 	},
277 
278 	/* SIIG Cyber Serial PCI 16C850 (10x family): 1S */
279 	{   "SIIG Cyber Serial PCI 16C850 (10x family)",
280 	    {	0x131f,	0x1002,	0,	0	},
281 	    {	0xffff,	0xffff,	0,	0	},
282 	    {
283 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
284 	    },
285 	},
286 
287 	/* SIIG Cyber I/O PCI 16C550 (10x family): 1S, 1P */
288 	{   "SIIG Cyber I/O PCI 16C550 (10x family)",
289 	    {	0x131f,	0x1010,	0,	0	},
290 	    {	0xffff,	0xffff,	0,	0	},
291 	    {
292 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
293 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
294 	    },
295 	},
296 
297 	/* SIIG Cyber I/O PCI 16C650 (10x family): 1S, 1P */
298 	{   "SIIG Cyber I/O PCI 16C650 (10x family)",
299 	    {	0x131f,	0x1011,	0,	0	},
300 	    {	0xffff,	0xffff,	0,	0	},
301 	    {
302 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
303 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
304 	    },
305 	},
306 
307 	/* SIIG Cyber I/O PCI 16C850 (10x family): 1S, 1P */
308 	{   "SIIG Cyber I/O PCI 16C850 (10x family)",
309 	    {	0x131f,	0x1012,	0,	0	},
310 	    {	0xffff,	0xffff,	0,	0	},
311 	    {
312 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
313 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
314 	    },
315 	},
316 
317 	/* SIIG Cyber Parallel PCI (10x family): 1P */
318 	{   "SIIG Cyber Parallel PCI (10x family)",
319 	    {	0x131f,	0x1020,	0,	0	},
320 	    {	0xffff,	0xffff,	0,	0	},
321 	    {
322 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
323 	    },
324 	},
325 
326 	/* SIIG Cyber Parallel Dual PCI (10x family): 2P */
327 	{   "SIIG Cyber Parallel Dual PCI (10x family)",
328 	    {	0x131f,	0x1021,	0,	0	},
329 	    {	0xffff,	0xffff,	0,	0	},
330 	    {
331 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
332 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
333 	    },
334 	},
335 
336 	/* SIIG Cyber Serial Dual PCI 16C550 (10x family): 2S */
337 	{   "SIIG Cyber Serial Dual PCI 16C550 (10x family)",
338 	    {	0x131f,	0x1030,	0,	0	},
339 	    {	0xffff,	0xffff,	0,	0	},
340 	    {
341 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
342 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
343 	    },
344 	},
345 
346 	/* SIIG Cyber Serial Dual PCI 16C650 (10x family): 2S */
347 	{   "SIIG Cyber Serial Dual PCI 16C650 (10x family)",
348 	    {	0x131f,	0x1031,	0,	0	},
349 	    {	0xffff,	0xffff,	0,	0	},
350 	    {
351 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
352 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
353 	    },
354 	},
355 
356 	/* SIIG Cyber Serial Dual PCI 16C850 (10x family): 2S */
357 	{   "SIIG Cyber Serial Dual PCI 16C850 (10x family)",
358 	    {	0x131f,	0x1032,	0,	0	},
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 	    },
364 	},
365 
366 	/* SIIG Cyber 2S1P PCI 16C550 (10x family): 2S, 1P */
367 	{   "SIIG Cyber 2S1P PCI 16C550 (10x family)",
368 	    {	0x131f,	0x1034,	0,	0	},	/* XXX really? */
369 	    {	0xffff,	0xffff,	0,	0	},
370 	    {
371 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
372 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
373 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
374 	    },
375 	},
376 
377 	/* SIIG Cyber 2S1P PCI 16C650 (10x family): 2S, 1P */
378 	{   "SIIG Cyber 2S1P PCI 16C650 (10x family)",
379 	    {	0x131f,	0x1035,	0,	0	},	/* XXX really? */
380 	    {	0xffff,	0xffff,	0,	0	},
381 	    {
382 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
383 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
384 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
385 	    },
386 	},
387 
388 	/* SIIG Cyber 2S1P PCI 16C850 (10x family): 2S, 1P */
389 	{   "SIIG Cyber 2S1P PCI 16C850 (10x family)",
390 	    {	0x131f,	0x1036,	0,	0	},	/* XXX really? */
391 	    {	0xffff,	0xffff,	0,	0	},
392 	    {
393 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
394 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
395 		{ PUC_PORT_TYPE_LPT, 0x20, 0x00, 0x00 },
396 	    },
397 	},
398 
399 	/* SIIG Cyber 4S PCI 16C550 (10x family): 4S */
400 	{   "SIIG Cyber 4S PCI 16C550 (10x family)",
401 	    {	0x131f,	0x1050,	0,	0	},
402 	    {	0xffff,	0xffff,	0,	0	},
403 	    {
404 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
405 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
406 		{ PUC_PORT_TYPE_COM, 0x20, 0x00, COM_FREQ },
407 		{ PUC_PORT_TYPE_COM, 0x24, 0x00, COM_FREQ },
408 	    },
409 	},
410 
411 	/* SIIG Cyber 4S PCI 16C650 (10x family): 4S */
412 	{   "SIIG Cyber 4S PCI 16C650 (10x family)",
413 	    {	0x131f,	0x1051,	0,	0	},
414 	    {	0xffff,	0xffff,	0,	0	},
415 	    {
416 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
417 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
418 		{ PUC_PORT_TYPE_COM, 0x20, 0x00, COM_FREQ },
419 		{ PUC_PORT_TYPE_COM, 0x24, 0x00, COM_FREQ },
420 	    },
421 	},
422 
423 	/* SIIG Cyber 4S PCI 16C850 (10x family): 4S */
424 	{   "SIIG Cyber 4S PCI 16C850 (10x family)",
425 	    {	0x131f,	0x1052,	0,	0	},
426 	    {	0xffff,	0xffff,	0,	0	},
427 	    {
428 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
429 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
430 		{ PUC_PORT_TYPE_COM, 0x20, 0x00, COM_FREQ },
431 		{ PUC_PORT_TYPE_COM, 0x24, 0x00, COM_FREQ },
432 	    },
433 	},
434 
435 	/*
436 	 * SIIG "20x" family boards.
437 	 */
438 
439 	/* SIIG Cyber Parallel PCI (20x family): 1P */
440 	{   "SIIG Cyber Parallel PCI (20x family)",
441 	    {	0x131f,	0x2020,	0,	0	},
442 	    {	0xffff,	0xffff,	0,	0	},
443 	    {
444 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
445 	    },
446 	},
447 
448 	/* SIIG Cyber Parallel Dual PCI (20x family): 2P */
449 	{   "SIIG Cyber Parallel Dual PCI (20x family)",
450 	    {	0x131f,	0x2021,	0,	0	},
451 	    {	0xffff,	0xffff,	0,	0	},
452 	    {
453 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
454 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
455 	    },
456 	},
457 
458 	/* SIIG Cyber 2P1S PCI 16C550 (20x family): 1S, 2P */
459 	{   "SIIG Cyber 2P1S PCI 16C550 (20x family)",
460 	    {	0x131f,	0x2040,	0,	0	},
461 	    {	0xffff,	0xffff,	0,	0	},
462 	    {
463 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
464 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
465 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
466 	    },
467 	},
468 
469 	/* SIIG Cyber 2P1S PCI 16C650 (20x family): 1S, 2P */
470 	{   "SIIG Cyber 2P1S PCI 16C650 (20x family)",
471 	    {	0x131f,	0x2041,	0,	0	},
472 	    {	0xffff,	0xffff,	0,	0	},
473 	    {
474 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
475 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
476 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
477 	    },
478 	},
479 
480 	/* SIIG Cyber 2P1S PCI 16C850 (20x family): 1S, 2P */
481 	{   "SIIG Cyber 2P1S PCI 16C850 (20x family)",
482 	    {	0x131f,	0x2042,	0,	0	},
483 	    {	0xffff,	0xffff,	0,	0	},
484 	    {
485 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
486 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
487 		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00, 0x00 },
488 	    },
489 	},
490 
491 	/* SIIG Cyber Serial PCI 16C550 (20x family): 1S */
492 	{   "SIIG Cyber Serial PCI 16C550 (20x family)",
493 	    {	0x131f,	0x2000,	0,	0	},
494 	    {	0xffff,	0xffff,	0,	0	},
495 	    {
496 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
497 	    },
498 	},
499 
500 	/* SIIG Cyber Serial PCI 16C650 (20x family): 1S */
501 	{   "SIIG Cyber Serial PCI 16C650 (20x family)",
502 	    {	0x131f,	0x2001,	0,	0	},
503 	    {	0xffff,	0xffff,	0,	0	},
504 	    {
505 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
506 	    },
507 	},
508 
509 	/* SIIG Cyber Serial PCI 16C850 (20x family): 1S */
510 	{   "SIIG Cyber Serial PCI 16C850 (20x family)",
511 	    {	0x131f,	0x2002,	0,	0	},
512 	    {	0xffff,	0xffff,	0,	0	},
513 	    {
514 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
515 	    },
516 	},
517 
518 	/* SIIG Cyber I/O PCI 16C550 (20x family): 1S, 1P */
519 	{   "SIIG Cyber I/O PCI 16C550 (20x family)",
520 	    {	0x131f,	0x2010,	0,	0	},
521 	    {	0xffff,	0xffff,	0,	0	},
522 	    {
523 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
524 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
525 	    },
526 	},
527 
528 	/* SIIG Cyber I/O PCI 16C650 (20x family): 1S, 1P */
529 	{   "SIIG Cyber I/O PCI 16C650 (20x family)",
530 	    {	0x131f,	0x2011,	0,	0	},
531 	    {	0xffff,	0xffff,	0,	0	},
532 	    {
533 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
534 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
535 	    },
536 	},
537 
538 	/* SIIG Cyber I/O PCI 16C850 (20x family): 1S, 1P */
539 	{   "SIIG Cyber I/O PCI 16C850 (20x family)",
540 	    {	0x131f,	0x2012,	0,	0	},
541 	    {	0xffff,	0xffff,	0,	0	},
542 	    {
543 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
544 		{ PUC_PORT_TYPE_LPT, 0x14, 0x00, 0x00 },
545 	    },
546 	},
547 
548 	/* SIIG Cyber Serial Dual PCI 16C550 (20x family): 2S */
549 	{   "SIIG Cyber Serial Dual PCI 16C550 (20x family)",
550 	    {	0x131f,	0x2030,	0,	0	},
551 	    {	0xffff,	0xffff,	0,	0	},
552 	    {
553 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
554 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
555 	    },
556 	},
557 
558 	/* SIIG Cyber Serial Dual PCI 16C650 (20x family): 2S */
559 	{   "SIIG Cyber Serial Dual PCI 16C650 (20x family)",
560 	    {	0x131f,	0x2031,	0,	0	},
561 	    {	0xffff,	0xffff,	0,	0	},
562 	    {
563 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
564 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
565 	    },
566 	},
567 
568 	/* SIIG Cyber Serial Dual PCI 16C850 (20x family): 2S */
569 	{   "SIIG Cyber Serial Dual PCI 16C850 (20x family)",
570 	    {	0x131f,	0x2032,	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 	    },
576 	},
577 
578 	/* SIIG Cyber 2S1P PCI 16C550 (20x family): 2S, 1P */
579 	{   "SIIG Cyber 2S1P PCI 16C550 (20x family)",
580 	    {	0x131f,	0x2060,	0,	0	},
581 	    {	0xffff,	0xffff,	0,	0	},
582 	    {
583 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
584 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
585 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
586 	    },
587 	},
588 
589 	/* SIIG Cyber 2S1P PCI 16C650 (20x family): 2S, 1P */
590 	{   "SIIG Cyber 2S1P PCI 16C650 (20x family)",
591 	    {	0x131f,	0x2061,	0,	0	},
592 	    {	0xffff,	0xffff,	0,	0	},
593 	    {
594 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
595 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
596 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
597 	    },
598 	},
599 
600 	/* SIIG Cyber 2S1P PCI 16C850 (20x family): 2S, 1P */
601 	{   "SIIG Cyber 2S1P PCI 16C850 (20x family)",
602 	    {	0x131f,	0x2062,	0,	0	},
603 	    {	0xffff,	0xffff,	0,	0	},
604 	    {
605 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
606 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
607 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
608 	    },
609 	},
610 
611 	/* SIIG Cyber 4S PCI 16C550 (20x family): 4S */
612 	{   "SIIG Cyber 4S PCI 16C550 (20x family)",
613 	    {	0x131f,	0x2050,	0,	0	},
614 	    {	0xffff,	0xffff,	0,	0	},
615 	    {
616 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
617 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
618 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
619 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
620 	    },
621 	},
622 
623 	/* SIIG Cyber 4S PCI 16C650 (20x family): 4S */
624 	{   "SIIG Cyber 4S PCI 16C650 (20x family)",
625 	    {	0x131f,	0x2051,	0,	0	},
626 	    {	0xffff,	0xffff,	0,	0	},
627 	    {
628 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
629 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
630 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
631 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
632 	    },
633 	},
634 
635 	/* SIIG Cyber 4S PCI 16C850 (20x family): 4S */
636 	{   "SIIG Cyber 4S PCI 16C850 (20x family)",
637 	    {	0x131f,	0x2052,	0,	0	},
638 	    {	0xffff,	0xffff,	0,	0	},
639 	    {
640 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
641 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
642 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
643 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
644 	    },
645 	},
646 
647 	/* VScom PCI-200L: 2S */
648 	{   "VScom PCI-200L",
649 	    {	0x14d2,	0x8020,	0,	0	},
650 	    {	0xffff,	0xffff,	0,	0	},
651 	    {
652 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ * 8 },
653 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
654 	    },
655 	},
656 
657 	/* VScom PCI-400: 4S */
658 	{   "VScom PCI-400",
659 	    {	0x10b5,	0x1077,	0x10b5,	0x1077	},
660 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
661 	    {
662 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
663 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
664 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
665 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
666 	    },
667 	},
668 
669 	/* VScom PCI-800: 8S */
670 	{   "VScom PCI-800",
671 	    {	0x10b5,	0x1076,	0x10b5,	0x1076	},
672 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
673 	    {
674 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
675 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
676 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
677 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
678 		{ PUC_PORT_TYPE_COM, 0x18, 0x20, COM_FREQ * 8 },
679 		{ PUC_PORT_TYPE_COM, 0x18, 0x28, COM_FREQ * 8 },
680 		{ PUC_PORT_TYPE_COM, 0x18, 0x30, COM_FREQ * 8 },
681 		{ PUC_PORT_TYPE_COM, 0x18, 0x38, COM_FREQ * 8 },
682 	    },
683 	},
684 	/*
685 	 * VScom PCI-800H. Uses 8 16950 UART, behind a PCI chips that offers
686 	 * 4 com port on PCI device 0 and 4 on PCI device 1. PCI device 0 has
687 	 * device ID 3 and PCI device 1 device ID 4.
688 	 */
689 	{   "Titan PCI-800H",
690 	    {	0x14d2,	0xa003,	0,	0	},
691 	    {	0xffff,	0xffff,	0,	0	},
692 	    {
693 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
694 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
695 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8 },
696 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8 },
697 	    },
698 	},
699 	{   "Titan PCI-800H",
700 	    {	0x14d2,	0xa004,	0,	0	},
701 	    {	0xffff,	0xffff,	0,	0	},
702 	    {
703 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
704 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
705 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8 },
706 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8 },
707 	    },
708 	},
709 	{   "Titan PCI-200H",
710 	    {	0x14d2,	0xa005,	0,	0	},
711 	    {	0xffff,	0xffff,	0,	0	},
712 	    {
713 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
714 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
715 	    },
716 	},
717 
718 	{   "Titan VScom PCI-200HV2",	/* 2S */
719 	    {	0x14d2,	0xe020,	0,	0	},
720 	    {	0xffff,	0xffff,	0,	0	},
721 	    {
722 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
723 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ * 8 },
724 	    },
725 	},
726 	/*
727 	 * VScom (Titan?) PCI-800L.  More modern variant of the
728 	 * PCI-800.  Uses 6 discrete 16550 UARTs, plus another
729 	 * two of them obviously implemented as macro cells in
730 	 * the ASIC.  This causes the weird port access pattern
731 	 * below, where two of the IO port ranges each access
732 	 * one of the ASIC UARTs, and a block of IO addresses
733 	 * access the external UARTs.
734 	 */
735 	{   "Titan VScom PCI-800L",
736 	    {	0x14d2,	0x8080,	0,	0	},
737 	    {	0xffff,	0xffff,	0,	0	},
738 	    {
739 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ * 8 },
740 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
741 		{ PUC_PORT_TYPE_COM, 0x20, 0x00, COM_FREQ * 8 },
742 		{ PUC_PORT_TYPE_COM, 0x20, 0x08, COM_FREQ * 8 },
743 		{ PUC_PORT_TYPE_COM, 0x20, 0x10, COM_FREQ * 8 },
744 		{ PUC_PORT_TYPE_COM, 0x20, 0x18, COM_FREQ * 8 },
745 		{ PUC_PORT_TYPE_COM, 0x20, 0x20, COM_FREQ * 8 },
746 		{ PUC_PORT_TYPE_COM, 0x20, 0x28, COM_FREQ * 8 },
747 	    },
748 	},
749 
750 	/*
751 	 * NEC PK-UG-X001 K56flex PCI Modem card.
752 	 * Uses NEC MARTH bridge chip and Rockwell RCVDL56ACF/SP.
753 	 */
754 	{   "NEC PK-UG-X001 K56flex PCI Modem",
755 	    {	0x1033,	0x0074,	0x1033,	0x8014	},
756 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
757 	    {
758 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
759 	    },
760 	},
761 
762 	/* NEC PK-UG-X008 */
763 	{   "NEC PK-UG-X008",
764 	    {	0x1033,	0x007d,	0x1033,	0x8012	},
765 	    {	0xffff,	0xffff,	0xffff,	0xffff	},
766 	    {
767 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
768 	    },
769 	},
770 
771 	/* Lava Computers 2SP-PCI */
772 	{   "Lava Computers 2SP-PCI parallel port",
773 	    {	0x1407,	0x8000,	0,	0	},
774 	    {	0xffff,	0xffff,	0,	0	},
775 	    {
776 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
777 	    },
778 	},
779 
780 	/* Lava Computers 2SP-PCI and Quattro-PCI serial ports */
781 	{   "Lava Computers dual serial port",
782 	    {	0x1407,	0x0100,	0,	0	},
783 	    {	0xffff,	0xfffc,	0,	0	},
784 	    {
785 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
786 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
787 	    },
788 	},
789 
790 	/* Lava Computers newer Quattro-PCI serial ports */
791 	{   "Lava Computers Quattro-PCI serial port",
792 	    {	0x1407,	0x0120,	0,	0	},
793 	    {	0xffff,	0xfffc,	0,	0	},
794 	    {
795 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
796 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
797 	    },
798 	},
799 
800 	/* Lava Computers DSerial PCI serial ports */
801 	{   "Lava Computers serial port",
802 	    {	0x1407,	0x0110,	0,	0	},
803 	    {	0xffff,	0xfffc,	0,	0	},
804 	    {
805 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
806 	    },
807 	},
808 
809 	/* Lava Computers Octopus-550 serial ports */
810 	{   "Lava Computers Octopus-550 8-port serial",
811 	    {	0x1407,	0x0180,	0,	0	},
812 	    {	0xffff,	0xfffc,	0,	0	},
813 	    {
814 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
815 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
816 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
817 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
818 	    },
819 	},
820 
821 	/* US Robotics (3Com) PCI Modems */
822 	{   "US Robotics (3Com) 3CP5609 PCI 16550 Modem",
823 	    {	0x12b9,	0x1008,	0,	0	},
824 	    {	0xffff,	0xffff,	0,	0	},
825 	    {
826 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
827 	    },
828 	},
829 
830 	/* Actiontec 56K PCI Master */
831 	{   "Actiontec 56K PCI Master",
832 	    {	0x11c1,	0x0480,	0,	0	},
833 	    {	0xffff,	0xffff,	0,	0	},
834 	    {
835 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
836 	    },
837 	},
838 
839 	/*
840 	 * Boards with an Oxford Semiconductor chip.
841 	 *
842 	 * Oxford Semiconductor provides documentation for their chip at:
843 	 * <URL:http://www.oxsemi.com/products/uarts/index.html>
844 	 *
845 	 * As sold by Kouwell <URL:http://www.kouwell.com/>.
846 	 * I/O Flex PCI I/O Card Model-223 with 4 serial and 1 parallel ports.
847 	 */
848 
849 	/* Oxford Semiconductor OX16PCI954 PCI UARTs */
850 	{   "Oxford Semiconductor OX16PCI954 UARTs",
851 	    {	0x1415,	0x9501,	0,	0	},
852 	    {	0xffff,	0xffff,	0,	0	},
853 	    {
854 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
855 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
856 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
857 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
858 	    },
859 	},
860 
861 	/* Oxford Semiconductor OX16PCI954 PCI UARTs */
862 	{   "Oxford Semiconductor OX16PCI954 UARTs",
863 	    {	0x1415,	0x950a,	0,	0	},
864 	    {	0xffff,	0xffff,	0,	0	},
865 	    {
866 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
867 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
868 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
869 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
870 	    },
871 	},
872 
873 	/* Oxford Semiconductor OX16PCI954 PCI Parallel port */
874 	{   "Oxford Semiconductor OX16PCI954 Parallel port",
875 	    {	0x1415,	0x9513,	0,	0	},
876 	    {	0xffff,	0xffff,	0,	0	},
877 	    {
878 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
879 	    },
880 	},
881 
882 	/* Oxford Semiconductor OX12PCI840 PCI Parallel port */
883 	{   "Oxford Semiconductor OX12PCI840 Parallel port",
884 	    {	0x1415,	0x8403,	0,	0	},
885 	    {	0xffff,	0xffff,	0,	0	},
886 	    {
887 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
888 	    },
889 	},
890 
891 	/*
892 	 * Oxford Semiconductor OX9160/OX16PCI954 PCI UARTS
893 	 * Second chip on Exsys EX-41098 8x cards
894 	 */
895 	{   "Oxford Semiconductor OX9160/OX16PCI954 UARTs (function 1)",
896 	    {	0x1415,	0x9511,	0,	0	},
897 	    {	0xffff,	0xffff,	0,	0	},
898 	    {
899 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
900 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
901 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
902 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
903 	    },
904 	},
905 
906 	/* NetMos 2S1P PCI 16C650 : 2S, 1P */
907 	{   "NetMos NM9835 Dual UART and 1284 Printer port",
908 	    {	0x9710,	0x9835,	0,	0	},
909 	    {	0xffff,	0xffff,	0,	0	},
910 	    {
911 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
912 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
913 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
914 	    },
915 	},
916 
917 	/* NetMos 4S0P PCI: 4S, 0P */
918 	{   "NetMos NM9845 Quad UART",
919 	    {	0x9710,	0x9845,	0,	0	},
920 	    {	0xffff,	0xffff,	0,	0	},
921 	    {
922 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
923 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
924 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
925 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
926 	    },
927 	},
928 
929 	/*
930 	 * This is the Middle Digital, Inc. PCI-Weasel, which
931 	 * uses a PCI interface implemented in FPGA.
932 	 */
933 	{   "Middle Digital, Inc. Weasel serial port",
934 	    {	0xdeaf,	0x9051,	0,	0	},
935 	    {	0xffff,	0xffff,	0,	0	},
936 	    {
937 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
938 	    },
939 	},
940 
941 	/* SD-LAB PCI I/O Card 4S2P */
942 	{   "Syba Tech Ltd. PCI-4S2P-550-ECP",
943 	    {	0x1592,	0x0781,	0,	0	},
944 	    {	0xffff,	0xffff,	0,	0	},
945 	    {
946 		{ PUC_PORT_TYPE_COM, 0x10, 0x2e8, COM_FREQ },
947 		{ PUC_PORT_TYPE_COM, 0x10, 0x2f8, COM_FREQ },
948 		{ PUC_PORT_TYPE_LPT, 0x10, 0x000, 0x00 },
949 		{ PUC_PORT_TYPE_COM, 0x10, 0x3e8, COM_FREQ },
950 		{ PUC_PORT_TYPE_COM, 0x10, 0x3f8, COM_FREQ },
951 		{ PUC_PORT_TYPE_LPT, 0x10, 0x000, 0x00 },
952 	    },
953 	    .init = puc_config_win877,
954 	},
955 
956 	/* Moxa Technologies Co., Ltd. PCI I/O Card 4S RS232 */
957 	{   "Moxa Technologies, Smartio C104H/PCI",
958 	    {	0x1393,	0x1040,	0,	0	},
959 	    {	0xffff,	0xffff,	0,	0	},
960 	    {
961 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
962 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
963 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
964 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
965 	    },
966 	},
967 
968 	/* Moxa Technologies Co., Ltd. PCI I/O Card 4S RS232 */
969 	{   "Moxa Technologies, Smartio CP-104UL/PCI",
970 	    {	0x1393,	0x1041,	0,	0	},
971 	    {	0xffff,	0xffff,	0,	0	},
972 	    {
973 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
974 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
975 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
976 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
977 	    },
978 	},
979 
980 	/* Moxa Technologies Co., Ltd. PCI I/O Card 4S RS232/422/485 */
981 	{   "Moxa Technologies, Industio CP-114",
982 	    {	0x1393,	0x1141,	0,	0	},
983 	    {	0xffff,	0xffff,	0,	0	},
984 	    {
985 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
986 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
987 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
988 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
989 	    },
990 	},
991 
992 	/* Moxa Technologies Co., Ltd. PCI I/O Card 8S RS232 */
993 	{   "Moxa Technologies, C168H/PCI",
994 	    {	0x1393,	0x1680,	0,	0	},
995 	    {	0xffff,	0xffff,	0,	0	},
996 	    {
997 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
998 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
999 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
1000 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
1001 		{ PUC_PORT_TYPE_COM, 0x18, 0x20, COM_FREQ * 8 },
1002 		{ PUC_PORT_TYPE_COM, 0x18, 0x28, COM_FREQ * 8 },
1003 		{ PUC_PORT_TYPE_COM, 0x18, 0x30, COM_FREQ * 8 },
1004 		{ PUC_PORT_TYPE_COM, 0x18, 0x38, COM_FREQ * 8 },
1005 	    },
1006 	},
1007 
1008 	/* Moxa Technologies Co., Ltd. PCI I/O Card 8S RS232 */
1009 	{   "Moxa Technologies, C168U/PCI",
1010 	    {	0x1393,	0x1681,	0,	0	},
1011 	    {	0xffff,	0xffff,	0,	0	},
1012 	    {
1013 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
1014 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
1015 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
1016 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
1017 		{ PUC_PORT_TYPE_COM, 0x18, 0x20, COM_FREQ * 8 },
1018 		{ PUC_PORT_TYPE_COM, 0x18, 0x28, COM_FREQ * 8 },
1019 		{ PUC_PORT_TYPE_COM, 0x18, 0x30, COM_FREQ * 8 },
1020 		{ PUC_PORT_TYPE_COM, 0x18, 0x38, COM_FREQ * 8 },
1021 	    },
1022 	},
1023 
1024 	{   "Avlab Technology, PCI IO 2S",
1025 	    {	0x14db,	0x2130,	0,	0	},
1026 	    {	0xffff,	0xfffc,	0,	0	},
1027 	    {
1028 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1029 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
1030 	    },
1031 	},
1032 
1033 	/* Avlab Technology, Inc. Low Profile PCI 4 Serial: 4S */
1034 	{   "Avlab Low Profile PCI 4 Serial",
1035 	    {	0x14db,	0x2150,	0,	0	},
1036 	    {	0xffff,	0xffff,	0,	0	},
1037 	    {
1038 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1039 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
1040 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
1041 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
1042 	    },
1043 	},
1044 
1045 	/* Decision Computer Inc, serial ports */
1046 	{   "Decision Computer Inc, PCCOM 4-port serial",
1047 	    {	0x6666,	0x0001,	0,	0	},
1048 	    {	0xffff,	0xffff,	0,	0	},
1049 	    {
1050 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
1051 		{ PUC_PORT_TYPE_COM, 0x1c, 0x08, COM_FREQ },
1052 		{ PUC_PORT_TYPE_COM, 0x1c, 0x10, COM_FREQ },
1053 		{ PUC_PORT_TYPE_COM, 0x1c, 0x18, COM_FREQ },
1054 	    },
1055 	},
1056 
1057 	{   "PCCOM dual port RS232/422/485",
1058 	    {	0x6666,	0x0004,	0,	0	},
1059 	    {	0xffff,	0xffff,	0,	0	},
1060 	    {
1061 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
1062 		{ PUC_PORT_TYPE_COM, 0x1c, 0x08, COM_FREQ },
1063 	    },
1064 	},
1065 
1066 	{   "IC Book Labs Gunboat x2 Low Profile",
1067 	    {   0xb00c, 0x0a1c, 0,      0       },
1068 	    {   0xffff, 0xffff, 0,      0       },
1069 	    {
1070 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1071 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1072 	    },
1073 	},
1074 
1075 	{   "IC Book Labs Gunboat x4 Lite",
1076 	    {   0xb00c, 0x021c, 0,      0       },
1077 	    {   0xffff, 0xffff, 0,      0       },
1078 	    {
1079 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1080 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1081 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1082 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1083 	    },
1084 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1085 	},
1086 
1087 	{   "IC Book Labs Gunboat x4 Pro",
1088 	    {   0xb00c, 0x031c, 0,      0       },
1089 	    {   0xffff, 0xffff, 0,      0       },
1090 	    {
1091 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1092 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1093 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1094 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1095 	    },
1096 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1097 	},
1098 
1099 	{   "IC Book Labs Gunboat x4 Low Profile",
1100 	    {   0xb00c, 0x0b1c, 0,      0       },
1101 	    {   0xffff, 0xffff, 0,      0       },
1102 	    {
1103 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1104 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1105 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1106 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1107 	    },
1108 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1109 	},
1110 
1111 	{   "IC Book Labs Ironclad x8 Lite",
1112 	    {	0xb00c,	0x041c,	0,	0	},
1113 	    {	0xffff,	0xffff,	0,	0	},
1114 	    {
1115 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1116 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1117 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1118 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1119 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ },
1120 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ },
1121 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ },
1122 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ },
1123 	    },
1124 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1125 	},
1126 
1127 	{   "IC Book Labs Ironclad x8 Pro",
1128 	    {	0xb00c,	0x051c,	0,	0	},
1129 	    {	0xffff,	0xffff,	0,	0	},
1130 	    {
1131 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1132 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1133 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1134 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1135 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ },
1136 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ },
1137 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ },
1138 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ },
1139 	    },
1140 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1141 	},
1142 
1143 	{   "IC Book Labs Dreadnought x16 Lite",
1144 	    {	0xb00c,	0x091c,	0,	0	},
1145 	    {	0xffff,	0xffff,	0,	0	},
1146 	    {
1147 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1148 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1149 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1150 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1151 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ },
1152 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ },
1153 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ },
1154 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ },
1155 		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ },
1156 		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ },
1157 		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ },
1158 		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ },
1159 		{ PUC_PORT_TYPE_COM, 0x10, 0x60, COM_FREQ },
1160 		{ PUC_PORT_TYPE_COM, 0x10, 0x68, COM_FREQ },
1161 		{ PUC_PORT_TYPE_COM, 0x10, 0x70, COM_FREQ },
1162 		{ PUC_PORT_TYPE_COM, 0x10, 0x78, COM_FREQ },
1163 	    },
1164 	    PUC_ILR_TYPE_DIGI, { 0x07, 0x47 },
1165 	},
1166 
1167 	{   "IC Book Labs Dreadnought x16 Pro",
1168 	    {	0xb00c,	0x081c,	0,	0	},
1169 	    {	0xffff,	0xffff,	0,	0	},
1170 	    {
1171 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8, 0x200000 },
1172 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8, 0x200000 },
1173 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8, 0x200000 },
1174 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8, 0x200000 },
1175 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ * 8, 0x200000 },
1176 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ * 8, 0x200000 },
1177 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ * 8, 0x200000 },
1178 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ * 8, 0x200000 },
1179 		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ * 8, 0x200000 },
1180 		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ * 8, 0x200000 },
1181 		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ * 8, 0x200000 },
1182 		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ * 8, 0x200000 },
1183 		{ PUC_PORT_TYPE_COM, 0x10, 0x60, COM_FREQ * 8, 0x200000 },
1184 		{ PUC_PORT_TYPE_COM, 0x10, 0x68, COM_FREQ * 8, 0x200000 },
1185 		{ PUC_PORT_TYPE_COM, 0x10, 0x70, COM_FREQ * 8, 0x200000 },
1186 		{ PUC_PORT_TYPE_COM, 0x10, 0x78, COM_FREQ * 8, 0x200000 },
1187 	    },
1188 	    PUC_ILR_TYPE_DIGI, { 0x07, 0x47 },
1189 	},
1190 
1191 	{   "Cronyx Omega2-PCI",
1192 	    {	0x13a8,	0x0158,	0,	0	},
1193 	    {	0xffff,	0xffff,	0,	0	},
1194 	    {
1195 		{ PUC_PORT_TYPE_UART, 0x010, 0x000, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1196 		{ PUC_PORT_TYPE_UART, 0x010, 0x200, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1197 		{ PUC_PORT_TYPE_UART, 0x010, 0x400, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1198 		{ PUC_PORT_TYPE_UART, 0x010, 0x600, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1199 		{ PUC_PORT_TYPE_UART, 0x010, 0x800, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1200 		{ PUC_PORT_TYPE_UART, 0x010, 0xA00, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1201 		{ PUC_PORT_TYPE_UART, 0x010, 0xC00, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1202 		{ PUC_PORT_TYPE_UART, 0x010, 0xE00, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1203 	    },
1204 	},
1205 
1206 	{ 0 }
1207 };
1208