]> git.saurik.com Git - apple/boot.git/blob - i386/boot1u/boot.c
8c37fae23f9464be58a356f972f88af78e13ea22
[apple/boot.git] / i386 / boot1u / boot.c
1 /*
2 * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Portions Copyright (c) 2002 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 1.2 (the "License"). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
12 * this file.
13 *
14 * The Original Code and all software distributed under the License are
15 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
20 * under the License.
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24
25 #include <libsa.h>
26 #include <libsa/memory.h>
27 #include <saio_types.h>
28 #include <saio_internal.h>
29
30 #include <fdisk.h>
31 #include <ufs.h>
32
33 #include "boot1u.h"
34 #include "disk.h"
35
36 #include <io_inline.h>
37
38 void *gFSLoadAddress;
39
40 //#define BOOT_FILE "/foo"
41 #define BOOT_FILE "/usr/standalone/i386/boot"
42
43
44 //==========================================================================
45 // Zero the BSS.
46
47 static void zeroBSS()
48 {
49 extern char _DATA__bss__begin, _DATA__bss__end;
50 extern char _DATA__common__begin, _DATA__common__end;
51
52 bzero( &_DATA__bss__begin,
53 (&_DATA__bss__end - &_DATA__bss__begin) );
54
55 bzero( &_DATA__common__begin,
56 (&_DATA__common__end - &_DATA__common__begin) );
57 }
58
59 struct BootVolume bv;
60
61 extern char chainbootdev;
62
63 void boot(int biosdev, void *partPtr)
64 {
65 struct fdisk_part part;
66 int cc;
67
68 zeroBSS();
69
70 // printf("Hello, world.\n");
71
72 // Enable A20 gate before accessing memory above 1Mb.
73 enableA20();
74
75 biosdev = biosdev & 0xFF;
76 chainbootdev = biosdev;
77
78 /* Don't believe the passed-in partition table */
79 cc = findUFSPartition(biosdev, &part);
80 if (cc<0) {
81 printf("No UFS partition\n");
82 halt();
83 }
84
85 initUFSBVRef(&bv, biosdev, &part);
86
87 gFSLoadAddress = (void *)BOOT2_ADDR;
88 cc = UFSLoadFile(&bv, BOOT_FILE);
89 if (cc < 0) {
90 printf("Could not load" BOOT_FILE "\n");
91 halt();
92 }
93 // Return to execute booter
94 }