source: mainline/arch/ia32/src/boot/boot.S@ d896525

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since d896525 was a7a10630, checked in by Jakub Jermar <jakub@…>, 20 years ago

SMP recovery patch #2 (SMP is no longer broken !!!).
Fix missing KA2PA() operation in ap.S which was causing page faults during AP early initialization.
Fix bug in map_page_to_frame(): 'root' was interpretted as kernel address while read_dba() returns physical address.
Make references to page directory and page tables use kernel addresses instead of physical addresses.

Massive frame allocation code cleanup.
Basically revert to what we had had before implementation of userspace.

Usual cosmetics.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1#
2# Copyright (C) 2001-2004 Jakub Jermar
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#
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.
16#
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.
27#
28
29.section K_TEXT_START
30.global kernel_image_start
31
32.code16
33#
34# This is where we require any SPARTAN-kernel-compatible boot loader
35# to pass control in real mode.
36#
37# Protected mode tables are statically initialised during compile
38# time. So we can just load the respective table registers and
39# switch to protected mode.
40#
41kernel_image_start:
42 cli
43 call memmap_arch_init
44 xorw %ax,%ax
45 movw %ax,%ds
46 lgdt gdtr
47 movl %cr0,%eax
48 orl $0x1,%eax
49 movl %eax,%cr0
50 jmpl $8,$meeting_point
51meeting_point:
52.code32
53
54 movw $16,%ax
55 movw %ax,%es
56 movw %ax,%gs
57 movw %ax,%fs
58 movw %ax,%ds # kernel data + stack
59 movw %ax,%ss
60 movl $0x7c00,%esp
61
62 lidt idtr
63
64 call map_kernel
65
66 movl $_hardcoded_ktext_size, hardcoded_ktext_size
67 movl $_hardcoded_kdata_size, hardcoded_kdata_size
68 movl $_hardcoded_load_address, hardcoded_load_address
69
70 call main_bsp # never returns
71
72 cli
73 hlt
74
75.global map_kernel
76map_kernel:
77 #
78 # Here we setup mapping for both the unmapped and mapped sections of the kernel.
79 # For simplicity, we set only one 4M page for 0x00000000 and one for 0x80000000.
80 #
81 movl %cr4, %ecx
82 orl $(1<<4), %ecx
83 movl %ecx, %cr4 # turn PSE on
84
85 movl $((1<<7)|(1<<0)), %eax
86 movl %eax, page_directory # mapping 0x00000000 => 0x00000000
87
88 movl $(page_directory+(4096/2)), %edx
89 movl %eax, (%edx) # mapping 0x80000000 => 0x00000000
90
91 leal page_directory, %eax
92 movl %eax, %cr3
93
94 # turn on paging
95 movl %cr0, %ebx
96 orl $(1<<31), %ebx
97 movl %ebx, %cr0
98 ret
99
100
101.section K_DATA_START
102
103.align 4096
104page_directory:
105 .space 4096, 0
Note: See TracBrowser for help on using the repository browser.