bootstrap.h (38789) | bootstrap.h (39178) |
---|---|
1/*- 2 * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $Id: bootstrap.h,v 1.3 1998/09/03 02:10:07 msmith Exp $ | 26 * $Id: bootstrap.h,v 1.4 1998/09/04 02:43:26 msmith Exp $ |
27 */ 28 29#include <sys/types.h> 30 31/* XXX debugging */ 32extern struct console vidconsole; 33#define MARK(s, c) {vidconsole.c_out(s); vidconsole.c_out(c); while (!vidconsole.c_ready()) ; vidconsole.c_in();} 34 --- 17 unchanged lines hidden (view full) --- 52extern char command_errbuf[]; /* XXX blah, length */ 53#define CMD_OK 0 54#define CMD_ERROR 1 55 56/* interp.c */ 57extern void interact(void); 58extern void source(char *filename); 59 | 27 */ 28 29#include <sys/types.h> 30 31/* XXX debugging */ 32extern struct console vidconsole; 33#define MARK(s, c) {vidconsole.c_out(s); vidconsole.c_out(c); while (!vidconsole.c_ready()) ; vidconsole.c_in();} 34 --- 17 unchanged lines hidden (view full) --- 52extern char command_errbuf[]; /* XXX blah, length */ 53#define CMD_OK 0 54#define CMD_ERROR 1 55 56/* interp.c */ 57extern void interact(void); 58extern void source(char *filename); 59 |
60/* interp_parse.c */ 61extern int parse(int *argc, char ***argv, char *str); 62 |
|
60/* boot.c */ 61extern int autoboot(int delay, char *prompt); 62 63/* misc.c */ 64extern char *unargv(int argc, char *argv[]); 65extern size_t strlenout(vm_offset_t str); 66extern char *strdupout(vm_offset_t str); 67 --- 16 unchanged lines hidden (view full) --- 84 int (* c_ready)(void); /* return nonzer if input waiting */ 85}; 86extern struct console *consoles[]; 87extern void cons_probe(void); 88 89/* 90 * Plug-and-play enumerator/configurator interface. 91 */ | 63/* boot.c */ 64extern int autoboot(int delay, char *prompt); 65 66/* misc.c */ 67extern char *unargv(int argc, char *argv[]); 68extern size_t strlenout(vm_offset_t str); 69extern char *strdupout(vm_offset_t str); 70 --- 16 unchanged lines hidden (view full) --- 87 int (* c_ready)(void); /* return nonzer if input waiting */ 88}; 89extern struct console *consoles[]; 90extern void cons_probe(void); 91 92/* 93 * Plug-and-play enumerator/configurator interface. 94 */ |
95struct pnpident 96{ 97 char *id_ident; /* ASCII identifier, actual format varies with bus/handler */ 98 struct pnpident *id_next; /* the next identifier */ 99}; 100 101struct pnphandler; |
|
92struct pnpinfo 93{ | 102struct pnpinfo 103{ |
94 char *pi_ident; /* ASCII identifier, actual format varies with bus/handler */ | 104 struct pnpident *pi_ident; /* list of identifiers */ |
95 int pi_revision; /* optional revision (or -1) if not supported */ 96 char *pi_module; /* module/args nominated to handle device */ 97 int pi_argc; /* module arguments */ 98 char **pi_argv; | 105 int pi_revision; /* optional revision (or -1) if not supported */ 106 char *pi_module; /* module/args nominated to handle device */ 107 int pi_argc; /* module arguments */ 108 char **pi_argv; |
99 int pi_handler; /* handler which detected this device */ | 109 struct pnphandler *pi_handler; /* handler which detected this device */ |
100 struct pnpinfo *pi_next; | 110 struct pnpinfo *pi_next; |
101} | 111}; |
102 103struct pnphandler 104{ | 112 113struct pnphandler 114{ |
105 char *pp_name; /* handler/bus name */ 106 struct pnpinfo *(pp_enumerate *)(int index); /* return a string identifying device (index) */ | 115 char *pp_name; /* handler/bus name */ 116 void (* pp_enumerate)(struct pnpinfo **); /* add detected devices to chain */ |
107}; 108 | 117}; 118 |
109extern struct pnphandler *pnphandlers[]; /* provided by MD code */ 110 | 119extern struct pnphandler *pnphandlers[]; /* provided by MD code */ |
111 | 120 |
121extern void pnp_addident(struct pnpinfo *pi, char *ident); 122 |
|
112/* 113 * Module metadata header. 114 * 115 * Metadata are allocated on our heap, and copied into kernel space 116 * before executing the kernel. 117 */ 118struct module_metadata 119{ --- 33 unchanged lines hidden (view full) --- 153extern struct module_format *module_formats[]; /* supplied by consumer */ 154extern struct loaded_module *loaded_modules; 155extern int mod_load(char *name, int argc, char *argv[]); 156extern int mod_loadobj(char *type, char *name); 157extern struct loaded_module *mod_findmodule(char *name, char *type); 158extern void mod_addmetadata(struct loaded_module *mp, int type, size_t size, void *p); 159extern struct module_metadata *mod_findmetadata(struct loaded_module *mp, int type); 160extern void mod_discard(struct loaded_module *mp); | 123/* 124 * Module metadata header. 125 * 126 * Metadata are allocated on our heap, and copied into kernel space 127 * before executing the kernel. 128 */ 129struct module_metadata 130{ --- 33 unchanged lines hidden (view full) --- 164extern struct module_format *module_formats[]; /* supplied by consumer */ 165extern struct loaded_module *loaded_modules; 166extern int mod_load(char *name, int argc, char *argv[]); 167extern int mod_loadobj(char *type, char *name); 168extern struct loaded_module *mod_findmodule(char *name, char *type); 169extern void mod_addmetadata(struct loaded_module *mp, int type, size_t size, void *p); 170extern struct module_metadata *mod_findmetadata(struct loaded_module *mp, int type); 171extern void mod_discard(struct loaded_module *mp); |
172extern struct loaded_module *mod_allocmodule(void); |
|
161 | 173 |
174 175/* MI module loaders */ 176extern int aout_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result); 177extern vm_offset_t aout_findsym(char *name, struct loaded_module *mp); 178 179/* extern int elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result); */ 180 |
|
162/* 163 * Module information subtypes | 181/* 182 * Module information subtypes |
183 * 184 * XXX these are copies of the defines in <sys/linker.h>, and should be nuked 185 * XXX before being committed. |
|
164 */ | 186 */ |
165/* XXX these belong in <machine/bootinfo.h> */ | |
166#define MODINFO_NAME 0x0000 167#define MODINFO_TYPE 0x0001 168#define MODINFO_ADDR 0x0002 169#define MODINFO_SIZE 0x0003 170#define MODINFO_METADATA 0x8000 171 172#define MODINFOMD_AOUTEXEC 0x0001 /* a.out exec header */ 173#define MODINFOMD_ELFHDR 0x0002 /* ELF header */ 174#define MODINFOMD_NOCOPY 0x8000 /* don't copy this metadata to the kernel */ 175 | 187#define MODINFO_NAME 0x0000 188#define MODINFO_TYPE 0x0001 189#define MODINFO_ADDR 0x0002 190#define MODINFO_SIZE 0x0003 191#define MODINFO_METADATA 0x8000 192 193#define MODINFOMD_AOUTEXEC 0x0001 /* a.out exec header */ 194#define MODINFOMD_ELFHDR 0x0002 /* ELF header */ 195#define MODINFOMD_NOCOPY 0x8000 /* don't copy this metadata to the kernel */ 196 |
176/* MI module loaders */ 177extern int aout_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result); 178extern vm_offset_t aout_findsym(char *name, struct loaded_module *mp); 179 180/* extern int elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result); */ 181 | |
182#define KLD_IDENT_SYMNAME "kld_identifier_" 183#define MODINFOMD_KLDIDENT (MODINFOMD_NOCOPY | 0x4000) 184#define MODINFOMD_KLDDEP (MODINFOMD_NOCOPY | 0x4001) 185 | 197#define KLD_IDENT_SYMNAME "kld_identifier_" 198#define MODINFOMD_KLDIDENT (MODINFOMD_NOCOPY | 0x4000) 199#define MODINFOMD_KLDDEP (MODINFOMD_NOCOPY | 0x4001) 200 |
201 202 |
|
186#if defined(__ELF__) 187 188/* 189 * Alpha GAS needs an align before the section change. It seems to assume 190 * that after the .previous, it is aligned, so the following .align 3 is 191 * ignored. Since the previous instructions often contain strings, this is 192 * a problem. 193 */ --- 69 unchanged lines hidden (view full) --- 263 /* Locate the device for (name), return pointer to tail in (*path) */ 264 int (*arch_getdev)(void **dev, char *name, char **path); 265 /* Copy from local address space to module address space, similar to bcopy() */ 266 int (*arch_copyin)(void *src, vm_offset_t dest, size_t len); 267 /* Copy to local address space from module address space, similar to bcopy() */ 268 int (*arch_copyout)(vm_offset_t src, void *dest, size_t len); 269 /* Read from file to module address space, same semantics as read() */ 270 int (*arch_readin)(int fd, vm_offset_t dest, size_t len); | 203#if defined(__ELF__) 204 205/* 206 * Alpha GAS needs an align before the section change. It seems to assume 207 * that after the .previous, it is aligned, so the following .align 3 is 208 * ignored. Since the previous instructions often contain strings, this is 209 * a problem. 210 */ --- 69 unchanged lines hidden (view full) --- 280 /* Locate the device for (name), return pointer to tail in (*path) */ 281 int (*arch_getdev)(void **dev, char *name, char **path); 282 /* Copy from local address space to module address space, similar to bcopy() */ 283 int (*arch_copyin)(void *src, vm_offset_t dest, size_t len); 284 /* Copy to local address space from module address space, similar to bcopy() */ 285 int (*arch_copyout)(vm_offset_t src, void *dest, size_t len); 286 /* Read from file to module address space, same semantics as read() */ 287 int (*arch_readin)(int fd, vm_offset_t dest, size_t len); |
288 /* Perform ISA byte port I/O (only for systems with ISA) */ 289 int (*arch_isainb)(int port); 290 void (*arch_isaoutb)(int port, int value); |
|
271}; 272extern struct arch_switch archsw; 273 | 291}; 292extern struct arch_switch archsw; 293 |
294/* This must be provided by the MD code, but should it be in the archsw? */ 295extern void delay(int delay); 296 |
|
274/* 275 * XXX these belong in a system header 276 */ 277#define KLD_NAMELEN 32 278 279struct kld_module_dependancy 280{ 281 char kd_name[KLD_NAMELEN]; --- 18 unchanged lines hidden --- | 297/* 298 * XXX these belong in a system header 299 */ 300#define KLD_NAMELEN 32 301 302struct kld_module_dependancy 303{ 304 char kd_name[KLD_NAMELEN]; --- 18 unchanged lines hidden --- |