Changeset 6e5252a in mainline
- Timestamp:
- 2018-11-13T20:22:20Z (6 years ago)
- Children:
- 156bae23
- Parents:
- 2214382
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-10-23 21:48:41)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-11-13 20:22:20)
- Location:
- kernel/arch
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/_link.ld.in
r2214382 r6e5252a 14 14 ENTRY(multiboot_image_start) 15 15 16 PHDRS { 17 ap_boot PT_LOAD ; 18 unmapped PT_LOAD ; 19 mapped PT_LOAD ; 20 } 21 16 22 SECTIONS { 17 23 kernel_load_address = PA2KA(BOOT_OFFSET); 18 24 19 .unmapped (BOOT_OFFSET + SIZEOF_HEADERS): AT (BOOT_OFFSET + SIZEOF_HEADERS) { 25 .ap_bootstrap (AP_BOOT_OFFSET): AT (AP_BOOT_OFFSET) { 26 ap_bootstrap_start = .; 27 28 /* Must be first. */ 29 *(.multiboot); 30 31 *(K_AP_TEXT_START); 32 *(K_AP_DATA_START); 33 ap_bootstrap_end = .; 34 } :ap_boot 35 36 .unmapped (BOOT_OFFSET): AT (BOOT_OFFSET) { 20 37 unmapped_start = .; 21 38 *(K_TEXT_START); … … 23 40 *(K_INI_PTLS); 24 41 unmapped_end = .; 25 } 42 } :unmapped 26 43 27 .mapped (PA2KA(BOOT_OFFSET) + SIZEOF _HEADERS + SIZEOF(.unmapped)) : AT (BOOT_OFFSET + SIZEOF_HEADERS+ SIZEOF(.unmapped)) {44 .mapped (PA2KA(BOOT_OFFSET) + SIZEOF(.unmapped)) : AT (BOOT_OFFSET + SIZEOF(.unmapped)) { 28 45 ktext_start = .; 29 46 *(.text .text.*); … … 43 60 44 61 kdata_end = .; 45 } 62 } :mapped 46 63 47 64 #ifdef CONFIG_LINE_DEBUG … … 63 80 64 81 #ifdef CONFIG_SMP 65 ap_boot = unmapped_ap_boot - BOOT_OFFSET + AP_BOOT_OFFSET;66 ap_gdtr = unmapped_ap_gdtr - BOOT_OFFSET + AP_BOOT_OFFSET;67 82 protected_ap_gdtr = PA2KA(ap_gdtr); 68 83 #endif /* CONFIG_SMP */ -
kernel/arch/amd64/include/arch/boot/boot.h
r2214382 r6e5252a 42 42 #ifndef __ASSEMBLER__ 43 43 44 extern uint8_t unmapped_end[]; 44 extern uint8_t ap_bootstrap_start[]; 45 extern uint8_t ap_bootstrap_end[]; 45 46 46 47 #endif /* __ASSEMBLER__ */ -
kernel/arch/amd64/src/amd64.c
r2214382 r6e5252a 92 92 multiboot_info_parse(signature, (multiboot_info_t *) info); 93 93 multiboot2_info_parse(signature, (multiboot2_info_t *) info); 94 95 #ifdef CONFIG_SMP96 size_t unmapped_size = (uintptr_t) unmapped_end - BOOT_OFFSET;97 /* Copy AP bootstrap routines below 1 MB. */98 memcpy((void *) AP_BOOT_OFFSET, (void *) BOOT_OFFSET, unmapped_size);99 #endif100 94 } 101 95 -
kernel/arch/amd64/src/boot/multiboot.S
r2214382 r6e5252a 46 46 #define START_STACK (BOOT_OFFSET - BOOT_STACK_SIZE) 47 47 48 .section K_TEXT_START, "ax" 49 50 .code32 51 52 .macro pm_error msg 53 movl \msg, %esi 54 jmp pm_error_halt 55 .endm 56 57 .macro pm_status msg 58 #if defined(CONFIG_EGA) && !defined(CONFIG_FB) 59 pushl %esi 60 movl \msg, %esi 61 call pm_early_puts 62 popl %esi 63 #endif 64 .endm 65 66 .macro pm2_status msg 67 #ifndef CONFIG_FB 68 pm_status \msg 69 #endif 70 .endm 48 .section .multiboot, "a" 71 49 72 50 .align 4 … … 91 69 .long CONFIG_BFB_BPP 92 70 #endif 71 72 .section K_TEXT_START, "ax" 73 74 .code32 75 76 .macro pm_error msg 77 movl \msg, %esi 78 jmp pm_error_halt 79 .endm 80 81 .macro pm_status msg 82 #if defined(CONFIG_EGA) && !defined(CONFIG_FB) 83 pushl %esi 84 movl \msg, %esi 85 call pm_early_puts 86 popl %esi 87 #endif 88 .endm 89 90 .macro pm2_status msg 91 #ifndef CONFIG_FB 92 pm_status \msg 93 #endif 94 .endm 93 95 94 96 SYMBOL(multiboot_image_start) -
kernel/arch/amd64/src/boot/multiboot2.S
r2214382 r6e5252a 35 35 #include <genarch/multiboot/multiboot2.h> 36 36 37 .section K_TEXT_START, "ax" 38 39 .code32 37 .section .multiboot, "a" 40 38 41 39 .align 8 -
kernel/arch/amd64/src/smp/ap.S
r2214382 r6e5252a 41 41 #include <arch/context_struct.h> 42 42 43 .section K_ TEXT_START, "ax"43 .section K_AP_TEXT_START, "ax" 44 44 45 45 #ifdef CONFIG_SMP … … 50 50 51 51 .align 4096 52 SYMBOL(unmapped_ap_boot) 52 53 SYMBOL(ap_boot) 53 54 .code16 54 55 cli … … 61 62 orl $CR0_PE, %eax 62 63 movl %eax, %cr0 # switch to protected mode 63 jmpl $GDT_SELECTOR(KTEXT32_DES), $jump_to_kernel - BOOT_OFFSET + AP_BOOT_OFFSET64 jmpl $GDT_SELECTOR(KTEXT32_DES), $jump_to_kernel 64 65 65 66 jump_to_kernel: … … 94 95 95 96 # At this point we are in compatibility mode 96 jmpl $GDT_SELECTOR(KTEXT_DES), $start64 - BOOT_OFFSET + AP_BOOT_OFFSET97 jmpl $GDT_SELECTOR(KTEXT_DES), $start64 97 98 98 99 .code64 … … 109 110 #endif /* CONFIG_SMP */ 110 111 111 .section K_ DATA_START, "aw", @progbits112 .section K_AP_DATA_START, "aw", @progbits 112 113 113 114 #ifdef CONFIG_SMP 114 115 115 SYMBOL( unmapped_ap_gdtr)116 SYMBOL(ap_gdtr) 116 117 .word 0 117 118 .long 0 -
kernel/arch/ia32/_link.ld.in
r2214382 r6e5252a 14 14 ENTRY(multiboot_image_start) 15 15 16 PHDRS { 17 ap_boot PT_LOAD ; 18 unmapped PT_LOAD ; 19 mapped PT_LOAD ; 20 } 21 16 22 SECTIONS { 17 23 kernel_load_address = PA2KA(BOOT_OFFSET); 18 24 19 .unmapped (BOOT_OFFSET + SIZEOF_HEADERS): AT (BOOT_OFFSET + SIZEOF_HEADERS) { 25 .ap_bootstrap (AP_BOOT_OFFSET): AT (AP_BOOT_OFFSET) { 26 ap_bootstrap_start = .; 27 28 /* Must be first. */ 29 *(.multiboot); 30 31 *(K_AP_TEXT_START); 32 *(K_AP_DATA_START); 33 ap_bootstrap_end = .; 34 } :ap_boot 35 36 .unmapped (BOOT_OFFSET): AT (BOOT_OFFSET) { 20 37 unmapped_start = .; 21 38 *(K_TEXT_START); 22 39 *(K_DATA_START); 23 40 unmapped_end = .; 24 } 41 } :unmapped 25 42 26 .mapped (PA2KA(BOOT_OFFSET) + SIZEOF _HEADERS + SIZEOF(.unmapped)): AT (BOOT_OFFSET + SIZEOF_HEADERS+ SIZEOF(.unmapped)) {43 .mapped (PA2KA(BOOT_OFFSET) + SIZEOF(.unmapped)): AT (BOOT_OFFSET + SIZEOF(.unmapped)) { 27 44 ktext_start = .; 28 45 *(.text .text.*); … … 41 58 *(symtab.*); /* Symbol table, must be LAST symbol! */ 42 59 kdata_end = .; 43 } 60 } :mapped 44 61 45 62 #ifdef CONFIG_LINE_DEBUG … … 61 78 62 79 #ifdef CONFIG_SMP 63 64 ap_boot = unmapped_ap_boot - BOOT_OFFSET + AP_BOOT_OFFSET;65 ap_gdtr = unmapped_ap_gdtr - BOOT_OFFSET + AP_BOOT_OFFSET;66 80 protected_ap_gdtr = PA2KA(ap_gdtr); 67 68 81 #endif /* CONFIG_SMP */ 69 82 -
kernel/arch/ia32/include/arch/boot/boot.h
r2214382 r6e5252a 44 44 #ifdef CONFIG_SMP 45 45 46 extern uint8_t unmapped_end[]; 46 extern uint8_t ap_bootstrap_start[]; 47 extern uint8_t ap_bootstrap_end[]; 47 48 48 49 #endif /* CONFIG_SMP */ -
kernel/arch/ia32/src/boot/multiboot.S
r2214382 r6e5252a 46 46 #define START_STACK (BOOT_OFFSET - BOOT_STACK_SIZE) 47 47 48 .section K_TEXT_START, "ax" 49 50 .code32 51 52 .macro pm_status msg 53 #if defined(CONFIG_EGA) && !defined(CONFIG_FB) 54 pushl %esi 55 movl \msg, %esi 56 call pm_early_puts 57 popl %esi 58 #endif 59 .endm 60 61 .macro pm2_status msg 62 pushl \msg 63 call early_puts 64 .endm 48 .section .multiboot, "a" 65 49 66 50 .align 4 … … 85 69 .long CONFIG_BFB_BPP 86 70 #endif 71 72 .section K_TEXT_START, "ax" 73 74 .code32 75 76 .macro pm_status msg 77 #if defined(CONFIG_EGA) && !defined(CONFIG_FB) 78 pushl %esi 79 movl \msg, %esi 80 call pm_early_puts 81 popl %esi 82 #endif 83 .endm 84 85 .macro pm2_status msg 86 pushl \msg 87 call early_puts 88 .endm 87 89 88 90 SYMBOL(multiboot_image_start) -
kernel/arch/ia32/src/boot/multiboot2.S
r2214382 r6e5252a 33 33 #include <genarch/multiboot/multiboot2.h> 34 34 35 .section K_TEXT_START, "ax" 36 37 .code32 35 .section .multiboot, "a" 38 36 39 37 .align 8 -
kernel/arch/ia32/src/ia32.c
r2214382 r6e5252a 92 92 multiboot_info_parse(signature, (multiboot_info_t *) info); 93 93 multiboot2_info_parse(signature, (multiboot2_info_t *) info); 94 95 #ifdef CONFIG_SMP96 size_t unmapped_size = (uintptr_t) unmapped_end - BOOT_OFFSET;97 /* Copy AP bootstrap routines below 1 MB. */98 memcpy((void *) AP_BOOT_OFFSET, (void *) BOOT_OFFSET, unmapped_size);99 #endif100 94 } 101 95 -
kernel/arch/ia32/src/mm/frame.c
r2214382 r6e5252a 152 152 153 153 #ifdef CONFIG_SMP 154 size_t unmapped_size = 155 (uintptr_t) unmapped_end - BOOT_OFFSET; 156 157 minconf = max(minconf, 158 ADDR2PFN(AP_BOOT_OFFSET + unmapped_size)); 154 // FIXME: What is the purpose of minconf? Can we remove it? 155 uintptr_t ap_end = ALIGN_UP((uintptr_t) ap_bootstrap_end, FRAME_SIZE); 156 minconf = max(minconf, ADDR2PFN(ap_end)); 159 157 #endif 160 158 … … 165 163 166 164 #ifdef CONFIG_SMP 165 // TODO: should go away implicitly with section table 166 167 167 /* Reserve AP real mode bootstrap memory */ 168 size_t ap_size = 169 ALIGN_UP(ap_bootstrap_end - ap_bootstrap_start, FRAME_SIZE); 168 170 frame_mark_unavailable(AP_BOOT_OFFSET >> FRAME_WIDTH, 169 unmapped_size >> FRAME_WIDTH);171 ap_size >> FRAME_WIDTH); 170 172 #endif 171 173 } -
kernel/arch/ia32/src/smp/ap.S
r2214382 r6e5252a 40 40 #include <arch/context_struct.h> 41 41 42 .section K_ TEXT_START, "ax"42 .section K_AP_TEXT_START, "ax" 43 43 44 44 #ifdef CONFIG_SMP … … 54 54 55 55 .align 4096 56 SYMBOL( unmapped_ap_boot)56 SYMBOL(ap_boot) 57 57 .code16 58 58 cli … … 67 67 orl $CR0_PE, %eax 68 68 movl %eax, %cr0 69 jmpl $KTEXT, $jump_to_kernel - BOOT_OFFSET + AP_BOOT_OFFSET69 jmpl $KTEXT, $jump_to_kernel 70 70 71 71 jump_to_kernel: … … 96 96 97 97 98 .section K_ DATA_START, "aw", @progbits98 .section K_AP_DATA_START, "aw", @progbits 99 99 100 100 #ifdef CONFIG_SMP 101 101 102 SYMBOL( unmapped_ap_gdtr)102 SYMBOL(ap_gdtr) 103 103 .word 0 104 104 .long 0
Note:
See TracChangeset
for help on using the changeset viewer.