Project

General

Profile

Statistics
| Branch: | Revision:

root / prex-0.9.0 / bsp / boot / common / main.c @ 03e9c04a

History | View | Annotate | Download (2.69 KB)

1 03e9c04a Brad Neuman
/*-
2
 * Copyright (c) 2005-2009, Kohsuke Ohtani
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 * 3. Neither the name of the author nor the names of any co-contributors
14
 *    may be used to endorse or promote products derived from this software
15
 *    without specific prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
 * SUCH DAMAGE.
28
 */
29
30
/*
31
 * main.c - Boot loader main module.
32
 */
33
34
#include <boot.h>
35
#include <machdep.h>
36
#include <sys/bootinfo.h>
37
#include "load.h"
38
39
typedef void (*entry_t)(void);
40
41
/*
42
 * Loader main routine
43
 *
44
 * We assume that the following machine state has
45
 * been already set before this routine.
46
 *        - CPU is initialized.
47
 *        - DRAM is configured.
48
 *        - Loader BSS section is filled with 0.
49
 *        - Loader stack is configured.
50
 *        - All interrupts are disabled.
51
 */
52
int
53
main(void)
54
{
55
        entry_t entry;
56
57
        memset(bootinfo, 0, BOOTINFOSZ);
58
59
        /*
60
         * Initialize debug port.
61
         */
62
        debug_init();
63
        DPRINTF(("Prex Boot Loader\n"));
64
65
        /*
66
         * Do platform dependent initialization.
67
         */
68
        startup();
69
70
        /*
71
         * Show splash screen.
72
         */
73
        splash();
74
75
        /*
76
         * Load OS modules to appropriate locations.
77
         */
78
        load_os();
79
80
        /*
81
         * Dump boot infomation for debug.
82
         */
83
        dump_bootinfo();
84
85
        /*
86
         * Launch kernel.
87
         */
88
        entry = (entry_t)kvtop(bootinfo->kernel.entry);
89
        DPRINTF(("Entering kernel (at 0x%lx) ...\n\n", (long)entry));
90
        (*entry)();
91
92
        panic("Oops!");
93
        /* NOTREACHED */
94
        return 0;
95
}
96
97
/*
98
 * panic - show error message and hang up.
99
 */
100
void
101
panic(const char *msg)
102
{
103
104
        DPRINTF(("Panic: %s\n", msg));
105
106
        for (;;) ;
107
        /* NOTREACHED */
108
}