1098ca2bdSWarner Losh /*-
24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni *
464220a7eSMarcel Moolenaar * Copyright (c) 2006 Marcel Moolenaar
564220a7eSMarcel Moolenaar * All rights reserved.
69c564b6cSJohn Hay *
79c564b6cSJohn Hay * Redistribution and use in source and binary forms, with or without
89c564b6cSJohn Hay * modification, are permitted provided that the following conditions
99c564b6cSJohn Hay * are met:
1064220a7eSMarcel Moolenaar *
119c564b6cSJohn Hay * 1. Redistributions of source code must retain the above copyright
129c564b6cSJohn Hay * notice, this list of conditions and the following disclaimer.
139c564b6cSJohn Hay * 2. Redistributions in binary form must reproduce the above copyright
149c564b6cSJohn Hay * notice, this list of conditions and the following disclaimer in the
159c564b6cSJohn Hay * documentation and/or other materials provided with the distribution.
169c564b6cSJohn Hay *
179c564b6cSJohn Hay * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
189c564b6cSJohn Hay * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
199c564b6cSJohn Hay * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
209c564b6cSJohn Hay * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
219c564b6cSJohn Hay * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
229c564b6cSJohn Hay * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
239c564b6cSJohn Hay * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
249c564b6cSJohn Hay * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
259c564b6cSJohn Hay * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
269c564b6cSJohn Hay * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
279c564b6cSJohn Hay */
289c564b6cSJohn Hay
299c564b6cSJohn Hay #include <sys/cdefs.h>
309c564b6cSJohn Hay /*
319c564b6cSJohn Hay * PCI "universal" communications card driver configuration data (used to
329c564b6cSJohn Hay * match/attach the cards).
339c564b6cSJohn Hay */
349c564b6cSJohn Hay
359c564b6cSJohn Hay #include <sys/param.h>
3664220a7eSMarcel Moolenaar #include <sys/systm.h>
3764220a7eSMarcel Moolenaar #include <sys/kernel.h>
3864220a7eSMarcel Moolenaar #include <sys/bus.h>
399725900bSRyan Stone #include <sys/sysctl.h>
409c564b6cSJohn Hay
4164220a7eSMarcel Moolenaar #include <machine/resource.h>
42ed0b0e82SWarner Losh #include <machine/bus.h>
4364220a7eSMarcel Moolenaar #include <sys/rman.h>
4464220a7eSMarcel Moolenaar
453deebd53SMarius Strobl #include <dev/ic/ns16550.h>
463deebd53SMarius Strobl
473deebd53SMarius Strobl #include <dev/pci/pcireg.h>
489c564b6cSJohn Hay #include <dev/pci/pcivar.h>
499c564b6cSJohn Hay
5064220a7eSMarcel Moolenaar #include <dev/puc/puc_bus.h>
5164220a7eSMarcel Moolenaar #include <dev/puc/puc_cfg.h>
52482aa6a3SDavid E. O'Brien #include <dev/puc/puc_bfe.h>
539c564b6cSJohn Hay
543deebd53SMarius Strobl static puc_config_f puc_config_advantech;
5564220a7eSMarcel Moolenaar static puc_config_f puc_config_amc;
5664220a7eSMarcel Moolenaar static puc_config_f puc_config_diva;
5722e0612fSJohn Baldwin static puc_config_f puc_config_exar;
588de2c77bSRyan Stone static puc_config_f puc_config_exar_pcie;
5964220a7eSMarcel Moolenaar static puc_config_f puc_config_icbook;
602c89ac5eSEitan Adler static puc_config_f puc_config_moxa;
61d5e0798eSMarius Strobl static puc_config_f puc_config_oxford_pci954;
62a59f78daSJohn Baldwin static puc_config_f puc_config_oxford_pcie;
6364220a7eSMarcel Moolenaar static puc_config_f puc_config_quatech;
6464220a7eSMarcel Moolenaar static puc_config_f puc_config_syba;
6564220a7eSMarcel Moolenaar static puc_config_f puc_config_siig;
6650c0e894SMarius Strobl static puc_config_f puc_config_sunix;
6764220a7eSMarcel Moolenaar static puc_config_f puc_config_timedia;
6864220a7eSMarcel Moolenaar static puc_config_f puc_config_titan;
69dc7d0deaSMarcel Moolenaar
7064220a7eSMarcel Moolenaar const struct puc_cfg puc_pci_devices[] = {
7164220a7eSMarcel Moolenaar { 0x0009, 0x7168, 0xffff, 0,
7264220a7eSMarcel Moolenaar "Sunix SUN1889",
7364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
7464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8,
750efcc68bSBruce Evans },
760efcc68bSBruce Evans
7764220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1049,
7864220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Tosca Console",
7964220a7eSMarcel Moolenaar DEFAULT_RCLK,
8064220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1,
8164220a7eSMarcel Moolenaar .config_function = puc_config_diva
82dc7d0deaSMarcel Moolenaar },
83dc7d0deaSMarcel Moolenaar
8464220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x104a,
8564220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Tosca Secondary",
8664220a7eSMarcel Moolenaar DEFAULT_RCLK,
8764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, -1,
8864220a7eSMarcel Moolenaar .config_function = puc_config_diva
89a27ffb41SDavid E. O'Brien },
90a27ffb41SDavid E. O'Brien
9164220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x104b,
9264220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Maestro SP2",
9364220a7eSMarcel Moolenaar DEFAULT_RCLK,
9464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, -1,
9564220a7eSMarcel Moolenaar .config_function = puc_config_diva
96a27ffb41SDavid E. O'Brien },
97a27ffb41SDavid E. O'Brien
9864220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1223,
9964220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Superdome Console",
10064220a7eSMarcel Moolenaar DEFAULT_RCLK,
10164220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1,
10264220a7eSMarcel Moolenaar .config_function = puc_config_diva
103a27ffb41SDavid E. O'Brien },
104a27ffb41SDavid E. O'Brien
10564220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1226,
10664220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Keystone SP2",
10764220a7eSMarcel Moolenaar DEFAULT_RCLK,
10864220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1,
10964220a7eSMarcel Moolenaar .config_function = puc_config_diva
110a27ffb41SDavid E. O'Brien },
111a27ffb41SDavid E. O'Brien
11264220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1282,
11364220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Everest SP2",
11464220a7eSMarcel Moolenaar DEFAULT_RCLK,
11564220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1,
11664220a7eSMarcel Moolenaar .config_function = puc_config_diva
117a27ffb41SDavid E. O'Brien },
118a27ffb41SDavid E. O'Brien
11964220a7eSMarcel Moolenaar { 0x10b5, 0x1076, 0x10b5, 0x1076,
12064220a7eSMarcel Moolenaar "VScom PCI-800",
12164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
12264220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8,
1232569e387SDavid E. O'Brien },
12464220a7eSMarcel Moolenaar
12564220a7eSMarcel Moolenaar { 0x10b5, 0x1077, 0x10b5, 0x1077,
12664220a7eSMarcel Moolenaar "VScom PCI-400",
12764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
12864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8,
1292569e387SDavid E. O'Brien },
13064220a7eSMarcel Moolenaar
13164220a7eSMarcel Moolenaar { 0x10b5, 0x1103, 0x10b5, 0x1103,
13264220a7eSMarcel Moolenaar "VScom PCI-200",
13364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
13464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0,
1352569e387SDavid E. O'Brien },
136a27ffb41SDavid E. O'Brien
1379c564b6cSJohn Hay /*
13864220a7eSMarcel Moolenaar * Boca Research Turbo Serial 658 (8 serial port) card.
13964220a7eSMarcel Moolenaar * Appears to be the same as Chase Research PLC PCI-FAST8
14064220a7eSMarcel Moolenaar * and Perle PCI-FAST8 Multi-Port serial cards.
1419c564b6cSJohn Hay */
14264220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0x12e0, 0x0021,
14364220a7eSMarcel Moolenaar "Boca Research Turbo Serial 658",
14464220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
14564220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8,
1469c564b6cSJohn Hay },
1479c564b6cSJohn Hay
14864220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0x12e0, 0x0031,
14964220a7eSMarcel Moolenaar "Boca Research Turbo Serial 654",
15064220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
15164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8,
15264220a7eSMarcel Moolenaar },
1539c564b6cSJohn Hay
1549c564b6cSJohn Hay /*
1559c564b6cSJohn Hay * Dolphin Peripherals 4035 (dual serial port) card. PLX 9050, with
1569c564b6cSJohn Hay * a seemingly-lame EEPROM setup that puts the Dolphin IDs
1579c564b6cSJohn Hay * into the subsystem fields, and claims that it's a
1589c564b6cSJohn Hay * network/misc (0x02/0x80) device.
1599c564b6cSJohn Hay */
16064220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0xd84d, 0x6808,
16164220a7eSMarcel Moolenaar "Dolphin Peripherals 4035",
16264220a7eSMarcel Moolenaar DEFAULT_RCLK,
16364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0,
1649c564b6cSJohn Hay },
1659c564b6cSJohn Hay
1669c564b6cSJohn Hay /*
16764220a7eSMarcel Moolenaar * Dolphin Peripherals 4014 (dual parallel port) card. PLX 9050, with
16864220a7eSMarcel Moolenaar * a seemingly-lame EEPROM setup that puts the Dolphin IDs
16964220a7eSMarcel Moolenaar * into the subsystem fields, and claims that it's a
17064220a7eSMarcel Moolenaar * network/misc (0x02/0x80) device.
1719c564b6cSJohn Hay */
17264220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0xd84d, 0x6810,
17364220a7eSMarcel Moolenaar "Dolphin Peripherals 4014",
17464220a7eSMarcel Moolenaar 0,
17564220a7eSMarcel Moolenaar PUC_PORT_2P, 0x20, 4, 0,
1769c564b6cSJohn Hay },
1779c564b6cSJohn Hay
17864220a7eSMarcel Moolenaar { 0x10e8, 0x818e, 0xffff, 0,
17964220a7eSMarcel Moolenaar "Applied Micro Circuits 8 Port UART",
18064220a7eSMarcel Moolenaar DEFAULT_RCLK,
18164220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1,
18264220a7eSMarcel Moolenaar .config_function = puc_config_amc
18364220a7eSMarcel Moolenaar },
1849c564b6cSJohn Hay
185430acc47SMarius Strobl /*
186430acc47SMarius Strobl * The following members of the Digi International Neo series are
187430acc47SMarius Strobl * based on Exar PCI chips, f. e. the 8 port variants on XR17V258IV.
188430acc47SMarius Strobl * Accordingly, the PCIe versions of these cards incorporate a PLX
189430acc47SMarius Strobl * PCIe-PCI-bridge.
190430acc47SMarius Strobl */
191430acc47SMarius Strobl
192430acc47SMarius Strobl { 0x114f, 0x00b0, 0xffff, 0,
193430acc47SMarius Strobl "Digi Neo PCI 4 Port",
194430acc47SMarius Strobl DEFAULT_RCLK * 8,
195430acc47SMarius Strobl PUC_PORT_4S, 0x10, 0, -1,
196430acc47SMarius Strobl .config_function = puc_config_exar
197430acc47SMarius Strobl },
198430acc47SMarius Strobl
199430acc47SMarius Strobl { 0x114f, 0x00b1, 0xffff, 0,
200430acc47SMarius Strobl "Digi Neo PCI 8 Port",
201430acc47SMarius Strobl DEFAULT_RCLK * 8,
202430acc47SMarius Strobl PUC_PORT_8S, 0x10, 0, -1,
203430acc47SMarius Strobl .config_function = puc_config_exar
204430acc47SMarius Strobl },
205430acc47SMarius Strobl
206430acc47SMarius Strobl { 0x114f, 0x00f0, 0xffff, 0,
207430acc47SMarius Strobl "Digi Neo PCIe 8 Port",
208430acc47SMarius Strobl DEFAULT_RCLK * 8,
209430acc47SMarius Strobl PUC_PORT_8S, 0x10, 0, -1,
210430acc47SMarius Strobl .config_function = puc_config_exar
211430acc47SMarius Strobl },
212430acc47SMarius Strobl
213430acc47SMarius Strobl { 0x114f, 0x00f1, 0xffff, 0,
214430acc47SMarius Strobl "Digi Neo PCIe 4 Port",
215430acc47SMarius Strobl DEFAULT_RCLK * 8,
216430acc47SMarius Strobl PUC_PORT_4S, 0x10, 0, -1,
217430acc47SMarius Strobl .config_function = puc_config_exar
218430acc47SMarius Strobl },
219430acc47SMarius Strobl
220430acc47SMarius Strobl { 0x114f, 0x00f2, 0xffff, 0,
221430acc47SMarius Strobl "Digi Neo PCIe 4 Port RJ45",
222430acc47SMarius Strobl DEFAULT_RCLK * 8,
223430acc47SMarius Strobl PUC_PORT_4S, 0x10, 0, -1,
224430acc47SMarius Strobl .config_function = puc_config_exar
225430acc47SMarius Strobl },
226430acc47SMarius Strobl
227430acc47SMarius Strobl { 0x114f, 0x00f3, 0xffff, 0,
228430acc47SMarius Strobl "Digi Neo PCIe 8 Port RJ45",
229430acc47SMarius Strobl DEFAULT_RCLK * 8,
230430acc47SMarius Strobl PUC_PORT_8S, 0x10, 0, -1,
231430acc47SMarius Strobl .config_function = puc_config_exar
232430acc47SMarius Strobl },
233430acc47SMarius Strobl
23464220a7eSMarcel Moolenaar { 0x11fe, 0x8010, 0xffff, 0,
23564220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 RJ11 part A",
23664220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
23764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
23864220a7eSMarcel Moolenaar },
23964220a7eSMarcel Moolenaar
24064220a7eSMarcel Moolenaar { 0x11fe, 0x8011, 0xffff, 0,
24164220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 RJ11 part B",
24264220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
24364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
24464220a7eSMarcel Moolenaar },
24564220a7eSMarcel Moolenaar
24664220a7eSMarcel Moolenaar { 0x11fe, 0x8012, 0xffff, 0,
24764220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 Octa part A",
24864220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
24964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
25064220a7eSMarcel Moolenaar },
25164220a7eSMarcel Moolenaar
25264220a7eSMarcel Moolenaar { 0x11fe, 0x8013, 0xffff, 0,
25364220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 Octa part B",
25464220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
25564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
25664220a7eSMarcel Moolenaar },
25764220a7eSMarcel Moolenaar
25864220a7eSMarcel Moolenaar { 0x11fe, 0x8014, 0xffff, 0,
25964220a7eSMarcel Moolenaar "Comtrol RocketPort 550/4 RJ45",
26064220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
26164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
26264220a7eSMarcel Moolenaar },
26364220a7eSMarcel Moolenaar
26464220a7eSMarcel Moolenaar { 0x11fe, 0x8015, 0xffff, 0,
26564220a7eSMarcel Moolenaar "Comtrol RocketPort 550/Quad",
26664220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
26764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
26864220a7eSMarcel Moolenaar },
26964220a7eSMarcel Moolenaar
27064220a7eSMarcel Moolenaar { 0x11fe, 0x8016, 0xffff, 0,
27164220a7eSMarcel Moolenaar "Comtrol RocketPort 550/16 part A",
27264220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
27364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
27464220a7eSMarcel Moolenaar },
27564220a7eSMarcel Moolenaar
27664220a7eSMarcel Moolenaar { 0x11fe, 0x8017, 0xffff, 0,
27764220a7eSMarcel Moolenaar "Comtrol RocketPort 550/16 part B",
27864220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
27964220a7eSMarcel Moolenaar PUC_PORT_12S, 0x10, 0, 8,
28064220a7eSMarcel Moolenaar },
28164220a7eSMarcel Moolenaar
28264220a7eSMarcel Moolenaar { 0x11fe, 0x8018, 0xffff, 0,
28364220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 part A",
28464220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
28564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
28664220a7eSMarcel Moolenaar },
28764220a7eSMarcel Moolenaar
28864220a7eSMarcel Moolenaar { 0x11fe, 0x8019, 0xffff, 0,
28964220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 part B",
29064220a7eSMarcel Moolenaar DEFAULT_RCLK * 4,
29164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
29264220a7eSMarcel Moolenaar },
2939c564b6cSJohn Hay
2949c564b6cSJohn Hay /*
29563fbf504SRobert Watson * IBM SurePOS 300 Series (481033H) serial ports
29663fbf504SRobert Watson * Details can be found on the IBM RSS websites
29763fbf504SRobert Watson */
29863fbf504SRobert Watson
29963fbf504SRobert Watson { 0x1014, 0x0297, 0xffff, 0,
30063fbf504SRobert Watson "IBM SurePOS 300 Series (481033H) serial ports",
30163fbf504SRobert Watson DEFAULT_RCLK,
30263fbf504SRobert Watson PUC_PORT_4S, 0x10, 4, 0
30363fbf504SRobert Watson },
30463fbf504SRobert Watson
30563fbf504SRobert Watson /*
3069c564b6cSJohn Hay * SIIG Boards.
3079c564b6cSJohn Hay *
3089c564b6cSJohn Hay * SIIG provides documentation for their boards at:
30964220a7eSMarcel Moolenaar * <URL:http://www.siig.com/downloads.asp>
3109c564b6cSJohn Hay */
3119c564b6cSJohn Hay
31264220a7eSMarcel Moolenaar { 0x131f, 0x1010, 0xffff, 0,
31364220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C550 (10x family)",
31464220a7eSMarcel Moolenaar DEFAULT_RCLK,
31564220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0,
3169c564b6cSJohn Hay },
3179c564b6cSJohn Hay
31864220a7eSMarcel Moolenaar { 0x131f, 0x1011, 0xffff, 0,
31964220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C650 (10x family)",
32064220a7eSMarcel Moolenaar DEFAULT_RCLK,
32164220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0,
3229c564b6cSJohn Hay },
3239c564b6cSJohn Hay
32464220a7eSMarcel Moolenaar { 0x131f, 0x1012, 0xffff, 0,
32564220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C850 (10x family)",
32664220a7eSMarcel Moolenaar DEFAULT_RCLK,
32764220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0,
3289c564b6cSJohn Hay },
3299c564b6cSJohn Hay
33064220a7eSMarcel Moolenaar { 0x131f, 0x1021, 0xffff, 0,
33164220a7eSMarcel Moolenaar "SIIG Cyber Parallel Dual PCI (10x family)",
33264220a7eSMarcel Moolenaar 0,
33364220a7eSMarcel Moolenaar PUC_PORT_2P, 0x18, 8, 0,
3349c564b6cSJohn Hay },
3359c564b6cSJohn Hay
33664220a7eSMarcel Moolenaar { 0x131f, 0x1030, 0xffff, 0,
33764220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C550 (10x family)",
33864220a7eSMarcel Moolenaar DEFAULT_RCLK,
33964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0,
3409c564b6cSJohn Hay },
3419c564b6cSJohn Hay
34264220a7eSMarcel Moolenaar { 0x131f, 0x1031, 0xffff, 0,
34364220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C650 (10x family)",
34464220a7eSMarcel Moolenaar DEFAULT_RCLK,
34564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0,
3469c564b6cSJohn Hay },
3479c564b6cSJohn Hay
34864220a7eSMarcel Moolenaar { 0x131f, 0x1032, 0xffff, 0,
34964220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C850 (10x family)",
35064220a7eSMarcel Moolenaar DEFAULT_RCLK,
35164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0,
3529c564b6cSJohn Hay },
3539c564b6cSJohn Hay
35464220a7eSMarcel Moolenaar { 0x131f, 0x1034, 0xffff, 0, /* XXX really? */
35564220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C550 (10x family)",
35664220a7eSMarcel Moolenaar DEFAULT_RCLK,
35764220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0,
3589c564b6cSJohn Hay },
3599c564b6cSJohn Hay
36064220a7eSMarcel Moolenaar { 0x131f, 0x1035, 0xffff, 0, /* XXX really? */
36164220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C650 (10x family)",
36264220a7eSMarcel Moolenaar DEFAULT_RCLK,
36364220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0,
3649c564b6cSJohn Hay },
3659c564b6cSJohn Hay
36664220a7eSMarcel Moolenaar { 0x131f, 0x1036, 0xffff, 0, /* XXX really? */
36764220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C850 (10x family)",
36864220a7eSMarcel Moolenaar DEFAULT_RCLK,
36964220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0,
3709c564b6cSJohn Hay },
3719c564b6cSJohn Hay
37264220a7eSMarcel Moolenaar { 0x131f, 0x1050, 0xffff, 0,
37364220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C550 (10x family)",
37464220a7eSMarcel Moolenaar DEFAULT_RCLK,
37564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0,
3769c564b6cSJohn Hay },
3779c564b6cSJohn Hay
37864220a7eSMarcel Moolenaar { 0x131f, 0x1051, 0xffff, 0,
37964220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (10x family)",
38064220a7eSMarcel Moolenaar DEFAULT_RCLK,
38164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0,
3829c564b6cSJohn Hay },
3839c564b6cSJohn Hay
38464220a7eSMarcel Moolenaar { 0x131f, 0x1052, 0xffff, 0,
38564220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C850 (10x family)",
38664220a7eSMarcel Moolenaar DEFAULT_RCLK,
38764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0,
3889c564b6cSJohn Hay },
3899c564b6cSJohn Hay
39064220a7eSMarcel Moolenaar { 0x131f, 0x2010, 0xffff, 0,
39164220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C550 (20x family)",
39264220a7eSMarcel Moolenaar DEFAULT_RCLK,
39364220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0,
3949c564b6cSJohn Hay },
3959c564b6cSJohn Hay
39664220a7eSMarcel Moolenaar { 0x131f, 0x2011, 0xffff, 0,
39764220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C650 (20x family)",
39864220a7eSMarcel Moolenaar DEFAULT_RCLK,
39964220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0,
4009c564b6cSJohn Hay },
4019c564b6cSJohn Hay
40264220a7eSMarcel Moolenaar { 0x131f, 0x2012, 0xffff, 0,
40364220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C850 (20x family)",
40464220a7eSMarcel Moolenaar DEFAULT_RCLK,
40564220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0,
4069c564b6cSJohn Hay },
4079c564b6cSJohn Hay
40864220a7eSMarcel Moolenaar { 0x131f, 0x2021, 0xffff, 0,
40964220a7eSMarcel Moolenaar "SIIG Cyber Parallel Dual PCI (20x family)",
41064220a7eSMarcel Moolenaar 0,
41164220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0,
4129c564b6cSJohn Hay },
4139c564b6cSJohn Hay
41464220a7eSMarcel Moolenaar { 0x131f, 0x2030, 0xffff, 0,
41564220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C550 (20x family)",
41664220a7eSMarcel Moolenaar DEFAULT_RCLK,
41764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
4189c564b6cSJohn Hay },
4199c564b6cSJohn Hay
42064220a7eSMarcel Moolenaar { 0x131f, 0x2031, 0xffff, 0,
42164220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C650 (20x family)",
42264220a7eSMarcel Moolenaar DEFAULT_RCLK,
42364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
4249c564b6cSJohn Hay },
4259c564b6cSJohn Hay
42664220a7eSMarcel Moolenaar { 0x131f, 0x2032, 0xffff, 0,
42764220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C850 (20x family)",
42864220a7eSMarcel Moolenaar DEFAULT_RCLK,
42964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
4309c564b6cSJohn Hay },
4319c564b6cSJohn Hay
43264220a7eSMarcel Moolenaar { 0x131f, 0x2040, 0xffff, 0,
43364220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C550 (20x family)",
43464220a7eSMarcel Moolenaar DEFAULT_RCLK,
43564220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0,
43664220a7eSMarcel Moolenaar .config_function = puc_config_siig
4379c564b6cSJohn Hay },
4389c564b6cSJohn Hay
43964220a7eSMarcel Moolenaar { 0x131f, 0x2041, 0xffff, 0,
44064220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C650 (20x family)",
44164220a7eSMarcel Moolenaar DEFAULT_RCLK,
44264220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0,
44364220a7eSMarcel Moolenaar .config_function = puc_config_siig
4449c564b6cSJohn Hay },
4459c564b6cSJohn Hay
44664220a7eSMarcel Moolenaar { 0x131f, 0x2042, 0xffff, 0,
44764220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C850 (20x family)",
44864220a7eSMarcel Moolenaar DEFAULT_RCLK,
44964220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0,
45064220a7eSMarcel Moolenaar .config_function = puc_config_siig
4519c564b6cSJohn Hay },
4529c564b6cSJohn Hay
45364220a7eSMarcel Moolenaar { 0x131f, 0x2050, 0xffff, 0,
45464220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C550 (20x family)",
45564220a7eSMarcel Moolenaar DEFAULT_RCLK,
45664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0,
4579c564b6cSJohn Hay },
4589c564b6cSJohn Hay
45964220a7eSMarcel Moolenaar { 0x131f, 0x2051, 0xffff, 0,
46064220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)",
46164220a7eSMarcel Moolenaar DEFAULT_RCLK,
46264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0,
4639c564b6cSJohn Hay },
4649c564b6cSJohn Hay
46564220a7eSMarcel Moolenaar { 0x131f, 0x2052, 0xffff, 0,
46664220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C850 (20x family)",
46764220a7eSMarcel Moolenaar DEFAULT_RCLK,
46864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0,
4699c564b6cSJohn Hay },
4709c564b6cSJohn Hay
47164220a7eSMarcel Moolenaar { 0x131f, 0x2060, 0xffff, 0,
47264220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C550 (20x family)",
47364220a7eSMarcel Moolenaar DEFAULT_RCLK,
47464220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0,
4759c564b6cSJohn Hay },
4769c564b6cSJohn Hay
47764220a7eSMarcel Moolenaar { 0x131f, 0x2061, 0xffff, 0,
47864220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C650 (20x family)",
47964220a7eSMarcel Moolenaar DEFAULT_RCLK,
48064220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0,
4819c564b6cSJohn Hay },
4829c564b6cSJohn Hay
48364220a7eSMarcel Moolenaar { 0x131f, 0x2062, 0xffff, 0,
48464220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C850 (20x family)",
48564220a7eSMarcel Moolenaar DEFAULT_RCLK,
48664220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0,
4879c564b6cSJohn Hay },
4889c564b6cSJohn Hay
48964220a7eSMarcel Moolenaar { 0x131f, 0x2081, 0xffff, 0,
49064220a7eSMarcel Moolenaar "SIIG PS8000 8S PCI 16C650 (20x family)",
49164220a7eSMarcel Moolenaar DEFAULT_RCLK,
49264220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, -1, -1,
49364220a7eSMarcel Moolenaar .config_function = puc_config_siig
4949c564b6cSJohn Hay },
4959c564b6cSJohn Hay
496*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0841, 0xffff, 0,
497*41b30bbcSYoshihiro Takahashi "Brainboxes UC-268",
498*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
499*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
500*41b30bbcSYoshihiro Takahashi },
501*41b30bbcSYoshihiro Takahashi
502*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0861, 0xffff, 0,
503*41b30bbcSYoshihiro Takahashi "Brainboxes UC-257",
504*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
505*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
506*41b30bbcSYoshihiro Takahashi },
507*41b30bbcSYoshihiro Takahashi
508*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0862, 0xffff, 0,
509*41b30bbcSYoshihiro Takahashi "Brainboxes UC-257",
510*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
511*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
512*41b30bbcSYoshihiro Takahashi },
513*41b30bbcSYoshihiro Takahashi
514*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0863, 0xffff, 0,
515*41b30bbcSYoshihiro Takahashi "Brainboxes UC-257",
516*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
517*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
518*41b30bbcSYoshihiro Takahashi },
519*41b30bbcSYoshihiro Takahashi
520*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0881, 0xffff, 0,
521*41b30bbcSYoshihiro Takahashi "Brainboxes UC-279",
522*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
523*41b30bbcSYoshihiro Takahashi PUC_PORT_8S, 0x18, 0, 8,
524*41b30bbcSYoshihiro Takahashi },
525*41b30bbcSYoshihiro Takahashi
526*41b30bbcSYoshihiro Takahashi { 0x135a, 0x08a1, 0xffff, 0,
527*41b30bbcSYoshihiro Takahashi "Brainboxes UC-313",
528*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
529*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
530*41b30bbcSYoshihiro Takahashi },
531*41b30bbcSYoshihiro Takahashi
532*41b30bbcSYoshihiro Takahashi { 0x135a, 0x08a2, 0xffff, 0,
533*41b30bbcSYoshihiro Takahashi "Brainboxes UC-313",
534*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
535*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
536*41b30bbcSYoshihiro Takahashi },
537*41b30bbcSYoshihiro Takahashi
538*41b30bbcSYoshihiro Takahashi { 0x135a, 0x08a3, 0xffff, 0,
539*41b30bbcSYoshihiro Takahashi "Brainboxes UC-313",
540*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
541*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
542*41b30bbcSYoshihiro Takahashi },
543*41b30bbcSYoshihiro Takahashi
544*41b30bbcSYoshihiro Takahashi { 0x135a, 0x08c1, 0xffff, 0,
545*41b30bbcSYoshihiro Takahashi "Brainboxes UC-310",
546*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
547*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
548*41b30bbcSYoshihiro Takahashi },
549*41b30bbcSYoshihiro Takahashi
550*41b30bbcSYoshihiro Takahashi { 0x135a, 0x08e1, 0xffff, 0,
551*41b30bbcSYoshihiro Takahashi "Brainboxes UC-302",
552*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
553*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
554*41b30bbcSYoshihiro Takahashi },
555*41b30bbcSYoshihiro Takahashi
556*41b30bbcSYoshihiro Takahashi { 0x135a, 0x08e2, 0xffff, 0,
557*41b30bbcSYoshihiro Takahashi "Brainboxes UC-302",
558*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
559*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
560*41b30bbcSYoshihiro Takahashi },
561*41b30bbcSYoshihiro Takahashi
562*41b30bbcSYoshihiro Takahashi { 0x135a, 0x08e3, 0xffff, 0,
563*41b30bbcSYoshihiro Takahashi "Brainboxes UC-302",
564*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
565*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
566*41b30bbcSYoshihiro Takahashi },
567*41b30bbcSYoshihiro Takahashi
568*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0901, 0xffff, 0,
569*41b30bbcSYoshihiro Takahashi "Brainboxes UC-431",
570*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
571*41b30bbcSYoshihiro Takahashi PUC_PORT_3S, 0x18, 0, 8,
572*41b30bbcSYoshihiro Takahashi },
573*41b30bbcSYoshihiro Takahashi
574*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0921, 0xffff, 0,
575*41b30bbcSYoshihiro Takahashi "Brainboxes UC-420",
576*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
577*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
578*41b30bbcSYoshihiro Takahashi },
579*41b30bbcSYoshihiro Takahashi
580*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0981, 0xffff, 0,
581*41b30bbcSYoshihiro Takahashi "Brainboxes UC-475",
582*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
583*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
584*41b30bbcSYoshihiro Takahashi },
585*41b30bbcSYoshihiro Takahashi
586*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0982, 0xffff, 0,
587*41b30bbcSYoshihiro Takahashi "Brainboxes UC-475",
588*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
589*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
590*41b30bbcSYoshihiro Takahashi },
591*41b30bbcSYoshihiro Takahashi
592*41b30bbcSYoshihiro Takahashi { 0x135a, 0x09a1, 0xffff, 0,
593*41b30bbcSYoshihiro Takahashi "Brainboxes UC-607",
594*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
595*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
596*41b30bbcSYoshihiro Takahashi },
597*41b30bbcSYoshihiro Takahashi
598*41b30bbcSYoshihiro Takahashi { 0x135a, 0x09a2, 0xffff, 0,
599*41b30bbcSYoshihiro Takahashi "Brainboxes UC-607",
600*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
601*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
602*41b30bbcSYoshihiro Takahashi },
603*41b30bbcSYoshihiro Takahashi
604*41b30bbcSYoshihiro Takahashi { 0x135a, 0x09a3, 0xffff, 0,
605*41b30bbcSYoshihiro Takahashi "Brainboxes UC-607",
606*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
607*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
608*41b30bbcSYoshihiro Takahashi },
609*41b30bbcSYoshihiro Takahashi
610*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0a81, 0xffff, 0,
611*41b30bbcSYoshihiro Takahashi "Brainboxes UC-357",
612*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
613*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
614*41b30bbcSYoshihiro Takahashi },
615*41b30bbcSYoshihiro Takahashi
616*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0a82, 0xffff, 0,
617*41b30bbcSYoshihiro Takahashi "Brainboxes UC-357",
618*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
619*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
620*41b30bbcSYoshihiro Takahashi },
621*41b30bbcSYoshihiro Takahashi
622*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0a83, 0xffff, 0,
623*41b30bbcSYoshihiro Takahashi "Brainboxes UC-357",
624*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
625*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
626*41b30bbcSYoshihiro Takahashi },
627*41b30bbcSYoshihiro Takahashi
628*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0ac1, 0xffff, 0,
629*41b30bbcSYoshihiro Takahashi "Brainboxes UP-189",
630*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
631*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
632*41b30bbcSYoshihiro Takahashi },
633*41b30bbcSYoshihiro Takahashi
634*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0ac2, 0xffff, 0,
635*41b30bbcSYoshihiro Takahashi "Brainboxes UP-189",
636*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
637*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
638*41b30bbcSYoshihiro Takahashi },
639*41b30bbcSYoshihiro Takahashi
640*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0ac3, 0xffff, 0,
641*41b30bbcSYoshihiro Takahashi "Brainboxes UP-189",
642*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
643*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
644*41b30bbcSYoshihiro Takahashi },
645*41b30bbcSYoshihiro Takahashi
646*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0b01, 0xffff, 0,
647*41b30bbcSYoshihiro Takahashi "Brainboxes UC-346",
648*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
649*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
650*41b30bbcSYoshihiro Takahashi },
651*41b30bbcSYoshihiro Takahashi
652*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0b02, 0xffff, 0,
653*41b30bbcSYoshihiro Takahashi "Brainboxes UC-346",
654*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
655*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
656*41b30bbcSYoshihiro Takahashi },
657*41b30bbcSYoshihiro Takahashi
658*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0b21, 0xffff, 0,
659*41b30bbcSYoshihiro Takahashi "Brainboxes UP-200",
660*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
661*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
662*41b30bbcSYoshihiro Takahashi },
663*41b30bbcSYoshihiro Takahashi
664*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0b22, 0xffff, 0,
665*41b30bbcSYoshihiro Takahashi "Brainboxes UP-200",
666*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
667*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
668*41b30bbcSYoshihiro Takahashi },
669*41b30bbcSYoshihiro Takahashi
670*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0b23, 0xffff, 0,
671*41b30bbcSYoshihiro Takahashi "Brainboxes UP-200",
672*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
673*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
674*41b30bbcSYoshihiro Takahashi },
675*41b30bbcSYoshihiro Takahashi
676*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0ba1, 0xffff, 0,
677*41b30bbcSYoshihiro Takahashi "Brainboxes UC-101",
678*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
679*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
680*41b30bbcSYoshihiro Takahashi },
681*41b30bbcSYoshihiro Takahashi
682*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0bc1, 0xffff, 0,
683*41b30bbcSYoshihiro Takahashi "Brainboxes UC-203",
684*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
685*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
686*41b30bbcSYoshihiro Takahashi },
687*41b30bbcSYoshihiro Takahashi
688*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0bc2, 0xffff, 0,
689*41b30bbcSYoshihiro Takahashi "Brainboxes UC-203",
690*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
691*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
692*41b30bbcSYoshihiro Takahashi },
693*41b30bbcSYoshihiro Takahashi
694*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0c01, 0xffff, 0,
695*41b30bbcSYoshihiro Takahashi "Brainboxes UP-869",
696*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
697*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
698*41b30bbcSYoshihiro Takahashi },
699*41b30bbcSYoshihiro Takahashi
700*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0c02, 0xffff, 0,
701*41b30bbcSYoshihiro Takahashi "Brainboxes UP-869",
702*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
703*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
704*41b30bbcSYoshihiro Takahashi },
705*41b30bbcSYoshihiro Takahashi
706*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0c03, 0xffff, 0,
707*41b30bbcSYoshihiro Takahashi "Brainboxes UP-869",
708*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
709*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
710*41b30bbcSYoshihiro Takahashi },
711*41b30bbcSYoshihiro Takahashi
712*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0c21, 0xffff, 0,
713*41b30bbcSYoshihiro Takahashi "Brainboxes UP-880",
714*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
715*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
716*41b30bbcSYoshihiro Takahashi },
717*41b30bbcSYoshihiro Takahashi
718*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0c22, 0xffff, 0,
719*41b30bbcSYoshihiro Takahashi "Brainboxes UP-880",
720*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
721*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
722*41b30bbcSYoshihiro Takahashi },
723*41b30bbcSYoshihiro Takahashi
724*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0c23, 0xffff, 0,
725*41b30bbcSYoshihiro Takahashi "Brainboxes UP-880",
726*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
727*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
728*41b30bbcSYoshihiro Takahashi },
729*41b30bbcSYoshihiro Takahashi
730*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0c41, 0xffff, 0,
731*41b30bbcSYoshihiro Takahashi "Brainboxes UC-368",
732*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
733*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
734*41b30bbcSYoshihiro Takahashi },
735*41b30bbcSYoshihiro Takahashi
736*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0ca1, 0xffff, 0,
737*41b30bbcSYoshihiro Takahashi "Brainboxes UC-253",
738*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
739*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
740*41b30bbcSYoshihiro Takahashi },
741*41b30bbcSYoshihiro Takahashi
742*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0d21, 0xffff, 0,
743*41b30bbcSYoshihiro Takahashi "Brainboxes UC-260",
744*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
745*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
746*41b30bbcSYoshihiro Takahashi },
747*41b30bbcSYoshihiro Takahashi
748*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0d41, 0xffff, 0,
749*41b30bbcSYoshihiro Takahashi "Brainboxes UC-836",
750*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
751*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
752*41b30bbcSYoshihiro Takahashi },
753*41b30bbcSYoshihiro Takahashi
754*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0d80, 0xffff, 0,
755*41b30bbcSYoshihiro Takahashi "Intashield IS-200",
756*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
757*41b30bbcSYoshihiro Takahashi PUC_PORT_2S, 0x18, 0, 8,
758*41b30bbcSYoshihiro Takahashi },
759*41b30bbcSYoshihiro Takahashi
760*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0dc0, 0xffff, 0,
761*41b30bbcSYoshihiro Takahashi "Intashield IS-400",
762*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
763*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
764*41b30bbcSYoshihiro Takahashi },
765*41b30bbcSYoshihiro Takahashi
766*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0e41, 0xffff, 0,
767*41b30bbcSYoshihiro Takahashi "Brainboxes PX-279",
768*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
769*41b30bbcSYoshihiro Takahashi PUC_PORT_8S, 0x18, 0, 8,
770*41b30bbcSYoshihiro Takahashi },
771*41b30bbcSYoshihiro Takahashi
772*41b30bbcSYoshihiro Takahashi { 0x135a, 0x0e61, 0xffff, 0,
773*41b30bbcSYoshihiro Takahashi "Brainboxes UC-414",
774*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK,
775*41b30bbcSYoshihiro Takahashi PUC_PORT_4S, 0x18, 0, 8,
776*41b30bbcSYoshihiro Takahashi },
777*41b30bbcSYoshihiro Takahashi
778*41b30bbcSYoshihiro Takahashi { 0x135a, 0x400a, 0xffff, 0,
779*41b30bbcSYoshihiro Takahashi "Brainboxes PX-260",
780*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
781*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
782*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
783*41b30bbcSYoshihiro Takahashi },
784*41b30bbcSYoshihiro Takahashi
785*41b30bbcSYoshihiro Takahashi { 0x135a, 0x400b, 0xffff, 0,
786*41b30bbcSYoshihiro Takahashi "Brainboxes PX-320",
787*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
788*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
789*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
790*41b30bbcSYoshihiro Takahashi },
791*41b30bbcSYoshihiro Takahashi
792*41b30bbcSYoshihiro Takahashi { 0x135a, 0x400c, 0xffff, 0,
793*41b30bbcSYoshihiro Takahashi "Brainboxes PX-313",
794*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
795*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
796*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
797*41b30bbcSYoshihiro Takahashi },
798*41b30bbcSYoshihiro Takahashi
799*41b30bbcSYoshihiro Takahashi { 0x135a, 0x400e, 0xffff, 0,
800*41b30bbcSYoshihiro Takahashi "Brainboxes PX-310",
801*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
802*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
803*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
804*41b30bbcSYoshihiro Takahashi },
805*41b30bbcSYoshihiro Takahashi
806*41b30bbcSYoshihiro Takahashi { 0x135a, 0x400f, 0xffff, 0,
807*41b30bbcSYoshihiro Takahashi "Brainboxes PX-346",
808*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
809*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
810*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
811*41b30bbcSYoshihiro Takahashi },
812*41b30bbcSYoshihiro Takahashi
813*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4010, 0xffff, 0,
814*41b30bbcSYoshihiro Takahashi "Brainboxes PX-368",
815*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
816*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
817*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
818*41b30bbcSYoshihiro Takahashi },
819*41b30bbcSYoshihiro Takahashi
820*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4011, 0xffff, 0,
821*41b30bbcSYoshihiro Takahashi "Brainboxes PX-420",
822*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
823*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
824*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
825*41b30bbcSYoshihiro Takahashi },
826*41b30bbcSYoshihiro Takahashi
827*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4012, 0xffff, 0,
828*41b30bbcSYoshihiro Takahashi "Brainboxes PX-431",
829*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
830*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
831*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
832*41b30bbcSYoshihiro Takahashi },
833*41b30bbcSYoshihiro Takahashi
834*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4013, 0xffff, 0,
835*41b30bbcSYoshihiro Takahashi "Brainboxes PX-820",
836*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
837*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
838*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
839*41b30bbcSYoshihiro Takahashi },
840*41b30bbcSYoshihiro Takahashi
841*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4014, 0xffff, 0,
842*41b30bbcSYoshihiro Takahashi "Brainboxes PX-831",
843*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
844*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
845*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
846*41b30bbcSYoshihiro Takahashi },
847*41b30bbcSYoshihiro Takahashi
848*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4015, 0xffff, 0,
849*41b30bbcSYoshihiro Takahashi "Brainboxes PX-257",
850*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
851*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
852*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
853*41b30bbcSYoshihiro Takahashi },
854*41b30bbcSYoshihiro Takahashi
855*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4016, 0xffff, 0,
856*41b30bbcSYoshihiro Takahashi "Brainboxes PX-246",
857*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
858*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
859*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
860*41b30bbcSYoshihiro Takahashi },
861*41b30bbcSYoshihiro Takahashi
862*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4017, 0xffff, 0,
863*41b30bbcSYoshihiro Takahashi "Brainboxes PX-846",
864*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
865*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
866*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
867*41b30bbcSYoshihiro Takahashi },
868*41b30bbcSYoshihiro Takahashi
869*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4018, 0xffff, 0,
870*41b30bbcSYoshihiro Takahashi "Brainboxes PX-857",
871*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
872*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
873*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
874*41b30bbcSYoshihiro Takahashi },
875*41b30bbcSYoshihiro Takahashi
876*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4019, 0xffff, 0,
877*41b30bbcSYoshihiro Takahashi "Brainboxes PX-101",
878*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
879*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
880*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
881*41b30bbcSYoshihiro Takahashi },
882*41b30bbcSYoshihiro Takahashi
883*41b30bbcSYoshihiro Takahashi { 0x135a, 0x401d, 0xffff, 0,
884*41b30bbcSYoshihiro Takahashi "Brainboxes PX-475",
885*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
886*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
887*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
888*41b30bbcSYoshihiro Takahashi },
889*41b30bbcSYoshihiro Takahashi
890*41b30bbcSYoshihiro Takahashi { 0x135a, 0x401e, 0xffff, 0,
891*41b30bbcSYoshihiro Takahashi "Brainboxes PX-803",
892*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
893*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
894*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
895*41b30bbcSYoshihiro Takahashi },
896*41b30bbcSYoshihiro Takahashi
897*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4027, 0xffff, 0,
898*41b30bbcSYoshihiro Takahashi "Intashield IX-100",
899*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
900*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
901*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
902*41b30bbcSYoshihiro Takahashi },
903*41b30bbcSYoshihiro Takahashi
904*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4028, 0xffff, 0,
905*41b30bbcSYoshihiro Takahashi "Intashield IX-200",
906*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
907*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
908*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
909*41b30bbcSYoshihiro Takahashi },
910*41b30bbcSYoshihiro Takahashi
911*41b30bbcSYoshihiro Takahashi { 0x135a, 0x4029, 0xffff, 0,
912*41b30bbcSYoshihiro Takahashi "Intashield IX-400",
913*41b30bbcSYoshihiro Takahashi DEFAULT_RCLK * 0x22,
914*41b30bbcSYoshihiro Takahashi PUC_PORT_NONSTANDARD, 0x10, 0, -1,
915*41b30bbcSYoshihiro Takahashi .config_function = puc_config_oxford_pcie
916*41b30bbcSYoshihiro Takahashi },
917*41b30bbcSYoshihiro Takahashi
91864220a7eSMarcel Moolenaar { 0x135c, 0x0010, 0xffff, 0,
91964220a7eSMarcel Moolenaar "Quatech QSC-100",
92064220a7eSMarcel Moolenaar -3, /* max 8x clock rate */
92164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8,
92264220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9239c564b6cSJohn Hay },
9249c564b6cSJohn Hay
92564220a7eSMarcel Moolenaar { 0x135c, 0x0020, 0xffff, 0,
92664220a7eSMarcel Moolenaar "Quatech DSC-100",
92764220a7eSMarcel Moolenaar -1, /* max 2x clock rate */
92864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8,
92964220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9309c564b6cSJohn Hay },
9319c564b6cSJohn Hay
93264220a7eSMarcel Moolenaar { 0x135c, 0x0030, 0xffff, 0,
93364220a7eSMarcel Moolenaar "Quatech DSC-200/300",
93464220a7eSMarcel Moolenaar -1, /* max 2x clock rate */
93564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8,
93664220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9379c564b6cSJohn Hay },
9389c564b6cSJohn Hay
93964220a7eSMarcel Moolenaar { 0x135c, 0x0040, 0xffff, 0,
94064220a7eSMarcel Moolenaar "Quatech QSC-200/300",
94164220a7eSMarcel Moolenaar -3, /* max 8x clock rate */
94264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8,
94364220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9449c564b6cSJohn Hay },
9459c564b6cSJohn Hay
94664220a7eSMarcel Moolenaar { 0x135c, 0x0050, 0xffff, 0,
94764220a7eSMarcel Moolenaar "Quatech ESC-100D",
94864220a7eSMarcel Moolenaar -3, /* max 8x clock rate */
94964220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8,
95064220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9519c564b6cSJohn Hay },
9529c564b6cSJohn Hay
95364220a7eSMarcel Moolenaar { 0x135c, 0x0060, 0xffff, 0,
95464220a7eSMarcel Moolenaar "Quatech ESC-100M",
95564220a7eSMarcel Moolenaar -3, /* max 8x clock rate */
95664220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8,
95764220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9589c564b6cSJohn Hay },
9599c564b6cSJohn Hay
96064220a7eSMarcel Moolenaar { 0x135c, 0x0170, 0xffff, 0,
96164220a7eSMarcel Moolenaar "Quatech QSCLP-100",
96264220a7eSMarcel Moolenaar -1, /* max 2x clock rate */
96364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8,
96464220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9659c564b6cSJohn Hay },
9669c564b6cSJohn Hay
96764220a7eSMarcel Moolenaar { 0x135c, 0x0180, 0xffff, 0,
96864220a7eSMarcel Moolenaar "Quatech DSCLP-100",
96964220a7eSMarcel Moolenaar -1, /* max 3x clock rate */
97064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8,
97164220a7eSMarcel Moolenaar .config_function = puc_config_quatech
97276353f68SJohn Hay },
97376353f68SJohn Hay
97464220a7eSMarcel Moolenaar { 0x135c, 0x01b0, 0xffff, 0,
97564220a7eSMarcel Moolenaar "Quatech DSCLP-200/300",
97664220a7eSMarcel Moolenaar -1, /* max 2x clock rate */
97764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8,
97864220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9799c564b6cSJohn Hay },
9809c564b6cSJohn Hay
98164220a7eSMarcel Moolenaar { 0x135c, 0x01e0, 0xffff, 0,
98264220a7eSMarcel Moolenaar "Quatech ESCLP-100",
98364220a7eSMarcel Moolenaar -3, /* max 8x clock rate */
98464220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8,
98564220a7eSMarcel Moolenaar .config_function = puc_config_quatech
9869c564b6cSJohn Hay },
9879c564b6cSJohn Hay
988f83255a5SMax Khon { 0x1393, 0x1024, 0xffff, 0,
989f83255a5SMax Khon "Moxa Technologies, Smartio CP-102E/PCIe",
990f83255a5SMax Khon DEFAULT_RCLK * 8,
99151cb024fSMax Khon PUC_PORT_2S, 0x14, 0, -1,
99251cb024fSMax Khon .config_function = puc_config_moxa
993f83255a5SMax Khon },
994f83255a5SMax Khon
995f83255a5SMax Khon { 0x1393, 0x1025, 0xffff, 0,
996f83255a5SMax Khon "Moxa Technologies, Smartio CP-102EL/PCIe",
997f83255a5SMax Khon DEFAULT_RCLK * 8,
99851cb024fSMax Khon PUC_PORT_2S, 0x14, 0, -1,
99951cb024fSMax Khon .config_function = puc_config_moxa
1000f83255a5SMax Khon },
1001f83255a5SMax Khon
100264220a7eSMarcel Moolenaar { 0x1393, 0x1040, 0xffff, 0,
100364220a7eSMarcel Moolenaar "Moxa Technologies, Smartio C104H/PCI",
100464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
100564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8,
10060ec6e983SJoerg Wunsch },
100740f01890SBruce Evans
100864220a7eSMarcel Moolenaar { 0x1393, 0x1041, 0xffff, 0,
100964220a7eSMarcel Moolenaar "Moxa Technologies, Smartio CP-104UL/PCI",
101064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
101164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8,
10129c564b6cSJohn Hay },
10139c564b6cSJohn Hay
10142c89ac5eSEitan Adler { 0x1393, 0x1042, 0xffff, 0,
10152c89ac5eSEitan Adler "Moxa Technologies, Smartio CP-104JU/PCI",
10162c89ac5eSEitan Adler DEFAULT_RCLK * 8,
10172c89ac5eSEitan Adler PUC_PORT_4S, 0x18, 0, 8,
10182c89ac5eSEitan Adler },
10192c89ac5eSEitan Adler
1020f6a60febSMaxim Konovalov { 0x1393, 0x1043, 0xffff, 0,
1021f6a60febSMaxim Konovalov "Moxa Technologies, Smartio CP-104EL/PCIe",
1022f6a60febSMaxim Konovalov DEFAULT_RCLK * 8,
1023f6a60febSMaxim Konovalov PUC_PORT_4S, 0x18, 0, 8,
1024f6a60febSMaxim Konovalov },
1025f6a60febSMaxim Konovalov
10262c89ac5eSEitan Adler { 0x1393, 0x1045, 0xffff, 0,
10272c89ac5eSEitan Adler "Moxa Technologies, Smartio CP-104EL-A/PCIe",
10282c89ac5eSEitan Adler DEFAULT_RCLK * 8,
10292c89ac5eSEitan Adler PUC_PORT_4S, 0x14, 0, -1,
10302c89ac5eSEitan Adler .config_function = puc_config_moxa
10312c89ac5eSEitan Adler },
10322c89ac5eSEitan Adler
10338efbf264SJohn Baldwin { 0x1393, 0x1120, 0xffff, 0,
10348efbf264SJohn Baldwin "Moxa Technologies, CP-112UL",
10358efbf264SJohn Baldwin DEFAULT_RCLK * 8,
10368efbf264SJohn Baldwin PUC_PORT_2S, 0x18, 0, 8,
10378efbf264SJohn Baldwin },
10388efbf264SJohn Baldwin
103964220a7eSMarcel Moolenaar { 0x1393, 0x1141, 0xffff, 0,
104064220a7eSMarcel Moolenaar "Moxa Technologies, Industio CP-114",
104164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
104264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8,
10439c564b6cSJohn Hay },
10449c564b6cSJohn Hay
1045f83255a5SMax Khon { 0x1393, 0x1144, 0xffff, 0,
1046f83255a5SMax Khon "Moxa Technologies, Smartio CP-114EL/PCIe",
1047f83255a5SMax Khon DEFAULT_RCLK * 8,
1048f83255a5SMax Khon PUC_PORT_4S, 0x14, 0, -1,
1049f83255a5SMax Khon .config_function = puc_config_moxa
1050f83255a5SMax Khon },
1051f83255a5SMax Khon
1052f83255a5SMax Khon { 0x1393, 0x1182, 0xffff, 0,
1053f83255a5SMax Khon "Moxa Technologies, Smartio CP-118EL-A/PCIe",
1054f83255a5SMax Khon DEFAULT_RCLK * 8,
105551cb024fSMax Khon PUC_PORT_8S, 0x14, 0, -1,
105651cb024fSMax Khon .config_function = puc_config_moxa
1057f83255a5SMax Khon },
1058f83255a5SMax Khon
105964220a7eSMarcel Moolenaar { 0x1393, 0x1680, 0xffff, 0,
106064220a7eSMarcel Moolenaar "Moxa Technologies, C168H/PCI",
106164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
106264220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8,
10639c564b6cSJohn Hay },
10649c564b6cSJohn Hay
106564220a7eSMarcel Moolenaar { 0x1393, 0x1681, 0xffff, 0,
106664220a7eSMarcel Moolenaar "Moxa Technologies, C168U/PCI",
106764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
106864220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8,
10699c564b6cSJohn Hay },
10709c564b6cSJohn Hay
10710db1aa0bSStanislav Sedov { 0x1393, 0x1682, 0xffff, 0,
10720db1aa0bSStanislav Sedov "Moxa Technologies, CP-168EL/PCIe",
10730db1aa0bSStanislav Sedov DEFAULT_RCLK * 8,
10740db1aa0bSStanislav Sedov PUC_PORT_8S, 0x18, 0, 8,
10750db1aa0bSStanislav Sedov },
10760db1aa0bSStanislav Sedov
1077f83255a5SMax Khon { 0x1393, 0x1683, 0xffff, 0,
1078f83255a5SMax Khon "Moxa Technologies, Smartio CP-168EL-A/PCIe",
1079f83255a5SMax Khon DEFAULT_RCLK * 8,
108051cb024fSMax Khon PUC_PORT_8S, 0x14, 0, -1,
108151cb024fSMax Khon .config_function = puc_config_moxa
1082f83255a5SMax Khon },
1083f83255a5SMax Khon
108422e0612fSJohn Baldwin { 0x13a8, 0x0152, 0xffff, 0,
108522e0612fSJohn Baldwin "Exar XR17C/D152",
108622e0612fSJohn Baldwin DEFAULT_RCLK * 8,
108722e0612fSJohn Baldwin PUC_PORT_2S, 0x10, 0, -1,
108822e0612fSJohn Baldwin .config_function = puc_config_exar
108922e0612fSJohn Baldwin },
109022e0612fSJohn Baldwin
109122e0612fSJohn Baldwin { 0x13a8, 0x0154, 0xffff, 0,
109222e0612fSJohn Baldwin "Exar XR17C154",
109322e0612fSJohn Baldwin DEFAULT_RCLK * 8,
109422e0612fSJohn Baldwin PUC_PORT_4S, 0x10, 0, -1,
109522e0612fSJohn Baldwin .config_function = puc_config_exar
109622e0612fSJohn Baldwin },
109722e0612fSJohn Baldwin
109864220a7eSMarcel Moolenaar { 0x13a8, 0x0158, 0xffff, 0,
109922e0612fSJohn Baldwin "Exar XR17C158",
110064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
110164220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, -1,
110222e0612fSJohn Baldwin .config_function = puc_config_exar
1103de0d2cadSJohn Hay },
1104de0d2cadSJohn Hay
110579aac43eSEd Maste { 0x13a8, 0x0258, 0xffff, 0,
110679aac43eSEd Maste "Exar XR17V258IV",
110779aac43eSEd Maste DEFAULT_RCLK * 8,
110879aac43eSEd Maste PUC_PORT_8S, 0x10, 0, -1,
11093aff0961SRyan Stone .config_function = puc_config_exar
111079aac43eSEd Maste },
111179aac43eSEd Maste
1112cbb009b9SConrad Meyer { 0x13a8, 0x0352, 0xffff, 0,
1113cbb009b9SConrad Meyer "Exar XR17V352",
1114cbb009b9SConrad Meyer 125000000,
1115cbb009b9SConrad Meyer PUC_PORT_2S, 0x10, 0, -1,
1116cbb009b9SConrad Meyer .config_function = puc_config_exar_pcie
1117cbb009b9SConrad Meyer },
1118cbb009b9SConrad Meyer
11195704277aSTeerayut Hiruntaraporn { 0x13a8, 0x0354, 0xffff, 0,
11205704277aSTeerayut Hiruntaraporn "Exar XR17V354",
11215704277aSTeerayut Hiruntaraporn 125000000,
11225704277aSTeerayut Hiruntaraporn PUC_PORT_4S, 0x10, 0, -1,
11235704277aSTeerayut Hiruntaraporn .config_function = puc_config_exar_pcie
11245704277aSTeerayut Hiruntaraporn },
11255704277aSTeerayut Hiruntaraporn
11268de2c77bSRyan Stone /* The XR17V358 uses the 125MHz PCIe clock as its reference clock. */
11278de2c77bSRyan Stone { 0x13a8, 0x0358, 0xffff, 0,
11288de2c77bSRyan Stone "Exar XR17V358",
11298de2c77bSRyan Stone 125000000,
11308de2c77bSRyan Stone PUC_PORT_8S, 0x10, 0, -1,
11318de2c77bSRyan Stone .config_function = puc_config_exar_pcie
11328de2c77bSRyan Stone },
11338de2c77bSRyan Stone
11343deebd53SMarius Strobl /*
11353deebd53SMarius Strobl * The Advantech PCI-1602 Rev. A use the first two ports of an Oxford
11363deebd53SMarius Strobl * Semiconductor OXuPCI954. Note these boards have a hardware bug in
11373deebd53SMarius Strobl * that they drive the RS-422/485 transmitters after power-on until a
11385aa0576bSEd Maste * driver initializes the UARTs.
11393deebd53SMarius Strobl */
11405bcc8e2fSEitan Adler { 0x13fe, 0x1600, 0x1602, 0x0002,
11413deebd53SMarius Strobl "Advantech PCI-1602 Rev. A",
11425bcc8e2fSEitan Adler DEFAULT_RCLK * 8,
11435bcc8e2fSEitan Adler PUC_PORT_2S, 0x10, 0, 8,
11443deebd53SMarius Strobl .config_function = puc_config_advantech
11453deebd53SMarius Strobl },
11463deebd53SMarius Strobl
11473deebd53SMarius Strobl /* Advantech PCI-1602 Rev. B1/PCI-1603 are also based on OXuPCI952. */
11483deebd53SMarius Strobl { 0x13fe, 0xa102, 0x13fe, 0xa102,
11493deebd53SMarius Strobl "Advantech 2-port PCI (PCI-1602 Rev. B1/PCI-1603)",
11503deebd53SMarius Strobl DEFAULT_RCLK * 8,
11513deebd53SMarius Strobl PUC_PORT_2S, 0x10, 4, 0,
11523deebd53SMarius Strobl .config_function = puc_config_advantech
11535bcc8e2fSEitan Adler },
11545bcc8e2fSEitan Adler
115564220a7eSMarcel Moolenaar { 0x1407, 0x0100, 0xffff, 0,
115664220a7eSMarcel Moolenaar "Lava Computers Dual Serial",
115764220a7eSMarcel Moolenaar DEFAULT_RCLK,
115864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
11599c564b6cSJohn Hay },
11609c564b6cSJohn Hay
116164220a7eSMarcel Moolenaar { 0x1407, 0x0101, 0xffff, 0,
116264220a7eSMarcel Moolenaar "Lava Computers Quatro A",
116364220a7eSMarcel Moolenaar DEFAULT_RCLK,
116464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
11659c564b6cSJohn Hay },
11669c564b6cSJohn Hay
116764220a7eSMarcel Moolenaar { 0x1407, 0x0102, 0xffff, 0,
116864220a7eSMarcel Moolenaar "Lava Computers Quatro B",
116964220a7eSMarcel Moolenaar DEFAULT_RCLK,
117064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
11719c564b6cSJohn Hay },
11729c564b6cSJohn Hay
117364220a7eSMarcel Moolenaar { 0x1407, 0x0120, 0xffff, 0,
117464220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI A",
117564220a7eSMarcel Moolenaar DEFAULT_RCLK,
117664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
11779c564b6cSJohn Hay },
117864220a7eSMarcel Moolenaar
117964220a7eSMarcel Moolenaar { 0x1407, 0x0121, 0xffff, 0,
118064220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI B",
118164220a7eSMarcel Moolenaar DEFAULT_RCLK,
118264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
118364220a7eSMarcel Moolenaar },
118464220a7eSMarcel Moolenaar
118564220a7eSMarcel Moolenaar { 0x1407, 0x0180, 0xffff, 0,
118664220a7eSMarcel Moolenaar "Lava Computers Octo A",
118764220a7eSMarcel Moolenaar DEFAULT_RCLK,
118864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0,
118964220a7eSMarcel Moolenaar },
119064220a7eSMarcel Moolenaar
119164220a7eSMarcel Moolenaar { 0x1407, 0x0181, 0xffff, 0,
119264220a7eSMarcel Moolenaar "Lava Computers Octo B",
119364220a7eSMarcel Moolenaar DEFAULT_RCLK,
119464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0,
119564220a7eSMarcel Moolenaar },
119664220a7eSMarcel Moolenaar
119713ae6dceSKevin Lo { 0x1409, 0x7268, 0xffff, 0,
119813ae6dceSKevin Lo "Sunix SUN1888",
119913ae6dceSKevin Lo 0,
120013ae6dceSKevin Lo PUC_PORT_2P, 0x10, 0, 8,
120113ae6dceSKevin Lo },
120213ae6dceSKevin Lo
120364220a7eSMarcel Moolenaar { 0x1409, 0x7168, 0xffff, 0,
120464220a7eSMarcel Moolenaar NULL,
120564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
120664220a7eSMarcel Moolenaar PUC_PORT_NONSTANDARD, 0x10, -1, -1,
120764220a7eSMarcel Moolenaar .config_function = puc_config_timedia
12089c564b6cSJohn Hay },
12099c564b6cSJohn Hay
12109c564b6cSJohn Hay /*
12119c564b6cSJohn Hay * Boards with an Oxford Semiconductor chip.
12129c564b6cSJohn Hay *
12139c564b6cSJohn Hay * Oxford Semiconductor provides documentation for their chip at:
12146e9f075aSJohn Baldwin * <URL:http://www.plxtech.com/products/uart/>
12159c564b6cSJohn Hay *
12169c564b6cSJohn Hay * As sold by Kouwell <URL:http://www.kouwell.com/>.
12179c564b6cSJohn Hay * I/O Flex PCI I/O Card Model-223 with 4 serial and 1 parallel ports.
12189c564b6cSJohn Hay */
1219acdfc36aSEitan Adler {
1220acdfc36aSEitan Adler 0x1415, 0x9501, 0x10fc, 0xc070,
1221acdfc36aSEitan Adler "I-O DATA RSA-PCI2/R",
1222acdfc36aSEitan Adler DEFAULT_RCLK * 8,
1223acdfc36aSEitan Adler PUC_PORT_2S, 0x10, 0, 8,
1224acdfc36aSEitan Adler },
12259c564b6cSJohn Hay
12260db885bbSDag-Erling Smørgrav { 0x1415, 0x9501, 0x131f, 0x2050,
12270db885bbSDag-Erling Smørgrav "SIIG Cyber 4 PCI 16550",
12280db885bbSDag-Erling Smørgrav DEFAULT_RCLK * 10,
12290db885bbSDag-Erling Smørgrav PUC_PORT_4S, 0x10, 0, 8,
12300db885bbSDag-Erling Smørgrav },
12310db885bbSDag-Erling Smørgrav
12321d860a7eSMarcel Moolenaar { 0x1415, 0x9501, 0x131f, 0x2051,
12331d860a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)",
12341d860a7eSMarcel Moolenaar DEFAULT_RCLK * 10,
12351d860a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
12361d860a7eSMarcel Moolenaar },
12371d860a7eSMarcel Moolenaar
123830ced0d8SJohn Baldwin { 0x1415, 0x9501, 0x131f, 0x2052,
123930ced0d8SJohn Baldwin "SIIG Quartet Serial 850",
124030ced0d8SJohn Baldwin DEFAULT_RCLK * 10,
124130ced0d8SJohn Baldwin PUC_PORT_4S, 0x10, 0, 8,
124230ced0d8SJohn Baldwin },
124330ced0d8SJohn Baldwin
1244282211eaSJohn Baldwin { 0x1415, 0x9501, 0x14db, 0x2150,
1245282211eaSJohn Baldwin "Kuroutoshikou SERIAL4P-LPPCI2",
1246282211eaSJohn Baldwin DEFAULT_RCLK * 10,
1247282211eaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8,
1248282211eaSJohn Baldwin },
1249282211eaSJohn Baldwin
125064220a7eSMarcel Moolenaar { 0x1415, 0x9501, 0xffff, 0,
1251c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs",
1252d5e0798eSMarius Strobl 0,
125364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
1254d5e0798eSMarius Strobl .config_function = puc_config_oxford_pci954
125583431653SWarner Losh },
125683431653SWarner Losh
125710414b71SJohn Baldwin { 0x1415, 0x950a, 0x131f, 0x2030,
125810414b71SJohn Baldwin "SIIG Cyber 2S PCIe",
125910414b71SJohn Baldwin DEFAULT_RCLK * 10,
126010414b71SJohn Baldwin PUC_PORT_2S, 0x10, 0, 8,
126110414b71SJohn Baldwin },
126210414b71SJohn Baldwin
12630dfbbaceSEitan Adler { 0x1415, 0x950a, 0x131f, 0x2032,
12640dfbbaceSEitan Adler "SIIG Cyber Serial Dual PCI 16C850",
12650dfbbaceSEitan Adler DEFAULT_RCLK * 10,
12660dfbbaceSEitan Adler PUC_PORT_4S, 0x10, 0, 8,
12670dfbbaceSEitan Adler },
12680dfbbaceSEitan Adler
12691714dcabSMarius Strobl { 0x1415, 0x950a, 0x131f, 0x2061,
12701714dcabSMarius Strobl "SIIG Cyber 2SP1 PCIe",
12711714dcabSMarius Strobl DEFAULT_RCLK * 10,
12721714dcabSMarius Strobl PUC_PORT_2S, 0x10, 0, 8,
12731714dcabSMarius Strobl },
12741714dcabSMarius Strobl
127564220a7eSMarcel Moolenaar { 0x1415, 0x950a, 0xffff, 0,
1276c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs",
1277c44bdcb0SDag-Erling Smørgrav DEFAULT_RCLK,
127864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
12799c564b6cSJohn Hay },
12809c564b6cSJohn Hay
128164220a7eSMarcel Moolenaar { 0x1415, 0x9511, 0xffff, 0,
128264220a7eSMarcel Moolenaar "Oxford Semiconductor OX9160/OX16PCI954 UARTs (function 1)",
128364220a7eSMarcel Moolenaar DEFAULT_RCLK,
128464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
128543e42f36SDoug Ambrisko },
128643e42f36SDoug Ambrisko
128764220a7eSMarcel Moolenaar { 0x1415, 0x9521, 0xffff, 0,
128864220a7eSMarcel Moolenaar "Oxford Semiconductor OX16PCI952 UARTs",
128964220a7eSMarcel Moolenaar DEFAULT_RCLK,
129064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
12916cb38a02SDoug Ambrisko },
12926cb38a02SDoug Ambrisko
129311a12794SRoman Kurakin { 0x1415, 0x9538, 0xffff, 0,
129411a12794SRoman Kurakin "Oxford Semiconductor OX16PCI958 UARTs",
129500ff5de5SMarius Strobl DEFAULT_RCLK,
129611a12794SRoman Kurakin PUC_PORT_8S, 0x18, 0, 8,
129711a12794SRoman Kurakin },
129811a12794SRoman Kurakin
1299f09d9fbaSJohn Baldwin /*
1300f09d9fbaSJohn Baldwin * Perle boards use Oxford Semiconductor chips, but they store the
1301f09d9fbaSJohn Baldwin * Oxford Semiconductor device ID as a subvendor device ID and use
1302f09d9fbaSJohn Baldwin * their own device IDs.
1303f09d9fbaSJohn Baldwin */
1304f09d9fbaSJohn Baldwin
1305f09d9fbaSJohn Baldwin { 0x155f, 0x0331, 0xffff, 0,
1306edfaa737SEitan Adler "Perle Ultraport4 Express",
1307edfaa737SEitan Adler DEFAULT_RCLK * 8,
1308edfaa737SEitan Adler PUC_PORT_4S, 0x10, 0, 8,
1309edfaa737SEitan Adler },
1310edfaa737SEitan Adler
1311edfaa737SEitan Adler { 0x155f, 0xB012, 0xffff, 0,
1312edfaa737SEitan Adler "Perle Speed2 LE",
1313edfaa737SEitan Adler DEFAULT_RCLK * 8,
1314edfaa737SEitan Adler PUC_PORT_2S, 0x10, 0, 8,
1315edfaa737SEitan Adler },
1316edfaa737SEitan Adler
1317edfaa737SEitan Adler { 0x155f, 0xB022, 0xffff, 0,
1318edfaa737SEitan Adler "Perle Speed2 LE",
1319edfaa737SEitan Adler DEFAULT_RCLK * 8,
1320edfaa737SEitan Adler PUC_PORT_2S, 0x10, 0, 8,
1321edfaa737SEitan Adler },
1322edfaa737SEitan Adler
1323edfaa737SEitan Adler { 0x155f, 0xB004, 0xffff, 0,
1324f09d9fbaSJohn Baldwin "Perle Speed4 LE",
1325f09d9fbaSJohn Baldwin DEFAULT_RCLK * 8,
1326f09d9fbaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8,
1327f09d9fbaSJohn Baldwin },
1328f09d9fbaSJohn Baldwin
1329edfaa737SEitan Adler { 0x155f, 0xB008, 0xffff, 0,
1330edfaa737SEitan Adler "Perle Speed8 LE",
1331edfaa737SEitan Adler DEFAULT_RCLK * 8,
1332edfaa737SEitan Adler PUC_PORT_8S, 0x10, 0, 8,
1333edfaa737SEitan Adler },
1334edfaa737SEitan Adler
13356e9f075aSJohn Baldwin /*
13366e9f075aSJohn Baldwin * Oxford Semiconductor PCI Express Expresso family
13376e9f075aSJohn Baldwin *
13386e9f075aSJohn Baldwin * Found in many 'native' PCI Express serial boards such as:
13396e9f075aSJohn Baldwin *
13406e9f075aSJohn Baldwin * eMegatech MP954ER4 (4 port) and MP958ER8 (8 port)
13416e9f075aSJohn Baldwin * <URL:http://www.emegatech.com.tw/pdrs232pcie.html>
13426e9f075aSJohn Baldwin *
13436e9f075aSJohn Baldwin * Lindy 51189 (4 port)
13446e9f075aSJohn Baldwin * <URL:http://www.lindy.com> <URL:http://tinyurl.com/lindy-51189>
13456e9f075aSJohn Baldwin *
13466e9f075aSJohn Baldwin * StarTech.com PEX4S952 (4 port) and PEX8S952 (8 port)
13476e9f075aSJohn Baldwin * <URL:http://www.startech.com>
13486e9f075aSJohn Baldwin */
13496e9f075aSJohn Baldwin
1350bdb4291fSRui Paulo { 0x1415, 0xc11b, 0xffff, 0,
1351bdb4291fSRui Paulo "Oxford Semiconductor OXPCIe952 1S1P",
1352bdb4291fSRui Paulo DEFAULT_RCLK * 0x22,
1353bdb4291fSRui Paulo PUC_PORT_NONSTANDARD, 0x10, 0, -1,
1354bdb4291fSRui Paulo .config_function = puc_config_oxford_pcie
1355bdb4291fSRui Paulo },
1356bdb4291fSRui Paulo
1357a6a64612SAndrey V. Elsukov { 0x1415, 0xc138, 0xffff, 0,
1358a6a64612SAndrey V. Elsukov "Oxford Semiconductor OXPCIe952 UARTs",
1359a6a64612SAndrey V. Elsukov DEFAULT_RCLK * 0x22,
1360a6a64612SAndrey V. Elsukov PUC_PORT_NONSTANDARD, 0x10, 0, -1,
1361a6a64612SAndrey V. Elsukov .config_function = puc_config_oxford_pcie
1362a6a64612SAndrey V. Elsukov },
1363a6a64612SAndrey V. Elsukov
13646e9f075aSJohn Baldwin { 0x1415, 0xc158, 0xffff, 0,
13656e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs",
13666e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22,
13676e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1,
13686e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie
13696e9f075aSJohn Baldwin },
13706e9f075aSJohn Baldwin
13716e9f075aSJohn Baldwin { 0x1415, 0xc15d, 0xffff, 0,
13726e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs (function 1)",
13736e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22,
13746e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1,
13756e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie
13766e9f075aSJohn Baldwin },
13776e9f075aSJohn Baldwin
13786e9f075aSJohn Baldwin { 0x1415, 0xc208, 0xffff, 0,
13796e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs",
13806e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22,
13816e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1,
13826e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie
13836e9f075aSJohn Baldwin },
13846e9f075aSJohn Baldwin
13856e9f075aSJohn Baldwin { 0x1415, 0xc20d, 0xffff, 0,
13866e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs (function 1)",
13876e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22,
13886e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1,
13896e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie
13906e9f075aSJohn Baldwin },
13916e9f075aSJohn Baldwin
13926e9f075aSJohn Baldwin { 0x1415, 0xc308, 0xffff, 0,
13936e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs",
13946e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22,
13956e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1,
13966e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie
13976e9f075aSJohn Baldwin },
13986e9f075aSJohn Baldwin
13996e9f075aSJohn Baldwin { 0x1415, 0xc30d, 0xffff, 0,
14006e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs (function 1)",
14016e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22,
14026e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1,
14036e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie
14046e9f075aSJohn Baldwin },
14056e9f075aSJohn Baldwin
140646ce58c7SAndrew Thompson { 0x14d2, 0x8010, 0xffff, 0,
140746ce58c7SAndrew Thompson "VScom PCI-100L",
140846ce58c7SAndrew Thompson DEFAULT_RCLK * 8,
140946ce58c7SAndrew Thompson PUC_PORT_1S, 0x14, 0, 0,
141046ce58c7SAndrew Thompson },
141146ce58c7SAndrew Thompson
141264220a7eSMarcel Moolenaar { 0x14d2, 0x8020, 0xffff, 0,
141364220a7eSMarcel Moolenaar "VScom PCI-200L",
141464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
141564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 4, 0,
1416a58deb46SColin Percival },
1417a58deb46SColin Percival
141864220a7eSMarcel Moolenaar { 0x14d2, 0x8028, 0xffff, 0,
141946dd877dSPoul-Henning Kamp "VScom 200Li",
142064220a7eSMarcel Moolenaar DEFAULT_RCLK,
142164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x20, 0, 8,
142246dd877dSPoul-Henning Kamp },
14233e19d3c0SBruce M Simpson
142464220a7eSMarcel Moolenaar /*
142564220a7eSMarcel Moolenaar * VScom (Titan?) PCI-800L. More modern variant of the
142664220a7eSMarcel Moolenaar * PCI-800. Uses 6 discrete 16550 UARTs, plus another
142764220a7eSMarcel Moolenaar * two of them obviously implemented as macro cells in
142864220a7eSMarcel Moolenaar * the ASIC. This causes the weird port access pattern
142964220a7eSMarcel Moolenaar * below, where two of the IO port ranges each access
143064220a7eSMarcel Moolenaar * one of the ASIC UARTs, and a block of IO addresses
143164220a7eSMarcel Moolenaar * access the external UARTs.
143264220a7eSMarcel Moolenaar */
143364220a7eSMarcel Moolenaar { 0x14d2, 0x8080, 0xffff, 0,
143464220a7eSMarcel Moolenaar "Titan VScom PCI-800L",
143564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
143664220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1,
143764220a7eSMarcel Moolenaar .config_function = puc_config_titan
143864220a7eSMarcel Moolenaar },
143964220a7eSMarcel Moolenaar
144064220a7eSMarcel Moolenaar /*
144164220a7eSMarcel Moolenaar * VScom PCI-800H. Uses 8 16950 UART, behind a PCI chips that offers
144264220a7eSMarcel Moolenaar * 4 com port on PCI device 0 and 4 on PCI device 1. PCI device 0 has
144364220a7eSMarcel Moolenaar * device ID 3 and PCI device 1 device ID 4.
144464220a7eSMarcel Moolenaar */
144564220a7eSMarcel Moolenaar { 0x14d2, 0xa003, 0xffff, 0,
144664220a7eSMarcel Moolenaar "Titan PCI-800H",
144764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
144864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
144964220a7eSMarcel Moolenaar },
145000ff5de5SMarius Strobl
145164220a7eSMarcel Moolenaar { 0x14d2, 0xa004, 0xffff, 0,
145264220a7eSMarcel Moolenaar "Titan PCI-800H",
145364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
145464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
145564220a7eSMarcel Moolenaar },
145664220a7eSMarcel Moolenaar
145764220a7eSMarcel Moolenaar { 0x14d2, 0xa005, 0xffff, 0,
145864220a7eSMarcel Moolenaar "Titan PCI-200H",
145964220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
146064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8,
146164220a7eSMarcel Moolenaar },
146264220a7eSMarcel Moolenaar
146364220a7eSMarcel Moolenaar { 0x14d2, 0xe020, 0xffff, 0,
146464220a7eSMarcel Moolenaar "Titan VScom PCI-200HV2",
146564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
146664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
146764220a7eSMarcel Moolenaar },
146864220a7eSMarcel Moolenaar
146964589ec8SEitan Adler { 0x14d2, 0xa007, 0xffff, 0,
147064589ec8SEitan Adler "Titan VScom PCIex-800H",
147164589ec8SEitan Adler DEFAULT_RCLK * 8,
147264589ec8SEitan Adler PUC_PORT_4S, 0x10, 0, 8,
147364589ec8SEitan Adler },
147464589ec8SEitan Adler
147564589ec8SEitan Adler { 0x14d2, 0xa008, 0xffff, 0,
147664589ec8SEitan Adler "Titan VScom PCIex-800H",
147764589ec8SEitan Adler DEFAULT_RCLK * 8,
147864589ec8SEitan Adler PUC_PORT_4S, 0x10, 0, 8,
147964589ec8SEitan Adler },
148064589ec8SEitan Adler
148164220a7eSMarcel Moolenaar { 0x14db, 0x2130, 0xffff, 0,
148264220a7eSMarcel Moolenaar "Avlab Technology, PCI IO 2S",
148364220a7eSMarcel Moolenaar DEFAULT_RCLK,
148464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
148564220a7eSMarcel Moolenaar },
148664220a7eSMarcel Moolenaar
148764220a7eSMarcel Moolenaar { 0x14db, 0x2150, 0xffff, 0,
148864220a7eSMarcel Moolenaar "Avlab Low Profile PCI 4 Serial",
148964220a7eSMarcel Moolenaar DEFAULT_RCLK,
149064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0,
149164220a7eSMarcel Moolenaar },
149264220a7eSMarcel Moolenaar
14930dc908e7SAndrew Thompson { 0x14db, 0x2152, 0xffff, 0,
14940dc908e7SAndrew Thompson "Avlab Low Profile PCI 4 Serial",
14950dc908e7SAndrew Thompson DEFAULT_RCLK,
14960dc908e7SAndrew Thompson PUC_PORT_4S, 0x10, 4, 0,
14970dc908e7SAndrew Thompson },
14980dc908e7SAndrew Thompson
149964220a7eSMarcel Moolenaar { 0x1592, 0x0781, 0xffff, 0,
150064220a7eSMarcel Moolenaar "Syba Tech Ltd. PCI-4S2P-550-ECP",
150164220a7eSMarcel Moolenaar DEFAULT_RCLK,
150264220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 0, -1,
150364220a7eSMarcel Moolenaar .config_function = puc_config_syba
150464220a7eSMarcel Moolenaar },
150564220a7eSMarcel Moolenaar
150650c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0002,
150750c0e894SMarius Strobl "Sunix SER5xxxx 2-port serial",
15087501345eSJohn Hay DEFAULT_RCLK * 8,
15097501345eSJohn Hay PUC_PORT_2S, 0x10, 0, 8,
15107501345eSJohn Hay },
15117501345eSJohn Hay
151250c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0004,
151350c0e894SMarius Strobl "Sunix SER5xxxx 4-port serial",
151450c0e894SMarius Strobl DEFAULT_RCLK * 8,
151550c0e894SMarius Strobl PUC_PORT_4S, 0x10, 0, 8,
151650c0e894SMarius Strobl },
151750c0e894SMarius Strobl
151850c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0008,
151950c0e894SMarius Strobl "Sunix SER5xxxx 8-port serial",
152050c0e894SMarius Strobl DEFAULT_RCLK * 8,
152150c0e894SMarius Strobl PUC_PORT_8S, -1, -1, -1,
152250c0e894SMarius Strobl .config_function = puc_config_sunix
152350c0e894SMarius Strobl },
152450c0e894SMarius Strobl
152550c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0101,
152650c0e894SMarius Strobl "Sunix MIO5xxxx 1-port serial and 1284 Printer port",
152750c0e894SMarius Strobl DEFAULT_RCLK * 8,
152850c0e894SMarius Strobl PUC_PORT_1S1P, -1, -1, -1,
152950c0e894SMarius Strobl .config_function = puc_config_sunix
153050c0e894SMarius Strobl },
153150c0e894SMarius Strobl
153250c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0102,
153310bcada8SMarius Strobl "Sunix MIO5xxxx 2-port serial and 1284 Printer port",
153450c0e894SMarius Strobl DEFAULT_RCLK * 8,
153550c0e894SMarius Strobl PUC_PORT_2S1P, -1, -1, -1,
153650c0e894SMarius Strobl .config_function = puc_config_sunix
153750c0e894SMarius Strobl },
153850c0e894SMarius Strobl
153950c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0104,
154050c0e894SMarius Strobl "Sunix MIO5xxxx 4-port serial and 1284 Printer port",
154150c0e894SMarius Strobl DEFAULT_RCLK * 8,
154250c0e894SMarius Strobl PUC_PORT_4S1P, -1, -1, -1,
154350c0e894SMarius Strobl .config_function = puc_config_sunix
154450c0e894SMarius Strobl },
154550c0e894SMarius Strobl
15467eae6323SLuiz Otavio O Souza { 0x5372, 0x6872, 0xffff, 0,
15477eae6323SLuiz Otavio O Souza "Feasso PCI FPP-02 2S1P",
15487eae6323SLuiz Otavio O Souza DEFAULT_RCLK,
15497eae6323SLuiz Otavio O Souza PUC_PORT_2S1P, 0x10, 4, 0,
15507eae6323SLuiz Otavio O Souza },
15517eae6323SLuiz Otavio O Souza
1552d9b73ea9SEitan Adler { 0x5372, 0x6873, 0xffff, 0,
1553d9b73ea9SEitan Adler "Sun 1040 PCI Quad Serial",
1554d9b73ea9SEitan Adler DEFAULT_RCLK,
1555d9b73ea9SEitan Adler PUC_PORT_4S, 0x10, 4, 0,
1556d9b73ea9SEitan Adler },
1557d9b73ea9SEitan Adler
155864220a7eSMarcel Moolenaar { 0x6666, 0x0001, 0xffff, 0,
155964220a7eSMarcel Moolenaar "Decision Computer Inc, PCCOM 4-port serial",
156064220a7eSMarcel Moolenaar DEFAULT_RCLK,
156164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x1c, 0, 8,
156264220a7eSMarcel Moolenaar },
156364220a7eSMarcel Moolenaar
1564858030c4SAndrew Thompson { 0x6666, 0x0002, 0xffff, 0,
1565858030c4SAndrew Thompson "Decision Computer Inc, PCCOM 8-port serial",
1566858030c4SAndrew Thompson DEFAULT_RCLK,
1567858030c4SAndrew Thompson PUC_PORT_8S, 0x1c, 0, 8,
1568858030c4SAndrew Thompson },
1569858030c4SAndrew Thompson
157064220a7eSMarcel Moolenaar { 0x6666, 0x0004, 0xffff, 0,
157164220a7eSMarcel Moolenaar "PCCOM dual port RS232/422/485",
157264220a7eSMarcel Moolenaar DEFAULT_RCLK,
157364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x1c, 0, 8,
157464220a7eSMarcel Moolenaar },
157564220a7eSMarcel Moolenaar
157664220a7eSMarcel Moolenaar { 0x9710, 0x9815, 0xffff, 0,
157764220a7eSMarcel Moolenaar "NetMos NM9815 Dual 1284 Printer port",
157864220a7eSMarcel Moolenaar 0,
157964220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0,
158064220a7eSMarcel Moolenaar },
158164220a7eSMarcel Moolenaar
1582843994aeSJohn Baldwin /*
158350c0e894SMarius Strobl * This is more specific than the generic NM9835 entry, and is placed
158450c0e894SMarius Strobl * here to _prevent_ puc(4) from claiming this single port card.
1585843994aeSJohn Baldwin *
1586843994aeSJohn Baldwin * uart(4) will claim this device.
1587843994aeSJohn Baldwin */
1588843994aeSJohn Baldwin { 0x9710, 0x9835, 0x1000, 1,
1589843994aeSJohn Baldwin "NetMos NM9835 based 1-port serial",
1590843994aeSJohn Baldwin DEFAULT_RCLK,
1591843994aeSJohn Baldwin PUC_PORT_1S, 0x10, 4, 0,
1592843994aeSJohn Baldwin },
1593843994aeSJohn Baldwin
1594045de714SNavdeep Parhar { 0x9710, 0x9835, 0x1000, 2,
1595045de714SNavdeep Parhar "NetMos NM9835 based 2-port serial",
1596045de714SNavdeep Parhar DEFAULT_RCLK,
1597045de714SNavdeep Parhar PUC_PORT_2S, 0x10, 4, 0,
1598045de714SNavdeep Parhar },
1599045de714SNavdeep Parhar
160064220a7eSMarcel Moolenaar { 0x9710, 0x9835, 0xffff, 0,
160164220a7eSMarcel Moolenaar "NetMos NM9835 Dual UART and 1284 Printer port",
160264220a7eSMarcel Moolenaar DEFAULT_RCLK,
160364220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0,
160464220a7eSMarcel Moolenaar },
160564220a7eSMarcel Moolenaar
160664220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0x1000, 0x0006,
160764220a7eSMarcel Moolenaar "NetMos NM9845 6 Port UART",
160864220a7eSMarcel Moolenaar DEFAULT_RCLK,
160964220a7eSMarcel Moolenaar PUC_PORT_6S, 0x10, 4, 0,
161064220a7eSMarcel Moolenaar },
161164220a7eSMarcel Moolenaar
161264220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0xffff, 0,
161364220a7eSMarcel Moolenaar "NetMos NM9845 Quad UART and 1284 Printer port",
161464220a7eSMarcel Moolenaar DEFAULT_RCLK,
161564220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 4, 0,
16161d864e0dSMarcel Moolenaar },
16171d864e0dSMarcel Moolenaar
16181d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3002,
16191d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART",
16201d864e0dSMarcel Moolenaar DEFAULT_RCLK,
16211d864e0dSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0,
16221d864e0dSMarcel Moolenaar },
16231d864e0dSMarcel Moolenaar
16241d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3003,
16251d864e0dSMarcel Moolenaar "NetMos NM9865 Triple UART",
16261d864e0dSMarcel Moolenaar DEFAULT_RCLK,
16271d864e0dSMarcel Moolenaar PUC_PORT_3S, 0x10, 4, 0,
16281d864e0dSMarcel Moolenaar },
16291d864e0dSMarcel Moolenaar
16301d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3004,
16311d864e0dSMarcel Moolenaar "NetMos NM9865 Quad UART",
16321d864e0dSMarcel Moolenaar DEFAULT_RCLK,
163300ff5de5SMarius Strobl PUC_PORT_4S, 0x10, 4, 0,
16341d864e0dSMarcel Moolenaar },
16351d864e0dSMarcel Moolenaar
16361d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3011,
16371d864e0dSMarcel Moolenaar "NetMos NM9865 Single UART and 1284 Printer port",
16381d864e0dSMarcel Moolenaar DEFAULT_RCLK,
16391d864e0dSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0,
16401d864e0dSMarcel Moolenaar },
16411d864e0dSMarcel Moolenaar
16421d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3012,
16431d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART and 1284 Printer port",
16441d864e0dSMarcel Moolenaar DEFAULT_RCLK,
16451d864e0dSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0,
16461d864e0dSMarcel Moolenaar },
16471d864e0dSMarcel Moolenaar
16481d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3020,
16491d864e0dSMarcel Moolenaar "NetMos NM9865 Dual 1284 Printer port",
16501d864e0dSMarcel Moolenaar DEFAULT_RCLK,
16511d864e0dSMarcel Moolenaar PUC_PORT_2P, 0x10, 4, 0,
165264220a7eSMarcel Moolenaar },
165364220a7eSMarcel Moolenaar
165464220a7eSMarcel Moolenaar { 0xb00c, 0x021c, 0xffff, 0,
165564220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Lite",
165664220a7eSMarcel Moolenaar DEFAULT_RCLK,
165764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
165864220a7eSMarcel Moolenaar .config_function = puc_config_icbook
165964220a7eSMarcel Moolenaar },
166064220a7eSMarcel Moolenaar
166164220a7eSMarcel Moolenaar { 0xb00c, 0x031c, 0xffff, 0,
166264220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Pro",
166364220a7eSMarcel Moolenaar DEFAULT_RCLK,
166464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
166564220a7eSMarcel Moolenaar .config_function = puc_config_icbook
166664220a7eSMarcel Moolenaar },
166764220a7eSMarcel Moolenaar
166864220a7eSMarcel Moolenaar { 0xb00c, 0x041c, 0xffff, 0,
166964220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Lite",
167064220a7eSMarcel Moolenaar DEFAULT_RCLK,
167164220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8,
167264220a7eSMarcel Moolenaar .config_function = puc_config_icbook
167364220a7eSMarcel Moolenaar },
167464220a7eSMarcel Moolenaar
167564220a7eSMarcel Moolenaar { 0xb00c, 0x051c, 0xffff, 0,
167664220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Pro",
167764220a7eSMarcel Moolenaar DEFAULT_RCLK,
167864220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8,
167964220a7eSMarcel Moolenaar .config_function = puc_config_icbook
168064220a7eSMarcel Moolenaar },
168164220a7eSMarcel Moolenaar
168264220a7eSMarcel Moolenaar { 0xb00c, 0x081c, 0xffff, 0,
168364220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Pro",
168464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8,
168564220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8,
168664220a7eSMarcel Moolenaar .config_function = puc_config_icbook
168764220a7eSMarcel Moolenaar },
168864220a7eSMarcel Moolenaar
168964220a7eSMarcel Moolenaar { 0xb00c, 0x091c, 0xffff, 0,
169064220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Lite",
169164220a7eSMarcel Moolenaar DEFAULT_RCLK,
169264220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8,
169364220a7eSMarcel Moolenaar .config_function = puc_config_icbook
169464220a7eSMarcel Moolenaar },
169564220a7eSMarcel Moolenaar
169664220a7eSMarcel Moolenaar { 0xb00c, 0x0a1c, 0xffff, 0,
169764220a7eSMarcel Moolenaar "IC Book Labs Gunboat x2 Low Profile",
169864220a7eSMarcel Moolenaar DEFAULT_RCLK,
169964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8,
170064220a7eSMarcel Moolenaar },
170164220a7eSMarcel Moolenaar
170264220a7eSMarcel Moolenaar { 0xb00c, 0x0b1c, 0xffff, 0,
170364220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Low Profile",
170464220a7eSMarcel Moolenaar DEFAULT_RCLK,
170564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8,
170664220a7eSMarcel Moolenaar .config_function = puc_config_icbook
170764220a7eSMarcel Moolenaar },
170864220a7eSMarcel Moolenaar { 0xffff, 0, 0xffff, 0, NULL, 0 }
17099c564b6cSJohn Hay };
171064220a7eSMarcel Moolenaar
171164220a7eSMarcel Moolenaar static int
puc_config_advantech(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port,intptr_t * res __unused)17123deebd53SMarius Strobl puc_config_advantech(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
17133deebd53SMarius Strobl intptr_t *res __unused)
17143deebd53SMarius Strobl {
17153deebd53SMarius Strobl const struct puc_cfg *cfg;
17163deebd53SMarius Strobl struct resource *cres;
17173deebd53SMarius Strobl struct puc_bar *bar;
17183deebd53SMarius Strobl device_t cdev, dev;
17193deebd53SMarius Strobl bus_size_t off;
17203deebd53SMarius Strobl int base, crtype, fixed, high, i, oxpcie;
17213deebd53SMarius Strobl uint8_t acr, func, mask;
17223deebd53SMarius Strobl
17233deebd53SMarius Strobl if (cmd != PUC_CFG_SETUP)
17243deebd53SMarius Strobl return (ENXIO);
17253deebd53SMarius Strobl
17263deebd53SMarius Strobl base = fixed = oxpcie = 0;
17273deebd53SMarius Strobl crtype = SYS_RES_IOPORT;
17283deebd53SMarius Strobl acr = mask = 0x0;
17293deebd53SMarius Strobl func = high = 1;
17303deebd53SMarius Strobl off = 0x60;
17313deebd53SMarius Strobl
17323deebd53SMarius Strobl cfg = sc->sc_cfg;
17333deebd53SMarius Strobl switch (cfg->subvendor) {
17343deebd53SMarius Strobl case 0x13fe:
17353deebd53SMarius Strobl switch (cfg->device) {
17363deebd53SMarius Strobl case 0xa102:
17373deebd53SMarius Strobl high = 0;
17383deebd53SMarius Strobl break;
17393deebd53SMarius Strobl default:
17403deebd53SMarius Strobl break;
17413deebd53SMarius Strobl }
17423deebd53SMarius Strobl default:
17433deebd53SMarius Strobl break;
17443deebd53SMarius Strobl }
17453deebd53SMarius Strobl if (fixed == 1)
17463deebd53SMarius Strobl goto setup;
17473deebd53SMarius Strobl
17483deebd53SMarius Strobl dev = sc->sc_dev;
17493deebd53SMarius Strobl cdev = pci_find_dbsf(pci_get_domain(dev), pci_get_bus(dev),
17503deebd53SMarius Strobl pci_get_slot(dev), func);
17513deebd53SMarius Strobl if (cdev == NULL) {
17523deebd53SMarius Strobl device_printf(dev, "could not find config function\n");
17533deebd53SMarius Strobl return (ENXIO);
17543deebd53SMarius Strobl }
17553deebd53SMarius Strobl
17563deebd53SMarius Strobl i = PCIR_BAR(0);
17573deebd53SMarius Strobl cres = bus_alloc_resource_any(cdev, crtype, &i, RF_ACTIVE);
17583deebd53SMarius Strobl if (cres == NULL) {
17593deebd53SMarius Strobl device_printf(dev, "could not allocate config resource\n");
17603deebd53SMarius Strobl return (ENXIO);
17613deebd53SMarius Strobl }
17623deebd53SMarius Strobl
17633deebd53SMarius Strobl if (oxpcie == 0) {
17643deebd53SMarius Strobl mask = bus_read_1(cres, off);
17653deebd53SMarius Strobl if (pci_get_function(dev) == 1)
17663deebd53SMarius Strobl base = 4;
17673deebd53SMarius Strobl }
17683deebd53SMarius Strobl
17693deebd53SMarius Strobl setup:
17703deebd53SMarius Strobl for (i = 0; i < sc->sc_nports; ++i) {
17713deebd53SMarius Strobl device_printf(dev, "port %d: ", i);
17723deebd53SMarius Strobl bar = puc_get_bar(sc, cfg->rid + i * cfg->d_rid);
17733deebd53SMarius Strobl if (bar == NULL) {
17743deebd53SMarius Strobl printf("could not get BAR\n");
17753deebd53SMarius Strobl continue;
17763deebd53SMarius Strobl }
17773deebd53SMarius Strobl
17783deebd53SMarius Strobl if (fixed == 0) {
17793deebd53SMarius Strobl if ((mask & (1 << (base + i))) == 0) {
17803deebd53SMarius Strobl acr = 0;
17813deebd53SMarius Strobl printf("RS-232\n");
17823deebd53SMarius Strobl } else {
17833deebd53SMarius Strobl acr = (high == 1 ? 0x18 : 0x10);
17843deebd53SMarius Strobl printf("RS-422/RS-485, active-%s auto-DTR\n",
17853deebd53SMarius Strobl high == 1 ? "high" : "low");
17863deebd53SMarius Strobl }
17873deebd53SMarius Strobl }
17883deebd53SMarius Strobl
17893deebd53SMarius Strobl bus_write_1(bar->b_res, REG_SPR, REG_ACR);
17903deebd53SMarius Strobl bus_write_1(bar->b_res, REG_ICR, acr);
17913deebd53SMarius Strobl }
17923deebd53SMarius Strobl
17933deebd53SMarius Strobl bus_release_resource(cdev, crtype, rman_get_rid(cres), cres);
17943deebd53SMarius Strobl return (0);
17953deebd53SMarius Strobl }
17963deebd53SMarius Strobl
17973deebd53SMarius Strobl static int
puc_config_amc(struct puc_softc * sc __unused,enum puc_cfg_cmd cmd,int port,intptr_t * res)1798430acc47SMarius Strobl puc_config_amc(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd, int port,
179964220a7eSMarcel Moolenaar intptr_t *res)
180064220a7eSMarcel Moolenaar {
1801430acc47SMarius Strobl
180264220a7eSMarcel Moolenaar switch (cmd) {
180364220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS:
180464220a7eSMarcel Moolenaar *res = 8 * (port & 1);
180564220a7eSMarcel Moolenaar return (0);
180664220a7eSMarcel Moolenaar case PUC_CFG_GET_RID:
180764220a7eSMarcel Moolenaar *res = 0x14 + (port >> 1) * 4;
180864220a7eSMarcel Moolenaar return (0);
180964220a7eSMarcel Moolenaar default:
181064220a7eSMarcel Moolenaar break;
181164220a7eSMarcel Moolenaar }
181264220a7eSMarcel Moolenaar return (ENXIO);
181364220a7eSMarcel Moolenaar }
181464220a7eSMarcel Moolenaar
181564220a7eSMarcel Moolenaar static int
puc_config_diva(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port,intptr_t * res)181664220a7eSMarcel Moolenaar puc_config_diva(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
181764220a7eSMarcel Moolenaar intptr_t *res)
181864220a7eSMarcel Moolenaar {
181964220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg;
182064220a7eSMarcel Moolenaar
182164220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_OFS) {
182264220a7eSMarcel Moolenaar if (cfg->subdevice == 0x1282) /* Everest SP */
182364220a7eSMarcel Moolenaar port <<= 1;
182464220a7eSMarcel Moolenaar else if (cfg->subdevice == 0x104b) /* Maestro SP2 */
182564220a7eSMarcel Moolenaar port = (port == 3) ? 4 : port;
182664220a7eSMarcel Moolenaar *res = port * 8 + ((port > 2) ? 0x18 : 0);
182764220a7eSMarcel Moolenaar return (0);
182864220a7eSMarcel Moolenaar }
182964220a7eSMarcel Moolenaar return (ENXIO);
183064220a7eSMarcel Moolenaar }
183164220a7eSMarcel Moolenaar
183264220a7eSMarcel Moolenaar static int
puc_config_exar(struct puc_softc * sc __unused,enum puc_cfg_cmd cmd,int port,intptr_t * res)1833430acc47SMarius Strobl puc_config_exar(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd,
1834430acc47SMarius Strobl int port, intptr_t *res)
183522e0612fSJohn Baldwin {
1836430acc47SMarius Strobl
183722e0612fSJohn Baldwin if (cmd == PUC_CFG_GET_OFS) {
183822e0612fSJohn Baldwin *res = port * 0x200;
183922e0612fSJohn Baldwin return (0);
184022e0612fSJohn Baldwin }
184122e0612fSJohn Baldwin return (ENXIO);
184222e0612fSJohn Baldwin }
184322e0612fSJohn Baldwin
184422e0612fSJohn Baldwin static int
puc_config_exar_pcie(struct puc_softc * sc __unused,enum puc_cfg_cmd cmd,int port,intptr_t * res)1845430acc47SMarius Strobl puc_config_exar_pcie(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd,
1846430acc47SMarius Strobl int port, intptr_t *res)
18478de2c77bSRyan Stone {
1848430acc47SMarius Strobl
18498de2c77bSRyan Stone if (cmd == PUC_CFG_GET_OFS) {
18508de2c77bSRyan Stone *res = port * 0x400;
18518de2c77bSRyan Stone return (0);
18528de2c77bSRyan Stone }
18538de2c77bSRyan Stone return (ENXIO);
18548de2c77bSRyan Stone }
18558de2c77bSRyan Stone
18568de2c77bSRyan Stone static int
puc_config_icbook(struct puc_softc * sc __unused,enum puc_cfg_cmd cmd,int port __unused,intptr_t * res)1857430acc47SMarius Strobl puc_config_icbook(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd,
1858430acc47SMarius Strobl int port __unused, intptr_t *res)
185964220a7eSMarcel Moolenaar {
1860430acc47SMarius Strobl
186164220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_ILR) {
186264220a7eSMarcel Moolenaar *res = PUC_ILR_DIGI;
186364220a7eSMarcel Moolenaar return (0);
186464220a7eSMarcel Moolenaar }
186564220a7eSMarcel Moolenaar return (ENXIO);
186664220a7eSMarcel Moolenaar }
186764220a7eSMarcel Moolenaar
186864220a7eSMarcel Moolenaar static int
puc_config_moxa(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port,intptr_t * res)18692c89ac5eSEitan Adler puc_config_moxa(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
18702c89ac5eSEitan Adler intptr_t *res)
18712c89ac5eSEitan Adler {
187251cb024fSMax Khon const struct puc_cfg *cfg = sc->sc_cfg;
187351cb024fSMax Khon
1874430acc47SMarius Strobl if (cmd == PUC_CFG_GET_OFS) {
18751714dcabSMarius Strobl if (port == 3 && (cfg->device == 0x1045 ||
18761714dcabSMarius Strobl cfg->device == 0x1144))
187751cb024fSMax Khon port = 7;
187851cb024fSMax Khon *res = port * 0x200;
187951cb024fSMax Khon
18802c89ac5eSEitan Adler return 0;
18812c89ac5eSEitan Adler }
18822c89ac5eSEitan Adler return (ENXIO);
18832c89ac5eSEitan Adler }
18842c89ac5eSEitan Adler
18852c89ac5eSEitan Adler static int
puc_config_quatech(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port __unused,intptr_t * res)1886430acc47SMarius Strobl puc_config_quatech(struct puc_softc *sc, enum puc_cfg_cmd cmd,
1887430acc47SMarius Strobl int port __unused, intptr_t *res)
188864220a7eSMarcel Moolenaar {
188964220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg;
189064220a7eSMarcel Moolenaar struct puc_bar *bar;
189164220a7eSMarcel Moolenaar uint8_t v0, v1;
189264220a7eSMarcel Moolenaar
189364220a7eSMarcel Moolenaar switch (cmd) {
189464220a7eSMarcel Moolenaar case PUC_CFG_SETUP:
189564220a7eSMarcel Moolenaar /*
189664220a7eSMarcel Moolenaar * Check if the scratchpad register is enabled or if the
189764220a7eSMarcel Moolenaar * interrupt status and options registers are active.
189864220a7eSMarcel Moolenaar */
189964220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid);
190064220a7eSMarcel Moolenaar if (bar == NULL)
190164220a7eSMarcel Moolenaar return (ENXIO);
19023deebd53SMarius Strobl bus_write_1(bar->b_res, REG_LCR, LCR_DLAB);
19033deebd53SMarius Strobl bus_write_1(bar->b_res, REG_SPR, 0);
19043deebd53SMarius Strobl v0 = bus_read_1(bar->b_res, REG_SPR);
19053deebd53SMarius Strobl bus_write_1(bar->b_res, REG_SPR, 0x80 + -cfg->clock);
19063deebd53SMarius Strobl v1 = bus_read_1(bar->b_res, REG_SPR);
19073deebd53SMarius Strobl bus_write_1(bar->b_res, REG_LCR, 0);
190864220a7eSMarcel Moolenaar sc->sc_cfg_data = (v0 << 8) | v1;
190964220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) {
191064220a7eSMarcel Moolenaar /*
191164220a7eSMarcel Moolenaar * The SPR register echoed the two values written
191264220a7eSMarcel Moolenaar * by us. This means that the SPAD jumper is set.
191364220a7eSMarcel Moolenaar */
191464220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: extra features "
191564220a7eSMarcel Moolenaar "not usable -- SPAD compatibility enabled\n");
191664220a7eSMarcel Moolenaar return (0);
191764220a7eSMarcel Moolenaar }
191864220a7eSMarcel Moolenaar if (v0 != 0) {
191964220a7eSMarcel Moolenaar /*
192064220a7eSMarcel Moolenaar * The first value doesn't match. This can only mean
192164220a7eSMarcel Moolenaar * that the SPAD jumper is not set and that a non-
192264220a7eSMarcel Moolenaar * standard fixed clock multiplier jumper is set.
192364220a7eSMarcel Moolenaar */
192464220a7eSMarcel Moolenaar if (bootverbose)
192564220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "fixed clock rate "
192664220a7eSMarcel Moolenaar "multiplier of %d\n", 1 << v0);
192764220a7eSMarcel Moolenaar if (v0 < -cfg->clock)
192864220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: "
192964220a7eSMarcel Moolenaar "suboptimal fixed clock rate multiplier "
193064220a7eSMarcel Moolenaar "setting\n");
193164220a7eSMarcel Moolenaar return (0);
193264220a7eSMarcel Moolenaar }
193364220a7eSMarcel Moolenaar /*
193464220a7eSMarcel Moolenaar * The first value matched, but the second didn't. We know
193564220a7eSMarcel Moolenaar * that the SPAD jumper is not set. We also know that the
193664220a7eSMarcel Moolenaar * clock rate multiplier is software controlled *and* that
193764220a7eSMarcel Moolenaar * we just programmed it to the maximum allowed.
193864220a7eSMarcel Moolenaar */
193964220a7eSMarcel Moolenaar if (bootverbose)
194064220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "clock rate multiplier of "
194164220a7eSMarcel Moolenaar "%d selected\n", 1 << -cfg->clock);
194264220a7eSMarcel Moolenaar return (0);
194364220a7eSMarcel Moolenaar case PUC_CFG_GET_CLOCK:
194464220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff;
194564220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff;
194664220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) {
194764220a7eSMarcel Moolenaar /*
194864220a7eSMarcel Moolenaar * XXX With the SPAD jumper applied, there's no
194964220a7eSMarcel Moolenaar * easy way of knowing if there's also a clock
195064220a7eSMarcel Moolenaar * rate multiplier jumper installed. Let's hope
195164220a7eSMarcel Moolenaar * not ...
195264220a7eSMarcel Moolenaar */
195364220a7eSMarcel Moolenaar *res = DEFAULT_RCLK;
195464220a7eSMarcel Moolenaar } else if (v0 == 0) {
195564220a7eSMarcel Moolenaar /*
195664220a7eSMarcel Moolenaar * No clock rate multiplier jumper installed,
195764220a7eSMarcel Moolenaar * so we programmed the board with the maximum
195864220a7eSMarcel Moolenaar * multiplier allowed as given to us in the
195964220a7eSMarcel Moolenaar * clock field of the config record (negated).
196064220a7eSMarcel Moolenaar */
196164220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << -cfg->clock;
196264220a7eSMarcel Moolenaar } else
196364220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << v0;
196464220a7eSMarcel Moolenaar return (0);
196564220a7eSMarcel Moolenaar case PUC_CFG_GET_ILR:
196664220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff;
196764220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff;
1968430acc47SMarius Strobl *res = (v0 == 0 && v1 == 0x80 + -cfg->clock) ?
1969430acc47SMarius Strobl PUC_ILR_NONE : PUC_ILR_QUATECH;
197064220a7eSMarcel Moolenaar return (0);
197164220a7eSMarcel Moolenaar default:
197264220a7eSMarcel Moolenaar break;
197364220a7eSMarcel Moolenaar }
197464220a7eSMarcel Moolenaar return (ENXIO);
197564220a7eSMarcel Moolenaar }
197664220a7eSMarcel Moolenaar
197764220a7eSMarcel Moolenaar static int
puc_config_syba(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port,intptr_t * res)197864220a7eSMarcel Moolenaar puc_config_syba(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
197964220a7eSMarcel Moolenaar intptr_t *res)
198064220a7eSMarcel Moolenaar {
198164220a7eSMarcel Moolenaar static int base[] = { 0x251, 0x3f0, 0 };
198264220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg;
198364220a7eSMarcel Moolenaar struct puc_bar *bar;
198464220a7eSMarcel Moolenaar int efir, idx, ofs;
198564220a7eSMarcel Moolenaar uint8_t v;
198664220a7eSMarcel Moolenaar
198764220a7eSMarcel Moolenaar switch (cmd) {
198864220a7eSMarcel Moolenaar case PUC_CFG_SETUP:
198964220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid);
199064220a7eSMarcel Moolenaar if (bar == NULL)
199164220a7eSMarcel Moolenaar return (ENXIO);
199264220a7eSMarcel Moolenaar
199364220a7eSMarcel Moolenaar /* configure both W83877TFs */
199464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0x89);
199564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87);
199664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87);
199764220a7eSMarcel Moolenaar idx = 0;
199864220a7eSMarcel Moolenaar while (base[idx] != 0) {
199964220a7eSMarcel Moolenaar efir = base[idx];
200064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x09);
200164220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1);
200264220a7eSMarcel Moolenaar if ((v & 0x0f) != 0x0c)
200364220a7eSMarcel Moolenaar return (ENXIO);
200464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16);
200564220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1);
200664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16);
200764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v | 0x04);
200864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16);
200964220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v & ~0x04);
201064220a7eSMarcel Moolenaar ofs = base[idx] & 0x300;
201164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x23);
201264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0x78) >> 2);
201364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x24);
201464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xf8) >> 2);
201564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x25);
201664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xe8) >> 2);
201764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x17);
201864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x03);
201964220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x28);
202064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x43);
202164220a7eSMarcel Moolenaar idx++;
202264220a7eSMarcel Moolenaar }
202364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0xaa);
202464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0xaa);
202564220a7eSMarcel Moolenaar return (0);
202664220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS:
202764220a7eSMarcel Moolenaar switch (port) {
202864220a7eSMarcel Moolenaar case 0:
202964220a7eSMarcel Moolenaar *res = 0x2f8;
203064220a7eSMarcel Moolenaar return (0);
203164220a7eSMarcel Moolenaar case 1:
203264220a7eSMarcel Moolenaar *res = 0x2e8;
203364220a7eSMarcel Moolenaar return (0);
203464220a7eSMarcel Moolenaar case 2:
203564220a7eSMarcel Moolenaar *res = 0x3f8;
203664220a7eSMarcel Moolenaar return (0);
203764220a7eSMarcel Moolenaar case 3:
203864220a7eSMarcel Moolenaar *res = 0x3e8;
203964220a7eSMarcel Moolenaar return (0);
204064220a7eSMarcel Moolenaar case 4:
204164220a7eSMarcel Moolenaar *res = 0x278;
204264220a7eSMarcel Moolenaar return (0);
204364220a7eSMarcel Moolenaar }
204464220a7eSMarcel Moolenaar break;
204564220a7eSMarcel Moolenaar default:
204664220a7eSMarcel Moolenaar break;
204764220a7eSMarcel Moolenaar }
204864220a7eSMarcel Moolenaar return (ENXIO);
204964220a7eSMarcel Moolenaar }
205064220a7eSMarcel Moolenaar
205164220a7eSMarcel Moolenaar static int
puc_config_siig(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port,intptr_t * res)205264220a7eSMarcel Moolenaar puc_config_siig(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
205364220a7eSMarcel Moolenaar intptr_t *res)
205464220a7eSMarcel Moolenaar {
205564220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg;
205664220a7eSMarcel Moolenaar
205764220a7eSMarcel Moolenaar switch (cmd) {
205864220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS:
205964220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) {
206064220a7eSMarcel Moolenaar *res = (port > 4) ? 8 * (port - 4) : 0;
206164220a7eSMarcel Moolenaar return (0);
206264220a7eSMarcel Moolenaar }
206364220a7eSMarcel Moolenaar break;
206464220a7eSMarcel Moolenaar case PUC_CFG_GET_RID:
206564220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) {
206664220a7eSMarcel Moolenaar *res = 0x10 + ((port > 4) ? 0x10 : 4 * port);
206764220a7eSMarcel Moolenaar return (0);
206864220a7eSMarcel Moolenaar }
206964220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_2S1P) {
207064220a7eSMarcel Moolenaar switch (port) {
207164220a7eSMarcel Moolenaar case 0: *res = 0x10; return (0);
207264220a7eSMarcel Moolenaar case 1: *res = 0x14; return (0);
207364220a7eSMarcel Moolenaar case 2: *res = 0x1c; return (0);
207464220a7eSMarcel Moolenaar }
207564220a7eSMarcel Moolenaar }
207664220a7eSMarcel Moolenaar break;
207764220a7eSMarcel Moolenaar default:
207864220a7eSMarcel Moolenaar break;
207964220a7eSMarcel Moolenaar }
208064220a7eSMarcel Moolenaar return (ENXIO);
208164220a7eSMarcel Moolenaar }
208264220a7eSMarcel Moolenaar
208364220a7eSMarcel Moolenaar static int
puc_config_timedia(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port,intptr_t * res)208464220a7eSMarcel Moolenaar puc_config_timedia(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
208564220a7eSMarcel Moolenaar intptr_t *res)
208664220a7eSMarcel Moolenaar {
208700ff5de5SMarius Strobl static const uint16_t dual[] = {
208864220a7eSMarcel Moolenaar 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085,
208964220a7eSMarcel Moolenaar 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079,
209064220a7eSMarcel Moolenaar 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079,
209164220a7eSMarcel Moolenaar 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079,
209264220a7eSMarcel Moolenaar 0xD079, 0
209364220a7eSMarcel Moolenaar };
209400ff5de5SMarius Strobl static const uint16_t quad[] = {
209564220a7eSMarcel Moolenaar 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157,
209664220a7eSMarcel Moolenaar 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159,
209764220a7eSMarcel Moolenaar 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056,
209864220a7eSMarcel Moolenaar 0xB157, 0
209964220a7eSMarcel Moolenaar };
210000ff5de5SMarius Strobl static const uint16_t octa[] = {
210164220a7eSMarcel Moolenaar 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166,
210264220a7eSMarcel Moolenaar 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0
210364220a7eSMarcel Moolenaar };
210400ff5de5SMarius Strobl static const struct {
210564220a7eSMarcel Moolenaar int ports;
210600ff5de5SMarius Strobl const uint16_t *ids;
210764220a7eSMarcel Moolenaar } subdevs[] = {
210864220a7eSMarcel Moolenaar { 2, dual },
210964220a7eSMarcel Moolenaar { 4, quad },
211064220a7eSMarcel Moolenaar { 8, octa },
211164220a7eSMarcel Moolenaar { 0, NULL }
211264220a7eSMarcel Moolenaar };
211364220a7eSMarcel Moolenaar static char desc[64];
211464220a7eSMarcel Moolenaar int dev, id;
211564220a7eSMarcel Moolenaar uint16_t subdev;
211664220a7eSMarcel Moolenaar
211764220a7eSMarcel Moolenaar switch (cmd) {
21189c418f51SJohn Baldwin case PUC_CFG_GET_CLOCK:
21199c418f51SJohn Baldwin if (port < 2)
21209c418f51SJohn Baldwin *res = DEFAULT_RCLK * 8;
21219c418f51SJohn Baldwin else
21229c418f51SJohn Baldwin *res = DEFAULT_RCLK;
21239c418f51SJohn Baldwin return (0);
212464220a7eSMarcel Moolenaar case PUC_CFG_GET_DESC:
212564220a7eSMarcel Moolenaar snprintf(desc, sizeof(desc),
212664220a7eSMarcel Moolenaar "Timedia technology %d Port Serial", (int)sc->sc_cfg_data);
212764220a7eSMarcel Moolenaar *res = (intptr_t)desc;
212864220a7eSMarcel Moolenaar return (0);
212964220a7eSMarcel Moolenaar case PUC_CFG_GET_NPORTS:
213064220a7eSMarcel Moolenaar subdev = pci_get_subdevice(sc->sc_dev);
213164220a7eSMarcel Moolenaar dev = 0;
213264220a7eSMarcel Moolenaar while (subdevs[dev].ports != 0) {
213364220a7eSMarcel Moolenaar id = 0;
213464220a7eSMarcel Moolenaar while (subdevs[dev].ids[id] != 0) {
213564220a7eSMarcel Moolenaar if (subdev == subdevs[dev].ids[id]) {
213664220a7eSMarcel Moolenaar sc->sc_cfg_data = subdevs[dev].ports;
213764220a7eSMarcel Moolenaar *res = sc->sc_cfg_data;
213864220a7eSMarcel Moolenaar return (0);
213964220a7eSMarcel Moolenaar }
214064220a7eSMarcel Moolenaar id++;
214164220a7eSMarcel Moolenaar }
214264220a7eSMarcel Moolenaar dev++;
214364220a7eSMarcel Moolenaar }
214464220a7eSMarcel Moolenaar return (ENXIO);
214564220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS:
214664220a7eSMarcel Moolenaar *res = (port == 1 || port == 3) ? 8 : 0;
214764220a7eSMarcel Moolenaar return (0);
214864220a7eSMarcel Moolenaar case PUC_CFG_GET_RID:
2149c1163871SMarcel Moolenaar *res = 0x10 + ((port > 3) ? port - 2 : port >> 1) * 4;
215064220a7eSMarcel Moolenaar return (0);
215164220a7eSMarcel Moolenaar case PUC_CFG_GET_TYPE:
215264220a7eSMarcel Moolenaar *res = PUC_TYPE_SERIAL;
215364220a7eSMarcel Moolenaar return (0);
215464220a7eSMarcel Moolenaar default:
215564220a7eSMarcel Moolenaar break;
215664220a7eSMarcel Moolenaar }
215764220a7eSMarcel Moolenaar return (ENXIO);
215864220a7eSMarcel Moolenaar }
215964220a7eSMarcel Moolenaar
216064220a7eSMarcel Moolenaar static int
puc_config_oxford_pci954(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port __unused,intptr_t * res)2161d5e0798eSMarius Strobl puc_config_oxford_pci954(struct puc_softc *sc, enum puc_cfg_cmd cmd,
2162d5e0798eSMarius Strobl int port __unused, intptr_t *res)
2163d5e0798eSMarius Strobl {
2164d5e0798eSMarius Strobl
2165d5e0798eSMarius Strobl switch (cmd) {
2166d5e0798eSMarius Strobl case PUC_CFG_GET_CLOCK:
2167d5e0798eSMarius Strobl /*
2168d5e0798eSMarius Strobl * OXu16PCI954 use a 14.7456 MHz clock by default while
2169d5e0798eSMarius Strobl * OX16PCI954 and OXm16PCI954 employ a 1.8432 MHz one.
2170d5e0798eSMarius Strobl */
2171d5e0798eSMarius Strobl if (pci_get_revid(sc->sc_dev) == 1)
2172d5e0798eSMarius Strobl *res = DEFAULT_RCLK * 8;
2173d5e0798eSMarius Strobl else
2174d5e0798eSMarius Strobl *res = DEFAULT_RCLK;
2175d5e0798eSMarius Strobl return (0);
2176d5e0798eSMarius Strobl default:
2177d5e0798eSMarius Strobl break;
2178d5e0798eSMarius Strobl }
2179d5e0798eSMarius Strobl return (ENXIO);
2180d5e0798eSMarius Strobl }
2181d5e0798eSMarius Strobl
2182d5e0798eSMarius Strobl static int
puc_config_oxford_pcie(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port,intptr_t * res)21836e9f075aSJohn Baldwin puc_config_oxford_pcie(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
21846e9f075aSJohn Baldwin intptr_t *res)
21856e9f075aSJohn Baldwin {
21866e9f075aSJohn Baldwin const struct puc_cfg *cfg = sc->sc_cfg;
21876e9f075aSJohn Baldwin int idx;
21886e9f075aSJohn Baldwin struct puc_bar *bar;
21896e9f075aSJohn Baldwin uint8_t value;
21906e9f075aSJohn Baldwin
21916e9f075aSJohn Baldwin switch (cmd) {
21926e9f075aSJohn Baldwin case PUC_CFG_SETUP:
21936e9f075aSJohn Baldwin device_printf(sc->sc_dev, "%d UARTs detected\n",
21946e9f075aSJohn Baldwin sc->sc_nports);
21956e9f075aSJohn Baldwin
21966e9f075aSJohn Baldwin /* Set UARTs to enhanced mode */
21976e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid);
21986e9f075aSJohn Baldwin if (bar == NULL)
21996e9f075aSJohn Baldwin return (ENXIO);
22006e9f075aSJohn Baldwin for (idx = 0; idx < sc->sc_nports; idx++) {
2201a59f78daSJohn Baldwin value = bus_read_1(bar->b_res, 0x1000 + (idx << 9) +
2202a59f78daSJohn Baldwin 0x92);
22036e9f075aSJohn Baldwin bus_write_1(bar->b_res, 0x1000 + (idx << 9) + 0x92,
22046e9f075aSJohn Baldwin value | 0x10);
22056e9f075aSJohn Baldwin }
22066e9f075aSJohn Baldwin return (0);
22076e9f075aSJohn Baldwin case PUC_CFG_GET_LEN:
22086e9f075aSJohn Baldwin *res = 0x200;
22096e9f075aSJohn Baldwin return (0);
22106e9f075aSJohn Baldwin case PUC_CFG_GET_NPORTS:
22116e9f075aSJohn Baldwin /*
22126e9f075aSJohn Baldwin * Check if we are being called from puc_bfe_attach()
22136e9f075aSJohn Baldwin * or puc_bfe_probe(). If puc_bfe_probe(), we cannot
22143deebd53SMarius Strobl * puc_get_bar(), so we return a value of 16. This has
22153deebd53SMarius Strobl * cosmetic side-effects at worst; in PUC_CFG_GET_DESC,
22163deebd53SMarius Strobl * sc->sc_cfg_data will not contain the true number of
22173deebd53SMarius Strobl * ports in PUC_CFG_GET_DESC, but we are not implementing
22183deebd53SMarius Strobl * that call for this device family anyway.
22196e9f075aSJohn Baldwin *
22203deebd53SMarius Strobl * The check is for initialization of sc->sc_bar[idx],
22213deebd53SMarius Strobl * which is only done in puc_bfe_attach().
22226e9f075aSJohn Baldwin */
22236e9f075aSJohn Baldwin idx = 0;
22246e9f075aSJohn Baldwin do {
22256e9f075aSJohn Baldwin if (sc->sc_bar[idx++].b_rid != -1) {
22266e9f075aSJohn Baldwin sc->sc_cfg_data = 16;
22276e9f075aSJohn Baldwin *res = sc->sc_cfg_data;
22286e9f075aSJohn Baldwin return (0);
22296e9f075aSJohn Baldwin }
22306e9f075aSJohn Baldwin } while (idx < PUC_PCI_BARS);
22316e9f075aSJohn Baldwin
22326e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid);
22336e9f075aSJohn Baldwin if (bar == NULL)
22346e9f075aSJohn Baldwin return (ENXIO);
22356e9f075aSJohn Baldwin
22366e9f075aSJohn Baldwin value = bus_read_1(bar->b_res, 0x04);
22376e9f075aSJohn Baldwin if (value == 0)
22386e9f075aSJohn Baldwin return (ENXIO);
22396e9f075aSJohn Baldwin
22406e9f075aSJohn Baldwin sc->sc_cfg_data = value;
22416e9f075aSJohn Baldwin *res = sc->sc_cfg_data;
22426e9f075aSJohn Baldwin return (0);
22436e9f075aSJohn Baldwin case PUC_CFG_GET_OFS:
22446e9f075aSJohn Baldwin *res = 0x1000 + (port << 9);
22456e9f075aSJohn Baldwin return (0);
22466e9f075aSJohn Baldwin case PUC_CFG_GET_TYPE:
22476e9f075aSJohn Baldwin *res = PUC_TYPE_SERIAL;
22486e9f075aSJohn Baldwin return (0);
22496e9f075aSJohn Baldwin default:
22506e9f075aSJohn Baldwin break;
22516e9f075aSJohn Baldwin }
22526e9f075aSJohn Baldwin return (ENXIO);
22536e9f075aSJohn Baldwin }
22546e9f075aSJohn Baldwin
22556e9f075aSJohn Baldwin static int
puc_config_sunix(struct puc_softc * sc,enum puc_cfg_cmd cmd,int port,intptr_t * res)225650c0e894SMarius Strobl puc_config_sunix(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
225750c0e894SMarius Strobl intptr_t *res)
225850c0e894SMarius Strobl {
225950c0e894SMarius Strobl int error;
226050c0e894SMarius Strobl
226150c0e894SMarius Strobl switch (cmd) {
226250c0e894SMarius Strobl case PUC_CFG_GET_OFS:
226350c0e894SMarius Strobl error = puc_config(sc, PUC_CFG_GET_TYPE, port, res);
226450c0e894SMarius Strobl if (error != 0)
226550c0e894SMarius Strobl return (error);
226650c0e894SMarius Strobl *res = (*res == PUC_TYPE_SERIAL) ? (port & 3) * 8 : 0;
226750c0e894SMarius Strobl return (0);
226850c0e894SMarius Strobl case PUC_CFG_GET_RID:
226950c0e894SMarius Strobl error = puc_config(sc, PUC_CFG_GET_TYPE, port, res);
227050c0e894SMarius Strobl if (error != 0)
227150c0e894SMarius Strobl return (error);
227250c0e894SMarius Strobl *res = (*res == PUC_TYPE_SERIAL && port <= 3) ? 0x10 : 0x14;
227350c0e894SMarius Strobl return (0);
227450c0e894SMarius Strobl default:
227550c0e894SMarius Strobl break;
227650c0e894SMarius Strobl }
227750c0e894SMarius Strobl return (ENXIO);
227850c0e894SMarius Strobl }
227950c0e894SMarius Strobl
228050c0e894SMarius Strobl static int
puc_config_titan(struct puc_softc * sc __unused,enum puc_cfg_cmd cmd,int port,intptr_t * res)2281430acc47SMarius Strobl puc_config_titan(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd,
2282430acc47SMarius Strobl int port, intptr_t *res)
228364220a7eSMarcel Moolenaar {
2284430acc47SMarius Strobl
228564220a7eSMarcel Moolenaar switch (cmd) {
228664220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS:
228764220a7eSMarcel Moolenaar *res = (port < 3) ? 0 : (port - 2) << 3;
228864220a7eSMarcel Moolenaar return (0);
228964220a7eSMarcel Moolenaar case PUC_CFG_GET_RID:
229064220a7eSMarcel Moolenaar *res = 0x14 + ((port >= 2) ? 0x0c : port << 2);
229164220a7eSMarcel Moolenaar return (0);
229264220a7eSMarcel Moolenaar default:
229364220a7eSMarcel Moolenaar break;
229464220a7eSMarcel Moolenaar }
229564220a7eSMarcel Moolenaar return (ENXIO);
229664220a7eSMarcel Moolenaar }
2297