Ignore:
File:
1 edited

Legend:

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

    r8844e70 r7ba16eb  
    3131#include <abi/asmtool.h>
    3232#include <arch/boot/boot.h>
     33#include <arch/boot/memmap.h>
    3334#include <arch/mm/page.h>
    3435#include <arch/pm.h>
    3536#include <genarch/multiboot/multiboot.h>
    3637#include <arch/cpuid.h>
     38#include <arch/cpu.h>
    3739
    3840#define START_STACK  (BOOT_OFFSET - BOOT_STACK_SIZE)
     
    166168        /* Paging features */
    167169        movl %cr4, %ecx
    168         orl $(1 << 4), %ecx      /* PSE on */
    169         andl $(~(1 << 5)), %ecx  /* PAE off */
     170        orl $CR4_PSE, %ecx      /* PSE on */
     171        andl $~CR4_PAE, %ecx    /* PAE off */
    170172        movl %ecx, %cr4
    171173       
     
    176178       
    177179        floop_pse:
    178                 movl $((1 << 7) | (1 << 1) | (1 << 0)), %eax
     180                movl $(PDE_4M | PDE_RW | PDE_P), %eax
    179181                orl %ebx, %eax
    180182                /* Mapping 0x00000000 + %ecx * 4M => 0x00000000 + %ecx * 4M */
     
    191193       
    192194        movl %cr0, %ebx
    193         orl $(1 << 31), %ebx  /* paging on */
     195        orl $CR0_PG, %ebx       /* paging on */
    194196        movl %ebx, %cr0
    195197        ret
     
    205207        /* Paging features */
    206208        movl %cr4, %ecx
    207         andl $(~(1 << 5)), %ecx  /* PAE off */
     209        andl $~CR4_PAE, %ecx  /* PAE off */
    208210        movl %ecx, %cr4
    209211       
     
    220222               
    221223                /* Align address down to 4k */
    222                 andl $(~4095), %esi
     224                andl $(~(PAGE_SIZE - 1)), %esi
    223225               
    224226        use_kernel_end:
    225227               
    226228                /* Align address to 4k */
    227                 addl $4095, %esi
    228                 andl $(~4095), %esi
     229                addl $(PAGE_SIZE - 1), %esi
     230                andl $(~(PAGE_SIZE - 1)), %esi
    229231               
    230232                /* Allocate space for page tables */
    231233                movl %esi, pt_loc
    232                 movl $ballocs, %edi
    233                 andl $0x7fffffff, %edi
     234                movl $KA2PA(ballocs), %edi
    234235               
    235236                movl %esi, (%edi)
     
    242243               
    243244                floop_pt:
    244                         movl $((1 << 1) | (1 << 0)), %eax
     245                        movl $(PTE_RW | PTE_P), %eax
    245246                        orl %ebx, %eax
    246247                        movl %eax, (%esi, %ecx, 4)
    247                         addl $(4 * 1024), %ebx
     248                        addl $PAGE_SIZE, %ebx
    248249                       
    249250                        incl %ecx
     
    259260               
    260261                floop:
    261                         movl $((1 << 1) | (1 << 0)), %eax
     262                        movl $(PDE_RW | PDE_P), %eax
    262263                        orl %ebx, %eax
    263264                       
     
    267268                        /* Mapping 0x80000000 + %ecx * 4M => 0x00000000 + %ecx * 4M */
    268269                        movl %eax, (%edi, %ecx, 4)
    269                         addl $(4 * 1024), %ebx
     270                        addl $PAGE_SIZE, %ebx
    270271                       
    271272                        incl %ecx
     
    277278               
    278279                movl %cr0, %ebx
    279                 orl $(1 << 31), %ebx  /* paging on */
     280                orl $CR0_PG, %ebx  /* paging on */
    280281                movl %ebx, %cr0
    281282               
     
    285286/** Calculate unmapped address of the end of the kernel. */
    286287calc_kernel_end:
    287         movl $hardcoded_load_address, %edi
    288         andl $0x7fffffff, %edi
     288        movl $KA2PA(hardcoded_load_address), %edi
    289289        movl (%edi), %esi
    290         andl $0x7fffffff, %esi
    291        
    292         movl $hardcoded_ktext_size, %edi
    293         andl $0x7fffffff, %edi
     290        leal KA2PA(0)(%esi), %esi
     291       
     292        movl $KA2PA(hardcoded_ktext_size), %edi
    294293        addl (%edi), %esi
    295         andl $0x7fffffff, %esi
    296        
    297         movl $hardcoded_kdata_size, %edi
    298         andl $0x7fffffff, %edi
     294        leal KA2PA(0)(%esi), %esi
     295       
     296        movl $KA2PA(hardcoded_kdata_size), %edi
    299297        addl (%edi), %esi
    300         andl $0x7fffffff, %esi
     298        leal KA2PA(0)(%esi), %esi
    301299        movl %esi, kernel_end
    302300       
     
    318316                /* Check if memory map flag is present */
    319317                movl (%ebx), %edx
    320                 andl $(1 << 6), %edx
     318                andl $MULTIBOOT_INFO_FLAGS_MMAP, %edx
    321319                jnz use_multiboot_map
    322320                       
     
    326324               
    327325                /* Copy address of the memory map to edx */
    328                 movl 48(%ebx), %edx
     326                movl MULTIBOOT_INFO_OFFSET_MMAP_ADDR(%ebx), %edx
    329327                movl %edx, %ecx
    330328               
    331                 addl 44(%ebx), %ecx
     329                addl MULTIBOOT_INFO_OFFSET_MMAP_LENGTH(%ebx), %ecx
    332330               
    333331                /* Find a free region at least 2M in size */
     
    335333                       
    336334                        /* Is this a free region? */
    337                         cmp $1, 20(%edx)
     335                        cmpl $MEMMAP_MEMORY_AVAILABLE, MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_TYPE(%edx)
    338336                        jnz next_region
    339337                       
    340338                        /* Check size */
    341                         cmp $0, 16(%edx)
     339                        cmpl $0, MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_SIZE + 4(%edx)
    342340                        jnz next_region
    343                        
    344                         cmpl $(2 * 1024 * 1024 + 4 * 1024), 12(%edx)
     341                        cmpl $(2 * 1024 * 1024 + PAGE_SIZE), MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_SIZE(%edx)
    345342                        jbe next_region
    346343                       
    347                         cmp $0, 8(%edx)
     344                        cmpl $0, MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_BASE_ADDRESS + 4(%edx)
    348345                        jz found_region
    349346               
     
    357354                next_region_do:
    358355                       
    359                         addl (%edx), %edx
    360                         addl $4, %edx
     356                        addl MULTIBOOT_MEMMAP_OFFSET_SIZE(%edx), %edx
     357                        addl $MULTIBOOT_MEMMAP_SIZE_SIZE, %edx
    361358                        jmp check_memmap_loop
    362359                       
     
    364361                       
    365362                        /* Use end of the found region */
    366                         mov 4(%edx), %ecx
    367                         add 12(%edx), %ecx
     363                        mov MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_BASE_ADDRESS(%edx), %ecx
     364                        add MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_SIZE(%edx), %ecx
    368365                        sub $(2 * 1024 * 1024), %ecx
    369366                        mov %ecx, free_area
Note: See TracChangeset for help on using the changeset viewer.