+/*! @function disable
+ @abstract Disable the command gate
+ @discussion When a command gate is disabled all future calls to runAction and runCommand will stall until the gate is enable()d later. This can be used to block client threads when a system sleep is requested. The IOWorkLoop thread itself will never stall, even when making runAction/runCommand calls. This call must be made from a gated context, to clear potential race conditions. */
+ virtual void disable() APPLE_KEXT_OVERRIDE;
+
+/*! @function enable
+ @abstract Enable command gate, this will unblock any blocked Commands and Actions.
+ @discussion Enable the command gate. The attemptAction/attemptCommand calls will now be enabled and can succeeed. Stalled runCommand/runAction calls will be woken up. */
+ virtual void enable() APPLE_KEXT_OVERRIDE;
+
+/*! @function commandSleep
+ @abstract Put a thread that is currently holding the command gate to sleep.
+ @discussion Put a thread to sleep waiting for an event but release the gate first. If the event occurs or timeout occurs then the commandGate is closed before the function returns. If the thread does not hold the gate, panic.
+ @param event Pointer to an address.
+ @param deadline Clock deadline to timeout the sleep.
+ @param interruptible THREAD_UNINT, THREAD_INTERRUPTIBLE or THREAD_ABORTSAFE. THREAD_UNINT specifies that the sleep cannot be interrupted by a signal. THREAD_INTERRUPTIBLE specifies that the sleep may be interrupted by a "kill -9" signal. THREAD_ABORTSAFE specifies that the sleep may be interrupted by any user signal.
+ @result THREAD_AWAKENED - normal wakeup, THREAD_TIMED_OUT - timeout expired, THREAD_INTERRUPTED - interrupted, THREAD_RESTART - restart operation entirely. */
+ virtual IOReturn commandSleep(void *event,
+ AbsoluteTime deadline,
+ UInt32 interruptible);
+