mirror of
https://github.com/acpica/acpica/
synced 2025-02-08 17:43:58 +03:00
Convert hardware mutex to a spinlock, since code is used at xrupt level
This commit is contained in:
parent
caea6bf655
commit
65ec4b8914
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: hwregs - Read/write access functions for the various ACPI
|
||||
* control and status registers.
|
||||
* $Revision: 1.179 $
|
||||
* $Revision: 1.180 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -144,6 +144,7 @@ AcpiHwClearAcpiStatus (
|
||||
UINT32 Flags)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
ACPI_CPU_FLAGS LockFlags = 0;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (HwClearAcpiStatus);
|
||||
@ -155,11 +156,7 @@ AcpiHwClearAcpiStatus (
|
||||
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock);
|
||||
}
|
||||
|
||||
Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK,
|
||||
@ -189,7 +186,7 @@ AcpiHwClearAcpiStatus (
|
||||
UnlockAndExit:
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
|
||||
AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
|
||||
}
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
@ -378,6 +375,7 @@ AcpiGetRegister (
|
||||
UINT32 RegisterValue = 0;
|
||||
ACPI_BIT_REGISTER_INFO *BitRegInfo;
|
||||
ACPI_STATUS Status;
|
||||
ACPI_CPU_FLAGS LockFlags = 0;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (AcpiGetRegister);
|
||||
@ -393,11 +391,7 @@ AcpiGetRegister (
|
||||
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock);
|
||||
}
|
||||
|
||||
/* Read from the register */
|
||||
@ -407,7 +401,7 @@ AcpiGetRegister (
|
||||
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
|
||||
AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
|
||||
}
|
||||
|
||||
if (ACPI_SUCCESS (Status))
|
||||
@ -453,6 +447,7 @@ AcpiSetRegister (
|
||||
UINT32 RegisterValue = 0;
|
||||
ACPI_BIT_REGISTER_INFO *BitRegInfo;
|
||||
ACPI_STATUS Status;
|
||||
ACPI_CPU_FLAGS LockFlags = 0;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_U32 (AcpiSetRegister, RegisterId);
|
||||
@ -469,11 +464,7 @@ AcpiSetRegister (
|
||||
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock);
|
||||
}
|
||||
|
||||
/* Always do a register read first so we can insert the new bits */
|
||||
@ -576,7 +567,7 @@ UnlockAndExit:
|
||||
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
|
||||
AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
|
||||
}
|
||||
|
||||
/* Normalize the value that was read */
|
||||
@ -617,6 +608,7 @@ AcpiHwRegisterRead (
|
||||
UINT32 Value1 = 0;
|
||||
UINT32 Value2 = 0;
|
||||
ACPI_STATUS Status;
|
||||
ACPI_CPU_FLAGS LockFlags = 0;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (HwRegisterRead);
|
||||
@ -624,11 +616,7 @@ AcpiHwRegisterRead (
|
||||
|
||||
if (ACPI_MTX_LOCK == UseLock)
|
||||
{
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock);
|
||||
}
|
||||
|
||||
switch (RegisterId)
|
||||
@ -702,7 +690,7 @@ AcpiHwRegisterRead (
|
||||
UnlockAndExit:
|
||||
if (ACPI_MTX_LOCK == UseLock)
|
||||
{
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
|
||||
AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
|
||||
}
|
||||
|
||||
if (ACPI_SUCCESS (Status))
|
||||
@ -736,6 +724,7 @@ AcpiHwRegisterWrite (
|
||||
UINT32 Value)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
ACPI_CPU_FLAGS LockFlags = 0;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (HwRegisterWrite);
|
||||
@ -743,11 +732,7 @@ AcpiHwRegisterWrite (
|
||||
|
||||
if (ACPI_MTX_LOCK == UseLock)
|
||||
{
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock);
|
||||
}
|
||||
|
||||
switch (RegisterId)
|
||||
@ -832,7 +817,7 @@ AcpiHwRegisterWrite (
|
||||
UnlockAndExit:
|
||||
if (ACPI_MTX_LOCK == UseLock)
|
||||
{
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
|
||||
AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS (Status);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: utmutex - local mutex support
|
||||
* $Revision: 1.9 $
|
||||
* $Revision: 1.10 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -203,7 +211,10 @@ AcpiUtMutexTerminate (
|
||||
(void) AcpiUtDeleteMutex (i);
|
||||
}
|
||||
|
||||
/* Delete the spinlocks */
|
||||
|
||||
AcpiOsDeleteLock (AcpiGbl_GpeLock);
|
||||
AcpiOsDeleteLock (AcpiGbl_HardwareLock);
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acglobal.h - Declarations for global variables
|
||||
* $Revision: 1.181 $
|
||||
* $Revision: 1.182 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -393,7 +393,11 @@ extern ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EV
|
||||
ACPI_EXTERN ACPI_FIXED_EVENT_HANDLER AcpiGbl_FixedEventHandlers[ACPI_NUM_FIXED_EVENTS];
|
||||
ACPI_EXTERN ACPI_GPE_XRUPT_INFO *AcpiGbl_GpeXruptListHead;
|
||||
ACPI_EXTERN ACPI_GPE_BLOCK_INFO *AcpiGbl_GpeFadtBlocks[ACPI_MAX_GPE_BLOCKS];
|
||||
|
||||
/* Spinlocks */
|
||||
|
||||
ACPI_EXTERN ACPI_HANDLE AcpiGbl_GpeLock;
|
||||
ACPI_EXTERN ACPI_HANDLE AcpiGbl_HardwareLock;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: aclocal.h - Internal data types used across the ACPI subsystem
|
||||
* $Revision: 1.231 $
|
||||
* $Revision: 1.232 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -156,24 +156,22 @@ union acpi_parse_object;
|
||||
* table below also!
|
||||
*/
|
||||
#define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */
|
||||
#define ACPI_MTX_CONTROL_METHOD 1 /* Control method termination */
|
||||
#define ACPI_MTX_CONTROL_METHOD 1 /* Control method termination [TBD: may no longer be necessary] */
|
||||
#define ACPI_MTX_TABLES 2 /* Data for ACPI tables */
|
||||
#define ACPI_MTX_NAMESPACE 3 /* ACPI Namespace */
|
||||
#define ACPI_MTX_EVENTS 4 /* Data for ACPI events */
|
||||
#define ACPI_MTX_HARDWARE 5 /* ACPI registers */
|
||||
#define ACPI_MTX_CACHES 6 /* Internal caches, general purposes */
|
||||
#define ACPI_MTX_MEMORY 7 /* Debug memory tracking lists */
|
||||
#define ACPI_MTX_DEBUG_CMD_COMPLETE 8 /* AML debugger */
|
||||
#define ACPI_MTX_DEBUG_CMD_READY 9 /* AML debugger */
|
||||
#define ACPI_MTX_CACHES 5 /* Internal caches, general purposes */
|
||||
#define ACPI_MTX_MEMORY 6 /* Debug memory tracking lists */
|
||||
#define ACPI_MTX_DEBUG_CMD_COMPLETE 7 /* AML debugger */
|
||||
#define ACPI_MTX_DEBUG_CMD_READY 8 /* AML debugger */
|
||||
|
||||
#define ACPI_MAX_MUTEX 9
|
||||
#define ACPI_MAX_MUTEX 8
|
||||
#define ACPI_NUM_MUTEX ACPI_MAX_MUTEX+1
|
||||
|
||||
|
||||
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
|
||||
#ifdef DEFINE_ACPI_GLOBALS
|
||||
|
||||
/* Names for the mutexes used in the subsystem */
|
||||
/* Debug names for the mutexes above */
|
||||
|
||||
static char *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] =
|
||||
{
|
||||
@ -182,7 +180,6 @@ static char *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] =
|
||||
"ACPI_MTX_Tables",
|
||||
"ACPI_MTX_Namespace",
|
||||
"ACPI_MTX_Events",
|
||||
"ACPI_MTX_Hardware",
|
||||
"ACPI_MTX_Caches",
|
||||
"ACPI_MTX_Memory",
|
||||
"ACPI_MTX_DebugCmdComplete",
|
||||
@ -193,6 +190,17 @@ static char *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] =
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Predefined handles for spinlocks used within the subsystem.
|
||||
* These spinlocks are created by AcpiUtMutexInitialize
|
||||
*/
|
||||
#define ACPI_LOCK_GPES 0
|
||||
#define ACPI_LOCK_HARDWARE 1
|
||||
|
||||
#define ACPI_MAX_LOCK 1
|
||||
#define ACPI_NUM_LOCK ACPI_MAX_LOCK+1
|
||||
|
||||
|
||||
/* Owner IDs are used to track namespace nodes for selective deletion */
|
||||
|
||||
typedef UINT8 ACPI_OWNER_ID;
|
||||
|
Loading…
x
Reference in New Issue
Block a user