Changeset 339e053 in mainline
- Timestamp:
- 2005-09-04T09:59:13Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8ec9bae
- Parents:
- 23f4b1fb
- Location:
- arch/ia32
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified arch/ia32/_link.ld ¶
r23f4b1fb r339e053 54 54 55 55 _hardcoded_kernel_size = (ktext_end - ktext_start) + (unmapped_ktext_end - unmapped_ktext_start) + (kdata_end - kdata_start) + (unmapped_kdata_end - unmapped_kdata_start); 56 _hardcoded_unmapped_size = (unmapped_ktext_end - unmapped_ktext_start) + (unmapped_kdata_end - unmapped_kdata_start); 56 57 57 58 _map_address = 0x80100000; -
TabularUnified arch/ia32/src/boot/boot.S ¶
r23f4b1fb r339e053 28 28 29 29 #include <arch/boot/boot.h> 30 #include <arch/boot/memmapasm.h> 30 31 31 32 .section K_TEXT_START … … 81 82 movw %ax, %ss 82 83 83 call map_kernel # map kernel and turn paging on84 85 84 movb $0xd1, %al # enable A20 using the keyboard controller 86 85 outb %al, $0x64 … … 93 92 cld 94 93 rep movsb 94 95 call map_kernel # map kernel and turn paging on 95 96 96 97 call main_bsp # never returns … … 114 115 multiboot_meeting_point: 115 116 116 pushl %ebx 117 pushl %ebx # save parameters from GRUB 117 118 pushl %eax 119 120 movl $BOOTSTRAP_OFFSET + BOOT_OFFSET, %esi 121 movl $BOOTSTRAP_OFFSET, %edi 122 movl $_hardcoded_unmapped_size, %ecx 123 cld 124 rep movsb 118 125 119 126 call map_kernel # map kernel and turn paging on … … 121 128 popl %eax 122 129 popl %ebx 123 cmpl $MULTIBOOT_LOADER_MAGIC, %eax 130 cmpl $MULTIBOOT_LOADER_MAGIC, %eax # compare GRUB signature 124 131 je valid_boot 125 126 # ... 132 133 xorl %ecx, %ecx # no memory size or map available 134 movl %ecx, e801memorysize 135 movl %ecx, e820counter 127 136 128 137 jmp invalid_boot 129 138 130 139 valid_boot: 131 140 132 movl (%ebx), %eax 133 134 # ... check flags in eax 135 136 movl 4(%ebx), %ecx 137 addl 8(%ebx), %ecx 141 movl (%ebx), %eax # ebx = physical address of struct multiboot_info 142 143 bt $0, %eax # mbi->flags[0] (mem_lower, mem_upper valid) 144 jc mem_valid 145 146 xorl %ecx, %ecx 147 jmp mem_invalid 148 149 mem_valid: 150 movl 4(%ebx), %ecx # mbi->mem_lower 151 addl 8(%ebx), %ecx # mbi->mem_upper 152 153 mem_invalid: 138 154 movl %ecx, e801memorysize 139 155 140 # movl 44(%ebx), %ecx 141 xorl %ecx, %ecx 142 movl %ecx, e820counter 143 # movl 48(%ebx), %esi 144 # movl $e820table, %edi 145 # cld 146 # rep movsb 156 bt $6, %eax # mbi->flags[6] (mmap_length, mmap_addr valid) 157 jc mmap_valid 158 159 xorl %edx, %edx 160 jmp mmap_invalid 161 162 mmap_valid: 163 movl 44(%ebx), %ecx # mbi->mmap_length 164 movl 48(%ebx), %esi # mbi->mmap_addr 165 movl $e820table, %edi 166 xorl %edx, %edx 167 168 mmap_loop: 169 cmpl $0, %ecx 170 jle mmap_end 171 172 movl 4(%esi), %eax # mmap->base_addr_low 173 movl %eax, (%edi) 174 175 movl 8(%esi), %eax # mmap->base_addr_high 176 movl %eax, 4(%edi) 177 178 movl 12(%esi), %eax # mmap->length_low 179 movl %eax, 8(%edi) 180 181 movl 16(%esi), %eax # mmap->length_high 182 movl %eax, 12(%edi) 183 184 movl 20(%esi), %eax # mmap->type 185 movl %eax, 16(%edi) 186 187 movl (%esi), %eax # mmap->size 188 addl $0x4, %eax 189 addl %eax, %esi 190 subl %eax, %ecx 191 addl $MEMMAP_E820_RECORD_SIZE, %edi 192 incl %edx 193 jmp mmap_loop 194 195 mmap_end: 196 197 mmap_invalid: 198 movl %edx, e820counter 147 199 148 200 invalid_boot: -
TabularUnified arch/ia32/src/boot/memmap.S ¶
r23f4b1fb r339e053 30 30 #include <arch/boot/memmapasm.h> 31 31 32 E820_RECORD_SIZE = MEMMAP_E820_RECORD_SIZE33 E820_MAX_RECORDS = MEMMAP_E820_MAX_RECORDS34 32 E820_SMAP = 0x534d4150 35 33 … … 47 45 movw %bx,%es 48 46 movw $e820table_boot,%di 49 movb $ E820_MAX_RECORDS,e820counter_boot47 movb $MEMMAP_E820_MAX_RECORDS,e820counter_boot 50 48 e820loop: 51 49 movl $E820_SMAP,%edx # control sequence "SMAP" 52 50 53 51 movl $0x0000e820,%eax # service 54 movl $ E820_RECORD_SIZE,%ecx52 movl $MEMMAP_E820_RECORD_SIZE,%ecx 55 53 int $0x15 56 54 jc e820err … … 59 57 jne e820err 60 58 61 cmpl $ E820_RECORD_SIZE,%ecx59 cmpl $MEMMAP_E820_RECORD_SIZE,%ecx 62 60 jne e820err # bad record size - bug in bios 63 61 64 62 movw %di,%ax # next record 65 addw $ E820_RECORD_SIZE,%ax63 addw $MEMMAP_E820_RECORD_SIZE,%ax 66 64 movw %ax,%di 67 65 … … 73 71 74 72 e820end: 75 movb $ E820_MAX_RECORDS,%al73 movb $MEMMAP_E820_MAX_RECORDS,%al 76 74 subb e820counter_boot,%al 77 75 movb %al,e820counter_boot # store # of valid entries in e820counter
Note:
See TracChangeset
for help on using the changeset viewer.