Chameleon

Chameleon Svn Source Tree

Root/branches/rewrite/i386/boot2/boot.c

Source at commit 1146 created 12 years 10 months ago.
By azimutz, Sync with trunk (r1145). Add nVidia dev id's, 0DF4 for "GeForce GT 450M" (issue 99) and 1251 for "GeForce GTX 560M" (thanks to oSxFr33k for testing).
1/*
2 * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Portions Copyright (c) 1999-2003 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 2.0 (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 * Mach Operating System
26 * Copyright (c) 1990 Carnegie-Mellon University
27 * Copyright (c) 1989 Carnegie-Mellon University
28 * All rights reserved. The CMU software License Agreement specifies
29 * the terms and conditions for use and redistribution.
30 */
31
32/*
33 * INTEL CORPORATION PROPRIETARY INFORMATION
34 *
35 * This software is supplied under the terms of a license agreement or
36 * nondisclosure agreement with Intel Corporation and may not be copied
37 * nor disclosed except in accordance with the terms of that agreement.
38 *
39 * Copyright 1988, 1989 by Intel Corporation
40 */
41
42/*
43 * Copyright 1993 NeXT Computer, Inc.
44 * All rights reserved.
45 */
46
47/*
48 * Completely reworked by Sam Streeper (sam_s@NeXT.com)
49 * Reworked again by Curtis Galloway (galloway@NeXT.com)
50 */
51
52
53#include "boot.h"
54#include "sl.h"
55#include "libsa.h"
56
57extern void init_module_system();
58extern int execute_hook(const char* name, void*, void*, void*, void*);
59
60
61long gBootMode; /* defaults to 0 == kBootModeNormal */
62bool gOverrideKernel;
63char *gPlatformName;
64char gRootDevice[512];
65char gMKextName[512];
66char gMacOSVersion[8];
67bool gEnableCDROMRescan;
68bool gScanSingleDrive;
69
70int bvCount = 0;
71int gDeviceCount = 0;
72
73BVRef bvr;
74BVRef menuBVR;
75BVRef bvChain;
76bool useGUI;
77
78/*
79 * How long to wait (in seconds) to load the
80 * kernel after displaying the "boot:" prompt.
81 */
82#define kBootErrorTimeout 5
83
84/*
85 * Default path to kernel cache file
86 */
87//Slice - first one for Leopard
88#define kDefaultCachePathLeo "/System/Library/Caches/com.apple.kernelcaches/"
89#define kDefaultCachePathSnow "/System/Library/Caches/com.apple.kext.caches/Startup/"
90
91//==========================================================================
92// Zero the BSS.
93
94static void zeroBSS(void)
95{
96extern char _DATA__bss__begin, _DATA__bss__end;
97extern char _DATA__common__begin, _DATA__common__end;
98
99bzero(&_DATA__bss__begin, (&_DATA__bss__end - &_DATA__bss__begin));
100bzero(&_DATA__common__begin, (&_DATA__common__end - &_DATA__common__begin));
101}
102
103//==========================================================================
104// Malloc error function
105
106static void malloc_error(char *addr, size_t size, const char *file, int line)
107{
108stop("\nMemory allocation error! Addr=0x%x, Size=0x%x, File=%s, Line=%d\n", (unsigned)addr, (unsigned)size, file, line);
109}
110
111//==========================================================================
112//Initializes the runtime. Right now this means zeroing the BSS and initializing malloc.
113//
114void initialize_runtime(void)
115{
116zeroBSS();
117malloc_init(0, 0, 0, malloc_error);
118}
119
120//==========================================================================
121// This is the entrypoint from real-mode which functions exactly as it did
122// before. Multiboot does its own runtime initialization, does some of its
123// own things, and then calls common_boot.
124void boot(int biosdev)
125{
126initialize_runtime();
127// Enable A20 gate before accessing memory above 1Mb.
128enableA20();
129common_boot(biosdev);
130}
131
132//==========================================================================
133// The 'main' function for the booter. Called by boot0 when booting
134// from a block device, or by the network booter.
135//
136// arguments:
137// biosdev - Value passed from boot1/NBP to specify the device
138// that the booter was loaded from.
139//
140// If biosdev is kBIOSDevNetwork, then this function will return if
141// booting was unsuccessful. This allows the PXE firmware to try the
142// next boot device on its list.
143void common_boot(int biosdev)
144{
145 video_mode( 2 ); // 80x25 mono text mode.
146
147// Intialize module system
148init_module_system();
149
150 int loopCount = 0;
151 while(1)
152 {
153 execute_hook("WorkLoop", (void*)loopCount++, NULL, NULL, NULL);// Main work loop
154 }
155}
156

Archive Download this file

Revision: 1146