X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..90556fb8d47e7b68fd301dde9dbb3ae7495cf323:/iokit/Kernel/IOStartIOKit.cpp diff --git a/iokit/Kernel/IOStartIOKit.cpp b/iokit/Kernel/IOStartIOKit.cpp index 23268cd62..1121d5ef3 100644 --- a/iokit/Kernel/IOStartIOKit.cpp +++ b/iokit/Kernel/IOStartIOKit.cpp @@ -36,8 +36,6 @@ #include #include #include -#include -#include #include @@ -48,6 +46,45 @@ extern void IOLibInit(void); #include +/*XXX power management hacks XXX*/ +#include +#include + +extern void *registerSleepWakeInterest( + void *callback, + void *target, + void *refCon); +/*XXX power management hacks XXX*/ + +static void +calend_wakeup_resynch( + thread_call_param_t p0, + thread_call_param_t p1) +{ + void IOKitResetTime(void); + + IOKitResetTime(); +} + +static thread_call_t calend_sleep_wake_call; + +static IOReturn +calend_sleep_wake_notif( + void *target, + void *refCon, + unsigned int messageType, + void *provider, + void *messageArg, + vm_size_t argSize) +{ + if (messageType != kIOMessageSystemHasPoweredOn) + return (kIOReturnUnsupported); + + if (calend_sleep_wake_call != NULL) + thread_call_enter(calend_sleep_wake_call); + + return (kIOReturnSuccess); +} void IOKitResetTime( void ) { @@ -62,6 +99,13 @@ void IOKitResetTime( void ) IOService::resourceMatching("IONVRAM"), &t ); #endif + if (calend_sleep_wake_call == NULL) { + calend_sleep_wake_call = thread_call_allocate( + calend_wakeup_resynch, NULL); + + registerSleepWakeInterest((void *)calend_sleep_wake_notif, NULL, NULL); + } + clock_initialize_calendar(); } @@ -143,8 +187,6 @@ void StartIOKit( void * p1, void * p2, void * p3, void * p4 ) IOCatalogue::initialize(); IOUserClient::initialize(); IOMemoryDescriptor::initialize(); - IONetworkController::initialize(); - IODisplay::initialize(); obj = OSString::withCString( iokit_version ); assert( obj ); @@ -158,11 +200,6 @@ void StartIOKit( void * p1, void * p2, void * p3, void * p4 ) obj->release(); } -#ifdef i386 - // pretend there's no device-tree for intel - p1 = 0; -#endif - rootNub = new IOPlatformExpertDevice; if( rootNub && rootNub->initWithArgs( p1, p2, p3, p4)) {