summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/utmutex.c
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2007-03-22 17:24:05 +0000
committerjkim <jkim@FreeBSD.org>2007-03-22 17:24:05 +0000
commite031ab5da47b5f6c28c3cc5d576128b2d8d202e6 (patch)
tree69d0fa3b3760b0abcc0335ff748e39701a8bf064 /sys/contrib/dev/acpica/utmutex.c
parentdbc8115981195155aec9304dd8f0ee570bd3d32c (diff)
downloadFreeBSD-src-e031ab5da47b5f6c28c3cc5d576128b2d8d202e6.zip
FreeBSD-src-e031ab5da47b5f6c28c3cc5d576128b2d8d202e6.tar.gz
Vendor import of Intel ACPI-CA 20070320
Diffstat (limited to 'sys/contrib/dev/acpica/utmutex.c')
-rw-r--r--sys/contrib/dev/acpica/utmutex.c102
1 files changed, 46 insertions, 56 deletions
diff --git a/sys/contrib/dev/acpica/utmutex.c b/sys/contrib/dev/acpica/utmutex.c
index e685511..701d269 100644
--- a/sys/contrib/dev/acpica/utmutex.c
+++ b/sys/contrib/dev/acpica/utmutex.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: utmutex - local mutex support
- * $Revision: 1.3 $
+ * $Revision: 1.12 $
*
******************************************************************************/
@@ -9,7 +9,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -153,13 +153,13 @@ AcpiUtMutexInitialize (
ACPI_STATUS Status;
- ACPI_FUNCTION_TRACE ("UtMutexInitialize");
+ ACPI_FUNCTION_TRACE (UtMutexInitialize);
/*
* Create each of the predefined mutex objects
*/
- for (i = 0; i < NUM_MUTEX; i++)
+ for (i = 0; i < ACPI_NUM_MUTEX; i++)
{
Status = AcpiUtCreateMutex (i);
if (ACPI_FAILURE (Status))
@@ -168,7 +168,15 @@ AcpiUtMutexInitialize (
}
}
+ /* Create the spinlocks for use at interrupt level */
+
Status = AcpiOsCreateLock (&AcpiGbl_GpeLock);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ Status = AcpiOsCreateLock (&AcpiGbl_HardwareLock);
return_ACPI_STATUS (Status);
}
@@ -192,18 +200,21 @@ AcpiUtMutexTerminate (
UINT32 i;
- ACPI_FUNCTION_TRACE ("UtMutexTerminate");
+ ACPI_FUNCTION_TRACE (UtMutexTerminate);
/*
* Delete each predefined mutex object
*/
- for (i = 0; i < NUM_MUTEX; i++)
+ for (i = 0; i < ACPI_NUM_MUTEX; i++)
{
(void) AcpiUtDeleteMutex (i);
}
+ /* Delete the spinlocks */
+
AcpiOsDeleteLock (AcpiGbl_GpeLock);
+ AcpiOsDeleteLock (AcpiGbl_HardwareLock);
return_VOID;
}
@@ -227,18 +238,17 @@ AcpiUtCreateMutex (
ACPI_STATUS Status = AE_OK;
- ACPI_FUNCTION_TRACE_U32 ("UtCreateMutex", MutexId);
+ ACPI_FUNCTION_TRACE_U32 (UtCreateMutex, MutexId);
- if (MutexId > MAX_MUTEX)
+ if (MutexId > ACPI_MAX_MUTEX)
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
if (!AcpiGbl_MutexInfo[MutexId].Mutex)
{
- Status = AcpiOsCreateSemaphore (1, 1,
- &AcpiGbl_MutexInfo[MutexId].Mutex);
+ Status = AcpiOsCreateMutex (&AcpiGbl_MutexInfo[MutexId].Mutex);
AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED;
AcpiGbl_MutexInfo[MutexId].UseCount = 0;
}
@@ -263,23 +273,21 @@ static ACPI_STATUS
AcpiUtDeleteMutex (
ACPI_MUTEX_HANDLE MutexId)
{
- ACPI_STATUS Status;
-
- ACPI_FUNCTION_TRACE_U32 ("UtDeleteMutex", MutexId);
+ ACPI_FUNCTION_TRACE_U32 (UtDeleteMutex, MutexId);
- if (MutexId > MAX_MUTEX)
+ if (MutexId > ACPI_MAX_MUTEX)
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
- Status = AcpiOsDeleteSemaphore (AcpiGbl_MutexInfo[MutexId].Mutex);
+ AcpiOsDeleteMutex (AcpiGbl_MutexInfo[MutexId].Mutex);
AcpiGbl_MutexInfo[MutexId].Mutex = NULL;
AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED;
- return_ACPI_STATUS (Status);
+ return_ACPI_STATUS (AE_OK);
}
@@ -300,13 +308,13 @@ AcpiUtAcquireMutex (
ACPI_MUTEX_HANDLE MutexId)
{
ACPI_STATUS Status;
- UINT32 ThisThreadId;
+ ACPI_THREAD_ID ThisThreadId;
- ACPI_FUNCTION_NAME ("UtAcquireMutex");
+ ACPI_FUNCTION_NAME (UtAcquireMutex);
- if (MutexId > MAX_MUTEX)
+ if (MutexId > ACPI_MAX_MUTEX)
{
return (AE_BAD_PARAMETER);
}
@@ -324,21 +332,21 @@ AcpiUtAcquireMutex (
* the mutex ordering rule. This indicates a coding error somewhere in
* the ACPI subsystem code.
*/
- for (i = MutexId; i < MAX_MUTEX; i++)
+ for (i = MutexId; i < ACPI_MAX_MUTEX; i++)
{
if (AcpiGbl_MutexInfo[i].ThreadId == ThisThreadId)
{
if (i == MutexId)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Mutex [%s] already acquired by this thread [%X]\n",
+ ACPI_ERROR ((AE_INFO,
+ "Mutex [%s] already acquired by this thread [%X]",
AcpiUtGetMutexName (MutexId), ThisThreadId));
return (AE_ALREADY_ACQUIRED);
}
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Invalid acquire order: Thread %X owns [%s], wants [%s]\n",
+ ACPI_ERROR ((AE_INFO,
+ "Invalid acquire order: Thread %X owns [%s], wants [%s]",
ThisThreadId, AcpiUtGetMutexName (i),
AcpiUtGetMutexName (MutexId)));
@@ -352,8 +360,8 @@ AcpiUtAcquireMutex (
"Thread %X attempting to acquire Mutex [%s]\n",
ThisThreadId, AcpiUtGetMutexName (MutexId)));
- Status = AcpiOsWaitSemaphore (AcpiGbl_MutexInfo[MutexId].Mutex,
- 1, ACPI_WAIT_FOREVER);
+ Status = AcpiOsAcquireMutex (AcpiGbl_MutexInfo[MutexId].Mutex,
+ ACPI_WAIT_FOREVER);
if (ACPI_SUCCESS (Status))
{
ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %X acquired Mutex [%s]\n",
@@ -364,10 +372,8 @@ AcpiUtAcquireMutex (
}
else
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Thread %X could not acquire Mutex [%s] %s\n",
- ThisThreadId, AcpiUtGetMutexName (MutexId),
- AcpiFormatException (Status)));
+ ACPI_EXCEPTION ((AE_INFO, Status,
+ "Thread %X could not acquire Mutex [%X]", ThisThreadId, MutexId));
}
return (Status);
@@ -390,11 +396,10 @@ ACPI_STATUS
AcpiUtReleaseMutex (
ACPI_MUTEX_HANDLE MutexId)
{
- ACPI_STATUS Status;
- UINT32 ThisThreadId;
+ ACPI_THREAD_ID ThisThreadId;
- ACPI_FUNCTION_NAME ("UtReleaseMutex");
+ ACPI_FUNCTION_NAME (UtReleaseMutex);
ThisThreadId = AcpiOsGetThreadId ();
@@ -402,7 +407,7 @@ AcpiUtReleaseMutex (
"Thread %X releasing Mutex [%s]\n", ThisThreadId,
AcpiUtGetMutexName (MutexId)));
- if (MutexId > MAX_MUTEX)
+ if (MutexId > ACPI_MAX_MUTEX)
{
return (AE_BAD_PARAMETER);
}
@@ -412,9 +417,8 @@ AcpiUtReleaseMutex (
*/
if (AcpiGbl_MutexInfo[MutexId].ThreadId == ACPI_MUTEX_NOT_ACQUIRED)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Mutex [%s] is not acquired, cannot release\n",
- AcpiUtGetMutexName (MutexId)));
+ ACPI_ERROR ((AE_INFO,
+ "Mutex [%X] is not acquired, cannot release", MutexId));
return (AE_NOT_ACQUIRED);
}
@@ -430,7 +434,7 @@ AcpiUtReleaseMutex (
* ordering rule. This indicates a coding error somewhere in
* the ACPI subsystem code.
*/
- for (i = MutexId; i < MAX_MUTEX; i++)
+ for (i = MutexId; i < ACPI_MAX_MUTEX; i++)
{
if (AcpiGbl_MutexInfo[i].ThreadId == ThisThreadId)
{
@@ -439,8 +443,8 @@ AcpiUtReleaseMutex (
continue;
}
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Invalid release order: owns [%s], releasing [%s]\n",
+ ACPI_ERROR ((AE_INFO,
+ "Invalid release order: owns [%s], releasing [%s]",
AcpiUtGetMutexName (i), AcpiUtGetMutexName (MutexId)));
return (AE_RELEASE_DEADLOCK);
@@ -453,22 +457,8 @@ AcpiUtReleaseMutex (
AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED;
- Status = AcpiOsSignalSemaphore (AcpiGbl_MutexInfo[MutexId].Mutex, 1);
-
- if (ACPI_FAILURE (Status))
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Thread %X could not release Mutex [%s] %s\n",
- ThisThreadId, AcpiUtGetMutexName (MutexId),
- AcpiFormatException (Status)));
- }
- else
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %X released Mutex [%s]\n",
- ThisThreadId, AcpiUtGetMutexName (MutexId)));
- }
-
- return (Status);
+ AcpiOsReleaseMutex (AcpiGbl_MutexInfo[MutexId].Mutex);
+ return (AE_OK);
}
OpenPOWER on IntegriCloud