/*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2006 Apple Computer, Inc. All rights reserved.
*
- * @APPLE_LICENSE_HEADER_START@
- *
- * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
* 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. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
+ * 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.
+ *
+ * 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
* Please see the License for the specific language governing rights and
* limitations under the License.
*
- * @APPLE_LICENSE_HEADER_END@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
/*
* Copyright (c) 1998,1999 Apple Computer, Inc. All rights reserved.
*/
#include <libkern/c++/OSUnserialize.h>
+#include <libkern/version.h>
#include <IOKit/IORegistryEntry.h>
#include <IOKit/IODeviceTreeSupport.h>
#include <IOKit/IOCatalogue.h>
#include <IOKit/IOLib.h>
#include <IOKit/IOKitKeys.h>
#include <IOKit/IOKitDebug.h>
+#include <IOKit/pwr_mgt/IOPMinformeeList.h>
#include <IOKit/assert.h>
+#include "IOKitKernelInternal.h"
+
extern "C" {
extern void OSlibkernInit (void);
-extern void IOLibInit(void);
+extern void ml_hpet_cfg(uint32_t, uint32_t);
#include <kern/clock.h>
+#include <sys/time.h>
-void IOKitResetTime( void )
+void IOKitInitializeTime( void )
{
mach_timespec_t t;
t.tv_nsec = 0;
IOService::waitForService(
IOService::resourceMatching("IORTC"), &t );
-#ifndef i386
+#ifdef ppc
IOService::waitForService(
IOService::resourceMatching("IONVRAM"), &t );
#endif
clock_initialize_calendar();
}
+void IOKitResetTime( void )
+{
+ uint32_t secs, microsecs;
+
+ clock_initialize_calendar();
+
+ clock_get_calendar_microtime(&secs, µsecs);
+ gIOLastWakeTime.tv_sec = secs;
+ gIOLastWakeTime.tv_usec = microsecs;
+}
+
+
// From <osfmk/kern/debug.c>
extern int debug_mode;
OSCollectionIterator * kmodIter; // must release
OSString * kmodName; // don't release
- IOLog( iokit_version );
-
if( PE_parse_boot_arg( "io", &debugFlags ))
gIOKitDebug = debugFlags;
"an invalid version.\n",
kmodName->getCStringNoCopy());
}
- if (KERN_SUCCESS != kmod_create_fake(kmodName->getCStringNoCopy(),
- kmodVersion->getCStringNoCopy())) {
+
+ // empty version strings get replaced with current kernel version
+ const char *vers = (strlen(kmodVersion->getCStringNoCopy())
+ ? kmodVersion->getCStringNoCopy()
+ : osrelease);
+
+ if (KERN_SUCCESS != kmod_create_fake(kmodName->getCStringNoCopy(), vers)) {
panic("Failure declaring in-kernel kmod \"%s\".\n",
kmodName->getCStringNoCopy());
}
IOUserClient::initialize();
IOMemoryDescriptor::initialize();
- obj = OSString::withCString( iokit_version );
+ // Initializes IOPMinformeeList class-wide shared lock
+ IOPMinformeeList::getSharedRecursiveLock();
+
+ obj = OSString::withCString( version );
assert( obj );
if( obj ) {
root->setProperty( kIOKitBuildVersionKey, obj );
gIOCatalogue->recordStartupExtensions();
rootNub->registerService();
+
+#if !NO_KEXTD
+ /* Add a busy count to keep the registry busy until kextd has
+ * completely finished launching. This is decremented when kextd
+ * messages the kernel after the in-kernel linker has been
+ * removed and personalities have been sent.
+ */
+ IOService::getServiceRoot()->adjustBusy(1);
+#endif
}
}
+void
+IORegistrySetOSBuildVersion(char * build_version)
+{
+ IORegistryEntry * root = IORegistryEntry::getRegistryRoot();
+
+ if (root) {
+ if (build_version) {
+ root->setProperty(kOSBuildVersionKey, build_version);
+ } else {
+ root->removeProperty(kOSBuildVersionKey);
+ }
+ }
+
+ return;
+}
+
}; /* extern "C" */