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