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; 5364220a7eSMarcel Moolenaar static puc_config_f puc_config_icbook; 542c89ac5eSEitan Adler static puc_config_f puc_config_moxa; 55a59f78daSJohn Baldwin static puc_config_f puc_config_oxford_pcie; 5664220a7eSMarcel Moolenaar static puc_config_f puc_config_quatech; 5764220a7eSMarcel Moolenaar static puc_config_f puc_config_syba; 5864220a7eSMarcel Moolenaar static puc_config_f puc_config_siig; 5964220a7eSMarcel Moolenaar static puc_config_f puc_config_timedia; 6064220a7eSMarcel Moolenaar static puc_config_f puc_config_titan; 61dc7d0deaSMarcel Moolenaar 6264220a7eSMarcel Moolenaar const struct puc_cfg puc_pci_devices[] = { 63a27ffb41SDavid E. O'Brien 6464220a7eSMarcel Moolenaar { 0x0009, 0x7168, 0xffff, 0, 6564220a7eSMarcel Moolenaar "Sunix SUN1889", 6664220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 6764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 680efcc68bSBruce Evans }, 690efcc68bSBruce Evans 7064220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1049, 7164220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Tosca Console", 7264220a7eSMarcel Moolenaar DEFAULT_RCLK, 7364220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 7464220a7eSMarcel Moolenaar .config_function = puc_config_diva 75dc7d0deaSMarcel Moolenaar }, 76dc7d0deaSMarcel Moolenaar 7764220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x104a, 7864220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Tosca Secondary", 7964220a7eSMarcel Moolenaar DEFAULT_RCLK, 8064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, -1, 8164220a7eSMarcel Moolenaar .config_function = puc_config_diva 82a27ffb41SDavid E. O'Brien }, 83a27ffb41SDavid E. O'Brien 8464220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x104b, 8564220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Maestro SP2", 8664220a7eSMarcel Moolenaar DEFAULT_RCLK, 8764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, -1, 8864220a7eSMarcel Moolenaar .config_function = puc_config_diva 89a27ffb41SDavid E. O'Brien }, 90a27ffb41SDavid E. O'Brien 9164220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1223, 9264220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Superdome Console", 9364220a7eSMarcel Moolenaar DEFAULT_RCLK, 9464220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 9564220a7eSMarcel Moolenaar .config_function = puc_config_diva 96a27ffb41SDavid E. O'Brien }, 97a27ffb41SDavid E. O'Brien 9864220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1226, 9964220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Keystone SP2", 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, 0x1282, 10664220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Everest 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 { 0x10b5, 0x1076, 0x10b5, 0x1076, 11364220a7eSMarcel Moolenaar "VScom PCI-800", 11464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 11564220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 1162569e387SDavid E. O'Brien }, 11764220a7eSMarcel Moolenaar 11864220a7eSMarcel Moolenaar { 0x10b5, 0x1077, 0x10b5, 0x1077, 11964220a7eSMarcel Moolenaar "VScom PCI-400", 12064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 12164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 1222569e387SDavid E. O'Brien }, 12364220a7eSMarcel Moolenaar 12464220a7eSMarcel Moolenaar { 0x10b5, 0x1103, 0x10b5, 0x1103, 12564220a7eSMarcel Moolenaar "VScom PCI-200", 12664220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 12764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 1282569e387SDavid E. O'Brien }, 129a27ffb41SDavid E. O'Brien 1309c564b6cSJohn Hay /* 13164220a7eSMarcel Moolenaar * Boca Research Turbo Serial 658 (8 serial port) card. 13264220a7eSMarcel Moolenaar * Appears to be the same as Chase Research PLC PCI-FAST8 13364220a7eSMarcel Moolenaar * and Perle PCI-FAST8 Multi-Port serial cards. 1349c564b6cSJohn Hay */ 13564220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0x12e0, 0x0021, 13664220a7eSMarcel Moolenaar "Boca Research Turbo Serial 658", 13764220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 13864220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 1399c564b6cSJohn Hay }, 1409c564b6cSJohn Hay 14164220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0x12e0, 0x0031, 14264220a7eSMarcel Moolenaar "Boca Research Turbo Serial 654", 14364220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 14464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 14564220a7eSMarcel Moolenaar }, 1469c564b6cSJohn Hay 1479c564b6cSJohn Hay /* 1489c564b6cSJohn Hay * Dolphin Peripherals 4035 (dual serial port) card. PLX 9050, with 1499c564b6cSJohn Hay * a seemingly-lame EEPROM setup that puts the Dolphin IDs 1509c564b6cSJohn Hay * into the subsystem fields, and claims that it's a 1519c564b6cSJohn Hay * network/misc (0x02/0x80) device. 1529c564b6cSJohn Hay */ 15364220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0xd84d, 0x6808, 15464220a7eSMarcel Moolenaar "Dolphin Peripherals 4035", 15564220a7eSMarcel Moolenaar DEFAULT_RCLK, 15664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 1579c564b6cSJohn Hay }, 1589c564b6cSJohn Hay 1599c564b6cSJohn Hay /* 16064220a7eSMarcel Moolenaar * Dolphin Peripherals 4014 (dual parallel port) card. PLX 9050, with 16164220a7eSMarcel Moolenaar * a seemingly-lame EEPROM setup that puts the Dolphin IDs 16264220a7eSMarcel Moolenaar * into the subsystem fields, and claims that it's a 16364220a7eSMarcel Moolenaar * network/misc (0x02/0x80) device. 1649c564b6cSJohn Hay */ 16564220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0xd84d, 0x6810, 16664220a7eSMarcel Moolenaar "Dolphin Peripherals 4014", 16764220a7eSMarcel Moolenaar 0, 16864220a7eSMarcel Moolenaar PUC_PORT_2P, 0x20, 4, 0, 1699c564b6cSJohn Hay }, 1709c564b6cSJohn Hay 17164220a7eSMarcel Moolenaar { 0x10e8, 0x818e, 0xffff, 0, 17264220a7eSMarcel Moolenaar "Applied Micro Circuits 8 Port UART", 17364220a7eSMarcel Moolenaar DEFAULT_RCLK, 17464220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1, 17564220a7eSMarcel Moolenaar .config_function = puc_config_amc 17664220a7eSMarcel Moolenaar }, 1779c564b6cSJohn Hay 17864220a7eSMarcel Moolenaar { 0x11fe, 0x8010, 0xffff, 0, 17964220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 RJ11 part A", 18064220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 18164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 18264220a7eSMarcel Moolenaar }, 18364220a7eSMarcel Moolenaar 18464220a7eSMarcel Moolenaar { 0x11fe, 0x8011, 0xffff, 0, 18564220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 RJ11 part B", 18664220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 18764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 18864220a7eSMarcel Moolenaar }, 18964220a7eSMarcel Moolenaar 19064220a7eSMarcel Moolenaar { 0x11fe, 0x8012, 0xffff, 0, 19164220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 Octa part A", 19264220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 19364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 19464220a7eSMarcel Moolenaar }, 19564220a7eSMarcel Moolenaar 19664220a7eSMarcel Moolenaar { 0x11fe, 0x8013, 0xffff, 0, 19764220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 Octa part B", 19864220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 19964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 20064220a7eSMarcel Moolenaar }, 20164220a7eSMarcel Moolenaar 20264220a7eSMarcel Moolenaar { 0x11fe, 0x8014, 0xffff, 0, 20364220a7eSMarcel Moolenaar "Comtrol RocketPort 550/4 RJ45", 20464220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 20564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 20664220a7eSMarcel Moolenaar }, 20764220a7eSMarcel Moolenaar 20864220a7eSMarcel Moolenaar { 0x11fe, 0x8015, 0xffff, 0, 20964220a7eSMarcel Moolenaar "Comtrol RocketPort 550/Quad", 21064220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 21164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 21264220a7eSMarcel Moolenaar }, 21364220a7eSMarcel Moolenaar 21464220a7eSMarcel Moolenaar { 0x11fe, 0x8016, 0xffff, 0, 21564220a7eSMarcel Moolenaar "Comtrol RocketPort 550/16 part A", 21664220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 21764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 21864220a7eSMarcel Moolenaar }, 21964220a7eSMarcel Moolenaar 22064220a7eSMarcel Moolenaar { 0x11fe, 0x8017, 0xffff, 0, 22164220a7eSMarcel Moolenaar "Comtrol RocketPort 550/16 part B", 22264220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 22364220a7eSMarcel Moolenaar PUC_PORT_12S, 0x10, 0, 8, 22464220a7eSMarcel Moolenaar }, 22564220a7eSMarcel Moolenaar 22664220a7eSMarcel Moolenaar { 0x11fe, 0x8018, 0xffff, 0, 22764220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 part A", 22864220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 22964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 23064220a7eSMarcel Moolenaar }, 23164220a7eSMarcel Moolenaar 23264220a7eSMarcel Moolenaar { 0x11fe, 0x8019, 0xffff, 0, 23364220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 part B", 23464220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 23564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 23664220a7eSMarcel Moolenaar }, 2379c564b6cSJohn Hay 2389c564b6cSJohn Hay /* 23963fbf504SRobert Watson * IBM SurePOS 300 Series (481033H) serial ports 24063fbf504SRobert Watson * Details can be found on the IBM RSS websites 24163fbf504SRobert Watson */ 24263fbf504SRobert Watson 24363fbf504SRobert Watson { 0x1014, 0x0297, 0xffff, 0, 24463fbf504SRobert Watson "IBM SurePOS 300 Series (481033H) serial ports", 24563fbf504SRobert Watson DEFAULT_RCLK, 24663fbf504SRobert Watson PUC_PORT_4S, 0x10, 4, 0 24763fbf504SRobert Watson }, 24863fbf504SRobert Watson 24963fbf504SRobert Watson /* 2509c564b6cSJohn Hay * SIIG Boards. 2519c564b6cSJohn Hay * 2529c564b6cSJohn Hay * SIIG provides documentation for their boards at: 25364220a7eSMarcel Moolenaar * <URL:http://www.siig.com/downloads.asp> 2549c564b6cSJohn Hay */ 2559c564b6cSJohn Hay 25664220a7eSMarcel Moolenaar { 0x131f, 0x1010, 0xffff, 0, 25764220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C550 (10x family)", 25864220a7eSMarcel Moolenaar DEFAULT_RCLK, 25964220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2609c564b6cSJohn Hay }, 2619c564b6cSJohn Hay 26264220a7eSMarcel Moolenaar { 0x131f, 0x1011, 0xffff, 0, 26364220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C650 (10x family)", 26464220a7eSMarcel Moolenaar DEFAULT_RCLK, 26564220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2669c564b6cSJohn Hay }, 2679c564b6cSJohn Hay 26864220a7eSMarcel Moolenaar { 0x131f, 0x1012, 0xffff, 0, 26964220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C850 (10x family)", 27064220a7eSMarcel Moolenaar DEFAULT_RCLK, 27164220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2729c564b6cSJohn Hay }, 2739c564b6cSJohn Hay 27464220a7eSMarcel Moolenaar { 0x131f, 0x1021, 0xffff, 0, 27564220a7eSMarcel Moolenaar "SIIG Cyber Parallel Dual PCI (10x family)", 27664220a7eSMarcel Moolenaar 0, 27764220a7eSMarcel Moolenaar PUC_PORT_2P, 0x18, 8, 0, 2789c564b6cSJohn Hay }, 2799c564b6cSJohn Hay 28064220a7eSMarcel Moolenaar { 0x131f, 0x1030, 0xffff, 0, 28164220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C550 (10x family)", 28264220a7eSMarcel Moolenaar DEFAULT_RCLK, 28364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2849c564b6cSJohn Hay }, 2859c564b6cSJohn Hay 28664220a7eSMarcel Moolenaar { 0x131f, 0x1031, 0xffff, 0, 28764220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C650 (10x family)", 28864220a7eSMarcel Moolenaar DEFAULT_RCLK, 28964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2909c564b6cSJohn Hay }, 2919c564b6cSJohn Hay 29264220a7eSMarcel Moolenaar { 0x131f, 0x1032, 0xffff, 0, 29364220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C850 (10x family)", 29464220a7eSMarcel Moolenaar DEFAULT_RCLK, 29564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2969c564b6cSJohn Hay }, 2979c564b6cSJohn Hay 29864220a7eSMarcel Moolenaar { 0x131f, 0x1034, 0xffff, 0, /* XXX really? */ 29964220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C550 (10x family)", 30064220a7eSMarcel Moolenaar DEFAULT_RCLK, 30164220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3029c564b6cSJohn Hay }, 3039c564b6cSJohn Hay 30464220a7eSMarcel Moolenaar { 0x131f, 0x1035, 0xffff, 0, /* XXX really? */ 30564220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C650 (10x family)", 30664220a7eSMarcel Moolenaar DEFAULT_RCLK, 30764220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3089c564b6cSJohn Hay }, 3099c564b6cSJohn Hay 31064220a7eSMarcel Moolenaar { 0x131f, 0x1036, 0xffff, 0, /* XXX really? */ 31164220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C850 (10x family)", 31264220a7eSMarcel Moolenaar DEFAULT_RCLK, 31364220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3149c564b6cSJohn Hay }, 3159c564b6cSJohn Hay 31664220a7eSMarcel Moolenaar { 0x131f, 0x1050, 0xffff, 0, 31764220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C550 (10x family)", 31864220a7eSMarcel Moolenaar DEFAULT_RCLK, 31964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3209c564b6cSJohn Hay }, 3219c564b6cSJohn Hay 32264220a7eSMarcel Moolenaar { 0x131f, 0x1051, 0xffff, 0, 32364220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (10x family)", 32464220a7eSMarcel Moolenaar DEFAULT_RCLK, 32564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3269c564b6cSJohn Hay }, 3279c564b6cSJohn Hay 32864220a7eSMarcel Moolenaar { 0x131f, 0x1052, 0xffff, 0, 32964220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C850 (10x family)", 33064220a7eSMarcel Moolenaar DEFAULT_RCLK, 33164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3329c564b6cSJohn Hay }, 3339c564b6cSJohn Hay 33464220a7eSMarcel Moolenaar { 0x131f, 0x2010, 0xffff, 0, 33564220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C550 (20x family)", 33664220a7eSMarcel Moolenaar DEFAULT_RCLK, 33764220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3389c564b6cSJohn Hay }, 3399c564b6cSJohn Hay 34064220a7eSMarcel Moolenaar { 0x131f, 0x2011, 0xffff, 0, 34164220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C650 (20x family)", 34264220a7eSMarcel Moolenaar DEFAULT_RCLK, 34364220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3449c564b6cSJohn Hay }, 3459c564b6cSJohn Hay 34664220a7eSMarcel Moolenaar { 0x131f, 0x2012, 0xffff, 0, 34764220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C850 (20x family)", 34864220a7eSMarcel Moolenaar DEFAULT_RCLK, 34964220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3509c564b6cSJohn Hay }, 3519c564b6cSJohn Hay 35264220a7eSMarcel Moolenaar { 0x131f, 0x2021, 0xffff, 0, 35364220a7eSMarcel Moolenaar "SIIG Cyber Parallel Dual PCI (20x family)", 35464220a7eSMarcel Moolenaar 0, 35564220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0, 3569c564b6cSJohn Hay }, 3579c564b6cSJohn Hay 35864220a7eSMarcel Moolenaar { 0x131f, 0x2030, 0xffff, 0, 35964220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C550 (20x family)", 36064220a7eSMarcel Moolenaar DEFAULT_RCLK, 36164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3629c564b6cSJohn Hay }, 3639c564b6cSJohn Hay 36464220a7eSMarcel Moolenaar { 0x131f, 0x2031, 0xffff, 0, 36564220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C650 (20x family)", 36664220a7eSMarcel Moolenaar DEFAULT_RCLK, 36764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3689c564b6cSJohn Hay }, 3699c564b6cSJohn Hay 37064220a7eSMarcel Moolenaar { 0x131f, 0x2032, 0xffff, 0, 37164220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C850 (20x family)", 37264220a7eSMarcel Moolenaar DEFAULT_RCLK, 37364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3749c564b6cSJohn Hay }, 3759c564b6cSJohn Hay 37664220a7eSMarcel Moolenaar { 0x131f, 0x2040, 0xffff, 0, 37764220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C550 (20x family)", 37864220a7eSMarcel Moolenaar DEFAULT_RCLK, 37964220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 38064220a7eSMarcel Moolenaar .config_function = puc_config_siig 3819c564b6cSJohn Hay }, 3829c564b6cSJohn Hay 38364220a7eSMarcel Moolenaar { 0x131f, 0x2041, 0xffff, 0, 38464220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C650 (20x family)", 38564220a7eSMarcel Moolenaar DEFAULT_RCLK, 38664220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 38764220a7eSMarcel Moolenaar .config_function = puc_config_siig 3889c564b6cSJohn Hay }, 3899c564b6cSJohn Hay 39064220a7eSMarcel Moolenaar { 0x131f, 0x2042, 0xffff, 0, 39164220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C850 (20x family)", 39264220a7eSMarcel Moolenaar DEFAULT_RCLK, 39364220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 39464220a7eSMarcel Moolenaar .config_function = puc_config_siig 3959c564b6cSJohn Hay }, 3969c564b6cSJohn Hay 39764220a7eSMarcel Moolenaar { 0x131f, 0x2050, 0xffff, 0, 39864220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C550 (20x family)", 39964220a7eSMarcel Moolenaar DEFAULT_RCLK, 40064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4019c564b6cSJohn Hay }, 4029c564b6cSJohn Hay 40364220a7eSMarcel Moolenaar { 0x131f, 0x2051, 0xffff, 0, 40464220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)", 40564220a7eSMarcel Moolenaar DEFAULT_RCLK, 40664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4079c564b6cSJohn Hay }, 4089c564b6cSJohn Hay 40964220a7eSMarcel Moolenaar { 0x131f, 0x2052, 0xffff, 0, 41064220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C850 (20x family)", 41164220a7eSMarcel Moolenaar DEFAULT_RCLK, 41264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4139c564b6cSJohn Hay }, 4149c564b6cSJohn Hay 41564220a7eSMarcel Moolenaar { 0x131f, 0x2060, 0xffff, 0, 41664220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C550 (20x family)", 41764220a7eSMarcel Moolenaar DEFAULT_RCLK, 41864220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4199c564b6cSJohn Hay }, 4209c564b6cSJohn Hay 42164220a7eSMarcel Moolenaar { 0x131f, 0x2061, 0xffff, 0, 42264220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C650 (20x family)", 42364220a7eSMarcel Moolenaar DEFAULT_RCLK, 42464220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4259c564b6cSJohn Hay }, 4269c564b6cSJohn Hay 42764220a7eSMarcel Moolenaar { 0x131f, 0x2062, 0xffff, 0, 42864220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C850 (20x family)", 42964220a7eSMarcel Moolenaar DEFAULT_RCLK, 43064220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4319c564b6cSJohn Hay }, 4329c564b6cSJohn Hay 43364220a7eSMarcel Moolenaar { 0x131f, 0x2081, 0xffff, 0, 43464220a7eSMarcel Moolenaar "SIIG PS8000 8S PCI 16C650 (20x family)", 43564220a7eSMarcel Moolenaar DEFAULT_RCLK, 43664220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, -1, -1, 43764220a7eSMarcel Moolenaar .config_function = puc_config_siig 4389c564b6cSJohn Hay }, 4399c564b6cSJohn Hay 44064220a7eSMarcel Moolenaar { 0x135c, 0x0010, 0xffff, 0, 44164220a7eSMarcel Moolenaar "Quatech QSC-100", 44264220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 44364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8, 44464220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4459c564b6cSJohn Hay }, 4469c564b6cSJohn Hay 44764220a7eSMarcel Moolenaar { 0x135c, 0x0020, 0xffff, 0, 44864220a7eSMarcel Moolenaar "Quatech DSC-100", 44964220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 45064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8, 45164220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4529c564b6cSJohn Hay }, 4539c564b6cSJohn Hay 45464220a7eSMarcel Moolenaar { 0x135c, 0x0030, 0xffff, 0, 45564220a7eSMarcel Moolenaar "Quatech DSC-200/300", 45664220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 45764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8, 45864220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4599c564b6cSJohn Hay }, 4609c564b6cSJohn Hay 46164220a7eSMarcel Moolenaar { 0x135c, 0x0040, 0xffff, 0, 46264220a7eSMarcel Moolenaar "Quatech QSC-200/300", 46364220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 46464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8, 46564220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4669c564b6cSJohn Hay }, 4679c564b6cSJohn Hay 46864220a7eSMarcel Moolenaar { 0x135c, 0x0050, 0xffff, 0, 46964220a7eSMarcel Moolenaar "Quatech ESC-100D", 47064220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 47164220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8, 47264220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4739c564b6cSJohn Hay }, 4749c564b6cSJohn Hay 47564220a7eSMarcel Moolenaar { 0x135c, 0x0060, 0xffff, 0, 47664220a7eSMarcel Moolenaar "Quatech ESC-100M", 47764220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 47864220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8, 47964220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4809c564b6cSJohn Hay }, 4819c564b6cSJohn Hay 48264220a7eSMarcel Moolenaar { 0x135c, 0x0170, 0xffff, 0, 48364220a7eSMarcel Moolenaar "Quatech QSCLP-100", 48464220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 48564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 48664220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4879c564b6cSJohn Hay }, 4889c564b6cSJohn Hay 48964220a7eSMarcel Moolenaar { 0x135c, 0x0180, 0xffff, 0, 49064220a7eSMarcel Moolenaar "Quatech DSCLP-100", 49164220a7eSMarcel Moolenaar -1, /* max 3x clock rate */ 49264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8, 49364220a7eSMarcel Moolenaar .config_function = puc_config_quatech 49476353f68SJohn Hay }, 49576353f68SJohn Hay 49664220a7eSMarcel Moolenaar { 0x135c, 0x01b0, 0xffff, 0, 49764220a7eSMarcel Moolenaar "Quatech DSCLP-200/300", 49864220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 49964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8, 50064220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5019c564b6cSJohn Hay }, 5029c564b6cSJohn Hay 50364220a7eSMarcel Moolenaar { 0x135c, 0x01e0, 0xffff, 0, 50464220a7eSMarcel Moolenaar "Quatech ESCLP-100", 50564220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 50664220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 50764220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5089c564b6cSJohn Hay }, 5099c564b6cSJohn Hay 510*f83255a5SMax Khon { 0x1393, 0x1024, 0xffff, 0, 511*f83255a5SMax Khon "Moxa Technologies, Smartio CP-102E/PCIe", 512*f83255a5SMax Khon DEFAULT_RCLK * 8, 513*f83255a5SMax Khon PUC_PORT_2S, 0x14, 0, 0x200 514*f83255a5SMax Khon }, 515*f83255a5SMax Khon 516*f83255a5SMax Khon { 0x1393, 0x1025, 0xffff, 0, 517*f83255a5SMax Khon "Moxa Technologies, Smartio CP-102EL/PCIe", 518*f83255a5SMax Khon DEFAULT_RCLK * 8, 519*f83255a5SMax Khon PUC_PORT_2S, 0x14, 0, 0x200, 520*f83255a5SMax Khon }, 521*f83255a5SMax Khon 52264220a7eSMarcel Moolenaar { 0x1393, 0x1040, 0xffff, 0, 52364220a7eSMarcel Moolenaar "Moxa Technologies, Smartio C104H/PCI", 52464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 52564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5260ec6e983SJoerg Wunsch }, 52740f01890SBruce Evans 52864220a7eSMarcel Moolenaar { 0x1393, 0x1041, 0xffff, 0, 52964220a7eSMarcel Moolenaar "Moxa Technologies, Smartio CP-104UL/PCI", 53064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 53164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5329c564b6cSJohn Hay }, 5339c564b6cSJohn Hay 5342c89ac5eSEitan Adler { 0x1393, 0x1042, 0xffff, 0, 5352c89ac5eSEitan Adler "Moxa Technologies, Smartio CP-104JU/PCI", 5362c89ac5eSEitan Adler DEFAULT_RCLK * 8, 5372c89ac5eSEitan Adler PUC_PORT_4S, 0x18, 0, 8, 5382c89ac5eSEitan Adler }, 5392c89ac5eSEitan Adler 540f6a60febSMaxim Konovalov { 0x1393, 0x1043, 0xffff, 0, 541f6a60febSMaxim Konovalov "Moxa Technologies, Smartio CP-104EL/PCIe", 542f6a60febSMaxim Konovalov DEFAULT_RCLK * 8, 543f6a60febSMaxim Konovalov PUC_PORT_4S, 0x18, 0, 8, 544f6a60febSMaxim Konovalov }, 545f6a60febSMaxim Konovalov 5462c89ac5eSEitan Adler { 0x1393, 0x1045, 0xffff, 0, 5472c89ac5eSEitan Adler "Moxa Technologies, Smartio CP-104EL-A/PCIe", 5482c89ac5eSEitan Adler DEFAULT_RCLK * 8, 5492c89ac5eSEitan Adler PUC_PORT_4S, 0x14, 0, -1, 5502c89ac5eSEitan Adler .config_function = puc_config_moxa 5512c89ac5eSEitan Adler }, 5522c89ac5eSEitan Adler 5538efbf264SJohn Baldwin { 0x1393, 0x1120, 0xffff, 0, 5548efbf264SJohn Baldwin "Moxa Technologies, CP-112UL", 5558efbf264SJohn Baldwin DEFAULT_RCLK * 8, 5568efbf264SJohn Baldwin PUC_PORT_2S, 0x18, 0, 8, 5578efbf264SJohn Baldwin }, 5588efbf264SJohn Baldwin 55964220a7eSMarcel Moolenaar { 0x1393, 0x1141, 0xffff, 0, 56064220a7eSMarcel Moolenaar "Moxa Technologies, Industio CP-114", 56164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 56264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5639c564b6cSJohn Hay }, 5649c564b6cSJohn Hay 565*f83255a5SMax Khon { 0x1393, 0x1144, 0xffff, 0, 566*f83255a5SMax Khon "Moxa Technologies, Smartio CP-114EL/PCIe", 567*f83255a5SMax Khon DEFAULT_RCLK * 8, 568*f83255a5SMax Khon PUC_PORT_4S, 0x14, 0, -1, 569*f83255a5SMax Khon .config_function = puc_config_moxa 570*f83255a5SMax Khon }, 571*f83255a5SMax Khon 572*f83255a5SMax Khon { 0x1393, 0x1182, 0xffff, 0, 573*f83255a5SMax Khon "Moxa Technologies, Smartio CP-118EL-A/PCIe", 574*f83255a5SMax Khon DEFAULT_RCLK * 8, 575*f83255a5SMax Khon PUC_PORT_8S, 0x14, 0, 0x200, 576*f83255a5SMax Khon }, 577*f83255a5SMax Khon 578*f83255a5SMax Khon { 0x1393, 0x1322, 0xffff, 0, 579*f83255a5SMax Khon "Moxa Technologies, Smartio CP-132EL/PCIe", 580*f83255a5SMax Khon DEFAULT_RCLK * 8, 581*f83255a5SMax Khon PUC_PORT_2S, 0x14, 0, 0x200, 582*f83255a5SMax Khon }, 583*f83255a5SMax Khon 58464220a7eSMarcel Moolenaar { 0x1393, 0x1680, 0xffff, 0, 58564220a7eSMarcel Moolenaar "Moxa Technologies, C168H/PCI", 58664220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 58764220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 5889c564b6cSJohn Hay }, 5899c564b6cSJohn Hay 59064220a7eSMarcel Moolenaar { 0x1393, 0x1681, 0xffff, 0, 59164220a7eSMarcel Moolenaar "Moxa Technologies, C168U/PCI", 59264220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 59364220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 5949c564b6cSJohn Hay }, 5959c564b6cSJohn Hay 5960db1aa0bSStanislav Sedov { 0x1393, 0x1682, 0xffff, 0, 5970db1aa0bSStanislav Sedov "Moxa Technologies, CP-168EL/PCIe", 5980db1aa0bSStanislav Sedov DEFAULT_RCLK * 8, 5990db1aa0bSStanislav Sedov PUC_PORT_8S, 0x18, 0, 8, 6000db1aa0bSStanislav Sedov }, 6010db1aa0bSStanislav Sedov 602*f83255a5SMax Khon { 0x1393, 0x1683, 0xffff, 0, 603*f83255a5SMax Khon "Moxa Technologies, Smartio CP-168EL-A/PCIe", 604*f83255a5SMax Khon DEFAULT_RCLK * 8, 605*f83255a5SMax Khon PUC_PORT_8S, 0x14, 0, 0x200, 606*f83255a5SMax Khon }, 607*f83255a5SMax Khon 60822e0612fSJohn Baldwin { 0x13a8, 0x0152, 0xffff, 0, 60922e0612fSJohn Baldwin "Exar XR17C/D152", 61022e0612fSJohn Baldwin DEFAULT_RCLK * 8, 61122e0612fSJohn Baldwin PUC_PORT_2S, 0x10, 0, -1, 61222e0612fSJohn Baldwin .config_function = puc_config_exar 61322e0612fSJohn Baldwin }, 61422e0612fSJohn Baldwin 61522e0612fSJohn Baldwin { 0x13a8, 0x0154, 0xffff, 0, 61622e0612fSJohn Baldwin "Exar XR17C154", 61722e0612fSJohn Baldwin DEFAULT_RCLK * 8, 61822e0612fSJohn Baldwin PUC_PORT_4S, 0x10, 0, -1, 61922e0612fSJohn Baldwin .config_function = puc_config_exar 62022e0612fSJohn Baldwin }, 62122e0612fSJohn Baldwin 62264220a7eSMarcel Moolenaar { 0x13a8, 0x0158, 0xffff, 0, 62322e0612fSJohn Baldwin "Exar XR17C158", 62464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 62564220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, -1, 62622e0612fSJohn Baldwin .config_function = puc_config_exar 627de0d2cadSJohn Hay }, 628de0d2cadSJohn Hay 62979aac43eSEd Maste { 0x13a8, 0x0258, 0xffff, 0, 63079aac43eSEd Maste "Exar XR17V258IV", 63179aac43eSEd Maste DEFAULT_RCLK * 8, 63279aac43eSEd Maste PUC_PORT_8S, 0x10, 0, -1, 63379aac43eSEd Maste }, 63479aac43eSEd Maste 63564220a7eSMarcel Moolenaar { 0x1407, 0x0100, 0xffff, 0, 63664220a7eSMarcel Moolenaar "Lava Computers Dual Serial", 63764220a7eSMarcel Moolenaar DEFAULT_RCLK, 63864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6399c564b6cSJohn Hay }, 6409c564b6cSJohn Hay 64164220a7eSMarcel Moolenaar { 0x1407, 0x0101, 0xffff, 0, 64264220a7eSMarcel Moolenaar "Lava Computers Quatro A", 64364220a7eSMarcel Moolenaar DEFAULT_RCLK, 64464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6459c564b6cSJohn Hay }, 6469c564b6cSJohn Hay 64764220a7eSMarcel Moolenaar { 0x1407, 0x0102, 0xffff, 0, 64864220a7eSMarcel Moolenaar "Lava Computers Quatro B", 64964220a7eSMarcel Moolenaar DEFAULT_RCLK, 65064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6519c564b6cSJohn Hay }, 6529c564b6cSJohn Hay 65364220a7eSMarcel Moolenaar { 0x1407, 0x0120, 0xffff, 0, 65464220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI A", 65564220a7eSMarcel Moolenaar DEFAULT_RCLK, 65664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6579c564b6cSJohn Hay }, 65864220a7eSMarcel Moolenaar 65964220a7eSMarcel Moolenaar { 0x1407, 0x0121, 0xffff, 0, 66064220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI B", 66164220a7eSMarcel Moolenaar DEFAULT_RCLK, 66264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 66364220a7eSMarcel Moolenaar }, 66464220a7eSMarcel Moolenaar 66564220a7eSMarcel Moolenaar { 0x1407, 0x0180, 0xffff, 0, 66664220a7eSMarcel Moolenaar "Lava Computers Octo A", 66764220a7eSMarcel Moolenaar DEFAULT_RCLK, 66864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 66964220a7eSMarcel Moolenaar }, 67064220a7eSMarcel Moolenaar 67164220a7eSMarcel Moolenaar { 0x1407, 0x0181, 0xffff, 0, 67264220a7eSMarcel Moolenaar "Lava Computers Octo B", 67364220a7eSMarcel Moolenaar DEFAULT_RCLK, 67464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 67564220a7eSMarcel Moolenaar }, 67664220a7eSMarcel Moolenaar 67713ae6dceSKevin Lo { 0x1409, 0x7268, 0xffff, 0, 67813ae6dceSKevin Lo "Sunix SUN1888", 67913ae6dceSKevin Lo 0, 68013ae6dceSKevin Lo PUC_PORT_2P, 0x10, 0, 8, 68113ae6dceSKevin Lo }, 68213ae6dceSKevin Lo 68364220a7eSMarcel Moolenaar { 0x1409, 0x7168, 0xffff, 0, 68464220a7eSMarcel Moolenaar NULL, 68564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 68664220a7eSMarcel Moolenaar PUC_PORT_NONSTANDARD, 0x10, -1, -1, 68764220a7eSMarcel Moolenaar .config_function = puc_config_timedia 6889c564b6cSJohn Hay }, 6899c564b6cSJohn Hay 6909c564b6cSJohn Hay /* 6919c564b6cSJohn Hay * Boards with an Oxford Semiconductor chip. 6929c564b6cSJohn Hay * 6939c564b6cSJohn Hay * Oxford Semiconductor provides documentation for their chip at: 6946e9f075aSJohn Baldwin * <URL:http://www.plxtech.com/products/uart/> 6959c564b6cSJohn Hay * 6969c564b6cSJohn Hay * As sold by Kouwell <URL:http://www.kouwell.com/>. 6979c564b6cSJohn Hay * I/O Flex PCI I/O Card Model-223 with 4 serial and 1 parallel ports. 6989c564b6cSJohn Hay */ 699acdfc36aSEitan Adler { 700acdfc36aSEitan Adler 0x1415, 0x9501, 0x10fc ,0xc070, 701acdfc36aSEitan Adler "I-O DATA RSA-PCI2/R", 702acdfc36aSEitan Adler DEFAULT_RCLK * 8, 703acdfc36aSEitan Adler PUC_PORT_2S, 0x10, 0, 8, 704acdfc36aSEitan Adler }, 7059c564b6cSJohn Hay 7060db885bbSDag-Erling Smørgrav { 0x1415, 0x9501, 0x131f, 0x2050, 7070db885bbSDag-Erling Smørgrav "SIIG Cyber 4 PCI 16550", 7080db885bbSDag-Erling Smørgrav DEFAULT_RCLK * 10, 7090db885bbSDag-Erling Smørgrav PUC_PORT_4S, 0x10, 0, 8, 7100db885bbSDag-Erling Smørgrav }, 7110db885bbSDag-Erling Smørgrav 7121d860a7eSMarcel Moolenaar { 0x1415, 0x9501, 0x131f, 0x2051, 7131d860a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)", 7141d860a7eSMarcel Moolenaar DEFAULT_RCLK * 10, 7151d860a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 7161d860a7eSMarcel Moolenaar }, 7171d860a7eSMarcel Moolenaar 71830ced0d8SJohn Baldwin { 0x1415, 0x9501, 0x131f, 0x2052, 71930ced0d8SJohn Baldwin "SIIG Quartet Serial 850", 72030ced0d8SJohn Baldwin DEFAULT_RCLK * 10, 72130ced0d8SJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 72230ced0d8SJohn Baldwin }, 72330ced0d8SJohn Baldwin 724282211eaSJohn Baldwin { 0x1415, 0x9501, 0x14db, 0x2150, 725282211eaSJohn Baldwin "Kuroutoshikou SERIAL4P-LPPCI2", 726282211eaSJohn Baldwin DEFAULT_RCLK * 10, 727282211eaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 728282211eaSJohn Baldwin }, 729282211eaSJohn Baldwin 73064220a7eSMarcel Moolenaar { 0x1415, 0x9501, 0xffff, 0, 731c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs", 732c44bdcb0SDag-Erling Smørgrav DEFAULT_RCLK, 73364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 73483431653SWarner Losh }, 73583431653SWarner Losh 73610414b71SJohn Baldwin { 0x1415, 0x950a, 0x131f, 0x2030, 73710414b71SJohn Baldwin "SIIG Cyber 2S PCIe", 73810414b71SJohn Baldwin DEFAULT_RCLK * 10, 73910414b71SJohn Baldwin PUC_PORT_2S, 0x10, 0, 8, 74010414b71SJohn Baldwin }, 74110414b71SJohn Baldwin 74264220a7eSMarcel Moolenaar { 0x1415, 0x950a, 0xffff, 0, 743c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs", 744c44bdcb0SDag-Erling Smørgrav DEFAULT_RCLK, 74564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 7469c564b6cSJohn Hay }, 7479c564b6cSJohn Hay 74864220a7eSMarcel Moolenaar { 0x1415, 0x9511, 0xffff, 0, 74964220a7eSMarcel Moolenaar "Oxford Semiconductor OX9160/OX16PCI954 UARTs (function 1)", 75064220a7eSMarcel Moolenaar DEFAULT_RCLK, 75164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 75243e42f36SDoug Ambrisko }, 75343e42f36SDoug Ambrisko 75464220a7eSMarcel Moolenaar { 0x1415, 0x9521, 0xffff, 0, 75564220a7eSMarcel Moolenaar "Oxford Semiconductor OX16PCI952 UARTs", 75664220a7eSMarcel Moolenaar DEFAULT_RCLK, 75764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 7586cb38a02SDoug Ambrisko }, 7596cb38a02SDoug Ambrisko 76011a12794SRoman Kurakin { 0x1415, 0x9538, 0xffff, 0, 76111a12794SRoman Kurakin "Oxford Semiconductor OX16PCI958 UARTs", 76211a12794SRoman Kurakin DEFAULT_RCLK * 10, 76311a12794SRoman Kurakin PUC_PORT_8S, 0x18, 0, 8, 76411a12794SRoman Kurakin }, 76511a12794SRoman Kurakin 766f09d9fbaSJohn Baldwin /* 767f09d9fbaSJohn Baldwin * Perle boards use Oxford Semiconductor chips, but they store the 768f09d9fbaSJohn Baldwin * Oxford Semiconductor device ID as a subvendor device ID and use 769f09d9fbaSJohn Baldwin * their own device IDs. 770f09d9fbaSJohn Baldwin */ 771f09d9fbaSJohn Baldwin 772f09d9fbaSJohn Baldwin { 0x155f, 0x0331, 0xffff, 0, 773f09d9fbaSJohn Baldwin "Perle Speed4 LE", 774f09d9fbaSJohn Baldwin DEFAULT_RCLK * 8, 775f09d9fbaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 776f09d9fbaSJohn Baldwin }, 777f09d9fbaSJohn Baldwin 7786e9f075aSJohn Baldwin /* 7796e9f075aSJohn Baldwin * Oxford Semiconductor PCI Express Expresso family 7806e9f075aSJohn Baldwin * 7816e9f075aSJohn Baldwin * Found in many 'native' PCI Express serial boards such as: 7826e9f075aSJohn Baldwin * 7836e9f075aSJohn Baldwin * eMegatech MP954ER4 (4 port) and MP958ER8 (8 port) 7846e9f075aSJohn Baldwin * <URL:http://www.emegatech.com.tw/pdrs232pcie.html> 7856e9f075aSJohn Baldwin * 7866e9f075aSJohn Baldwin * Lindy 51189 (4 port) 7876e9f075aSJohn Baldwin * <URL:http://www.lindy.com> <URL:http://tinyurl.com/lindy-51189> 7886e9f075aSJohn Baldwin * 7896e9f075aSJohn Baldwin * StarTech.com PEX4S952 (4 port) and PEX8S952 (8 port) 7906e9f075aSJohn Baldwin * <URL:http://www.startech.com> 7916e9f075aSJohn Baldwin */ 7926e9f075aSJohn Baldwin 793a6a64612SAndrey V. Elsukov { 0x1415, 0xc138, 0xffff, 0, 794a6a64612SAndrey V. Elsukov "Oxford Semiconductor OXPCIe952 UARTs", 795a6a64612SAndrey V. Elsukov DEFAULT_RCLK * 0x22, 796a6a64612SAndrey V. Elsukov PUC_PORT_NONSTANDARD, 0x10, 0, -1, 797a6a64612SAndrey V. Elsukov .config_function = puc_config_oxford_pcie 798a6a64612SAndrey V. Elsukov }, 799a6a64612SAndrey V. Elsukov 8006e9f075aSJohn Baldwin { 0x1415, 0xc158, 0xffff, 0, 8016e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs", 8026e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8036e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8046e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8056e9f075aSJohn Baldwin }, 8066e9f075aSJohn Baldwin 8076e9f075aSJohn Baldwin { 0x1415, 0xc15d, 0xffff, 0, 8086e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs (function 1)", 8096e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8106e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8116e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8126e9f075aSJohn Baldwin }, 8136e9f075aSJohn Baldwin 8146e9f075aSJohn Baldwin { 0x1415, 0xc208, 0xffff, 0, 8156e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs", 8166e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8176e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8186e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8196e9f075aSJohn Baldwin }, 8206e9f075aSJohn Baldwin 8216e9f075aSJohn Baldwin { 0x1415, 0xc20d, 0xffff, 0, 8226e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs (function 1)", 8236e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8246e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8256e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8266e9f075aSJohn Baldwin }, 8276e9f075aSJohn Baldwin 8286e9f075aSJohn Baldwin { 0x1415, 0xc308, 0xffff, 0, 8296e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs", 8306e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8316e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8326e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8336e9f075aSJohn Baldwin }, 8346e9f075aSJohn Baldwin 8356e9f075aSJohn Baldwin { 0x1415, 0xc30d, 0xffff, 0, 8366e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs (function 1)", 8376e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 8386e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 8396e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 8406e9f075aSJohn Baldwin }, 8416e9f075aSJohn Baldwin 84246ce58c7SAndrew Thompson { 0x14d2, 0x8010, 0xffff, 0, 84346ce58c7SAndrew Thompson "VScom PCI-100L", 84446ce58c7SAndrew Thompson DEFAULT_RCLK * 8, 84546ce58c7SAndrew Thompson PUC_PORT_1S, 0x14, 0, 0, 84646ce58c7SAndrew Thompson }, 84746ce58c7SAndrew Thompson 84864220a7eSMarcel Moolenaar { 0x14d2, 0x8020, 0xffff, 0, 84964220a7eSMarcel Moolenaar "VScom PCI-200L", 85064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 85164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 4, 0, 852a58deb46SColin Percival }, 853a58deb46SColin Percival 85464220a7eSMarcel Moolenaar { 0x14d2, 0x8028, 0xffff, 0, 85546dd877dSPoul-Henning Kamp "VScom 200Li", 85664220a7eSMarcel Moolenaar DEFAULT_RCLK, 85764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x20, 0, 8, 85846dd877dSPoul-Henning Kamp }, 8593e19d3c0SBruce M Simpson 86064220a7eSMarcel Moolenaar /* 86164220a7eSMarcel Moolenaar * VScom (Titan?) PCI-800L. More modern variant of the 86264220a7eSMarcel Moolenaar * PCI-800. Uses 6 discrete 16550 UARTs, plus another 86364220a7eSMarcel Moolenaar * two of them obviously implemented as macro cells in 86464220a7eSMarcel Moolenaar * the ASIC. This causes the weird port access pattern 86564220a7eSMarcel Moolenaar * below, where two of the IO port ranges each access 86664220a7eSMarcel Moolenaar * one of the ASIC UARTs, and a block of IO addresses 86764220a7eSMarcel Moolenaar * access the external UARTs. 86864220a7eSMarcel Moolenaar */ 86964220a7eSMarcel Moolenaar { 0x14d2, 0x8080, 0xffff, 0, 87064220a7eSMarcel Moolenaar "Titan VScom PCI-800L", 87164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 87264220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1, 87364220a7eSMarcel Moolenaar .config_function = puc_config_titan 87464220a7eSMarcel Moolenaar }, 87564220a7eSMarcel Moolenaar 87664220a7eSMarcel Moolenaar /* 87764220a7eSMarcel Moolenaar * VScom PCI-800H. Uses 8 16950 UART, behind a PCI chips that offers 87864220a7eSMarcel Moolenaar * 4 com port on PCI device 0 and 4 on PCI device 1. PCI device 0 has 87964220a7eSMarcel Moolenaar * device ID 3 and PCI device 1 device ID 4. 88064220a7eSMarcel Moolenaar */ 88164220a7eSMarcel Moolenaar { 0x14d2, 0xa003, 0xffff, 0, 88264220a7eSMarcel Moolenaar "Titan PCI-800H", 88364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 88464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 88564220a7eSMarcel Moolenaar }, 88664220a7eSMarcel Moolenaar { 0x14d2, 0xa004, 0xffff, 0, 88764220a7eSMarcel Moolenaar "Titan PCI-800H", 88864220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 88964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 89064220a7eSMarcel Moolenaar }, 89164220a7eSMarcel Moolenaar 89264220a7eSMarcel Moolenaar { 0x14d2, 0xa005, 0xffff, 0, 89364220a7eSMarcel Moolenaar "Titan PCI-200H", 89464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 89564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 89664220a7eSMarcel Moolenaar }, 89764220a7eSMarcel Moolenaar 89864220a7eSMarcel Moolenaar { 0x14d2, 0xe020, 0xffff, 0, 89964220a7eSMarcel Moolenaar "Titan VScom PCI-200HV2", 90064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 90164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 90264220a7eSMarcel Moolenaar }, 90364220a7eSMarcel Moolenaar 90464589ec8SEitan Adler { 0x14d2, 0xa007, 0xffff, 0, 90564589ec8SEitan Adler "Titan VScom PCIex-800H", 90664589ec8SEitan Adler DEFAULT_RCLK * 8, 90764589ec8SEitan Adler PUC_PORT_4S, 0x10, 0, 8, 90864589ec8SEitan Adler }, 90964589ec8SEitan Adler 91064589ec8SEitan Adler { 0x14d2, 0xa008, 0xffff, 0, 91164589ec8SEitan Adler "Titan VScom PCIex-800H", 91264589ec8SEitan Adler DEFAULT_RCLK * 8, 91364589ec8SEitan Adler PUC_PORT_4S, 0x10, 0, 8, 91464589ec8SEitan Adler }, 91564589ec8SEitan Adler 91664220a7eSMarcel Moolenaar { 0x14db, 0x2130, 0xffff, 0, 91764220a7eSMarcel Moolenaar "Avlab Technology, PCI IO 2S", 91864220a7eSMarcel Moolenaar DEFAULT_RCLK, 91964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 92064220a7eSMarcel Moolenaar }, 92164220a7eSMarcel Moolenaar 92264220a7eSMarcel Moolenaar { 0x14db, 0x2150, 0xffff, 0, 92364220a7eSMarcel Moolenaar "Avlab Low Profile PCI 4 Serial", 92464220a7eSMarcel Moolenaar DEFAULT_RCLK, 92564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 92664220a7eSMarcel Moolenaar }, 92764220a7eSMarcel Moolenaar 9280dc908e7SAndrew Thompson { 0x14db, 0x2152, 0xffff, 0, 9290dc908e7SAndrew Thompson "Avlab Low Profile PCI 4 Serial", 9300dc908e7SAndrew Thompson DEFAULT_RCLK, 9310dc908e7SAndrew Thompson PUC_PORT_4S, 0x10, 4, 0, 9320dc908e7SAndrew Thompson }, 9330dc908e7SAndrew Thompson 93464220a7eSMarcel Moolenaar { 0x1592, 0x0781, 0xffff, 0, 93564220a7eSMarcel Moolenaar "Syba Tech Ltd. PCI-4S2P-550-ECP", 93664220a7eSMarcel Moolenaar DEFAULT_RCLK, 93764220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 0, -1, 93864220a7eSMarcel Moolenaar .config_function = puc_config_syba 93964220a7eSMarcel Moolenaar }, 94064220a7eSMarcel Moolenaar 9417501345eSJohn Hay { 0x1fd4, 0x1999, 0xffff, 0, 9427501345eSJohn Hay "Sunix SER5437A", 9437501345eSJohn Hay DEFAULT_RCLK * 8, 9447501345eSJohn Hay PUC_PORT_2S, 0x10, 0, 8, 9457501345eSJohn Hay }, 9467501345eSJohn Hay 947d9b73ea9SEitan Adler { 0x5372, 0x6873, 0xffff, 0, 948d9b73ea9SEitan Adler "Sun 1040 PCI Quad Serial", 949d9b73ea9SEitan Adler DEFAULT_RCLK, 950d9b73ea9SEitan Adler PUC_PORT_4S, 0x10, 4, 0, 951d9b73ea9SEitan Adler }, 952d9b73ea9SEitan Adler 95364220a7eSMarcel Moolenaar { 0x6666, 0x0001, 0xffff, 0, 95464220a7eSMarcel Moolenaar "Decision Computer Inc, PCCOM 4-port serial", 95564220a7eSMarcel Moolenaar DEFAULT_RCLK, 95664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x1c, 0, 8, 95764220a7eSMarcel Moolenaar }, 95864220a7eSMarcel Moolenaar 959858030c4SAndrew Thompson { 0x6666, 0x0002, 0xffff, 0, 960858030c4SAndrew Thompson "Decision Computer Inc, PCCOM 8-port serial", 961858030c4SAndrew Thompson DEFAULT_RCLK, 962858030c4SAndrew Thompson PUC_PORT_8S, 0x1c, 0, 8, 963858030c4SAndrew Thompson }, 964858030c4SAndrew Thompson 96564220a7eSMarcel Moolenaar { 0x6666, 0x0004, 0xffff, 0, 96664220a7eSMarcel Moolenaar "PCCOM dual port RS232/422/485", 96764220a7eSMarcel Moolenaar DEFAULT_RCLK, 96864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x1c, 0, 8, 96964220a7eSMarcel Moolenaar }, 97064220a7eSMarcel Moolenaar 97164220a7eSMarcel Moolenaar { 0x9710, 0x9815, 0xffff, 0, 97264220a7eSMarcel Moolenaar "NetMos NM9815 Dual 1284 Printer port", 97364220a7eSMarcel Moolenaar 0, 97464220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0, 97564220a7eSMarcel Moolenaar }, 97664220a7eSMarcel Moolenaar 977843994aeSJohn Baldwin /* 978843994aeSJohn Baldwin * This is more specific than the generic NM9835 entry that follows, and 979843994aeSJohn Baldwin * is placed here to _prevent_ puc from claiming this single port card. 980843994aeSJohn Baldwin * 981843994aeSJohn Baldwin * uart(4) will claim this device. 982843994aeSJohn Baldwin */ 983843994aeSJohn Baldwin { 0x9710, 0x9835, 0x1000, 1, 984843994aeSJohn Baldwin "NetMos NM9835 based 1-port serial", 985843994aeSJohn Baldwin DEFAULT_RCLK, 986843994aeSJohn Baldwin PUC_PORT_1S, 0x10, 4, 0, 987843994aeSJohn Baldwin }, 988843994aeSJohn Baldwin 989045de714SNavdeep Parhar { 0x9710, 0x9835, 0x1000, 2, 990045de714SNavdeep Parhar "NetMos NM9835 based 2-port serial", 991045de714SNavdeep Parhar DEFAULT_RCLK, 992045de714SNavdeep Parhar PUC_PORT_2S, 0x10, 4, 0, 993045de714SNavdeep Parhar }, 994045de714SNavdeep Parhar 99564220a7eSMarcel Moolenaar { 0x9710, 0x9835, 0xffff, 0, 99664220a7eSMarcel Moolenaar "NetMos NM9835 Dual UART and 1284 Printer port", 99764220a7eSMarcel Moolenaar DEFAULT_RCLK, 99864220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 99964220a7eSMarcel Moolenaar }, 100064220a7eSMarcel Moolenaar 100164220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0x1000, 0x0006, 100264220a7eSMarcel Moolenaar "NetMos NM9845 6 Port UART", 100364220a7eSMarcel Moolenaar DEFAULT_RCLK, 100464220a7eSMarcel Moolenaar PUC_PORT_6S, 0x10, 4, 0, 100564220a7eSMarcel Moolenaar }, 100664220a7eSMarcel Moolenaar 100764220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0xffff, 0, 100864220a7eSMarcel Moolenaar "NetMos NM9845 Quad UART and 1284 Printer port", 100964220a7eSMarcel Moolenaar DEFAULT_RCLK, 101064220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 4, 0, 10111d864e0dSMarcel Moolenaar }, 10121d864e0dSMarcel Moolenaar 10131d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3002, 10141d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART", 10151d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10161d864e0dSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 10171d864e0dSMarcel Moolenaar }, 10181d864e0dSMarcel Moolenaar 10191d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3003, 10201d864e0dSMarcel Moolenaar "NetMos NM9865 Triple UART", 10211d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10221d864e0dSMarcel Moolenaar PUC_PORT_3S, 0x10, 4, 0, 10231d864e0dSMarcel Moolenaar }, 10241d864e0dSMarcel Moolenaar 10251d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3004, 10261d864e0dSMarcel Moolenaar "NetMos NM9865 Quad UART", 10271d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10281d864e0dSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0,0 10291d864e0dSMarcel Moolenaar }, 10301d864e0dSMarcel Moolenaar 10311d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3011, 10321d864e0dSMarcel Moolenaar "NetMos NM9865 Single UART and 1284 Printer port", 10331d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10341d864e0dSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 10351d864e0dSMarcel Moolenaar }, 10361d864e0dSMarcel Moolenaar 10371d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3012, 10381d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART and 1284 Printer port", 10391d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10401d864e0dSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 10411d864e0dSMarcel Moolenaar }, 10421d864e0dSMarcel Moolenaar 10431d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3020, 10441d864e0dSMarcel Moolenaar "NetMos NM9865 Dual 1284 Printer port", 10451d864e0dSMarcel Moolenaar DEFAULT_RCLK, 10461d864e0dSMarcel Moolenaar PUC_PORT_2P, 0x10, 4, 0, 104764220a7eSMarcel Moolenaar }, 104864220a7eSMarcel Moolenaar 104964220a7eSMarcel Moolenaar { 0xb00c, 0x021c, 0xffff, 0, 105064220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Lite", 105164220a7eSMarcel Moolenaar DEFAULT_RCLK, 105264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 105364220a7eSMarcel Moolenaar .config_function = puc_config_icbook 105464220a7eSMarcel Moolenaar }, 105564220a7eSMarcel Moolenaar 105664220a7eSMarcel Moolenaar { 0xb00c, 0x031c, 0xffff, 0, 105764220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Pro", 105864220a7eSMarcel Moolenaar DEFAULT_RCLK, 105964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 106064220a7eSMarcel Moolenaar .config_function = puc_config_icbook 106164220a7eSMarcel Moolenaar }, 106264220a7eSMarcel Moolenaar 106364220a7eSMarcel Moolenaar { 0xb00c, 0x041c, 0xffff, 0, 106464220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Lite", 106564220a7eSMarcel Moolenaar DEFAULT_RCLK, 106664220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 106764220a7eSMarcel Moolenaar .config_function = puc_config_icbook 106864220a7eSMarcel Moolenaar }, 106964220a7eSMarcel Moolenaar 107064220a7eSMarcel Moolenaar { 0xb00c, 0x051c, 0xffff, 0, 107164220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Pro", 107264220a7eSMarcel Moolenaar DEFAULT_RCLK, 107364220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 107464220a7eSMarcel Moolenaar .config_function = puc_config_icbook 107564220a7eSMarcel Moolenaar }, 107664220a7eSMarcel Moolenaar 107764220a7eSMarcel Moolenaar { 0xb00c, 0x081c, 0xffff, 0, 107864220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Pro", 107964220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 108064220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8, 108164220a7eSMarcel Moolenaar .config_function = puc_config_icbook 108264220a7eSMarcel Moolenaar }, 108364220a7eSMarcel Moolenaar 108464220a7eSMarcel Moolenaar { 0xb00c, 0x091c, 0xffff, 0, 108564220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Lite", 108664220a7eSMarcel Moolenaar DEFAULT_RCLK, 108764220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8, 108864220a7eSMarcel Moolenaar .config_function = puc_config_icbook 108964220a7eSMarcel Moolenaar }, 109064220a7eSMarcel Moolenaar 109164220a7eSMarcel Moolenaar { 0xb00c, 0x0a1c, 0xffff, 0, 109264220a7eSMarcel Moolenaar "IC Book Labs Gunboat x2 Low Profile", 109364220a7eSMarcel Moolenaar DEFAULT_RCLK, 109464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 109564220a7eSMarcel Moolenaar }, 109664220a7eSMarcel Moolenaar 109764220a7eSMarcel Moolenaar { 0xb00c, 0x0b1c, 0xffff, 0, 109864220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Low Profile", 109964220a7eSMarcel Moolenaar DEFAULT_RCLK, 110064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 110164220a7eSMarcel Moolenaar .config_function = puc_config_icbook 110264220a7eSMarcel Moolenaar }, 110364220a7eSMarcel Moolenaar 110464220a7eSMarcel Moolenaar { 0xffff, 0, 0xffff, 0, NULL, 0 } 11059c564b6cSJohn Hay }; 110664220a7eSMarcel Moolenaar 110764220a7eSMarcel Moolenaar static int 110864220a7eSMarcel Moolenaar puc_config_amc(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 110964220a7eSMarcel Moolenaar intptr_t *res) 111064220a7eSMarcel Moolenaar { 111164220a7eSMarcel Moolenaar switch (cmd) { 111264220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 111364220a7eSMarcel Moolenaar *res = 8 * (port & 1); 111464220a7eSMarcel Moolenaar return (0); 111564220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 111664220a7eSMarcel Moolenaar *res = 0x14 + (port >> 1) * 4; 111764220a7eSMarcel Moolenaar return (0); 111864220a7eSMarcel Moolenaar default: 111964220a7eSMarcel Moolenaar break; 112064220a7eSMarcel Moolenaar } 112164220a7eSMarcel Moolenaar return (ENXIO); 112264220a7eSMarcel Moolenaar } 112364220a7eSMarcel Moolenaar 112464220a7eSMarcel Moolenaar static int 112564220a7eSMarcel Moolenaar puc_config_diva(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 112664220a7eSMarcel Moolenaar intptr_t *res) 112764220a7eSMarcel Moolenaar { 112864220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 112964220a7eSMarcel Moolenaar 113064220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_OFS) { 113164220a7eSMarcel Moolenaar if (cfg->subdevice == 0x1282) /* Everest SP */ 113264220a7eSMarcel Moolenaar port <<= 1; 113364220a7eSMarcel Moolenaar else if (cfg->subdevice == 0x104b) /* Maestro SP2 */ 113464220a7eSMarcel Moolenaar port = (port == 3) ? 4 : port; 113564220a7eSMarcel Moolenaar *res = port * 8 + ((port > 2) ? 0x18 : 0); 113664220a7eSMarcel Moolenaar return (0); 113764220a7eSMarcel Moolenaar } 113864220a7eSMarcel Moolenaar return (ENXIO); 113964220a7eSMarcel Moolenaar } 114064220a7eSMarcel Moolenaar 114164220a7eSMarcel Moolenaar static int 114222e0612fSJohn Baldwin puc_config_exar(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 114322e0612fSJohn Baldwin intptr_t *res) 114422e0612fSJohn Baldwin { 114522e0612fSJohn Baldwin if (cmd == PUC_CFG_GET_OFS) { 114622e0612fSJohn Baldwin *res = port * 0x200; 114722e0612fSJohn Baldwin return (0); 114822e0612fSJohn Baldwin } 114922e0612fSJohn Baldwin return (ENXIO); 115022e0612fSJohn Baldwin } 115122e0612fSJohn Baldwin 115222e0612fSJohn Baldwin static int 115364220a7eSMarcel Moolenaar puc_config_icbook(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 115464220a7eSMarcel Moolenaar intptr_t *res) 115564220a7eSMarcel Moolenaar { 115664220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_ILR) { 115764220a7eSMarcel Moolenaar *res = PUC_ILR_DIGI; 115864220a7eSMarcel Moolenaar return (0); 115964220a7eSMarcel Moolenaar } 116064220a7eSMarcel Moolenaar return (ENXIO); 116164220a7eSMarcel Moolenaar } 116264220a7eSMarcel Moolenaar 116364220a7eSMarcel Moolenaar static int 11642c89ac5eSEitan Adler puc_config_moxa(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 11652c89ac5eSEitan Adler intptr_t *res) 11662c89ac5eSEitan Adler { 1167*f83255a5SMax Khon if (cmd == PUC_CFG_GET_OFS) { 11682c89ac5eSEitan Adler *res = ((port == 3) ? 7 : port) * 0x200; 11692c89ac5eSEitan Adler return 0; 11702c89ac5eSEitan Adler } 11712c89ac5eSEitan Adler return (ENXIO); 11722c89ac5eSEitan Adler } 11732c89ac5eSEitan Adler 11742c89ac5eSEitan Adler static int 117564220a7eSMarcel Moolenaar puc_config_quatech(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 117664220a7eSMarcel Moolenaar intptr_t *res) 117764220a7eSMarcel Moolenaar { 117864220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 117964220a7eSMarcel Moolenaar struct puc_bar *bar; 118064220a7eSMarcel Moolenaar uint8_t v0, v1; 118164220a7eSMarcel Moolenaar 118264220a7eSMarcel Moolenaar switch (cmd) { 118364220a7eSMarcel Moolenaar case PUC_CFG_SETUP: 118464220a7eSMarcel Moolenaar /* 118564220a7eSMarcel Moolenaar * Check if the scratchpad register is enabled or if the 118664220a7eSMarcel Moolenaar * interrupt status and options registers are active. 118764220a7eSMarcel Moolenaar */ 118864220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid); 118964220a7eSMarcel Moolenaar if (bar == NULL) 119064220a7eSMarcel Moolenaar return (ENXIO); 119164220a7eSMarcel Moolenaar /* Set DLAB in the LCR register of UART 0. */ 119264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 3, 0x80); 119364220a7eSMarcel Moolenaar /* Write 0 to the SPR register of UART 0. */ 119464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 7, 0); 119564220a7eSMarcel Moolenaar /* Read back the contents of the SPR register of UART 0. */ 119664220a7eSMarcel Moolenaar v0 = bus_read_1(bar->b_res, 7); 119764220a7eSMarcel Moolenaar /* Write a specific value to the SPR register of UART 0. */ 119864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 7, 0x80 + -cfg->clock); 119964220a7eSMarcel Moolenaar /* Read back the contents of the SPR register of UART 0. */ 120064220a7eSMarcel Moolenaar v1 = bus_read_1(bar->b_res, 7); 120164220a7eSMarcel Moolenaar /* Clear DLAB in the LCR register of UART 0. */ 120264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 3, 0); 120364220a7eSMarcel Moolenaar /* Save the two values read-back from the SPR register. */ 120464220a7eSMarcel Moolenaar sc->sc_cfg_data = (v0 << 8) | v1; 120564220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) { 120664220a7eSMarcel Moolenaar /* 120764220a7eSMarcel Moolenaar * The SPR register echoed the two values written 120864220a7eSMarcel Moolenaar * by us. This means that the SPAD jumper is set. 120964220a7eSMarcel Moolenaar */ 121064220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: extra features " 121164220a7eSMarcel Moolenaar "not usable -- SPAD compatibility enabled\n"); 121264220a7eSMarcel Moolenaar return (0); 121364220a7eSMarcel Moolenaar } 121464220a7eSMarcel Moolenaar if (v0 != 0) { 121564220a7eSMarcel Moolenaar /* 121664220a7eSMarcel Moolenaar * The first value doesn't match. This can only mean 121764220a7eSMarcel Moolenaar * that the SPAD jumper is not set and that a non- 121864220a7eSMarcel Moolenaar * standard fixed clock multiplier jumper is set. 121964220a7eSMarcel Moolenaar */ 122064220a7eSMarcel Moolenaar if (bootverbose) 122164220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "fixed clock rate " 122264220a7eSMarcel Moolenaar "multiplier of %d\n", 1 << v0); 122364220a7eSMarcel Moolenaar if (v0 < -cfg->clock) 122464220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: " 122564220a7eSMarcel Moolenaar "suboptimal fixed clock rate multiplier " 122664220a7eSMarcel Moolenaar "setting\n"); 122764220a7eSMarcel Moolenaar return (0); 122864220a7eSMarcel Moolenaar } 122964220a7eSMarcel Moolenaar /* 123064220a7eSMarcel Moolenaar * The first value matched, but the second didn't. We know 123164220a7eSMarcel Moolenaar * that the SPAD jumper is not set. We also know that the 123264220a7eSMarcel Moolenaar * clock rate multiplier is software controlled *and* that 123364220a7eSMarcel Moolenaar * we just programmed it to the maximum allowed. 123464220a7eSMarcel Moolenaar */ 123564220a7eSMarcel Moolenaar if (bootverbose) 123664220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "clock rate multiplier of " 123764220a7eSMarcel Moolenaar "%d selected\n", 1 << -cfg->clock); 123864220a7eSMarcel Moolenaar return (0); 123964220a7eSMarcel Moolenaar case PUC_CFG_GET_CLOCK: 124064220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff; 124164220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff; 124264220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) { 124364220a7eSMarcel Moolenaar /* 124464220a7eSMarcel Moolenaar * XXX With the SPAD jumper applied, there's no 124564220a7eSMarcel Moolenaar * easy way of knowing if there's also a clock 124664220a7eSMarcel Moolenaar * rate multiplier jumper installed. Let's hope 124764220a7eSMarcel Moolenaar * not... 124864220a7eSMarcel Moolenaar */ 124964220a7eSMarcel Moolenaar *res = DEFAULT_RCLK; 125064220a7eSMarcel Moolenaar } else if (v0 == 0) { 125164220a7eSMarcel Moolenaar /* 125264220a7eSMarcel Moolenaar * No clock rate multiplier jumper installed, 125364220a7eSMarcel Moolenaar * so we programmed the board with the maximum 125464220a7eSMarcel Moolenaar * multiplier allowed as given to us in the 125564220a7eSMarcel Moolenaar * clock field of the config record (negated). 125664220a7eSMarcel Moolenaar */ 125764220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << -cfg->clock; 125864220a7eSMarcel Moolenaar } else 125964220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << v0; 126064220a7eSMarcel Moolenaar return (0); 126164220a7eSMarcel Moolenaar case PUC_CFG_GET_ILR: 126264220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff; 126364220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff; 126464220a7eSMarcel Moolenaar *res = (v0 == 0 && v1 == 0x80 + -cfg->clock) 126564220a7eSMarcel Moolenaar ? PUC_ILR_NONE : PUC_ILR_QUATECH; 126664220a7eSMarcel Moolenaar return (0); 126764220a7eSMarcel Moolenaar default: 126864220a7eSMarcel Moolenaar break; 126964220a7eSMarcel Moolenaar } 127064220a7eSMarcel Moolenaar return (ENXIO); 127164220a7eSMarcel Moolenaar } 127264220a7eSMarcel Moolenaar 127364220a7eSMarcel Moolenaar static int 127464220a7eSMarcel Moolenaar puc_config_syba(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 127564220a7eSMarcel Moolenaar intptr_t *res) 127664220a7eSMarcel Moolenaar { 127764220a7eSMarcel Moolenaar static int base[] = { 0x251, 0x3f0, 0 }; 127864220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 127964220a7eSMarcel Moolenaar struct puc_bar *bar; 128064220a7eSMarcel Moolenaar int efir, idx, ofs; 128164220a7eSMarcel Moolenaar uint8_t v; 128264220a7eSMarcel Moolenaar 128364220a7eSMarcel Moolenaar switch (cmd) { 128464220a7eSMarcel Moolenaar case PUC_CFG_SETUP: 128564220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid); 128664220a7eSMarcel Moolenaar if (bar == NULL) 128764220a7eSMarcel Moolenaar return (ENXIO); 128864220a7eSMarcel Moolenaar 128964220a7eSMarcel Moolenaar /* configure both W83877TFs */ 129064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0x89); 129164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87); 129264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87); 129364220a7eSMarcel Moolenaar idx = 0; 129464220a7eSMarcel Moolenaar while (base[idx] != 0) { 129564220a7eSMarcel Moolenaar efir = base[idx]; 129664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x09); 129764220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1); 129864220a7eSMarcel Moolenaar if ((v & 0x0f) != 0x0c) 129964220a7eSMarcel Moolenaar return (ENXIO); 130064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 130164220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1); 130264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 130364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v | 0x04); 130464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 130564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v & ~0x04); 130664220a7eSMarcel Moolenaar ofs = base[idx] & 0x300; 130764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x23); 130864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0x78) >> 2); 130964220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x24); 131064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xf8) >> 2); 131164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x25); 131264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xe8) >> 2); 131364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x17); 131464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x03); 131564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x28); 131664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x43); 131764220a7eSMarcel Moolenaar idx++; 131864220a7eSMarcel Moolenaar } 131964220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0xaa); 132064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0xaa); 132164220a7eSMarcel Moolenaar return (0); 132264220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 132364220a7eSMarcel Moolenaar switch (port) { 132464220a7eSMarcel Moolenaar case 0: 132564220a7eSMarcel Moolenaar *res = 0x2f8; 132664220a7eSMarcel Moolenaar return (0); 132764220a7eSMarcel Moolenaar case 1: 132864220a7eSMarcel Moolenaar *res = 0x2e8; 132964220a7eSMarcel Moolenaar return (0); 133064220a7eSMarcel Moolenaar case 2: 133164220a7eSMarcel Moolenaar *res = 0x3f8; 133264220a7eSMarcel Moolenaar return (0); 133364220a7eSMarcel Moolenaar case 3: 133464220a7eSMarcel Moolenaar *res = 0x3e8; 133564220a7eSMarcel Moolenaar return (0); 133664220a7eSMarcel Moolenaar case 4: 133764220a7eSMarcel Moolenaar *res = 0x278; 133864220a7eSMarcel Moolenaar return (0); 133964220a7eSMarcel Moolenaar } 134064220a7eSMarcel Moolenaar break; 134164220a7eSMarcel Moolenaar default: 134264220a7eSMarcel Moolenaar break; 134364220a7eSMarcel Moolenaar } 134464220a7eSMarcel Moolenaar return (ENXIO); 134564220a7eSMarcel Moolenaar } 134664220a7eSMarcel Moolenaar 134764220a7eSMarcel Moolenaar static int 134864220a7eSMarcel Moolenaar puc_config_siig(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 134964220a7eSMarcel Moolenaar intptr_t *res) 135064220a7eSMarcel Moolenaar { 135164220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 135264220a7eSMarcel Moolenaar 135364220a7eSMarcel Moolenaar switch (cmd) { 135464220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 135564220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) { 135664220a7eSMarcel Moolenaar *res = (port > 4) ? 8 * (port - 4) : 0; 135764220a7eSMarcel Moolenaar return (0); 135864220a7eSMarcel Moolenaar } 135964220a7eSMarcel Moolenaar break; 136064220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 136164220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) { 136264220a7eSMarcel Moolenaar *res = 0x10 + ((port > 4) ? 0x10 : 4 * port); 136364220a7eSMarcel Moolenaar return (0); 136464220a7eSMarcel Moolenaar } 136564220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_2S1P) { 136664220a7eSMarcel Moolenaar switch (port) { 136764220a7eSMarcel Moolenaar case 0: *res = 0x10; return (0); 136864220a7eSMarcel Moolenaar case 1: *res = 0x14; return (0); 136964220a7eSMarcel Moolenaar case 2: *res = 0x1c; return (0); 137064220a7eSMarcel Moolenaar } 137164220a7eSMarcel Moolenaar } 137264220a7eSMarcel Moolenaar break; 137364220a7eSMarcel Moolenaar default: 137464220a7eSMarcel Moolenaar break; 137564220a7eSMarcel Moolenaar } 137664220a7eSMarcel Moolenaar return (ENXIO); 137764220a7eSMarcel Moolenaar } 137864220a7eSMarcel Moolenaar 137964220a7eSMarcel Moolenaar static int 138064220a7eSMarcel Moolenaar puc_config_timedia(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 138164220a7eSMarcel Moolenaar intptr_t *res) 138264220a7eSMarcel Moolenaar { 138364220a7eSMarcel Moolenaar static uint16_t dual[] = { 138464220a7eSMarcel Moolenaar 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085, 138564220a7eSMarcel Moolenaar 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079, 138664220a7eSMarcel Moolenaar 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079, 138764220a7eSMarcel Moolenaar 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079, 138864220a7eSMarcel Moolenaar 0xD079, 0 138964220a7eSMarcel Moolenaar }; 139064220a7eSMarcel Moolenaar static uint16_t quad[] = { 139164220a7eSMarcel Moolenaar 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157, 139264220a7eSMarcel Moolenaar 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159, 139364220a7eSMarcel Moolenaar 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056, 139464220a7eSMarcel Moolenaar 0xB157, 0 139564220a7eSMarcel Moolenaar }; 139664220a7eSMarcel Moolenaar static uint16_t octa[] = { 139764220a7eSMarcel Moolenaar 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166, 139864220a7eSMarcel Moolenaar 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0 139964220a7eSMarcel Moolenaar }; 140064220a7eSMarcel Moolenaar static struct { 140164220a7eSMarcel Moolenaar int ports; 140264220a7eSMarcel Moolenaar uint16_t *ids; 140364220a7eSMarcel Moolenaar } subdevs[] = { 140464220a7eSMarcel Moolenaar { 2, dual }, 140564220a7eSMarcel Moolenaar { 4, quad }, 140664220a7eSMarcel Moolenaar { 8, octa }, 140764220a7eSMarcel Moolenaar { 0, NULL } 140864220a7eSMarcel Moolenaar }; 140964220a7eSMarcel Moolenaar static char desc[64]; 141064220a7eSMarcel Moolenaar int dev, id; 141164220a7eSMarcel Moolenaar uint16_t subdev; 141264220a7eSMarcel Moolenaar 141364220a7eSMarcel Moolenaar switch (cmd) { 14149c418f51SJohn Baldwin case PUC_CFG_GET_CLOCK: 14159c418f51SJohn Baldwin if (port < 2) 14169c418f51SJohn Baldwin *res = DEFAULT_RCLK * 8; 14179c418f51SJohn Baldwin else 14189c418f51SJohn Baldwin *res = DEFAULT_RCLK; 14199c418f51SJohn Baldwin return (0); 142064220a7eSMarcel Moolenaar case PUC_CFG_GET_DESC: 142164220a7eSMarcel Moolenaar snprintf(desc, sizeof(desc), 142264220a7eSMarcel Moolenaar "Timedia technology %d Port Serial", (int)sc->sc_cfg_data); 142364220a7eSMarcel Moolenaar *res = (intptr_t)desc; 142464220a7eSMarcel Moolenaar return (0); 142564220a7eSMarcel Moolenaar case PUC_CFG_GET_NPORTS: 142664220a7eSMarcel Moolenaar subdev = pci_get_subdevice(sc->sc_dev); 142764220a7eSMarcel Moolenaar dev = 0; 142864220a7eSMarcel Moolenaar while (subdevs[dev].ports != 0) { 142964220a7eSMarcel Moolenaar id = 0; 143064220a7eSMarcel Moolenaar while (subdevs[dev].ids[id] != 0) { 143164220a7eSMarcel Moolenaar if (subdev == subdevs[dev].ids[id]) { 143264220a7eSMarcel Moolenaar sc->sc_cfg_data = subdevs[dev].ports; 143364220a7eSMarcel Moolenaar *res = sc->sc_cfg_data; 143464220a7eSMarcel Moolenaar return (0); 143564220a7eSMarcel Moolenaar } 143664220a7eSMarcel Moolenaar id++; 143764220a7eSMarcel Moolenaar } 143864220a7eSMarcel Moolenaar dev++; 143964220a7eSMarcel Moolenaar } 144064220a7eSMarcel Moolenaar return (ENXIO); 144164220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 144264220a7eSMarcel Moolenaar *res = (port == 1 || port == 3) ? 8 : 0; 144364220a7eSMarcel Moolenaar return (0); 144464220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 1445c1163871SMarcel Moolenaar *res = 0x10 + ((port > 3) ? port - 2 : port >> 1) * 4; 144664220a7eSMarcel Moolenaar return (0); 144764220a7eSMarcel Moolenaar case PUC_CFG_GET_TYPE: 144864220a7eSMarcel Moolenaar *res = PUC_TYPE_SERIAL; 144964220a7eSMarcel Moolenaar return (0); 145064220a7eSMarcel Moolenaar default: 145164220a7eSMarcel Moolenaar break; 145264220a7eSMarcel Moolenaar } 145364220a7eSMarcel Moolenaar return (ENXIO); 145464220a7eSMarcel Moolenaar } 145564220a7eSMarcel Moolenaar 145664220a7eSMarcel Moolenaar static int 14576e9f075aSJohn Baldwin puc_config_oxford_pcie(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 14586e9f075aSJohn Baldwin intptr_t *res) 14596e9f075aSJohn Baldwin { 14606e9f075aSJohn Baldwin const struct puc_cfg *cfg = sc->sc_cfg; 14616e9f075aSJohn Baldwin int idx; 14626e9f075aSJohn Baldwin struct puc_bar *bar; 14636e9f075aSJohn Baldwin uint8_t value; 14646e9f075aSJohn Baldwin 14656e9f075aSJohn Baldwin switch (cmd) { 14666e9f075aSJohn Baldwin case PUC_CFG_SETUP: 14676e9f075aSJohn Baldwin device_printf(sc->sc_dev, "%d UARTs detected\n", 14686e9f075aSJohn Baldwin sc->sc_nports); 14696e9f075aSJohn Baldwin 14706e9f075aSJohn Baldwin /* Set UARTs to enhanced mode */ 14716e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid); 14726e9f075aSJohn Baldwin if (bar == NULL) 14736e9f075aSJohn Baldwin return (ENXIO); 14746e9f075aSJohn Baldwin for (idx = 0; idx < sc->sc_nports; idx++) { 1475a59f78daSJohn Baldwin value = bus_read_1(bar->b_res, 0x1000 + (idx << 9) + 1476a59f78daSJohn Baldwin 0x92); 14776e9f075aSJohn Baldwin bus_write_1(bar->b_res, 0x1000 + (idx << 9) + 0x92, 14786e9f075aSJohn Baldwin value | 0x10); 14796e9f075aSJohn Baldwin } 14806e9f075aSJohn Baldwin return (0); 14816e9f075aSJohn Baldwin case PUC_CFG_GET_LEN: 14826e9f075aSJohn Baldwin *res = 0x200; 14836e9f075aSJohn Baldwin return (0); 14846e9f075aSJohn Baldwin case PUC_CFG_GET_NPORTS: 14856e9f075aSJohn Baldwin /* 14866e9f075aSJohn Baldwin * Check if we are being called from puc_bfe_attach() 14876e9f075aSJohn Baldwin * or puc_bfe_probe(). If puc_bfe_probe(), we cannot 14886e9f075aSJohn Baldwin * puc_get_bar(), so we return a value of 16. This has cosmetic 14896e9f075aSJohn Baldwin * side-effects at worst; in PUC_CFG_GET_DESC, 14906e9f075aSJohn Baldwin * (int)sc->sc_cfg_data will not contain the true number of 14916e9f075aSJohn Baldwin * ports in PUC_CFG_GET_DESC, but we are not implementing that 14926e9f075aSJohn Baldwin * call for this device family anyway. 14936e9f075aSJohn Baldwin * 14946e9f075aSJohn Baldwin * The check is for initialisation of sc->sc_bar[idx], which is 14956e9f075aSJohn Baldwin * only done in puc_bfe_attach(). 14966e9f075aSJohn Baldwin */ 14976e9f075aSJohn Baldwin idx = 0; 14986e9f075aSJohn Baldwin do { 14996e9f075aSJohn Baldwin if (sc->sc_bar[idx++].b_rid != -1) { 15006e9f075aSJohn Baldwin sc->sc_cfg_data = 16; 15016e9f075aSJohn Baldwin *res = sc->sc_cfg_data; 15026e9f075aSJohn Baldwin return (0); 15036e9f075aSJohn Baldwin } 15046e9f075aSJohn Baldwin } while (idx < PUC_PCI_BARS); 15056e9f075aSJohn Baldwin 15066e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid); 15076e9f075aSJohn Baldwin if (bar == NULL) 15086e9f075aSJohn Baldwin return (ENXIO); 15096e9f075aSJohn Baldwin 15106e9f075aSJohn Baldwin value = bus_read_1(bar->b_res, 0x04); 15116e9f075aSJohn Baldwin if (value == 0) 15126e9f075aSJohn Baldwin return (ENXIO); 15136e9f075aSJohn Baldwin 15146e9f075aSJohn Baldwin sc->sc_cfg_data = value; 15156e9f075aSJohn Baldwin *res = sc->sc_cfg_data; 15166e9f075aSJohn Baldwin return (0); 15176e9f075aSJohn Baldwin case PUC_CFG_GET_OFS: 15186e9f075aSJohn Baldwin *res = 0x1000 + (port << 9); 15196e9f075aSJohn Baldwin return (0); 15206e9f075aSJohn Baldwin case PUC_CFG_GET_TYPE: 15216e9f075aSJohn Baldwin *res = PUC_TYPE_SERIAL; 15226e9f075aSJohn Baldwin return (0); 15236e9f075aSJohn Baldwin default: 15246e9f075aSJohn Baldwin break; 15256e9f075aSJohn Baldwin } 15266e9f075aSJohn Baldwin return (ENXIO); 15276e9f075aSJohn Baldwin } 15286e9f075aSJohn Baldwin 15296e9f075aSJohn Baldwin static int 153064220a7eSMarcel Moolenaar puc_config_titan(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 153164220a7eSMarcel Moolenaar intptr_t *res) 153264220a7eSMarcel Moolenaar { 153364220a7eSMarcel Moolenaar switch (cmd) { 153464220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 153564220a7eSMarcel Moolenaar *res = (port < 3) ? 0 : (port - 2) << 3; 153664220a7eSMarcel Moolenaar return (0); 153764220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 153864220a7eSMarcel Moolenaar *res = 0x14 + ((port >= 2) ? 0x0c : port << 2); 153964220a7eSMarcel Moolenaar return (0); 154064220a7eSMarcel Moolenaar default: 154164220a7eSMarcel Moolenaar break; 154264220a7eSMarcel Moolenaar } 154364220a7eSMarcel Moolenaar return (ENXIO); 154464220a7eSMarcel Moolenaar } 1545