1 /* $NetBSD: grf_machdep.c,v 1.29 2009/01/17 10:02:23 isaki Exp $ */ 2 3 /* 4 * Copyright (c) 1990, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * the Systems Programming Group of the University of Utah Computer 9 * Science Department. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. Neither the name of the University nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * from: Utah $Hdr: grf_machdep.c 1.1 92/01/21 36 * 37 * @(#)grf_machdep.c 8.2 (Berkeley) 1/12/94 38 */ 39 /* 40 * Copyright (c) 1991 University of Utah. 41 * 42 * This code is derived from software contributed to Berkeley by 43 * the Systems Programming Group of the University of Utah Computer 44 * Science Department. 45 * 46 * Redistribution and use in source and binary forms, with or without 47 * modification, are permitted provided that the following conditions 48 * are met: 49 * 1. Redistributions of source code must retain the above copyright 50 * notice, this list of conditions and the following disclaimer. 51 * 2. Redistributions in binary form must reproduce the above copyright 52 * notice, this list of conditions and the following disclaimer in the 53 * documentation and/or other materials provided with the distribution. 54 * 3. All advertising materials mentioning features or use of this software 55 * must display the following acknowledgement: 56 * This product includes software developed by the University of 57 * California, Berkeley and its contributors. 58 * 4. Neither the name of the University nor the names of its contributors 59 * may be used to endorse or promote products derived from this software 60 * without specific prior written permission. 61 * 62 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 63 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 64 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 65 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 66 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 67 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 68 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 69 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 70 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 71 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 72 * SUCH DAMAGE. 73 * 74 * from: Utah $Hdr: grf_machdep.c 1.1 92/01/21 75 * 76 * @(#)grf_machdep.c 8.2 (Berkeley) 1/12/94 77 */ 78 79 /* 80 * Graphics display driver for the HP300/400 DIO/DIO-II based machines. 81 * This is the hardware-dependent configuration portion of the driver. 82 */ 83 84 #include <sys/cdefs.h> 85 __KERNEL_RCSID(0, "$NetBSD: grf_machdep.c,v 1.29 2009/01/17 10:02:23 isaki Exp $"); 86 87 #include "locators.h" 88 89 #include <sys/param.h> 90 #include <sys/systm.h> 91 #include <sys/device.h> 92 93 #include <machine/autoconf.h> 94 #include <machine/grfioctl.h> 95 #include <x68k/dev/grfvar.h> 96 #include <x68k/x68k/iodevice.h> 97 98 /* grfbus: is this necessary? */ 99 int grfbusprint(void *auxp, const char *); 100 int grfbusmatch(device_t, cfdata_t, void *); 101 void grfbusattach(device_t, device_t, void *); 102 int grfbussearch(device_t, cfdata_t, const int *, void *); 103 104 /* grf itself */ 105 int grfmatch(device_t, cfdata_t, void *); 106 void grfattach(device_t, device_t, void *); 107 int grfprint(void *, const char *); 108 109 static int grfinit(struct grf_softc *, int); 110 111 CFATTACH_DECL_NEW(grfbus, 0, 112 grfbusmatch, grfbusattach, NULL, NULL); 113 114 CFATTACH_DECL_NEW(grf, sizeof(struct grf_softc), 115 grfmatch, grfattach, NULL, NULL); 116 117 extern struct cfdriver grfbus_cd; 118 119 int 120 grfbusmatch(device_t pdp, cfdata_t cfp, void *auxp) 121 { 122 if (strcmp(auxp, grfbus_cd.cd_name)) 123 return (0); 124 125 return (1); 126 } 127 128 void 129 grfbusattach(device_t pdp, device_t dp, void *auxp) 130 { 131 132 aprint_normal("\n"); 133 config_search_ia(grfbussearch, dp, "grfb", NULL); 134 } 135 136 int 137 grfbussearch(device_t dp, cfdata_t match, const int *ldesc, void *aux) 138 { 139 140 config_found(dp, &match->cf_loc[GRFBCF_ADDR], grfbusprint); 141 return (0); 142 } 143 144 int 145 grfbusprint(void *auxp, const char *name) 146 { 147 148 if (name == NULL) 149 return (UNCONF); 150 return (QUIET); 151 } 152 153 /* 154 * Normal init routine called by configure() code 155 */ 156 int 157 grfmatch(device_t parent, cfdata_t cfp, void *aux) 158 { 159 int addr; 160 161 addr = cfp->cf_loc[GRFBCF_ADDR]; 162 if (addr < 0 || addr > ngrfsw) 163 return 0; 164 165 return 1; 166 } 167 168 struct grf_softc congrf; 169 170 void 171 grfattach(device_t parent, device_t dp, void *aux) 172 { 173 struct grf_softc *gp; 174 struct cfdata *cf; 175 int addr; 176 177 cf = device_cfdata(dp); 178 addr = cf->cf_loc[GRFBCF_ADDR]; 179 180 gp = device_private(dp); 181 gp->g_device = dp; 182 gp->g_cfaddr = addr; 183 grfinit(gp, addr); 184 185 aprint_normal(": %d x %d ", 186 gp->g_display.gd_dwidth, gp->g_display.gd_dheight); 187 if (gp->g_display.gd_colors == 2) 188 aprint_normal("monochrome"); 189 else 190 aprint_normal("%d colors", gp->g_display.gd_colors); 191 aprint_normal(" %s display\n", gp->g_sw->gd_desc); 192 193 /* 194 * try and attach an ite 195 */ 196 config_found(dp, gp, grfprint); 197 } 198 199 int 200 grfprint(void *auxp, const char *pnp) 201 { 202 203 if (pnp) 204 aprint_normal("ite at %s", pnp); 205 return UNCONF; 206 } 207 208 int 209 grfinit(struct grf_softc *gp, int cfaddr) 210 { 211 struct grfsw *gsw; 212 void *addr; 213 214 if (cfaddr == 0) 215 addr = (void *)__UNVOLATILE(IODEVbase->tvram); 216 else 217 addr = (void *)__UNVOLATILE(IODEVbase->gvram); 218 219 gsw = &grfsw[cfaddr]; 220 if (gsw < &grfsw[ngrfsw] && (*gsw->gd_init)(gp, addr)) { 221 gp->g_sw = gsw; 222 gp->g_display.gd_id = gsw->gd_swid; 223 gp->g_flags = GF_ALIVE; 224 return 1; 225 } 226 227 return 0; 228 } 229 230 void 231 grf_config_console(void) 232 { 233 grfinit(&congrf, 0); 234 } 235