+ * @abstract Unlock a mutex.
+ * @discussion Unlock the mutex and wake any blocked waiters. Results are undefined if the caller has not locked the mutex. This function may block and so should not be called from interrupt level or while a spin lock is held.
+ * @param lock Pointer to the allocated lock. */
+
+#ifdef IOLOCKS_INLINE
+#define IOLockUnlock(l) lck_mtx_unlock(l)
+#else
+void IOLockUnlock( IOLock * lock);
+#endif /* !IOLOCKS_INLINE */
+
+/*! @function IOLockSleep
+ * @abstract Sleep with mutex unlock and relock
+ * @discussion Prepare to sleep,unlock the mutex, and re-acquire it on wakeup. Results are undefined if the caller has not locked the mutex. This function may block and so should not be called from interrupt level or while a spin lock is held.
+ * @param lock Pointer to the locked lock.
+ * @param event The event to sleep on. Must be non-NULL.
+ * @param interType How can the sleep be interrupted.
+ * @result The wait-result value indicating how the thread was awakened.*/
+int IOLockSleep( IOLock * lock, void *event, UInt32 interType) __DARWIN14_ALIAS(IOLockSleep);
+
+int IOLockSleepDeadline( IOLock * lock, void *event,
+ AbsoluteTime deadline, UInt32 interType) __DARWIN14_ALIAS(IOLockSleepDeadline);
+
+void IOLockWakeup(IOLock * lock, void *event, bool oneThread) __DARWIN14_ALIAS(IOLockWakeup);
+
+#ifdef XNU_KERNEL_PRIVATE
+/*! @enum IOLockAssertState
+ * @abstract Used with IOLockAssert to assert the state of a lock.
+ */
+typedef enum {
+ kIOLockAssertOwned = LCK_ASSERT_OWNED,
+ kIOLockAssertNotOwned = LCK_ASSERT_NOTOWNED
+} IOLockAssertState;
+
+#ifdef IOLOCKS_INLINE
+#define IOLockAssert(l, type) LCK_MTX_ASSERT(l, type)
+#else
+/*! @function IOLockAssert
+ * @abstract Assert that lock is either held or not held by current thread.
+ * @discussion Call with either kIOLockAssertOwned or kIOLockAssertNotOwned.
+ * Panics the kernel if the lock is not owned if called with kIOLockAssertOwned,
+ * and vice-versa.
+ */
+void IOLockAssert(IOLock * lock, IOLockAssertState type);
+#endif /* !IOLOCKS_INLINE */
+#endif /* !XNU_KERNEL_PRIVATE */