Home | History | Annotate | Line # | Download | only in uba
uba_mainbus.c revision 1.1
      1 /*	$NetBSD: uba_mainbus.c,v 1.1 1999/05/24 20:10:31 ragge Exp $	   */
      2 /*
      3  * Copyright (c) 1996 Jonathan Stone.
      4  * Copyright (c) 1994, 1996 Ludd, University of Lule}, Sweden.
      5  * Copyright (c) 1982, 1986 The Regents of the University of California.
      6  * All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  * 1. Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  * 2. Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in the
     15  *    documentation and/or other materials provided with the distribution.
     16  * 3. All advertising materials mentioning features or use of this software
     17  *    must display the following acknowledgement:
     18  *	This product includes software developed by the University of
     19  *	California, Berkeley and its contributors.
     20  * 4. Neither the name of the University nor the names of its contributors
     21  *    may be used to endorse or promote products derived from this software
     22  *    without specific prior written permission.
     23  *
     24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     34  * SUCH DAMAGE.
     35  *
     36  *	@(#)uba.c	7.10 (Berkeley) 12/16/90
     37  *	@(#)autoconf.c	7.20 (Berkeley) 5/9/91
     38  */
     39 
     40 #include <sys/param.h>
     41 #include <sys/device.h>
     42 #include <sys/systm.h>
     43 
     44 #include <machine/bus.h>
     45 #include <machine/pte.h>
     46 #include <machine/mtpr.h>
     47 #include <machine/nexus.h>
     48 #include <machine/cpu.h>
     49 
     50 #include <dev/dec/uba/ubareg.h>
     51 #include <dev/dec/uba/ubavar.h>
     52 
     53 /*
     54  * The Q22 bus is the main IO bus on MicroVAX II/MicroVAX III systems.
     55  * It has an address space of 4MB (22 address bits), therefore the name,
     56  * and is hardware compatible with all 16 and 18 bits Q-bus devices.
     57  */
     58 int	qba_match __P((struct device *, struct cfdata *, void *));
     59 void	qba_attach __P((struct device *, struct device *, void *));
     60 void	qba_beforescan __P((struct uba_softc*));
     61 void	qba_init __P((struct uba_softc*));
     62 
     63 struct	cfattach uba_mainbus_ca = {
     64 	sizeof(struct uba_softc), qba_match, qba_attach
     65 };
     66 
     67 extern	struct vax_bus_space vax_mem_bus_space;
     68 
     69 int
     70 qba_match(parent, vcf, aux)
     71 	struct device *parent;
     72 	struct cfdata *vcf;
     73 	void *aux;
     74 {
     75 	struct	bp_conf *bp = aux;
     76 
     77 	if (strcmp(bp->type, "uba"))
     78 		return 0;
     79 
     80 	return 1;
     81 }
     82 
     83 void
     84 qba_attach(parent, self, aux)
     85 	struct device *parent, *self;
     86 	void *aux;
     87 {
     88 	struct uba_softc *sc = (void *)self;
     89 
     90 	printf(": Q22\n");
     91 	/*
     92 	 * Fill in bus specific data.
     93 	 */
     94 /*	sc->uh_uba not used; no regs */
     95 /*	sc->uh_nbdp is 0; Qbus has no BDP's */
     96 /*	sc->uh_nr is 0; there can be only one! */
     97 /*	sc->uh_afterscan; not used */
     98 /*	sc->uh_errchk; not used */
     99 	sc->uh_beforescan = qba_beforescan;
    100 	sc->uh_ubainit = qba_init;
    101 	sc->uh_type = QBA;
    102 	sc->uh_memsize = QBAPAGES;
    103 	sc->uh_tag = &vax_mem_bus_space;
    104 	/*
    105 	 * Map in the UBA page map into kernel space. On other UBAs,
    106 	 * the map registers are in the bus IO space.
    107 	 */
    108 	sc->uh_mr = (void *)vax_map_physmem(QBAMAP,
    109 	    (QBAPAGES * sizeof(struct pte)) / VAX_NBPG);
    110 
    111 	uba_attach(sc, QIOPAGE);
    112 }
    113 
    114 /*
    115  * Called when the QBA is set up; to enable DMA access from
    116  * QBA devices to main memory.
    117  */
    118 void
    119 qba_beforescan(sc)
    120 	struct uba_softc *sc;
    121 {
    122 	bus_space_write_2(sc->uh_tag, sc->uh_ioh, QIPCR, Q_LMEAE);
    123 }
    124 
    125 void
    126 qba_init(sc)
    127 	struct uba_softc *sc;
    128 {
    129 	mtpr(0, PR_IUR);
    130 	DELAY(500000);
    131 	qba_beforescan(sc);
    132 }
    133