/*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2002 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
*
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#error IOLocks.h is for kernel use only
#endif
-#ifndef IOKIT_DEPRECATED
-#define IOKIT_DEPRECATED 1
-#endif
+#include <sys/appleapiopts.h>
#include <IOKit/system.h>
#include <kern/lock.h>
#include <kern/simple_lock.h>
+#include <kern/sched_prim.h>
#include <machine/machine_routines.h>
/*
static __inline__
void IOLockLock( IOLock * lock)
{
- _mutex_lock(lock);
+ mutex_lock(lock);
}
/*! @function IOLockTryLock
static __inline__
boolean_t IOLockTryLock( IOLock * lock)
{
- return(_mutex_try(lock));
+ return(mutex_try(lock));
}
/*! @function IOLockUnlock
mutex_unlock(lock);
}
-#if IOKIT_DEPRECATED
+/*! @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 simple lock is held.
+ @param lock Pointer to the locked lock.
+ @param event The event to sleep on.
+ @param interType How can the sleep be interrupted.
+ @result The wait-result value indicating how the thread was awakened.*/
+static __inline__
+int IOLockSleep( IOLock * lock, void *event, UInt32 interType)
+{
+ return thread_sleep_mutex((event_t) event, lock, (int) interType);
+}
+
+static __inline__
+int IOLockSleepDeadline( IOLock * lock, void *event,
+ AbsoluteTime deadline, UInt32 interType)
+{
+ return thread_sleep_mutex_deadline((event_t) event, lock,
+ __OSAbsoluteTime(deadline), (int) interType);
+}
+
+static __inline__
+void IOLockWakeup(IOLock * lock, void *event, bool oneThread)
+{
+ thread_wakeup_prim((event_t) event, oneThread, THREAD_AWAKENED);
+}
+
+#ifdef __APPLE_API_OBSOLETE
/* The following API is deprecated */
typedef enum {
kIOLockStateUnlocked = 0,
- kIOLockStateLocked = 1,
+ kIOLockStateLocked = 1
} IOLockState;
void IOLockInitWithState( IOLock * lock, IOLockState state);
static __inline__ boolean_t IOTryLock( IOLock * lock) { return(IOLockTryLock(lock)); }
static __inline__ void IOUnlock( IOLock * lock) { IOLockUnlock(lock); }
-#endif /* IOKIT_DEPRECATED */
+#endif /* __APPLE_API_OBSOLETE */
/*
* Recursive lock operations
lock_done( lock);
}
-#if IOKIT_DEPRECATED
+#ifdef __APPLE_API_OBSOLETE
/* The following API is deprecated */
static __inline__ void IOWriteLock( IORWLock * lock) { IORWLockWrite(lock); }
static __inline__ void IORWUnlock( IORWLock * lock) { IORWLockUnlock(lock); }
-#endif /* IOKIT_DEPRECATED */
+#endif /* __APPLE_API_OBSOLETE */
/*
static __inline__
void IOSimpleLockLock( IOSimpleLock * lock )
{
- simple_lock( lock );
+ usimple_lock( lock );
}
/*! @function IOSimpleLockTryLock
static __inline__
boolean_t IOSimpleLockTryLock( IOSimpleLock * lock )
{
- return( simple_lock_try( lock ) );
+ return( usimple_lock_try( lock ) );
}
/*! @function IOSimpleLockUnlock
static __inline__
void IOSimpleLockUnlock( IOSimpleLock * lock )
{
- simple_unlock( lock );
+ usimple_unlock( lock );
}
typedef long int IOInterruptState;
IOInterruptState IOSimpleLockLockDisableInterrupt( IOSimpleLock * lock )
{
IOInterruptState state = ml_set_interrupts_enabled( false );
- simple_lock( lock );
+ usimple_lock( lock );
return( state );
}
void IOSimpleLockUnlockEnableInterrupt( IOSimpleLock * lock,
IOInterruptState state )
{
- simple_unlock( lock );
+ usimple_unlock( lock );
ml_set_interrupts_enabled( state );
}