+#ifdef XNU_KERNEL_PRIVATE // Hide doc from public headers
+/*! @function claimSystemWakeEvent
+ @abstract Apple-internal SPI to describe system wake events.
+ @discussion IOKit drivers may call claimSystemWakeEvent() during system wakeup to
+ provide human readable debug information describing the event(s) that
+ caused the system to wake.
+
+ - Drivers should call claimSystemWakeEvent before completing
+ their setPowerState() acknowledgement. IOPMrootDomain stops
+ collecting wake events when driver wake is complete.
+
+ - It is only appropriate to claim a wake event when the driver
+ can positively identify its hardware has generated an event
+ that can wake the system.
+
+ - This call tracks wake events from a non-S0 state (S0i, S3, S4) into S0.
+ - This call does not track wake events from DarkWake(S0) to FullWake(S0).
+
+ Examples:
+ (reason = "WiFi.TCPData",
+ details = "TCPKeepAlive packet arrived from IP 16.2.1.1")
+ (reason = "WiFi.ScanOffload",
+ details = "WiFi station 'AppleWiFi' signal dropped below threshold")
+ (reason = "Enet.LinkToggle",
+ details = "Ethernet attached")
+
+ @param device The device/nub that is associated with the wake event.
+
+ @param flags Pass kIOPMWakeEventSource if the device is the source
+ of the wake event. Pass zero if the device is forwarding or
+ aggregating wake events from multiple sources, e.g. an USB or
+ Thunderbolt host controller.
+
+ @param reason Caller should pass a human readable C string describing the
+ wake reason. Please use a string from the list below, or create
+ your own string matching this format:
+ [Hardware].[Event]
+ WiFi.MagicPacket
+ WiFi.ScanOffload
+ WiFi.mDNSConflict
+ WiFi.mDNSService
+ WiFi.TCPData
+ WiFi.TCPTimeout
+ WiFi.FirmwareCrash
+ Enet.MagicPacket
+ Enet.mDNSConflict
+ Enet.mDNSService
+ Enet.TCPData
+ Enet.TCPTimeout
+ Enet.Service
+ Enet.LinkToggle
+ Enet.ConflictResolution
+ Enet.PatternMatch
+ Enet.Timer
+ Enet.LinkUpTimeout
+ Enet.LinkDown
+ USB.DeviceAttach
+ USB.DeviceDetach
+
+ @param details Optional details further describing the wake event.
+ Please pass an OSString defining the event.
+ */
+#endif
+ void claimSystemWakeEvent( IOService *device,
+ IOOptionBits flags,
+ const char *reason,
+ OSObject *details = 0 );
+