1 /* $NetBSD: obio.c,v 1.1 1994/08/24 09:16:46 deraadt Exp $ */ 2 3 /* 4 * Copyright (c) 1993, 1994 Theo de Raadt 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by Theo de Raadt. 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/param.h> 34 #include <sys/device.h> 35 #include <sys/malloc.h> 36 37 #ifdef DEBUG 38 #include <sys/proc.h> 39 #include <sys/syslog.h> 40 #endif 41 42 #include <vm/vm.h> 43 44 #include <machine/autoconf.h> 45 #include <machine/pmap.h> 46 47 struct vme_attach_args { 48 u_long paddr; 49 int irq; 50 }; 51 52 struct obio_softc { 53 struct device sc_dev; /* base device */ 54 int nothing; 55 }; 56 57 /* autoconfiguration driver */ 58 static int obiomatch(struct device *, struct cfdata *, void *); 59 static void obioattach(struct device *, struct device *, void *); 60 struct cfdriver obiocd = { NULL, "cgsix", obiomatch, obioattach, 61 DV_DULL, sizeof(struct obio_softc) 62 }; 63 64 int 65 obiomatch(parent, cf, args) 66 struct device *parent; 67 struct cfdata *cf; 68 void *args; 69 { 70 printf("obiomatch\n"); 71 if (cputyp != CPU_SUN4) 72 return 0; 73 return 1; 74 } 75 76 int 77 obio_print(args, obio) 78 void *args; 79 char *obio; 80 { 81 printf("obio_print "); 82 return (UNCONF); 83 } 84 85 void 86 obioattach(parent, self, aux) 87 struct device *parent, *self; 88 void *aux; 89 { 90 extern struct cfdata cfdata[]; 91 92 register struct obio_softc *sc = (struct obio_softc *)self; 93 struct vme_attach_args va; 94 register short *p; 95 struct cfdata *cf; 96 97 if (sc->sc_dev.dv_unit > 0) { 98 printf(" unsupported\n"); 99 return; 100 } 101 102 for (cf = cfdata; cf->cf_driver; cf++) { 103 if (cf->cf_fstate == FSTATE_FOUND) 104 continue; 105 for (p = cf->cf_parents; *p >= 0; p++) 106 if (parent->dv_cfdata == &cfdata[*p]) { 107 va.paddr = cf->cf_loc[0]; 108 va.irq = cf->cf_loc[1]; 109 if ((*cf->cf_driver->cd_match)(self, cf, &va)) 110 config_attach(self, cf, &va, NULL); 111 } 112 } 113 } 114