merging acpica-20080701 into trunk
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26499 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
e929b415fc
commit
cfd62a38e0
Binary file not shown.
@ -2078,6 +2078,7 @@ AnOtherSemanticAnalysisWalkBegin (
|
||||
{
|
||||
case PARSEOP_ACQUIRE:
|
||||
case PARSEOP_WAIT:
|
||||
case PARSEOP_LOADTABLE:
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -266,6 +266,7 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
|
||||
{"_ALR", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
|
||||
{"_ALT", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
|
||||
{"_ASI", 0, ASL_RSVD_RESOURCE_NAME},
|
||||
{"_ASZ", 0, ASL_RSVD_RESOURCE_NAME},
|
||||
{"_BAS", 0, ASL_RSVD_RESOURCE_NAME},
|
||||
{"_BBN", 0, ASL_RSVD_RETURN_VALUE},
|
||||
{"_BCL", 0, ASL_RSVD_RETURN_VALUE},
|
||||
@ -343,6 +344,7 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
|
||||
{"_MIN", 0, ASL_RSVD_RESOURCE_NAME},
|
||||
{"_MLS", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
|
||||
{"_MSG", 1, 0},
|
||||
{"_MTP", 0, ASL_RSVD_RESOURCE_NAME},
|
||||
{"_OFF", 0, 0},
|
||||
{"_ON_", 0, 0},
|
||||
{"_OS_", 0, ASL_RSVD_RETURN_VALUE},
|
||||
|
@ -123,8 +123,7 @@
|
||||
#include "acdebug.h"
|
||||
#include "acresrc.h"
|
||||
#include "acdisasm.h"
|
||||
|
||||
|
||||
#include "actables.h"
|
||||
#include "acparser.h"
|
||||
|
||||
#ifdef ACPI_DEBUGGER
|
||||
@ -437,24 +436,30 @@ AcpiDbDisplayTableInfo (
|
||||
ACPI_TABLE_DESC *TableDesc;
|
||||
|
||||
|
||||
/*
|
||||
* Walk the root table list
|
||||
*/
|
||||
/* Walk the entire root table list */
|
||||
|
||||
for (i = 0; i < AcpiGbl_RootTableList.Count; i++)
|
||||
{
|
||||
TableDesc = &AcpiGbl_RootTableList.Tables[i];
|
||||
AcpiOsPrintf ( "%.4s at %p length %.5X",
|
||||
TableDesc->Signature.Ascii, TableDesc->Pointer,
|
||||
(UINT32) TableDesc->Length);
|
||||
AcpiOsPrintf ("%d ", i);
|
||||
|
||||
if (TableDesc->Pointer && (i != ACPI_TABLE_INDEX_FACS))
|
||||
/* Make sure that the table is mapped */
|
||||
|
||||
AcpiTbVerifyTable (TableDesc);
|
||||
|
||||
/* Dump the table header */
|
||||
|
||||
if (TableDesc->Pointer)
|
||||
{
|
||||
AcpiOsPrintf (" OemId=\"%.6s\" OemTableId=\"%.8s\" OemRevision=%8.8X",
|
||||
TableDesc->Pointer->OemId,
|
||||
TableDesc->Pointer->OemTableId,
|
||||
TableDesc->Pointer->OemRevision);
|
||||
AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the pointer is null, the table has been unloaded */
|
||||
|
||||
ACPI_INFO ((AE_INFO, "%4.4s - Table has been unloaded",
|
||||
TableDesc->Signature.Ascii));
|
||||
}
|
||||
AcpiOsPrintf ("\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -175,7 +175,10 @@ AcpiDbExecuteMethod (
|
||||
ACPI_STATUS Status;
|
||||
ACPI_OBJECT_LIST ParamObjects;
|
||||
ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS];
|
||||
ACPI_HANDLE Handle;
|
||||
ACPI_BUFFER Buffer;
|
||||
UINT32 i;
|
||||
ACPI_DEVICE_INFO *ObjInfo;
|
||||
|
||||
|
||||
if (AcpiGbl_DbOutputToFile && !AcpiDbgLevel)
|
||||
@ -183,33 +186,74 @@ AcpiDbExecuteMethod (
|
||||
AcpiOsPrintf ("Warning: debug output is not enabled!\n");
|
||||
}
|
||||
|
||||
/* Are there arguments to the method? */
|
||||
/* Get the NS node, determines existence also */
|
||||
|
||||
if (Info->Args && Info->Args[0])
|
||||
Status = AcpiGetHandle (NULL, Info->Pathname, &Handle);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
for (i = 0; Info->Args[i] && i < ACPI_METHOD_NUM_ARGS; i++)
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Get the object info for number of method parameters */
|
||||
|
||||
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiGetObjectInfo (Handle, &Buffer);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
ObjInfo = Buffer.Pointer;
|
||||
if (ObjInfo->Type == ACPI_TYPE_METHOD)
|
||||
{
|
||||
/* Are there arguments to the method? */
|
||||
|
||||
if (Info->Args && Info->Args[0])
|
||||
{
|
||||
Params[i].Type = ACPI_TYPE_INTEGER;
|
||||
Params[i].Integer.Value = ACPI_STRTOUL (Info->Args[i], NULL, 16);
|
||||
for (i = 0; Info->Args[i] && i < ACPI_METHOD_NUM_ARGS; i++)
|
||||
{
|
||||
Params[i].Type = ACPI_TYPE_INTEGER;
|
||||
Params[i].Integer.Value = ACPI_STRTOUL (Info->Args[i], NULL, 16);
|
||||
}
|
||||
|
||||
ParamObjects.Pointer = Params;
|
||||
ParamObjects.Count = i;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Setup default parameters */
|
||||
|
||||
ParamObjects.Pointer = Params;
|
||||
ParamObjects.Count = i;
|
||||
for (i = 0; i < ObjInfo->ParamCount; i++)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
|
||||
Params[0].Type = ACPI_TYPE_INTEGER;
|
||||
Params[0].Integer.Value = 0x01020304;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
|
||||
Params[1].Type = ACPI_TYPE_STRING;
|
||||
Params[1].String.Length = 12;
|
||||
Params[1].String.Pointer = "AML Debugger";
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Params[i].Type = ACPI_TYPE_INTEGER;
|
||||
Params[i].Integer.Value = i * (ACPI_INTEGER) 0x1000;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ParamObjects.Pointer = Params;
|
||||
ParamObjects.Count = ObjInfo->ParamCount;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Setup default parameters */
|
||||
|
||||
Params[0].Type = ACPI_TYPE_INTEGER;
|
||||
Params[0].Integer.Value = 0x01020304;
|
||||
|
||||
Params[1].Type = ACPI_TYPE_STRING;
|
||||
Params[1].String.Length = 12;
|
||||
Params[1].String.Pointer = "AML Debugger";
|
||||
|
||||
ParamObjects.Pointer = Params;
|
||||
ParamObjects.Count = 2;
|
||||
}
|
||||
ACPI_FREE (Buffer.Pointer);
|
||||
|
||||
/* Prepare for a return object of arbitrary size */
|
||||
|
||||
|
@ -363,15 +363,17 @@ AcpiEvDisableGpe (
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
/* Mark wake-disabled or HW disable, or both */
|
||||
/* Clear the appropriate enabled flags for this GPE */
|
||||
|
||||
switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK)
|
||||
{
|
||||
case ACPI_GPE_TYPE_WAKE:
|
||||
|
||||
ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED);
|
||||
break;
|
||||
|
||||
case ACPI_GPE_TYPE_WAKE_RUN:
|
||||
|
||||
ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED);
|
||||
|
||||
/*lint -fallthrough */
|
||||
@ -381,21 +383,22 @@ AcpiEvDisableGpe (
|
||||
/* Disable the requested runtime GPE */
|
||||
|
||||
ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_RUN_ENABLED);
|
||||
|
||||
/*lint -fallthrough */
|
||||
break;
|
||||
|
||||
default:
|
||||
/*
|
||||
* If we don't know the GPE type, make sure that we always
|
||||
* disable it. This can prevent a certain type of GPE flood, where
|
||||
* the GPE has no _Lxx/_Exx method, and it cannot be determined
|
||||
* whether the GPE is wake, run, or wake/run.
|
||||
*/
|
||||
Status = AcpiHwWriteGpeEnableReg (GpeEventInfo);
|
||||
break;
|
||||
}
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
/*
|
||||
* Always H/W disable this GPE, even if we don't know the GPE type.
|
||||
* Simply clear the enable bit for this particular GPE, but do not
|
||||
* write out the current GPE enable mask since this may inadvertently
|
||||
* enable GPEs too early. An example is a rogue GPE that has arrived
|
||||
* during ACPICA initialization - possibly because AML or other code
|
||||
* has enabled the GPE.
|
||||
*/
|
||||
Status = AcpiHwLowDisableGpe (GpeEventInfo);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
|
||||
|
@ -180,7 +180,7 @@ AcpiExAddTable (
|
||||
|
||||
/* Install the new table into the local data structures */
|
||||
|
||||
ObjDesc->Reference.Object = ACPI_CAST_PTR (void, TableIndex);
|
||||
ObjDesc->Reference.Object = ACPI_TO_POINTER (TableIndex);
|
||||
|
||||
/* Add the table to the namespace */
|
||||
|
||||
@ -379,6 +379,7 @@ AcpiExLoadOp (
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *DdbHandle;
|
||||
ACPI_TABLE_HEADER *Table;
|
||||
ACPI_TABLE_DESC TableDesc;
|
||||
UINT32 TableIndex;
|
||||
ACPI_STATUS Status;
|
||||
@ -396,8 +397,8 @@ AcpiExLoadOp (
|
||||
{
|
||||
case ACPI_TYPE_REGION:
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Load from Region %p %s\n",
|
||||
ObjDesc, AcpiUtGetObjectTypeName (ObjDesc)));
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
|
||||
"Load table from Region %p\n", ObjDesc));
|
||||
|
||||
/* Region must be SystemMemory (from ACPI spec) */
|
||||
|
||||
@ -420,21 +421,18 @@ AcpiExLoadOp (
|
||||
}
|
||||
|
||||
/*
|
||||
* We will simply map the memory region for the table. However, the
|
||||
* memory region is technically not guaranteed to remain stable and
|
||||
* we may eventually have to copy the table to a local buffer.
|
||||
* Map the table header and get the actual table length. The region
|
||||
* length is not guaranteed to be the same as the table length.
|
||||
*/
|
||||
TableDesc.Address = ObjDesc->Region.Address;
|
||||
TableDesc.Length = ObjDesc->Region.Length;
|
||||
TableDesc.Flags = ACPI_TABLE_ORIGIN_MAPPED;
|
||||
break;
|
||||
Table = AcpiOsMapMemory (ObjDesc->Region.Address,
|
||||
sizeof (ACPI_TABLE_HEADER));
|
||||
if (!Table)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
case ACPI_TYPE_BUFFER: /* Buffer or resolved RegionField */
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Load from Buffer or Field %p %s\n",
|
||||
ObjDesc, AcpiUtGetObjectTypeName (ObjDesc)));
|
||||
|
||||
Length = ObjDesc->Buffer.Length;
|
||||
Length = Table->Length;
|
||||
AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER));
|
||||
|
||||
/* Must have at least an ACPI table header */
|
||||
|
||||
@ -443,18 +441,68 @@ AcpiExLoadOp (
|
||||
return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH);
|
||||
}
|
||||
|
||||
/* Validate checksum here. It won't get validated in TbAddTable */
|
||||
/*
|
||||
* The memory region is not guaranteed to remain stable and we must
|
||||
* copy the table to a local buffer. For example, the memory region
|
||||
* is corrupted after suspend on some machines. Dynamically loaded
|
||||
* tables are usually small, so this overhead is minimal.
|
||||
*/
|
||||
|
||||
Status = AcpiTbVerifyChecksum (
|
||||
ACPI_CAST_PTR (ACPI_TABLE_HEADER, ObjDesc->Buffer.Pointer), Length);
|
||||
if (ACPI_FAILURE (Status))
|
||||
/* Allocate a buffer for the table */
|
||||
|
||||
TableDesc.Pointer = ACPI_ALLOCATE (Length);
|
||||
if (!TableDesc.Pointer)
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/* Map the entire table and copy it */
|
||||
|
||||
Table = AcpiOsMapMemory (ObjDesc->Region.Address, Length);
|
||||
if (!Table)
|
||||
{
|
||||
ACPI_FREE (TableDesc.Pointer);
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
ACPI_MEMCPY (TableDesc.Pointer, Table, Length);
|
||||
AcpiOsUnmapMemory (Table, Length);
|
||||
|
||||
TableDesc.Address = ObjDesc->Region.Address;
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_TYPE_BUFFER: /* Buffer or resolved RegionField */
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
|
||||
"Load table from Buffer or Field %p\n", ObjDesc));
|
||||
|
||||
/* Must have at least an ACPI table header */
|
||||
|
||||
if (ObjDesc->Buffer.Length < sizeof (ACPI_TABLE_HEADER))
|
||||
{
|
||||
return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH);
|
||||
}
|
||||
|
||||
/* Get the actual table length from the table header */
|
||||
|
||||
Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ObjDesc->Buffer.Pointer);
|
||||
Length = Table->Length;
|
||||
|
||||
/* Table cannot extend beyond the buffer */
|
||||
|
||||
if (Length > ObjDesc->Buffer.Length)
|
||||
{
|
||||
return_ACPI_STATUS (AE_AML_BUFFER_LIMIT);
|
||||
}
|
||||
if (Length < sizeof (ACPI_TABLE_HEADER))
|
||||
{
|
||||
return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH);
|
||||
}
|
||||
|
||||
/*
|
||||
* We need to copy the buffer since the original buffer could be
|
||||
* changed or deleted in the future
|
||||
* Copy the table from the buffer because the buffer could be modified
|
||||
* or even deleted in the future
|
||||
*/
|
||||
TableDesc.Pointer = ACPI_ALLOCATE (Length);
|
||||
if (!TableDesc.Pointer)
|
||||
@ -462,18 +510,31 @@ AcpiExLoadOp (
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
ACPI_MEMCPY (TableDesc.Pointer, ObjDesc->Buffer.Pointer, Length);
|
||||
TableDesc.Length = Length;
|
||||
TableDesc.Flags = ACPI_TABLE_ORIGIN_ALLOCATED;
|
||||
ACPI_MEMCPY (TableDesc.Pointer, Table, Length);
|
||||
TableDesc.Address = ACPI_TO_INTEGER (TableDesc.Pointer);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Install the new table into the local data structures
|
||||
*/
|
||||
/* Validate table checksum (will not get validated in TbAddTable) */
|
||||
|
||||
Status = AcpiTbVerifyChecksum (TableDesc.Pointer, Length);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_FREE (TableDesc.Pointer);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
/* Complete the table descriptor */
|
||||
|
||||
TableDesc.Length = Length;
|
||||
TableDesc.Flags = ACPI_TABLE_ORIGIN_ALLOCATED;
|
||||
|
||||
/* Install the new table into the local data structures */
|
||||
|
||||
Status = AcpiTbAddTable (&TableDesc, &TableIndex);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
@ -483,7 +544,7 @@ AcpiExLoadOp (
|
||||
/*
|
||||
* Add the table to the namespace.
|
||||
*
|
||||
* Note: We load the table objects relative to the root of the namespace.
|
||||
* Note: Load the table objects relative to the root of the namespace.
|
||||
* This appears to go against the ACPI specification, but we do it for
|
||||
* compatibility with other ACPI implementations.
|
||||
*/
|
||||
@ -519,7 +580,7 @@ AcpiExLoadOp (
|
||||
Cleanup:
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
/* Delete allocated buffer or mapping */
|
||||
/* Delete allocated table buffer */
|
||||
|
||||
AcpiTbDeleteTable (&TableDesc);
|
||||
}
|
||||
@ -590,6 +651,9 @@ AcpiExUnloadTable (
|
||||
|
||||
AcpiTbSetTableLoadedFlag (TableIndex, FALSE);
|
||||
|
||||
/* Table unloaded, remove a reference to the DdbHandle object */
|
||||
|
||||
AcpiUtRemoveReference (DdbHandle);
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
|
@ -129,6 +129,60 @@ AcpiHwEnableWakeupGpeBlock (
|
||||
ACPI_GPE_BLOCK_INFO *GpeBlock);
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwLowDisableGpe
|
||||
*
|
||||
* PARAMETERS: GpeEventInfo - Info block for the GPE to be disabled
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Disable a single GPE in the enable register.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiHwLowDisableGpe (
|
||||
ACPI_GPE_EVENT_INFO *GpeEventInfo)
|
||||
{
|
||||
ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
|
||||
ACPI_STATUS Status;
|
||||
UINT32 EnableMask;
|
||||
|
||||
|
||||
/* Get the info block for the entire GPE register */
|
||||
|
||||
GpeRegisterInfo = GpeEventInfo->RegisterInfo;
|
||||
if (!GpeRegisterInfo)
|
||||
{
|
||||
return (AE_NOT_EXIST);
|
||||
}
|
||||
|
||||
/* Get current value of the enable register that contains this GPE */
|
||||
|
||||
Status = AcpiHwLowLevelRead (ACPI_GPE_REGISTER_WIDTH, &EnableMask,
|
||||
&GpeRegisterInfo->EnableAddress);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Clear just the bit that corresponds to this GPE */
|
||||
|
||||
ACPI_CLEAR_BIT (EnableMask,
|
||||
((UINT32) 1 << (GpeEventInfo->GpeNumber - GpeRegisterInfo->BaseGpeNumber)));
|
||||
|
||||
|
||||
/* Write the updated enable mask */
|
||||
|
||||
Status = AcpiHwLowLevelWrite (ACPI_GPE_REGISTER_WIDTH, EnableMask,
|
||||
&GpeRegisterInfo->EnableAddress);
|
||||
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwWriteGpeEnableReg
|
||||
|
@ -354,7 +354,7 @@ AcpiHwGetBitRegisterInfo (
|
||||
* RETURN: Status and the value read from specified Register. Value
|
||||
* returned is normalized to bit0 (is shifted all the way right)
|
||||
*
|
||||
* DESCRIPTION: ACPI BitRegister read function.
|
||||
* DESCRIPTION: ACPI BitRegister read function. Does not acquire the HW lock.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -428,7 +428,7 @@ AcpiGetRegister (
|
||||
Status = AcpiGetRegisterUnlocked (RegisterId, ReturnValue);
|
||||
AcpiOsReleaseLock (AcpiGbl_HardwareLock, Flags);
|
||||
|
||||
return Status;
|
||||
return (Status);
|
||||
}
|
||||
|
||||
ACPI_EXPORT_SYMBOL (AcpiGetRegister)
|
||||
|
@ -137,7 +137,7 @@
|
||||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20080609
|
||||
#define ACPI_CA_VERSION 0x20080701
|
||||
|
||||
/*
|
||||
* OS name, used for the _OS object. The _OS object is essentially obsolete,
|
||||
|
@ -440,7 +440,7 @@ ACPI_EXTERN char *optarg;
|
||||
ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_tables;
|
||||
ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_stats;
|
||||
ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_ini_methods;
|
||||
|
||||
ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_NoRegionSupport;
|
||||
|
||||
ACPI_EXTERN char *AcpiGbl_DbArgs[ACPI_DEBUGGER_MAX_ARGS];
|
||||
ACPI_EXTERN char AcpiGbl_DbLineBuf[80];
|
||||
|
@ -184,6 +184,10 @@ AcpiHwClearAcpiStatus (
|
||||
* hwgpe - GPE support
|
||||
*/
|
||||
ACPI_STATUS
|
||||
AcpiHwLowDisableGpe (
|
||||
ACPI_GPE_EVENT_INFO *GpeEventInfo);
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiHwWriteGpeEnableReg (
|
||||
ACPI_GPE_EVENT_INFO *GpeEventInfo);
|
||||
|
||||
|
@ -175,8 +175,8 @@ union acpi_parse_object;
|
||||
static char *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] =
|
||||
{
|
||||
"ACPI_MTX_Interpreter",
|
||||
"ACPI_MTX_Tables",
|
||||
"ACPI_MTX_Namespace",
|
||||
"ACPI_MTX_Tables",
|
||||
"ACPI_MTX_Events",
|
||||
"ACPI_MTX_Caches",
|
||||
"ACPI_MTX_Memory",
|
||||
|
@ -137,7 +137,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* Extract data using a pointer. Any more than a byte and we
|
||||
* Extract data using a pointer. Any more than a byte and we
|
||||
* get into potential aligment issues -- see the STORE macros below.
|
||||
* Use with care.
|
||||
*/
|
||||
@ -155,21 +155,21 @@
|
||||
*/
|
||||
#define ACPI_CAST_PTR(t, p) ((t *) (ACPI_UINTPTR_T) (p))
|
||||
#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (ACPI_UINTPTR_T) (p))
|
||||
#define ACPI_ADD_PTR(t,a,b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8,(a)) + (ACPI_SIZE)(b)))
|
||||
#define ACPI_PTR_DIFF(a,b) (ACPI_SIZE) (ACPI_CAST_PTR (UINT8,(a)) - ACPI_CAST_PTR (UINT8,(b)))
|
||||
#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) + (ACPI_SIZE)(b)))
|
||||
#define ACPI_PTR_DIFF(a, b) (ACPI_SIZE) (ACPI_CAST_PTR (UINT8, (a)) - ACPI_CAST_PTR (UINT8, (b)))
|
||||
|
||||
/* Pointer/Integer type conversions */
|
||||
|
||||
#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void,(void *) NULL,(ACPI_SIZE) i)
|
||||
#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL)
|
||||
#define ACPI_OFFSET(d,f) (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL)
|
||||
#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i)
|
||||
#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL)
|
||||
#define ACPI_OFFSET(d, f) (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL)
|
||||
#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i)
|
||||
#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)
|
||||
|
||||
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
#define ACPI_COMPARE_NAME(a,b) (*ACPI_CAST_PTR (UINT32,(a)) == *ACPI_CAST_PTR (UINT32,(b)))
|
||||
#define ACPI_COMPARE_NAME(a,b) (*ACPI_CAST_PTR (UINT32, (a)) == *ACPI_CAST_PTR (UINT32, (b)))
|
||||
#else
|
||||
#define ACPI_COMPARE_NAME(a,b) (!ACPI_STRNCMP (ACPI_CAST_PTR (char,(a)), ACPI_CAST_PTR (char,(b)), ACPI_NAME_SIZE))
|
||||
#define ACPI_COMPARE_NAME(a,b) (!ACPI_STRNCMP (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAME_SIZE))
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -191,7 +191,7 @@ typedef struct acpi_integer_overlay
|
||||
|
||||
/* Split 64-bit integer into two 32-bit values. Use with %8.8X%8.8X */
|
||||
|
||||
#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i),ACPI_LODWORD(i)
|
||||
#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i), ACPI_LODWORD(i)
|
||||
|
||||
#if ACPI_MACHINE_WIDTH == 64
|
||||
#define ACPI_FORMAT_NATIVE_UINT(i) ACPI_FORMAT_UINT64(i)
|
||||
@ -210,37 +210,33 @@ typedef struct acpi_integer_overlay
|
||||
* Macros for big-endian machines
|
||||
*/
|
||||
|
||||
/* This macro sets a buffer index, starting from the end of the buffer */
|
||||
|
||||
#define ACPI_BUFFER_INDEX(BufLen,BufOffset,ByteGran) ((BufLen) - (((BufOffset)+1) * (ByteGran)))
|
||||
|
||||
/* These macros reverse the bytes during the move, converting little-endian to big endian */
|
||||
|
||||
/* Big Endian <== Little Endian */
|
||||
/* Hi...Lo Lo...Hi */
|
||||
/* 16-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_16_TO_16(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[1];\
|
||||
#define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[1];\
|
||||
(( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[0];}
|
||||
|
||||
#define ACPI_MOVE_16_TO_32(d,s) {(*(UINT32 *)(void *)(d))=0;\
|
||||
#define ACPI_MOVE_16_TO_32(d, s) {(*(UINT32 *)(void *)(d))=0;\
|
||||
((UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\
|
||||
((UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];}
|
||||
|
||||
#define ACPI_MOVE_16_TO_64(d,s) {(*(UINT64 *)(void *)(d))=0;\
|
||||
#define ACPI_MOVE_16_TO_64(d, s) {(*(UINT64 *)(void *)(d))=0;\
|
||||
((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
|
||||
((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
|
||||
|
||||
/* 32-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
|
||||
#define ACPI_MOVE_32_TO_32(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
|
||||
#define ACPI_MOVE_32_TO_32(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
|
||||
(( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\
|
||||
(( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\
|
||||
(( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];}
|
||||
|
||||
#define ACPI_MOVE_32_TO_64(d,s) {(*(UINT64 *)(void *)(d))=0;\
|
||||
#define ACPI_MOVE_32_TO_64(d, s) {(*(UINT64 *)(void *)(d))=0;\
|
||||
((UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\
|
||||
((UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\
|
||||
((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
|
||||
@ -248,11 +244,11 @@ typedef struct acpi_integer_overlay
|
||||
|
||||
/* 64-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
|
||||
#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */
|
||||
#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */
|
||||
|
||||
#define ACPI_MOVE_64_TO_64(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
|
||||
#define ACPI_MOVE_64_TO_64(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
|
||||
(( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
|
||||
(( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\
|
||||
(( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];\
|
||||
@ -265,63 +261,59 @@ typedef struct acpi_integer_overlay
|
||||
* Macros for little-endian machines
|
||||
*/
|
||||
|
||||
/* This macro sets a buffer index, starting from the beginning of the buffer */
|
||||
|
||||
#define ACPI_BUFFER_INDEX(BufLen,BufOffset,ByteGran) (BufOffset)
|
||||
|
||||
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
|
||||
/* The hardware supports unaligned transfers, just do the little-endian move */
|
||||
|
||||
/* 16-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_16_TO_16(d,s) *(UINT16 *)(void *)(d) = *(UINT16 *)(void *)(s)
|
||||
#define ACPI_MOVE_16_TO_32(d,s) *(UINT32 *)(void *)(d) = *(UINT16 *)(void *)(s)
|
||||
#define ACPI_MOVE_16_TO_64(d,s) *(UINT64 *)(void *)(d) = *(UINT16 *)(void *)(s)
|
||||
#define ACPI_MOVE_16_TO_16(d, s) *(UINT16 *)(void *)(d) = *(UINT16 *)(void *)(s)
|
||||
#define ACPI_MOVE_16_TO_32(d, s) *(UINT32 *)(void *)(d) = *(UINT16 *)(void *)(s)
|
||||
#define ACPI_MOVE_16_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT16 *)(void *)(s)
|
||||
|
||||
/* 32-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_32_TO_32(d,s) *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s)
|
||||
#define ACPI_MOVE_32_TO_64(d,s) *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s)
|
||||
#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_32_TO_32(d, s) *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s)
|
||||
#define ACPI_MOVE_32_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s)
|
||||
|
||||
/* 64-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */
|
||||
#define ACPI_MOVE_64_TO_64(d,s) *(UINT64 *)(void *)(d) = *(UINT64 *)(void *)(s)
|
||||
#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */
|
||||
#define ACPI_MOVE_64_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT64 *)(void *)(s)
|
||||
|
||||
#else
|
||||
/*
|
||||
* The hardware does not support unaligned transfers. We must move the
|
||||
* data one byte at a time. These macros work whether the source or
|
||||
* The hardware does not support unaligned transfers. We must move the
|
||||
* data one byte at a time. These macros work whether the source or
|
||||
* the destination (or both) is/are unaligned. (Little-endian move)
|
||||
*/
|
||||
|
||||
/* 16-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_16_TO_16(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
|
||||
#define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
|
||||
(( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];}
|
||||
|
||||
#define ACPI_MOVE_16_TO_32(d,s) {(*(UINT32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d,s);}
|
||||
#define ACPI_MOVE_16_TO_64(d,s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d,s);}
|
||||
#define ACPI_MOVE_16_TO_32(d, s) {(*(UINT32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
|
||||
#define ACPI_MOVE_16_TO_64(d, s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
|
||||
|
||||
/* 32-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
|
||||
#define ACPI_MOVE_32_TO_32(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
|
||||
#define ACPI_MOVE_32_TO_32(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
|
||||
(( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];\
|
||||
(( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[2];\
|
||||
(( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[3];}
|
||||
|
||||
#define ACPI_MOVE_32_TO_64(d,s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d,s);}
|
||||
#define ACPI_MOVE_32_TO_64(d, s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d, s);}
|
||||
|
||||
/* 64-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */
|
||||
#define ACPI_MOVE_64_TO_64(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
|
||||
#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */
|
||||
#define ACPI_MOVE_64_TO_64(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
|
||||
(( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];\
|
||||
(( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[2];\
|
||||
(( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[3];\
|
||||
@ -332,65 +324,53 @@ typedef struct acpi_integer_overlay
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Macros based on machine integer width */
|
||||
|
||||
#if ACPI_MACHINE_WIDTH == 32
|
||||
#define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_32_TO_16(d,s)
|
||||
|
||||
#elif ACPI_MACHINE_WIDTH == 64
|
||||
#define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_64_TO_16(d,s)
|
||||
|
||||
#else
|
||||
#error unknown ACPI_MACHINE_WIDTH
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Fast power-of-two math macros for non-optimized compilers
|
||||
*/
|
||||
#define _ACPI_DIV(value,PowerOf2) ((UINT32) ((value) >> (PowerOf2)))
|
||||
#define _ACPI_MUL(value,PowerOf2) ((UINT32) ((value) << (PowerOf2)))
|
||||
#define _ACPI_MOD(value,Divisor) ((UINT32) ((value) & ((Divisor) -1)))
|
||||
#define _ACPI_DIV(value, PowerOf2) ((UINT32) ((value) >> (PowerOf2)))
|
||||
#define _ACPI_MUL(value, PowerOf2) ((UINT32) ((value) << (PowerOf2)))
|
||||
#define _ACPI_MOD(value, Divisor) ((UINT32) ((value) & ((Divisor) -1)))
|
||||
|
||||
#define ACPI_DIV_2(a) _ACPI_DIV(a,1)
|
||||
#define ACPI_MUL_2(a) _ACPI_MUL(a,1)
|
||||
#define ACPI_MOD_2(a) _ACPI_MOD(a,2)
|
||||
#define ACPI_DIV_2(a) _ACPI_DIV(a, 1)
|
||||
#define ACPI_MUL_2(a) _ACPI_MUL(a, 1)
|
||||
#define ACPI_MOD_2(a) _ACPI_MOD(a, 2)
|
||||
|
||||
#define ACPI_DIV_4(a) _ACPI_DIV(a,2)
|
||||
#define ACPI_MUL_4(a) _ACPI_MUL(a,2)
|
||||
#define ACPI_MOD_4(a) _ACPI_MOD(a,4)
|
||||
#define ACPI_DIV_4(a) _ACPI_DIV(a, 2)
|
||||
#define ACPI_MUL_4(a) _ACPI_MUL(a, 2)
|
||||
#define ACPI_MOD_4(a) _ACPI_MOD(a, 4)
|
||||
|
||||
#define ACPI_DIV_8(a) _ACPI_DIV(a,3)
|
||||
#define ACPI_MUL_8(a) _ACPI_MUL(a,3)
|
||||
#define ACPI_MOD_8(a) _ACPI_MOD(a,8)
|
||||
#define ACPI_DIV_8(a) _ACPI_DIV(a, 3)
|
||||
#define ACPI_MUL_8(a) _ACPI_MUL(a, 3)
|
||||
#define ACPI_MOD_8(a) _ACPI_MOD(a, 8)
|
||||
|
||||
#define ACPI_DIV_16(a) _ACPI_DIV(a,4)
|
||||
#define ACPI_MUL_16(a) _ACPI_MUL(a,4)
|
||||
#define ACPI_MOD_16(a) _ACPI_MOD(a,16)
|
||||
#define ACPI_DIV_16(a) _ACPI_DIV(a, 4)
|
||||
#define ACPI_MUL_16(a) _ACPI_MUL(a, 4)
|
||||
#define ACPI_MOD_16(a) _ACPI_MOD(a, 16)
|
||||
|
||||
#define ACPI_DIV_32(a) _ACPI_DIV(a,5)
|
||||
#define ACPI_MUL_32(a) _ACPI_MUL(a,5)
|
||||
#define ACPI_MOD_32(a) _ACPI_MOD(a,32)
|
||||
#define ACPI_DIV_32(a) _ACPI_DIV(a, 5)
|
||||
#define ACPI_MUL_32(a) _ACPI_MUL(a, 5)
|
||||
#define ACPI_MOD_32(a) _ACPI_MOD(a, 32)
|
||||
|
||||
/*
|
||||
* Rounding macros (Power of two boundaries only)
|
||||
*/
|
||||
#define ACPI_ROUND_DOWN(value,boundary) (((ACPI_SIZE)(value)) & \
|
||||
#define ACPI_ROUND_DOWN(value, boundary) (((ACPI_SIZE)(value)) & \
|
||||
(~(((ACPI_SIZE) boundary)-1)))
|
||||
|
||||
#define ACPI_ROUND_UP(value,boundary) ((((ACPI_SIZE)(value)) + \
|
||||
#define ACPI_ROUND_UP(value, boundary) ((((ACPI_SIZE)(value)) + \
|
||||
(((ACPI_SIZE) boundary)-1)) & \
|
||||
(~(((ACPI_SIZE) boundary)-1)))
|
||||
|
||||
/* Note: sizeof(ACPI_SIZE) evaluates to either 4 or 8 (32- vs 64-bit mode) */
|
||||
|
||||
#define ACPI_ROUND_DOWN_TO_32BIT(a) ACPI_ROUND_DOWN(a,4)
|
||||
#define ACPI_ROUND_DOWN_TO_64BIT(a) ACPI_ROUND_DOWN(a,8)
|
||||
#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a,sizeof(ACPI_SIZE))
|
||||
#define ACPI_ROUND_DOWN_TO_32BIT(a) ACPI_ROUND_DOWN(a, 4)
|
||||
#define ACPI_ROUND_DOWN_TO_64BIT(a) ACPI_ROUND_DOWN(a, 8)
|
||||
#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a, sizeof(ACPI_SIZE))
|
||||
|
||||
#define ACPI_ROUND_UP_TO_32BIT(a) ACPI_ROUND_UP(a,4)
|
||||
#define ACPI_ROUND_UP_TO_64BIT(a) ACPI_ROUND_UP(a,8)
|
||||
#define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a,sizeof(ACPI_SIZE))
|
||||
#define ACPI_ROUND_UP_TO_32BIT(a) ACPI_ROUND_UP(a, 4)
|
||||
#define ACPI_ROUND_UP_TO_64BIT(a) ACPI_ROUND_UP(a, 8)
|
||||
#define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a, sizeof(ACPI_SIZE))
|
||||
|
||||
#define ACPI_ROUND_BITS_UP_TO_BYTES(a) ACPI_DIV_8((a) + 7)
|
||||
#define ACPI_ROUND_BITS_DOWN_TO_BYTES(a) ACPI_DIV_8((a))
|
||||
@ -399,9 +379,9 @@ typedef struct acpi_integer_overlay
|
||||
|
||||
/* Generic (non-power-of-two) rounding */
|
||||
|
||||
#define ACPI_ROUND_UP_TO(value,boundary) (((value) + ((boundary)-1)) / (boundary))
|
||||
#define ACPI_ROUND_UP_TO(value, boundary) (((value) + ((boundary)-1)) / (boundary))
|
||||
|
||||
#define ACPI_IS_MISALIGNED(value) (((ACPI_SIZE)value) & (sizeof(ACPI_SIZE)-1))
|
||||
#define ACPI_IS_MISALIGNED(value) (((ACPI_SIZE) value) & (sizeof(ACPI_SIZE)-1))
|
||||
|
||||
/*
|
||||
* Bitmask creation
|
||||
@ -412,9 +392,6 @@ typedef struct acpi_integer_overlay
|
||||
#define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_INTEGER_MAX) << ((UINT32) (position))))
|
||||
#define ACPI_MASK_BITS_BELOW(position) ((ACPI_INTEGER_MAX) << ((UINT32) (position)))
|
||||
|
||||
#define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7'))
|
||||
|
||||
|
||||
/* Bitfields within ACPI registers */
|
||||
|
||||
#define ACPI_REGISTER_PREPARE_BITS(Val, Pos, Mask) ((Val << Pos) & Mask)
|
||||
@ -422,40 +399,29 @@ typedef struct acpi_integer_overlay
|
||||
|
||||
#define ACPI_INSERT_BITS(Target, Mask, Source) Target = ((Target & (~(Mask))) | (Source & Mask))
|
||||
|
||||
/* Generate a UUID */
|
||||
|
||||
#define ACPI_INIT_UUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \
|
||||
(a) & 0xFF, ((a) >> 8) & 0xFF, ((a) >> 16) & 0xFF, ((a) >> 24) & 0xFF, \
|
||||
(b) & 0xFF, ((b) >> 8) & 0xFF, \
|
||||
(c) & 0xFF, ((c) >> 8) & 0xFF, \
|
||||
(d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7)
|
||||
|
||||
/*
|
||||
* An ACPI_NAMESPACE_NODE * can appear in some contexts,
|
||||
* where a pointer to an ACPI_OPERAND_OBJECT can also
|
||||
* appear. This macro is used to distinguish them.
|
||||
* An ACPI_NAMESPACE_NODE can appear in some contexts
|
||||
* where a pointer to an ACPI_OPERAND_OBJECT can also
|
||||
* appear. This macro is used to distinguish them.
|
||||
*
|
||||
* The "Descriptor" field is the first field in both structures.
|
||||
*/
|
||||
#define ACPI_GET_DESCRIPTOR_TYPE(d) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType)
|
||||
#define ACPI_SET_DESCRIPTOR_TYPE(d,t) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType = t)
|
||||
|
||||
#define ACPI_SET_DESCRIPTOR_TYPE(d, t) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType = t)
|
||||
|
||||
/* Macro to test the object type */
|
||||
|
||||
#define ACPI_GET_OBJECT_TYPE(d) (((ACPI_OPERAND_OBJECT *)(void *)(d))->Common.Type)
|
||||
|
||||
/* Macro to check the table flags for SINGLE or MULTIPLE tables are allowed */
|
||||
|
||||
#define ACPI_IS_SINGLE_TABLE(x) (((x) & 0x01) == ACPI_TABLE_SINGLE ? 1 : 0)
|
||||
|
||||
/*
|
||||
* Macros for the master AML opcode table
|
||||
*/
|
||||
#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
|
||||
#define ACPI_OP(Name,PArgs,IArgs,ObjType,Class,Type,Flags) {Name,(UINT32)(PArgs),(UINT32)(IArgs),(UINT32)(Flags),ObjType,Class,Type}
|
||||
#if defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
|
||||
#define ACPI_OP(Name, PArgs, IArgs, ObjType, Class, Type, Flags) \
|
||||
{Name, (UINT32)(PArgs), (UINT32)(IArgs), (UINT32)(Flags), ObjType, Class, Type}
|
||||
#else
|
||||
#define ACPI_OP(Name,PArgs,IArgs,ObjType,Class,Type,Flags) {(UINT32)(PArgs),(UINT32)(IArgs),(UINT32)(Flags),ObjType,Class,Type}
|
||||
#define ACPI_OP(Name, PArgs, IArgs, ObjType, Class, Type, Flags) \
|
||||
{(UINT32)(PArgs), (UINT32)(IArgs), (UINT32)(Flags), ObjType, Class, Type}
|
||||
#endif
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
@ -473,18 +439,18 @@ typedef struct acpi_integer_overlay
|
||||
#define ARG_6(x) ((UINT32)(x) << (5 * ARG_TYPE_WIDTH))
|
||||
|
||||
#define ARGI_LIST1(a) (ARG_1(a))
|
||||
#define ARGI_LIST2(a,b) (ARG_1(b)|ARG_2(a))
|
||||
#define ARGI_LIST3(a,b,c) (ARG_1(c)|ARG_2(b)|ARG_3(a))
|
||||
#define ARGI_LIST4(a,b,c,d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a))
|
||||
#define ARGI_LIST5(a,b,c,d,e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a))
|
||||
#define ARGI_LIST6(a,b,c,d,e,f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a))
|
||||
#define ARGI_LIST2(a, b) (ARG_1(b)|ARG_2(a))
|
||||
#define ARGI_LIST3(a, b, c) (ARG_1(c)|ARG_2(b)|ARG_3(a))
|
||||
#define ARGI_LIST4(a, b, c, d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a))
|
||||
#define ARGI_LIST5(a, b, c, d, e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a))
|
||||
#define ARGI_LIST6(a, b, c, d, e, f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a))
|
||||
|
||||
#define ARGP_LIST1(a) (ARG_1(a))
|
||||
#define ARGP_LIST2(a,b) (ARG_1(a)|ARG_2(b))
|
||||
#define ARGP_LIST3(a,b,c) (ARG_1(a)|ARG_2(b)|ARG_3(c))
|
||||
#define ARGP_LIST4(a,b,c,d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d))
|
||||
#define ARGP_LIST5(a,b,c,d,e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e))
|
||||
#define ARGP_LIST6(a,b,c,d,e,f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f))
|
||||
#define ARGP_LIST2(a, b) (ARG_1(a)|ARG_2(b))
|
||||
#define ARGP_LIST3(a, b, c) (ARG_1(a)|ARG_2(b)|ARG_3(c))
|
||||
#define ARGP_LIST4(a, b, c, d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d))
|
||||
#define ARGP_LIST5(a, b, c, d, e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e))
|
||||
#define ARGP_LIST6(a, b, c, d, e, f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f))
|
||||
|
||||
#define GET_CURRENT_ARG_TYPE(List) (List & ((UINT32) 0x1F))
|
||||
#define INCREMENT_ARG_LIST(List) (List >>= ((UINT32) ARG_TYPE_WIDTH))
|
||||
@ -516,8 +482,8 @@ typedef struct acpi_integer_overlay
|
||||
#define ACPI_WARNING(plist) AcpiUtWarning plist
|
||||
#define ACPI_EXCEPTION(plist) AcpiUtException plist
|
||||
#define ACPI_ERROR(plist) AcpiUtError plist
|
||||
#define ACPI_ERROR_NAMESPACE(s,e) AcpiNsReportError (AE_INFO, s, e);
|
||||
#define ACPI_ERROR_METHOD(s,n,p,e) AcpiNsReportMethodError (AE_INFO, s, n, p, e);
|
||||
#define ACPI_ERROR_NAMESPACE(s, e) AcpiNsReportError (AE_INFO, s, e);
|
||||
#define ACPI_ERROR_METHOD(s, n, p, e) AcpiNsReportMethodError (AE_INFO, s, n, p, e);
|
||||
|
||||
#else
|
||||
|
||||
@ -527,8 +493,8 @@ typedef struct acpi_integer_overlay
|
||||
#define ACPI_WARNING(plist)
|
||||
#define ACPI_EXCEPTION(plist)
|
||||
#define ACPI_ERROR(plist)
|
||||
#define ACPI_ERROR_NAMESPACE(s,e)
|
||||
#define ACPI_ERROR_METHOD(s,n,p,e)
|
||||
#define ACPI_ERROR_NAMESPACE(s, e)
|
||||
#define ACPI_ERROR_METHOD(s, n, p, e)
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -569,18 +535,18 @@ typedef struct acpi_integer_overlay
|
||||
|
||||
#define ACPI_FUNCTION_TRACE(a) ACPI_FUNCTION_NAME(a) \
|
||||
AcpiUtTrace(ACPI_DEBUG_PARAMETERS)
|
||||
#define ACPI_FUNCTION_TRACE_PTR(a,b) ACPI_FUNCTION_NAME(a) \
|
||||
AcpiUtTracePtr(ACPI_DEBUG_PARAMETERS,(void *)b)
|
||||
#define ACPI_FUNCTION_TRACE_U32(a,b) ACPI_FUNCTION_NAME(a) \
|
||||
AcpiUtTraceU32(ACPI_DEBUG_PARAMETERS,(UINT32)b)
|
||||
#define ACPI_FUNCTION_TRACE_STR(a,b) ACPI_FUNCTION_NAME(a) \
|
||||
AcpiUtTraceStr(ACPI_DEBUG_PARAMETERS,(char *)b)
|
||||
#define ACPI_FUNCTION_TRACE_PTR(a, b) ACPI_FUNCTION_NAME(a) \
|
||||
AcpiUtTracePtr(ACPI_DEBUG_PARAMETERS, (void *)b)
|
||||
#define ACPI_FUNCTION_TRACE_U32(a, b) ACPI_FUNCTION_NAME(a) \
|
||||
AcpiUtTraceU32(ACPI_DEBUG_PARAMETERS, (UINT32)b)
|
||||
#define ACPI_FUNCTION_TRACE_STR(a, b) ACPI_FUNCTION_NAME(a) \
|
||||
AcpiUtTraceStr(ACPI_DEBUG_PARAMETERS, (char *)b)
|
||||
|
||||
#define ACPI_FUNCTION_ENTRY() AcpiUtTrackStackPtr()
|
||||
|
||||
/*
|
||||
* Function exit tracing.
|
||||
* WARNING: These macros include a return statement. This is usually considered
|
||||
* WARNING: These macros include a return statement. This is usually considered
|
||||
* bad form, but having a separate exit macro is very ugly and difficult to maintain.
|
||||
* One of the FUNCTION_TRACE macros above must be used in conjunction with these macros
|
||||
* so that "_AcpiFunctionName" is defined.
|
||||
@ -648,23 +614,17 @@ typedef struct acpi_integer_overlay
|
||||
/* Conditional execution */
|
||||
|
||||
#define ACPI_DEBUG_EXEC(a) a
|
||||
#define ACPI_NORMAL_EXEC(a)
|
||||
|
||||
#define ACPI_DEBUG_DEFINE(a) a;
|
||||
#define ACPI_DEBUG_ONLY_MEMBERS(a) a;
|
||||
#define _VERBOSE_STRUCTURES
|
||||
|
||||
|
||||
/* Stack and buffer dumping */
|
||||
/* Various object display routines for debug */
|
||||
|
||||
#define ACPI_DUMP_STACK_ENTRY(a) AcpiExDumpOperand((a),0)
|
||||
#define ACPI_DUMP_OPERANDS(a,b,c) AcpiExDumpOperands(a,b,c)
|
||||
|
||||
|
||||
#define ACPI_DUMP_ENTRY(a,b) AcpiNsDumpEntry (a,b)
|
||||
#define ACPI_DUMP_PATHNAME(a,b,c,d) AcpiNsDumpPathname(a,b,c,d)
|
||||
#define ACPI_DUMP_RESOURCE_LIST(a) AcpiRsDumpResourceList(a)
|
||||
#define ACPI_DUMP_BUFFER(a,b) AcpiUtDumpBuffer((UINT8 *)a,b,DB_BYTE_DISPLAY,_COMPONENT)
|
||||
#define ACPI_DUMP_STACK_ENTRY(a) AcpiExDumpOperand((a), 0)
|
||||
#define ACPI_DUMP_OPERANDS(a, b ,c) AcpiExDumpOperands(a, b, c)
|
||||
#define ACPI_DUMP_ENTRY(a, b) AcpiNsDumpEntry (a, b)
|
||||
#define ACPI_DUMP_PATHNAME(a, b, c, d) AcpiNsDumpPathname(a, b, c, d)
|
||||
#define ACPI_DUMP_BUFFER(a, b) AcpiUtDumpBuffer((UINT8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT)
|
||||
|
||||
/*
|
||||
* Master debug print macros
|
||||
@ -682,26 +642,22 @@ typedef struct acpi_integer_overlay
|
||||
* leaving no executable debug code!
|
||||
*/
|
||||
#define ACPI_DEBUG_EXEC(a)
|
||||
#define ACPI_NORMAL_EXEC(a) a;
|
||||
|
||||
#define ACPI_DEBUG_DEFINE(a)
|
||||
#define ACPI_DEBUG_ONLY_MEMBERS(a)
|
||||
#define ACPI_FUNCTION_NAME(a)
|
||||
#define ACPI_FUNCTION_TRACE(a)
|
||||
#define ACPI_FUNCTION_TRACE_PTR(a,b)
|
||||
#define ACPI_FUNCTION_TRACE_U32(a,b)
|
||||
#define ACPI_FUNCTION_TRACE_STR(a,b)
|
||||
#define ACPI_FUNCTION_TRACE_PTR(a, b)
|
||||
#define ACPI_FUNCTION_TRACE_U32(a, b)
|
||||
#define ACPI_FUNCTION_TRACE_STR(a, b)
|
||||
#define ACPI_FUNCTION_EXIT
|
||||
#define ACPI_FUNCTION_STATUS_EXIT(s)
|
||||
#define ACPI_FUNCTION_VALUE_EXIT(s)
|
||||
#define ACPI_FUNCTION_ENTRY()
|
||||
#define ACPI_DUMP_STACK_ENTRY(a)
|
||||
#define ACPI_DUMP_OPERANDS(a,b,c)
|
||||
#define ACPI_DUMP_ENTRY(a,b)
|
||||
#define ACPI_DUMP_TABLES(a,b)
|
||||
#define ACPI_DUMP_PATHNAME(a,b,c,d)
|
||||
#define ACPI_DUMP_RESOURCE_LIST(a)
|
||||
#define ACPI_DUMP_BUFFER(a,b)
|
||||
#define ACPI_DUMP_OPERANDS(a, b, c)
|
||||
#define ACPI_DUMP_ENTRY(a, b)
|
||||
#define ACPI_DUMP_TABLES(a, b)
|
||||
#define ACPI_DUMP_PATHNAME(a, b, c, d)
|
||||
#define ACPI_DUMP_BUFFER(a, b)
|
||||
#define ACPI_DEBUG_PRINT(pl)
|
||||
#define ACPI_DEBUG_PRINT_RAW(pl)
|
||||
|
||||
@ -726,28 +682,17 @@ typedef struct acpi_integer_overlay
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
/*
|
||||
* 1) Set name to blanks
|
||||
* 2) Copy the object name
|
||||
*/
|
||||
#define ACPI_ADD_OBJECT_NAME(a,b) ACPI_MEMSET (a->Common.Name, ' ', sizeof (a->Common.Name));\
|
||||
ACPI_STRNCPY (a->Common.Name, AcpiGbl_NsTypeNames[b], sizeof (a->Common.Name))
|
||||
#else
|
||||
|
||||
#define ACPI_ADD_OBJECT_NAME(a,b)
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Memory allocation tracking (DEBUG ONLY)
|
||||
*/
|
||||
#define ACPI_MEM_PARAMETERS _COMPONENT, _AcpiModuleName, __LINE__
|
||||
|
||||
#ifndef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
|
||||
/* Memory allocation */
|
||||
|
||||
#define ACPI_ALLOCATE(a) AcpiUtAllocate((ACPI_SIZE)(a),_COMPONENT,_AcpiModuleName,__LINE__)
|
||||
#define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroed((ACPI_SIZE)(a), _COMPONENT,_AcpiModuleName,__LINE__)
|
||||
#define ACPI_ALLOCATE(a) AcpiUtAllocate((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS)
|
||||
#define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroed((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS)
|
||||
#define ACPI_FREE(a) AcpiOsFree(a)
|
||||
#define ACPI_MEM_TRACKING(a)
|
||||
|
||||
@ -755,11 +700,27 @@ typedef struct acpi_integer_overlay
|
||||
|
||||
/* Memory allocation */
|
||||
|
||||
#define ACPI_ALLOCATE(a) AcpiUtAllocateAndTrack((ACPI_SIZE)(a),_COMPONENT,_AcpiModuleName,__LINE__)
|
||||
#define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroedAndTrack((ACPI_SIZE)(a), _COMPONENT,_AcpiModuleName,__LINE__)
|
||||
#define ACPI_FREE(a) AcpiUtFreeAndTrack(a,_COMPONENT,_AcpiModuleName,__LINE__)
|
||||
#define ACPI_ALLOCATE(a) AcpiUtAllocateAndTrack((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS)
|
||||
#define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroedAndTrack((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS)
|
||||
#define ACPI_FREE(a) AcpiUtFreeAndTrack(a, ACPI_MEM_PARAMETERS)
|
||||
#define ACPI_MEM_TRACKING(a) a
|
||||
|
||||
#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
|
||||
|
||||
|
||||
/*
|
||||
* Macros used for ACPICA utilities only
|
||||
*/
|
||||
|
||||
/* Generate a UUID */
|
||||
|
||||
#define ACPI_INIT_UUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
|
||||
(a) & 0xFF, ((a) >> 8) & 0xFF, ((a) >> 16) & 0xFF, ((a) >> 24) & 0xFF, \
|
||||
(b) & 0xFF, ((b) >> 8) & 0xFF, \
|
||||
(c) & 0xFF, ((c) >> 8) & 0xFF, \
|
||||
(d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7)
|
||||
|
||||
#define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7'))
|
||||
|
||||
|
||||
#endif /* ACMACROS_H */
|
||||
|
@ -1036,6 +1036,7 @@ typedef struct acpi_device_info
|
||||
{
|
||||
ACPI_COMMON_OBJ_INFO;
|
||||
|
||||
UINT32 ParamCount; /* If a method, required parameter count */
|
||||
UINT32 Valid; /* Indicates which fields below are valid */
|
||||
UINT32 CurrentStatus; /* _STA value */
|
||||
ACPI_INTEGER Address; /* _ADR value if any */
|
||||
@ -1473,8 +1474,8 @@ typedef struct acpi_resource
|
||||
#pragma pack()
|
||||
|
||||
|
||||
#define ACPI_RS_SIZE_MIN 12
|
||||
#define ACPI_RS_SIZE_NO_DATA 8 /* Id + Length fields */
|
||||
#define ACPI_RS_SIZE_MIN (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (12)
|
||||
#define ACPI_RS_SIZE(Type) (UINT32) (ACPI_RS_SIZE_NO_DATA + sizeof (Type))
|
||||
|
||||
#define ACPI_NEXT_RESOURCE(Res) (ACPI_RESOURCE *)((UINT8 *) Res + Res->Length)
|
||||
|
@ -124,7 +124,6 @@
|
||||
#include <sys/types.h>
|
||||
#include <machine/acpica_machdep.h>
|
||||
|
||||
#define ACPI_THREAD_ID uintptr_t
|
||||
#define ACPI_UINTPTR_T uintptr_t
|
||||
#define ACPI_USE_LOCAL_CACHE
|
||||
#define __cdecl
|
||||
@ -176,7 +175,7 @@
|
||||
/* Always use FreeBSD code over our local versions */
|
||||
#define ACPI_USE_SYSTEM_CLIBRARY
|
||||
|
||||
+#if defined(_KERNEL) && (__FreeBSD_version < 700020)
|
||||
#if defined(_KERNEL) && (__FreeBSD_version < 700020)
|
||||
/* Or strstr (used in debugging mode, also move to libkern) */
|
||||
static __inline char *
|
||||
strstr (char *s, char *find)
|
||||
|
@ -361,6 +361,7 @@ AcpiGetObjectInfo (
|
||||
if (!Node)
|
||||
{
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
Status = AE_BAD_PARAMETER;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
@ -372,6 +373,11 @@ AcpiGetObjectInfo (
|
||||
Info->Name = Node->Name.Integer;
|
||||
Info->Valid = 0;
|
||||
|
||||
if (Node->Type == ACPI_TYPE_METHOD)
|
||||
{
|
||||
Info->ParamCount = Node->Object->Method.ParamCount;
|
||||
}
|
||||
|
||||
Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
|
@ -196,7 +196,6 @@ AcpiTbAddTable (
|
||||
UINT32 *TableIndex)
|
||||
{
|
||||
UINT32 i;
|
||||
UINT32 Length;
|
||||
ACPI_STATUS Status = AE_OK;
|
||||
|
||||
|
||||
@ -235,25 +234,64 @@ AcpiTbAddTable (
|
||||
}
|
||||
}
|
||||
|
||||
Length = ACPI_MIN (TableDesc->Length,
|
||||
AcpiGbl_RootTableList.Tables[i].Length);
|
||||
if (ACPI_MEMCMP (TableDesc->Pointer,
|
||||
AcpiGbl_RootTableList.Tables[i].Pointer, Length))
|
||||
/*
|
||||
* Check for a table match on the entire table length,
|
||||
* not just the header.
|
||||
*/
|
||||
if (TableDesc->Length != AcpiGbl_RootTableList.Tables[i].Length)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Table is already registered */
|
||||
if (ACPI_MEMCMP (TableDesc->Pointer,
|
||||
AcpiGbl_RootTableList.Tables[i].Pointer,
|
||||
AcpiGbl_RootTableList.Tables[i].Length))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: the current mechanism does not unregister a table if it is
|
||||
* dynamically unloaded. The related namespace entries are deleted,
|
||||
* but the table remains in the root table list.
|
||||
*
|
||||
* The assumption here is that the number of different tables that
|
||||
* will be loaded is actually small, and there is minimal overhead
|
||||
* in just keeping the table in case it is needed again.
|
||||
*
|
||||
* If this assumption changes in the future (perhaps on large
|
||||
* machines with many table load/unload operations), tables will
|
||||
* need to be unregistered when they are unloaded, and slots in the
|
||||
* root table list should be reused when empty.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Table is already registered.
|
||||
* We can delete the table that was passed as a parameter.
|
||||
*/
|
||||
AcpiTbDeleteTable (TableDesc);
|
||||
*TableIndex = i;
|
||||
Status = AE_ALREADY_EXISTS;
|
||||
goto Release;
|
||||
|
||||
if (AcpiGbl_RootTableList.Tables[i].Flags & ACPI_TABLE_IS_LOADED)
|
||||
{
|
||||
/* Table is still loaded, this is an error */
|
||||
|
||||
Status = AE_ALREADY_EXISTS;
|
||||
goto Release;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Table was unloaded, allow it to be reloaded */
|
||||
|
||||
TableDesc->Pointer = AcpiGbl_RootTableList.Tables[i].Pointer;
|
||||
TableDesc->Address = AcpiGbl_RootTableList.Tables[i].Address;
|
||||
Status = AE_OK;
|
||||
goto PrintHeader;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the table to the global table list
|
||||
*/
|
||||
/* Add the table to the global root table list */
|
||||
|
||||
Status = AcpiTbStoreTable (TableDesc->Address, TableDesc->Pointer,
|
||||
TableDesc->Length, TableDesc->Flags, TableIndex);
|
||||
if (ACPI_FAILURE (Status))
|
||||
@ -261,6 +299,7 @@ AcpiTbAddTable (
|
||||
goto Release;
|
||||
}
|
||||
|
||||
PrintHeader:
|
||||
AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer);
|
||||
|
||||
Release:
|
||||
|
@ -222,6 +222,10 @@ AcpiUtDeleteInternalObj (
|
||||
break;
|
||||
|
||||
|
||||
/*
|
||||
* These objects have a possible list of notify handlers.
|
||||
* Device object also may have a GPE block.
|
||||
*/
|
||||
case ACPI_TYPE_DEVICE:
|
||||
|
||||
if (Object->Device.GpeBlock)
|
||||
@ -229,9 +233,14 @@ AcpiUtDeleteInternalObj (
|
||||
(void) AcpiEvDeleteGpeBlock (Object->Device.GpeBlock);
|
||||
}
|
||||
|
||||
/* Walk the handler list for this device */
|
||||
/*lint -fallthrough */
|
||||
|
||||
HandlerDesc = Object->Device.Handler;
|
||||
case ACPI_TYPE_PROCESSOR:
|
||||
case ACPI_TYPE_THERMAL:
|
||||
|
||||
/* Walk the notify handler list for this object */
|
||||
|
||||
HandlerDesc = Object->CommonNotify.Handler;
|
||||
while (HandlerDesc)
|
||||
{
|
||||
NextDesc = HandlerDesc->AddressSpace.Next;
|
||||
|
Loading…
Reference in New Issue
Block a user