1 /* $NetBSD: xxboot.c,v 1.5 2005/12/11 12:19:29 christos Exp $ */
4 * Copyright (c) 1982, 1986, 1990, 1993
5 * The Regents of the University of California. All rights reserved.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
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. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * @(#)boot.c 8.1 (Berkeley) 6/10/93
34 #include <sys/param.h>
35 #include <sys/reboot.h>
36 #include <machine/mon.h>
43 * Note that extname is edited based on the running machine type
44 * (sun3 vs sun3x). EXTNAMEX is the position of the 'x'.
46 char extname
[] = "netbsd.sun3x";
47 #define EXTNAMEX (sizeof(extname)-2)
50 * If the PROM did not give us a specific kernel name to use,
51 * and did not specify the -a flag (ask), then try the names
52 * in the following list.
54 char *kernelnames
[] = {
63 xxboot_main(const char *boot_type
)
70 u_long marks
[MARK_MAX
];
72 memset(marks
, 0, sizeof(marks
));
74 marks
[MARK_START
] = sun2_map_mem_load();
75 printf(">> %s %s [%s]\n", bootprog_name
, boot_type
, bootprog_rev
);
79 * Hold the raw device open so it will not be
80 * closed and reopened on every attempt to
81 * load files that did not exist.
84 if (devopen(&f
, 0, &file
)) {
85 printf("%s: devopen failed\n", boot_type
);
90 * Edit the "extended" kernel name based on
91 * the type of machine we are running on.
94 extname
[EXTNAMEX
- 1] = '2';
96 extname
[EXTNAMEX
] = 0;
98 /* If we got the "-a" flag, ask for the name. */
99 if (prom_boothow
& RB_ASKNAME
)
103 * If the PROM gave us a file name,
104 * it means the user asked for that
105 * kernel name explicitly.
107 file
= prom_bootfile
;
109 fd
= loadfile(file
, marks
, LOAD_KERNEL
);
118 * Try the default kernel names.
120 for (npp
= kernelnames
; *npp
; npp
++) {
122 printf("%s: trying %s\n", boot_type
, file
);
123 fd
= loadfile(file
, marks
, LOAD_KERNEL
);
129 * Ask what kernel name to load.
134 file
= kernelnames
[0];
135 printf("filename? [%s]: ", file
);
140 fd
= loadfile(file
, marks
, LOAD_KERNEL
);
145 printf("%s: %s: loadfile() failed.\n", boot_type
, file
);
149 entry
= (void *)marks
[MARK_ENTRY
];
151 printf("relocating program...");
152 entry
= sun2_map_mem_run(entry
);
154 printf("starting program at 0x%x\n", (u_int
)entry
);