(c) versus (C)
[helenos.git] / kernel / arch / ia32xen / src / boot / boot.S
blob57dd148e4f0d717bfbe58044314fd5a7b471e7cc
2 # Copyright (c) 2006 Martin Decky
3 # All rights reserved.
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
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.
29 #include <arch/boot/boot.h>
30 #include <arch/mm/page.h>
31 #include <arch/pm.h>
33 #define ELFNOTE(name, type, desctype, descval) \
34         .section .note.name; \
35         .align 4; \
36         .long 2f - 1f; \
37         .long 4f - 3f; \
38         .long type; \
39         1:.asciz #name; \
40         2:.align 4; \
41         3:desctype descval; \
42         4:.align 4
44 ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS,                      .asciz, "HelenOS")
45 ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION,         .asciz, RELEASE)
46 ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION,           .asciz, "xen-3.0")
47 ELFNOTE(Xen, XEN_ELFNOTE_VIRT_BASE,                     .long,  PA2KA(BOOT_OFFSET))
48 ELFNOTE(Xen, XEN_ELFNOTE_PADDR_OFFSET,          .long,  0)
49 ELFNOTE(Xen, XEN_ELFNOTE_ENTRY,                         .long,  kernel_image_start)
50 ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE,        .long,  hypercall_page)
51 ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,                      .asciz, "auto_translated_physmap|supervisor_mode_kernel")
52 ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,                      .asciz, "no")
53 ELFNOTE(Xen, XEN_ELFNOTE_LOADER,                        .asciz, "generic")
55 .text
57 .code32
58 .align 4
59 .global kernel_image_start
60         
61 kernel_image_start:
62         # copy start_info (esi initialized by Xen)
63         
64         movl $start_info, %edi
65         movl $START_INFO_SIZE >> 2, %ecx
66         cld
67         rep movsb
68         
69         # switch to temporal kernel stack
70         
71         movl $kernel_stack, %esp
72         
73         call arch_pre_main
74         call main_bsp                                                           # never returns
76         cli
77         hlt
79 kernel_stack_bottom:
80         .space TEMP_STACK_SIZE
81 kernel_stack:
83 .section K_TEXT_START, "aw", @progbits
84 .global hypercall_page
85 .org 0
86 hypercall_page:
87         .space PAGE_SIZE
89 .global shared_info
90 .org 0x1000
91 shared_info:
92         .space PAGE_SIZE
94 .global console_page
95 .org 0x2000
96 console_page:
97         .space PAGE_SIZE
99 # Xen 3.0.3 ELF loader is somehow buggy
100 # thus this workaround
101 .global dummy_fill
102 dummy_fill:
103         .space (1024 * 1024)