Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / arch / amiga / stand / bootblock / bootxx_ffs / main.c
blobd8b2e633af14bd1d307fee6bf4de9808499a34c7
1 /*
2 * $NetBSD: main.c,v 1.8 2009/01/12 07:42:30 tsutsui Exp $
5 * Copyright (c) 1996,1999 Ignatios Souvatzis
6 * Copyright (c) 1994 Michael L. Hitch
7 * All rights reserved.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #include <sys/cdefs.h>
32 #include <sys/reboot.h>
33 #include <sys/types.h>
35 #include <sys/exec_aout.h>
37 #include <amiga/cfdev.h>
38 #include <amiga/memlist.h>
39 #include <include/cpu.h>
41 #include <saerrno.h>
42 #include <lib/libsa/stand.h>
43 #include <lib/libkern/libkern.h>
45 #include "libstubs.h"
46 #include "samachdep.h"
48 #undef AOUT_LDPGSZ
49 #define AOUT_LDPGSZ 8192
50 #define __PGSZ 8192
52 #define DRACOREVISION (*(u_int8_t *)0x02000009)
53 #define DRACOMMUMARGIN 0x200000
54 #define DRACOZ2OFFSET 0x3000000
55 #define DRACOZ2MAX 0x1000000
57 #define EXECMIN 36
60 * vers.c (generated by newvers.sh)
62 extern const char bootprog_rev[];
64 void startit(void *, void *, void *);
66 int consclose(void);
68 extern void *ConsoleBase;
70 int
71 pain(void *aio)
73 long int io = 0;
74 void *kp;
75 int ksize;
76 struct stat sb;
78 extern u_int16_t timelimit;
80 xdinit(aio);
82 if (consinit(NULL)) /* Initialize fresh console */
83 return(1);
85 #ifdef PPCBOOTER
86 printf("NetBSD/AmigaPPC " NETBSD_VERS " Primary Bootstrap %s\n", bootprog_rev);
87 #else
88 printf("NetBSD/Amiga " NETBSD_VERS " Primary Bootstrap %s\n", bootprog_rev);
89 #endif
90 io = open("/boot.amiga", 0); /* Try /boot.amiga first */
91 if (io < 0) {
92 io = open("/boot", 0); /* Fallback to /boot */
93 if (io < 0) {
94 io = open("/boot.ami", 0); /* 8.3 name? */
95 if (io < 0) {
96 goto err;
101 /* get size of file? */
102 if (fstat(io, &sb))
103 goto err;
104 /* allocate memory for file */
105 ksize = sb.st_size;
106 if (ksize == 0) {
107 printf("Bad size, using 32K\n"); /* XXX debug? */
108 ksize = 32 * 1024;
110 kp = alloc(ksize);
111 if (kp == 0) {
112 errno = ENOMEM;
113 goto err;
115 /* read file into memory */
116 if (read(io, kp, ksize) != ksize) {
117 errno = ENOEXEC;
118 goto freeall;
120 /* validate boot: DOS\0 and checksum? */
121 if (strcmp(kp, "DOS") != 0 &&
122 (*(u_int32_t *)kp) != 0x424f4f54) {
123 errno = ENOEXEC;
124 goto freeall;
126 /* call boot+12(aio, sysbase); */
127 close(io);
128 startit(kp, aio, ConsoleBase);
129 errno = -1;
131 freeall:
132 dealloc(kp, ksize);
133 err:
134 printf("Error %ld\n", (long)errno);
135 close(io);
137 timelimit = 10;
138 (void)getchar();
139 consclose();
140 return 1;