autoconf.h revision 1.29 1 1.29 pk /* $NetBSD: autoconf.h,v 1.29 1998/09/26 18:20:19 pk Exp $ */
2 1.22 pk
3 1.22 pk /*-
4 1.22 pk * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
5 1.22 pk * All rights reserved.
6 1.22 pk *
7 1.22 pk * This code is derived from software contributed to The NetBSD Foundation
8 1.22 pk * by Paul Kranenburg.
9 1.22 pk *
10 1.22 pk * Redistribution and use in source and binary forms, with or without
11 1.22 pk * modification, are permitted provided that the following conditions
12 1.22 pk * are met:
13 1.22 pk * 1. Redistributions of source code must retain the above copyright
14 1.22 pk * notice, this list of conditions and the following disclaimer.
15 1.22 pk * 2. Redistributions in binary form must reproduce the above copyright
16 1.22 pk * notice, this list of conditions and the following disclaimer in the
17 1.22 pk * documentation and/or other materials provided with the distribution.
18 1.22 pk * 3. All advertising materials mentioning features or use of this software
19 1.22 pk * must display the following acknowledgement:
20 1.22 pk * This product includes software developed by the NetBSD
21 1.22 pk * Foundation, Inc. and its contributors.
22 1.22 pk * 4. Neither the name of The NetBSD Foundation nor the names of its
23 1.22 pk * contributors may be used to endorse or promote products derived
24 1.22 pk * from this software without specific prior written permission.
25 1.22 pk *
26 1.22 pk * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27 1.22 pk * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28 1.22 pk * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 1.22 pk * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30 1.22 pk * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 1.22 pk * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 1.22 pk * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 1.22 pk * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 1.22 pk * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 1.22 pk * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 1.22 pk * POSSIBILITY OF SUCH DAMAGE.
37 1.22 pk */
38 1.6 deraadt
39 1.1 deraadt /*
40 1.1 deraadt * Copyright (c) 1992, 1993
41 1.1 deraadt * The Regents of the University of California. All rights reserved.
42 1.1 deraadt *
43 1.1 deraadt * This software was developed by the Computer Systems Engineering group
44 1.1 deraadt * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
45 1.1 deraadt * contributed to Berkeley.
46 1.1 deraadt *
47 1.1 deraadt * All advertising materials mentioning features or use of this software
48 1.1 deraadt * must display the following acknowledgement:
49 1.1 deraadt * This product includes software developed by the University of
50 1.1 deraadt * California, Lawrence Berkeley Laboratory.
51 1.1 deraadt *
52 1.1 deraadt * Redistribution and use in source and binary forms, with or without
53 1.1 deraadt * modification, are permitted provided that the following conditions
54 1.1 deraadt * are met:
55 1.1 deraadt * 1. Redistributions of source code must retain the above copyright
56 1.1 deraadt * notice, this list of conditions and the following disclaimer.
57 1.1 deraadt * 2. Redistributions in binary form must reproduce the above copyright
58 1.1 deraadt * notice, this list of conditions and the following disclaimer in the
59 1.1 deraadt * documentation and/or other materials provided with the distribution.
60 1.1 deraadt * 3. All advertising materials mentioning features or use of this software
61 1.1 deraadt * must display the following acknowledgement:
62 1.1 deraadt * This product includes software developed by the University of
63 1.1 deraadt * California, Berkeley and its contributors.
64 1.1 deraadt * 4. Neither the name of the University nor the names of its contributors
65 1.1 deraadt * may be used to endorse or promote products derived from this software
66 1.1 deraadt * without specific prior written permission.
67 1.1 deraadt *
68 1.1 deraadt * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
69 1.1 deraadt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
70 1.1 deraadt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
71 1.1 deraadt * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
72 1.1 deraadt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
73 1.1 deraadt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
74 1.1 deraadt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
75 1.1 deraadt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
76 1.1 deraadt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
77 1.1 deraadt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
78 1.1 deraadt * SUCH DAMAGE.
79 1.1 deraadt *
80 1.3 deraadt * @(#)autoconf.h 8.2 (Berkeley) 9/30/93
81 1.1 deraadt */
82 1.1 deraadt
83 1.1 deraadt /*
84 1.1 deraadt * Autoconfiguration information.
85 1.1 deraadt */
86 1.1 deraadt
87 1.22 pk #include <machine/bus.h>
88 1.29 pk #include <machine/bsd_openprom.h>
89 1.26 pk #include <dev/sbus/sbusvar.h>
90 1.22 pk
91 1.1 deraadt /*
92 1.1 deraadt * Most devices are configured according to information kept in
93 1.1 deraadt * the FORTH PROMs. In particular, we extract the `name', `reg',
94 1.1 deraadt * and `address' properties of each device attached to the mainbus;
95 1.1 deraadt * other drives may also use this information. The mainbus itself
96 1.1 deraadt * (which `is' the CPU, in some sense) gets just the node, with a
97 1.1 deraadt * fake name ("mainbus").
98 1.1 deraadt */
99 1.15 pk
100 1.22 pk /* Device register space description */
101 1.22 pk struct rom_reg {
102 1.22 pk u_int32_t rr_iospace; /* register space (obio, etc) */
103 1.22 pk u_int32_t rr_paddr; /* register physical address */
104 1.22 pk u_int32_t rr_len; /* register length */
105 1.22 pk };
106 1.15 pk
107 1.22 pk /* Interrupt information */
108 1.22 pk struct rom_intr {
109 1.22 pk u_int32_t int_pri; /* priority (IPL) */
110 1.22 pk u_int32_t int_vec; /* vector (always 0?) */
111 1.18 pk };
112 1.15 pk
113 1.22 pk /* Address translation accross busses */
114 1.18 pk struct rom_range { /* Only used on v3 PROMs */
115 1.18 pk u_int32_t cspace; /* Client space */
116 1.18 pk u_int32_t coffset; /* Client offset */
117 1.18 pk u_int32_t pspace; /* Parent space */
118 1.18 pk u_int32_t poffset; /* Parent offset */
119 1.18 pk u_int32_t size; /* Size in bytes of this range */
120 1.1 deraadt };
121 1.4 deraadt
122 1.22 pk /* Attach arguments presented by mainbus_attach() */
123 1.22 pk struct mainbus_attach_args {
124 1.22 pk bus_space_tag_t ma_bustag; /* parent bus tag */
125 1.22 pk bus_dma_tag_t ma_dmatag;
126 1.22 pk char *ma_name; /* PROM node name */
127 1.22 pk int ma_node; /* PROM handle */
128 1.24 pk bus_type_t ma_iospace; /* device I/O space */
129 1.24 pk bus_addr_t ma_paddr; /* register physical address */
130 1.22 pk int ma_size; /* register physical size */
131 1.22 pk int ma_pri; /* priority (IPL) */
132 1.22 pk void *ma_promvaddr; /* PROM virtual address, if any */
133 1.22 pk struct bootpath *ma_bp; /* used for locating boot device */
134 1.22 pk };
135 1.22 pk
136 1.22 pk /* Attach arguments presented to devices by obio_attach() (sun4 only) */
137 1.22 pk struct obio4_attach_args {
138 1.22 pk int oba_placeholder;/* obio/sbus attach args sharing */
139 1.22 pk bus_space_tag_t oba_bustag; /* parent bus tag */
140 1.22 pk bus_dma_tag_t oba_dmatag;
141 1.23 pk bus_addr_t oba_paddr; /* register physical address */
142 1.22 pk int oba_pri; /* interrupt priority (IPL) */
143 1.22 pk struct bootpath *oba_bp; /* used for locating boot device */
144 1.22 pk };
145 1.22 pk
146 1.22 pk union obio_attach_args {
147 1.22 pk /* sun4m obio space is treated like an sbus slot */
148 1.22 pk int uoba_isobio4;
149 1.22 pk struct sbus_attach_args uoba_sbus; /* Sbus view */
150 1.22 pk struct obio4_attach_args uoba_oba4; /* sun4 on-board view */
151 1.22 pk };
152 1.22 pk
153 1.23 pk #define obio_bus_map(t, a, o, s, f, v, hp) \
154 1.27 pk bus_space_map2(t, 0, (long)(a) + o, s, f, (vaddr_t)v, hp)
155 1.22 pk
156 1.22 pk /* obio specific bus flag */
157 1.22 pk #define OBIO_BUS_MAP_USE_ROM BUS_SPACE_MAP_BUS1
158 1.22 pk
159 1.23 pk /* obio bus helper that finds ROM mappings; exported for autoconf.c */
160 1.23 pk int obio_find_rom_map __P((bus_addr_t, bus_type_t, int,
161 1.23 pk bus_space_handle_t *));
162 1.23 pk
163 1.11 pk
164 1.1 deraadt /*
165 1.1 deraadt * The matchbyname function is useful in drivers that are matched
166 1.1 deraadt * by romaux name, i.e., all `mainbus attached' devices. It expects
167 1.1 deraadt * its aux pointer to point to a pointer to the name (the address of
168 1.22 pk * a romaux structure suffices, for instance). (OBSOLETE)
169 1.1 deraadt */
170 1.14 christos struct device;
171 1.17 pk struct cfdata;
172 1.17 pk int matchbyname __P((struct device *, struct cfdata *cf, void *aux));
173 1.1 deraadt
174 1.1 deraadt /*
175 1.1 deraadt * `clockfreq' produces a printable representation of a clock frequency
176 1.1 deraadt * (this is just a frill).
177 1.1 deraadt */
178 1.1 deraadt char *clockfreq __P((int freq));
179 1.1 deraadt
180 1.1 deraadt /*
181 1.1 deraadt * Memory description arrays. Shared between pmap.c and autoconf.c; no
182 1.1 deraadt * one else should use this (except maybe mem.c, e.g., if we fix the VM to
183 1.1 deraadt * handle discontiguous physical memory).
184 1.1 deraadt */
185 1.1 deraadt struct memarr {
186 1.27 pk paddr_t addr;
187 1.27 pk psize_t len;
188 1.1 deraadt };
189 1.1 deraadt int makememarr(struct memarr *, int max, int which);
190 1.1 deraadt #define MEMARR_AVAILPHYS 0
191 1.1 deraadt #define MEMARR_TOTALPHYS 1
192 1.1 deraadt
193 1.1 deraadt /* Openprom V2 style boot path */
194 1.1 deraadt struct bootpath {
195 1.16 pk char name[16]; /* name of this node */
196 1.16 pk int val[3]; /* up to three optional values */
197 1.16 pk struct device *dev; /* device that recognised this component */
198 1.1 deraadt };
199 1.1 deraadt
200 1.10 pk struct bootpath *bootpath_store __P((int, struct bootpath *));
201 1.10 pk int sd_crazymap __P((int));
202 1.2 deraadt
203 1.2 deraadt /* Parse a disk string into a dev_t, return device struct pointer */
204 1.2 deraadt struct device *parsedisk __P((char *, int, int, dev_t *));
205 1.13 thorpej
206 1.13 thorpej /* Establish a mountroot_hook, for benefit of floppy drive, mostly. */
207 1.16 pk void mountroot_hook_establish __P((void (*) __P((struct device *)),
208 1.16 pk struct device *));
209 1.14 christos
210 1.14 christos void configure __P((void));
211 1.14 christos void bootstrap __P((void));
212 1.29 pk struct device *getdevunit __P((char *, int));
213 1.29 pk void *findzs __P((int));
214 1.29 pk int romgetcursoraddr __P((int **, int **));
215 1.29 pk #if 0
216 1.29 pk /* Pass a string to the FORTH interpreter. May fail silently. */
217 1.29 pk void rominterpret __P((char *));
218 1.14 christos int firstchild __P((int));
219 1.14 christos int nextsibling __P((int));
220 1.14 christos void callrom __P((void));
221 1.14 christos int findroot __P((void));
222 1.15 pk int findnode __P((int, const char *));
223 1.15 pk int opennode __P((char *));
224 1.15 pk int node_has_property __P((int, const char *));
225 1.29 pk #endif
226