Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/src/boot/multiboot.S

    rf66c203d r4bf0926e  
    2929 */
    3030
     31#include <abi/asmtool.h>
    3132#include <arch/boot/boot.h>
    3233#include <arch/mm/page.h>
     
    6465
    6566.align 4
    66 .global multiboot_image_start
    6767multiboot_header:
    6868        .long MULTIBOOT_HEADER_MAGIC
     
    7575        .long multiboot_image_start
    7676
    77 multiboot_image_start:
     77SYMBOL(multiboot_image_start)
    7878        cli
    7979        cld
     
    168168       
    169169        movl %cr4, %eax
    170         btsl $5, %eax
     170        orl $CR4_PAE, %eax
    171171        movl %eax, %cr4
    172172       
     
    176176       
    177177        /* Enable long mode */
    178         movl $EFER_MSR_NUM, %ecx
     178        movl $AMD_MSR_EFER, %ecx
    179179        rdmsr                     /* read EFER */
    180         btsl $AMD_LME_FLAG, %eax  /* set LME = 1 */
     180        orl $AMD_LME, %eax        /* set LME = 1 */
    181181        wrmsr
    182182       
    183183        /* Enable paging to activate long mode (set CR0.PG = 1) */
    184184        movl %cr0, %eax
    185         btsl $31, %eax
     185        orl $CR0_PG, %eax
    186186        movl %eax, %cr0
    187187       
     
    427427        long_status $status_long
    428428       
    429         /* Call arch_pre_main(multiboot_eax, multiboot_ebx) */
    430         xorq %rdi, %rdi
     429        /* Call amd64_pre_main(multiboot_eax, multiboot_ebx) */
    431430        movl multiboot_eax, %edi
    432         xorq %rsi, %rsi
    433431        movl multiboot_ebx, %esi
    434432       
    435         movabsq $arch_pre_main, %rax
     433#ifdef MEMORY_MODEL_large
     434        movabsq $amd64_pre_main, %rax
    436435        callq *%rax
     436#else
     437        callq amd64_pre_main
     438#endif
    437439       
    438440        long_status $status_main
    439441       
    440442        /* Call main_bsp() */
     443#ifdef MEMORY_MODEL_large
    441444        movabsq $main_bsp, %rax
    442         call *%rax
     445        callq *%rax
     446#else
     447        callq main_bsp
     448#endif
    443449       
    444450        /* Not reached */
     
    627633        ptl2gen 512 7
    628634
     635#ifdef MEMORY_MODEL_kernel
     636.align 4096
     637ptl_1:
     638        /* Identity mapping for [0; 8G) */
     639        .quad ptl_2_0g + (PTL_WRITABLE | PTL_PRESENT)
     640        .quad ptl_2_1g + (PTL_WRITABLE | PTL_PRESENT)
     641        .quad ptl_2_2g + (PTL_WRITABLE | PTL_PRESENT)
     642        .quad ptl_2_3g + (PTL_WRITABLE | PTL_PRESENT)
     643        .quad ptl_2_4g + (PTL_WRITABLE | PTL_PRESENT)
     644        .quad ptl_2_5g + (PTL_WRITABLE | PTL_PRESENT)
     645        .quad ptl_2_6g + (PTL_WRITABLE | PTL_PRESENT)
     646        .quad ptl_2_7g + (PTL_WRITABLE | PTL_PRESENT)
     647        .fill 502, 8, 0
     648        /* Mapping of [0; 2G) at -2G */
     649        .quad ptl_2_0g + (PTL_WRITABLE | PTL_PRESENT)
     650        .quad ptl_2_1g + (PTL_WRITABLE | PTL_PRESENT)
     651
     652.align 4096
     653SYMBOL(ptl_0)
     654        .quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT)
     655        .fill 510, 8, 0
     656        .quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT)
     657#endif
     658
     659#ifdef MEMORY_MODEL_large
    629660.align 4096
    630661ptl_1:
     
    641672
    642673.align 4096
    643 .global ptl_0
    644 ptl_0:
     674SYMBOL(ptl_0)
    645675        .quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT)
    646676        .fill 255, 8, 0
    647677        .quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT)
    648678        .fill 255, 8, 0
     679#endif
    649680
    650681.section K_DATA_START, "aw", @progbits
    651682
    652 .global bootstrap_idtr
    653 bootstrap_idtr:
     683SYMBOL(bootstrap_idtr)
    654684        .word 0
    655685        .long 0
    656686
    657 .global bootstrap_gdtr
    658 bootstrap_gdtr:
     687SYMBOL(bootstrap_gdtr)
    659688        .word GDT_SELECTOR(GDT_ITEMS)
    660689        .long KA2PA(gdt)
    661690
    662 .global multiboot_eax
    663 multiboot_eax:
     691SYMBOL(multiboot_eax)
    664692        .long 0
    665693
    666 .global multiboot_ebx
    667 multiboot_ebx:
     694SYMBOL(multiboot_ebx)
    668695        .long 0
    669696
Note: See TracChangeset for help on using the changeset viewer.