Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / arch / sun68k / stand / libsa / xxboot.c
blob5582cbb795bbac6a4cd79b016d16ecbfcfe42060
1 /* $NetBSD: xxboot.c,v 1.5 2005/12/11 12:19:29 christos Exp $ */
3 /*-
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
9 * are met:
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
29 * SUCH DAMAGE.
31 * @(#)boot.c 8.1 (Berkeley) 6/10/93
34 #include <sys/param.h>
35 #include <sys/reboot.h>
36 #include <machine/mon.h>
38 #include <stand.h>
39 #include <loadfile.h>
40 #include "libsa.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[] = {
55 "netbsd",
56 "netbsd.old",
57 extname,
58 NULL
60 char line[80];
62 void
63 xxboot_main(const char *boot_type)
65 struct open_file f;
66 char **npp;
67 char *file;
68 void *entry;
69 int fd;
70 u_long marks[MARK_MAX];
72 memset(marks, 0, sizeof(marks));
73 if (_is2)
74 marks[MARK_START] = sun2_map_mem_load();
75 printf(">> %s %s [%s]\n", bootprog_name, boot_type, bootprog_rev);
76 prom_get_boot_info();
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.
83 f.f_flags = F_RAW;
84 if (devopen(&f, 0, &file)) {
85 printf("%s: devopen failed\n", boot_type);
86 return;
90 * Edit the "extended" kernel name based on
91 * the type of machine we are running on.
93 if (_is2)
94 extname[EXTNAMEX - 1] = '2';
95 if (_is3x == 0)
96 extname[EXTNAMEX] = 0;
98 /* If we got the "-a" flag, ask for the name. */
99 if (prom_boothow & RB_ASKNAME)
100 goto just_ask;
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;
108 if (file && *file) {
109 fd = loadfile(file, marks, LOAD_KERNEL);
110 if (fd == -1) {
111 goto err;
112 } else {
113 goto gotit;
118 * Try the default kernel names.
120 for (npp = kernelnames; *npp; npp++) {
121 file = *npp;
122 printf("%s: trying %s\n", boot_type, file);
123 fd = loadfile(file, marks, LOAD_KERNEL);
124 if (fd != -1)
125 goto gotit;
129 * Ask what kernel name to load.
131 for (;;) {
133 just_ask:
134 file = kernelnames[0];
135 printf("filename? [%s]: ", file);
136 gets(line);
137 if (line[0])
138 file = line;
140 fd = loadfile(file, marks, LOAD_KERNEL);
141 if (fd != -1)
142 break;
144 err:
145 printf("%s: %s: loadfile() failed.\n", boot_type, file);
148 gotit:
149 entry = (void *)marks[MARK_ENTRY];
150 if (_is2) {
151 printf("relocating program...");
152 entry = sun2_map_mem_run(entry);
154 printf("starting program at 0x%x\n", (u_int)entry);
155 chain_to(entry);