pucdata.c revision 145391
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: head/sys/dev/puc/pucdata.c 145391 2005-04-22 07:49:35Z imp $");
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
50int puc_config_win877(struct puc_softc *);
51
52const 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