Changeset 83


Ignore:
Timestamp:
Jun 28, 2017, 1:39:05 PM (4 years ago)
Author:
max@…
Message:

we want to have the LAPIC non-cacheable

Location:
trunk/hal/x86_64/core
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/hal/x86_64/core/hal_apic.c

    r82 r83  
    2121
    2222#include <hal_types.h>
     23#include <hal_boot.h>
    2324#include <hal_register.h>
    2425#include <hal_segmentation.h>
     
    9192        wrmsr(MSR_APICBASE, lapic_pa | APICBASE_EN);
    9293
    93         hal_gpt_enter(lapic_va, lapic_pa);
     94        hal_gpt_enter(lapic_va, lapic_pa, PG_V|PG_KW|PG_NX|PG_N);
    9495
    9596        hal_lapic_write(LAPIC_TPR, 0);
  • trunk/hal/x86_64/core/hal_gpt.c

    r79 r83  
    7575}
    7676
    77 void hal_gpt_enter(vaddr_t va, paddr_t pa)
     77void hal_gpt_enter(vaddr_t va, paddr_t pa, pt_entry_t flags)
    7878{
    7979        XASSERT(va % PAGE_SIZE == 0);
    8080        XASSERT(pa % PAGE_SIZE == 0);
    8181        XASSERT(va == tmpva || PTE_BASE[pl1_i(va)] == 0);
    82         PTE_BASE[pl1_i(va)] = (pa & PG_FRAME) | PG_V | PG_KW | PG_NX;
     82        PTE_BASE[pl1_i(va)] = (pa & PG_FRAME) | flags;
    8383        invlpg(va);
    8484}
     
    8686void hal_gpt_enter_range(vaddr_t va, paddr_t pa, size_t n)
    8787{
     88        pt_entry_t flags = PG_V | PG_KW | PG_NX;
    8889        size_t i;
    8990        for (i = 0; i < n; i++) {
    90                 hal_gpt_enter(va + i * PAGE_SIZE, pa + i * PAGE_SIZE);
     91                hal_gpt_enter(va + i * PAGE_SIZE, pa + i * PAGE_SIZE, flags);
    9192        }
    9293}
     
    116117void hal_gpt_maptree_area(vaddr_t va_start, vaddr_t va_end)
    117118{
     119        pt_entry_t flags = PG_V| PG_KW | PG_NX;
    118120        size_t L4start, L4end, nL4e;
    119121        size_t L3start, L3end, nL3e;
     
    145147        for (i = 0; i < nL2e; i++) {
    146148                pa = L1page + i * PAGE_SIZE;
    147                 hal_gpt_enter(tmpva, pa);
     149                hal_gpt_enter(tmpva, pa, flags);
    148150
    149151                memset((void *)tmpva, 0, PAGE_SIZE);
     
    153155        for (i = 0; i < nL3e; i++) {
    154156                pa = L2page + i * PAGE_SIZE;
    155                 hal_gpt_enter(tmpva, pa);
     157                hal_gpt_enter(tmpva, pa, flags);
    156158
    157159                memset((void *)tmpva, 0, PAGE_SIZE);
     
    161163        for (i = 0; i < nL4e; i++) {
    162164                pa = L3page + i * PAGE_SIZE;
    163                 hal_gpt_enter(tmpva, pa);
     165                hal_gpt_enter(tmpva, pa, flags);
    164166
    165167                memset((void *)tmpva, 0, PAGE_SIZE);
     
    172174                pa -= npa;      /* shift on the left */
    173175                pa &= PG_FRAME; /* rounddown to a page boundary */
    174                 hal_gpt_enter(tmpva, pa);
     176                hal_gpt_enter(tmpva, pa, flags);
    175177
    176178                pde = (pt_entry_t *)tmpva;
     
    185187                pa -= npa;      /* shift on the left */
    186188                pa &= PG_FRAME; /* rounddown to a page boundary */
    187                 hal_gpt_enter(tmpva, pa);
     189                hal_gpt_enter(tmpva, pa, flags);
    188190
    189191                pde = (pt_entry_t *)tmpva;
  • trunk/hal/x86_64/core/hal_internal.h

    r82 r83  
    4343vaddr_t hal_gpt_bootstrap_valloc(size_t npages);
    4444void hal_gpt_bootstrap_reset();
    45 void hal_gpt_enter(vaddr_t va, paddr_t pa);
     45void hal_gpt_enter(vaddr_t va, paddr_t pa, pt_entry_t flags);
    4646void hal_gpt_enter_range(vaddr_t va, paddr_t pa, size_t n);
    4747void hal_gpt_leave(vaddr_t va);
Note: See TracChangeset for help on using the changeset viewer.