1 /* $NetBSD: ibus_pmax.c,v 1.16 2000/02/29 04:41:48 nisimura Exp $ */ 2 3 /* 4 * Copyright (c) 1998 Jonathan Stone. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. All advertising materials mentioning features or use of this software 15 * must display the following acknowledgement: 16 * This product includes software developed by Jonathan Stone for 17 * the NetBSD Project. 18 * 4. The name of the author may not be used to endorse or promote products 19 * derived from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ 34 __KERNEL_RCSID(0, "$NetBSD: ibus_pmax.c,v 1.16 2000/02/29 04:41:48 nisimura Exp $"); 35 36 #include "opt_dec_3100.h" 37 #include "opt_dec_5100.h" 38 39 #include <sys/param.h> 40 #include <sys/systm.h> 41 #include <sys/device.h> 42 43 #include <pmax/ibus/ibusvar.h> 44 45 #include <machine/autoconf.h> 46 #include <machine/sysconf.h> 47 48 #include <pmax/pmax/kn01.h> 49 #include <pmax/pmax/kn230.h> 50 #include <pmax/pmax/pmaxtype.h> 51 52 static int ibus_pmax_match __P((struct device *, struct cfdata *, void *)); 53 static void ibus_pmax_attach __P((struct device *, struct device *, void *)); 54 55 struct cfattach ibus_pmax_ca = { 56 sizeof(struct ibus_softc), ibus_pmax_match, ibus_pmax_attach 57 }; 58 59 #define KV(x) MIPS_PHYS_TO_KSEG1(x) 60 61 #ifdef DEC_3100 62 static struct ibus_attach_args ibus_pmax_devs[] = { 63 { "pm", SYS_DEV_BOGUS, KV(KN01_PHYS_FBUF_START), 0 }, 64 { "dc", SYS_DEV_SCC0, KV(KN01_SYS_DZ), 0 }, 65 { "lance", SYS_DEV_LANCE, KV(KN01_SYS_LANCE), 0 }, 66 { "sii", SYS_DEV_SCSI, KV(KN01_SYS_SII), 0 }, 67 { "mc146818", SYS_DEV_BOGUS, KV(KN01_SYS_CLOCK), 0 }, 68 }; 69 static const int ibus_pmax_ndevs = 70 sizeof(ibus_pmax_devs)/sizeof(ibus_pmax_devs[0]); 71 #endif /* DEC_3100 */ 72 73 #ifdef DEC_5100 74 static struct ibus_attach_args ibus_mipsmate_devs[] = { 75 { "dc", SYS_DEV_SCC0, KV(KN230_SYS_DZ0), 0 }, 76 { "lance", SYS_DEV_LANCE, KV(KN230_SYS_LANCE), 0 }, 77 { "sii", SYS_DEV_SCSI, KV(KN230_SYS_SII), 0 }, 78 { "mc146818", SYS_DEV_BOGUS, KV(KN230_SYS_CLOCK), 0 }, 79 #if 0 /* 5100 locks up when these are probed at the moment */ 80 { "dc", SYS_DEV_OPT0, KV(KN230_SYS_DZ1), 0 }, 81 { "dc", SYS_DEV_OPT1, KV(KN230_SYS_DZ2), 0 }, 82 /* 83 * Ultrix configures it at 0x86400400. The first 0x400 bytes 84 * used for NVRAM state?? 85 * 86 * The first 0x400 bytes are apparently used for diagnostic 87 * registers - ad 88 */ 89 { "nvram", SYS_DEV_BOGUS, KV(0x86400000), 0 }, 90 #endif 91 }; 92 static const int ibus_mipsmate_ndevs = 93 sizeof(ibus_mipsmate_devs)/sizeof(ibus_mipsmate_devs[0]); 94 #endif /* DEC_5100 */ 95 96 static int ibus_attached; 97 98 static int 99 ibus_pmax_match(parent, cfdata, aux) 100 struct device *parent; 101 struct cfdata *cfdata; 102 void *aux; 103 { 104 struct mainbus_attach_args *ma = aux; 105 106 if (ibus_attached) 107 return (0); 108 if (systype != DS_PMAX && systype != DS_MIPSMATE) 109 return (0); 110 if (strcmp(ma->ma_name, "baseboard") != 0) 111 return (0); 112 113 return (1); 114 } 115 116 static void 117 ibus_pmax_attach(parent, self, aux) 118 struct device *parent, *self; 119 void *aux; 120 { 121 struct ibus_dev_attach_args ida; 122 123 ibus_attached = 1; 124 125 ida.ida_busname = "ibus"; 126 switch (systype) { 127 #ifdef DEC_3100 128 case DS_PMAX: 129 ida.ida_devs = ibus_pmax_devs; 130 ida.ida_ndevs = ibus_pmax_ndevs; 131 break; 132 #endif 133 #ifdef DEC_5100 134 case DS_MIPSMATE: 135 ida.ida_devs = ibus_mipsmate_devs; 136 ida.ida_ndevs = ibus_mipsmate_ndevs; 137 break; 138 #endif 139 default: 140 panic("ibus_pmax_attach: no ibus configured for systype = %d", systype); 141 } 142 143 ibusattach(parent, self, &ida); 144 } 145