xref: /freebsd/sys/dev/puc/pucdata.c (revision 3642298923e528d795e3a30ec165d2b469e28b40)
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 OX12PCI840 PCI Parallel port */
850 	{   "Oxford Semiconductor OX12PCI840 Parallel port",
851 	    {	0x1415,	0x8403,	0,	0	},
852 	    {	0xffff,	0xffff,	0,	0	},
853 	    {
854 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
855 	    },
856 	},
857 
858 	/* Oxford Semiconductor OX16PCI954 PCI UARTs */
859 	{   "Oxford Semiconductor OX16PCI954 UARTs",
860 	    {	0x1415,	0x9501,	0,	0	},
861 	    {	0xffff,	0xffff,	0,	0	},
862 	    {
863 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
864 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
865 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
866 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
867 	    },
868 	},
869 
870 	/* Oxford Semiconductor OX16PCI954 PCI UARTs */
871 	{   "Oxford Semiconductor OX16PCI954 UARTs",
872 	    {	0x1415,	0x950a,	0,	0	},
873 	    {	0xffff,	0xffff,	0,	0	},
874 	    {
875 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
876 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
877 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
878 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
879 	    },
880 	},
881 
882 	/* Oxford Semiconductor OXCB950 PCI/CardBus UARTs */
883 	{   "Oxford Semiconductor OXCB950 UART",
884 	    {	0x1415,	0x950b,	0,	0	},
885 	    {	0xffff,	0xffff,	0,	0	},
886 	    {
887 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
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 	/* Oxford Semiconductor OX16PCI954 PCI Parallel port */
907 	{   "Oxford Semiconductor OX16PCI954 Parallel port",
908 	    {	0x1415,	0x9513,	0,	0	},
909 	    {	0xffff,	0xffff,	0,	0	},
910 	    {
911 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
912 	    },
913 	},
914 
915 	/* NetMos 2S1P PCI 16C650 : 2S, 1P */
916 	{   "NetMos NM9835 Dual UART and 1284 Printer port",
917 	    {	0x9710,	0x9835,	0,	0	},
918 	    {	0xffff,	0xffff,	0,	0	},
919 	    {
920 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
921 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
922 		{ PUC_PORT_TYPE_LPT, 0x18, 0x00, 0x00 },
923 	    },
924 	},
925 
926 	/* NetMos 4S0P PCI: 4S, 0P */
927 	{   "NetMos NM9845 Quad UART",
928 	    {	0x9710,	0x9845,	0,	0	},
929 	    {	0xffff,	0xffff,	0,	0	},
930 	    {
931 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
932 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
933 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
934 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
935 	    },
936 	},
937 
938 	/* NetMos 0S1P PCI: 0S, 1P */
939 	{   "NetMos NM9805 1284 Printer port",
940 	    {   0x9710, 0x9805, 0,      0       },
941 	    {   0xffff, 0xffff, 0,      0       },
942 	    {
943 		{ PUC_PORT_TYPE_LPT, 0x10, 0x00, 0x00 },
944 	    },
945 	},
946 
947 	/*
948 	 * This is the Middle Digital, Inc. PCI-Weasel, which
949 	 * uses a PCI interface implemented in FPGA.
950 	 */
951 	{   "Middle Digital, Inc. Weasel serial port",
952 	    {	0xdeaf,	0x9051,	0,	0	},
953 	    {	0xffff,	0xffff,	0,	0	},
954 	    {
955 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
956 	    },
957 	},
958 
959 	/* SD-LAB PCI I/O Card 4S2P */
960 	{   "Syba Tech Ltd. PCI-4S2P-550-ECP",
961 	    {	0x1592,	0x0781,	0,	0	},
962 	    {	0xffff,	0xffff,	0,	0	},
963 	    {
964 		{ PUC_PORT_TYPE_COM, 0x10, 0x2e8, COM_FREQ },
965 		{ PUC_PORT_TYPE_COM, 0x10, 0x2f8, COM_FREQ },
966 		{ PUC_PORT_TYPE_LPT, 0x10, 0x000, 0x00 },
967 		{ PUC_PORT_TYPE_COM, 0x10, 0x3e8, COM_FREQ },
968 		{ PUC_PORT_TYPE_COM, 0x10, 0x3f8, COM_FREQ },
969 		{ PUC_PORT_TYPE_LPT, 0x10, 0x000, 0x00 },
970 	    },
971 	    .init = puc_config_win877,
972 	},
973 
974 	/* Moxa Technologies Co., Ltd. PCI I/O Card 4S RS232 */
975 	{   "Moxa Technologies, Smartio C104H/PCI",
976 	    {	0x1393,	0x1040,	0,	0	},
977 	    {	0xffff,	0xffff,	0,	0	},
978 	    {
979 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
980 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
981 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
982 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
983 	    },
984 	},
985 
986 	/* Moxa Technologies Co., Ltd. PCI I/O Card 4S RS232 */
987 	{   "Moxa Technologies, Smartio CP-104UL/PCI",
988 	    {	0x1393,	0x1041,	0,	0	},
989 	    {	0xffff,	0xffff,	0,	0	},
990 	    {
991 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
992 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
993 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
994 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
995 	    },
996 	},
997 
998 	/* Moxa Technologies Co., Ltd. PCI I/O Card 4S RS232/422/485 */
999 	{   "Moxa Technologies, Industio CP-114",
1000 	    {	0x1393,	0x1141,	0,	0	},
1001 	    {	0xffff,	0xffff,	0,	0	},
1002 	    {
1003 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
1004 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
1005 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
1006 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
1007 	    },
1008 	},
1009 
1010 	/* Moxa Technologies Co., Ltd. PCI I/O Card 8S RS232 */
1011 	{   "Moxa Technologies, C168H/PCI",
1012 	    {	0x1393,	0x1680,	0,	0	},
1013 	    {	0xffff,	0xffff,	0,	0	},
1014 	    {
1015 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
1016 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
1017 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
1018 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
1019 		{ PUC_PORT_TYPE_COM, 0x18, 0x20, COM_FREQ * 8 },
1020 		{ PUC_PORT_TYPE_COM, 0x18, 0x28, COM_FREQ * 8 },
1021 		{ PUC_PORT_TYPE_COM, 0x18, 0x30, COM_FREQ * 8 },
1022 		{ PUC_PORT_TYPE_COM, 0x18, 0x38, COM_FREQ * 8 },
1023 	    },
1024 	},
1025 
1026 	/* Moxa Technologies Co., Ltd. PCI I/O Card 8S RS232 */
1027 	{   "Moxa Technologies, C168U/PCI",
1028 	    {	0x1393,	0x1681,	0,	0	},
1029 	    {	0xffff,	0xffff,	0,	0	},
1030 	    {
1031 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 8 },
1032 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 8 },
1033 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 8 },
1034 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 8 },
1035 		{ PUC_PORT_TYPE_COM, 0x18, 0x20, COM_FREQ * 8 },
1036 		{ PUC_PORT_TYPE_COM, 0x18, 0x28, COM_FREQ * 8 },
1037 		{ PUC_PORT_TYPE_COM, 0x18, 0x30, COM_FREQ * 8 },
1038 		{ PUC_PORT_TYPE_COM, 0x18, 0x38, COM_FREQ * 8 },
1039 	    },
1040 	},
1041 
1042 	{   "Avlab Technology, PCI IO 2S",
1043 	    {	0x14db,	0x2130,	0,	0	},
1044 	    {	0xffff,	0xfffc,	0,	0	},
1045 	    {
1046 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1047 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
1048 	    },
1049 	},
1050 
1051 	/* Avlab Technology, Inc. Low Profile PCI 4 Serial: 4S */
1052 	{   "Avlab Low Profile PCI 4 Serial",
1053 	    {	0x14db,	0x2150,	0,	0	},
1054 	    {	0xffff,	0xffff,	0,	0	},
1055 	    {
1056 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1057 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
1058 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ },
1059 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
1060 	    },
1061 	},
1062 
1063 	/* Decision Computer Inc, serial ports */
1064 	{   "Decision Computer Inc, PCCOM 4-port serial",
1065 	    {	0x6666,	0x0001,	0,	0	},
1066 	    {	0xffff,	0xffff,	0,	0	},
1067 	    {
1068 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
1069 		{ PUC_PORT_TYPE_COM, 0x1c, 0x08, COM_FREQ },
1070 		{ PUC_PORT_TYPE_COM, 0x1c, 0x10, COM_FREQ },
1071 		{ PUC_PORT_TYPE_COM, 0x1c, 0x18, COM_FREQ },
1072 	    },
1073 	},
1074 
1075 	{   "PCCOM dual port RS232/422/485",
1076 	    {	0x6666,	0x0004,	0,	0	},
1077 	    {	0xffff,	0xffff,	0,	0	},
1078 	    {
1079 		{ PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ },
1080 		{ PUC_PORT_TYPE_COM, 0x1c, 0x08, COM_FREQ },
1081 	    },
1082 	},
1083 
1084 	{   "IC Book Labs Gunboat x2 Low Profile",
1085 	    {   0xb00c, 0x0a1c, 0,      0       },
1086 	    {   0xffff, 0xffff, 0,      0       },
1087 	    {
1088 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1089 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1090 	    },
1091 	},
1092 
1093 	{   "IC Book Labs Gunboat x4 Lite",
1094 	    {   0xb00c, 0x021c, 0,      0       },
1095 	    {   0xffff, 0xffff, 0,      0       },
1096 	    {
1097 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1098 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1099 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1100 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1101 	    },
1102 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1103 	},
1104 
1105 	{   "IC Book Labs Gunboat x4 Pro",
1106 	    {   0xb00c, 0x031c, 0,      0       },
1107 	    {   0xffff, 0xffff, 0,      0       },
1108 	    {
1109 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1110 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1111 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1112 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1113 	    },
1114 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1115 	},
1116 
1117 	{   "IC Book Labs Gunboat x4 Low Profile",
1118 	    {   0xb00c, 0x0b1c, 0,      0       },
1119 	    {   0xffff, 0xffff, 0,      0       },
1120 	    {
1121 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1122 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1123 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1124 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1125 	    },
1126 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1127 	},
1128 
1129 	{   "IC Book Labs Ironclad x8 Lite",
1130 	    {	0xb00c,	0x041c,	0,	0	},
1131 	    {	0xffff,	0xffff,	0,	0	},
1132 	    {
1133 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1134 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1135 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1136 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1137 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ },
1138 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ },
1139 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ },
1140 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ },
1141 	    },
1142 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1143 	},
1144 
1145 	{   "IC Book Labs Ironclad x8 Pro",
1146 	    {	0xb00c,	0x051c,	0,	0	},
1147 	    {	0xffff,	0xffff,	0,	0	},
1148 	    {
1149 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1150 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1151 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1152 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1153 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ },
1154 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ },
1155 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ },
1156 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ },
1157 	    },
1158 	    PUC_ILR_TYPE_DIGI, { 0x07 },
1159 	},
1160 
1161 	{   "IC Book Labs Dreadnought x16 Lite",
1162 	    {	0xb00c,	0x091c,	0,	0	},
1163 	    {	0xffff,	0xffff,	0,	0	},
1164 	    {
1165 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
1166 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
1167 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
1168 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
1169 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ },
1170 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ },
1171 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ },
1172 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ },
1173 		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ },
1174 		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ },
1175 		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ },
1176 		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ },
1177 		{ PUC_PORT_TYPE_COM, 0x10, 0x60, COM_FREQ },
1178 		{ PUC_PORT_TYPE_COM, 0x10, 0x68, COM_FREQ },
1179 		{ PUC_PORT_TYPE_COM, 0x10, 0x70, COM_FREQ },
1180 		{ PUC_PORT_TYPE_COM, 0x10, 0x78, COM_FREQ },
1181 	    },
1182 	    PUC_ILR_TYPE_DIGI, { 0x07, 0x47 },
1183 	},
1184 
1185 	{   "IC Book Labs Dreadnought x16 Pro",
1186 	    {	0xb00c,	0x081c,	0,	0	},
1187 	    {	0xffff,	0xffff,	0,	0	},
1188 	    {
1189 		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8, 0x200000 },
1190 		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8, 0x200000 },
1191 		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8, 0x200000 },
1192 		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8, 0x200000 },
1193 		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ * 8, 0x200000 },
1194 		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ * 8, 0x200000 },
1195 		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ * 8, 0x200000 },
1196 		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ * 8, 0x200000 },
1197 		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ * 8, 0x200000 },
1198 		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ * 8, 0x200000 },
1199 		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ * 8, 0x200000 },
1200 		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ * 8, 0x200000 },
1201 		{ PUC_PORT_TYPE_COM, 0x10, 0x60, COM_FREQ * 8, 0x200000 },
1202 		{ PUC_PORT_TYPE_COM, 0x10, 0x68, COM_FREQ * 8, 0x200000 },
1203 		{ PUC_PORT_TYPE_COM, 0x10, 0x70, COM_FREQ * 8, 0x200000 },
1204 		{ PUC_PORT_TYPE_COM, 0x10, 0x78, COM_FREQ * 8, 0x200000 },
1205 	    },
1206 	    PUC_ILR_TYPE_DIGI, { 0x07, 0x47 },
1207 	},
1208 
1209 	{   "Cronyx Omega2-PCI",
1210 	    {	0x13a8,	0x0158,	0,	0	},
1211 	    {	0xffff,	0xffff,	0,	0	},
1212 	    {
1213 		{ PUC_PORT_TYPE_UART, 0x010, 0x000, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1214 		{ PUC_PORT_TYPE_UART, 0x010, 0x200, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1215 		{ PUC_PORT_TYPE_UART, 0x010, 0x400, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1216 		{ PUC_PORT_TYPE_UART, 0x010, 0x600, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1217 		{ PUC_PORT_TYPE_UART, 0x010, 0x800, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1218 		{ PUC_PORT_TYPE_UART, 0x010, 0xA00, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1219 		{ PUC_PORT_TYPE_UART, 0x010, 0xC00, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1220 		{ PUC_PORT_TYPE_UART, 0x010, 0xE00, COM_FREQ * 8, PUC_FLAGS_MEMORY },
1221 	    },
1222 	},
1223 
1224 	/*
1225 	 * Boca Research Turbo Serial 654 (4 serial port) card.
1226 	 * Appears to be the same as Chase Research PLC PCI-FAST4
1227 	 * and Perle PCI-FAST4 Multi-Port serial cards.
1228 	 */
1229 	{   "Boca Research Turbo Serial 654",
1230 	{   0x10b5, 0x9050, 0x12e0, 0x0031  },
1231 	{   0xffff, 0xffff, 0xffff, 0xffff  },
1232 	{
1233 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 4 },
1234 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 4 },
1235 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 4 },
1236 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 4 },
1237 		},
1238 	},
1239 
1240 	/*
1241 	 * Boca Research Turbo Serial 658 (8 serial port) card.
1242 	 * Appears to be the same as Chase Research PLC PCI-FAST8
1243 	 * and Perle PCI-FAST8 Multi-Port serial cards.
1244 	 */
1245 	{   "Boca Research Turbo Serial 658",
1246 	{   0x10b5, 0x9050, 0x12e0, 0x0021  },
1247 	{   0xffff, 0xffff, 0xffff, 0xffff  },
1248 	{
1249 		{ PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ * 4 },
1250 		{ PUC_PORT_TYPE_COM, 0x18, 0x08, COM_FREQ * 4 },
1251 		{ PUC_PORT_TYPE_COM, 0x18, 0x10, COM_FREQ * 4 },
1252 		{ PUC_PORT_TYPE_COM, 0x18, 0x18, COM_FREQ * 4 },
1253 		{ PUC_PORT_TYPE_COM, 0x18, 0x20, COM_FREQ * 4 },
1254 		{ PUC_PORT_TYPE_COM, 0x18, 0x28, COM_FREQ * 4 },
1255 		{ PUC_PORT_TYPE_COM, 0x18, 0x30, COM_FREQ * 4 },
1256 		{ PUC_PORT_TYPE_COM, 0x18, 0x38, COM_FREQ * 4 },
1257 		},
1258 	},
1259 
1260 	{   "Dell RAC III Virtual UART",
1261 	    {	0x1028,	0x0008,	0,	0	},
1262 	    {	0xffff,	0xffff,	0,	0	},
1263 	    {
1264 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ * 128 },
1265 	    },
1266 	},
1267 
1268 	{   "Dell RAC IV/ERA Virtual UART",
1269 	    {	0x1028,	0x0012,	0,	0	},
1270 	    {	0xffff,	0xffff,	0,	0	},
1271 	    {
1272 		{ PUC_PORT_TYPE_COM, 0x14, 0x00, DEFAULT_RCLK * 128 },
1273 	    },
1274 	},
1275 
1276 	{ 0 }
1277 };
1278