diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2012-03-18 20:31:22 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-03-28 17:01:53 +0100 |
commit | 0b3504b6db86c531e8b53b8e9aa9030db6e72357 (patch) | |
tree | bbdcc8907f2e1700721de715220e28773518c657 /i386/i386at | |
parent | e3460f05cbe141073e62c24afe5e3a8f99c05ed4 (diff) | |
download | gnumach-0b3504b6db86c531e8b53b8e9aa9030db6e72357.tar.gz gnumach-0b3504b6db86c531e8b53b8e9aa9030db6e72357.tar.bz2 gnumach-0b3504b6db86c531e8b53b8e9aa9030db6e72357.zip |
pmap.h: Add 64bit variant
* i386/intel/pmap.h (L4SHIFT, L4MASK, lin2l4num): New macros
(PDPNUM, PDPMASK, set_pmap): Add 64bit variant. Make PAE use the 64bit mask
too.
(pmap): Add l4base, user_l4base, user_pdpbase fields.
* i386/intel/pmap.c (pmap_bootstrap): Clear the whole PDP. Enable write
bit in PDP. Set user pagetable to NULL. Initialize l4base.
(pmap_clear_bootstrap_pagetable): Add 4th-level support.
(pmap_ceate): Clear the whole PDP. Enable write bit in PDP. Initialize
l4base, user_pdpbase, user_l4base.
(pmap_destroy): Clear l4base, user_pdpbase, user_l4base.
* i386/i386at/model_dep.c (i386at_init): Load l4base on 64bits.
Diffstat (limited to 'i386/i386at')
-rw-r--r-- | i386/i386at/model_dep.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c index 61ed4748..02adec17 100644 --- a/i386/i386at/model_dep.c +++ b/i386/i386at/model_dep.c @@ -452,14 +452,18 @@ i386at_init(void) #endif /* PAE */ #endif /* MACH_PV_PAGETABLES */ #if PAE - set_cr3((unsigned)_kvtophys(kernel_pmap->pdpbase)); +#ifdef __x86_64__ + set_cr3((unsigned long)_kvtophys(kernel_pmap->l4base)); +#else + set_cr3((unsigned long)_kvtophys(kernel_pmap->pdpbase)); +#endif #ifndef MACH_HYP if (!CPU_HAS_FEATURE(CPU_FEATURE_PAE)) panic("CPU doesn't have support for PAE."); set_cr4(get_cr4() | CR4_PAE); #endif /* MACH_HYP */ #else - set_cr3((unsigned)_kvtophys(kernel_page_dir)); + set_cr3((unsigned long)_kvtophys(kernel_page_dir)); #endif /* PAE */ #ifndef MACH_HYP /* Turn paging on. @@ -527,7 +531,7 @@ i386at_init(void) /* * C boot entrypoint - called by boot_entry in boothdr.S. - * Running in 32-bit flat mode, but without paging yet. + * Running in flat mode, but without paging yet. */ void c_boot_entry(vm_offset_t bi) { |