1/* 2 * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* 29 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 30 * 31 * DRI: Josh de Cesare 32 * 33 */ 34 35#include "AppleCPU.h" 36 37/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 38 39#undef super 40#define super IOCPU 41 42OSDefineMetaClassAndStructors(AppleCPU, IOCPU); 43 44/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 45 46bool AppleCPU::start(IOService *provider) 47{ 48 kern_return_t result; 49 ml_processor_info_t this_processor_info; 50 51 if (!super::start(provider)) return false; 52 53 cpuIC = new IOCPUInterruptController; 54 if (cpuIC == 0) return false; 55 56 if (cpuIC->initCPUInterruptController(1) != kIOReturnSuccess) return false; 57 cpuIC->attach(this); 58 59 cpuIC->registerCPUInterruptController(); 60 61 this_processor_info.cpu_id = (cpu_id_t)this; 62 this_processor_info.boot_cpu = true; 63 this_processor_info.start_paddr = 0; 64 this_processor_info.supports_nap = false; 65 this_processor_info.l2cr_value = 0; 66 this_processor_info.time_base_enable = 0; 67 68 // Register this CPU with mach. 69 result = ml_processor_register( 70 &this_processor_info, 71 &machProcessor, 72 &ipi_handler); 73 if (result == KERN_FAILURE) return false; 74 75 setCPUState(kIOCPUStateUninitalized); 76 77 processor_start(machProcessor); 78 79 registerService(); 80 81 return true; 82} 83 84void AppleCPU::initCPU(bool boot) 85{ 86 if (boot) { 87 cpuIC->enableCPUInterrupt(this); 88 } 89 90 setCPUState(kIOCPUStateRunning); 91} 92 93void AppleCPU::quiesceCPU(void) 94{ 95 // Unsupported. 96} 97 98kern_return_t AppleCPU::startCPU(vm_offset_t /*start_paddr*/, 99 vm_offset_t /*arg_paddr*/) 100{ 101 return KERN_FAILURE; 102} 103 104void AppleCPU::haltCPU(void) 105{ 106 // Unsupported. 107} 108 109const OSSymbol *AppleCPU::getCPUName(void) 110{ 111 return OSSymbol::withCStringNoCopy("Primary0"); 112} 113 114/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 115