2
* Copyright (c) 2005 Martin Decky
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
9
* - Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* - Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
* - The name of the author may not be used to endorse or promote products
15
* derived from this software without specific prior written permission.
17
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
#include "_components.h"
38
#define KERNEL_VIRTUAL_ADDRESS 0x80100000
40
char *release = STRING(RELEASE);
43
char *revision = ", revision " STRING(REVISION);
49
char *timestamp = "\nBuilt on " STRING(TIMESTAMP);
54
/** Print version information. */
55
static void version_print(void)
57
printf("HelenOS MIPS32 Bootloader\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n", release, revision, timestamp);
64
component_t components[COMPONENTS];
65
init_components(components);
69
printf("\nMemory statistics\n");
70
printf(" kernel entry point at %L\n", KERNEL_VIRTUAL_ADDRESS);
71
printf(" %L: boot info structure\n", &bootinfo);
74
for (i = 0; i < COMPONENTS; i++)
75
printf(" %L: %s image (size %d bytes)\n", components[i].start, components[i].name, components[i].size);
77
printf("\nCopying components\n");
81
for (i = 0; i < min(COMPONENTS, TASKMAP_MAX_RECORDS); i++) {
82
printf(" %s...", components[i].name);
83
top = ALIGN_UP(top, PAGE_SIZE);
84
memcpy(((void *) KERNEL_VIRTUAL_ADDRESS) + top, components[i].start, components[i].size);
86
bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top;
87
bootinfo.tasks[bootinfo.cnt].size = components[i].size;
88
strncpy(bootinfo.tasks[bootinfo.cnt].name,
89
components[i].name, BOOTINFO_TASK_NAME_BUFLEN);
92
top += components[i].size;
96
unsigned int *cpumap = (unsigned int *) CPUMAP;
98
for (i = 0; i < CPUMAP_MAX_RECORDS; i++) {
100
bootinfo.cpumap |= (1 << i);
103
printf("\nBooting the kernel...\n");
104
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo);