1098ca2bdSWarner Losh /*- 264220a7eSMarcel Moolenaar * Copyright (c) 2006 Marcel Moolenaar 364220a7eSMarcel Moolenaar * All rights reserved. 49c564b6cSJohn Hay * 59c564b6cSJohn Hay * Redistribution and use in source and binary forms, with or without 69c564b6cSJohn Hay * modification, are permitted provided that the following conditions 79c564b6cSJohn Hay * are met: 864220a7eSMarcel Moolenaar * 99c564b6cSJohn Hay * 1. Redistributions of source code must retain the above copyright 109c564b6cSJohn Hay * notice, this list of conditions and the following disclaimer. 119c564b6cSJohn Hay * 2. Redistributions in binary form must reproduce the above copyright 129c564b6cSJohn Hay * notice, this list of conditions and the following disclaimer in the 139c564b6cSJohn Hay * documentation and/or other materials provided with the distribution. 149c564b6cSJohn Hay * 159c564b6cSJohn Hay * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 169c564b6cSJohn Hay * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 179c564b6cSJohn Hay * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 189c564b6cSJohn Hay * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 199c564b6cSJohn Hay * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 209c564b6cSJohn Hay * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 219c564b6cSJohn Hay * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 229c564b6cSJohn Hay * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 239c564b6cSJohn Hay * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 249c564b6cSJohn Hay * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 259c564b6cSJohn Hay */ 269c564b6cSJohn Hay 279c564b6cSJohn Hay #include <sys/cdefs.h> 289c564b6cSJohn Hay __FBSDID("$FreeBSD$"); 299c564b6cSJohn Hay 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> 399c564b6cSJohn Hay 4064220a7eSMarcel Moolenaar #include <machine/resource.h> 41ed0b0e82SWarner Losh #include <machine/bus.h> 4264220a7eSMarcel Moolenaar #include <sys/rman.h> 4364220a7eSMarcel Moolenaar 449c564b6cSJohn Hay #include <dev/pci/pcivar.h> 459c564b6cSJohn Hay 4664220a7eSMarcel Moolenaar #include <dev/puc/puc_bus.h> 4764220a7eSMarcel Moolenaar #include <dev/puc/puc_cfg.h> 48482aa6a3SDavid E. O'Brien #include <dev/puc/puc_bfe.h> 499c564b6cSJohn Hay 5064220a7eSMarcel Moolenaar static puc_config_f puc_config_amc; 5164220a7eSMarcel Moolenaar static puc_config_f puc_config_diva; 5222e0612fSJohn Baldwin static puc_config_f puc_config_exar; 538de2c77bSRyan Stone static puc_config_f puc_config_exar_pcie; 5464220a7eSMarcel Moolenaar static puc_config_f puc_config_icbook; 552c89ac5eSEitan Adler static puc_config_f puc_config_moxa; 56a59f78daSJohn Baldwin static puc_config_f puc_config_oxford_pcie; 5764220a7eSMarcel Moolenaar static puc_config_f puc_config_quatech; 5864220a7eSMarcel Moolenaar static puc_config_f puc_config_syba; 5964220a7eSMarcel Moolenaar static puc_config_f puc_config_siig; 6064220a7eSMarcel Moolenaar static puc_config_f puc_config_timedia; 6164220a7eSMarcel Moolenaar static puc_config_f puc_config_titan; 62dc7d0deaSMarcel Moolenaar 6364220a7eSMarcel Moolenaar const struct puc_cfg puc_pci_devices[] = { 64a27ffb41SDavid E. O'Brien 6564220a7eSMarcel Moolenaar { 0x0009, 0x7168, 0xffff, 0, 6664220a7eSMarcel Moolenaar "Sunix SUN1889", 6764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 6864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 690efcc68bSBruce Evans }, 700efcc68bSBruce Evans 7164220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1049, 7264220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Tosca Console", 7364220a7eSMarcel Moolenaar DEFAULT_RCLK, 7464220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 7564220a7eSMarcel Moolenaar .config_function = puc_config_diva 76dc7d0deaSMarcel Moolenaar }, 77dc7d0deaSMarcel Moolenaar 7864220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x104a, 7964220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Tosca Secondary", 8064220a7eSMarcel Moolenaar DEFAULT_RCLK, 8164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, -1, 8264220a7eSMarcel Moolenaar .config_function = puc_config_diva 83a27ffb41SDavid E. O'Brien }, 84a27ffb41SDavid E. O'Brien 8564220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x104b, 8664220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Maestro SP2", 8764220a7eSMarcel Moolenaar DEFAULT_RCLK, 8864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, -1, 8964220a7eSMarcel Moolenaar .config_function = puc_config_diva 90a27ffb41SDavid E. O'Brien }, 91a27ffb41SDavid E. O'Brien 9264220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1223, 9364220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Superdome Console", 9464220a7eSMarcel Moolenaar DEFAULT_RCLK, 9564220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 9664220a7eSMarcel Moolenaar .config_function = puc_config_diva 97a27ffb41SDavid E. O'Brien }, 98a27ffb41SDavid E. O'Brien 9964220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1226, 10064220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Keystone SP2", 10164220a7eSMarcel Moolenaar DEFAULT_RCLK, 10264220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 10364220a7eSMarcel Moolenaar .config_function = puc_config_diva 104a27ffb41SDavid E. O'Brien }, 105a27ffb41SDavid E. O'Brien 10664220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1282, 10764220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Everest SP2", 10864220a7eSMarcel Moolenaar DEFAULT_RCLK, 10964220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 11064220a7eSMarcel Moolenaar .config_function = puc_config_diva 111a27ffb41SDavid E. O'Brien }, 112a27ffb41SDavid E. O'Brien 11364220a7eSMarcel Moolenaar { 0x10b5, 0x1076, 0x10b5, 0x1076, 11464220a7eSMarcel Moolenaar "VScom PCI-800", 11564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 11664220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 1172569e387SDavid E. O'Brien }, 11864220a7eSMarcel Moolenaar 11964220a7eSMarcel Moolenaar { 0x10b5, 0x1077, 0x10b5, 0x1077, 12064220a7eSMarcel Moolenaar "VScom PCI-400", 12164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 12264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 1232569e387SDavid E. O'Brien }, 12464220a7eSMarcel Moolenaar 12564220a7eSMarcel Moolenaar { 0x10b5, 0x1103, 0x10b5, 0x1103, 12664220a7eSMarcel Moolenaar "VScom PCI-200", 12764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 12864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 1292569e387SDavid E. O'Brien }, 130a27ffb41SDavid E. O'Brien 1319c564b6cSJohn Hay /* 13264220a7eSMarcel Moolenaar * Boca Research Turbo Serial 658 (8 serial port) card. 13364220a7eSMarcel Moolenaar * Appears to be the same as Chase Research PLC PCI-FAST8 13464220a7eSMarcel Moolenaar * and Perle PCI-FAST8 Multi-Port serial cards. 1359c564b6cSJohn Hay */ 13664220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0x12e0, 0x0021, 13764220a7eSMarcel Moolenaar "Boca Research Turbo Serial 658", 13864220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 13964220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 1409c564b6cSJohn Hay }, 1419c564b6cSJohn Hay 14264220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0x12e0, 0x0031, 14364220a7eSMarcel Moolenaar "Boca Research Turbo Serial 654", 14464220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 14564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 14664220a7eSMarcel Moolenaar }, 1479c564b6cSJohn Hay 1489c564b6cSJohn Hay /* 1499c564b6cSJohn Hay * Dolphin Peripherals 4035 (dual serial port) card. PLX 9050, with 1509c564b6cSJohn Hay * a seemingly-lame EEPROM setup that puts the Dolphin IDs 1519c564b6cSJohn Hay * into the subsystem fields, and claims that it's a 1529c564b6cSJohn Hay * network/misc (0x02/0x80) device. 1539c564b6cSJohn Hay */ 15464220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0xd84d, 0x6808, 15564220a7eSMarcel Moolenaar "Dolphin Peripherals 4035", 15664220a7eSMarcel Moolenaar DEFAULT_RCLK, 15764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 1589c564b6cSJohn Hay }, 1599c564b6cSJohn Hay 1609c564b6cSJohn Hay /* 16164220a7eSMarcel Moolenaar * Dolphin Peripherals 4014 (dual parallel port) card. PLX 9050, with 16264220a7eSMarcel Moolenaar * a seemingly-lame EEPROM setup that puts the Dolphin IDs 16364220a7eSMarcel Moolenaar * into the subsystem fields, and claims that it's a 16464220a7eSMarcel Moolenaar * network/misc (0x02/0x80) device. 1659c564b6cSJohn Hay */ 16664220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0xd84d, 0x6810, 16764220a7eSMarcel Moolenaar "Dolphin Peripherals 4014", 16864220a7eSMarcel Moolenaar 0, 16964220a7eSMarcel Moolenaar PUC_PORT_2P, 0x20, 4, 0, 1709c564b6cSJohn Hay }, 1719c564b6cSJohn Hay 17264220a7eSMarcel Moolenaar { 0x10e8, 0x818e, 0xffff, 0, 17364220a7eSMarcel Moolenaar "Applied Micro Circuits 8 Port UART", 17464220a7eSMarcel Moolenaar DEFAULT_RCLK, 17564220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1, 17664220a7eSMarcel Moolenaar .config_function = puc_config_amc 17764220a7eSMarcel Moolenaar }, 1789c564b6cSJohn Hay 17964220a7eSMarcel Moolenaar { 0x11fe, 0x8010, 0xffff, 0, 18064220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 RJ11 part A", 18164220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 18264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 18364220a7eSMarcel Moolenaar }, 18464220a7eSMarcel Moolenaar 18564220a7eSMarcel Moolenaar { 0x11fe, 0x8011, 0xffff, 0, 18664220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 RJ11 part B", 18764220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 18864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 18964220a7eSMarcel Moolenaar }, 19064220a7eSMarcel Moolenaar 19164220a7eSMarcel Moolenaar { 0x11fe, 0x8012, 0xffff, 0, 19264220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 Octa part A", 19364220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 19464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 19564220a7eSMarcel Moolenaar }, 19664220a7eSMarcel Moolenaar 19764220a7eSMarcel Moolenaar { 0x11fe, 0x8013, 0xffff, 0, 19864220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 Octa part B", 19964220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 20064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 20164220a7eSMarcel Moolenaar }, 20264220a7eSMarcel Moolenaar 20364220a7eSMarcel Moolenaar { 0x11fe, 0x8014, 0xffff, 0, 20464220a7eSMarcel Moolenaar "Comtrol RocketPort 550/4 RJ45", 20564220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 20664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 20764220a7eSMarcel Moolenaar }, 20864220a7eSMarcel Moolenaar 20964220a7eSMarcel Moolenaar { 0x11fe, 0x8015, 0xffff, 0, 21064220a7eSMarcel Moolenaar "Comtrol RocketPort 550/Quad", 21164220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 21264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 21364220a7eSMarcel Moolenaar }, 21464220a7eSMarcel Moolenaar 21564220a7eSMarcel Moolenaar { 0x11fe, 0x8016, 0xffff, 0, 21664220a7eSMarcel Moolenaar "Comtrol RocketPort 550/16 part A", 21764220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 21864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 21964220a7eSMarcel Moolenaar }, 22064220a7eSMarcel Moolenaar 22164220a7eSMarcel Moolenaar { 0x11fe, 0x8017, 0xffff, 0, 22264220a7eSMarcel Moolenaar "Comtrol RocketPort 550/16 part B", 22364220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 22464220a7eSMarcel Moolenaar PUC_PORT_12S, 0x10, 0, 8, 22564220a7eSMarcel Moolenaar }, 22664220a7eSMarcel Moolenaar 22764220a7eSMarcel Moolenaar { 0x11fe, 0x8018, 0xffff, 0, 22864220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 part A", 22964220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 23064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 23164220a7eSMarcel Moolenaar }, 23264220a7eSMarcel Moolenaar 23364220a7eSMarcel Moolenaar { 0x11fe, 0x8019, 0xffff, 0, 23464220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 part B", 23564220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 23664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 23764220a7eSMarcel Moolenaar }, 2389c564b6cSJohn Hay 2399c564b6cSJohn Hay /* 24063fbf504SRobert Watson * IBM SurePOS 300 Series (481033H) serial ports 24163fbf504SRobert Watson * Details can be found on the IBM RSS websites 24263fbf504SRobert Watson */ 24363fbf504SRobert Watson 24463fbf504SRobert Watson { 0x1014, 0x0297, 0xffff, 0, 24563fbf504SRobert Watson "IBM SurePOS 300 Series (481033H) serial ports", 24663fbf504SRobert Watson DEFAULT_RCLK, 24763fbf504SRobert Watson PUC_PORT_4S, 0x10, 4, 0 24863fbf504SRobert Watson }, 24963fbf504SRobert Watson 25063fbf504SRobert Watson /* 2519c564b6cSJohn Hay * SIIG Boards. 2529c564b6cSJohn Hay * 2539c564b6cSJohn Hay * SIIG provides documentation for their boards at: 25464220a7eSMarcel Moolenaar * <URL:http://www.siig.com/downloads.asp> 2559c564b6cSJohn Hay */ 2569c564b6cSJohn Hay 25764220a7eSMarcel Moolenaar { 0x131f, 0x1010, 0xffff, 0, 25864220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C550 (10x family)", 25964220a7eSMarcel Moolenaar DEFAULT_RCLK, 26064220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2619c564b6cSJohn Hay }, 2629c564b6cSJohn Hay 26364220a7eSMarcel Moolenaar { 0x131f, 0x1011, 0xffff, 0, 26464220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C650 (10x family)", 26564220a7eSMarcel Moolenaar DEFAULT_RCLK, 26664220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2679c564b6cSJohn Hay }, 2689c564b6cSJohn Hay 26964220a7eSMarcel Moolenaar { 0x131f, 0x1012, 0xffff, 0, 27064220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C850 (10x family)", 27164220a7eSMarcel Moolenaar DEFAULT_RCLK, 27264220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2739c564b6cSJohn Hay }, 2749c564b6cSJohn Hay 27564220a7eSMarcel Moolenaar { 0x131f, 0x1021, 0xffff, 0, 27664220a7eSMarcel Moolenaar "SIIG Cyber Parallel Dual PCI (10x family)", 27764220a7eSMarcel Moolenaar 0, 27864220a7eSMarcel Moolenaar PUC_PORT_2P, 0x18, 8, 0, 2799c564b6cSJohn Hay }, 2809c564b6cSJohn Hay 28164220a7eSMarcel Moolenaar { 0x131f, 0x1030, 0xffff, 0, 28264220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C550 (10x family)", 28364220a7eSMarcel Moolenaar DEFAULT_RCLK, 28464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2859c564b6cSJohn Hay }, 2869c564b6cSJohn Hay 28764220a7eSMarcel Moolenaar { 0x131f, 0x1031, 0xffff, 0, 28864220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C650 (10x family)", 28964220a7eSMarcel Moolenaar DEFAULT_RCLK, 29064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2919c564b6cSJohn Hay }, 2929c564b6cSJohn Hay 29364220a7eSMarcel Moolenaar { 0x131f, 0x1032, 0xffff, 0, 29464220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C850 (10x family)", 29564220a7eSMarcel Moolenaar DEFAULT_RCLK, 29664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2979c564b6cSJohn Hay }, 2989c564b6cSJohn Hay 29964220a7eSMarcel Moolenaar { 0x131f, 0x1034, 0xffff, 0, /* XXX really? */ 30064220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C550 (10x family)", 30164220a7eSMarcel Moolenaar DEFAULT_RCLK, 30264220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3039c564b6cSJohn Hay }, 3049c564b6cSJohn Hay 30564220a7eSMarcel Moolenaar { 0x131f, 0x1035, 0xffff, 0, /* XXX really? */ 30664220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C650 (10x family)", 30764220a7eSMarcel Moolenaar DEFAULT_RCLK, 30864220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3099c564b6cSJohn Hay }, 3109c564b6cSJohn Hay 31164220a7eSMarcel Moolenaar { 0x131f, 0x1036, 0xffff, 0, /* XXX really? */ 31264220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C850 (10x family)", 31364220a7eSMarcel Moolenaar DEFAULT_RCLK, 31464220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3159c564b6cSJohn Hay }, 3169c564b6cSJohn Hay 31764220a7eSMarcel Moolenaar { 0x131f, 0x1050, 0xffff, 0, 31864220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C550 (10x family)", 31964220a7eSMarcel Moolenaar DEFAULT_RCLK, 32064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3219c564b6cSJohn Hay }, 3229c564b6cSJohn Hay 32364220a7eSMarcel Moolenaar { 0x131f, 0x1051, 0xffff, 0, 32464220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (10x family)", 32564220a7eSMarcel Moolenaar DEFAULT_RCLK, 32664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3279c564b6cSJohn Hay }, 3289c564b6cSJohn Hay 32964220a7eSMarcel Moolenaar { 0x131f, 0x1052, 0xffff, 0, 33064220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C850 (10x family)", 33164220a7eSMarcel Moolenaar DEFAULT_RCLK, 33264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3339c564b6cSJohn Hay }, 3349c564b6cSJohn Hay 33564220a7eSMarcel Moolenaar { 0x131f, 0x2010, 0xffff, 0, 33664220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C550 (20x family)", 33764220a7eSMarcel Moolenaar DEFAULT_RCLK, 33864220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3399c564b6cSJohn Hay }, 3409c564b6cSJohn Hay 34164220a7eSMarcel Moolenaar { 0x131f, 0x2011, 0xffff, 0, 34264220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C650 (20x family)", 34364220a7eSMarcel Moolenaar DEFAULT_RCLK, 34464220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3459c564b6cSJohn Hay }, 3469c564b6cSJohn Hay 34764220a7eSMarcel Moolenaar { 0x131f, 0x2012, 0xffff, 0, 34864220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C850 (20x family)", 34964220a7eSMarcel Moolenaar DEFAULT_RCLK, 35064220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3519c564b6cSJohn Hay }, 3529c564b6cSJohn Hay 35364220a7eSMarcel Moolenaar { 0x131f, 0x2021, 0xffff, 0, 35464220a7eSMarcel Moolenaar "SIIG Cyber Parallel Dual PCI (20x family)", 35564220a7eSMarcel Moolenaar 0, 35664220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0, 3579c564b6cSJohn Hay }, 3589c564b6cSJohn Hay 35964220a7eSMarcel Moolenaar { 0x131f, 0x2030, 0xffff, 0, 36064220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C550 (20x family)", 36164220a7eSMarcel Moolenaar DEFAULT_RCLK, 36264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3639c564b6cSJohn Hay }, 3649c564b6cSJohn Hay 36564220a7eSMarcel Moolenaar { 0x131f, 0x2031, 0xffff, 0, 36664220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C650 (20x family)", 36764220a7eSMarcel Moolenaar DEFAULT_RCLK, 36864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3699c564b6cSJohn Hay }, 3709c564b6cSJohn Hay 37164220a7eSMarcel Moolenaar { 0x131f, 0x2032, 0xffff, 0, 37264220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C850 (20x family)", 37364220a7eSMarcel Moolenaar DEFAULT_RCLK, 37464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3759c564b6cSJohn Hay }, 3769c564b6cSJohn Hay 37764220a7eSMarcel Moolenaar { 0x131f, 0x2040, 0xffff, 0, 37864220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C550 (20x family)", 37964220a7eSMarcel Moolenaar DEFAULT_RCLK, 38064220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 38164220a7eSMarcel Moolenaar .config_function = puc_config_siig 3829c564b6cSJohn Hay }, 3839c564b6cSJohn Hay 38464220a7eSMarcel Moolenaar { 0x131f, 0x2041, 0xffff, 0, 38564220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C650 (20x family)", 38664220a7eSMarcel Moolenaar DEFAULT_RCLK, 38764220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 38864220a7eSMarcel Moolenaar .config_function = puc_config_siig 3899c564b6cSJohn Hay }, 3909c564b6cSJohn Hay 39164220a7eSMarcel Moolenaar { 0x131f, 0x2042, 0xffff, 0, 39264220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C850 (20x family)", 39364220a7eSMarcel Moolenaar DEFAULT_RCLK, 39464220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 39564220a7eSMarcel Moolenaar .config_function = puc_config_siig 3969c564b6cSJohn Hay }, 3979c564b6cSJohn Hay 39864220a7eSMarcel Moolenaar { 0x131f, 0x2050, 0xffff, 0, 39964220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C550 (20x family)", 40064220a7eSMarcel Moolenaar DEFAULT_RCLK, 40164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4029c564b6cSJohn Hay }, 4039c564b6cSJohn Hay 40464220a7eSMarcel Moolenaar { 0x131f, 0x2051, 0xffff, 0, 40564220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)", 40664220a7eSMarcel Moolenaar DEFAULT_RCLK, 40764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4089c564b6cSJohn Hay }, 4099c564b6cSJohn Hay 41064220a7eSMarcel Moolenaar { 0x131f, 0x2052, 0xffff, 0, 41164220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C850 (20x family)", 41264220a7eSMarcel Moolenaar DEFAULT_RCLK, 41364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4149c564b6cSJohn Hay }, 4159c564b6cSJohn Hay 41664220a7eSMarcel Moolenaar { 0x131f, 0x2060, 0xffff, 0, 41764220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C550 (20x family)", 41864220a7eSMarcel Moolenaar DEFAULT_RCLK, 41964220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4209c564b6cSJohn Hay }, 4219c564b6cSJohn Hay 42264220a7eSMarcel Moolenaar { 0x131f, 0x2061, 0xffff, 0, 42364220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C650 (20x family)", 42464220a7eSMarcel Moolenaar DEFAULT_RCLK, 42564220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4269c564b6cSJohn Hay }, 4279c564b6cSJohn Hay 42864220a7eSMarcel Moolenaar { 0x131f, 0x2062, 0xffff, 0, 42964220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C850 (20x family)", 43064220a7eSMarcel Moolenaar DEFAULT_RCLK, 43164220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4329c564b6cSJohn Hay }, 4339c564b6cSJohn Hay 43464220a7eSMarcel Moolenaar { 0x131f, 0x2081, 0xffff, 0, 43564220a7eSMarcel Moolenaar "SIIG PS8000 8S PCI 16C650 (20x family)", 43664220a7eSMarcel Moolenaar DEFAULT_RCLK, 43764220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, -1, -1, 43864220a7eSMarcel Moolenaar .config_function = puc_config_siig 4399c564b6cSJohn Hay }, 4409c564b6cSJohn Hay 44164220a7eSMarcel Moolenaar { 0x135c, 0x0010, 0xffff, 0, 44264220a7eSMarcel Moolenaar "Quatech QSC-100", 44364220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 44464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8, 44564220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4469c564b6cSJohn Hay }, 4479c564b6cSJohn Hay 44864220a7eSMarcel Moolenaar { 0x135c, 0x0020, 0xffff, 0, 44964220a7eSMarcel Moolenaar "Quatech DSC-100", 45064220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 45164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8, 45264220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4539c564b6cSJohn Hay }, 4549c564b6cSJohn Hay 45564220a7eSMarcel Moolenaar { 0x135c, 0x0030, 0xffff, 0, 45664220a7eSMarcel Moolenaar "Quatech DSC-200/300", 45764220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 45864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8, 45964220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4609c564b6cSJohn Hay }, 4619c564b6cSJohn Hay 46264220a7eSMarcel Moolenaar { 0x135c, 0x0040, 0xffff, 0, 46364220a7eSMarcel Moolenaar "Quatech QSC-200/300", 46464220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 46564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8, 46664220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4679c564b6cSJohn Hay }, 4689c564b6cSJohn Hay 46964220a7eSMarcel Moolenaar { 0x135c, 0x0050, 0xffff, 0, 47064220a7eSMarcel Moolenaar "Quatech ESC-100D", 47164220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 47264220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8, 47364220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4749c564b6cSJohn Hay }, 4759c564b6cSJohn Hay 47664220a7eSMarcel Moolenaar { 0x135c, 0x0060, 0xffff, 0, 47764220a7eSMarcel Moolenaar "Quatech ESC-100M", 47864220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 47964220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8, 48064220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4819c564b6cSJohn Hay }, 4829c564b6cSJohn Hay 48364220a7eSMarcel Moolenaar { 0x135c, 0x0170, 0xffff, 0, 48464220a7eSMarcel Moolenaar "Quatech QSCLP-100", 48564220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 48664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 48764220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4889c564b6cSJohn Hay }, 4899c564b6cSJohn Hay 49064220a7eSMarcel Moolenaar { 0x135c, 0x0180, 0xffff, 0, 49164220a7eSMarcel Moolenaar "Quatech DSCLP-100", 49264220a7eSMarcel Moolenaar -1, /* max 3x clock rate */ 49364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8, 49464220a7eSMarcel Moolenaar .config_function = puc_config_quatech 49576353f68SJohn Hay }, 49676353f68SJohn Hay 49764220a7eSMarcel Moolenaar { 0x135c, 0x01b0, 0xffff, 0, 49864220a7eSMarcel Moolenaar "Quatech DSCLP-200/300", 49964220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 50064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8, 50164220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5029c564b6cSJohn Hay }, 5039c564b6cSJohn Hay 50464220a7eSMarcel Moolenaar { 0x135c, 0x01e0, 0xffff, 0, 50564220a7eSMarcel Moolenaar "Quatech ESCLP-100", 50664220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 50764220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 50864220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5099c564b6cSJohn Hay }, 5109c564b6cSJohn Hay 511f83255a5SMax Khon { 0x1393, 0x1024, 0xffff, 0, 512f83255a5SMax Khon "Moxa Technologies, Smartio CP-102E/PCIe", 513f83255a5SMax Khon DEFAULT_RCLK * 8, 51451cb024fSMax Khon PUC_PORT_2S, 0x14, 0, -1, 51551cb024fSMax Khon .config_function = puc_config_moxa 516f83255a5SMax Khon }, 517f83255a5SMax Khon 518f83255a5SMax Khon { 0x1393, 0x1025, 0xffff, 0, 519f83255a5SMax Khon "Moxa Technologies, Smartio CP-102EL/PCIe", 520f83255a5SMax Khon DEFAULT_RCLK * 8, 52151cb024fSMax Khon PUC_PORT_2S, 0x14, 0, -1, 52251cb024fSMax Khon .config_function = puc_config_moxa 523f83255a5SMax Khon }, 524f83255a5SMax Khon 52564220a7eSMarcel Moolenaar { 0x1393, 0x1040, 0xffff, 0, 52664220a7eSMarcel Moolenaar "Moxa Technologies, Smartio C104H/PCI", 52764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 52864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5290ec6e983SJoerg Wunsch }, 53040f01890SBruce Evans 53164220a7eSMarcel Moolenaar { 0x1393, 0x1041, 0xffff, 0, 53264220a7eSMarcel Moolenaar "Moxa Technologies, Smartio CP-104UL/PCI", 53364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 53464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5359c564b6cSJohn Hay }, 5369c564b6cSJohn Hay 5372c89ac5eSEitan Adler { 0x1393, 0x1042, 0xffff, 0, 5382c89ac5eSEitan Adler "Moxa Technologies, Smartio CP-104JU/PCI", 5392c89ac5eSEitan Adler DEFAULT_RCLK * 8, 5402c89ac5eSEitan Adler PUC_PORT_4S, 0x18, 0, 8, 5412c89ac5eSEitan Adler }, 5422c89ac5eSEitan Adler 543f6a60febSMaxim Konovalov { 0x1393, 0x1043, 0xffff, 0, 544f6a60febSMaxim Konovalov "Moxa Technologies, Smartio CP-104EL/PCIe", 545f6a60febSMaxim Konovalov DEFAULT_RCLK * 8, 546f6a60febSMaxim Konovalov PUC_PORT_4S, 0x18, 0, 8, 547f6a60febSMaxim Konovalov }, 548f6a60febSMaxim Konovalov 5492c89ac5eSEitan Adler { 0x1393, 0x1045, 0xffff, 0, 5502c89ac5eSEitan Adler "Moxa Technologies, Smartio CP-104EL-A/PCIe", 5512c89ac5eSEitan Adler DEFAULT_RCLK * 8, 5522c89ac5eSEitan Adler PUC_PORT_4S, 0x14, 0, -1, 5532c89ac5eSEitan Adler .config_function = puc_config_moxa 5542c89ac5eSEitan Adler }, 5552c89ac5eSEitan Adler 5568efbf264SJohn Baldwin { 0x1393, 0x1120, 0xffff, 0, 5578efbf264SJohn Baldwin "Moxa Technologies, CP-112UL", 5588efbf264SJohn Baldwin DEFAULT_RCLK * 8, 5598efbf264SJohn Baldwin PUC_PORT_2S, 0x18, 0, 8, 5608efbf264SJohn Baldwin }, 5618efbf264SJohn Baldwin 56264220a7eSMarcel Moolenaar { 0x1393, 0x1141, 0xffff, 0, 56364220a7eSMarcel Moolenaar "Moxa Technologies, Industio CP-114", 56464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 56564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5669c564b6cSJohn Hay }, 5679c564b6cSJohn Hay 568f83255a5SMax Khon { 0x1393, 0x1144, 0xffff, 0, 569f83255a5SMax Khon "Moxa Technologies, Smartio CP-114EL/PCIe", 570f83255a5SMax Khon DEFAULT_RCLK * 8, 571f83255a5SMax Khon PUC_PORT_4S, 0x14, 0, -1, 572f83255a5SMax Khon .config_function = puc_config_moxa 573f83255a5SMax Khon }, 574f83255a5SMax Khon 575f83255a5SMax Khon { 0x1393, 0x1182, 0xffff, 0, 576f83255a5SMax Khon "Moxa Technologies, Smartio CP-118EL-A/PCIe", 577f83255a5SMax Khon DEFAULT_RCLK * 8, 57851cb024fSMax Khon PUC_PORT_8S, 0x14, 0, -1, 57951cb024fSMax Khon .config_function = puc_config_moxa 580f83255a5SMax Khon }, 581f83255a5SMax Khon 58264220a7eSMarcel Moolenaar { 0x1393, 0x1680, 0xffff, 0, 58364220a7eSMarcel Moolenaar "Moxa Technologies, C168H/PCI", 58464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 58564220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 5869c564b6cSJohn Hay }, 5879c564b6cSJohn Hay 58864220a7eSMarcel Moolenaar { 0x1393, 0x1681, 0xffff, 0, 58964220a7eSMarcel Moolenaar "Moxa Technologies, C168U/PCI", 59064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 59164220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 5929c564b6cSJohn Hay }, 5939c564b6cSJohn Hay 5940db1aa0bSStanislav Sedov { 0x1393, 0x1682, 0xffff, 0, 5950db1aa0bSStanislav Sedov "Moxa Technologies, CP-168EL/PCIe", 5960db1aa0bSStanislav Sedov DEFAULT_RCLK * 8, 5970db1aa0bSStanislav Sedov PUC_PORT_8S, 0x18, 0, 8, 5980db1aa0bSStanislav Sedov }, 5990db1aa0bSStanislav Sedov 600f83255a5SMax Khon { 0x1393, 0x1683, 0xffff, 0, 601f83255a5SMax Khon "Moxa Technologies, Smartio CP-168EL-A/PCIe", 602f83255a5SMax Khon DEFAULT_RCLK * 8, 60351cb024fSMax Khon PUC_PORT_8S, 0x14, 0, -1, 60451cb024fSMax Khon .config_function = puc_config_moxa 605f83255a5SMax Khon }, 606f83255a5SMax Khon 60722e0612fSJohn Baldwin { 0x13a8, 0x0152, 0xffff, 0, 60822e0612fSJohn Baldwin "Exar XR17C/D152", 60922e0612fSJohn Baldwin DEFAULT_RCLK * 8, 61022e0612fSJohn Baldwin PUC_PORT_2S, 0x10, 0, -1, 61122e0612fSJohn Baldwin .config_function = puc_config_exar 61222e0612fSJohn Baldwin }, 61322e0612fSJohn Baldwin 61422e0612fSJohn Baldwin { 0x13a8, 0x0154, 0xffff, 0, 61522e0612fSJohn Baldwin "Exar XR17C154", 61622e0612fSJohn Baldwin DEFAULT_RCLK * 8, 61722e0612fSJohn Baldwin PUC_PORT_4S, 0x10, 0, -1, 61822e0612fSJohn Baldwin .config_function = puc_config_exar 61922e0612fSJohn Baldwin }, 62022e0612fSJohn Baldwin 62164220a7eSMarcel Moolenaar { 0x13a8, 0x0158, 0xffff, 0, 62222e0612fSJohn Baldwin "Exar XR17C158", 62364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 62464220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, -1, 62522e0612fSJohn Baldwin .config_function = puc_config_exar 626de0d2cadSJohn Hay }, 627de0d2cadSJohn Hay 62879aac43eSEd Maste { 0x13a8, 0x0258, 0xffff, 0, 62979aac43eSEd Maste "Exar XR17V258IV", 63079aac43eSEd Maste DEFAULT_RCLK * 8, 63179aac43eSEd Maste PUC_PORT_8S, 0x10, 0, -1, 632*3aff0961SRyan Stone .config_function = puc_config_exar 63379aac43eSEd Maste }, 63479aac43eSEd Maste 6358de2c77bSRyan Stone /* The XR17V358 uses the 125MHz PCIe clock as its reference clock. */ 6368de2c77bSRyan Stone { 0x13a8, 0x0358, 0xffff, 0, 6378de2c77bSRyan Stone "Exar XR17V358", 6388de2c77bSRyan Stone 125000000, 6398de2c77bSRyan Stone PUC_PORT_8S, 0x10, 0, -1, 6408de2c77bSRyan Stone .config_function = puc_config_exar_pcie 6418de2c77bSRyan Stone }, 6428de2c77bSRyan Stone 6435bcc8e2fSEitan Adler { 0x13fe, 0x1600, 0x1602, 0x0002, 6445bcc8e2fSEitan Adler "Advantech PCI-1602", 6455bcc8e2fSEitan Adler DEFAULT_RCLK * 8, 6465bcc8e2fSEitan Adler PUC_PORT_2S, 0x10, 0, 8, 6475bcc8e2fSEitan Adler }, 6485bcc8e2fSEitan Adler 64964220a7eSMarcel Moolenaar { 0x1407, 0x0100, 0xffff, 0, 65064220a7eSMarcel Moolenaar "Lava Computers Dual Serial", 65164220a7eSMarcel Moolenaar DEFAULT_RCLK, 65264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6539c564b6cSJohn Hay }, 6549c564b6cSJohn Hay 65564220a7eSMarcel Moolenaar { 0x1407, 0x0101, 0xffff, 0, 65664220a7eSMarcel Moolenaar "Lava Computers Quatro A", 65764220a7eSMarcel Moolenaar DEFAULT_RCLK, 65864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6599c564b6cSJohn Hay }, 6609c564b6cSJohn Hay 66164220a7eSMarcel Moolenaar { 0x1407, 0x0102, 0xffff, 0, 66264220a7eSMarcel Moolenaar "Lava Computers Quatro B", 66364220a7eSMarcel Moolenaar DEFAULT_RCLK, 66464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6659c564b6cSJohn Hay }, 6669c564b6cSJohn Hay 66764220a7eSMarcel Moolenaar { 0x1407, 0x0120, 0xffff, 0, 66864220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI A", 66964220a7eSMarcel Moolenaar DEFAULT_RCLK, 67064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6719c564b6cSJohn Hay }, 67264220a7eSMarcel Moolenaar 67364220a7eSMarcel Moolenaar { 0x1407, 0x0121, 0xffff, 0, 67464220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI B", 67564220a7eSMarcel Moolenaar DEFAULT_RCLK, 67664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 67764220a7eSMarcel Moolenaar }, 67864220a7eSMarcel Moolenaar 67964220a7eSMarcel Moolenaar { 0x1407, 0x0180, 0xffff, 0, 68064220a7eSMarcel Moolenaar "Lava Computers Octo A", 68164220a7eSMarcel Moolenaar DEFAULT_RCLK, 68264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 68364220a7eSMarcel Moolenaar }, 68464220a7eSMarcel Moolenaar 68564220a7eSMarcel Moolenaar { 0x1407, 0x0181, 0xffff, 0, 68664220a7eSMarcel Moolenaar "Lava Computers Octo B", 68764220a7eSMarcel Moolenaar DEFAULT_RCLK, 68864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 68964220a7eSMarcel Moolenaar }, 69064220a7eSMarcel Moolenaar 69113ae6dceSKevin Lo { 0x1409, 0x7268, 0xffff, 0, 69213ae6dceSKevin Lo "Sunix SUN1888", 69313ae6dceSKevin Lo 0, 69413ae6dceSKevin Lo PUC_PORT_2P, 0x10, 0, 8, 69513ae6dceSKevin Lo }, 69613ae6dceSKevin Lo 69764220a7eSMarcel Moolenaar { 0x1409, 0x7168, 0xffff, 0, 69864220a7eSMarcel Moolenaar NULL, 69964220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 70064220a7eSMarcel Moolenaar PUC_PORT_NONSTANDARD, 0x10, -1, -1, 70164220a7eSMarcel Moolenaar .config_function = puc_config_timedia 7029c564b6cSJohn Hay }, 7039c564b6cSJohn Hay 7049c564b6cSJohn Hay /* 7059c564b6cSJohn Hay * Boards with an Oxford Semiconductor chip. 7069c564b6cSJohn Hay * 7079c564b6cSJohn Hay * Oxford Semiconductor provides documentation for their chip at: 7086e9f075aSJohn Baldwin * <URL:http://www.plxtech.com/products/uart/> 7099c564b6cSJohn Hay * 7109c564b6cSJohn Hay * As sold by Kouwell <URL:http://www.kouwell.com/>. 7119c564b6cSJohn Hay * I/O Flex PCI I/O Card Model-223 with 4 serial and 1 parallel ports. 7129c564b6cSJohn Hay */ 713acdfc36aSEitan Adler { 714acdfc36aSEitan Adler 0x1415, 0x9501, 0x10fc ,0xc070, 715acdfc36aSEitan Adler "I-O DATA RSA-PCI2/R", 716acdfc36aSEitan Adler DEFAULT_RCLK * 8, 717acdfc36aSEitan Adler PUC_PORT_2S, 0x10, 0, 8, 718acdfc36aSEitan Adler }, 7199c564b6cSJohn Hay 7200db885bbSDag-Erling Smørgrav { 0x1415, 0x9501, 0x131f, 0x2050, 7210db885bbSDag-Erling Smørgrav "SIIG Cyber 4 PCI 16550", 7220db885bbSDag-Erling Smørgrav DEFAULT_RCLK * 10, 7230db885bbSDag-Erling Smørgrav PUC_PORT_4S, 0x10, 0, 8, 7240db885bbSDag-Erling Smørgrav }, 7250db885bbSDag-Erling Smørgrav 7261d860a7eSMarcel Moolenaar { 0x1415, 0x9501, 0x131f, 0x2051, 7271d860a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)", 7281d860a7eSMarcel Moolenaar DEFAULT_RCLK * 10, 7291d860a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 7301d860a7eSMarcel Moolenaar }, 7311d860a7eSMarcel Moolenaar 73230ced0d8SJohn Baldwin { 0x1415, 0x9501, 0x131f, 0x2052, 73330ced0d8SJohn Baldwin "SIIG Quartet Serial 850", 73430ced0d8SJohn Baldwin DEFAULT_RCLK * 10, 73530ced0d8SJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 73630ced0d8SJohn Baldwin }, 73730ced0d8SJohn Baldwin 738282211eaSJohn Baldwin { 0x1415, 0x9501, 0x14db, 0x2150, 739282211eaSJohn Baldwin "Kuroutoshikou SERIAL4P-LPPCI2", 740282211eaSJohn Baldwin DEFAULT_RCLK * 10, 741282211eaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 742282211eaSJohn Baldwin }, 743282211eaSJohn Baldwin 74464220a7eSMarcel Moolenaar { 0x1415, 0x9501, 0xffff, 0, 745c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs", 746c44bdcb0SDag-Erling Smørgrav DEFAULT_RCLK, 74764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 74883431653SWarner Losh }, 74983431653SWarner Losh 75010414b71SJohn Baldwin { 0x1415, 0x950a, 0x131f, 0x2030, 75110414b71SJohn Baldwin "SIIG Cyber 2S PCIe", 75210414b71SJohn Baldwin DEFAULT_RCLK * 10, 75310414b71SJohn Baldwin PUC_PORT_2S, 0x10, 0, 8, 75410414b71SJohn Baldwin }, 75510414b71SJohn Baldwin 7560dfbbaceSEitan Adler { 0x1415, 0x950a, 0x131f, 0x2032, 7570dfbbaceSEitan Adler "SIIG Cyber Serial Dual PCI 16C850", 7580dfbbaceSEitan Adler DEFAULT_RCLK * 10, 7590dfbbaceSEitan Adler PUC_PORT_4S, 0x10, 0, 8, 7600dfbbaceSEitan Adler }, 7610dfbbaceSEitan Adler 76264220a7eSMarcel Moolenaar { 0x1415, 0x950a, 0xffff, 0, 763c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs", 764c44bdcb0SDag-Erling Smørgrav DEFAULT_RCLK, 76564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 7669c564b6cSJohn Hay }, 7679c564b6cSJohn Hay 76864220a7eSMarcel Moolenaar { 0x1415, 0x9511, 0xffff, 0, 76964220a7eSMarcel Moolenaar "Oxford Semiconductor OX9160/OX16PCI954 UARTs (function 1)", 77064220a7eSMarcel Moolenaar DEFAULT_RCLK, 77164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 77243e42f36SDoug Ambrisko }, 77343e42f36SDoug Ambrisko 77464220a7eSMarcel Moolenaar { 0x1415, 0x9521, 0xffff, 0, 77564220a7eSMarcel Moolenaar "Oxford Semiconductor OX16PCI952 UARTs", 77664220a7eSMarcel Moolenaar DEFAULT_RCLK, 77764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 7786cb38a02SDoug Ambrisko }, 7796cb38a02SDoug Ambrisko 78011a12794SRoman Kurakin { 0x1415, 0x9538, 0xffff, 0, 78111a12794SRoman Kurakin "Oxford Semiconductor OX16PCI958 UARTs", 78200ff5de5SMarius Strobl DEFAULT_RCLK, 78311a12794SRoman Kurakin PUC_PORT_8S, 0x18, 0, 8, 78411a12794SRoman Kurakin }, 78511a12794SRoman Kurakin 786f09d9fbaSJohn Baldwin /* 787f09d9fbaSJohn Baldwin * Perle boards use Oxford Semiconductor chips, but they store the 788f09d9fbaSJohn Baldwin * Oxford Semiconductor device ID as a subvendor device ID and use 789f09d9fbaSJohn Baldwin * their own device IDs. 790f09d9fbaSJohn Baldwin */ 791f09d9fbaSJohn Baldwin 792f09d9fbaSJohn Baldwin { 0x155f, 0x0331, 0xffff, 0, 793edfaa737SEitan Adler "Perle Ultraport4 Express", 794edfaa737SEitan Adler DEFAULT_RCLK * 8, 795edfaa737SEitan Adler PUC_PORT_4S, 0x10, 0, 8, 796edfaa737SEitan Adler }, 797edfaa737SEitan Adler 798edfaa737SEitan Adler { 0x155f, 0xB012, 0xffff, 0, 799edfaa737SEitan Adler "Perle Speed2 LE", 800edfaa737SEitan Adler DEFAULT_RCLK * 8, 801edfaa737SEitan Adler PUC_PORT_2S, 0x10, 0, 8, 802edfaa737SEitan Adler }, 803edfaa737SEitan Adler 804edfaa737SEitan Adler { 0x155f, 0xB022, 0xffff, 0, 805edfaa737SEitan Adler "Perle Speed2 LE", 806edfaa737SEitan Adler DEFAULT_RCLK * 8, 807edfaa737SEitan Adler PUC_PORT_2S, 0x10, 0, 8, 808edfaa737SEitan Adler }, 809edfaa737SEitan Adler 810edfaa737SEitan Adler { 0x155f, 0xB004, 0xffff, 0, 811f09d9fbaSJohn Baldwin "Perle Speed4 LE", 812f09d9fbaSJohn Baldwin DEFAULT_RCLK * 8, 813f09d9fbaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 814f09d9fbaSJohn Baldwin }, 815f09d9fbaSJohn Baldwin 816edfaa737SEitan Adler { 0x155f, 0xB008, 0xffff, 0, 817edfaa737SEitan Adler "Perle Speed8 LE", 818edfaa737SEitan Adler DEFAULT_RCLK * 8, 819edfaa737SEitan Adler PUC_PORT_8S, 0x10, 0, 8, 820edfaa737SEitan Adler }, 821edfaa737SEitan Adler 822edfaa737SEitan Adler 8236e9f075aSJohn Baldwin /* 8246e9f075aSJohn Baldwin * Oxford Semiconductor PCI Express Expresso family 8256e9f075aSJohn Baldwin * 8266e9f075aSJohn Baldwin * Found in many 'native' PCI Express serial boards such as: 8276e9f075aSJohn Baldwin * 8286e9f075aSJohn Baldwin * eMegatech MP954ER4 (4 port) and MP958ER8 (8 port) 8296e9f075aSJohn Baldwin * <URL:http://www.emegatech.com.tw/pdrs232pcie.html> 8306e9f075aSJohn Baldwin * 8316e9f075aSJohn Baldwin * Lindy 51189 (4 port) 8326e9f075aSJohn Baldwin * <URL:http://www.lindy.com> <URL:http://tinyurl.com/lindy-51189> 8336e9f075aSJohn Baldwin * 8346e9f075aSJohn Baldwin * StarTech.com PEX4S952 (4 port) and PEX8S952 (8 port) 8356e9f075aSJohn Baldwin * <URL:http://www.startech.com> 8366e9f075aSJohn Baldwin */ 8376e9f075aSJohn Baldwin 838a6a64612SAndrey V. Elsukov { 0x1415, 0xc138, 0xffff, 0, 839a6a64612SAndrey V. Elsukov "Oxford Semiconductor OXPCIe952 UARTs", 840a6a64612SAndrey V. Elsukov DEFAULT_RCLK * 0x22, 841a6a64612SAndrey V. Elsukov PUC_PORT_NONSTANDARD, 0x10, 0, -1, 842a6a64612SAndrey V. Elsukov .config_function = puc_config_oxford_pcie 843a6a64612SAndrey V. Elsukov }, 844a6a64612SAndrey V. Elsukov 8456e9f075aSJohn Baldwin { 0x1415, 0xc158, 0xffff, 0, 8466e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs", 8476e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8486e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8496e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8506e9f075aSJohn Baldwin }, 8516e9f075aSJohn Baldwin 8526e9f075aSJohn Baldwin { 0x1415, 0xc15d, 0xffff, 0, 8536e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs (function 1)", 8546e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8556e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8566e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8576e9f075aSJohn Baldwin }, 8586e9f075aSJohn Baldwin 8596e9f075aSJohn Baldwin { 0x1415, 0xc208, 0xffff, 0, 8606e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs", 8616e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8626e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8636e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8646e9f075aSJohn Baldwin }, 8656e9f075aSJohn Baldwin 8666e9f075aSJohn Baldwin { 0x1415, 0xc20d, 0xffff, 0, 8676e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs (function 1)", 8686e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8696e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8706e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8716e9f075aSJohn Baldwin }, 8726e9f075aSJohn Baldwin 8736e9f075aSJohn Baldwin { 0x1415, 0xc308, 0xffff, 0, 8746e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs", 8756e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8766e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8776e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8786e9f075aSJohn Baldwin }, 8796e9f075aSJohn Baldwin 8806e9f075aSJohn Baldwin { 0x1415, 0xc30d, 0xffff, 0, 8816e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs (function 1)", 8826e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8836e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8846e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8856e9f075aSJohn Baldwin }, 8866e9f075aSJohn Baldwin 88746ce58c7SAndrew Thompson { 0x14d2, 0x8010, 0xffff, 0, 88846ce58c7SAndrew Thompson "VScom PCI-100L", 88946ce58c7SAndrew Thompson DEFAULT_RCLK * 8, 89046ce58c7SAndrew Thompson PUC_PORT_1S, 0x14, 0, 0, 89146ce58c7SAndrew Thompson }, 89246ce58c7SAndrew Thompson 89364220a7eSMarcel Moolenaar { 0x14d2, 0x8020, 0xffff, 0, 89464220a7eSMarcel Moolenaar "VScom PCI-200L", 89564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 89664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 4, 0, 897a58deb46SColin Percival }, 898a58deb46SColin Percival 89964220a7eSMarcel Moolenaar { 0x14d2, 0x8028, 0xffff, 0, 90046dd877dSPoul-Henning Kamp "VScom 200Li", 90164220a7eSMarcel Moolenaar DEFAULT_RCLK, 90264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x20, 0, 8, 90346dd877dSPoul-Henning Kamp }, 9043e19d3c0SBruce M Simpson 90564220a7eSMarcel Moolenaar /* 90664220a7eSMarcel Moolenaar * VScom (Titan?) PCI-800L. More modern variant of the 90764220a7eSMarcel Moolenaar * PCI-800. Uses 6 discrete 16550 UARTs, plus another 90864220a7eSMarcel Moolenaar * two of them obviously implemented as macro cells in 90964220a7eSMarcel Moolenaar * the ASIC. This causes the weird port access pattern 91064220a7eSMarcel Moolenaar * below, where two of the IO port ranges each access 91164220a7eSMarcel Moolenaar * one of the ASIC UARTs, and a block of IO addresses 91264220a7eSMarcel Moolenaar * access the external UARTs. 91364220a7eSMarcel Moolenaar */ 91464220a7eSMarcel Moolenaar { 0x14d2, 0x8080, 0xffff, 0, 91564220a7eSMarcel Moolenaar "Titan VScom PCI-800L", 91664220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 91764220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1, 91864220a7eSMarcel Moolenaar .config_function = puc_config_titan 91964220a7eSMarcel Moolenaar }, 92064220a7eSMarcel Moolenaar 92164220a7eSMarcel Moolenaar /* 92264220a7eSMarcel Moolenaar * VScom PCI-800H. Uses 8 16950 UART, behind a PCI chips that offers 92364220a7eSMarcel Moolenaar * 4 com port on PCI device 0 and 4 on PCI device 1. PCI device 0 has 92464220a7eSMarcel Moolenaar * device ID 3 and PCI device 1 device ID 4. 92564220a7eSMarcel Moolenaar */ 92664220a7eSMarcel Moolenaar { 0x14d2, 0xa003, 0xffff, 0, 92764220a7eSMarcel Moolenaar "Titan PCI-800H", 92864220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 92964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 93064220a7eSMarcel Moolenaar }, 93100ff5de5SMarius Strobl 93264220a7eSMarcel Moolenaar { 0x14d2, 0xa004, 0xffff, 0, 93364220a7eSMarcel Moolenaar "Titan PCI-800H", 93464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 93564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 93664220a7eSMarcel Moolenaar }, 93764220a7eSMarcel Moolenaar 93864220a7eSMarcel Moolenaar { 0x14d2, 0xa005, 0xffff, 0, 93964220a7eSMarcel Moolenaar "Titan PCI-200H", 94064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 94164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 94264220a7eSMarcel Moolenaar }, 94364220a7eSMarcel Moolenaar 94464220a7eSMarcel Moolenaar { 0x14d2, 0xe020, 0xffff, 0, 94564220a7eSMarcel Moolenaar "Titan VScom PCI-200HV2", 94664220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 94764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 94864220a7eSMarcel Moolenaar }, 94964220a7eSMarcel Moolenaar 95064589ec8SEitan Adler { 0x14d2, 0xa007, 0xffff, 0, 95164589ec8SEitan Adler "Titan VScom PCIex-800H", 95264589ec8SEitan Adler DEFAULT_RCLK * 8, 95364589ec8SEitan Adler PUC_PORT_4S, 0x10, 0, 8, 95464589ec8SEitan Adler }, 95564589ec8SEitan Adler 95664589ec8SEitan Adler { 0x14d2, 0xa008, 0xffff, 0, 95764589ec8SEitan Adler "Titan VScom PCIex-800H", 95864589ec8SEitan Adler DEFAULT_RCLK * 8, 95964589ec8SEitan Adler PUC_PORT_4S, 0x10, 0, 8, 96064589ec8SEitan Adler }, 96164589ec8SEitan Adler 96264220a7eSMarcel Moolenaar { 0x14db, 0x2130, 0xffff, 0, 96364220a7eSMarcel Moolenaar "Avlab Technology, PCI IO 2S", 96464220a7eSMarcel Moolenaar DEFAULT_RCLK, 96564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 96664220a7eSMarcel Moolenaar }, 96764220a7eSMarcel Moolenaar 96864220a7eSMarcel Moolenaar { 0x14db, 0x2150, 0xffff, 0, 96964220a7eSMarcel Moolenaar "Avlab Low Profile PCI 4 Serial", 97064220a7eSMarcel Moolenaar DEFAULT_RCLK, 97164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 97264220a7eSMarcel Moolenaar }, 97364220a7eSMarcel Moolenaar 9740dc908e7SAndrew Thompson { 0x14db, 0x2152, 0xffff, 0, 9750dc908e7SAndrew Thompson "Avlab Low Profile PCI 4 Serial", 9760dc908e7SAndrew Thompson DEFAULT_RCLK, 9770dc908e7SAndrew Thompson PUC_PORT_4S, 0x10, 4, 0, 9780dc908e7SAndrew Thompson }, 9790dc908e7SAndrew Thompson 98064220a7eSMarcel Moolenaar { 0x1592, 0x0781, 0xffff, 0, 98164220a7eSMarcel Moolenaar "Syba Tech Ltd. PCI-4S2P-550-ECP", 98264220a7eSMarcel Moolenaar DEFAULT_RCLK, 98364220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 0, -1, 98464220a7eSMarcel Moolenaar .config_function = puc_config_syba 98564220a7eSMarcel Moolenaar }, 98664220a7eSMarcel Moolenaar 9877501345eSJohn Hay { 0x1fd4, 0x1999, 0xffff, 0, 9887501345eSJohn Hay "Sunix SER5437A", 9897501345eSJohn Hay DEFAULT_RCLK * 8, 9907501345eSJohn Hay PUC_PORT_2S, 0x10, 0, 8, 9917501345eSJohn Hay }, 9927501345eSJohn Hay 993d9b73ea9SEitan Adler { 0x5372, 0x6873, 0xffff, 0, 994d9b73ea9SEitan Adler "Sun 1040 PCI Quad Serial", 995d9b73ea9SEitan Adler DEFAULT_RCLK, 996d9b73ea9SEitan Adler PUC_PORT_4S, 0x10, 4, 0, 997d9b73ea9SEitan Adler }, 998d9b73ea9SEitan Adler 99964220a7eSMarcel Moolenaar { 0x6666, 0x0001, 0xffff, 0, 100064220a7eSMarcel Moolenaar "Decision Computer Inc, PCCOM 4-port serial", 100164220a7eSMarcel Moolenaar DEFAULT_RCLK, 100264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x1c, 0, 8, 100364220a7eSMarcel Moolenaar }, 100464220a7eSMarcel Moolenaar 1005858030c4SAndrew Thompson { 0x6666, 0x0002, 0xffff, 0, 1006858030c4SAndrew Thompson "Decision Computer Inc, PCCOM 8-port serial", 1007858030c4SAndrew Thompson DEFAULT_RCLK, 1008858030c4SAndrew Thompson PUC_PORT_8S, 0x1c, 0, 8, 1009858030c4SAndrew Thompson }, 1010858030c4SAndrew Thompson 101164220a7eSMarcel Moolenaar { 0x6666, 0x0004, 0xffff, 0, 101264220a7eSMarcel Moolenaar "PCCOM dual port RS232/422/485", 101364220a7eSMarcel Moolenaar DEFAULT_RCLK, 101464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x1c, 0, 8, 101564220a7eSMarcel Moolenaar }, 101664220a7eSMarcel Moolenaar 101764220a7eSMarcel Moolenaar { 0x9710, 0x9815, 0xffff, 0, 101864220a7eSMarcel Moolenaar "NetMos NM9815 Dual 1284 Printer port", 101964220a7eSMarcel Moolenaar 0, 102064220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0, 102164220a7eSMarcel Moolenaar }, 102264220a7eSMarcel Moolenaar 1023843994aeSJohn Baldwin /* 1024843994aeSJohn Baldwin * This is more specific than the generic NM9835 entry that follows, and 1025843994aeSJohn Baldwin * is placed here to _prevent_ puc from claiming this single port card. 1026843994aeSJohn Baldwin * 1027843994aeSJohn Baldwin * uart(4) will claim this device. 1028843994aeSJohn Baldwin */ 1029843994aeSJohn Baldwin { 0x9710, 0x9835, 0x1000, 1, 1030843994aeSJohn Baldwin "NetMos NM9835 based 1-port serial", 1031843994aeSJohn Baldwin DEFAULT_RCLK, 1032843994aeSJohn Baldwin PUC_PORT_1S, 0x10, 4, 0, 1033843994aeSJohn Baldwin }, 1034843994aeSJohn Baldwin 1035045de714SNavdeep Parhar { 0x9710, 0x9835, 0x1000, 2, 1036045de714SNavdeep Parhar "NetMos NM9835 based 2-port serial", 1037045de714SNavdeep Parhar DEFAULT_RCLK, 1038045de714SNavdeep Parhar PUC_PORT_2S, 0x10, 4, 0, 1039045de714SNavdeep Parhar }, 1040045de714SNavdeep Parhar 104164220a7eSMarcel Moolenaar { 0x9710, 0x9835, 0xffff, 0, 104264220a7eSMarcel Moolenaar "NetMos NM9835 Dual UART and 1284 Printer port", 104364220a7eSMarcel Moolenaar DEFAULT_RCLK, 104464220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 104564220a7eSMarcel Moolenaar }, 104664220a7eSMarcel Moolenaar 104764220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0x1000, 0x0006, 104864220a7eSMarcel Moolenaar "NetMos NM9845 6 Port UART", 104964220a7eSMarcel Moolenaar DEFAULT_RCLK, 105064220a7eSMarcel Moolenaar PUC_PORT_6S, 0x10, 4, 0, 105164220a7eSMarcel Moolenaar }, 105264220a7eSMarcel Moolenaar 105364220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0xffff, 0, 105464220a7eSMarcel Moolenaar "NetMos NM9845 Quad UART and 1284 Printer port", 105564220a7eSMarcel Moolenaar DEFAULT_RCLK, 105664220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 4, 0, 10571d864e0dSMarcel Moolenaar }, 10581d864e0dSMarcel Moolenaar 10591d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3002, 10601d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART", 10611d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10621d864e0dSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 10631d864e0dSMarcel Moolenaar }, 10641d864e0dSMarcel Moolenaar 10651d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3003, 10661d864e0dSMarcel Moolenaar "NetMos NM9865 Triple UART", 10671d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10681d864e0dSMarcel Moolenaar PUC_PORT_3S, 0x10, 4, 0, 10691d864e0dSMarcel Moolenaar }, 10701d864e0dSMarcel Moolenaar 10711d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3004, 10721d864e0dSMarcel Moolenaar "NetMos NM9865 Quad UART", 10731d864e0dSMarcel Moolenaar DEFAULT_RCLK, 107400ff5de5SMarius Strobl PUC_PORT_4S, 0x10, 4, 0, 10751d864e0dSMarcel Moolenaar }, 10761d864e0dSMarcel Moolenaar 10771d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3011, 10781d864e0dSMarcel Moolenaar "NetMos NM9865 Single UART and 1284 Printer port", 10791d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10801d864e0dSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 10811d864e0dSMarcel Moolenaar }, 10821d864e0dSMarcel Moolenaar 10831d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3012, 10841d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART and 1284 Printer port", 10851d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10861d864e0dSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 10871d864e0dSMarcel Moolenaar }, 10881d864e0dSMarcel Moolenaar 10891d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3020, 10901d864e0dSMarcel Moolenaar "NetMos NM9865 Dual 1284 Printer port", 10911d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10921d864e0dSMarcel Moolenaar PUC_PORT_2P, 0x10, 4, 0, 109364220a7eSMarcel Moolenaar }, 109464220a7eSMarcel Moolenaar 109564220a7eSMarcel Moolenaar { 0xb00c, 0x021c, 0xffff, 0, 109664220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Lite", 109764220a7eSMarcel Moolenaar DEFAULT_RCLK, 109864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 109964220a7eSMarcel Moolenaar .config_function = puc_config_icbook 110064220a7eSMarcel Moolenaar }, 110164220a7eSMarcel Moolenaar 110264220a7eSMarcel Moolenaar { 0xb00c, 0x031c, 0xffff, 0, 110364220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Pro", 110464220a7eSMarcel Moolenaar DEFAULT_RCLK, 110564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 110664220a7eSMarcel Moolenaar .config_function = puc_config_icbook 110764220a7eSMarcel Moolenaar }, 110864220a7eSMarcel Moolenaar 110964220a7eSMarcel Moolenaar { 0xb00c, 0x041c, 0xffff, 0, 111064220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Lite", 111164220a7eSMarcel Moolenaar DEFAULT_RCLK, 111264220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 111364220a7eSMarcel Moolenaar .config_function = puc_config_icbook 111464220a7eSMarcel Moolenaar }, 111564220a7eSMarcel Moolenaar 111664220a7eSMarcel Moolenaar { 0xb00c, 0x051c, 0xffff, 0, 111764220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Pro", 111864220a7eSMarcel Moolenaar DEFAULT_RCLK, 111964220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 112064220a7eSMarcel Moolenaar .config_function = puc_config_icbook 112164220a7eSMarcel Moolenaar }, 112264220a7eSMarcel Moolenaar 112364220a7eSMarcel Moolenaar { 0xb00c, 0x081c, 0xffff, 0, 112464220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Pro", 112564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 112664220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8, 112764220a7eSMarcel Moolenaar .config_function = puc_config_icbook 112864220a7eSMarcel Moolenaar }, 112964220a7eSMarcel Moolenaar 113064220a7eSMarcel Moolenaar { 0xb00c, 0x091c, 0xffff, 0, 113164220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Lite", 113264220a7eSMarcel Moolenaar DEFAULT_RCLK, 113364220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8, 113464220a7eSMarcel Moolenaar .config_function = puc_config_icbook 113564220a7eSMarcel Moolenaar }, 113664220a7eSMarcel Moolenaar 113764220a7eSMarcel Moolenaar { 0xb00c, 0x0a1c, 0xffff, 0, 113864220a7eSMarcel Moolenaar "IC Book Labs Gunboat x2 Low Profile", 113964220a7eSMarcel Moolenaar DEFAULT_RCLK, 114064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 114164220a7eSMarcel Moolenaar }, 114264220a7eSMarcel Moolenaar 114364220a7eSMarcel Moolenaar { 0xb00c, 0x0b1c, 0xffff, 0, 114464220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Low Profile", 114564220a7eSMarcel Moolenaar DEFAULT_RCLK, 114664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 114764220a7eSMarcel Moolenaar .config_function = puc_config_icbook 114864220a7eSMarcel Moolenaar }, 114964220a7eSMarcel Moolenaar 115064220a7eSMarcel Moolenaar { 0xffff, 0, 0xffff, 0, NULL, 0 } 11519c564b6cSJohn Hay }; 115264220a7eSMarcel Moolenaar 115364220a7eSMarcel Moolenaar static int 115464220a7eSMarcel Moolenaar puc_config_amc(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 115564220a7eSMarcel Moolenaar intptr_t *res) 115664220a7eSMarcel Moolenaar { 115764220a7eSMarcel Moolenaar switch (cmd) { 115864220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 115964220a7eSMarcel Moolenaar *res = 8 * (port & 1); 116064220a7eSMarcel Moolenaar return (0); 116164220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 116264220a7eSMarcel Moolenaar *res = 0x14 + (port >> 1) * 4; 116364220a7eSMarcel Moolenaar return (0); 116464220a7eSMarcel Moolenaar default: 116564220a7eSMarcel Moolenaar break; 116664220a7eSMarcel Moolenaar } 116764220a7eSMarcel Moolenaar return (ENXIO); 116864220a7eSMarcel Moolenaar } 116964220a7eSMarcel Moolenaar 117064220a7eSMarcel Moolenaar static int 117164220a7eSMarcel Moolenaar puc_config_diva(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 117264220a7eSMarcel Moolenaar intptr_t *res) 117364220a7eSMarcel Moolenaar { 117464220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 117564220a7eSMarcel Moolenaar 117664220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_OFS) { 117764220a7eSMarcel Moolenaar if (cfg->subdevice == 0x1282) /* Everest SP */ 117864220a7eSMarcel Moolenaar port <<= 1; 117964220a7eSMarcel Moolenaar else if (cfg->subdevice == 0x104b) /* Maestro SP2 */ 118064220a7eSMarcel Moolenaar port = (port == 3) ? 4 : port; 118164220a7eSMarcel Moolenaar *res = port * 8 + ((port > 2) ? 0x18 : 0); 118264220a7eSMarcel Moolenaar return (0); 118364220a7eSMarcel Moolenaar } 118464220a7eSMarcel Moolenaar return (ENXIO); 118564220a7eSMarcel Moolenaar } 118664220a7eSMarcel Moolenaar 118764220a7eSMarcel Moolenaar static int 118822e0612fSJohn Baldwin puc_config_exar(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 118922e0612fSJohn Baldwin intptr_t *res) 119022e0612fSJohn Baldwin { 119122e0612fSJohn Baldwin if (cmd == PUC_CFG_GET_OFS) { 119222e0612fSJohn Baldwin *res = port * 0x200; 119322e0612fSJohn Baldwin return (0); 119422e0612fSJohn Baldwin } 119522e0612fSJohn Baldwin return (ENXIO); 119622e0612fSJohn Baldwin } 119722e0612fSJohn Baldwin 119822e0612fSJohn Baldwin static int 11998de2c77bSRyan Stone puc_config_exar_pcie(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 12008de2c77bSRyan Stone intptr_t *res) 12018de2c77bSRyan Stone { 12028de2c77bSRyan Stone if (cmd == PUC_CFG_GET_OFS) { 12038de2c77bSRyan Stone *res = port * 0x400; 12048de2c77bSRyan Stone return (0); 12058de2c77bSRyan Stone } 12068de2c77bSRyan Stone return (ENXIO); 12078de2c77bSRyan Stone } 12088de2c77bSRyan Stone 12098de2c77bSRyan Stone static int 121064220a7eSMarcel Moolenaar puc_config_icbook(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 121164220a7eSMarcel Moolenaar intptr_t *res) 121264220a7eSMarcel Moolenaar { 121364220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_ILR) { 121464220a7eSMarcel Moolenaar *res = PUC_ILR_DIGI; 121564220a7eSMarcel Moolenaar return (0); 121664220a7eSMarcel Moolenaar } 121764220a7eSMarcel Moolenaar return (ENXIO); 121864220a7eSMarcel Moolenaar } 121964220a7eSMarcel Moolenaar 122064220a7eSMarcel Moolenaar static int 12212c89ac5eSEitan Adler puc_config_moxa(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 12222c89ac5eSEitan Adler intptr_t *res) 12232c89ac5eSEitan Adler { 1224f83255a5SMax Khon if (cmd == PUC_CFG_GET_OFS) { 122551cb024fSMax Khon const struct puc_cfg *cfg = sc->sc_cfg; 122651cb024fSMax Khon 122751cb024fSMax Khon if (port == 3 && (cfg->device == 0x1045 || cfg->device == 0x1144)) 122851cb024fSMax Khon port = 7; 122951cb024fSMax Khon *res = port * 0x200; 123051cb024fSMax Khon 12312c89ac5eSEitan Adler return 0; 12322c89ac5eSEitan Adler } 12332c89ac5eSEitan Adler return (ENXIO); 12342c89ac5eSEitan Adler } 12352c89ac5eSEitan Adler 12362c89ac5eSEitan Adler static int 123764220a7eSMarcel Moolenaar puc_config_quatech(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 123864220a7eSMarcel Moolenaar intptr_t *res) 123964220a7eSMarcel Moolenaar { 124064220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 124164220a7eSMarcel Moolenaar struct puc_bar *bar; 124264220a7eSMarcel Moolenaar uint8_t v0, v1; 124364220a7eSMarcel Moolenaar 124464220a7eSMarcel Moolenaar switch (cmd) { 124564220a7eSMarcel Moolenaar case PUC_CFG_SETUP: 124664220a7eSMarcel Moolenaar /* 124764220a7eSMarcel Moolenaar * Check if the scratchpad register is enabled or if the 124864220a7eSMarcel Moolenaar * interrupt status and options registers are active. 124964220a7eSMarcel Moolenaar */ 125064220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid); 125164220a7eSMarcel Moolenaar if (bar == NULL) 125264220a7eSMarcel Moolenaar return (ENXIO); 125364220a7eSMarcel Moolenaar /* Set DLAB in the LCR register of UART 0. */ 125464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 3, 0x80); 125564220a7eSMarcel Moolenaar /* Write 0 to the SPR register of UART 0. */ 125664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 7, 0); 125764220a7eSMarcel Moolenaar /* Read back the contents of the SPR register of UART 0. */ 125864220a7eSMarcel Moolenaar v0 = bus_read_1(bar->b_res, 7); 125964220a7eSMarcel Moolenaar /* Write a specific value to the SPR register of UART 0. */ 126064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 7, 0x80 + -cfg->clock); 126164220a7eSMarcel Moolenaar /* Read back the contents of the SPR register of UART 0. */ 126264220a7eSMarcel Moolenaar v1 = bus_read_1(bar->b_res, 7); 126364220a7eSMarcel Moolenaar /* Clear DLAB in the LCR register of UART 0. */ 126464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 3, 0); 126564220a7eSMarcel Moolenaar /* Save the two values read-back from the SPR register. */ 126664220a7eSMarcel Moolenaar sc->sc_cfg_data = (v0 << 8) | v1; 126764220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) { 126864220a7eSMarcel Moolenaar /* 126964220a7eSMarcel Moolenaar * The SPR register echoed the two values written 127064220a7eSMarcel Moolenaar * by us. This means that the SPAD jumper is set. 127164220a7eSMarcel Moolenaar */ 127264220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: extra features " 127364220a7eSMarcel Moolenaar "not usable -- SPAD compatibility enabled\n"); 127464220a7eSMarcel Moolenaar return (0); 127564220a7eSMarcel Moolenaar } 127664220a7eSMarcel Moolenaar if (v0 != 0) { 127764220a7eSMarcel Moolenaar /* 127864220a7eSMarcel Moolenaar * The first value doesn't match. This can only mean 127964220a7eSMarcel Moolenaar * that the SPAD jumper is not set and that a non- 128064220a7eSMarcel Moolenaar * standard fixed clock multiplier jumper is set. 128164220a7eSMarcel Moolenaar */ 128264220a7eSMarcel Moolenaar if (bootverbose) 128364220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "fixed clock rate " 128464220a7eSMarcel Moolenaar "multiplier of %d\n", 1 << v0); 128564220a7eSMarcel Moolenaar if (v0 < -cfg->clock) 128664220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: " 128764220a7eSMarcel Moolenaar "suboptimal fixed clock rate multiplier " 128864220a7eSMarcel Moolenaar "setting\n"); 128964220a7eSMarcel Moolenaar return (0); 129064220a7eSMarcel Moolenaar } 129164220a7eSMarcel Moolenaar /* 129264220a7eSMarcel Moolenaar * The first value matched, but the second didn't. We know 129364220a7eSMarcel Moolenaar * that the SPAD jumper is not set. We also know that the 129464220a7eSMarcel Moolenaar * clock rate multiplier is software controlled *and* that 129564220a7eSMarcel Moolenaar * we just programmed it to the maximum allowed. 129664220a7eSMarcel Moolenaar */ 129764220a7eSMarcel Moolenaar if (bootverbose) 129864220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "clock rate multiplier of " 129964220a7eSMarcel Moolenaar "%d selected\n", 1 << -cfg->clock); 130064220a7eSMarcel Moolenaar return (0); 130164220a7eSMarcel Moolenaar case PUC_CFG_GET_CLOCK: 130264220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff; 130364220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff; 130464220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) { 130564220a7eSMarcel Moolenaar /* 130664220a7eSMarcel Moolenaar * XXX With the SPAD jumper applied, there's no 130764220a7eSMarcel Moolenaar * easy way of knowing if there's also a clock 130864220a7eSMarcel Moolenaar * rate multiplier jumper installed. Let's hope 130964220a7eSMarcel Moolenaar * not... 131064220a7eSMarcel Moolenaar */ 131164220a7eSMarcel Moolenaar *res = DEFAULT_RCLK; 131264220a7eSMarcel Moolenaar } else if (v0 == 0) { 131364220a7eSMarcel Moolenaar /* 131464220a7eSMarcel Moolenaar * No clock rate multiplier jumper installed, 131564220a7eSMarcel Moolenaar * so we programmed the board with the maximum 131664220a7eSMarcel Moolenaar * multiplier allowed as given to us in the 131764220a7eSMarcel Moolenaar * clock field of the config record (negated). 131864220a7eSMarcel Moolenaar */ 131964220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << -cfg->clock; 132064220a7eSMarcel Moolenaar } else 132164220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << v0; 132264220a7eSMarcel Moolenaar return (0); 132364220a7eSMarcel Moolenaar case PUC_CFG_GET_ILR: 132464220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff; 132564220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff; 132664220a7eSMarcel Moolenaar *res = (v0 == 0 && v1 == 0x80 + -cfg->clock) 132764220a7eSMarcel Moolenaar ? PUC_ILR_NONE : PUC_ILR_QUATECH; 132864220a7eSMarcel Moolenaar return (0); 132964220a7eSMarcel Moolenaar default: 133064220a7eSMarcel Moolenaar break; 133164220a7eSMarcel Moolenaar } 133264220a7eSMarcel Moolenaar return (ENXIO); 133364220a7eSMarcel Moolenaar } 133464220a7eSMarcel Moolenaar 133564220a7eSMarcel Moolenaar static int 133664220a7eSMarcel Moolenaar puc_config_syba(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 133764220a7eSMarcel Moolenaar intptr_t *res) 133864220a7eSMarcel Moolenaar { 133964220a7eSMarcel Moolenaar static int base[] = { 0x251, 0x3f0, 0 }; 134064220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 134164220a7eSMarcel Moolenaar struct puc_bar *bar; 134264220a7eSMarcel Moolenaar int efir, idx, ofs; 134364220a7eSMarcel Moolenaar uint8_t v; 134464220a7eSMarcel Moolenaar 134564220a7eSMarcel Moolenaar switch (cmd) { 134664220a7eSMarcel Moolenaar case PUC_CFG_SETUP: 134764220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid); 134864220a7eSMarcel Moolenaar if (bar == NULL) 134964220a7eSMarcel Moolenaar return (ENXIO); 135064220a7eSMarcel Moolenaar 135164220a7eSMarcel Moolenaar /* configure both W83877TFs */ 135264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0x89); 135364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87); 135464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87); 135564220a7eSMarcel Moolenaar idx = 0; 135664220a7eSMarcel Moolenaar while (base[idx] != 0) { 135764220a7eSMarcel Moolenaar efir = base[idx]; 135864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x09); 135964220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1); 136064220a7eSMarcel Moolenaar if ((v & 0x0f) != 0x0c) 136164220a7eSMarcel Moolenaar return (ENXIO); 136264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 136364220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1); 136464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 136564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v | 0x04); 136664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 136764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v & ~0x04); 136864220a7eSMarcel Moolenaar ofs = base[idx] & 0x300; 136964220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x23); 137064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0x78) >> 2); 137164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x24); 137264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xf8) >> 2); 137364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x25); 137464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xe8) >> 2); 137564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x17); 137664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x03); 137764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x28); 137864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x43); 137964220a7eSMarcel Moolenaar idx++; 138064220a7eSMarcel Moolenaar } 138164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0xaa); 138264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0xaa); 138364220a7eSMarcel Moolenaar return (0); 138464220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 138564220a7eSMarcel Moolenaar switch (port) { 138664220a7eSMarcel Moolenaar case 0: 138764220a7eSMarcel Moolenaar *res = 0x2f8; 138864220a7eSMarcel Moolenaar return (0); 138964220a7eSMarcel Moolenaar case 1: 139064220a7eSMarcel Moolenaar *res = 0x2e8; 139164220a7eSMarcel Moolenaar return (0); 139264220a7eSMarcel Moolenaar case 2: 139364220a7eSMarcel Moolenaar *res = 0x3f8; 139464220a7eSMarcel Moolenaar return (0); 139564220a7eSMarcel Moolenaar case 3: 139664220a7eSMarcel Moolenaar *res = 0x3e8; 139764220a7eSMarcel Moolenaar return (0); 139864220a7eSMarcel Moolenaar case 4: 139964220a7eSMarcel Moolenaar *res = 0x278; 140064220a7eSMarcel Moolenaar return (0); 140164220a7eSMarcel Moolenaar } 140264220a7eSMarcel Moolenaar break; 140364220a7eSMarcel Moolenaar default: 140464220a7eSMarcel Moolenaar break; 140564220a7eSMarcel Moolenaar } 140664220a7eSMarcel Moolenaar return (ENXIO); 140764220a7eSMarcel Moolenaar } 140864220a7eSMarcel Moolenaar 140964220a7eSMarcel Moolenaar static int 141064220a7eSMarcel Moolenaar puc_config_siig(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 141164220a7eSMarcel Moolenaar intptr_t *res) 141264220a7eSMarcel Moolenaar { 141364220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 141464220a7eSMarcel Moolenaar 141564220a7eSMarcel Moolenaar switch (cmd) { 141664220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 141764220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) { 141864220a7eSMarcel Moolenaar *res = (port > 4) ? 8 * (port - 4) : 0; 141964220a7eSMarcel Moolenaar return (0); 142064220a7eSMarcel Moolenaar } 142164220a7eSMarcel Moolenaar break; 142264220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 142364220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) { 142464220a7eSMarcel Moolenaar *res = 0x10 + ((port > 4) ? 0x10 : 4 * port); 142564220a7eSMarcel Moolenaar return (0); 142664220a7eSMarcel Moolenaar } 142764220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_2S1P) { 142864220a7eSMarcel Moolenaar switch (port) { 142964220a7eSMarcel Moolenaar case 0: *res = 0x10; return (0); 143064220a7eSMarcel Moolenaar case 1: *res = 0x14; return (0); 143164220a7eSMarcel Moolenaar case 2: *res = 0x1c; return (0); 143264220a7eSMarcel Moolenaar } 143364220a7eSMarcel Moolenaar } 143464220a7eSMarcel Moolenaar break; 143564220a7eSMarcel Moolenaar default: 143664220a7eSMarcel Moolenaar break; 143764220a7eSMarcel Moolenaar } 143864220a7eSMarcel Moolenaar return (ENXIO); 143964220a7eSMarcel Moolenaar } 144064220a7eSMarcel Moolenaar 144164220a7eSMarcel Moolenaar static int 144264220a7eSMarcel Moolenaar puc_config_timedia(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 144364220a7eSMarcel Moolenaar intptr_t *res) 144464220a7eSMarcel Moolenaar { 144500ff5de5SMarius Strobl static const uint16_t dual[] = { 144664220a7eSMarcel Moolenaar 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085, 144764220a7eSMarcel Moolenaar 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079, 144864220a7eSMarcel Moolenaar 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079, 144964220a7eSMarcel Moolenaar 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079, 145064220a7eSMarcel Moolenaar 0xD079, 0 145164220a7eSMarcel Moolenaar }; 145200ff5de5SMarius Strobl static const uint16_t quad[] = { 145364220a7eSMarcel Moolenaar 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157, 145464220a7eSMarcel Moolenaar 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159, 145564220a7eSMarcel Moolenaar 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056, 145664220a7eSMarcel Moolenaar 0xB157, 0 145764220a7eSMarcel Moolenaar }; 145800ff5de5SMarius Strobl static const uint16_t octa[] = { 145964220a7eSMarcel Moolenaar 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166, 146064220a7eSMarcel Moolenaar 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0 146164220a7eSMarcel Moolenaar }; 146200ff5de5SMarius Strobl static const struct { 146364220a7eSMarcel Moolenaar int ports; 146400ff5de5SMarius Strobl const uint16_t *ids; 146564220a7eSMarcel Moolenaar } subdevs[] = { 146664220a7eSMarcel Moolenaar { 2, dual }, 146764220a7eSMarcel Moolenaar { 4, quad }, 146864220a7eSMarcel Moolenaar { 8, octa }, 146964220a7eSMarcel Moolenaar { 0, NULL } 147064220a7eSMarcel Moolenaar }; 147164220a7eSMarcel Moolenaar static char desc[64]; 147264220a7eSMarcel Moolenaar int dev, id; 147364220a7eSMarcel Moolenaar uint16_t subdev; 147464220a7eSMarcel Moolenaar 147564220a7eSMarcel Moolenaar switch (cmd) { 14769c418f51SJohn Baldwin case PUC_CFG_GET_CLOCK: 14779c418f51SJohn Baldwin if (port < 2) 14789c418f51SJohn Baldwin *res = DEFAULT_RCLK * 8; 14799c418f51SJohn Baldwin else 14809c418f51SJohn Baldwin *res = DEFAULT_RCLK; 14819c418f51SJohn Baldwin return (0); 148264220a7eSMarcel Moolenaar case PUC_CFG_GET_DESC: 148364220a7eSMarcel Moolenaar snprintf(desc, sizeof(desc), 148464220a7eSMarcel Moolenaar "Timedia technology %d Port Serial", (int)sc->sc_cfg_data); 148564220a7eSMarcel Moolenaar *res = (intptr_t)desc; 148664220a7eSMarcel Moolenaar return (0); 148764220a7eSMarcel Moolenaar case PUC_CFG_GET_NPORTS: 148864220a7eSMarcel Moolenaar subdev = pci_get_subdevice(sc->sc_dev); 148964220a7eSMarcel Moolenaar dev = 0; 149064220a7eSMarcel Moolenaar while (subdevs[dev].ports != 0) { 149164220a7eSMarcel Moolenaar id = 0; 149264220a7eSMarcel Moolenaar while (subdevs[dev].ids[id] != 0) { 149364220a7eSMarcel Moolenaar if (subdev == subdevs[dev].ids[id]) { 149464220a7eSMarcel Moolenaar sc->sc_cfg_data = subdevs[dev].ports; 149564220a7eSMarcel Moolenaar *res = sc->sc_cfg_data; 149664220a7eSMarcel Moolenaar return (0); 149764220a7eSMarcel Moolenaar } 149864220a7eSMarcel Moolenaar id++; 149964220a7eSMarcel Moolenaar } 150064220a7eSMarcel Moolenaar dev++; 150164220a7eSMarcel Moolenaar } 150264220a7eSMarcel Moolenaar return (ENXIO); 150364220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 150464220a7eSMarcel Moolenaar *res = (port == 1 || port == 3) ? 8 : 0; 150564220a7eSMarcel Moolenaar return (0); 150664220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 1507c1163871SMarcel Moolenaar *res = 0x10 + ((port > 3) ? port - 2 : port >> 1) * 4; 150864220a7eSMarcel Moolenaar return (0); 150964220a7eSMarcel Moolenaar case PUC_CFG_GET_TYPE: 151064220a7eSMarcel Moolenaar *res = PUC_TYPE_SERIAL; 151164220a7eSMarcel Moolenaar return (0); 151264220a7eSMarcel Moolenaar default: 151364220a7eSMarcel Moolenaar break; 151464220a7eSMarcel Moolenaar } 151564220a7eSMarcel Moolenaar return (ENXIO); 151664220a7eSMarcel Moolenaar } 151764220a7eSMarcel Moolenaar 151864220a7eSMarcel Moolenaar static int 15196e9f075aSJohn Baldwin puc_config_oxford_pcie(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 15206e9f075aSJohn Baldwin intptr_t *res) 15216e9f075aSJohn Baldwin { 15226e9f075aSJohn Baldwin const struct puc_cfg *cfg = sc->sc_cfg; 15236e9f075aSJohn Baldwin int idx; 15246e9f075aSJohn Baldwin struct puc_bar *bar; 15256e9f075aSJohn Baldwin uint8_t value; 15266e9f075aSJohn Baldwin 15276e9f075aSJohn Baldwin switch (cmd) { 15286e9f075aSJohn Baldwin case PUC_CFG_SETUP: 15296e9f075aSJohn Baldwin device_printf(sc->sc_dev, "%d UARTs detected\n", 15306e9f075aSJohn Baldwin sc->sc_nports); 15316e9f075aSJohn Baldwin 15326e9f075aSJohn Baldwin /* Set UARTs to enhanced mode */ 15336e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid); 15346e9f075aSJohn Baldwin if (bar == NULL) 15356e9f075aSJohn Baldwin return (ENXIO); 15366e9f075aSJohn Baldwin for (idx = 0; idx < sc->sc_nports; idx++) { 1537a59f78daSJohn Baldwin value = bus_read_1(bar->b_res, 0x1000 + (idx << 9) + 1538a59f78daSJohn Baldwin 0x92); 15396e9f075aSJohn Baldwin bus_write_1(bar->b_res, 0x1000 + (idx << 9) + 0x92, 15406e9f075aSJohn Baldwin value | 0x10); 15416e9f075aSJohn Baldwin } 15426e9f075aSJohn Baldwin return (0); 15436e9f075aSJohn Baldwin case PUC_CFG_GET_LEN: 15446e9f075aSJohn Baldwin *res = 0x200; 15456e9f075aSJohn Baldwin return (0); 15466e9f075aSJohn Baldwin case PUC_CFG_GET_NPORTS: 15476e9f075aSJohn Baldwin /* 15486e9f075aSJohn Baldwin * Check if we are being called from puc_bfe_attach() 15496e9f075aSJohn Baldwin * or puc_bfe_probe(). If puc_bfe_probe(), we cannot 15506e9f075aSJohn Baldwin * puc_get_bar(), so we return a value of 16. This has cosmetic 15516e9f075aSJohn Baldwin * side-effects at worst; in PUC_CFG_GET_DESC, 15526e9f075aSJohn Baldwin * (int)sc->sc_cfg_data will not contain the true number of 15536e9f075aSJohn Baldwin * ports in PUC_CFG_GET_DESC, but we are not implementing that 15546e9f075aSJohn Baldwin * call for this device family anyway. 15556e9f075aSJohn Baldwin * 15566e9f075aSJohn Baldwin * The check is for initialisation of sc->sc_bar[idx], which is 15576e9f075aSJohn Baldwin * only done in puc_bfe_attach(). 15586e9f075aSJohn Baldwin */ 15596e9f075aSJohn Baldwin idx = 0; 15606e9f075aSJohn Baldwin do { 15616e9f075aSJohn Baldwin if (sc->sc_bar[idx++].b_rid != -1) { 15626e9f075aSJohn Baldwin sc->sc_cfg_data = 16; 15636e9f075aSJohn Baldwin *res = sc->sc_cfg_data; 15646e9f075aSJohn Baldwin return (0); 15656e9f075aSJohn Baldwin } 15666e9f075aSJohn Baldwin } while (idx < PUC_PCI_BARS); 15676e9f075aSJohn Baldwin 15686e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid); 15696e9f075aSJohn Baldwin if (bar == NULL) 15706e9f075aSJohn Baldwin return (ENXIO); 15716e9f075aSJohn Baldwin 15726e9f075aSJohn Baldwin value = bus_read_1(bar->b_res, 0x04); 15736e9f075aSJohn Baldwin if (value == 0) 15746e9f075aSJohn Baldwin return (ENXIO); 15756e9f075aSJohn Baldwin 15766e9f075aSJohn Baldwin sc->sc_cfg_data = value; 15776e9f075aSJohn Baldwin *res = sc->sc_cfg_data; 15786e9f075aSJohn Baldwin return (0); 15796e9f075aSJohn Baldwin case PUC_CFG_GET_OFS: 15806e9f075aSJohn Baldwin *res = 0x1000 + (port << 9); 15816e9f075aSJohn Baldwin return (0); 15826e9f075aSJohn Baldwin case PUC_CFG_GET_TYPE: 15836e9f075aSJohn Baldwin *res = PUC_TYPE_SERIAL; 15846e9f075aSJohn Baldwin return (0); 15856e9f075aSJohn Baldwin default: 15866e9f075aSJohn Baldwin break; 15876e9f075aSJohn Baldwin } 15886e9f075aSJohn Baldwin return (ENXIO); 15896e9f075aSJohn Baldwin } 15906e9f075aSJohn Baldwin 15916e9f075aSJohn Baldwin static int 159264220a7eSMarcel Moolenaar puc_config_titan(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 159364220a7eSMarcel Moolenaar intptr_t *res) 159464220a7eSMarcel Moolenaar { 159564220a7eSMarcel Moolenaar switch (cmd) { 159664220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 159764220a7eSMarcel Moolenaar *res = (port < 3) ? 0 : (port - 2) << 3; 159864220a7eSMarcel Moolenaar return (0); 159964220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 160064220a7eSMarcel Moolenaar *res = 0x14 + ((port >= 2) ? 0x0c : port << 2); 160164220a7eSMarcel Moolenaar return (0); 160264220a7eSMarcel Moolenaar default: 160364220a7eSMarcel Moolenaar break; 160464220a7eSMarcel Moolenaar } 160564220a7eSMarcel Moolenaar return (ENXIO); 160664220a7eSMarcel Moolenaar } 1607