smb_sleephandler.cpp [plain text]
#include <IOKit/IOMessage.h>
#include <IOKit/pwr_mgt/RootDomain.h>
extern "C"
{
#include <sys/smb_apple.h>
#include <sys/syslog.h>
#include <sys/kernel.h>
#include <netsmb/smb_subr.h>
#ifdef SMB_DEBUG
int32_t gSMBSleeping = 0;
#endif // SMB_DEBUG
struct timespec gWakeTime = {0, 0};
void wakeup(void *);
}
#include <netsmb/smb_sleephandler.h>
static IOReturn
smb_sleepwakehandler(void *target, void *refCon, UInt32 messageType, IOService *provider, void *messageArgument, vm_size_t argSize)
{
#pragma unused (target, refCon, provider, messageArgument, argSize)
switch (messageType) {
case kIOMessageSystemWillSleep:
SMBDEBUG(" going to sleep\n");
#ifdef SMB_DEBUG
gSMBSleeping = 1;
#endif // SMB_DEBUG
break;
case kIOMessageSystemHasPoweredOn:
SMBDEBUG(" waking up\n");
#ifdef SMB_DEBUG
gSMBSleeping = 0;
#endif // SMB_DEBUG
nanouptime(&gWakeTime);
break;
default:
break;
}
return (IOPMAckImplied);
}
extern "C" {
IONotifier *fNotifier = NULL;
__private_extern__ void smbfs_install_sleep_wake_notifier()
{
fNotifier = registerSleepWakeInterest(smb_sleepwakehandler, NULL, NULL);
}
__private_extern__ void smbfs_remove_sleep_wake_notifier()
{
if (fNotifier != NULL) {
fNotifier->disable();
fNotifier = NULL;
}
}
}