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 49664220a7eSMarcel Moolenaar { 0x135c, 0x0010, 0xffff, 0, 49764220a7eSMarcel Moolenaar "Quatech QSC-100", 49864220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 49964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8, 50064220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5019c564b6cSJohn Hay }, 5029c564b6cSJohn Hay 50364220a7eSMarcel Moolenaar { 0x135c, 0x0020, 0xffff, 0, 50464220a7eSMarcel Moolenaar "Quatech DSC-100", 50564220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 50664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8, 50764220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5089c564b6cSJohn Hay }, 5099c564b6cSJohn Hay 51064220a7eSMarcel Moolenaar { 0x135c, 0x0030, 0xffff, 0, 51164220a7eSMarcel Moolenaar "Quatech DSC-200/300", 51264220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 51364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8, 51464220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5159c564b6cSJohn Hay }, 5169c564b6cSJohn Hay 51764220a7eSMarcel Moolenaar { 0x135c, 0x0040, 0xffff, 0, 51864220a7eSMarcel Moolenaar "Quatech QSC-200/300", 51964220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 52064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8, 52164220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5229c564b6cSJohn Hay }, 5239c564b6cSJohn Hay 52464220a7eSMarcel Moolenaar { 0x135c, 0x0050, 0xffff, 0, 52564220a7eSMarcel Moolenaar "Quatech ESC-100D", 52664220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 52764220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8, 52864220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5299c564b6cSJohn Hay }, 5309c564b6cSJohn Hay 53164220a7eSMarcel Moolenaar { 0x135c, 0x0060, 0xffff, 0, 53264220a7eSMarcel Moolenaar "Quatech ESC-100M", 53364220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 53464220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8, 53564220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5369c564b6cSJohn Hay }, 5379c564b6cSJohn Hay 53864220a7eSMarcel Moolenaar { 0x135c, 0x0170, 0xffff, 0, 53964220a7eSMarcel Moolenaar "Quatech QSCLP-100", 54064220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 54164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 54264220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5439c564b6cSJohn Hay }, 5449c564b6cSJohn Hay 54564220a7eSMarcel Moolenaar { 0x135c, 0x0180, 0xffff, 0, 54664220a7eSMarcel Moolenaar "Quatech DSCLP-100", 54764220a7eSMarcel Moolenaar -1, /* max 3x clock rate */ 54864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8, 54964220a7eSMarcel Moolenaar .config_function = puc_config_quatech 55076353f68SJohn Hay }, 55176353f68SJohn Hay 55264220a7eSMarcel Moolenaar { 0x135c, 0x01b0, 0xffff, 0, 55364220a7eSMarcel Moolenaar "Quatech DSCLP-200/300", 55464220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 55564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8, 55664220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5579c564b6cSJohn Hay }, 5589c564b6cSJohn Hay 55964220a7eSMarcel Moolenaar { 0x135c, 0x01e0, 0xffff, 0, 56064220a7eSMarcel Moolenaar "Quatech ESCLP-100", 56164220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 56264220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 56364220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5649c564b6cSJohn Hay }, 5659c564b6cSJohn Hay 566f83255a5SMax Khon { 0x1393, 0x1024, 0xffff, 0, 567f83255a5SMax Khon "Moxa Technologies, Smartio CP-102E/PCIe", 568f83255a5SMax Khon DEFAULT_RCLK * 8, 56951cb024fSMax Khon PUC_PORT_2S, 0x14, 0, -1, 57051cb024fSMax Khon .config_function = puc_config_moxa 571f83255a5SMax Khon }, 572f83255a5SMax Khon 573f83255a5SMax Khon { 0x1393, 0x1025, 0xffff, 0, 574f83255a5SMax Khon "Moxa Technologies, Smartio CP-102EL/PCIe", 575f83255a5SMax Khon DEFAULT_RCLK * 8, 57651cb024fSMax Khon PUC_PORT_2S, 0x14, 0, -1, 57751cb024fSMax Khon .config_function = puc_config_moxa 578f83255a5SMax Khon }, 579f83255a5SMax Khon 58064220a7eSMarcel Moolenaar { 0x1393, 0x1040, 0xffff, 0, 58164220a7eSMarcel Moolenaar "Moxa Technologies, Smartio C104H/PCI", 58264220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 58364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5840ec6e983SJoerg Wunsch }, 58540f01890SBruce Evans 58664220a7eSMarcel Moolenaar { 0x1393, 0x1041, 0xffff, 0, 58764220a7eSMarcel Moolenaar "Moxa Technologies, Smartio CP-104UL/PCI", 58864220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 58964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5909c564b6cSJohn Hay }, 5919c564b6cSJohn Hay 5922c89ac5eSEitan Adler { 0x1393, 0x1042, 0xffff, 0, 5932c89ac5eSEitan Adler "Moxa Technologies, Smartio CP-104JU/PCI", 5942c89ac5eSEitan Adler DEFAULT_RCLK * 8, 5952c89ac5eSEitan Adler PUC_PORT_4S, 0x18, 0, 8, 5962c89ac5eSEitan Adler }, 5972c89ac5eSEitan Adler 598f6a60febSMaxim Konovalov { 0x1393, 0x1043, 0xffff, 0, 599f6a60febSMaxim Konovalov "Moxa Technologies, Smartio CP-104EL/PCIe", 600f6a60febSMaxim Konovalov DEFAULT_RCLK * 8, 601f6a60febSMaxim Konovalov PUC_PORT_4S, 0x18, 0, 8, 602f6a60febSMaxim Konovalov }, 603f6a60febSMaxim Konovalov 6042c89ac5eSEitan Adler { 0x1393, 0x1045, 0xffff, 0, 6052c89ac5eSEitan Adler "Moxa Technologies, Smartio CP-104EL-A/PCIe", 6062c89ac5eSEitan Adler DEFAULT_RCLK * 8, 6072c89ac5eSEitan Adler PUC_PORT_4S, 0x14, 0, -1, 6082c89ac5eSEitan Adler .config_function = puc_config_moxa 6092c89ac5eSEitan Adler }, 6102c89ac5eSEitan Adler 6118efbf264SJohn Baldwin { 0x1393, 0x1120, 0xffff, 0, 6128efbf264SJohn Baldwin "Moxa Technologies, CP-112UL", 6138efbf264SJohn Baldwin DEFAULT_RCLK * 8, 6148efbf264SJohn Baldwin PUC_PORT_2S, 0x18, 0, 8, 6158efbf264SJohn Baldwin }, 6168efbf264SJohn Baldwin 61764220a7eSMarcel Moolenaar { 0x1393, 0x1141, 0xffff, 0, 61864220a7eSMarcel Moolenaar "Moxa Technologies, Industio CP-114", 61964220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 62064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 6219c564b6cSJohn Hay }, 6229c564b6cSJohn Hay 623f83255a5SMax Khon { 0x1393, 0x1144, 0xffff, 0, 624f83255a5SMax Khon "Moxa Technologies, Smartio CP-114EL/PCIe", 625f83255a5SMax Khon DEFAULT_RCLK * 8, 626f83255a5SMax Khon PUC_PORT_4S, 0x14, 0, -1, 627f83255a5SMax Khon .config_function = puc_config_moxa 628f83255a5SMax Khon }, 629f83255a5SMax Khon 630f83255a5SMax Khon { 0x1393, 0x1182, 0xffff, 0, 631f83255a5SMax Khon "Moxa Technologies, Smartio CP-118EL-A/PCIe", 632f83255a5SMax Khon DEFAULT_RCLK * 8, 63351cb024fSMax Khon PUC_PORT_8S, 0x14, 0, -1, 63451cb024fSMax Khon .config_function = puc_config_moxa 635f83255a5SMax Khon }, 636f83255a5SMax Khon 63764220a7eSMarcel Moolenaar { 0x1393, 0x1680, 0xffff, 0, 63864220a7eSMarcel Moolenaar "Moxa Technologies, C168H/PCI", 63964220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 64064220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 6419c564b6cSJohn Hay }, 6429c564b6cSJohn Hay 64364220a7eSMarcel Moolenaar { 0x1393, 0x1681, 0xffff, 0, 64464220a7eSMarcel Moolenaar "Moxa Technologies, C168U/PCI", 64564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 64664220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 6479c564b6cSJohn Hay }, 6489c564b6cSJohn Hay 6490db1aa0bSStanislav Sedov { 0x1393, 0x1682, 0xffff, 0, 6500db1aa0bSStanislav Sedov "Moxa Technologies, CP-168EL/PCIe", 6510db1aa0bSStanislav Sedov DEFAULT_RCLK * 8, 6520db1aa0bSStanislav Sedov PUC_PORT_8S, 0x18, 0, 8, 6530db1aa0bSStanislav Sedov }, 6540db1aa0bSStanislav Sedov 655f83255a5SMax Khon { 0x1393, 0x1683, 0xffff, 0, 656f83255a5SMax Khon "Moxa Technologies, Smartio CP-168EL-A/PCIe", 657f83255a5SMax Khon DEFAULT_RCLK * 8, 65851cb024fSMax Khon PUC_PORT_8S, 0x14, 0, -1, 65951cb024fSMax Khon .config_function = puc_config_moxa 660f83255a5SMax Khon }, 661f83255a5SMax Khon 66222e0612fSJohn Baldwin { 0x13a8, 0x0152, 0xffff, 0, 66322e0612fSJohn Baldwin "Exar XR17C/D152", 66422e0612fSJohn Baldwin DEFAULT_RCLK * 8, 66522e0612fSJohn Baldwin PUC_PORT_2S, 0x10, 0, -1, 66622e0612fSJohn Baldwin .config_function = puc_config_exar 66722e0612fSJohn Baldwin }, 66822e0612fSJohn Baldwin 66922e0612fSJohn Baldwin { 0x13a8, 0x0154, 0xffff, 0, 67022e0612fSJohn Baldwin "Exar XR17C154", 67122e0612fSJohn Baldwin DEFAULT_RCLK * 8, 67222e0612fSJohn Baldwin PUC_PORT_4S, 0x10, 0, -1, 67322e0612fSJohn Baldwin .config_function = puc_config_exar 67422e0612fSJohn Baldwin }, 67522e0612fSJohn Baldwin 67664220a7eSMarcel Moolenaar { 0x13a8, 0x0158, 0xffff, 0, 67722e0612fSJohn Baldwin "Exar XR17C158", 67864220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 67964220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, -1, 68022e0612fSJohn Baldwin .config_function = puc_config_exar 681de0d2cadSJohn Hay }, 682de0d2cadSJohn Hay 68379aac43eSEd Maste { 0x13a8, 0x0258, 0xffff, 0, 68479aac43eSEd Maste "Exar XR17V258IV", 68579aac43eSEd Maste DEFAULT_RCLK * 8, 68679aac43eSEd Maste PUC_PORT_8S, 0x10, 0, -1, 6873aff0961SRyan Stone .config_function = puc_config_exar 68879aac43eSEd Maste }, 68979aac43eSEd Maste 690cbb009b9SConrad Meyer { 0x13a8, 0x0352, 0xffff, 0, 691cbb009b9SConrad Meyer "Exar XR17V352", 692cbb009b9SConrad Meyer 125000000, 693cbb009b9SConrad Meyer PUC_PORT_2S, 0x10, 0, -1, 694cbb009b9SConrad Meyer .config_function = puc_config_exar_pcie 695cbb009b9SConrad Meyer }, 696cbb009b9SConrad Meyer 697*5704277aSTeerayut Hiruntaraporn { 0x13a8, 0x0354, 0xffff, 0, 698*5704277aSTeerayut Hiruntaraporn "Exar XR17V354", 699*5704277aSTeerayut Hiruntaraporn 125000000, 700*5704277aSTeerayut Hiruntaraporn PUC_PORT_4S, 0x10, 0, -1, 701*5704277aSTeerayut Hiruntaraporn .config_function = puc_config_exar_pcie 702*5704277aSTeerayut Hiruntaraporn }, 703*5704277aSTeerayut Hiruntaraporn 7048de2c77bSRyan Stone /* The XR17V358 uses the 125MHz PCIe clock as its reference clock. */ 7058de2c77bSRyan Stone { 0x13a8, 0x0358, 0xffff, 0, 7068de2c77bSRyan Stone "Exar XR17V358", 7078de2c77bSRyan Stone 125000000, 7088de2c77bSRyan Stone PUC_PORT_8S, 0x10, 0, -1, 7098de2c77bSRyan Stone .config_function = puc_config_exar_pcie 7108de2c77bSRyan Stone }, 7118de2c77bSRyan Stone 7123deebd53SMarius Strobl /* 7133deebd53SMarius Strobl * The Advantech PCI-1602 Rev. A use the first two ports of an Oxford 7143deebd53SMarius Strobl * Semiconductor OXuPCI954. Note these boards have a hardware bug in 7153deebd53SMarius Strobl * that they drive the RS-422/485 transmitters after power-on until a 7165aa0576bSEd Maste * driver initializes the UARTs. 7173deebd53SMarius Strobl */ 7185bcc8e2fSEitan Adler { 0x13fe, 0x1600, 0x1602, 0x0002, 7193deebd53SMarius Strobl "Advantech PCI-1602 Rev. A", 7205bcc8e2fSEitan Adler DEFAULT_RCLK * 8, 7215bcc8e2fSEitan Adler PUC_PORT_2S, 0x10, 0, 8, 7223deebd53SMarius Strobl .config_function = puc_config_advantech 7233deebd53SMarius Strobl }, 7243deebd53SMarius Strobl 7253deebd53SMarius Strobl /* Advantech PCI-1602 Rev. B1/PCI-1603 are also based on OXuPCI952. */ 7263deebd53SMarius Strobl { 0x13fe, 0xa102, 0x13fe, 0xa102, 7273deebd53SMarius Strobl "Advantech 2-port PCI (PCI-1602 Rev. B1/PCI-1603)", 7283deebd53SMarius Strobl DEFAULT_RCLK * 8, 7293deebd53SMarius Strobl PUC_PORT_2S, 0x10, 4, 0, 7303deebd53SMarius Strobl .config_function = puc_config_advantech 7315bcc8e2fSEitan Adler }, 7325bcc8e2fSEitan Adler 73364220a7eSMarcel Moolenaar { 0x1407, 0x0100, 0xffff, 0, 73464220a7eSMarcel Moolenaar "Lava Computers Dual Serial", 73564220a7eSMarcel Moolenaar DEFAULT_RCLK, 73664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 7379c564b6cSJohn Hay }, 7389c564b6cSJohn Hay 73964220a7eSMarcel Moolenaar { 0x1407, 0x0101, 0xffff, 0, 74064220a7eSMarcel Moolenaar "Lava Computers Quatro A", 74164220a7eSMarcel Moolenaar DEFAULT_RCLK, 74264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 7439c564b6cSJohn Hay }, 7449c564b6cSJohn Hay 74564220a7eSMarcel Moolenaar { 0x1407, 0x0102, 0xffff, 0, 74664220a7eSMarcel Moolenaar "Lava Computers Quatro B", 74764220a7eSMarcel Moolenaar DEFAULT_RCLK, 74864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 7499c564b6cSJohn Hay }, 7509c564b6cSJohn Hay 75164220a7eSMarcel Moolenaar { 0x1407, 0x0120, 0xffff, 0, 75264220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI A", 75364220a7eSMarcel Moolenaar DEFAULT_RCLK, 75464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 7559c564b6cSJohn Hay }, 75664220a7eSMarcel Moolenaar 75764220a7eSMarcel Moolenaar { 0x1407, 0x0121, 0xffff, 0, 75864220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI B", 75964220a7eSMarcel Moolenaar DEFAULT_RCLK, 76064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 76164220a7eSMarcel Moolenaar }, 76264220a7eSMarcel Moolenaar 76364220a7eSMarcel Moolenaar { 0x1407, 0x0180, 0xffff, 0, 76464220a7eSMarcel Moolenaar "Lava Computers Octo A", 76564220a7eSMarcel Moolenaar DEFAULT_RCLK, 76664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 76764220a7eSMarcel Moolenaar }, 76864220a7eSMarcel Moolenaar 76964220a7eSMarcel Moolenaar { 0x1407, 0x0181, 0xffff, 0, 77064220a7eSMarcel Moolenaar "Lava Computers Octo B", 77164220a7eSMarcel Moolenaar DEFAULT_RCLK, 77264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 77364220a7eSMarcel Moolenaar }, 77464220a7eSMarcel Moolenaar 77513ae6dceSKevin Lo { 0x1409, 0x7268, 0xffff, 0, 77613ae6dceSKevin Lo "Sunix SUN1888", 77713ae6dceSKevin Lo 0, 77813ae6dceSKevin Lo PUC_PORT_2P, 0x10, 0, 8, 77913ae6dceSKevin Lo }, 78013ae6dceSKevin Lo 78164220a7eSMarcel Moolenaar { 0x1409, 0x7168, 0xffff, 0, 78264220a7eSMarcel Moolenaar NULL, 78364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 78464220a7eSMarcel Moolenaar PUC_PORT_NONSTANDARD, 0x10, -1, -1, 78564220a7eSMarcel Moolenaar .config_function = puc_config_timedia 7869c564b6cSJohn Hay }, 7879c564b6cSJohn Hay 7889c564b6cSJohn Hay /* 7899c564b6cSJohn Hay * Boards with an Oxford Semiconductor chip. 7909c564b6cSJohn Hay * 7919c564b6cSJohn Hay * Oxford Semiconductor provides documentation for their chip at: 7926e9f075aSJohn Baldwin * <URL:http://www.plxtech.com/products/uart/> 7939c564b6cSJohn Hay * 7949c564b6cSJohn Hay * As sold by Kouwell <URL:http://www.kouwell.com/>. 7959c564b6cSJohn Hay * I/O Flex PCI I/O Card Model-223 with 4 serial and 1 parallel ports. 7969c564b6cSJohn Hay */ 797acdfc36aSEitan Adler { 798acdfc36aSEitan Adler 0x1415, 0x9501, 0x10fc, 0xc070, 799acdfc36aSEitan Adler "I-O DATA RSA-PCI2/R", 800acdfc36aSEitan Adler DEFAULT_RCLK * 8, 801acdfc36aSEitan Adler PUC_PORT_2S, 0x10, 0, 8, 802acdfc36aSEitan Adler }, 8039c564b6cSJohn Hay 8040db885bbSDag-Erling Smørgrav { 0x1415, 0x9501, 0x131f, 0x2050, 8050db885bbSDag-Erling Smørgrav "SIIG Cyber 4 PCI 16550", 8060db885bbSDag-Erling Smørgrav DEFAULT_RCLK * 10, 8070db885bbSDag-Erling Smørgrav PUC_PORT_4S, 0x10, 0, 8, 8080db885bbSDag-Erling Smørgrav }, 8090db885bbSDag-Erling Smørgrav 8101d860a7eSMarcel Moolenaar { 0x1415, 0x9501, 0x131f, 0x2051, 8111d860a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)", 8121d860a7eSMarcel Moolenaar DEFAULT_RCLK * 10, 8131d860a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 8141d860a7eSMarcel Moolenaar }, 8151d860a7eSMarcel Moolenaar 81630ced0d8SJohn Baldwin { 0x1415, 0x9501, 0x131f, 0x2052, 81730ced0d8SJohn Baldwin "SIIG Quartet Serial 850", 81830ced0d8SJohn Baldwin DEFAULT_RCLK * 10, 81930ced0d8SJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 82030ced0d8SJohn Baldwin }, 82130ced0d8SJohn Baldwin 822282211eaSJohn Baldwin { 0x1415, 0x9501, 0x14db, 0x2150, 823282211eaSJohn Baldwin "Kuroutoshikou SERIAL4P-LPPCI2", 824282211eaSJohn Baldwin DEFAULT_RCLK * 10, 825282211eaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 826282211eaSJohn Baldwin }, 827282211eaSJohn Baldwin 82864220a7eSMarcel Moolenaar { 0x1415, 0x9501, 0xffff, 0, 829c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs", 830d5e0798eSMarius Strobl 0, 83164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 832d5e0798eSMarius Strobl .config_function = puc_config_oxford_pci954 83383431653SWarner Losh }, 83483431653SWarner Losh 83510414b71SJohn Baldwin { 0x1415, 0x950a, 0x131f, 0x2030, 83610414b71SJohn Baldwin "SIIG Cyber 2S PCIe", 83710414b71SJohn Baldwin DEFAULT_RCLK * 10, 83810414b71SJohn Baldwin PUC_PORT_2S, 0x10, 0, 8, 83910414b71SJohn Baldwin }, 84010414b71SJohn Baldwin 8410dfbbaceSEitan Adler { 0x1415, 0x950a, 0x131f, 0x2032, 8420dfbbaceSEitan Adler "SIIG Cyber Serial Dual PCI 16C850", 8430dfbbaceSEitan Adler DEFAULT_RCLK * 10, 8440dfbbaceSEitan Adler PUC_PORT_4S, 0x10, 0, 8, 8450dfbbaceSEitan Adler }, 8460dfbbaceSEitan Adler 8471714dcabSMarius Strobl { 0x1415, 0x950a, 0x131f, 0x2061, 8481714dcabSMarius Strobl "SIIG Cyber 2SP1 PCIe", 8491714dcabSMarius Strobl DEFAULT_RCLK * 10, 8501714dcabSMarius Strobl PUC_PORT_2S, 0x10, 0, 8, 8511714dcabSMarius Strobl }, 8521714dcabSMarius Strobl 85364220a7eSMarcel Moolenaar { 0x1415, 0x950a, 0xffff, 0, 854c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs", 855c44bdcb0SDag-Erling Smørgrav DEFAULT_RCLK, 85664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 8579c564b6cSJohn Hay }, 8589c564b6cSJohn Hay 85964220a7eSMarcel Moolenaar { 0x1415, 0x9511, 0xffff, 0, 86064220a7eSMarcel Moolenaar "Oxford Semiconductor OX9160/OX16PCI954 UARTs (function 1)", 86164220a7eSMarcel Moolenaar DEFAULT_RCLK, 86264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 86343e42f36SDoug Ambrisko }, 86443e42f36SDoug Ambrisko 86564220a7eSMarcel Moolenaar { 0x1415, 0x9521, 0xffff, 0, 86664220a7eSMarcel Moolenaar "Oxford Semiconductor OX16PCI952 UARTs", 86764220a7eSMarcel Moolenaar DEFAULT_RCLK, 86864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 8696cb38a02SDoug Ambrisko }, 8706cb38a02SDoug Ambrisko 87111a12794SRoman Kurakin { 0x1415, 0x9538, 0xffff, 0, 87211a12794SRoman Kurakin "Oxford Semiconductor OX16PCI958 UARTs", 87300ff5de5SMarius Strobl DEFAULT_RCLK, 87411a12794SRoman Kurakin PUC_PORT_8S, 0x18, 0, 8, 87511a12794SRoman Kurakin }, 87611a12794SRoman Kurakin 877f09d9fbaSJohn Baldwin /* 878f09d9fbaSJohn Baldwin * Perle boards use Oxford Semiconductor chips, but they store the 879f09d9fbaSJohn Baldwin * Oxford Semiconductor device ID as a subvendor device ID and use 880f09d9fbaSJohn Baldwin * their own device IDs. 881f09d9fbaSJohn Baldwin */ 882f09d9fbaSJohn Baldwin 883f09d9fbaSJohn Baldwin { 0x155f, 0x0331, 0xffff, 0, 884edfaa737SEitan Adler "Perle Ultraport4 Express", 885edfaa737SEitan Adler DEFAULT_RCLK * 8, 886edfaa737SEitan Adler PUC_PORT_4S, 0x10, 0, 8, 887edfaa737SEitan Adler }, 888edfaa737SEitan Adler 889edfaa737SEitan Adler { 0x155f, 0xB012, 0xffff, 0, 890edfaa737SEitan Adler "Perle Speed2 LE", 891edfaa737SEitan Adler DEFAULT_RCLK * 8, 892edfaa737SEitan Adler PUC_PORT_2S, 0x10, 0, 8, 893edfaa737SEitan Adler }, 894edfaa737SEitan Adler 895edfaa737SEitan Adler { 0x155f, 0xB022, 0xffff, 0, 896edfaa737SEitan Adler "Perle Speed2 LE", 897edfaa737SEitan Adler DEFAULT_RCLK * 8, 898edfaa737SEitan Adler PUC_PORT_2S, 0x10, 0, 8, 899edfaa737SEitan Adler }, 900edfaa737SEitan Adler 901edfaa737SEitan Adler { 0x155f, 0xB004, 0xffff, 0, 902f09d9fbaSJohn Baldwin "Perle Speed4 LE", 903f09d9fbaSJohn Baldwin DEFAULT_RCLK * 8, 904f09d9fbaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 905f09d9fbaSJohn Baldwin }, 906f09d9fbaSJohn Baldwin 907edfaa737SEitan Adler { 0x155f, 0xB008, 0xffff, 0, 908edfaa737SEitan Adler "Perle Speed8 LE", 909edfaa737SEitan Adler DEFAULT_RCLK * 8, 910edfaa737SEitan Adler PUC_PORT_8S, 0x10, 0, 8, 911edfaa737SEitan Adler }, 912edfaa737SEitan Adler 9136e9f075aSJohn Baldwin /* 9146e9f075aSJohn Baldwin * Oxford Semiconductor PCI Express Expresso family 9156e9f075aSJohn Baldwin * 9166e9f075aSJohn Baldwin * Found in many 'native' PCI Express serial boards such as: 9176e9f075aSJohn Baldwin * 9186e9f075aSJohn Baldwin * eMegatech MP954ER4 (4 port) and MP958ER8 (8 port) 9196e9f075aSJohn Baldwin * <URL:http://www.emegatech.com.tw/pdrs232pcie.html> 9206e9f075aSJohn Baldwin * 9216e9f075aSJohn Baldwin * Lindy 51189 (4 port) 9226e9f075aSJohn Baldwin * <URL:http://www.lindy.com> <URL:http://tinyurl.com/lindy-51189> 9236e9f075aSJohn Baldwin * 9246e9f075aSJohn Baldwin * StarTech.com PEX4S952 (4 port) and PEX8S952 (8 port) 9256e9f075aSJohn Baldwin * <URL:http://www.startech.com> 9266e9f075aSJohn Baldwin */ 9276e9f075aSJohn Baldwin 928bdb4291fSRui Paulo { 0x1415, 0xc11b, 0xffff, 0, 929bdb4291fSRui Paulo "Oxford Semiconductor OXPCIe952 1S1P", 930bdb4291fSRui Paulo DEFAULT_RCLK * 0x22, 931bdb4291fSRui Paulo PUC_PORT_NONSTANDARD, 0x10, 0, -1, 932bdb4291fSRui Paulo .config_function = puc_config_oxford_pcie 933bdb4291fSRui Paulo }, 934bdb4291fSRui Paulo 935a6a64612SAndrey V. Elsukov { 0x1415, 0xc138, 0xffff, 0, 936a6a64612SAndrey V. Elsukov "Oxford Semiconductor OXPCIe952 UARTs", 937a6a64612SAndrey V. Elsukov DEFAULT_RCLK * 0x22, 938a6a64612SAndrey V. Elsukov PUC_PORT_NONSTANDARD, 0x10, 0, -1, 939a6a64612SAndrey V. Elsukov .config_function = puc_config_oxford_pcie 940a6a64612SAndrey V. Elsukov }, 941a6a64612SAndrey V. Elsukov 9426e9f075aSJohn Baldwin { 0x1415, 0xc158, 0xffff, 0, 9436e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs", 9446e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 9456e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 9466e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 9476e9f075aSJohn Baldwin }, 9486e9f075aSJohn Baldwin 9496e9f075aSJohn Baldwin { 0x1415, 0xc15d, 0xffff, 0, 9506e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs (function 1)", 9516e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 9526e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 9536e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 9546e9f075aSJohn Baldwin }, 9556e9f075aSJohn Baldwin 9566e9f075aSJohn Baldwin { 0x1415, 0xc208, 0xffff, 0, 9576e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs", 9586e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 9596e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 9606e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 9616e9f075aSJohn Baldwin }, 9626e9f075aSJohn Baldwin 9636e9f075aSJohn Baldwin { 0x1415, 0xc20d, 0xffff, 0, 9646e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs (function 1)", 9656e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 9666e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 9676e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 9686e9f075aSJohn Baldwin }, 9696e9f075aSJohn Baldwin 9706e9f075aSJohn Baldwin { 0x1415, 0xc308, 0xffff, 0, 9716e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs", 9726e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 9736e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 9746e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 9756e9f075aSJohn Baldwin }, 9766e9f075aSJohn Baldwin 9776e9f075aSJohn Baldwin { 0x1415, 0xc30d, 0xffff, 0, 9786e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs (function 1)", 9796e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 9806e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 9816e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 9826e9f075aSJohn Baldwin }, 9836e9f075aSJohn Baldwin 98446ce58c7SAndrew Thompson { 0x14d2, 0x8010, 0xffff, 0, 98546ce58c7SAndrew Thompson "VScom PCI-100L", 98646ce58c7SAndrew Thompson DEFAULT_RCLK * 8, 98746ce58c7SAndrew Thompson PUC_PORT_1S, 0x14, 0, 0, 98846ce58c7SAndrew Thompson }, 98946ce58c7SAndrew Thompson 99064220a7eSMarcel Moolenaar { 0x14d2, 0x8020, 0xffff, 0, 99164220a7eSMarcel Moolenaar "VScom PCI-200L", 99264220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 99364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 4, 0, 994a58deb46SColin Percival }, 995a58deb46SColin Percival 99664220a7eSMarcel Moolenaar { 0x14d2, 0x8028, 0xffff, 0, 99746dd877dSPoul-Henning Kamp "VScom 200Li", 99864220a7eSMarcel Moolenaar DEFAULT_RCLK, 99964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x20, 0, 8, 100046dd877dSPoul-Henning Kamp }, 10013e19d3c0SBruce M Simpson 100264220a7eSMarcel Moolenaar /* 100364220a7eSMarcel Moolenaar * VScom (Titan?) PCI-800L. More modern variant of the 100464220a7eSMarcel Moolenaar * PCI-800. Uses 6 discrete 16550 UARTs, plus another 100564220a7eSMarcel Moolenaar * two of them obviously implemented as macro cells in 100664220a7eSMarcel Moolenaar * the ASIC. This causes the weird port access pattern 100764220a7eSMarcel Moolenaar * below, where two of the IO port ranges each access 100864220a7eSMarcel Moolenaar * one of the ASIC UARTs, and a block of IO addresses 100964220a7eSMarcel Moolenaar * access the external UARTs. 101064220a7eSMarcel Moolenaar */ 101164220a7eSMarcel Moolenaar { 0x14d2, 0x8080, 0xffff, 0, 101264220a7eSMarcel Moolenaar "Titan VScom PCI-800L", 101364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 101464220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1, 101564220a7eSMarcel Moolenaar .config_function = puc_config_titan 101664220a7eSMarcel Moolenaar }, 101764220a7eSMarcel Moolenaar 101864220a7eSMarcel Moolenaar /* 101964220a7eSMarcel Moolenaar * VScom PCI-800H. Uses 8 16950 UART, behind a PCI chips that offers 102064220a7eSMarcel Moolenaar * 4 com port on PCI device 0 and 4 on PCI device 1. PCI device 0 has 102164220a7eSMarcel Moolenaar * device ID 3 and PCI device 1 device ID 4. 102264220a7eSMarcel Moolenaar */ 102364220a7eSMarcel Moolenaar { 0x14d2, 0xa003, 0xffff, 0, 102464220a7eSMarcel Moolenaar "Titan PCI-800H", 102564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 102664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 102764220a7eSMarcel Moolenaar }, 102800ff5de5SMarius Strobl 102964220a7eSMarcel Moolenaar { 0x14d2, 0xa004, 0xffff, 0, 103064220a7eSMarcel Moolenaar "Titan PCI-800H", 103164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 103264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 103364220a7eSMarcel Moolenaar }, 103464220a7eSMarcel Moolenaar 103564220a7eSMarcel Moolenaar { 0x14d2, 0xa005, 0xffff, 0, 103664220a7eSMarcel Moolenaar "Titan PCI-200H", 103764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 103864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 103964220a7eSMarcel Moolenaar }, 104064220a7eSMarcel Moolenaar 104164220a7eSMarcel Moolenaar { 0x14d2, 0xe020, 0xffff, 0, 104264220a7eSMarcel Moolenaar "Titan VScom PCI-200HV2", 104364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 104464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 104564220a7eSMarcel Moolenaar }, 104664220a7eSMarcel Moolenaar 104764589ec8SEitan Adler { 0x14d2, 0xa007, 0xffff, 0, 104864589ec8SEitan Adler "Titan VScom PCIex-800H", 104964589ec8SEitan Adler DEFAULT_RCLK * 8, 105064589ec8SEitan Adler PUC_PORT_4S, 0x10, 0, 8, 105164589ec8SEitan Adler }, 105264589ec8SEitan Adler 105364589ec8SEitan Adler { 0x14d2, 0xa008, 0xffff, 0, 105464589ec8SEitan Adler "Titan VScom PCIex-800H", 105564589ec8SEitan Adler DEFAULT_RCLK * 8, 105664589ec8SEitan Adler PUC_PORT_4S, 0x10, 0, 8, 105764589ec8SEitan Adler }, 105864589ec8SEitan Adler 105964220a7eSMarcel Moolenaar { 0x14db, 0x2130, 0xffff, 0, 106064220a7eSMarcel Moolenaar "Avlab Technology, PCI IO 2S", 106164220a7eSMarcel Moolenaar DEFAULT_RCLK, 106264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 106364220a7eSMarcel Moolenaar }, 106464220a7eSMarcel Moolenaar 106564220a7eSMarcel Moolenaar { 0x14db, 0x2150, 0xffff, 0, 106664220a7eSMarcel Moolenaar "Avlab Low Profile PCI 4 Serial", 106764220a7eSMarcel Moolenaar DEFAULT_RCLK, 106864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 106964220a7eSMarcel Moolenaar }, 107064220a7eSMarcel Moolenaar 10710dc908e7SAndrew Thompson { 0x14db, 0x2152, 0xffff, 0, 10720dc908e7SAndrew Thompson "Avlab Low Profile PCI 4 Serial", 10730dc908e7SAndrew Thompson DEFAULT_RCLK, 10740dc908e7SAndrew Thompson PUC_PORT_4S, 0x10, 4, 0, 10750dc908e7SAndrew Thompson }, 10760dc908e7SAndrew Thompson 107764220a7eSMarcel Moolenaar { 0x1592, 0x0781, 0xffff, 0, 107864220a7eSMarcel Moolenaar "Syba Tech Ltd. PCI-4S2P-550-ECP", 107964220a7eSMarcel Moolenaar DEFAULT_RCLK, 108064220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 0, -1, 108164220a7eSMarcel Moolenaar .config_function = puc_config_syba 108264220a7eSMarcel Moolenaar }, 108364220a7eSMarcel Moolenaar 108450c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0002, 108550c0e894SMarius Strobl "Sunix SER5xxxx 2-port serial", 10867501345eSJohn Hay DEFAULT_RCLK * 8, 10877501345eSJohn Hay PUC_PORT_2S, 0x10, 0, 8, 10887501345eSJohn Hay }, 10897501345eSJohn Hay 109050c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0004, 109150c0e894SMarius Strobl "Sunix SER5xxxx 4-port serial", 109250c0e894SMarius Strobl DEFAULT_RCLK * 8, 109350c0e894SMarius Strobl PUC_PORT_4S, 0x10, 0, 8, 109450c0e894SMarius Strobl }, 109550c0e894SMarius Strobl 109650c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0008, 109750c0e894SMarius Strobl "Sunix SER5xxxx 8-port serial", 109850c0e894SMarius Strobl DEFAULT_RCLK * 8, 109950c0e894SMarius Strobl PUC_PORT_8S, -1, -1, -1, 110050c0e894SMarius Strobl .config_function = puc_config_sunix 110150c0e894SMarius Strobl }, 110250c0e894SMarius Strobl 110350c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0101, 110450c0e894SMarius Strobl "Sunix MIO5xxxx 1-port serial and 1284 Printer port", 110550c0e894SMarius Strobl DEFAULT_RCLK * 8, 110650c0e894SMarius Strobl PUC_PORT_1S1P, -1, -1, -1, 110750c0e894SMarius Strobl .config_function = puc_config_sunix 110850c0e894SMarius Strobl }, 110950c0e894SMarius Strobl 111050c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0102, 111110bcada8SMarius Strobl "Sunix MIO5xxxx 2-port serial and 1284 Printer port", 111250c0e894SMarius Strobl DEFAULT_RCLK * 8, 111350c0e894SMarius Strobl PUC_PORT_2S1P, -1, -1, -1, 111450c0e894SMarius Strobl .config_function = puc_config_sunix 111550c0e894SMarius Strobl }, 111650c0e894SMarius Strobl 111750c0e894SMarius Strobl { 0x1fd4, 0x1999, 0x1fd4, 0x0104, 111850c0e894SMarius Strobl "Sunix MIO5xxxx 4-port serial and 1284 Printer port", 111950c0e894SMarius Strobl DEFAULT_RCLK * 8, 112050c0e894SMarius Strobl PUC_PORT_4S1P, -1, -1, -1, 112150c0e894SMarius Strobl .config_function = puc_config_sunix 112250c0e894SMarius Strobl }, 112350c0e894SMarius Strobl 11247eae6323SLuiz Otavio O Souza { 0x5372, 0x6872, 0xffff, 0, 11257eae6323SLuiz Otavio O Souza "Feasso PCI FPP-02 2S1P", 11267eae6323SLuiz Otavio O Souza DEFAULT_RCLK, 11277eae6323SLuiz Otavio O Souza PUC_PORT_2S1P, 0x10, 4, 0, 11287eae6323SLuiz Otavio O Souza }, 11297eae6323SLuiz Otavio O Souza 1130d9b73ea9SEitan Adler { 0x5372, 0x6873, 0xffff, 0, 1131d9b73ea9SEitan Adler "Sun 1040 PCI Quad Serial", 1132d9b73ea9SEitan Adler DEFAULT_RCLK, 1133d9b73ea9SEitan Adler PUC_PORT_4S, 0x10, 4, 0, 1134d9b73ea9SEitan Adler }, 1135d9b73ea9SEitan Adler 113664220a7eSMarcel Moolenaar { 0x6666, 0x0001, 0xffff, 0, 113764220a7eSMarcel Moolenaar "Decision Computer Inc, PCCOM 4-port serial", 113864220a7eSMarcel Moolenaar DEFAULT_RCLK, 113964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x1c, 0, 8, 114064220a7eSMarcel Moolenaar }, 114164220a7eSMarcel Moolenaar 1142858030c4SAndrew Thompson { 0x6666, 0x0002, 0xffff, 0, 1143858030c4SAndrew Thompson "Decision Computer Inc, PCCOM 8-port serial", 1144858030c4SAndrew Thompson DEFAULT_RCLK, 1145858030c4SAndrew Thompson PUC_PORT_8S, 0x1c, 0, 8, 1146858030c4SAndrew Thompson }, 1147858030c4SAndrew Thompson 114864220a7eSMarcel Moolenaar { 0x6666, 0x0004, 0xffff, 0, 114964220a7eSMarcel Moolenaar "PCCOM dual port RS232/422/485", 115064220a7eSMarcel Moolenaar DEFAULT_RCLK, 115164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x1c, 0, 8, 115264220a7eSMarcel Moolenaar }, 115364220a7eSMarcel Moolenaar 115464220a7eSMarcel Moolenaar { 0x9710, 0x9815, 0xffff, 0, 115564220a7eSMarcel Moolenaar "NetMos NM9815 Dual 1284 Printer port", 115664220a7eSMarcel Moolenaar 0, 115764220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0, 115864220a7eSMarcel Moolenaar }, 115964220a7eSMarcel Moolenaar 1160843994aeSJohn Baldwin /* 116150c0e894SMarius Strobl * This is more specific than the generic NM9835 entry, and is placed 116250c0e894SMarius Strobl * here to _prevent_ puc(4) from claiming this single port card. 1163843994aeSJohn Baldwin * 1164843994aeSJohn Baldwin * uart(4) will claim this device. 1165843994aeSJohn Baldwin */ 1166843994aeSJohn Baldwin { 0x9710, 0x9835, 0x1000, 1, 1167843994aeSJohn Baldwin "NetMos NM9835 based 1-port serial", 1168843994aeSJohn Baldwin DEFAULT_RCLK, 1169843994aeSJohn Baldwin PUC_PORT_1S, 0x10, 4, 0, 1170843994aeSJohn Baldwin }, 1171843994aeSJohn Baldwin 1172045de714SNavdeep Parhar { 0x9710, 0x9835, 0x1000, 2, 1173045de714SNavdeep Parhar "NetMos NM9835 based 2-port serial", 1174045de714SNavdeep Parhar DEFAULT_RCLK, 1175045de714SNavdeep Parhar PUC_PORT_2S, 0x10, 4, 0, 1176045de714SNavdeep Parhar }, 1177045de714SNavdeep Parhar 117864220a7eSMarcel Moolenaar { 0x9710, 0x9835, 0xffff, 0, 117964220a7eSMarcel Moolenaar "NetMos NM9835 Dual UART and 1284 Printer port", 118064220a7eSMarcel Moolenaar DEFAULT_RCLK, 118164220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 118264220a7eSMarcel Moolenaar }, 118364220a7eSMarcel Moolenaar 118464220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0x1000, 0x0006, 118564220a7eSMarcel Moolenaar "NetMos NM9845 6 Port UART", 118664220a7eSMarcel Moolenaar DEFAULT_RCLK, 118764220a7eSMarcel Moolenaar PUC_PORT_6S, 0x10, 4, 0, 118864220a7eSMarcel Moolenaar }, 118964220a7eSMarcel Moolenaar 119064220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0xffff, 0, 119164220a7eSMarcel Moolenaar "NetMos NM9845 Quad UART and 1284 Printer port", 119264220a7eSMarcel Moolenaar DEFAULT_RCLK, 119364220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 4, 0, 11941d864e0dSMarcel Moolenaar }, 11951d864e0dSMarcel Moolenaar 11961d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3002, 11971d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART", 11981d864e0dSMarcel Moolenaar DEFAULT_RCLK, 11991d864e0dSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 12001d864e0dSMarcel Moolenaar }, 12011d864e0dSMarcel Moolenaar 12021d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3003, 12031d864e0dSMarcel Moolenaar "NetMos NM9865 Triple UART", 12041d864e0dSMarcel Moolenaar DEFAULT_RCLK, 12051d864e0dSMarcel Moolenaar PUC_PORT_3S, 0x10, 4, 0, 12061d864e0dSMarcel Moolenaar }, 12071d864e0dSMarcel Moolenaar 12081d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3004, 12091d864e0dSMarcel Moolenaar "NetMos NM9865 Quad UART", 12101d864e0dSMarcel Moolenaar DEFAULT_RCLK, 121100ff5de5SMarius Strobl PUC_PORT_4S, 0x10, 4, 0, 12121d864e0dSMarcel Moolenaar }, 12131d864e0dSMarcel Moolenaar 12141d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3011, 12151d864e0dSMarcel Moolenaar "NetMos NM9865 Single UART and 1284 Printer port", 12161d864e0dSMarcel Moolenaar DEFAULT_RCLK, 12171d864e0dSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 12181d864e0dSMarcel Moolenaar }, 12191d864e0dSMarcel Moolenaar 12201d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3012, 12211d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART and 1284 Printer port", 12221d864e0dSMarcel Moolenaar DEFAULT_RCLK, 12231d864e0dSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 12241d864e0dSMarcel Moolenaar }, 12251d864e0dSMarcel Moolenaar 12261d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3020, 12271d864e0dSMarcel Moolenaar "NetMos NM9865 Dual 1284 Printer port", 12281d864e0dSMarcel Moolenaar DEFAULT_RCLK, 12291d864e0dSMarcel Moolenaar PUC_PORT_2P, 0x10, 4, 0, 123064220a7eSMarcel Moolenaar }, 123164220a7eSMarcel Moolenaar 123264220a7eSMarcel Moolenaar { 0xb00c, 0x021c, 0xffff, 0, 123364220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Lite", 123464220a7eSMarcel Moolenaar DEFAULT_RCLK, 123564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 123664220a7eSMarcel Moolenaar .config_function = puc_config_icbook 123764220a7eSMarcel Moolenaar }, 123864220a7eSMarcel Moolenaar 123964220a7eSMarcel Moolenaar { 0xb00c, 0x031c, 0xffff, 0, 124064220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Pro", 124164220a7eSMarcel Moolenaar DEFAULT_RCLK, 124264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 124364220a7eSMarcel Moolenaar .config_function = puc_config_icbook 124464220a7eSMarcel Moolenaar }, 124564220a7eSMarcel Moolenaar 124664220a7eSMarcel Moolenaar { 0xb00c, 0x041c, 0xffff, 0, 124764220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Lite", 124864220a7eSMarcel Moolenaar DEFAULT_RCLK, 124964220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 125064220a7eSMarcel Moolenaar .config_function = puc_config_icbook 125164220a7eSMarcel Moolenaar }, 125264220a7eSMarcel Moolenaar 125364220a7eSMarcel Moolenaar { 0xb00c, 0x051c, 0xffff, 0, 125464220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Pro", 125564220a7eSMarcel Moolenaar DEFAULT_RCLK, 125664220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 125764220a7eSMarcel Moolenaar .config_function = puc_config_icbook 125864220a7eSMarcel Moolenaar }, 125964220a7eSMarcel Moolenaar 126064220a7eSMarcel Moolenaar { 0xb00c, 0x081c, 0xffff, 0, 126164220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Pro", 126264220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 126364220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8, 126464220a7eSMarcel Moolenaar .config_function = puc_config_icbook 126564220a7eSMarcel Moolenaar }, 126664220a7eSMarcel Moolenaar 126764220a7eSMarcel Moolenaar { 0xb00c, 0x091c, 0xffff, 0, 126864220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Lite", 126964220a7eSMarcel Moolenaar DEFAULT_RCLK, 127064220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8, 127164220a7eSMarcel Moolenaar .config_function = puc_config_icbook 127264220a7eSMarcel Moolenaar }, 127364220a7eSMarcel Moolenaar 127464220a7eSMarcel Moolenaar { 0xb00c, 0x0a1c, 0xffff, 0, 127564220a7eSMarcel Moolenaar "IC Book Labs Gunboat x2 Low Profile", 127664220a7eSMarcel Moolenaar DEFAULT_RCLK, 127764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 127864220a7eSMarcel Moolenaar }, 127964220a7eSMarcel Moolenaar 128064220a7eSMarcel Moolenaar { 0xb00c, 0x0b1c, 0xffff, 0, 128164220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Low Profile", 128264220a7eSMarcel Moolenaar DEFAULT_RCLK, 128364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 128464220a7eSMarcel Moolenaar .config_function = puc_config_icbook 128564220a7eSMarcel Moolenaar }, 128664220a7eSMarcel Moolenaar { 0xffff, 0, 0xffff, 0, NULL, 0 } 12879c564b6cSJohn Hay }; 128864220a7eSMarcel Moolenaar 128964220a7eSMarcel Moolenaar static int 12903deebd53SMarius Strobl puc_config_advantech(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 12913deebd53SMarius Strobl intptr_t *res __unused) 12923deebd53SMarius Strobl { 12933deebd53SMarius Strobl const struct puc_cfg *cfg; 12943deebd53SMarius Strobl struct resource *cres; 12953deebd53SMarius Strobl struct puc_bar *bar; 12963deebd53SMarius Strobl device_t cdev, dev; 12973deebd53SMarius Strobl bus_size_t off; 12983deebd53SMarius Strobl int base, crtype, fixed, high, i, oxpcie; 12993deebd53SMarius Strobl uint8_t acr, func, mask; 13003deebd53SMarius Strobl 13013deebd53SMarius Strobl if (cmd != PUC_CFG_SETUP) 13023deebd53SMarius Strobl return (ENXIO); 13033deebd53SMarius Strobl 13043deebd53SMarius Strobl base = fixed = oxpcie = 0; 13053deebd53SMarius Strobl crtype = SYS_RES_IOPORT; 13063deebd53SMarius Strobl acr = mask = 0x0; 13073deebd53SMarius Strobl func = high = 1; 13083deebd53SMarius Strobl off = 0x60; 13093deebd53SMarius Strobl 13103deebd53SMarius Strobl cfg = sc->sc_cfg; 13113deebd53SMarius Strobl switch (cfg->subvendor) { 13123deebd53SMarius Strobl case 0x13fe: 13133deebd53SMarius Strobl switch (cfg->device) { 13143deebd53SMarius Strobl case 0xa102: 13153deebd53SMarius Strobl high = 0; 13163deebd53SMarius Strobl break; 13173deebd53SMarius Strobl default: 13183deebd53SMarius Strobl break; 13193deebd53SMarius Strobl } 13203deebd53SMarius Strobl default: 13213deebd53SMarius Strobl break; 13223deebd53SMarius Strobl } 13233deebd53SMarius Strobl if (fixed == 1) 13243deebd53SMarius Strobl goto setup; 13253deebd53SMarius Strobl 13263deebd53SMarius Strobl dev = sc->sc_dev; 13273deebd53SMarius Strobl cdev = pci_find_dbsf(pci_get_domain(dev), pci_get_bus(dev), 13283deebd53SMarius Strobl pci_get_slot(dev), func); 13293deebd53SMarius Strobl if (cdev == NULL) { 13303deebd53SMarius Strobl device_printf(dev, "could not find config function\n"); 13313deebd53SMarius Strobl return (ENXIO); 13323deebd53SMarius Strobl } 13333deebd53SMarius Strobl 13343deebd53SMarius Strobl i = PCIR_BAR(0); 13353deebd53SMarius Strobl cres = bus_alloc_resource_any(cdev, crtype, &i, RF_ACTIVE); 13363deebd53SMarius Strobl if (cres == NULL) { 13373deebd53SMarius Strobl device_printf(dev, "could not allocate config resource\n"); 13383deebd53SMarius Strobl return (ENXIO); 13393deebd53SMarius Strobl } 13403deebd53SMarius Strobl 13413deebd53SMarius Strobl if (oxpcie == 0) { 13423deebd53SMarius Strobl mask = bus_read_1(cres, off); 13433deebd53SMarius Strobl if (pci_get_function(dev) == 1) 13443deebd53SMarius Strobl base = 4; 13453deebd53SMarius Strobl } 13463deebd53SMarius Strobl 13473deebd53SMarius Strobl setup: 13483deebd53SMarius Strobl for (i = 0; i < sc->sc_nports; ++i) { 13493deebd53SMarius Strobl device_printf(dev, "port %d: ", i); 13503deebd53SMarius Strobl bar = puc_get_bar(sc, cfg->rid + i * cfg->d_rid); 13513deebd53SMarius Strobl if (bar == NULL) { 13523deebd53SMarius Strobl printf("could not get BAR\n"); 13533deebd53SMarius Strobl continue; 13543deebd53SMarius Strobl } 13553deebd53SMarius Strobl 13563deebd53SMarius Strobl if (fixed == 0) { 13573deebd53SMarius Strobl if ((mask & (1 << (base + i))) == 0) { 13583deebd53SMarius Strobl acr = 0; 13593deebd53SMarius Strobl printf("RS-232\n"); 13603deebd53SMarius Strobl } else { 13613deebd53SMarius Strobl acr = (high == 1 ? 0x18 : 0x10); 13623deebd53SMarius Strobl printf("RS-422/RS-485, active-%s auto-DTR\n", 13633deebd53SMarius Strobl high == 1 ? "high" : "low"); 13643deebd53SMarius Strobl } 13653deebd53SMarius Strobl } 13663deebd53SMarius Strobl 13673deebd53SMarius Strobl bus_write_1(bar->b_res, REG_SPR, REG_ACR); 13683deebd53SMarius Strobl bus_write_1(bar->b_res, REG_ICR, acr); 13693deebd53SMarius Strobl } 13703deebd53SMarius Strobl 13713deebd53SMarius Strobl bus_release_resource(cdev, crtype, rman_get_rid(cres), cres); 13723deebd53SMarius Strobl return (0); 13733deebd53SMarius Strobl } 13743deebd53SMarius Strobl 13753deebd53SMarius Strobl static int 1376430acc47SMarius Strobl puc_config_amc(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd, int port, 137764220a7eSMarcel Moolenaar intptr_t *res) 137864220a7eSMarcel Moolenaar { 1379430acc47SMarius Strobl 138064220a7eSMarcel Moolenaar switch (cmd) { 138164220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 138264220a7eSMarcel Moolenaar *res = 8 * (port & 1); 138364220a7eSMarcel Moolenaar return (0); 138464220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 138564220a7eSMarcel Moolenaar *res = 0x14 + (port >> 1) * 4; 138664220a7eSMarcel Moolenaar return (0); 138764220a7eSMarcel Moolenaar default: 138864220a7eSMarcel Moolenaar break; 138964220a7eSMarcel Moolenaar } 139064220a7eSMarcel Moolenaar return (ENXIO); 139164220a7eSMarcel Moolenaar } 139264220a7eSMarcel Moolenaar 139364220a7eSMarcel Moolenaar static int 139464220a7eSMarcel Moolenaar puc_config_diva(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 139564220a7eSMarcel Moolenaar intptr_t *res) 139664220a7eSMarcel Moolenaar { 139764220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 139864220a7eSMarcel Moolenaar 139964220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_OFS) { 140064220a7eSMarcel Moolenaar if (cfg->subdevice == 0x1282) /* Everest SP */ 140164220a7eSMarcel Moolenaar port <<= 1; 140264220a7eSMarcel Moolenaar else if (cfg->subdevice == 0x104b) /* Maestro SP2 */ 140364220a7eSMarcel Moolenaar port = (port == 3) ? 4 : port; 140464220a7eSMarcel Moolenaar *res = port * 8 + ((port > 2) ? 0x18 : 0); 140564220a7eSMarcel Moolenaar return (0); 140664220a7eSMarcel Moolenaar } 140764220a7eSMarcel Moolenaar return (ENXIO); 140864220a7eSMarcel Moolenaar } 140964220a7eSMarcel Moolenaar 141064220a7eSMarcel Moolenaar static int 1411430acc47SMarius Strobl puc_config_exar(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd, 1412430acc47SMarius Strobl int port, intptr_t *res) 141322e0612fSJohn Baldwin { 1414430acc47SMarius Strobl 141522e0612fSJohn Baldwin if (cmd == PUC_CFG_GET_OFS) { 141622e0612fSJohn Baldwin *res = port * 0x200; 141722e0612fSJohn Baldwin return (0); 141822e0612fSJohn Baldwin } 141922e0612fSJohn Baldwin return (ENXIO); 142022e0612fSJohn Baldwin } 142122e0612fSJohn Baldwin 142222e0612fSJohn Baldwin static int 1423430acc47SMarius Strobl puc_config_exar_pcie(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd, 1424430acc47SMarius Strobl int port, intptr_t *res) 14258de2c77bSRyan Stone { 1426430acc47SMarius Strobl 14278de2c77bSRyan Stone if (cmd == PUC_CFG_GET_OFS) { 14288de2c77bSRyan Stone *res = port * 0x400; 14298de2c77bSRyan Stone return (0); 14308de2c77bSRyan Stone } 14318de2c77bSRyan Stone return (ENXIO); 14328de2c77bSRyan Stone } 14338de2c77bSRyan Stone 14348de2c77bSRyan Stone static int 1435430acc47SMarius Strobl puc_config_icbook(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd, 1436430acc47SMarius Strobl int port __unused, intptr_t *res) 143764220a7eSMarcel Moolenaar { 1438430acc47SMarius Strobl 143964220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_ILR) { 144064220a7eSMarcel Moolenaar *res = PUC_ILR_DIGI; 144164220a7eSMarcel Moolenaar return (0); 144264220a7eSMarcel Moolenaar } 144364220a7eSMarcel Moolenaar return (ENXIO); 144464220a7eSMarcel Moolenaar } 144564220a7eSMarcel Moolenaar 144664220a7eSMarcel Moolenaar static int 14472c89ac5eSEitan Adler puc_config_moxa(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 14482c89ac5eSEitan Adler intptr_t *res) 14492c89ac5eSEitan Adler { 145051cb024fSMax Khon const struct puc_cfg *cfg = sc->sc_cfg; 145151cb024fSMax Khon 1452430acc47SMarius Strobl if (cmd == PUC_CFG_GET_OFS) { 14531714dcabSMarius Strobl if (port == 3 && (cfg->device == 0x1045 || 14541714dcabSMarius Strobl cfg->device == 0x1144)) 145551cb024fSMax Khon port = 7; 145651cb024fSMax Khon *res = port * 0x200; 145751cb024fSMax Khon 14582c89ac5eSEitan Adler return 0; 14592c89ac5eSEitan Adler } 14602c89ac5eSEitan Adler return (ENXIO); 14612c89ac5eSEitan Adler } 14622c89ac5eSEitan Adler 14632c89ac5eSEitan Adler static int 1464430acc47SMarius Strobl puc_config_quatech(struct puc_softc *sc, enum puc_cfg_cmd cmd, 1465430acc47SMarius Strobl int port __unused, intptr_t *res) 146664220a7eSMarcel Moolenaar { 146764220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 146864220a7eSMarcel Moolenaar struct puc_bar *bar; 146964220a7eSMarcel Moolenaar uint8_t v0, v1; 147064220a7eSMarcel Moolenaar 147164220a7eSMarcel Moolenaar switch (cmd) { 147264220a7eSMarcel Moolenaar case PUC_CFG_SETUP: 147364220a7eSMarcel Moolenaar /* 147464220a7eSMarcel Moolenaar * Check if the scratchpad register is enabled or if the 147564220a7eSMarcel Moolenaar * interrupt status and options registers are active. 147664220a7eSMarcel Moolenaar */ 147764220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid); 147864220a7eSMarcel Moolenaar if (bar == NULL) 147964220a7eSMarcel Moolenaar return (ENXIO); 14803deebd53SMarius Strobl bus_write_1(bar->b_res, REG_LCR, LCR_DLAB); 14813deebd53SMarius Strobl bus_write_1(bar->b_res, REG_SPR, 0); 14823deebd53SMarius Strobl v0 = bus_read_1(bar->b_res, REG_SPR); 14833deebd53SMarius Strobl bus_write_1(bar->b_res, REG_SPR, 0x80 + -cfg->clock); 14843deebd53SMarius Strobl v1 = bus_read_1(bar->b_res, REG_SPR); 14853deebd53SMarius Strobl bus_write_1(bar->b_res, REG_LCR, 0); 148664220a7eSMarcel Moolenaar sc->sc_cfg_data = (v0 << 8) | v1; 148764220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) { 148864220a7eSMarcel Moolenaar /* 148964220a7eSMarcel Moolenaar * The SPR register echoed the two values written 149064220a7eSMarcel Moolenaar * by us. This means that the SPAD jumper is set. 149164220a7eSMarcel Moolenaar */ 149264220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: extra features " 149364220a7eSMarcel Moolenaar "not usable -- SPAD compatibility enabled\n"); 149464220a7eSMarcel Moolenaar return (0); 149564220a7eSMarcel Moolenaar } 149664220a7eSMarcel Moolenaar if (v0 != 0) { 149764220a7eSMarcel Moolenaar /* 149864220a7eSMarcel Moolenaar * The first value doesn't match. This can only mean 149964220a7eSMarcel Moolenaar * that the SPAD jumper is not set and that a non- 150064220a7eSMarcel Moolenaar * standard fixed clock multiplier jumper is set. 150164220a7eSMarcel Moolenaar */ 150264220a7eSMarcel Moolenaar if (bootverbose) 150364220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "fixed clock rate " 150464220a7eSMarcel Moolenaar "multiplier of %d\n", 1 << v0); 150564220a7eSMarcel Moolenaar if (v0 < -cfg->clock) 150664220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: " 150764220a7eSMarcel Moolenaar "suboptimal fixed clock rate multiplier " 150864220a7eSMarcel Moolenaar "setting\n"); 150964220a7eSMarcel Moolenaar return (0); 151064220a7eSMarcel Moolenaar } 151164220a7eSMarcel Moolenaar /* 151264220a7eSMarcel Moolenaar * The first value matched, but the second didn't. We know 151364220a7eSMarcel Moolenaar * that the SPAD jumper is not set. We also know that the 151464220a7eSMarcel Moolenaar * clock rate multiplier is software controlled *and* that 151564220a7eSMarcel Moolenaar * we just programmed it to the maximum allowed. 151664220a7eSMarcel Moolenaar */ 151764220a7eSMarcel Moolenaar if (bootverbose) 151864220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "clock rate multiplier of " 151964220a7eSMarcel Moolenaar "%d selected\n", 1 << -cfg->clock); 152064220a7eSMarcel Moolenaar return (0); 152164220a7eSMarcel Moolenaar case PUC_CFG_GET_CLOCK: 152264220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff; 152364220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff; 152464220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) { 152564220a7eSMarcel Moolenaar /* 152664220a7eSMarcel Moolenaar * XXX With the SPAD jumper applied, there's no 152764220a7eSMarcel Moolenaar * easy way of knowing if there's also a clock 152864220a7eSMarcel Moolenaar * rate multiplier jumper installed. Let's hope 152964220a7eSMarcel Moolenaar * not ... 153064220a7eSMarcel Moolenaar */ 153164220a7eSMarcel Moolenaar *res = DEFAULT_RCLK; 153264220a7eSMarcel Moolenaar } else if (v0 == 0) { 153364220a7eSMarcel Moolenaar /* 153464220a7eSMarcel Moolenaar * No clock rate multiplier jumper installed, 153564220a7eSMarcel Moolenaar * so we programmed the board with the maximum 153664220a7eSMarcel Moolenaar * multiplier allowed as given to us in the 153764220a7eSMarcel Moolenaar * clock field of the config record (negated). 153864220a7eSMarcel Moolenaar */ 153964220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << -cfg->clock; 154064220a7eSMarcel Moolenaar } else 154164220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << v0; 154264220a7eSMarcel Moolenaar return (0); 154364220a7eSMarcel Moolenaar case PUC_CFG_GET_ILR: 154464220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff; 154564220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff; 1546430acc47SMarius Strobl *res = (v0 == 0 && v1 == 0x80 + -cfg->clock) ? 1547430acc47SMarius Strobl PUC_ILR_NONE : PUC_ILR_QUATECH; 154864220a7eSMarcel Moolenaar return (0); 154964220a7eSMarcel Moolenaar default: 155064220a7eSMarcel Moolenaar break; 155164220a7eSMarcel Moolenaar } 155264220a7eSMarcel Moolenaar return (ENXIO); 155364220a7eSMarcel Moolenaar } 155464220a7eSMarcel Moolenaar 155564220a7eSMarcel Moolenaar static int 155664220a7eSMarcel Moolenaar puc_config_syba(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 155764220a7eSMarcel Moolenaar intptr_t *res) 155864220a7eSMarcel Moolenaar { 155964220a7eSMarcel Moolenaar static int base[] = { 0x251, 0x3f0, 0 }; 156064220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 156164220a7eSMarcel Moolenaar struct puc_bar *bar; 156264220a7eSMarcel Moolenaar int efir, idx, ofs; 156364220a7eSMarcel Moolenaar uint8_t v; 156464220a7eSMarcel Moolenaar 156564220a7eSMarcel Moolenaar switch (cmd) { 156664220a7eSMarcel Moolenaar case PUC_CFG_SETUP: 156764220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid); 156864220a7eSMarcel Moolenaar if (bar == NULL) 156964220a7eSMarcel Moolenaar return (ENXIO); 157064220a7eSMarcel Moolenaar 157164220a7eSMarcel Moolenaar /* configure both W83877TFs */ 157264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0x89); 157364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87); 157464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87); 157564220a7eSMarcel Moolenaar idx = 0; 157664220a7eSMarcel Moolenaar while (base[idx] != 0) { 157764220a7eSMarcel Moolenaar efir = base[idx]; 157864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x09); 157964220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1); 158064220a7eSMarcel Moolenaar if ((v & 0x0f) != 0x0c) 158164220a7eSMarcel Moolenaar return (ENXIO); 158264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 158364220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1); 158464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 158564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v | 0x04); 158664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 158764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v & ~0x04); 158864220a7eSMarcel Moolenaar ofs = base[idx] & 0x300; 158964220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x23); 159064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0x78) >> 2); 159164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x24); 159264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xf8) >> 2); 159364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x25); 159464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xe8) >> 2); 159564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x17); 159664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x03); 159764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x28); 159864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x43); 159964220a7eSMarcel Moolenaar idx++; 160064220a7eSMarcel Moolenaar } 160164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0xaa); 160264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0xaa); 160364220a7eSMarcel Moolenaar return (0); 160464220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 160564220a7eSMarcel Moolenaar switch (port) { 160664220a7eSMarcel Moolenaar case 0: 160764220a7eSMarcel Moolenaar *res = 0x2f8; 160864220a7eSMarcel Moolenaar return (0); 160964220a7eSMarcel Moolenaar case 1: 161064220a7eSMarcel Moolenaar *res = 0x2e8; 161164220a7eSMarcel Moolenaar return (0); 161264220a7eSMarcel Moolenaar case 2: 161364220a7eSMarcel Moolenaar *res = 0x3f8; 161464220a7eSMarcel Moolenaar return (0); 161564220a7eSMarcel Moolenaar case 3: 161664220a7eSMarcel Moolenaar *res = 0x3e8; 161764220a7eSMarcel Moolenaar return (0); 161864220a7eSMarcel Moolenaar case 4: 161964220a7eSMarcel Moolenaar *res = 0x278; 162064220a7eSMarcel Moolenaar return (0); 162164220a7eSMarcel Moolenaar } 162264220a7eSMarcel Moolenaar break; 162364220a7eSMarcel Moolenaar default: 162464220a7eSMarcel Moolenaar break; 162564220a7eSMarcel Moolenaar } 162664220a7eSMarcel Moolenaar return (ENXIO); 162764220a7eSMarcel Moolenaar } 162864220a7eSMarcel Moolenaar 162964220a7eSMarcel Moolenaar static int 163064220a7eSMarcel Moolenaar puc_config_siig(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 163164220a7eSMarcel Moolenaar intptr_t *res) 163264220a7eSMarcel Moolenaar { 163364220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 163464220a7eSMarcel Moolenaar 163564220a7eSMarcel Moolenaar switch (cmd) { 163664220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 163764220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) { 163864220a7eSMarcel Moolenaar *res = (port > 4) ? 8 * (port - 4) : 0; 163964220a7eSMarcel Moolenaar return (0); 164064220a7eSMarcel Moolenaar } 164164220a7eSMarcel Moolenaar break; 164264220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 164364220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) { 164464220a7eSMarcel Moolenaar *res = 0x10 + ((port > 4) ? 0x10 : 4 * port); 164564220a7eSMarcel Moolenaar return (0); 164664220a7eSMarcel Moolenaar } 164764220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_2S1P) { 164864220a7eSMarcel Moolenaar switch (port) { 164964220a7eSMarcel Moolenaar case 0: *res = 0x10; return (0); 165064220a7eSMarcel Moolenaar case 1: *res = 0x14; return (0); 165164220a7eSMarcel Moolenaar case 2: *res = 0x1c; return (0); 165264220a7eSMarcel Moolenaar } 165364220a7eSMarcel Moolenaar } 165464220a7eSMarcel Moolenaar break; 165564220a7eSMarcel Moolenaar default: 165664220a7eSMarcel Moolenaar break; 165764220a7eSMarcel Moolenaar } 165864220a7eSMarcel Moolenaar return (ENXIO); 165964220a7eSMarcel Moolenaar } 166064220a7eSMarcel Moolenaar 166164220a7eSMarcel Moolenaar static int 166264220a7eSMarcel Moolenaar puc_config_timedia(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 166364220a7eSMarcel Moolenaar intptr_t *res) 166464220a7eSMarcel Moolenaar { 166500ff5de5SMarius Strobl static const uint16_t dual[] = { 166664220a7eSMarcel Moolenaar 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085, 166764220a7eSMarcel Moolenaar 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079, 166864220a7eSMarcel Moolenaar 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079, 166964220a7eSMarcel Moolenaar 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079, 167064220a7eSMarcel Moolenaar 0xD079, 0 167164220a7eSMarcel Moolenaar }; 167200ff5de5SMarius Strobl static const uint16_t quad[] = { 167364220a7eSMarcel Moolenaar 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157, 167464220a7eSMarcel Moolenaar 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159, 167564220a7eSMarcel Moolenaar 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056, 167664220a7eSMarcel Moolenaar 0xB157, 0 167764220a7eSMarcel Moolenaar }; 167800ff5de5SMarius Strobl static const uint16_t octa[] = { 167964220a7eSMarcel Moolenaar 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166, 168064220a7eSMarcel Moolenaar 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0 168164220a7eSMarcel Moolenaar }; 168200ff5de5SMarius Strobl static const struct { 168364220a7eSMarcel Moolenaar int ports; 168400ff5de5SMarius Strobl const uint16_t *ids; 168564220a7eSMarcel Moolenaar } subdevs[] = { 168664220a7eSMarcel Moolenaar { 2, dual }, 168764220a7eSMarcel Moolenaar { 4, quad }, 168864220a7eSMarcel Moolenaar { 8, octa }, 168964220a7eSMarcel Moolenaar { 0, NULL } 169064220a7eSMarcel Moolenaar }; 169164220a7eSMarcel Moolenaar static char desc[64]; 169264220a7eSMarcel Moolenaar int dev, id; 169364220a7eSMarcel Moolenaar uint16_t subdev; 169464220a7eSMarcel Moolenaar 169564220a7eSMarcel Moolenaar switch (cmd) { 16969c418f51SJohn Baldwin case PUC_CFG_GET_CLOCK: 16979c418f51SJohn Baldwin if (port < 2) 16989c418f51SJohn Baldwin *res = DEFAULT_RCLK * 8; 16999c418f51SJohn Baldwin else 17009c418f51SJohn Baldwin *res = DEFAULT_RCLK; 17019c418f51SJohn Baldwin return (0); 170264220a7eSMarcel Moolenaar case PUC_CFG_GET_DESC: 170364220a7eSMarcel Moolenaar snprintf(desc, sizeof(desc), 170464220a7eSMarcel Moolenaar "Timedia technology %d Port Serial", (int)sc->sc_cfg_data); 170564220a7eSMarcel Moolenaar *res = (intptr_t)desc; 170664220a7eSMarcel Moolenaar return (0); 170764220a7eSMarcel Moolenaar case PUC_CFG_GET_NPORTS: 170864220a7eSMarcel Moolenaar subdev = pci_get_subdevice(sc->sc_dev); 170964220a7eSMarcel Moolenaar dev = 0; 171064220a7eSMarcel Moolenaar while (subdevs[dev].ports != 0) { 171164220a7eSMarcel Moolenaar id = 0; 171264220a7eSMarcel Moolenaar while (subdevs[dev].ids[id] != 0) { 171364220a7eSMarcel Moolenaar if (subdev == subdevs[dev].ids[id]) { 171464220a7eSMarcel Moolenaar sc->sc_cfg_data = subdevs[dev].ports; 171564220a7eSMarcel Moolenaar *res = sc->sc_cfg_data; 171664220a7eSMarcel Moolenaar return (0); 171764220a7eSMarcel Moolenaar } 171864220a7eSMarcel Moolenaar id++; 171964220a7eSMarcel Moolenaar } 172064220a7eSMarcel Moolenaar dev++; 172164220a7eSMarcel Moolenaar } 172264220a7eSMarcel Moolenaar return (ENXIO); 172364220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 172464220a7eSMarcel Moolenaar *res = (port == 1 || port == 3) ? 8 : 0; 172564220a7eSMarcel Moolenaar return (0); 172664220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 1727c1163871SMarcel Moolenaar *res = 0x10 + ((port > 3) ? port - 2 : port >> 1) * 4; 172864220a7eSMarcel Moolenaar return (0); 172964220a7eSMarcel Moolenaar case PUC_CFG_GET_TYPE: 173064220a7eSMarcel Moolenaar *res = PUC_TYPE_SERIAL; 173164220a7eSMarcel Moolenaar return (0); 173264220a7eSMarcel Moolenaar default: 173364220a7eSMarcel Moolenaar break; 173464220a7eSMarcel Moolenaar } 173564220a7eSMarcel Moolenaar return (ENXIO); 173664220a7eSMarcel Moolenaar } 173764220a7eSMarcel Moolenaar 173864220a7eSMarcel Moolenaar static int 1739d5e0798eSMarius Strobl puc_config_oxford_pci954(struct puc_softc *sc, enum puc_cfg_cmd cmd, 1740d5e0798eSMarius Strobl int port __unused, intptr_t *res) 1741d5e0798eSMarius Strobl { 1742d5e0798eSMarius Strobl 1743d5e0798eSMarius Strobl switch (cmd) { 1744d5e0798eSMarius Strobl case PUC_CFG_GET_CLOCK: 1745d5e0798eSMarius Strobl /* 1746d5e0798eSMarius Strobl * OXu16PCI954 use a 14.7456 MHz clock by default while 1747d5e0798eSMarius Strobl * OX16PCI954 and OXm16PCI954 employ a 1.8432 MHz one. 1748d5e0798eSMarius Strobl */ 1749d5e0798eSMarius Strobl if (pci_get_revid(sc->sc_dev) == 1) 1750d5e0798eSMarius Strobl *res = DEFAULT_RCLK * 8; 1751d5e0798eSMarius Strobl else 1752d5e0798eSMarius Strobl *res = DEFAULT_RCLK; 1753d5e0798eSMarius Strobl return (0); 1754d5e0798eSMarius Strobl default: 1755d5e0798eSMarius Strobl break; 1756d5e0798eSMarius Strobl } 1757d5e0798eSMarius Strobl return (ENXIO); 1758d5e0798eSMarius Strobl } 1759d5e0798eSMarius Strobl 1760d5e0798eSMarius Strobl static int 17616e9f075aSJohn Baldwin puc_config_oxford_pcie(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 17626e9f075aSJohn Baldwin intptr_t *res) 17636e9f075aSJohn Baldwin { 17646e9f075aSJohn Baldwin const struct puc_cfg *cfg = sc->sc_cfg; 17656e9f075aSJohn Baldwin int idx; 17666e9f075aSJohn Baldwin struct puc_bar *bar; 17676e9f075aSJohn Baldwin uint8_t value; 17686e9f075aSJohn Baldwin 17696e9f075aSJohn Baldwin switch (cmd) { 17706e9f075aSJohn Baldwin case PUC_CFG_SETUP: 17716e9f075aSJohn Baldwin device_printf(sc->sc_dev, "%d UARTs detected\n", 17726e9f075aSJohn Baldwin sc->sc_nports); 17736e9f075aSJohn Baldwin 17746e9f075aSJohn Baldwin /* Set UARTs to enhanced mode */ 17756e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid); 17766e9f075aSJohn Baldwin if (bar == NULL) 17776e9f075aSJohn Baldwin return (ENXIO); 17786e9f075aSJohn Baldwin for (idx = 0; idx < sc->sc_nports; idx++) { 1779a59f78daSJohn Baldwin value = bus_read_1(bar->b_res, 0x1000 + (idx << 9) + 1780a59f78daSJohn Baldwin 0x92); 17816e9f075aSJohn Baldwin bus_write_1(bar->b_res, 0x1000 + (idx << 9) + 0x92, 17826e9f075aSJohn Baldwin value | 0x10); 17836e9f075aSJohn Baldwin } 17846e9f075aSJohn Baldwin return (0); 17856e9f075aSJohn Baldwin case PUC_CFG_GET_LEN: 17866e9f075aSJohn Baldwin *res = 0x200; 17876e9f075aSJohn Baldwin return (0); 17886e9f075aSJohn Baldwin case PUC_CFG_GET_NPORTS: 17896e9f075aSJohn Baldwin /* 17906e9f075aSJohn Baldwin * Check if we are being called from puc_bfe_attach() 17916e9f075aSJohn Baldwin * or puc_bfe_probe(). If puc_bfe_probe(), we cannot 17923deebd53SMarius Strobl * puc_get_bar(), so we return a value of 16. This has 17933deebd53SMarius Strobl * cosmetic side-effects at worst; in PUC_CFG_GET_DESC, 17943deebd53SMarius Strobl * sc->sc_cfg_data will not contain the true number of 17953deebd53SMarius Strobl * ports in PUC_CFG_GET_DESC, but we are not implementing 17963deebd53SMarius Strobl * that call for this device family anyway. 17976e9f075aSJohn Baldwin * 17983deebd53SMarius Strobl * The check is for initialization of sc->sc_bar[idx], 17993deebd53SMarius Strobl * which is only done in puc_bfe_attach(). 18006e9f075aSJohn Baldwin */ 18016e9f075aSJohn Baldwin idx = 0; 18026e9f075aSJohn Baldwin do { 18036e9f075aSJohn Baldwin if (sc->sc_bar[idx++].b_rid != -1) { 18046e9f075aSJohn Baldwin sc->sc_cfg_data = 16; 18056e9f075aSJohn Baldwin *res = sc->sc_cfg_data; 18066e9f075aSJohn Baldwin return (0); 18076e9f075aSJohn Baldwin } 18086e9f075aSJohn Baldwin } while (idx < PUC_PCI_BARS); 18096e9f075aSJohn Baldwin 18106e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid); 18116e9f075aSJohn Baldwin if (bar == NULL) 18126e9f075aSJohn Baldwin return (ENXIO); 18136e9f075aSJohn Baldwin 18146e9f075aSJohn Baldwin value = bus_read_1(bar->b_res, 0x04); 18156e9f075aSJohn Baldwin if (value == 0) 18166e9f075aSJohn Baldwin return (ENXIO); 18176e9f075aSJohn Baldwin 18186e9f075aSJohn Baldwin sc->sc_cfg_data = value; 18196e9f075aSJohn Baldwin *res = sc->sc_cfg_data; 18206e9f075aSJohn Baldwin return (0); 18216e9f075aSJohn Baldwin case PUC_CFG_GET_OFS: 18226e9f075aSJohn Baldwin *res = 0x1000 + (port << 9); 18236e9f075aSJohn Baldwin return (0); 18246e9f075aSJohn Baldwin case PUC_CFG_GET_TYPE: 18256e9f075aSJohn Baldwin *res = PUC_TYPE_SERIAL; 18266e9f075aSJohn Baldwin return (0); 18276e9f075aSJohn Baldwin default: 18286e9f075aSJohn Baldwin break; 18296e9f075aSJohn Baldwin } 18306e9f075aSJohn Baldwin return (ENXIO); 18316e9f075aSJohn Baldwin } 18326e9f075aSJohn Baldwin 18336e9f075aSJohn Baldwin static int 183450c0e894SMarius Strobl puc_config_sunix(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 183550c0e894SMarius Strobl intptr_t *res) 183650c0e894SMarius Strobl { 183750c0e894SMarius Strobl int error; 183850c0e894SMarius Strobl 183950c0e894SMarius Strobl switch (cmd) { 184050c0e894SMarius Strobl case PUC_CFG_GET_OFS: 184150c0e894SMarius Strobl error = puc_config(sc, PUC_CFG_GET_TYPE, port, res); 184250c0e894SMarius Strobl if (error != 0) 184350c0e894SMarius Strobl return (error); 184450c0e894SMarius Strobl *res = (*res == PUC_TYPE_SERIAL) ? (port & 3) * 8 : 0; 184550c0e894SMarius Strobl return (0); 184650c0e894SMarius Strobl case PUC_CFG_GET_RID: 184750c0e894SMarius Strobl error = puc_config(sc, PUC_CFG_GET_TYPE, port, res); 184850c0e894SMarius Strobl if (error != 0) 184950c0e894SMarius Strobl return (error); 185050c0e894SMarius Strobl *res = (*res == PUC_TYPE_SERIAL && port <= 3) ? 0x10 : 0x14; 185150c0e894SMarius Strobl return (0); 185250c0e894SMarius Strobl default: 185350c0e894SMarius Strobl break; 185450c0e894SMarius Strobl } 185550c0e894SMarius Strobl return (ENXIO); 185650c0e894SMarius Strobl } 185750c0e894SMarius Strobl 185850c0e894SMarius Strobl static int 1859430acc47SMarius Strobl puc_config_titan(struct puc_softc *sc __unused, enum puc_cfg_cmd cmd, 1860430acc47SMarius Strobl int port, intptr_t *res) 186164220a7eSMarcel Moolenaar { 1862430acc47SMarius Strobl 186364220a7eSMarcel Moolenaar switch (cmd) { 186464220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 186564220a7eSMarcel Moolenaar *res = (port < 3) ? 0 : (port - 2) << 3; 186664220a7eSMarcel Moolenaar return (0); 186764220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 186864220a7eSMarcel Moolenaar *res = 0x14 + ((port >= 2) ? 0x0c : port << 2); 186964220a7eSMarcel Moolenaar return (0); 187064220a7eSMarcel Moolenaar default: 187164220a7eSMarcel Moolenaar break; 187264220a7eSMarcel Moolenaar } 187364220a7eSMarcel Moolenaar return (ENXIO); 187464220a7eSMarcel Moolenaar } 1875