summaryrefslogtreecommitdiff
path: root/i386/i386at/model_dep.c
diff options
context:
space:
mode:
Diffstat (limited to 'i386/i386at/model_dep.c')
-rw-r--r--i386/i386at/model_dep.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c
index 04660a6d..aaeed807 100644
--- a/i386/i386at/model_dep.c
+++ b/i386/i386at/model_dep.c
@@ -340,8 +340,7 @@ i386at_init(void)
{
/* XXX move to intel/pmap.h */
extern pt_entry_t *kernel_page_dir;
- int nb_direct, i;
- vm_offset_t addr, delta;
+ int i;
/*
* Initialize the PIC prior to any possible call to an spl.
@@ -365,6 +364,8 @@ i386at_init(void)
#ifdef MACH_XEN
kernel_cmdline = (char*) boot_info.cmd_line;
#else /* MACH_XEN */
+ vm_offset_t addr;
+
/* Copy content pointed by boot_info before losing access to it when it
* is too far in physical memory.
* Also avoids leaving them in precious areas such as DMA memory. */
@@ -428,10 +429,10 @@ i386at_init(void)
* until we start using our new kernel segment descriptors.
*/
#if INIT_VM_MIN_KERNEL_ADDRESS != LINEAR_MIN_KERNEL_ADDRESS
- delta = INIT_VM_MIN_KERNEL_ADDRESS - LINEAR_MIN_KERNEL_ADDRESS;
+ vm_offset_t delta = INIT_VM_MIN_KERNEL_ADDRESS - LINEAR_MIN_KERNEL_ADDRESS;
if ((vm_offset_t)(-delta) < delta)
delta = (vm_offset_t)(-delta);
- nb_direct = delta >> PDESHIFT;
+ int nb_direct = delta >> PDESHIFT;
for (i = 0; i < nb_direct; i++)
kernel_page_dir[lin2pdenum_cont(INIT_VM_MIN_KERNEL_ADDRESS) + i] =
kernel_page_dir[lin2pdenum_cont(LINEAR_MIN_KERNEL_ADDRESS) + i];
@@ -452,14 +453,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 +532,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)
{
@@ -570,9 +575,9 @@ void c_boot_entry(vm_offset_t bi)
strtab_size = (vm_offset_t)phystokv(boot_info.syms.a.strsize);
kern_sym_end = kern_sym_start + 4 + symtab_size + strtab_size;
- printf("kernel symbol table at %08lx-%08lx (%d,%d)\n",
+ printf("kernel symbol table at %08lx-%08lx (%ld,%ld)\n",
kern_sym_start, kern_sym_end,
- symtab_size, strtab_size);
+ (unsigned long) symtab_size, (unsigned long) strtab_size);
}
if ((boot_info.flags & MULTIBOOT_ELF_SHDR)
@@ -669,12 +674,12 @@ void
inittodr(void)
{
time_value_t new_time;
+ uint64_t newsecs;
- new_time.seconds = 0;
+ (void) readtodc(&newsecs);
+ new_time.seconds = newsecs;
new_time.microseconds = 0;
- (void) readtodc((u_int *)&new_time.seconds);
-
{
spl_t s = splhigh();
time = new_time;