Changeset 8ccec3c1 in mainline
- Timestamp:
- 2006-01-04T22:41:05Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 45ba9cf
- Parents:
- a59e81e
- Location:
- arch
- Files:
-
- 1 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/src/boot/boot.S
ra59e81e r8ccec3c1 81 81 1: 82 82 jmp 1b 83 84 .code32 85 .align 4 86 multiboot_header: 87 .long MULTIBOOT_HEADER_MAGIC 88 .long MULTIBOOT_HEADER_FLAGS 89 .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) # checksum 90 .long multiboot_header + BOOT_OFFSET 91 .long unmapped_ktext_start + BOOT_OFFSET 92 .long 0 93 .long 0 94 .long multiboot_image_start + BOOT_OFFSET 95 96 multiboot_image_start: 97 movl $START_STACK, %esp # initialize stack pointer 98 # FIXME TODO 83 99 84 100 # Protected 32-bit. We want to reuse the code-seg descriptor, 85 101 # the Default operand size must not be 1 when entering long mode 86 .code3287 102 now_in_prot: 88 103 # Set up stack & data descriptors -
arch/amd64/src/boot/memmap.S
-
Property mode
changed from
120000
to100644
ra59e81e r8ccec3c1 1 ../../../ia32/src/boot/memmap.S 1 /* 2 * Copyright (C) 2005 Josef Cejka 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 30 #include <arch/boot/memmap.h> 31 32 E820_SMAP = 0x534d4150 33 34 .global memmap_arch_init 35 .global e801memorysize 36 37 .code16 38 .section K_TEXT_START_2, "ax" 39 40 memmap_arch_init: 41 e820begin: 42 xorl %ebx,%ebx # during first call, ebx must be 0 43 movw $e820table_boot,%di 44 movb $MEMMAP_E820_MAX_RECORDS,e820counter_boot 45 e820loop: 46 movl $E820_SMAP,%edx # control sequence "SMAP" 47 48 movl $0x0000e820,%eax # service 49 movl $MEMMAP_E820_RECORD_SIZE,%ecx 50 int $0x15 51 jc e820err 52 53 cmpl $E820_SMAP,%eax # verifying BIOS 54 jne e820err 55 56 cmpl $MEMMAP_E820_RECORD_SIZE,%ecx 57 jne e820err # bad record size - bug in bios 58 59 movw %di,%ax # next record 60 addw $MEMMAP_E820_RECORD_SIZE,%ax 61 movw %ax,%di 62 63 decb e820counter_boot # buffer is full 64 jz e820end 65 66 testl %ebx,%ebx 67 jnz e820loop 68 69 e820end: 70 movb $MEMMAP_E820_MAX_RECORDS,%al 71 subb e820counter_boot,%al 72 movb %al,e820counter_boot # store # of valid entries in e820counter 73 74 jmp e801begin 75 76 e820err: 77 movb $0,e820counter_boot 78 79 # method e801 - get size of memory 80 81 e801begin: 82 xorw %dx,%dx 83 xorw %cx,%cx 84 xorw %bx,%bx 85 movw $0xe801,%ax 86 stc 87 int $0x15 88 89 jc e801end 90 91 # fix problem with some BIOSes which use ax:bx rather than cx:dx 92 testw %cx,%cx 93 jnz e801cxdx 94 testw %dx,%dx 95 jnz e801cxdx 96 97 movw %ax,%cx 98 movw %bx,%dx 99 100 e801cxdx: 101 andl $0xffff,%edx 102 shll $6,%edx 103 andl $0xffff,%ecx 104 addl %ecx,%edx 105 addl $0x0400,%edx # add lower 1 MB - it's not included by e801 method 106 movl %edx,e801memorysize 107 e801end: 108 ret 109 110 111 .section K_DATA_START, "aw", @progbits 112 113 #memory size in 1 kb chunks 114 e801memorysize: 115 .long 0 -
Property mode
changed from
-
arch/amd64/src/mm/memory_init.c
-
Property mode
changed from
120000
to100644
ra59e81e r8ccec3c1 1 ../../../ia32/src/mm/memory_init.c 1 /* 2 * Copyright (C) 2005 Josef Cejka 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 #include <arch/boot/memmap.h> 30 #include <arch/mm/memory_init.h> 31 #include <arch/mm/page.h> 32 #include <print.h> 33 34 __u8 e820counter __attribute__ ((section ("BOOT_DATA"))) = 0xff; 35 struct e820memmap_ e820table[MEMMAP_E820_MAX_RECORDS] __attribute__ ((section ("BOOT_DATA"))) ; 36 37 size_t get_memory_size(void) 38 { 39 return e801memorysize*1024; 40 } 41 42 void memory_print_map(void) 43 { 44 __u8 i; 45 46 for (i=0;i<e820counter;i++) { 47 printf("E820 base: %Q size: %Q type: ", e820table[i].base_address, e820table[i].size); 48 switch (e820table[i].type) { 49 case MEMMAP_MEMORY_AVAILABLE: 50 printf("available memory\n"); 51 break; 52 case MEMMAP_MEMORY_RESERVED: 53 printf("reserved memory\n"); 54 break; 55 case MEMMAP_MEMORY_ACPI: 56 printf("ACPI table\n"); 57 break; 58 case MEMMAP_MEMORY_NVS: 59 printf("NVS\n"); 60 break; 61 case MEMMAP_MEMORY_UNUSABLE: 62 printf("unusable memory\n"); 63 break; 64 default: 65 printf("undefined memory type\n"); 66 } 67 } 68 69 } 70 -
Property mode
changed from
-
arch/ia32/Makefile.inc
ra59e81e r8ccec3c1 115 115 arch/$(ARCH)/src/drivers/ega.c \ 116 116 arch/$(ARCH)/src/boot/boot.S \ 117 arch/$(ARCH)/src/boot/memmap.S \118 117 arch/$(ARCH)/src/fpu_context.c -
arch/ia32/_link.ld.in
ra59e81e r8ccec3c1 12 12 #include <arch/boot/boot.h> 13 13 #include <arch/mm/page.h> 14 15 ENTRY(kernel_image_start)16 14 17 15 SECTIONS { … … 29 27 .mapped (PA2KA(BOOT_OFFSET+BOOTSTRAP_OFFSET)+SIZEOF(.unmapped)): AT (BOOTSTRAP_OFFSET+SIZEOF(.unmapped)) { 30 28 ktext_start = .; 31 *(BOOT_DATA);32 29 *(.text); 33 30 ktext_end = .; -
arch/ia32/src/boot/boot.S
ra59e81e r8ccec3c1 33 33 34 34 .section K_TEXT_START, "ax" 35 .global kernel_image_start36 35 37 36 KTEXT=8 38 37 KDATA=16 39 38 40 .code1641 #42 # This is where we require any SPARTAN-kernel-compatible boot loader43 # to pass control in real mode.44 #45 # Protected mode tables are statically initialised during compile46 # time. So we can just load the respective table registers and47 # switch to protected mode.48 #49 kernel_image_start:50 cli51 xorw %ax, %ax52 movw %ax, %ds53 movw %ax, %es54 movw %ax, %ss # initialize stack segment register55 movl $BOOTSTRAP_OFFSET - 0x400, %esp # initialize stack pointer56 57 call memmap_arch_init58 59 lgdt real_bootstrap_gdtr_boot # initialize Global Descriptor Table register60 61 movl %cr0, %eax62 orl $0x1, %eax63 movl %eax, %cr0 # switch to protected mode64 65 jmpl $KTEXT, $boot_image_start66 67 39 .code32 68 40 .align 4 … … 77 49 .long multiboot_image_start + BOOT_OFFSET 78 50 79 boot_image_start:80 movw $KDATA, %ax81 movw %ax, %es82 movw %ax, %gs83 movw %ax, %fs84 movw %ax, %ds # kernel data + stack85 movw %ax, %ss86 87 movb $0xd1, %al # enable A20 using i8042 controller88 outb %al, $0x6489 movb $0xdf, %al90 outb %al, $0x6091 92 movl $BOOTSTRAP_OFFSET, %esi93 movl $BOOTSTRAP_OFFSET + BOOT_OFFSET, %edi94 movl $_hardcoded_kernel_size, %ecx95 cld96 rep movsb97 98 call map_kernel # map kernel and turn paging on99 100 call main_bsp # never returns101 102 cli103 hlt104 105 51 multiboot_image_start: 106 52 movl $BOOTSTRAP_OFFSET - 0x400, %esp # initialize stack pointer
Note:
See TracChangeset
for help on using the changeset viewer.