本文整理匯總了C++中AcpiOsReleaseMutex函數的典型用法代碼示例。如果您正苦於以下問題:C++ AcpiOsReleaseMutex函數的具體用法?C++ AcpiOsReleaseMutex怎麽用?C++ AcpiOsReleaseMutex使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了AcpiOsReleaseMutex函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: AcpiTerminateDebugger
void
AcpiTerminateDebugger (
void)
{
/* Terminate the AML Debugger */
AcpiGbl_DbTerminateLoop = TRUE;
if (AcpiGbl_DebuggerConfiguration & DEBUGGER_MULTI_THREADED)
{
AcpiOsReleaseMutex (AcpiGbl_DbCommandReady);
/* Wait the AML Debugger threads */
while (!AcpiGbl_DbThreadsTerminated)
{
AcpiOsSleep (100);
}
}
if (AcpiGbl_DbBuffer)
{
AcpiOsFree (AcpiGbl_DbBuffer);
AcpiGbl_DbBuffer = NULL;
}
/* Ensure that debug output is now disabled */
AcpiGbl_DbOutputFlags = ACPI_DB_DISABLE_OUTPUT;
}
示例2: AcpiDbExecuteThread
void ACPI_SYSTEM_XFACE
AcpiDbExecuteThread (
void *Context)
{
ACPI_STATUS Status = AE_OK;
ACPI_STATUS MStatus;
while (Status != AE_CTRL_TERMINATE)
{
AcpiGbl_MethodExecuting = FALSE;
AcpiGbl_StepToNextCall = FALSE;
MStatus = AcpiOsAcquireMutex (AcpiGbl_DbCommandReady,
ACPI_WAIT_FOREVER);
if (ACPI_FAILURE (MStatus))
{
return;
}
Status = AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, NULL, NULL);
AcpiOsReleaseMutex (AcpiGbl_DbCommandComplete);
}
}
示例3: AcpiUtInitializeInterfaces
ACPI_STATUS
AcpiUtInitializeInterfaces (
void)
{
ACPI_STATUS Status;
UINT32 i;
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
if (ACPI_FAILURE (Status))
{
return (Status);
}
AcpiGbl_SupportedInterfaces = AcpiDefaultSupportedInterfaces;
/* Link the static list of supported interfaces */
for (i = 0; i < (ACPI_ARRAY_LENGTH (AcpiDefaultSupportedInterfaces) - 1); i++)
{
AcpiDefaultSupportedInterfaces[i].Next =
&AcpiDefaultSupportedInterfaces[(ACPI_SIZE) i + 1];
}
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
return (AE_OK);
}
示例4: AcpiRemoveInterface
ACPI_STATUS
AcpiRemoveInterface (
ACPI_STRING InterfaceName)
{
ACPI_STATUS Status;
/* Parameter validation */
if (!InterfaceName || (strlen (InterfaceName) == 0))
{
return (AE_BAD_PARAMETER);
}
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
if (ACPI_FAILURE (Status))
{
return (Status);
}
Status = AcpiUtRemoveInterface (InterfaceName);
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
return (Status);
}
示例5: AcpiInstallInterfaceHandler
ACPI_STATUS
AcpiInstallInterfaceHandler (
ACPI_INTERFACE_HANDLER Handler)
{
ACPI_STATUS Status;
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
if (ACPI_FAILURE (Status))
{
return (Status);
}
if (Handler && AcpiGbl_InterfaceHandler)
{
Status = AE_ALREADY_EXISTS;
}
else
{
AcpiGbl_InterfaceHandler = Handler;
}
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
return (Status);
}
示例6: AcpiUtInterfaceTerminate
ACPI_STATUS
AcpiUtInterfaceTerminate (
void)
{
ACPI_STATUS Status;
ACPI_INTERFACE_INFO *NextInterface;
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
if (ACPI_FAILURE (Status))
{
return (Status);
}
NextInterface = AcpiGbl_SupportedInterfaces;
while (NextInterface)
{
AcpiGbl_SupportedInterfaces = NextInterface->Next;
/* Only interfaces added at runtime can be freed */
if (NextInterface->Flags & ACPI_OSI_DYNAMIC)
{
ACPI_FREE (NextInterface->Name);
ACPI_FREE (NextInterface);
}
NextInterface = AcpiGbl_SupportedInterfaces;
}
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
return (AE_OK);
}
示例7: AcpiUtInterfaceTerminate
void
AcpiUtInterfaceTerminate (
void)
{
ACPI_INTERFACE_INFO *NextInterface;
(void) AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
NextInterface = AcpiGbl_SupportedInterfaces;
while (NextInterface)
{
AcpiGbl_SupportedInterfaces = NextInterface->Next;
/* Only interfaces added at runtime can be freed */
if (NextInterface->Flags & ACPI_OSI_DYNAMIC)
{
ACPI_FREE (NextInterface->Name);
ACPI_FREE (NextInterface);
}
NextInterface = AcpiGbl_SupportedInterfaces;
}
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
}
示例8: AcpiOsNotifyCommandComplete
ACPI_STATUS
AcpiOsNotifyCommandComplete (
void)
{
if (AcpiGbl_DebuggerConfiguration == DEBUGGER_MULTI_THREADED)
{
AcpiOsReleaseMutex (AcpiGbl_DbCommandComplete);
}
return (AE_OK);
}
示例9: AcpiExReleaseAllMutexes
void
AcpiExReleaseAllMutexes (
ACPI_THREAD_STATE *Thread)
{
ACPI_OPERAND_OBJECT *Next = Thread->AcquiredMutexList;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_FUNCTION_TRACE (ExReleaseAllMutexes);
/* Traverse the list of owned mutexes, releasing each one */
while (Next)
{
ObjDesc = Next;
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Mutex [%4.4s] force-release, SyncLevel %u Depth %u\n",
ObjDesc->Mutex.Node->Name.Ascii, ObjDesc->Mutex.SyncLevel,
ObjDesc->Mutex.AcquisitionDepth));
/* Release the mutex, special case for Global Lock */
if (ObjDesc == AcpiGbl_GlobalLockMutex)
{
/* Ignore errors */
(void) AcpiEvReleaseGlobalLock ();
}
else
{
AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex);
}
/* Update Thread SyncLevel (Last mutex is the important one) */
Thread->CurrentSyncLevel = ObjDesc->Mutex.OriginalSyncLevel;
/* Mark mutex unowned */
Next = ObjDesc->Mutex.Next;
ObjDesc->Mutex.Prev = NULL;
ObjDesc->Mutex.Next = NULL;
ObjDesc->Mutex.AcquisitionDepth = 0;
ObjDesc->Mutex.OwnerThread = NULL;
ObjDesc->Mutex.ThreadId = 0;
}
return_VOID;
}
示例10: AcpiInstallInterface
ACPI_STATUS
AcpiInstallInterface (
ACPI_STRING InterfaceName)
{
ACPI_STATUS Status;
ACPI_INTERFACE_INFO *InterfaceInfo;
/* Parameter validation */
if (!InterfaceName || (strlen (InterfaceName) == 0))
{
return (AE_BAD_PARAMETER);
}
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
if (ACPI_FAILURE (Status))
{
return (Status);
}
/* Check if the interface name is already in the global list */
InterfaceInfo = AcpiUtGetInterface (InterfaceName);
if (InterfaceInfo)
{
/*
* The interface already exists in the list. This is OK if the
* interface has been marked invalid -- just clear the bit.
*/
if (InterfaceInfo->Flags & ACPI_OSI_INVALID)
{
InterfaceInfo->Flags &= ~ACPI_OSI_INVALID;
Status = AE_OK;
}
else
{
Status = AE_ALREADY_EXISTS;
}
}
else
{
/* New interface name, install into the global list */
Status = AcpiUtInstallInterface (InterfaceName);
}
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
return (Status);
}
示例11: AcpiExReleaseMutexObject
ACPI_STATUS
AcpiExReleaseMutexObject (
ACPI_OPERAND_OBJECT *ObjDesc)
{
ACPI_STATUS Status = AE_OK;
ACPI_FUNCTION_TRACE (ExReleaseMutexObject);
if (ObjDesc->Mutex.AcquisitionDepth == 0)
{
return_ACPI_STATUS (AE_NOT_ACQUIRED);
}
/* Match multiple Acquires with multiple Releases */
ObjDesc->Mutex.AcquisitionDepth--;
if (ObjDesc->Mutex.AcquisitionDepth != 0)
{
/* Just decrement the depth and return */
return_ACPI_STATUS (AE_OK);
}
if (ObjDesc->Mutex.OwnerThread)
{
/* Unlink the mutex from the owner's list */
AcpiExUnlinkMutex (ObjDesc);
ObjDesc->Mutex.OwnerThread = NULL;
}
/* Release the mutex, special case for Global Lock */
if (ObjDesc == AcpiGbl_GlobalLockMutex)
{
Status = AcpiEvReleaseGlobalLock ();
}
else
{
AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex);
}
/* Clear mutex info */
ObjDesc->Mutex.ThreadId = 0;
return_ACPI_STATUS (Status);
}
示例12: AcpiEvReleaseGlobalLock
ACPI_STATUS
AcpiEvReleaseGlobalLock (
void)
{
BOOLEAN Pending = FALSE;
ACPI_STATUS Status = AE_OK;
ACPI_FUNCTION_TRACE (EvReleaseGlobalLock);
/* Lock must be already acquired */
if (!AcpiGbl_GlobalLockAcquired)
{
ACPI_WARNING ((AE_INFO,
"Cannot release the ACPI Global Lock, it has not been acquired"));
return_ACPI_STATUS (AE_NOT_ACQUIRED);
}
if (AcpiGbl_GlobalLockPresent)
{
/* Allow any thread to release the lock */
ACPI_RELEASE_GLOBAL_LOCK (AcpiGbl_FACS, Pending);
/*
* If the pending bit was set, we must write GBL_RLS to the control
* register
*/
if (Pending)
{
Status = AcpiWriteBitRegister (
ACPI_BITREG_GLOBAL_LOCK_RELEASE, ACPI_ENABLE_EVENT);
}
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Released hardware Global Lock\n"));
}
AcpiGbl_GlobalLockAcquired = FALSE;
/* Release the local GL mutex */
AcpiOsReleaseMutex (AcpiGbl_GlobalLockMutex->Mutex.OsMutex);
return_ACPI_STATUS (Status);
}
示例13: AcpiUtInterfaceTerminate
ACPI_STATUS
AcpiUtInterfaceTerminate (
void)
{
ACPI_STATUS Status;
ACPI_INTERFACE_INFO *NextInterface;
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
if (ACPI_FAILURE (Status))
{
return (Status);
}
NextInterface = AcpiGbl_SupportedInterfaces;
while (NextInterface)
{
AcpiGbl_SupportedInterfaces = NextInterface->Next;
if (NextInterface->Flags & ACPI_OSI_DYNAMIC)
{
/* Only interfaces added at runtime can be freed */
ACPI_FREE (NextInterface->Name);
ACPI_FREE (NextInterface);
}
else
{
/* Interface is in static list. Reset it to invalid or valid. */
if (NextInterface->Flags & ACPI_OSI_DEFAULT_INVALID)
{
NextInterface->Flags |= ACPI_OSI_INVALID;
}
else
{
NextInterface->Flags &= ~ACPI_OSI_INVALID;
}
}
NextInterface = AcpiGbl_SupportedInterfaces;
}
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
return (AE_OK);
}
示例14: AcpiExReleaseAllMutexes
void
AcpiExReleaseAllMutexes (
ACPI_THREAD_STATE *Thread)
{
ACPI_OPERAND_OBJECT *Next = Thread->AcquiredMutexList;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_FUNCTION_ENTRY ();
/* Traverse the list of owned mutexes, releasing each one */
while (Next)
{
ObjDesc = Next;
Next = ObjDesc->Mutex.Next;
ObjDesc->Mutex.Prev = NULL;
ObjDesc->Mutex.Next = NULL;
ObjDesc->Mutex.AcquisitionDepth = 0;
/* Release the mutex, special case for Global Lock */
if (ObjDesc == AcpiGbl_GlobalLockMutex)
{
/* Ignore errors */
(void) AcpiEvReleaseGlobalLock ();
}
else
{
AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex);
}
/* Mark mutex unowned */
ObjDesc->Mutex.OwnerThread = NULL;
ObjDesc->Mutex.ThreadId = 0;
/* Update Thread SyncLevel (Last mutex is the important one) */
Thread->CurrentSyncLevel = ObjDesc->Mutex.OriginalSyncLevel;
}
}
示例15: AcpiUpdateInterfaces
ACPI_STATUS
AcpiUpdateInterfaces (
UINT8 Action)
{
ACPI_STATUS Status;
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
if (ACPI_FAILURE (Status))
{
return (Status);
}
Status = AcpiUtUpdateInterfaces (Action);
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
return (Status);
}