/*
- * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved.
*
- * @APPLE_LICENSE_HEADER_START@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
*
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
*
- * @APPLE_LICENSE_HEADER_END@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
/*
* @OSF_COPYRIGHT@
#include <kern/assert.h>
#include <kern/cpu_number.h>
#include <kern/thread.h>
+#include <console/serial_protos.h>
#include <ppc/proc_reg.h>
#include <ppc/Firmware.h>
#include <ppc/mappings.h>
#include <ppc/exception.h>
#include <ppc/lowglobals.h>
+#include <ppc/serial_io.h>
#include <mach-o/mach_header.h>
int hash_table_shift; /* "ht_shift" boot arg, used to scale hash_table_size */
vm_offset_t taproot_addr; /* (BRINGUP) */
unsigned int taproot_size; /* (BRINGUP) */
-unsigned int serialmode; /* Serial mode keyboard and console control */
extern int disableConsoleOutput;
struct shadowBAT shadow_BAT;
+
+
/*
* NOTE: mem_size is bogus on large memory machines. We will pin it to 0x80000000 if there is more than 2 GB
* This is left only for compatibility and max_mem should be used.
mem_region_t pmap_mem_regions[PMAP_MEM_REGION_MAX + 1];
-int pmap_mem_regions_count = 0; /* Assume no non-contiguous memory regions */
+unsigned int pmap_mem_regions_count; /* Assume no non-contiguous memory regions */
unsigned int avail_remaining = 0;
vm_offset_t first_avail;
first_avail = static_memory_end;
-/*
- * Now retrieve addresses for end, edata, and etext
- * from MACH-O headers for the currently running 32 bit kernel.
- */
- sectTEXTB = (vm_offset_t)getsegdatafromheader(
+ /*
+ * Now retrieve addresses for end, edata, and etext
+ * from MACH-O headers for the currently running 32 bit kernel.
+ */
+ /* XXX fix double casts for 64 bit kernel */
+ sectTEXTB = (vm_offset_t)(uint32_t *)getsegdatafromheader(
&_mh_execute_header, "__TEXT", §SizeTEXT);
- sectDATAB = (vm_offset_t)getsegdatafromheader(
+ sectDATAB = (vm_offset_t)(uint32_t *)getsegdatafromheader(
&_mh_execute_header, "__DATA", §SizeDATA);
- sectLINKB = (vm_offset_t)getsegdatafromheader(
+ sectLINKB = (vm_offset_t)(uint32_t *)getsegdatafromheader(
&_mh_execute_header, "__LINKEDIT", §SizeLINK);
- sectKLDB = (vm_offset_t)getsegdatafromheader(
+ sectKLDB = (vm_offset_t)(uint32_t *)getsegdatafromheader(
&_mh_execute_header, "__KLD", §SizeKLD);
- sectHIBB = (vm_offset_t)getsegdatafromheader(
+ sectHIBB = (vm_offset_t)(uint32_t *)getsegdatafromheader(
&_mh_execute_header, "__HIB", §SizeHIB);
- sectPRELINKB = (vm_offset_t)getsegdatafromheader(
+ sectPRELINKB = (vm_offset_t)(uint32_t *)getsegdatafromheader(
&_mh_execute_header, "__PRELINK", §SizePRELINK);
etext = (vm_offset_t) sectTEXTB + sectSizeTEXT;
pmap_bootstrap(max_mem, &first_avail, kmapsize);
pmap_map(trunc_page(exception_entry), trunc_page(exception_entry),
- round_page(exception_end), VM_PROT_READ|VM_PROT_EXECUTE);
+ round_page(exception_end), VM_PROT_READ|VM_PROT_EXECUTE, VM_WIMG_USE_DEFAULT);
pmap_map(trunc_page(sectTEXTB), trunc_page(sectTEXTB),
- round_page(sectTEXTB+sectSizeTEXT), VM_PROT_READ|VM_PROT_EXECUTE);
+ round_page(sectTEXTB+sectSizeTEXT), VM_PROT_READ|VM_PROT_EXECUTE, VM_WIMG_USE_DEFAULT);
pmap_map(trunc_page(sectDATAB), trunc_page(sectDATAB),
- round_page(sectDATAB+sectSizeDATA), VM_PROT_READ|VM_PROT_WRITE);
+ round_page(sectDATAB+sectSizeDATA), VM_PROT_READ|VM_PROT_WRITE, VM_WIMG_USE_DEFAULT);
/* The KLD and LINKEDIT segments are unloaded in toto after boot completes,
* but via ml_static_mfree(), through IODTFreeLoaderInfo(). Hence, we have
addr += PAGE_SIZE) {
pmap_enter(kernel_pmap, (vm_map_offset_t)addr, (ppnum_t)(addr>>12),
- VM_PROT_READ|VM_PROT_WRITE,
+ VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE,
VM_WIMG_USE_DEFAULT, TRUE);
}
addr += PAGE_SIZE) {
pmap_enter(kernel_pmap, (vm_map_offset_t)addr, (ppnum_t)(addr>>12),
- VM_PROT_READ|VM_PROT_WRITE,
+ VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE,
VM_WIMG_USE_DEFAULT, TRUE);
}
pmap_enter(kernel_pmap, (vm_map_offset_t)addr,
(ppnum_t)(addr>>12),
- VM_PROT_READ|VM_PROT_WRITE,
+ VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE,
VM_WIMG_USE_DEFAULT, TRUE);
}
addr += PAGE_SIZE) {
pmap_enter(kernel_pmap, (vm_map_offset_t)addr, (ppnum_t)(addr>>12),
- VM_PROT_READ|VM_PROT_WRITE,
+ VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE,
VM_WIMG_USE_DEFAULT, TRUE);
}
for(addr = trunc_page(end); addr < round_page(static_memory_end); addr += PAGE_SIZE) {
pmap_enter(kernel_pmap, (vm_map_address_t)addr, (ppnum_t)addr>>12,
- VM_PROT_READ|VM_PROT_WRITE,
+ VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE,
VM_WIMG_USE_DEFAULT, TRUE);
}
*/
hw_start_trans(); /* Start translating */
+ PE_init_platform(TRUE, args); /* Initialize this right off the bat */
+
#if 0
GratefulDebInit((bootBumbleC *)&(args->Video)); /* Initialize the GratefulDeb debugger */
taproot_size = PE_init_taproot(&taproot_addr); /* (BRINGUP) See if there is a taproot */
if(taproot_size) { /* (BRINGUP) */
kprintf("TapRoot card configured to use vaddr = %08X, size = %08X\n", taproot_addr, taproot_size);
- bcopy_nc((void *)version, (void *)(taproot_addr + 16), strlen(version)); /* (BRINGUP) Pass it our kernel version */
+ bcopy_nc(version, (void *)(taproot_addr + 16), strlen(version)); /* (BRINGUP) Pass it our kernel version */
__asm__ volatile("eieio"); /* (BRINGUP) */
xtaproot = (unsigned int *)taproot_addr; /* (BRINGUP) */
xtaproot[0] = 1; /* (BRINGUP) */
/* Processor version information */
- {
- unsigned int pvr;
- __asm__ ("mfpvr %0" : "=r" (pvr));
- printf("processor version register : %08X\n", pvr);
- }
+ __asm__ ("mfpvr %0" : "=r" (pvr));
+ printf("processor version register : %08X\n", pvr);
- kprintf("Args at %08X\n", args);
+ kprintf("Args at %p\n", args);
for (i = 0; i < pmap_mem_regions_count; i++) {
- printf("DRAM at %08X size %08X\n",
+ printf("DRAM at %08lX size %08lX\n",
args->PhysicalDRAM[i].base,
args->PhysicalDRAM[i].size);
}