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; 54a59f78daSJohn Baldwin static puc_config_f puc_config_oxford_pcie; 5564220a7eSMarcel Moolenaar static puc_config_f puc_config_quatech; 5664220a7eSMarcel Moolenaar static puc_config_f puc_config_syba; 5764220a7eSMarcel Moolenaar static puc_config_f puc_config_siig; 5864220a7eSMarcel Moolenaar static puc_config_f puc_config_timedia; 5964220a7eSMarcel Moolenaar static puc_config_f puc_config_titan; 60dc7d0deaSMarcel Moolenaar 6164220a7eSMarcel Moolenaar const struct puc_cfg puc_pci_devices[] = { 62a27ffb41SDavid E. O'Brien 6364220a7eSMarcel Moolenaar { 0x0009, 0x7168, 0xffff, 0, 6464220a7eSMarcel Moolenaar "Sunix SUN1889", 6564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 6664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 670efcc68bSBruce Evans }, 680efcc68bSBruce Evans 6964220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1049, 7064220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Tosca Console", 7164220a7eSMarcel Moolenaar DEFAULT_RCLK, 7264220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 7364220a7eSMarcel Moolenaar .config_function = puc_config_diva 74dc7d0deaSMarcel Moolenaar }, 75dc7d0deaSMarcel Moolenaar 7664220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x104a, 7764220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Tosca Secondary", 7864220a7eSMarcel Moolenaar DEFAULT_RCLK, 7964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, -1, 8064220a7eSMarcel Moolenaar .config_function = puc_config_diva 81a27ffb41SDavid E. O'Brien }, 82a27ffb41SDavid E. O'Brien 8364220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x104b, 8464220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Maestro SP2", 8564220a7eSMarcel Moolenaar DEFAULT_RCLK, 8664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, -1, 8764220a7eSMarcel Moolenaar .config_function = puc_config_diva 88a27ffb41SDavid E. O'Brien }, 89a27ffb41SDavid E. O'Brien 9064220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1223, 9164220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Superdome Console", 9264220a7eSMarcel Moolenaar DEFAULT_RCLK, 9364220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 9464220a7eSMarcel Moolenaar .config_function = puc_config_diva 95a27ffb41SDavid E. O'Brien }, 96a27ffb41SDavid E. O'Brien 9764220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1226, 9864220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Keystone SP2", 9964220a7eSMarcel Moolenaar DEFAULT_RCLK, 10064220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 10164220a7eSMarcel Moolenaar .config_function = puc_config_diva 102a27ffb41SDavid E. O'Brien }, 103a27ffb41SDavid E. O'Brien 10464220a7eSMarcel Moolenaar { 0x103c, 0x1048, 0x103c, 0x1282, 10564220a7eSMarcel Moolenaar "HP Diva Serial [GSP] Multiport UART - Everest SP2", 10664220a7eSMarcel Moolenaar DEFAULT_RCLK, 10764220a7eSMarcel Moolenaar PUC_PORT_3S, 0x10, 0, -1, 10864220a7eSMarcel Moolenaar .config_function = puc_config_diva 109a27ffb41SDavid E. O'Brien }, 110a27ffb41SDavid E. O'Brien 11164220a7eSMarcel Moolenaar { 0x10b5, 0x1076, 0x10b5, 0x1076, 11264220a7eSMarcel Moolenaar "VScom PCI-800", 11364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 11464220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 1152569e387SDavid E. O'Brien }, 11664220a7eSMarcel Moolenaar 11764220a7eSMarcel Moolenaar { 0x10b5, 0x1077, 0x10b5, 0x1077, 11864220a7eSMarcel Moolenaar "VScom PCI-400", 11964220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 12064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 1212569e387SDavid E. O'Brien }, 12264220a7eSMarcel Moolenaar 12364220a7eSMarcel Moolenaar { 0x10b5, 0x1103, 0x10b5, 0x1103, 12464220a7eSMarcel Moolenaar "VScom PCI-200", 12564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 12664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 1272569e387SDavid E. O'Brien }, 128a27ffb41SDavid E. O'Brien 1299c564b6cSJohn Hay /* 13064220a7eSMarcel Moolenaar * Boca Research Turbo Serial 658 (8 serial port) card. 13164220a7eSMarcel Moolenaar * Appears to be the same as Chase Research PLC PCI-FAST8 13264220a7eSMarcel Moolenaar * and Perle PCI-FAST8 Multi-Port serial cards. 1339c564b6cSJohn Hay */ 13464220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0x12e0, 0x0021, 13564220a7eSMarcel Moolenaar "Boca Research Turbo Serial 658", 13664220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 13764220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 1389c564b6cSJohn Hay }, 1399c564b6cSJohn Hay 14064220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0x12e0, 0x0031, 14164220a7eSMarcel Moolenaar "Boca Research Turbo Serial 654", 14264220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 14364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 14464220a7eSMarcel Moolenaar }, 1459c564b6cSJohn Hay 1469c564b6cSJohn Hay /* 1479c564b6cSJohn Hay * Dolphin Peripherals 4035 (dual serial port) card. PLX 9050, with 1489c564b6cSJohn Hay * a seemingly-lame EEPROM setup that puts the Dolphin IDs 1499c564b6cSJohn Hay * into the subsystem fields, and claims that it's a 1509c564b6cSJohn Hay * network/misc (0x02/0x80) device. 1519c564b6cSJohn Hay */ 15264220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0xd84d, 0x6808, 15364220a7eSMarcel Moolenaar "Dolphin Peripherals 4035", 15464220a7eSMarcel Moolenaar DEFAULT_RCLK, 15564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 1569c564b6cSJohn Hay }, 1579c564b6cSJohn Hay 1589c564b6cSJohn Hay /* 15964220a7eSMarcel Moolenaar * Dolphin Peripherals 4014 (dual parallel port) card. PLX 9050, with 16064220a7eSMarcel Moolenaar * a seemingly-lame EEPROM setup that puts the Dolphin IDs 16164220a7eSMarcel Moolenaar * into the subsystem fields, and claims that it's a 16264220a7eSMarcel Moolenaar * network/misc (0x02/0x80) device. 1639c564b6cSJohn Hay */ 16464220a7eSMarcel Moolenaar { 0x10b5, 0x9050, 0xd84d, 0x6810, 16564220a7eSMarcel Moolenaar "Dolphin Peripherals 4014", 16664220a7eSMarcel Moolenaar 0, 16764220a7eSMarcel Moolenaar PUC_PORT_2P, 0x20, 4, 0, 1689c564b6cSJohn Hay }, 1699c564b6cSJohn Hay 17064220a7eSMarcel Moolenaar { 0x10e8, 0x818e, 0xffff, 0, 17164220a7eSMarcel Moolenaar "Applied Micro Circuits 8 Port UART", 17264220a7eSMarcel Moolenaar DEFAULT_RCLK, 17364220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1, 17464220a7eSMarcel Moolenaar .config_function = puc_config_amc 17564220a7eSMarcel Moolenaar }, 1769c564b6cSJohn Hay 17764220a7eSMarcel Moolenaar { 0x11fe, 0x8010, 0xffff, 0, 17864220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 RJ11 part A", 17964220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 18064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 18164220a7eSMarcel Moolenaar }, 18264220a7eSMarcel Moolenaar 18364220a7eSMarcel Moolenaar { 0x11fe, 0x8011, 0xffff, 0, 18464220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 RJ11 part B", 18564220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 18664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 18764220a7eSMarcel Moolenaar }, 18864220a7eSMarcel Moolenaar 18964220a7eSMarcel Moolenaar { 0x11fe, 0x8012, 0xffff, 0, 19064220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 Octa part A", 19164220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 19264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 19364220a7eSMarcel Moolenaar }, 19464220a7eSMarcel Moolenaar 19564220a7eSMarcel Moolenaar { 0x11fe, 0x8013, 0xffff, 0, 19664220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 Octa part B", 19764220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 19864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 19964220a7eSMarcel Moolenaar }, 20064220a7eSMarcel Moolenaar 20164220a7eSMarcel Moolenaar { 0x11fe, 0x8014, 0xffff, 0, 20264220a7eSMarcel Moolenaar "Comtrol RocketPort 550/4 RJ45", 20364220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 20464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 20564220a7eSMarcel Moolenaar }, 20664220a7eSMarcel Moolenaar 20764220a7eSMarcel Moolenaar { 0x11fe, 0x8015, 0xffff, 0, 20864220a7eSMarcel Moolenaar "Comtrol RocketPort 550/Quad", 20964220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 21064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 21164220a7eSMarcel Moolenaar }, 21264220a7eSMarcel Moolenaar 21364220a7eSMarcel Moolenaar { 0x11fe, 0x8016, 0xffff, 0, 21464220a7eSMarcel Moolenaar "Comtrol RocketPort 550/16 part A", 21564220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 21664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 21764220a7eSMarcel Moolenaar }, 21864220a7eSMarcel Moolenaar 21964220a7eSMarcel Moolenaar { 0x11fe, 0x8017, 0xffff, 0, 22064220a7eSMarcel Moolenaar "Comtrol RocketPort 550/16 part B", 22164220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 22264220a7eSMarcel Moolenaar PUC_PORT_12S, 0x10, 0, 8, 22364220a7eSMarcel Moolenaar }, 22464220a7eSMarcel Moolenaar 22564220a7eSMarcel Moolenaar { 0x11fe, 0x8018, 0xffff, 0, 22664220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 part A", 22764220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 22864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 22964220a7eSMarcel Moolenaar }, 23064220a7eSMarcel Moolenaar 23164220a7eSMarcel Moolenaar { 0x11fe, 0x8019, 0xffff, 0, 23264220a7eSMarcel Moolenaar "Comtrol RocketPort 550/8 part B", 23364220a7eSMarcel Moolenaar DEFAULT_RCLK * 4, 23464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 23564220a7eSMarcel Moolenaar }, 2369c564b6cSJohn Hay 2379c564b6cSJohn Hay /* 23863fbf504SRobert Watson * IBM SurePOS 300 Series (481033H) serial ports 23963fbf504SRobert Watson * Details can be found on the IBM RSS websites 24063fbf504SRobert Watson */ 24163fbf504SRobert Watson 24263fbf504SRobert Watson { 0x1014, 0x0297, 0xffff, 0, 24363fbf504SRobert Watson "IBM SurePOS 300 Series (481033H) serial ports", 24463fbf504SRobert Watson DEFAULT_RCLK, 24563fbf504SRobert Watson PUC_PORT_4S, 0x10, 4, 0 24663fbf504SRobert Watson }, 24763fbf504SRobert Watson 24863fbf504SRobert Watson /* 2499c564b6cSJohn Hay * SIIG Boards. 2509c564b6cSJohn Hay * 2519c564b6cSJohn Hay * SIIG provides documentation for their boards at: 25264220a7eSMarcel Moolenaar * <URL:http://www.siig.com/downloads.asp> 2539c564b6cSJohn Hay */ 2549c564b6cSJohn Hay 25564220a7eSMarcel Moolenaar { 0x131f, 0x1010, 0xffff, 0, 25664220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C550 (10x family)", 25764220a7eSMarcel Moolenaar DEFAULT_RCLK, 25864220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2599c564b6cSJohn Hay }, 2609c564b6cSJohn Hay 26164220a7eSMarcel Moolenaar { 0x131f, 0x1011, 0xffff, 0, 26264220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C650 (10x family)", 26364220a7eSMarcel Moolenaar DEFAULT_RCLK, 26464220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2659c564b6cSJohn Hay }, 2669c564b6cSJohn Hay 26764220a7eSMarcel Moolenaar { 0x131f, 0x1012, 0xffff, 0, 26864220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C850 (10x family)", 26964220a7eSMarcel Moolenaar DEFAULT_RCLK, 27064220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x18, 4, 0, 2719c564b6cSJohn Hay }, 2729c564b6cSJohn Hay 27364220a7eSMarcel Moolenaar { 0x131f, 0x1021, 0xffff, 0, 27464220a7eSMarcel Moolenaar "SIIG Cyber Parallel Dual PCI (10x family)", 27564220a7eSMarcel Moolenaar 0, 27664220a7eSMarcel Moolenaar PUC_PORT_2P, 0x18, 8, 0, 2779c564b6cSJohn Hay }, 2789c564b6cSJohn Hay 27964220a7eSMarcel Moolenaar { 0x131f, 0x1030, 0xffff, 0, 28064220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C550 (10x family)", 28164220a7eSMarcel Moolenaar DEFAULT_RCLK, 28264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2839c564b6cSJohn Hay }, 2849c564b6cSJohn Hay 28564220a7eSMarcel Moolenaar { 0x131f, 0x1031, 0xffff, 0, 28664220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C650 (10x family)", 28764220a7eSMarcel Moolenaar DEFAULT_RCLK, 28864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2899c564b6cSJohn Hay }, 2909c564b6cSJohn Hay 29164220a7eSMarcel Moolenaar { 0x131f, 0x1032, 0xffff, 0, 29264220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C850 (10x family)", 29364220a7eSMarcel Moolenaar DEFAULT_RCLK, 29464220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 4, 0, 2959c564b6cSJohn Hay }, 2969c564b6cSJohn Hay 29764220a7eSMarcel Moolenaar { 0x131f, 0x1034, 0xffff, 0, /* XXX really? */ 29864220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C550 (10x family)", 29964220a7eSMarcel Moolenaar DEFAULT_RCLK, 30064220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3019c564b6cSJohn Hay }, 3029c564b6cSJohn Hay 30364220a7eSMarcel Moolenaar { 0x131f, 0x1035, 0xffff, 0, /* XXX really? */ 30464220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C650 (10x family)", 30564220a7eSMarcel Moolenaar DEFAULT_RCLK, 30664220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3079c564b6cSJohn Hay }, 3089c564b6cSJohn Hay 30964220a7eSMarcel Moolenaar { 0x131f, 0x1036, 0xffff, 0, /* XXX really? */ 31064220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C850 (10x family)", 31164220a7eSMarcel Moolenaar DEFAULT_RCLK, 31264220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x18, 4, 0, 3139c564b6cSJohn Hay }, 3149c564b6cSJohn Hay 31564220a7eSMarcel Moolenaar { 0x131f, 0x1050, 0xffff, 0, 31664220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C550 (10x family)", 31764220a7eSMarcel Moolenaar DEFAULT_RCLK, 31864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3199c564b6cSJohn Hay }, 3209c564b6cSJohn Hay 32164220a7eSMarcel Moolenaar { 0x131f, 0x1051, 0xffff, 0, 32264220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (10x family)", 32364220a7eSMarcel Moolenaar DEFAULT_RCLK, 32464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3259c564b6cSJohn Hay }, 3269c564b6cSJohn Hay 32764220a7eSMarcel Moolenaar { 0x131f, 0x1052, 0xffff, 0, 32864220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C850 (10x family)", 32964220a7eSMarcel Moolenaar DEFAULT_RCLK, 33064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 4, 0, 3319c564b6cSJohn Hay }, 3329c564b6cSJohn Hay 33364220a7eSMarcel Moolenaar { 0x131f, 0x2010, 0xffff, 0, 33464220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C550 (20x family)", 33564220a7eSMarcel Moolenaar DEFAULT_RCLK, 33664220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3379c564b6cSJohn Hay }, 3389c564b6cSJohn Hay 33964220a7eSMarcel Moolenaar { 0x131f, 0x2011, 0xffff, 0, 34064220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C650 (20x family)", 34164220a7eSMarcel Moolenaar DEFAULT_RCLK, 34264220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3439c564b6cSJohn Hay }, 3449c564b6cSJohn Hay 34564220a7eSMarcel Moolenaar { 0x131f, 0x2012, 0xffff, 0, 34664220a7eSMarcel Moolenaar "SIIG Cyber I/O PCI 16C850 (20x family)", 34764220a7eSMarcel Moolenaar DEFAULT_RCLK, 34864220a7eSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 3499c564b6cSJohn Hay }, 3509c564b6cSJohn Hay 35164220a7eSMarcel Moolenaar { 0x131f, 0x2021, 0xffff, 0, 35264220a7eSMarcel Moolenaar "SIIG Cyber Parallel Dual PCI (20x family)", 35364220a7eSMarcel Moolenaar 0, 35464220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0, 3559c564b6cSJohn Hay }, 3569c564b6cSJohn Hay 35764220a7eSMarcel Moolenaar { 0x131f, 0x2030, 0xffff, 0, 35864220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C550 (20x family)", 35964220a7eSMarcel Moolenaar DEFAULT_RCLK, 36064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3619c564b6cSJohn Hay }, 3629c564b6cSJohn Hay 36364220a7eSMarcel Moolenaar { 0x131f, 0x2031, 0xffff, 0, 36464220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C650 (20x family)", 36564220a7eSMarcel Moolenaar DEFAULT_RCLK, 36664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3679c564b6cSJohn Hay }, 3689c564b6cSJohn Hay 36964220a7eSMarcel Moolenaar { 0x131f, 0x2032, 0xffff, 0, 37064220a7eSMarcel Moolenaar "SIIG Cyber Serial Dual PCI 16C850 (20x family)", 37164220a7eSMarcel Moolenaar DEFAULT_RCLK, 37264220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 3739c564b6cSJohn Hay }, 3749c564b6cSJohn Hay 37564220a7eSMarcel Moolenaar { 0x131f, 0x2040, 0xffff, 0, 37664220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C550 (20x family)", 37764220a7eSMarcel Moolenaar DEFAULT_RCLK, 37864220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 37964220a7eSMarcel Moolenaar .config_function = puc_config_siig 3809c564b6cSJohn Hay }, 3819c564b6cSJohn Hay 38264220a7eSMarcel Moolenaar { 0x131f, 0x2041, 0xffff, 0, 38364220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C650 (20x family)", 38464220a7eSMarcel Moolenaar DEFAULT_RCLK, 38564220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 38664220a7eSMarcel Moolenaar .config_function = puc_config_siig 3879c564b6cSJohn Hay }, 3889c564b6cSJohn Hay 38964220a7eSMarcel Moolenaar { 0x131f, 0x2042, 0xffff, 0, 39064220a7eSMarcel Moolenaar "SIIG Cyber 2P1S PCI 16C850 (20x family)", 39164220a7eSMarcel Moolenaar DEFAULT_RCLK, 39264220a7eSMarcel Moolenaar PUC_PORT_1S2P, 0x10, -1, 0, 39364220a7eSMarcel Moolenaar .config_function = puc_config_siig 3949c564b6cSJohn Hay }, 3959c564b6cSJohn Hay 39664220a7eSMarcel Moolenaar { 0x131f, 0x2050, 0xffff, 0, 39764220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C550 (20x family)", 39864220a7eSMarcel Moolenaar DEFAULT_RCLK, 39964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4009c564b6cSJohn Hay }, 4019c564b6cSJohn Hay 40264220a7eSMarcel Moolenaar { 0x131f, 0x2051, 0xffff, 0, 40364220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)", 40464220a7eSMarcel Moolenaar DEFAULT_RCLK, 40564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4069c564b6cSJohn Hay }, 4079c564b6cSJohn Hay 40864220a7eSMarcel Moolenaar { 0x131f, 0x2052, 0xffff, 0, 40964220a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C850 (20x family)", 41064220a7eSMarcel Moolenaar DEFAULT_RCLK, 41164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 4129c564b6cSJohn Hay }, 4139c564b6cSJohn Hay 41464220a7eSMarcel Moolenaar { 0x131f, 0x2060, 0xffff, 0, 41564220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C550 (20x family)", 41664220a7eSMarcel Moolenaar DEFAULT_RCLK, 41764220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4189c564b6cSJohn Hay }, 4199c564b6cSJohn Hay 42064220a7eSMarcel Moolenaar { 0x131f, 0x2061, 0xffff, 0, 42164220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C650 (20x family)", 42264220a7eSMarcel Moolenaar DEFAULT_RCLK, 42364220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4249c564b6cSJohn Hay }, 4259c564b6cSJohn Hay 42664220a7eSMarcel Moolenaar { 0x131f, 0x2062, 0xffff, 0, 42764220a7eSMarcel Moolenaar "SIIG Cyber 2S1P PCI 16C850 (20x family)", 42864220a7eSMarcel Moolenaar DEFAULT_RCLK, 42964220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 4309c564b6cSJohn Hay }, 4319c564b6cSJohn Hay 43264220a7eSMarcel Moolenaar { 0x131f, 0x2081, 0xffff, 0, 43364220a7eSMarcel Moolenaar "SIIG PS8000 8S PCI 16C650 (20x family)", 43464220a7eSMarcel Moolenaar DEFAULT_RCLK, 43564220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, -1, -1, 43664220a7eSMarcel Moolenaar .config_function = puc_config_siig 4379c564b6cSJohn Hay }, 4389c564b6cSJohn Hay 43964220a7eSMarcel Moolenaar { 0x135c, 0x0010, 0xffff, 0, 44064220a7eSMarcel Moolenaar "Quatech QSC-100", 44164220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 44264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8, 44364220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4449c564b6cSJohn Hay }, 4459c564b6cSJohn Hay 44664220a7eSMarcel Moolenaar { 0x135c, 0x0020, 0xffff, 0, 44764220a7eSMarcel Moolenaar "Quatech DSC-100", 44864220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 44964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8, 45064220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4519c564b6cSJohn Hay }, 4529c564b6cSJohn Hay 45364220a7eSMarcel Moolenaar { 0x135c, 0x0030, 0xffff, 0, 45464220a7eSMarcel Moolenaar "Quatech DSC-200/300", 45564220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 45664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 0, 8, 45764220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4589c564b6cSJohn Hay }, 4599c564b6cSJohn Hay 46064220a7eSMarcel Moolenaar { 0x135c, 0x0040, 0xffff, 0, 46164220a7eSMarcel Moolenaar "Quatech QSC-200/300", 46264220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 46364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x14, 0, 8, 46464220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4659c564b6cSJohn Hay }, 4669c564b6cSJohn Hay 46764220a7eSMarcel Moolenaar { 0x135c, 0x0050, 0xffff, 0, 46864220a7eSMarcel Moolenaar "Quatech ESC-100D", 46964220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 47064220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8, 47164220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4729c564b6cSJohn Hay }, 4739c564b6cSJohn Hay 47464220a7eSMarcel Moolenaar { 0x135c, 0x0060, 0xffff, 0, 47564220a7eSMarcel Moolenaar "Quatech ESC-100M", 47664220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 47764220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, 0, 8, 47864220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4799c564b6cSJohn Hay }, 4809c564b6cSJohn Hay 48164220a7eSMarcel Moolenaar { 0x135c, 0x0170, 0xffff, 0, 48264220a7eSMarcel Moolenaar "Quatech QSCLP-100", 48364220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 48464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 48564220a7eSMarcel Moolenaar .config_function = puc_config_quatech 4869c564b6cSJohn Hay }, 4879c564b6cSJohn Hay 48864220a7eSMarcel Moolenaar { 0x135c, 0x0180, 0xffff, 0, 48964220a7eSMarcel Moolenaar "Quatech DSCLP-100", 49064220a7eSMarcel Moolenaar -1, /* max 3x clock rate */ 49164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8, 49264220a7eSMarcel Moolenaar .config_function = puc_config_quatech 49376353f68SJohn Hay }, 49476353f68SJohn Hay 49564220a7eSMarcel Moolenaar { 0x135c, 0x01b0, 0xffff, 0, 49664220a7eSMarcel Moolenaar "Quatech DSCLP-200/300", 49764220a7eSMarcel Moolenaar -1, /* max 2x clock rate */ 49864220a7eSMarcel Moolenaar PUC_PORT_2S, 0x18, 0, 8, 49964220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5009c564b6cSJohn Hay }, 5019c564b6cSJohn Hay 50264220a7eSMarcel Moolenaar { 0x135c, 0x01e0, 0xffff, 0, 50364220a7eSMarcel Moolenaar "Quatech ESCLP-100", 50464220a7eSMarcel Moolenaar -3, /* max 8x clock rate */ 50564220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 50664220a7eSMarcel Moolenaar .config_function = puc_config_quatech 5079c564b6cSJohn Hay }, 5089c564b6cSJohn Hay 50964220a7eSMarcel Moolenaar { 0x1393, 0x1040, 0xffff, 0, 51064220a7eSMarcel Moolenaar "Moxa Technologies, Smartio C104H/PCI", 51164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 51264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5130ec6e983SJoerg Wunsch }, 51440f01890SBruce Evans 51564220a7eSMarcel Moolenaar { 0x1393, 0x1041, 0xffff, 0, 51664220a7eSMarcel Moolenaar "Moxa Technologies, Smartio CP-104UL/PCI", 51764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 51864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5199c564b6cSJohn Hay }, 5209c564b6cSJohn Hay 521f6a60febSMaxim Konovalov { 0x1393, 0x1043, 0xffff, 0, 522f6a60febSMaxim Konovalov "Moxa Technologies, Smartio CP-104EL/PCIe", 523f6a60febSMaxim Konovalov DEFAULT_RCLK * 8, 524f6a60febSMaxim Konovalov PUC_PORT_4S, 0x18, 0, 8, 525f6a60febSMaxim Konovalov }, 526f6a60febSMaxim Konovalov 527*8efbf264SJohn Baldwin { 0x1393, 0x1120, 0xffff, 0, 528*8efbf264SJohn Baldwin "Moxa Technologies, CP-112UL", 529*8efbf264SJohn Baldwin DEFAULT_RCLK * 8, 530*8efbf264SJohn Baldwin PUC_PORT_2S, 0x18, 0, 8, 531*8efbf264SJohn Baldwin }, 532*8efbf264SJohn Baldwin 53364220a7eSMarcel Moolenaar { 0x1393, 0x1141, 0xffff, 0, 53464220a7eSMarcel Moolenaar "Moxa Technologies, Industio CP-114", 53564220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 53664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x18, 0, 8, 5379c564b6cSJohn Hay }, 5389c564b6cSJohn Hay 53964220a7eSMarcel Moolenaar { 0x1393, 0x1680, 0xffff, 0, 54064220a7eSMarcel Moolenaar "Moxa Technologies, C168H/PCI", 54164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 54264220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 5439c564b6cSJohn Hay }, 5449c564b6cSJohn Hay 54564220a7eSMarcel Moolenaar { 0x1393, 0x1681, 0xffff, 0, 54664220a7eSMarcel Moolenaar "Moxa Technologies, C168U/PCI", 54764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 54864220a7eSMarcel Moolenaar PUC_PORT_8S, 0x18, 0, 8, 5499c564b6cSJohn Hay }, 5509c564b6cSJohn Hay 5510db1aa0bSStanislav Sedov { 0x1393, 0x1682, 0xffff, 0, 5520db1aa0bSStanislav Sedov "Moxa Technologies, CP-168EL/PCIe", 5530db1aa0bSStanislav Sedov DEFAULT_RCLK * 8, 5540db1aa0bSStanislav Sedov PUC_PORT_8S, 0x18, 0, 8, 5550db1aa0bSStanislav Sedov }, 5560db1aa0bSStanislav Sedov 55722e0612fSJohn Baldwin { 0x13a8, 0x0152, 0xffff, 0, 55822e0612fSJohn Baldwin "Exar XR17C/D152", 55922e0612fSJohn Baldwin DEFAULT_RCLK * 8, 56022e0612fSJohn Baldwin PUC_PORT_2S, 0x10, 0, -1, 56122e0612fSJohn Baldwin .config_function = puc_config_exar 56222e0612fSJohn Baldwin }, 56322e0612fSJohn Baldwin 56422e0612fSJohn Baldwin { 0x13a8, 0x0154, 0xffff, 0, 56522e0612fSJohn Baldwin "Exar XR17C154", 56622e0612fSJohn Baldwin DEFAULT_RCLK * 8, 56722e0612fSJohn Baldwin PUC_PORT_4S, 0x10, 0, -1, 56822e0612fSJohn Baldwin .config_function = puc_config_exar 56922e0612fSJohn Baldwin }, 57022e0612fSJohn Baldwin 57164220a7eSMarcel Moolenaar { 0x13a8, 0x0158, 0xffff, 0, 57222e0612fSJohn Baldwin "Exar XR17C158", 57364220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 57464220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, -1, 57522e0612fSJohn Baldwin .config_function = puc_config_exar 576de0d2cadSJohn Hay }, 577de0d2cadSJohn Hay 57879aac43eSEd Maste { 0x13a8, 0x0258, 0xffff, 0, 57979aac43eSEd Maste "Exar XR17V258IV", 58079aac43eSEd Maste DEFAULT_RCLK * 8, 58179aac43eSEd Maste PUC_PORT_8S, 0x10, 0, -1, 58279aac43eSEd Maste }, 58379aac43eSEd Maste 58464220a7eSMarcel Moolenaar { 0x1407, 0x0100, 0xffff, 0, 58564220a7eSMarcel Moolenaar "Lava Computers Dual Serial", 58664220a7eSMarcel Moolenaar DEFAULT_RCLK, 58764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 5889c564b6cSJohn Hay }, 5899c564b6cSJohn Hay 59064220a7eSMarcel Moolenaar { 0x1407, 0x0101, 0xffff, 0, 59164220a7eSMarcel Moolenaar "Lava Computers Quatro A", 59264220a7eSMarcel Moolenaar DEFAULT_RCLK, 59364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 5949c564b6cSJohn Hay }, 5959c564b6cSJohn Hay 59664220a7eSMarcel Moolenaar { 0x1407, 0x0102, 0xffff, 0, 59764220a7eSMarcel Moolenaar "Lava Computers Quatro B", 59864220a7eSMarcel Moolenaar DEFAULT_RCLK, 59964220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6009c564b6cSJohn Hay }, 6019c564b6cSJohn Hay 60264220a7eSMarcel Moolenaar { 0x1407, 0x0120, 0xffff, 0, 60364220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI A", 60464220a7eSMarcel Moolenaar DEFAULT_RCLK, 60564220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 6069c564b6cSJohn Hay }, 60764220a7eSMarcel Moolenaar 60864220a7eSMarcel Moolenaar { 0x1407, 0x0121, 0xffff, 0, 60964220a7eSMarcel Moolenaar "Lava Computers Quattro-PCI B", 61064220a7eSMarcel Moolenaar DEFAULT_RCLK, 61164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 61264220a7eSMarcel Moolenaar }, 61364220a7eSMarcel Moolenaar 61464220a7eSMarcel Moolenaar { 0x1407, 0x0180, 0xffff, 0, 61564220a7eSMarcel Moolenaar "Lava Computers Octo A", 61664220a7eSMarcel Moolenaar DEFAULT_RCLK, 61764220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 61864220a7eSMarcel Moolenaar }, 61964220a7eSMarcel Moolenaar 62064220a7eSMarcel Moolenaar { 0x1407, 0x0181, 0xffff, 0, 62164220a7eSMarcel Moolenaar "Lava Computers Octo B", 62264220a7eSMarcel Moolenaar DEFAULT_RCLK, 62364220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 62464220a7eSMarcel Moolenaar }, 62564220a7eSMarcel Moolenaar 62613ae6dceSKevin Lo { 0x1409, 0x7268, 0xffff, 0, 62713ae6dceSKevin Lo "Sunix SUN1888", 62813ae6dceSKevin Lo 0, 62913ae6dceSKevin Lo PUC_PORT_2P, 0x10, 0, 8, 63013ae6dceSKevin Lo }, 63113ae6dceSKevin Lo 63264220a7eSMarcel Moolenaar { 0x1409, 0x7168, 0xffff, 0, 63364220a7eSMarcel Moolenaar NULL, 63464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 63564220a7eSMarcel Moolenaar PUC_PORT_NONSTANDARD, 0x10, -1, -1, 63664220a7eSMarcel Moolenaar .config_function = puc_config_timedia 6379c564b6cSJohn Hay }, 6389c564b6cSJohn Hay 6399c564b6cSJohn Hay /* 6409c564b6cSJohn Hay * Boards with an Oxford Semiconductor chip. 6419c564b6cSJohn Hay * 6429c564b6cSJohn Hay * Oxford Semiconductor provides documentation for their chip at: 6436e9f075aSJohn Baldwin * <URL:http://www.plxtech.com/products/uart/> 6449c564b6cSJohn Hay * 6459c564b6cSJohn Hay * As sold by Kouwell <URL:http://www.kouwell.com/>. 6469c564b6cSJohn Hay * I/O Flex PCI I/O Card Model-223 with 4 serial and 1 parallel ports. 6479c564b6cSJohn Hay */ 6489c564b6cSJohn Hay 6490db885bbSDag-Erling Smørgrav { 0x1415, 0x9501, 0x131f, 0x2050, 6500db885bbSDag-Erling Smørgrav "SIIG Cyber 4 PCI 16550", 6510db885bbSDag-Erling Smørgrav DEFAULT_RCLK * 10, 6520db885bbSDag-Erling Smørgrav PUC_PORT_4S, 0x10, 0, 8, 6530db885bbSDag-Erling Smørgrav }, 6540db885bbSDag-Erling Smørgrav 6551d860a7eSMarcel Moolenaar { 0x1415, 0x9501, 0x131f, 0x2051, 6561d860a7eSMarcel Moolenaar "SIIG Cyber 4S PCI 16C650 (20x family)", 6571d860a7eSMarcel Moolenaar DEFAULT_RCLK * 10, 6581d860a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 6591d860a7eSMarcel Moolenaar }, 6601d860a7eSMarcel Moolenaar 66130ced0d8SJohn Baldwin { 0x1415, 0x9501, 0x131f, 0x2052, 66230ced0d8SJohn Baldwin "SIIG Quartet Serial 850", 66330ced0d8SJohn Baldwin DEFAULT_RCLK * 10, 66430ced0d8SJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 66530ced0d8SJohn Baldwin }, 66630ced0d8SJohn Baldwin 667282211eaSJohn Baldwin { 0x1415, 0x9501, 0x14db, 0x2150, 668282211eaSJohn Baldwin "Kuroutoshikou SERIAL4P-LPPCI2", 669282211eaSJohn Baldwin DEFAULT_RCLK * 10, 670282211eaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 671282211eaSJohn Baldwin }, 672282211eaSJohn Baldwin 67364220a7eSMarcel Moolenaar { 0x1415, 0x9501, 0xffff, 0, 674c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs", 675c44bdcb0SDag-Erling Smørgrav DEFAULT_RCLK, 67664220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 67783431653SWarner Losh }, 67883431653SWarner Losh 67910414b71SJohn Baldwin { 0x1415, 0x950a, 0x131f, 0x2030, 68010414b71SJohn Baldwin "SIIG Cyber 2S PCIe", 68110414b71SJohn Baldwin DEFAULT_RCLK * 10, 68210414b71SJohn Baldwin PUC_PORT_2S, 0x10, 0, 8, 68310414b71SJohn Baldwin }, 68410414b71SJohn Baldwin 68564220a7eSMarcel Moolenaar { 0x1415, 0x950a, 0xffff, 0, 686c44bdcb0SDag-Erling Smørgrav "Oxford Semiconductor OX16PCI954 UARTs", 687c44bdcb0SDag-Erling Smørgrav DEFAULT_RCLK, 68864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 6899c564b6cSJohn Hay }, 6909c564b6cSJohn Hay 69164220a7eSMarcel Moolenaar { 0x1415, 0x9511, 0xffff, 0, 69264220a7eSMarcel Moolenaar "Oxford Semiconductor OX9160/OX16PCI954 UARTs (function 1)", 69364220a7eSMarcel Moolenaar DEFAULT_RCLK, 69464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 69543e42f36SDoug Ambrisko }, 69643e42f36SDoug Ambrisko 69764220a7eSMarcel Moolenaar { 0x1415, 0x9521, 0xffff, 0, 69864220a7eSMarcel Moolenaar "Oxford Semiconductor OX16PCI952 UARTs", 69964220a7eSMarcel Moolenaar DEFAULT_RCLK, 70064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 7016cb38a02SDoug Ambrisko }, 7026cb38a02SDoug Ambrisko 70311a12794SRoman Kurakin { 0x1415, 0x9538, 0xffff, 0, 70411a12794SRoman Kurakin "Oxford Semiconductor OX16PCI958 UARTs", 70511a12794SRoman Kurakin DEFAULT_RCLK * 10, 70611a12794SRoman Kurakin PUC_PORT_8S, 0x18, 0, 8, 70711a12794SRoman Kurakin }, 70811a12794SRoman Kurakin 709f09d9fbaSJohn Baldwin /* 710f09d9fbaSJohn Baldwin * Perle boards use Oxford Semiconductor chips, but they store the 711f09d9fbaSJohn Baldwin * Oxford Semiconductor device ID as a subvendor device ID and use 712f09d9fbaSJohn Baldwin * their own device IDs. 713f09d9fbaSJohn Baldwin */ 714f09d9fbaSJohn Baldwin 715f09d9fbaSJohn Baldwin { 0x155f, 0x0331, 0xffff, 0, 716f09d9fbaSJohn Baldwin "Perle Speed4 LE", 717f09d9fbaSJohn Baldwin DEFAULT_RCLK * 8, 718f09d9fbaSJohn Baldwin PUC_PORT_4S, 0x10, 0, 8, 719f09d9fbaSJohn Baldwin }, 720f09d9fbaSJohn Baldwin 7216e9f075aSJohn Baldwin /* 7226e9f075aSJohn Baldwin * Oxford Semiconductor PCI Express Expresso family 7236e9f075aSJohn Baldwin * 7246e9f075aSJohn Baldwin * Found in many 'native' PCI Express serial boards such as: 7256e9f075aSJohn Baldwin * 7266e9f075aSJohn Baldwin * eMegatech MP954ER4 (4 port) and MP958ER8 (8 port) 7276e9f075aSJohn Baldwin * <URL:http://www.emegatech.com.tw/pdrs232pcie.html> 7286e9f075aSJohn Baldwin * 7296e9f075aSJohn Baldwin * Lindy 51189 (4 port) 7306e9f075aSJohn Baldwin * <URL:http://www.lindy.com> <URL:http://tinyurl.com/lindy-51189> 7316e9f075aSJohn Baldwin * 7326e9f075aSJohn Baldwin * StarTech.com PEX4S952 (4 port) and PEX8S952 (8 port) 7336e9f075aSJohn Baldwin * <URL:http://www.startech.com> 7346e9f075aSJohn Baldwin */ 7356e9f075aSJohn Baldwin 7366e9f075aSJohn Baldwin { 0x1415, 0xc158, 0xffff, 0, 7376e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs", 7386e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 7396e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 7406e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 7416e9f075aSJohn Baldwin }, 7426e9f075aSJohn Baldwin 7436e9f075aSJohn Baldwin { 0x1415, 0xc15d, 0xffff, 0, 7446e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe952 UARTs (function 1)", 7456e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 7466e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 7476e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 7486e9f075aSJohn Baldwin }, 7496e9f075aSJohn Baldwin 7506e9f075aSJohn Baldwin { 0x1415, 0xc208, 0xffff, 0, 7516e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs", 7526e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 7536e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 7546e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 7556e9f075aSJohn Baldwin }, 7566e9f075aSJohn Baldwin 7576e9f075aSJohn Baldwin { 0x1415, 0xc20d, 0xffff, 0, 7586e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe954 UARTs (function 1)", 7596e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 7606e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 7616e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 7626e9f075aSJohn Baldwin }, 7636e9f075aSJohn Baldwin 7646e9f075aSJohn Baldwin { 0x1415, 0xc308, 0xffff, 0, 7656e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs", 7666e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 7676e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 7686e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 7696e9f075aSJohn Baldwin }, 7706e9f075aSJohn Baldwin 7716e9f075aSJohn Baldwin { 0x1415, 0xc30d, 0xffff, 0, 7726e9f075aSJohn Baldwin "Oxford Semiconductor OXPCIe958 UARTs (function 1)", 7736e9f075aSJohn Baldwin DEFAULT_RCLK * 0x22, 7746e9f075aSJohn Baldwin PUC_PORT_NONSTANDARD, 0x10, 0, -1, 7756e9f075aSJohn Baldwin .config_function = puc_config_oxford_pcie 7766e9f075aSJohn Baldwin }, 7776e9f075aSJohn Baldwin 77846ce58c7SAndrew Thompson { 0x14d2, 0x8010, 0xffff, 0, 77946ce58c7SAndrew Thompson "VScom PCI-100L", 78046ce58c7SAndrew Thompson DEFAULT_RCLK * 8, 78146ce58c7SAndrew Thompson PUC_PORT_1S, 0x14, 0, 0, 78246ce58c7SAndrew Thompson }, 78346ce58c7SAndrew Thompson 78464220a7eSMarcel Moolenaar { 0x14d2, 0x8020, 0xffff, 0, 78564220a7eSMarcel Moolenaar "VScom PCI-200L", 78664220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 78764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x14, 4, 0, 788a58deb46SColin Percival }, 789a58deb46SColin Percival 79064220a7eSMarcel Moolenaar { 0x14d2, 0x8028, 0xffff, 0, 79146dd877dSPoul-Henning Kamp "VScom 200Li", 79264220a7eSMarcel Moolenaar DEFAULT_RCLK, 79364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x20, 0, 8, 79446dd877dSPoul-Henning Kamp }, 7953e19d3c0SBruce M Simpson 79664220a7eSMarcel Moolenaar /* 79764220a7eSMarcel Moolenaar * VScom (Titan?) PCI-800L. More modern variant of the 79864220a7eSMarcel Moolenaar * PCI-800. Uses 6 discrete 16550 UARTs, plus another 79964220a7eSMarcel Moolenaar * two of them obviously implemented as macro cells in 80064220a7eSMarcel Moolenaar * the ASIC. This causes the weird port access pattern 80164220a7eSMarcel Moolenaar * below, where two of the IO port ranges each access 80264220a7eSMarcel Moolenaar * one of the ASIC UARTs, and a block of IO addresses 80364220a7eSMarcel Moolenaar * access the external UARTs. 80464220a7eSMarcel Moolenaar */ 80564220a7eSMarcel Moolenaar { 0x14d2, 0x8080, 0xffff, 0, 80664220a7eSMarcel Moolenaar "Titan VScom PCI-800L", 80764220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 80864220a7eSMarcel Moolenaar PUC_PORT_8S, 0x14, -1, -1, 80964220a7eSMarcel Moolenaar .config_function = puc_config_titan 81064220a7eSMarcel Moolenaar }, 81164220a7eSMarcel Moolenaar 81264220a7eSMarcel Moolenaar /* 81364220a7eSMarcel Moolenaar * VScom PCI-800H. Uses 8 16950 UART, behind a PCI chips that offers 81464220a7eSMarcel Moolenaar * 4 com port on PCI device 0 and 4 on PCI device 1. PCI device 0 has 81564220a7eSMarcel Moolenaar * device ID 3 and PCI device 1 device ID 4. 81664220a7eSMarcel Moolenaar */ 81764220a7eSMarcel Moolenaar { 0x14d2, 0xa003, 0xffff, 0, 81864220a7eSMarcel Moolenaar "Titan PCI-800H", 81964220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 82064220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 82164220a7eSMarcel Moolenaar }, 82264220a7eSMarcel Moolenaar { 0x14d2, 0xa004, 0xffff, 0, 82364220a7eSMarcel Moolenaar "Titan PCI-800H", 82464220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 82564220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 82664220a7eSMarcel Moolenaar }, 82764220a7eSMarcel Moolenaar 82864220a7eSMarcel Moolenaar { 0x14d2, 0xa005, 0xffff, 0, 82964220a7eSMarcel Moolenaar "Titan PCI-200H", 83064220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 83164220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 83264220a7eSMarcel Moolenaar }, 83364220a7eSMarcel Moolenaar 83464220a7eSMarcel Moolenaar { 0x14d2, 0xe020, 0xffff, 0, 83564220a7eSMarcel Moolenaar "Titan VScom PCI-200HV2", 83664220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 83764220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 83864220a7eSMarcel Moolenaar }, 83964220a7eSMarcel Moolenaar 84064220a7eSMarcel Moolenaar { 0x14db, 0x2130, 0xffff, 0, 84164220a7eSMarcel Moolenaar "Avlab Technology, PCI IO 2S", 84264220a7eSMarcel Moolenaar DEFAULT_RCLK, 84364220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 84464220a7eSMarcel Moolenaar }, 84564220a7eSMarcel Moolenaar 84664220a7eSMarcel Moolenaar { 0x14db, 0x2150, 0xffff, 0, 84764220a7eSMarcel Moolenaar "Avlab Low Profile PCI 4 Serial", 84864220a7eSMarcel Moolenaar DEFAULT_RCLK, 84964220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0, 85064220a7eSMarcel Moolenaar }, 85164220a7eSMarcel Moolenaar 8520dc908e7SAndrew Thompson { 0x14db, 0x2152, 0xffff, 0, 8530dc908e7SAndrew Thompson "Avlab Low Profile PCI 4 Serial", 8540dc908e7SAndrew Thompson DEFAULT_RCLK, 8550dc908e7SAndrew Thompson PUC_PORT_4S, 0x10, 4, 0, 8560dc908e7SAndrew Thompson }, 8570dc908e7SAndrew Thompson 85864220a7eSMarcel Moolenaar { 0x1592, 0x0781, 0xffff, 0, 85964220a7eSMarcel Moolenaar "Syba Tech Ltd. PCI-4S2P-550-ECP", 86064220a7eSMarcel Moolenaar DEFAULT_RCLK, 86164220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 0, -1, 86264220a7eSMarcel Moolenaar .config_function = puc_config_syba 86364220a7eSMarcel Moolenaar }, 86464220a7eSMarcel Moolenaar 86564220a7eSMarcel Moolenaar { 0x6666, 0x0001, 0xffff, 0, 86664220a7eSMarcel Moolenaar "Decision Computer Inc, PCCOM 4-port serial", 86764220a7eSMarcel Moolenaar DEFAULT_RCLK, 86864220a7eSMarcel Moolenaar PUC_PORT_4S, 0x1c, 0, 8, 86964220a7eSMarcel Moolenaar }, 87064220a7eSMarcel Moolenaar 871858030c4SAndrew Thompson { 0x6666, 0x0002, 0xffff, 0, 872858030c4SAndrew Thompson "Decision Computer Inc, PCCOM 8-port serial", 873858030c4SAndrew Thompson DEFAULT_RCLK, 874858030c4SAndrew Thompson PUC_PORT_8S, 0x1c, 0, 8, 875858030c4SAndrew Thompson }, 876858030c4SAndrew Thompson 87764220a7eSMarcel Moolenaar { 0x6666, 0x0004, 0xffff, 0, 87864220a7eSMarcel Moolenaar "PCCOM dual port RS232/422/485", 87964220a7eSMarcel Moolenaar DEFAULT_RCLK, 88064220a7eSMarcel Moolenaar PUC_PORT_2S, 0x1c, 0, 8, 88164220a7eSMarcel Moolenaar }, 88264220a7eSMarcel Moolenaar 88364220a7eSMarcel Moolenaar { 0x9710, 0x9815, 0xffff, 0, 88464220a7eSMarcel Moolenaar "NetMos NM9815 Dual 1284 Printer port", 88564220a7eSMarcel Moolenaar 0, 88664220a7eSMarcel Moolenaar PUC_PORT_2P, 0x10, 8, 0, 88764220a7eSMarcel Moolenaar }, 88864220a7eSMarcel Moolenaar 889843994aeSJohn Baldwin /* 890843994aeSJohn Baldwin * This is more specific than the generic NM9835 entry that follows, and 891843994aeSJohn Baldwin * is placed here to _prevent_ puc from claiming this single port card. 892843994aeSJohn Baldwin * 893843994aeSJohn Baldwin * uart(4) will claim this device. 894843994aeSJohn Baldwin */ 895843994aeSJohn Baldwin { 0x9710, 0x9835, 0x1000, 1, 896843994aeSJohn Baldwin "NetMos NM9835 based 1-port serial", 897843994aeSJohn Baldwin DEFAULT_RCLK, 898843994aeSJohn Baldwin PUC_PORT_1S, 0x10, 4, 0, 899843994aeSJohn Baldwin }, 900843994aeSJohn Baldwin 901045de714SNavdeep Parhar { 0x9710, 0x9835, 0x1000, 2, 902045de714SNavdeep Parhar "NetMos NM9835 based 2-port serial", 903045de714SNavdeep Parhar DEFAULT_RCLK, 904045de714SNavdeep Parhar PUC_PORT_2S, 0x10, 4, 0, 905045de714SNavdeep Parhar }, 906045de714SNavdeep Parhar 90764220a7eSMarcel Moolenaar { 0x9710, 0x9835, 0xffff, 0, 90864220a7eSMarcel Moolenaar "NetMos NM9835 Dual UART and 1284 Printer port", 90964220a7eSMarcel Moolenaar DEFAULT_RCLK, 91064220a7eSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 91164220a7eSMarcel Moolenaar }, 91264220a7eSMarcel Moolenaar 91364220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0x1000, 0x0006, 91464220a7eSMarcel Moolenaar "NetMos NM9845 6 Port UART", 91564220a7eSMarcel Moolenaar DEFAULT_RCLK, 91664220a7eSMarcel Moolenaar PUC_PORT_6S, 0x10, 4, 0, 91764220a7eSMarcel Moolenaar }, 91864220a7eSMarcel Moolenaar 91964220a7eSMarcel Moolenaar { 0x9710, 0x9845, 0xffff, 0, 92064220a7eSMarcel Moolenaar "NetMos NM9845 Quad UART and 1284 Printer port", 92164220a7eSMarcel Moolenaar DEFAULT_RCLK, 92264220a7eSMarcel Moolenaar PUC_PORT_4S1P, 0x10, 4, 0, 9231d864e0dSMarcel Moolenaar }, 9241d864e0dSMarcel Moolenaar 9251d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3002, 9261d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART", 9271d864e0dSMarcel Moolenaar DEFAULT_RCLK, 9281d864e0dSMarcel Moolenaar PUC_PORT_2S, 0x10, 4, 0, 9291d864e0dSMarcel Moolenaar }, 9301d864e0dSMarcel Moolenaar 9311d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3003, 9321d864e0dSMarcel Moolenaar "NetMos NM9865 Triple UART", 9331d864e0dSMarcel Moolenaar DEFAULT_RCLK, 9341d864e0dSMarcel Moolenaar PUC_PORT_3S, 0x10, 4, 0, 9351d864e0dSMarcel Moolenaar }, 9361d864e0dSMarcel Moolenaar 9371d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3004, 9381d864e0dSMarcel Moolenaar "NetMos NM9865 Quad UART", 9391d864e0dSMarcel Moolenaar DEFAULT_RCLK, 9401d864e0dSMarcel Moolenaar PUC_PORT_4S, 0x10, 4, 0,0 9411d864e0dSMarcel Moolenaar }, 9421d864e0dSMarcel Moolenaar 9431d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3011, 9441d864e0dSMarcel Moolenaar "NetMos NM9865 Single UART and 1284 Printer port", 9451d864e0dSMarcel Moolenaar DEFAULT_RCLK, 9461d864e0dSMarcel Moolenaar PUC_PORT_1S1P, 0x10, 4, 0, 9471d864e0dSMarcel Moolenaar }, 9481d864e0dSMarcel Moolenaar 9491d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3012, 9501d864e0dSMarcel Moolenaar "NetMos NM9865 Dual UART and 1284 Printer port", 9511d864e0dSMarcel Moolenaar DEFAULT_RCLK, 9521d864e0dSMarcel Moolenaar PUC_PORT_2S1P, 0x10, 4, 0, 9531d864e0dSMarcel Moolenaar }, 9541d864e0dSMarcel Moolenaar 9551d864e0dSMarcel Moolenaar { 0x9710, 0x9865, 0xa000, 0x3020, 9561d864e0dSMarcel Moolenaar "NetMos NM9865 Dual 1284 Printer port", 9571d864e0dSMarcel Moolenaar DEFAULT_RCLK, 9581d864e0dSMarcel Moolenaar PUC_PORT_2P, 0x10, 4, 0, 95964220a7eSMarcel Moolenaar }, 96064220a7eSMarcel Moolenaar 96164220a7eSMarcel Moolenaar { 0xb00c, 0x021c, 0xffff, 0, 96264220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Lite", 96364220a7eSMarcel Moolenaar DEFAULT_RCLK, 96464220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 96564220a7eSMarcel Moolenaar .config_function = puc_config_icbook 96664220a7eSMarcel Moolenaar }, 96764220a7eSMarcel Moolenaar 96864220a7eSMarcel Moolenaar { 0xb00c, 0x031c, 0xffff, 0, 96964220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Pro", 97064220a7eSMarcel Moolenaar DEFAULT_RCLK, 97164220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 97264220a7eSMarcel Moolenaar .config_function = puc_config_icbook 97364220a7eSMarcel Moolenaar }, 97464220a7eSMarcel Moolenaar 97564220a7eSMarcel Moolenaar { 0xb00c, 0x041c, 0xffff, 0, 97664220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Lite", 97764220a7eSMarcel Moolenaar DEFAULT_RCLK, 97864220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 97964220a7eSMarcel Moolenaar .config_function = puc_config_icbook 98064220a7eSMarcel Moolenaar }, 98164220a7eSMarcel Moolenaar 98264220a7eSMarcel Moolenaar { 0xb00c, 0x051c, 0xffff, 0, 98364220a7eSMarcel Moolenaar "IC Book Labs Ironclad x8 Pro", 98464220a7eSMarcel Moolenaar DEFAULT_RCLK, 98564220a7eSMarcel Moolenaar PUC_PORT_8S, 0x10, 0, 8, 98664220a7eSMarcel Moolenaar .config_function = puc_config_icbook 98764220a7eSMarcel Moolenaar }, 98864220a7eSMarcel Moolenaar 98964220a7eSMarcel Moolenaar { 0xb00c, 0x081c, 0xffff, 0, 99064220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Pro", 99164220a7eSMarcel Moolenaar DEFAULT_RCLK * 8, 99264220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8, 99364220a7eSMarcel Moolenaar .config_function = puc_config_icbook 99464220a7eSMarcel Moolenaar }, 99564220a7eSMarcel Moolenaar 99664220a7eSMarcel Moolenaar { 0xb00c, 0x091c, 0xffff, 0, 99764220a7eSMarcel Moolenaar "IC Book Labs Dreadnought x16 Lite", 99864220a7eSMarcel Moolenaar DEFAULT_RCLK, 99964220a7eSMarcel Moolenaar PUC_PORT_16S, 0x10, 0, 8, 100064220a7eSMarcel Moolenaar .config_function = puc_config_icbook 100164220a7eSMarcel Moolenaar }, 100264220a7eSMarcel Moolenaar 100364220a7eSMarcel Moolenaar { 0xb00c, 0x0a1c, 0xffff, 0, 100464220a7eSMarcel Moolenaar "IC Book Labs Gunboat x2 Low Profile", 100564220a7eSMarcel Moolenaar DEFAULT_RCLK, 100664220a7eSMarcel Moolenaar PUC_PORT_2S, 0x10, 0, 8, 100764220a7eSMarcel Moolenaar }, 100864220a7eSMarcel Moolenaar 100964220a7eSMarcel Moolenaar { 0xb00c, 0x0b1c, 0xffff, 0, 101064220a7eSMarcel Moolenaar "IC Book Labs Gunboat x4 Low Profile", 101164220a7eSMarcel Moolenaar DEFAULT_RCLK, 101264220a7eSMarcel Moolenaar PUC_PORT_4S, 0x10, 0, 8, 101364220a7eSMarcel Moolenaar .config_function = puc_config_icbook 101464220a7eSMarcel Moolenaar }, 101564220a7eSMarcel Moolenaar 101664220a7eSMarcel Moolenaar { 0xffff, 0, 0xffff, 0, NULL, 0 } 10179c564b6cSJohn Hay }; 101864220a7eSMarcel Moolenaar 101964220a7eSMarcel Moolenaar static int 102064220a7eSMarcel Moolenaar puc_config_amc(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 102164220a7eSMarcel Moolenaar intptr_t *res) 102264220a7eSMarcel Moolenaar { 102364220a7eSMarcel Moolenaar switch (cmd) { 102464220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 102564220a7eSMarcel Moolenaar *res = 8 * (port & 1); 102664220a7eSMarcel Moolenaar return (0); 102764220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 102864220a7eSMarcel Moolenaar *res = 0x14 + (port >> 1) * 4; 102964220a7eSMarcel Moolenaar return (0); 103064220a7eSMarcel Moolenaar default: 103164220a7eSMarcel Moolenaar break; 103264220a7eSMarcel Moolenaar } 103364220a7eSMarcel Moolenaar return (ENXIO); 103464220a7eSMarcel Moolenaar } 103564220a7eSMarcel Moolenaar 103664220a7eSMarcel Moolenaar static int 103764220a7eSMarcel Moolenaar puc_config_diva(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 103864220a7eSMarcel Moolenaar intptr_t *res) 103964220a7eSMarcel Moolenaar { 104064220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 104164220a7eSMarcel Moolenaar 104264220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_OFS) { 104364220a7eSMarcel Moolenaar if (cfg->subdevice == 0x1282) /* Everest SP */ 104464220a7eSMarcel Moolenaar port <<= 1; 104564220a7eSMarcel Moolenaar else if (cfg->subdevice == 0x104b) /* Maestro SP2 */ 104664220a7eSMarcel Moolenaar port = (port == 3) ? 4 : port; 104764220a7eSMarcel Moolenaar *res = port * 8 + ((port > 2) ? 0x18 : 0); 104864220a7eSMarcel Moolenaar return (0); 104964220a7eSMarcel Moolenaar } 105064220a7eSMarcel Moolenaar return (ENXIO); 105164220a7eSMarcel Moolenaar } 105264220a7eSMarcel Moolenaar 105364220a7eSMarcel Moolenaar static int 105422e0612fSJohn Baldwin puc_config_exar(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 105522e0612fSJohn Baldwin intptr_t *res) 105622e0612fSJohn Baldwin { 105722e0612fSJohn Baldwin if (cmd == PUC_CFG_GET_OFS) { 105822e0612fSJohn Baldwin *res = port * 0x200; 105922e0612fSJohn Baldwin return (0); 106022e0612fSJohn Baldwin } 106122e0612fSJohn Baldwin return (ENXIO); 106222e0612fSJohn Baldwin } 106322e0612fSJohn Baldwin 106422e0612fSJohn Baldwin static int 106564220a7eSMarcel Moolenaar puc_config_icbook(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 106664220a7eSMarcel Moolenaar intptr_t *res) 106764220a7eSMarcel Moolenaar { 106864220a7eSMarcel Moolenaar if (cmd == PUC_CFG_GET_ILR) { 106964220a7eSMarcel Moolenaar *res = PUC_ILR_DIGI; 107064220a7eSMarcel Moolenaar return (0); 107164220a7eSMarcel Moolenaar } 107264220a7eSMarcel Moolenaar return (ENXIO); 107364220a7eSMarcel Moolenaar } 107464220a7eSMarcel Moolenaar 107564220a7eSMarcel Moolenaar static int 107664220a7eSMarcel Moolenaar puc_config_quatech(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 107764220a7eSMarcel Moolenaar intptr_t *res) 107864220a7eSMarcel Moolenaar { 107964220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 108064220a7eSMarcel Moolenaar struct puc_bar *bar; 108164220a7eSMarcel Moolenaar uint8_t v0, v1; 108264220a7eSMarcel Moolenaar 108364220a7eSMarcel Moolenaar switch (cmd) { 108464220a7eSMarcel Moolenaar case PUC_CFG_SETUP: 108564220a7eSMarcel Moolenaar /* 108664220a7eSMarcel Moolenaar * Check if the scratchpad register is enabled or if the 108764220a7eSMarcel Moolenaar * interrupt status and options registers are active. 108864220a7eSMarcel Moolenaar */ 108964220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid); 109064220a7eSMarcel Moolenaar if (bar == NULL) 109164220a7eSMarcel Moolenaar return (ENXIO); 109264220a7eSMarcel Moolenaar /* Set DLAB in the LCR register of UART 0. */ 109364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 3, 0x80); 109464220a7eSMarcel Moolenaar /* Write 0 to the SPR register of UART 0. */ 109564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 7, 0); 109664220a7eSMarcel Moolenaar /* Read back the contents of the SPR register of UART 0. */ 109764220a7eSMarcel Moolenaar v0 = bus_read_1(bar->b_res, 7); 109864220a7eSMarcel Moolenaar /* Write a specific value to the SPR register of UART 0. */ 109964220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 7, 0x80 + -cfg->clock); 110064220a7eSMarcel Moolenaar /* Read back the contents of the SPR register of UART 0. */ 110164220a7eSMarcel Moolenaar v1 = bus_read_1(bar->b_res, 7); 110264220a7eSMarcel Moolenaar /* Clear DLAB in the LCR register of UART 0. */ 110364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 3, 0); 110464220a7eSMarcel Moolenaar /* Save the two values read-back from the SPR register. */ 110564220a7eSMarcel Moolenaar sc->sc_cfg_data = (v0 << 8) | v1; 110664220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) { 110764220a7eSMarcel Moolenaar /* 110864220a7eSMarcel Moolenaar * The SPR register echoed the two values written 110964220a7eSMarcel Moolenaar * by us. This means that the SPAD jumper is set. 111064220a7eSMarcel Moolenaar */ 111164220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: extra features " 111264220a7eSMarcel Moolenaar "not usable -- SPAD compatibility enabled\n"); 111364220a7eSMarcel Moolenaar return (0); 111464220a7eSMarcel Moolenaar } 111564220a7eSMarcel Moolenaar if (v0 != 0) { 111664220a7eSMarcel Moolenaar /* 111764220a7eSMarcel Moolenaar * The first value doesn't match. This can only mean 111864220a7eSMarcel Moolenaar * that the SPAD jumper is not set and that a non- 111964220a7eSMarcel Moolenaar * standard fixed clock multiplier jumper is set. 112064220a7eSMarcel Moolenaar */ 112164220a7eSMarcel Moolenaar if (bootverbose) 112264220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "fixed clock rate " 112364220a7eSMarcel Moolenaar "multiplier of %d\n", 1 << v0); 112464220a7eSMarcel Moolenaar if (v0 < -cfg->clock) 112564220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "warning: " 112664220a7eSMarcel Moolenaar "suboptimal fixed clock rate multiplier " 112764220a7eSMarcel Moolenaar "setting\n"); 112864220a7eSMarcel Moolenaar return (0); 112964220a7eSMarcel Moolenaar } 113064220a7eSMarcel Moolenaar /* 113164220a7eSMarcel Moolenaar * The first value matched, but the second didn't. We know 113264220a7eSMarcel Moolenaar * that the SPAD jumper is not set. We also know that the 113364220a7eSMarcel Moolenaar * clock rate multiplier is software controlled *and* that 113464220a7eSMarcel Moolenaar * we just programmed it to the maximum allowed. 113564220a7eSMarcel Moolenaar */ 113664220a7eSMarcel Moolenaar if (bootverbose) 113764220a7eSMarcel Moolenaar device_printf(sc->sc_dev, "clock rate multiplier of " 113864220a7eSMarcel Moolenaar "%d selected\n", 1 << -cfg->clock); 113964220a7eSMarcel Moolenaar return (0); 114064220a7eSMarcel Moolenaar case PUC_CFG_GET_CLOCK: 114164220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff; 114264220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff; 114364220a7eSMarcel Moolenaar if (v0 == 0 && v1 == 0x80 + -cfg->clock) { 114464220a7eSMarcel Moolenaar /* 114564220a7eSMarcel Moolenaar * XXX With the SPAD jumper applied, there's no 114664220a7eSMarcel Moolenaar * easy way of knowing if there's also a clock 114764220a7eSMarcel Moolenaar * rate multiplier jumper installed. Let's hope 114864220a7eSMarcel Moolenaar * not... 114964220a7eSMarcel Moolenaar */ 115064220a7eSMarcel Moolenaar *res = DEFAULT_RCLK; 115164220a7eSMarcel Moolenaar } else if (v0 == 0) { 115264220a7eSMarcel Moolenaar /* 115364220a7eSMarcel Moolenaar * No clock rate multiplier jumper installed, 115464220a7eSMarcel Moolenaar * so we programmed the board with the maximum 115564220a7eSMarcel Moolenaar * multiplier allowed as given to us in the 115664220a7eSMarcel Moolenaar * clock field of the config record (negated). 115764220a7eSMarcel Moolenaar */ 115864220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << -cfg->clock; 115964220a7eSMarcel Moolenaar } else 116064220a7eSMarcel Moolenaar *res = DEFAULT_RCLK << v0; 116164220a7eSMarcel Moolenaar return (0); 116264220a7eSMarcel Moolenaar case PUC_CFG_GET_ILR: 116364220a7eSMarcel Moolenaar v0 = (sc->sc_cfg_data >> 8) & 0xff; 116464220a7eSMarcel Moolenaar v1 = sc->sc_cfg_data & 0xff; 116564220a7eSMarcel Moolenaar *res = (v0 == 0 && v1 == 0x80 + -cfg->clock) 116664220a7eSMarcel Moolenaar ? PUC_ILR_NONE : PUC_ILR_QUATECH; 116764220a7eSMarcel Moolenaar return (0); 116864220a7eSMarcel Moolenaar default: 116964220a7eSMarcel Moolenaar break; 117064220a7eSMarcel Moolenaar } 117164220a7eSMarcel Moolenaar return (ENXIO); 117264220a7eSMarcel Moolenaar } 117364220a7eSMarcel Moolenaar 117464220a7eSMarcel Moolenaar static int 117564220a7eSMarcel Moolenaar puc_config_syba(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 117664220a7eSMarcel Moolenaar intptr_t *res) 117764220a7eSMarcel Moolenaar { 117864220a7eSMarcel Moolenaar static int base[] = { 0x251, 0x3f0, 0 }; 117964220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 118064220a7eSMarcel Moolenaar struct puc_bar *bar; 118164220a7eSMarcel Moolenaar int efir, idx, ofs; 118264220a7eSMarcel Moolenaar uint8_t v; 118364220a7eSMarcel Moolenaar 118464220a7eSMarcel Moolenaar switch (cmd) { 118564220a7eSMarcel Moolenaar case PUC_CFG_SETUP: 118664220a7eSMarcel Moolenaar bar = puc_get_bar(sc, cfg->rid); 118764220a7eSMarcel Moolenaar if (bar == NULL) 118864220a7eSMarcel Moolenaar return (ENXIO); 118964220a7eSMarcel Moolenaar 119064220a7eSMarcel Moolenaar /* configure both W83877TFs */ 119164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0x89); 119264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87); 119364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0x87); 119464220a7eSMarcel Moolenaar idx = 0; 119564220a7eSMarcel Moolenaar while (base[idx] != 0) { 119664220a7eSMarcel Moolenaar efir = base[idx]; 119764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x09); 119864220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1); 119964220a7eSMarcel Moolenaar if ((v & 0x0f) != 0x0c) 120064220a7eSMarcel Moolenaar return (ENXIO); 120164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 120264220a7eSMarcel Moolenaar v = bus_read_1(bar->b_res, efir + 1); 120364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 120464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v | 0x04); 120564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x16); 120664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, v & ~0x04); 120764220a7eSMarcel Moolenaar ofs = base[idx] & 0x300; 120864220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x23); 120964220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0x78) >> 2); 121064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x24); 121164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xf8) >> 2); 121264220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x25); 121364220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, (ofs + 0xe8) >> 2); 121464220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x17); 121564220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x03); 121664220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir, 0x28); 121764220a7eSMarcel Moolenaar bus_write_1(bar->b_res, efir + 1, 0x43); 121864220a7eSMarcel Moolenaar idx++; 121964220a7eSMarcel Moolenaar } 122064220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x250, 0xaa); 122164220a7eSMarcel Moolenaar bus_write_1(bar->b_res, 0x3f0, 0xaa); 122264220a7eSMarcel Moolenaar return (0); 122364220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 122464220a7eSMarcel Moolenaar switch (port) { 122564220a7eSMarcel Moolenaar case 0: 122664220a7eSMarcel Moolenaar *res = 0x2f8; 122764220a7eSMarcel Moolenaar return (0); 122864220a7eSMarcel Moolenaar case 1: 122964220a7eSMarcel Moolenaar *res = 0x2e8; 123064220a7eSMarcel Moolenaar return (0); 123164220a7eSMarcel Moolenaar case 2: 123264220a7eSMarcel Moolenaar *res = 0x3f8; 123364220a7eSMarcel Moolenaar return (0); 123464220a7eSMarcel Moolenaar case 3: 123564220a7eSMarcel Moolenaar *res = 0x3e8; 123664220a7eSMarcel Moolenaar return (0); 123764220a7eSMarcel Moolenaar case 4: 123864220a7eSMarcel Moolenaar *res = 0x278; 123964220a7eSMarcel Moolenaar return (0); 124064220a7eSMarcel Moolenaar } 124164220a7eSMarcel Moolenaar break; 124264220a7eSMarcel Moolenaar default: 124364220a7eSMarcel Moolenaar break; 124464220a7eSMarcel Moolenaar } 124564220a7eSMarcel Moolenaar return (ENXIO); 124664220a7eSMarcel Moolenaar } 124764220a7eSMarcel Moolenaar 124864220a7eSMarcel Moolenaar static int 124964220a7eSMarcel Moolenaar puc_config_siig(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 125064220a7eSMarcel Moolenaar intptr_t *res) 125164220a7eSMarcel Moolenaar { 125264220a7eSMarcel Moolenaar const struct puc_cfg *cfg = sc->sc_cfg; 125364220a7eSMarcel Moolenaar 125464220a7eSMarcel Moolenaar switch (cmd) { 125564220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 125664220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) { 125764220a7eSMarcel Moolenaar *res = (port > 4) ? 8 * (port - 4) : 0; 125864220a7eSMarcel Moolenaar return (0); 125964220a7eSMarcel Moolenaar } 126064220a7eSMarcel Moolenaar break; 126164220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 126264220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_8S) { 126364220a7eSMarcel Moolenaar *res = 0x10 + ((port > 4) ? 0x10 : 4 * port); 126464220a7eSMarcel Moolenaar return (0); 126564220a7eSMarcel Moolenaar } 126664220a7eSMarcel Moolenaar if (cfg->ports == PUC_PORT_2S1P) { 126764220a7eSMarcel Moolenaar switch (port) { 126864220a7eSMarcel Moolenaar case 0: *res = 0x10; return (0); 126964220a7eSMarcel Moolenaar case 1: *res = 0x14; return (0); 127064220a7eSMarcel Moolenaar case 2: *res = 0x1c; return (0); 127164220a7eSMarcel Moolenaar } 127264220a7eSMarcel Moolenaar } 127364220a7eSMarcel Moolenaar break; 127464220a7eSMarcel Moolenaar default: 127564220a7eSMarcel Moolenaar break; 127664220a7eSMarcel Moolenaar } 127764220a7eSMarcel Moolenaar return (ENXIO); 127864220a7eSMarcel Moolenaar } 127964220a7eSMarcel Moolenaar 128064220a7eSMarcel Moolenaar static int 128164220a7eSMarcel Moolenaar puc_config_timedia(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 128264220a7eSMarcel Moolenaar intptr_t *res) 128364220a7eSMarcel Moolenaar { 128464220a7eSMarcel Moolenaar static uint16_t dual[] = { 128564220a7eSMarcel Moolenaar 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085, 128664220a7eSMarcel Moolenaar 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079, 128764220a7eSMarcel Moolenaar 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079, 128864220a7eSMarcel Moolenaar 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079, 128964220a7eSMarcel Moolenaar 0xD079, 0 129064220a7eSMarcel Moolenaar }; 129164220a7eSMarcel Moolenaar static uint16_t quad[] = { 129264220a7eSMarcel Moolenaar 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157, 129364220a7eSMarcel Moolenaar 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159, 129464220a7eSMarcel Moolenaar 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056, 129564220a7eSMarcel Moolenaar 0xB157, 0 129664220a7eSMarcel Moolenaar }; 129764220a7eSMarcel Moolenaar static uint16_t octa[] = { 129864220a7eSMarcel Moolenaar 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166, 129964220a7eSMarcel Moolenaar 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0 130064220a7eSMarcel Moolenaar }; 130164220a7eSMarcel Moolenaar static struct { 130264220a7eSMarcel Moolenaar int ports; 130364220a7eSMarcel Moolenaar uint16_t *ids; 130464220a7eSMarcel Moolenaar } subdevs[] = { 130564220a7eSMarcel Moolenaar { 2, dual }, 130664220a7eSMarcel Moolenaar { 4, quad }, 130764220a7eSMarcel Moolenaar { 8, octa }, 130864220a7eSMarcel Moolenaar { 0, NULL } 130964220a7eSMarcel Moolenaar }; 131064220a7eSMarcel Moolenaar static char desc[64]; 131164220a7eSMarcel Moolenaar int dev, id; 131264220a7eSMarcel Moolenaar uint16_t subdev; 131364220a7eSMarcel Moolenaar 131464220a7eSMarcel Moolenaar switch (cmd) { 13159c418f51SJohn Baldwin case PUC_CFG_GET_CLOCK: 13169c418f51SJohn Baldwin if (port < 2) 13179c418f51SJohn Baldwin *res = DEFAULT_RCLK * 8; 13189c418f51SJohn Baldwin else 13199c418f51SJohn Baldwin *res = DEFAULT_RCLK; 13209c418f51SJohn Baldwin return (0); 132164220a7eSMarcel Moolenaar case PUC_CFG_GET_DESC: 132264220a7eSMarcel Moolenaar snprintf(desc, sizeof(desc), 132364220a7eSMarcel Moolenaar "Timedia technology %d Port Serial", (int)sc->sc_cfg_data); 132464220a7eSMarcel Moolenaar *res = (intptr_t)desc; 132564220a7eSMarcel Moolenaar return (0); 132664220a7eSMarcel Moolenaar case PUC_CFG_GET_NPORTS: 132764220a7eSMarcel Moolenaar subdev = pci_get_subdevice(sc->sc_dev); 132864220a7eSMarcel Moolenaar dev = 0; 132964220a7eSMarcel Moolenaar while (subdevs[dev].ports != 0) { 133064220a7eSMarcel Moolenaar id = 0; 133164220a7eSMarcel Moolenaar while (subdevs[dev].ids[id] != 0) { 133264220a7eSMarcel Moolenaar if (subdev == subdevs[dev].ids[id]) { 133364220a7eSMarcel Moolenaar sc->sc_cfg_data = subdevs[dev].ports; 133464220a7eSMarcel Moolenaar *res = sc->sc_cfg_data; 133564220a7eSMarcel Moolenaar return (0); 133664220a7eSMarcel Moolenaar } 133764220a7eSMarcel Moolenaar id++; 133864220a7eSMarcel Moolenaar } 133964220a7eSMarcel Moolenaar dev++; 134064220a7eSMarcel Moolenaar } 134164220a7eSMarcel Moolenaar return (ENXIO); 134264220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 134364220a7eSMarcel Moolenaar *res = (port == 1 || port == 3) ? 8 : 0; 134464220a7eSMarcel Moolenaar return (0); 134564220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 1346c1163871SMarcel Moolenaar *res = 0x10 + ((port > 3) ? port - 2 : port >> 1) * 4; 134764220a7eSMarcel Moolenaar return (0); 134864220a7eSMarcel Moolenaar case PUC_CFG_GET_TYPE: 134964220a7eSMarcel Moolenaar *res = PUC_TYPE_SERIAL; 135064220a7eSMarcel Moolenaar return (0); 135164220a7eSMarcel Moolenaar default: 135264220a7eSMarcel Moolenaar break; 135364220a7eSMarcel Moolenaar } 135464220a7eSMarcel Moolenaar return (ENXIO); 135564220a7eSMarcel Moolenaar } 135664220a7eSMarcel Moolenaar 135764220a7eSMarcel Moolenaar static int 13586e9f075aSJohn Baldwin puc_config_oxford_pcie(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 13596e9f075aSJohn Baldwin intptr_t *res) 13606e9f075aSJohn Baldwin { 13616e9f075aSJohn Baldwin const struct puc_cfg *cfg = sc->sc_cfg; 13626e9f075aSJohn Baldwin int idx; 13636e9f075aSJohn Baldwin struct puc_bar *bar; 13646e9f075aSJohn Baldwin uint8_t value; 13656e9f075aSJohn Baldwin 13666e9f075aSJohn Baldwin switch (cmd) { 13676e9f075aSJohn Baldwin case PUC_CFG_SETUP: 13686e9f075aSJohn Baldwin device_printf(sc->sc_dev, "%d UARTs detected\n", 13696e9f075aSJohn Baldwin sc->sc_nports); 13706e9f075aSJohn Baldwin 13716e9f075aSJohn Baldwin /* Set UARTs to enhanced mode */ 13726e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid); 13736e9f075aSJohn Baldwin if (bar == NULL) 13746e9f075aSJohn Baldwin return (ENXIO); 13756e9f075aSJohn Baldwin for (idx = 0; idx < sc->sc_nports; idx++) { 1376a59f78daSJohn Baldwin value = bus_read_1(bar->b_res, 0x1000 + (idx << 9) + 1377a59f78daSJohn Baldwin 0x92); 13786e9f075aSJohn Baldwin bus_write_1(bar->b_res, 0x1000 + (idx << 9) + 0x92, 13796e9f075aSJohn Baldwin value | 0x10); 13806e9f075aSJohn Baldwin } 13816e9f075aSJohn Baldwin return (0); 13826e9f075aSJohn Baldwin case PUC_CFG_GET_LEN: 13836e9f075aSJohn Baldwin *res = 0x200; 13846e9f075aSJohn Baldwin return (0); 13856e9f075aSJohn Baldwin case PUC_CFG_GET_NPORTS: 13866e9f075aSJohn Baldwin /* 13876e9f075aSJohn Baldwin * Check if we are being called from puc_bfe_attach() 13886e9f075aSJohn Baldwin * or puc_bfe_probe(). If puc_bfe_probe(), we cannot 13896e9f075aSJohn Baldwin * puc_get_bar(), so we return a value of 16. This has cosmetic 13906e9f075aSJohn Baldwin * side-effects at worst; in PUC_CFG_GET_DESC, 13916e9f075aSJohn Baldwin * (int)sc->sc_cfg_data will not contain the true number of 13926e9f075aSJohn Baldwin * ports in PUC_CFG_GET_DESC, but we are not implementing that 13936e9f075aSJohn Baldwin * call for this device family anyway. 13946e9f075aSJohn Baldwin * 13956e9f075aSJohn Baldwin * The check is for initialisation of sc->sc_bar[idx], which is 13966e9f075aSJohn Baldwin * only done in puc_bfe_attach(). 13976e9f075aSJohn Baldwin */ 13986e9f075aSJohn Baldwin idx = 0; 13996e9f075aSJohn Baldwin do { 14006e9f075aSJohn Baldwin if (sc->sc_bar[idx++].b_rid != -1) { 14016e9f075aSJohn Baldwin sc->sc_cfg_data = 16; 14026e9f075aSJohn Baldwin *res = sc->sc_cfg_data; 14036e9f075aSJohn Baldwin return (0); 14046e9f075aSJohn Baldwin } 14056e9f075aSJohn Baldwin } while (idx < PUC_PCI_BARS); 14066e9f075aSJohn Baldwin 14076e9f075aSJohn Baldwin bar = puc_get_bar(sc, cfg->rid); 14086e9f075aSJohn Baldwin if (bar == NULL) 14096e9f075aSJohn Baldwin return (ENXIO); 14106e9f075aSJohn Baldwin 14116e9f075aSJohn Baldwin value = bus_read_1(bar->b_res, 0x04); 14126e9f075aSJohn Baldwin if (value == 0) 14136e9f075aSJohn Baldwin return (ENXIO); 14146e9f075aSJohn Baldwin 14156e9f075aSJohn Baldwin sc->sc_cfg_data = value; 14166e9f075aSJohn Baldwin *res = sc->sc_cfg_data; 14176e9f075aSJohn Baldwin return (0); 14186e9f075aSJohn Baldwin case PUC_CFG_GET_OFS: 14196e9f075aSJohn Baldwin *res = 0x1000 + (port << 9); 14206e9f075aSJohn Baldwin return (0); 14216e9f075aSJohn Baldwin case PUC_CFG_GET_TYPE: 14226e9f075aSJohn Baldwin *res = PUC_TYPE_SERIAL; 14236e9f075aSJohn Baldwin return (0); 14246e9f075aSJohn Baldwin default: 14256e9f075aSJohn Baldwin break; 14266e9f075aSJohn Baldwin } 14276e9f075aSJohn Baldwin return (ENXIO); 14286e9f075aSJohn Baldwin } 14296e9f075aSJohn Baldwin 14306e9f075aSJohn Baldwin static int 143164220a7eSMarcel Moolenaar puc_config_titan(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, 143264220a7eSMarcel Moolenaar intptr_t *res) 143364220a7eSMarcel Moolenaar { 143464220a7eSMarcel Moolenaar switch (cmd) { 143564220a7eSMarcel Moolenaar case PUC_CFG_GET_OFS: 143664220a7eSMarcel Moolenaar *res = (port < 3) ? 0 : (port - 2) << 3; 143764220a7eSMarcel Moolenaar return (0); 143864220a7eSMarcel Moolenaar case PUC_CFG_GET_RID: 143964220a7eSMarcel Moolenaar *res = 0x14 + ((port >= 2) ? 0x0c : port << 2); 144064220a7eSMarcel Moolenaar return (0); 144164220a7eSMarcel Moolenaar default: 144264220a7eSMarcel Moolenaar break; 144364220a7eSMarcel Moolenaar } 144464220a7eSMarcel Moolenaar return (ENXIO); 144564220a7eSMarcel Moolenaar } 1446