sio_cbus.c revision 303975
1/*- 2 * Copyright (c) 2001 TAKAHASHI Yoshihiro 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * 25 * $FreeBSD: releng/11.0/sys/pc98/cbus/sio_cbus.c 146216 2005-05-14 10:51:16Z nyan $ 26 */ 27 28#include <sys/param.h> 29#include <sys/systm.h> 30#include <sys/bus.h> 31#include <sys/conf.h> 32#include <sys/kernel.h> 33#include <sys/lock.h> 34#include <sys/malloc.h> 35#include <sys/mutex.h> 36#include <sys/module.h> 37#include <sys/tty.h> 38#include <machine/bus.h> 39#include <sys/timepps.h> 40 41#include <dev/sio/siovar.h> 42 43#include <isa/isavar.h> 44 45static int sio_isa_attach(device_t dev); 46static int sio_isa_probe(device_t dev); 47 48static device_method_t sio_isa_methods[] = { 49 /* Device interface */ 50 DEVMETHOD(device_probe, sio_isa_probe), 51 DEVMETHOD(device_attach, sio_isa_attach), 52 DEVMETHOD(device_detach, siodetach), 53 54 { 0, 0 } 55}; 56 57static driver_t sio_isa_driver = { 58 sio_driver_name, 59 sio_isa_methods, 60 0, 61}; 62 63static struct isa_pnp_id sio_ids[] = { 64 {0x0100e4a5, "RSA-98III"}, 65 {0x4180a3b8, NULL}, /* NEC8041 - PC-9821CB-B04 */ 66 {0x0181a3b8, NULL}, /* NEC8101 - PC-9821CB2-B04 */ 67 {0x5181a3b8, NULL}, /* NEC8151 - Internal FAX/Modem for Cx3, Cb3 */ 68 {0x9181a3b8, NULL}, /* NEC8191 - NEC PC-9801-120 */ 69 {0xe181a3b8, NULL}, /* NEC81E1 - Internal FAX/Modem */ 70 {0x1182a3b8, NULL}, /* NEC8211 - PC-9801-123 */ 71 {0x3182a3b8, NULL}, /* NEC8231 - Internal FAX/Modem(Voice) */ 72 {0x4182a3b8, NULL}, /* NEC8241 - NEC PC-9821NR-B05 */ 73 {0x5182a3b8, NULL}, /* NEC8251 - Internel FAX/Modem */ 74 {0x7182a3b8, NULL}, /* NEC8271 - NEC PC-9801-125 */ 75 {0x11802fbf, NULL}, /* OYO8011 - Internal FAX/Modem for ValueStar(Ring) */ 76 {0} 77}; 78 79static int 80sio_isa_probe(dev) 81 device_t dev; 82{ 83 int logical_id; 84 85 /* Check isapnp ids */ 86 if (ISA_PNP_PROBE(device_get_parent(dev), dev, sio_ids) == ENXIO) 87 return (ENXIO); 88 89 logical_id = isa_get_logicalid(dev); 90 switch (logical_id) { 91 case 0x0100e4a5: /* RSA-98III */ 92 SET_FLAG(dev, SET_IFTYPE(COM_IF_RSA98III)); 93 break; 94 case 0x4180a3b8: /* PC-9821CB-B04 */ 95 case 0x0181a3b8: /* PC-9821CB2-B04 */ 96 case 0x5181a3b8: /* for Cx3, Cb3 internal */ 97 case 0x9181a3b8: /* PC-9801-120 */ 98 case 0xe181a3b8: /* Internal FAX/Modem */ 99 case 0x1182a3b8: /* PC-9801-123 */ 100 case 0x3182a3b8: /* FAX/Voice/Modem internal */ 101 case 0x4182a3b8: /* PC-9821NR-B05 */ 102 case 0x5182a3b8: /* FAX/Modem internal */ 103 case 0x7182a3b8: /* PC-9801-125 */ 104 case 0x11802fbf: /* for ValueStar internal */ 105 SET_FLAG(dev, SET_IFTYPE(COM_IF_NS16550)); 106 break; 107 } 108 109 return (sioprobe(dev, 0, 0UL, 0)); 110} 111 112static int 113sio_isa_attach(dev) 114 device_t dev; 115{ 116 return (sioattach(dev, 0, 0UL)); 117} 118 119DRIVER_MODULE(sio, isa, sio_isa_driver, sio_devclass, 0, 0); 120