X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..9bccf70c0258c7cac2dcb80011b2a964d884c552:/osfmk/ppc/ppc_vm_init.c diff --git a/osfmk/ppc/ppc_vm_init.c b/osfmk/ppc/ppc_vm_init.c index 29bee412e..0fe096d90 100644 --- a/osfmk/ppc/ppc_vm_init.c +++ b/osfmk/ppc/ppc_vm_init.c @@ -85,8 +85,6 @@ vm_offset_t sectTEXTB; int sectSizeTEXT; vm_offset_t sectDATAB; int sectSizeDATA; -vm_offset_t sectOBJCB; -int sectSizeOBJC; vm_offset_t sectLINKB; int sectSizeLINK; vm_offset_t sectKLDB; @@ -110,7 +108,6 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) vm_offset_t first_phys_avail; vm_offset_t sizeadj, oldstart; -#ifdef __MACHO__ /* Now retrieve addresses for end, edata, and etext * from MACH-O headers. */ @@ -118,8 +115,6 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) &_mh_execute_header, "__TEXT", §SizeTEXT); sectDATAB = (vm_offset_t)getsegdatafromheader( &_mh_execute_header, "__DATA", §SizeDATA); - sectOBJCB = (vm_offset_t)getsegdatafromheader( - &_mh_execute_header, "__OBJC", §SizeOBJC); sectLINKB = (vm_offset_t)getsegdatafromheader( &_mh_execute_header, "__LINKEDIT", §SizeLINK); sectKLDB = (vm_offset_t)getsegdatafromheader( @@ -131,17 +126,15 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) #if DEBUG kprintf("sectTEXT: %x, size: %x\n", sectTEXTB, sectSizeTEXT); kprintf("sectDATA: %x, size: %x\n", sectDATAB, sectSizeDATA); - kprintf("sectOBJC: %x, size: %x\n", sectOBJCB, sectSizeOBJC); kprintf("sectLINK: %x, size: %x\n", sectLINKB, sectSizeLINK); kprintf("sectKLD: %x, size: %x\n", sectKLDB, sectSizeKLD); kprintf("end: %x\n", end); #endif -#endif /* __MACHO__ */ /* Stitch valid memory regions together - they may be contiguous * even though they're not already glued together */ - mem_actual = mem_actual = args->PhysicalDRAM[0].base + args->PhysicalDRAM[0].size; /* Initialize to the first region size */ + mem_actual = args->PhysicalDRAM[0].base + args->PhysicalDRAM[0].size; /* Initialize to the first region size */ addr = 0; /* temp use as pointer to previous memory region... */ for (i = 1; i < kMaxDRAMBanks; i++) { @@ -229,7 +222,6 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) kmapsize = (round_page(exception_end) - trunc_page(exception_entry)) + /* Get size we will map later */ (round_page(sectTEXTB+sectSizeTEXT) - trunc_page(sectTEXTB)) + (round_page(sectDATAB+sectSizeDATA) - trunc_page(sectDATAB)) + - (round_page(sectOBJCB+sectSizeOBJC) - trunc_page(sectOBJCB)) + (round_page(sectLINKB+sectSizeLINK) - trunc_page(sectLINKB)) + (round_page(sectKLDB+sectSizeKLD) - trunc_page(sectKLDB)) + (round_page(static_memory_end) - trunc_page(end)); @@ -245,8 +237,6 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) trunc_page(sectTEXTB), round_page(sectTEXTB+sectSizeTEXT)); kprintf(" sectDATAB: %08X, %08X - %08X\n", trunc_page(sectDATAB), trunc_page(sectDATAB), round_page(sectDATAB+sectSizeDATA)); - kprintf(" sectOBJCB: %08X, %08X - %08X\n", trunc_page(sectOBJCB), - trunc_page(sectOBJCB), round_page(sectOBJCB+sectSizeOBJC)); kprintf(" sectLINKB: %08X, %08X - %08X\n", trunc_page(sectLINKB), trunc_page(sectLINKB), round_page(sectLINKB+sectSizeLINK)); kprintf(" sectKLDB: %08X, %08X - %08X\n", trunc_page(sectKLDB), @@ -260,8 +250,6 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) round_page(sectTEXTB+sectSizeTEXT), VM_PROT_READ|VM_PROT_EXECUTE); pmap_map(trunc_page(sectDATAB), trunc_page(sectDATAB), round_page(sectDATAB+sectSizeDATA), VM_PROT_READ|VM_PROT_WRITE); - pmap_map(trunc_page(sectOBJCB), trunc_page(sectOBJCB), - round_page(sectOBJCB+sectSizeOBJC), VM_PROT_READ|VM_PROT_WRITE); /* The KLD and LINKEDIT segments are unloaded in toto after boot completes, @@ -272,14 +260,18 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) addr < round_page(sectKLDB+sectSizeKLD); addr += PAGE_SIZE) { - pmap_enter(kernel_pmap, addr, addr, VM_PROT_READ|VM_PROT_WRITE, TRUE); + pmap_enter(kernel_pmap, addr, addr, + VM_PROT_READ|VM_PROT_WRITE, + VM_WIMG_USE_DEFAULT, TRUE); } for (addr = trunc_page(sectLINKB); addr < round_page(sectLINKB+sectSizeLINK); addr += PAGE_SIZE) { - pmap_enter(kernel_pmap, addr, addr, VM_PROT_READ|VM_PROT_WRITE, TRUE); + pmap_enter(kernel_pmap, addr, addr, + VM_PROT_READ|VM_PROT_WRITE, + VM_WIMG_USE_DEFAULT, TRUE); } /* @@ -287,7 +279,9 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) * be released later, but not all. Ergo, no block mapping here */ for(addr = trunc_page(end); addr < round_page(static_memory_end); addr += PAGE_SIZE) { - pmap_enter(kernel_pmap, addr, addr, VM_PROT_READ|VM_PROT_WRITE, TRUE); + pmap_enter(kernel_pmap, addr, addr, + VM_PROT_READ|VM_PROT_WRITE, + VM_WIMG_USE_DEFAULT, TRUE); } #endif /* __MACHO__ */ @@ -298,31 +292,14 @@ void ppc_vm_init(unsigned int mem_limit, boot_args *args) } #endif - /* Initialize shadow IBATs */ - shadow_BAT.IBATs[0].upper=BAT_INVALID; - shadow_BAT.IBATs[0].lower=BAT_INVALID; - shadow_BAT.IBATs[1].upper=BAT_INVALID; - shadow_BAT.IBATs[1].lower=BAT_INVALID; - shadow_BAT.IBATs[2].upper=BAT_INVALID; - shadow_BAT.IBATs[2].lower=BAT_INVALID; - shadow_BAT.IBATs[3].upper=BAT_INVALID; - shadow_BAT.IBATs[3].lower=BAT_INVALID; - - LoadIBATs((unsigned int *)&shadow_BAT.IBATs[0]); /* Load up real IBATs from shadows */ +/* + * Note: the shadow BAT registers were already loaded in ppc_init.c + */ - /* Initialize shadow DBATs */ - shadow_BAT.DBATs[0].upper=BAT_INVALID; - shadow_BAT.DBATs[0].lower=BAT_INVALID; - shadow_BAT.DBATs[1].upper=BAT_INVALID; - shadow_BAT.DBATs[1].lower=BAT_INVALID; - mfdbatu(shadow_BAT.DBATs[2].upper,2); - mfdbatl(shadow_BAT.DBATs[2].lower,2); - mfdbatu(shadow_BAT.DBATs[3].upper,3); - mfdbatl(shadow_BAT.DBATs[3].lower,3); + LoadIBATs((unsigned int *)&shadow_BAT.IBATs[0]); /* Load up real IBATs from shadows */ LoadDBATs((unsigned int *)&shadow_BAT.DBATs[0]); /* Load up real DBATs from shadows */ - sync();isync(); #if DEBUG for(i=0; i<4; i++) kprintf("DBAT%1d: %08X %08X\n", i, shadow_BAT.DBATs[i].upper, shadow_BAT.DBATs[i].lower);