Resolve conflicts arising from the ACPI CA 20020611 import.

This commit is contained in:
iwasaki 2002-07-09 17:54:02 +00:00
parent 8b8da579d4
commit 864900d96b
22 changed files with 898 additions and 644 deletions

View File

@ -30,8 +30,7 @@
#include <machine/stdarg.h>
#include <bootstrap.h>
#define COMPILER_DEPENDENT_INT64 long long
#define COMPILER_DEPENDENT_UINT64 unsigned long long
#include "acfreebsd.h"
#include "actypes.h"
#include "actbl.h"

View File

@ -224,6 +224,7 @@ dev/acpica/Osd/OsdMemory.c optional acpica
dev/acpica/Osd/OsdSchedule.c optional acpica
dev/acpica/Osd/OsdStream.c optional acpica
dev/acpica/Osd/OsdSynch.c optional acpica
dev/acpica/Osd/OsdTable.c optional acpica
dev/advansys/adv_eisa.c optional adv eisa
dev/advansys/adv_pci.c optional adv pci
dev/advansys/advansys.c optional adv

View File

@ -145,36 +145,36 @@
/* Version string */
#define ACPI_CA_VERSION 0x20020403
#define ACPI_CA_VERSION 0x20020611
/* Version of ACPI supported */
#define ACPI_CA_SUPPORT_LEVEL 2
#define ACPI_CA_SUPPORT_LEVEL 2
/* Maximum objects in the various object caches */
#define MAX_STATE_CACHE_DEPTH 64 /* State objects for stacks */
#define MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */
#define MAX_EXTPARSE_CACHE_DEPTH 64 /* Parse tree objects */
#define MAX_OBJECT_CACHE_DEPTH 64 /* Interpreter operand objects */
#define MAX_WALK_CACHE_DEPTH 4 /* Objects for parse tree walks */
#define MAX_STATE_CACHE_DEPTH 64 /* State objects for stacks */
#define MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */
#define MAX_EXTPARSE_CACHE_DEPTH 64 /* Parse tree objects */
#define MAX_OBJECT_CACHE_DEPTH 64 /* Interpreter operand objects */
#define MAX_WALK_CACHE_DEPTH 4 /* Objects for parse tree walks */
/* String size constants */
#define MAX_STRING_LENGTH 512
#define PATHNAME_MAX 256 /* A full namespace pathname */
#define MAX_STRING_LENGTH 512
#define PATHNAME_MAX 256 /* A full namespace pathname */
/* Maximum count for a semaphore object */
#define MAX_SEMAPHORE_COUNT 256
#define MAX_SEMAPHORE_COUNT 256
/* Max reference count (for debug only) */
#define MAX_REFERENCE_COUNT 0x400
#define MAX_REFERENCE_COUNT 0x400
/* Size of cached memory mapping for system memory operation region */
#define SYSMEM_REGION_WINDOW_SIZE 4096
#define SYSMEM_REGION_WINDOW_SIZE 4096
/******************************************************************************
@ -183,31 +183,12 @@
*
*****************************************************************************/
/*
* Debugger threading model
* Use single threaded if the entire subsystem is contained in an application
* Use multiple threaded when the subsystem is running in the kernel.
*
* By default the model is single threaded if ACPI_APPLICATION is set,
* multi-threaded if ACPI_APPLICATION is not set.
*/
#define DEBUGGER_SINGLE_THREADED 0
#define DEBUGGER_MULTI_THREADED 1
#ifndef DEBUGGER_THREADING
#ifdef ACPI_APPLICATION
#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
#else
#define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED
#endif
#endif
/*
* Should the subystem abort the loading of an ACPI table if the
* table checksum is incorrect?
*/
#define ACPI_CHECKSUM_ABORT FALSE
#define ACPI_CHECKSUM_ABORT FALSE
/******************************************************************************
@ -218,54 +199,54 @@
/* Number of distinct GPE register blocks */
#define ACPI_MAX_GPE_BLOCKS 2
#define ACPI_MAX_GPE_BLOCKS 2
/*
* Method info (in WALK_STATE), containing local variables and argumetns
*/
#define MTH_NUM_LOCALS 8
#define MTH_MAX_LOCAL 7
#define MTH_NUM_LOCALS 8
#define MTH_MAX_LOCAL 7
#define MTH_NUM_ARGS 7
#define MTH_MAX_ARG 6
#define MTH_NUM_ARGS 7
#define MTH_MAX_ARG 6
/* Maximum length of resulting string when converting from a buffer */
#define ACPI_MAX_STRING_CONVERSION 200
#define ACPI_MAX_STRING_CONVERSION 200
/*
* Operand Stack (in WALK_STATE), Must be large enough to contain MTH_MAX_ARG
*/
#define OBJ_NUM_OPERANDS 8
#define OBJ_MAX_OPERAND 7
#define OBJ_NUM_OPERANDS 8
#define OBJ_MAX_OPERAND 7
/* Names within the namespace are 4 bytes long */
#define ACPI_NAME_SIZE 4
#define PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */
#define PATH_SEPARATOR '.'
#define ACPI_NAME_SIZE 4
#define PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */
#define PATH_SEPARATOR '.'
/* Constants used in searching for the RSDP in low memory */
#define LO_RSDP_WINDOW_BASE 0 /* Physical Address */
#define HI_RSDP_WINDOW_BASE 0xE0000 /* Physical Address */
#define LO_RSDP_WINDOW_SIZE 0x400
#define HI_RSDP_WINDOW_SIZE 0x20000
#define RSDP_SCAN_STEP 16
#define LO_RSDP_WINDOW_BASE 0 /* Physical Address */
#define HI_RSDP_WINDOW_BASE 0xE0000 /* Physical Address */
#define LO_RSDP_WINDOW_SIZE 0x400
#define HI_RSDP_WINDOW_SIZE 0x20000
#define RSDP_SCAN_STEP 16
/* Operation regions */
#define ACPI_NUM_PREDEFINED_REGIONS 8
#define ACPI_USER_REGION_BEGIN 0x80
#define ACPI_NUM_PREDEFINED_REGIONS 8
#define ACPI_USER_REGION_BEGIN 0x80
/* Maximum SpaceIds for Operation Regions */
#define ACPI_MAX_ADDRESS_SPACE 255
#define ACPI_MAX_ADDRESS_SPACE 255
/* RSDP checksums */
#define ACPI_RSDP_CHECKSUM_LENGTH 20
#define ACPI_RSDP_XCHECKSUM_LENGTH 36
#define ACPI_RSDP_CHECKSUM_LENGTH 20
#define ACPI_RSDP_XCHECKSUM_LENGTH 36
/******************************************************************************
@ -275,10 +256,10 @@
*****************************************************************************/
#define ACPI_DEBUGGER_MAX_ARGS 8 /* Must be max method args + 1 */
#define ACPI_DEBUGGER_MAX_ARGS 8 /* Must be max method args + 1 */
#define ACPI_DEBUGGER_COMMAND_PROMPT '-'
#define ACPI_DEBUGGER_EXECUTE_PROMPT '%'
#define ACPI_DEBUGGER_COMMAND_PROMPT '-'
#define ACPI_DEBUGGER_EXECUTE_PROMPT '%'
#endif /* _ACCONFIG_H */

View File

@ -256,12 +256,14 @@
#define DEBUGGER_SINGLE_THREADED 0
#define DEBUGGER_MULTI_THREADED 1
#ifndef DEBUGGER_THREADING
#ifdef ACPI_APPLICATION
#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
#else
#define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED
#endif
#endif
/******************************************************************************

View File

@ -136,20 +136,165 @@
#include <sys/libkern.h>
#include <machine/stdarg.h>
#define asm __asm
#define __cli() disable_intr()
#define __sti() enable_intr()
#ifdef __i386__
#define ACPI_FLUSH_CPU_CACHE() wbinvd()
#else
#define ACPI_FLUSH_CPU_CACHE() /* XXX ia64_fc()? */
#endif
#ifdef __ia64__
#define _IA64
/*
* Calling conventions:
*
* ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
* ACPI_EXTERNAL_XFACE - External ACPI interfaces
* ACPI_INTERNAL_XFACE - Internal ACPI interfaces
* ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
*/
#define ACPI_SYSTEM_XFACE
#define ACPI_EXTERNAL_XFACE
#define ACPI_INTERNAL_XFACE
#define ACPI_INTERNAL_VAR_XFACE
/* Asm macros */
#define ACPI_ASM_MACROS
#define BREAKPOINT3
#define ACPI_DISABLE_IRQS() disable_intr()
#define ACPI_ENABLE_IRQS() enable_intr()
#define ACPI_FLUSH_CPU_CACHE() /* XXX ia64_fc()? */
/*! [Begin] no source code translation */
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
do { \
__asm__ volatile ("1: ld4 r29=%1\n" \
";;\n" \
"mov ar.ccv=r29\n" \
"mov r2=r29\n" \
"shr.u r30=r29,1\n" \
"and r29=-4,r29\n" \
";;\n" \
"add r29=2,r29\n" \
"and r30=1,r30\n" \
";;\n" \
"add r29=r29,r30\n" \
";;\n" \
"cmpxchg4.acq r30=%1,r29,ar.ccv\n" \
";;\n" \
"cmp.eq p6,p7=r2,r30\n" \
"(p7) br.dpnt.few 1b\n" \
"cmp.gt p8,p9=3,r29\n" \
";;\n" \
"(p8) mov %0=-1\n" \
"(p9) mov %0=r0\n" \
:"=r"(Acq):"m"(GLptr):"r2","r29","r30","memory"); \
} while (0)
#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
do { \
__asm__ volatile ("1: ld4 r29=%1\n" \
";;\n" \
"mov ar.ccv=r29\n" \
"mov r2=r29\n" \
"and r29=-4,r29\n" \
";;\n" \
"cmpxchg4.acq r30=%1,r29,ar.ccv\n" \
";;\n" \
"cmp.eq p6,p7=r2,r30\n" \
"(p7) br.dpnt.few 1b\n" \
"and %0=1,r2\n" \
";;\n" \
:"=r"(Acq):"m"(GLptr):"r2","r29","r30","memory"); \
} while (0)
/*! [End] no source code translation !*/
#else /* DO IA32 */
/*
* Calling conventions:
*
* ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
* ACPI_EXTERNAL_XFACE - External ACPI interfaces
* ACPI_INTERNAL_XFACE - Internal ACPI interfaces
* ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
*/
#define ACPI_SYSTEM_XFACE
#define ACPI_EXTERNAL_XFACE
#define ACPI_INTERNAL_XFACE
#define ACPI_INTERNAL_VAR_XFACE
/* Asm macros */
#define ACPI_ASM_MACROS
#define BREAKPOINT3
#define ACPI_DISABLE_IRQS() disable_intr()
#define ACPI_ENABLE_IRQS() enable_intr()
#define ACPI_FLUSH_CPU_CACHE() wbinvd()
#define asm __asm
/*! [Begin] no source code translation
*
* A brief explanation as GNU inline assembly is a bit hairy
* %0 is the output parameter in EAX ("=a")
* %1 and %2 are the input parameters in ECX ("c")
* and an immediate value ("i") respectively
* All actual register references are preceded with "%%" as in "%%edx"
* Immediate values in the assembly are preceded by "$" as in "$0x1"
* The final asm parameter are the operation altered non-output registers.
*/
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
do { \
int dummy; \
asm("1: movl (%1),%%eax;" \
"movl %%eax,%%edx;" \
"andl %2,%%edx;" \
"btsl $0x1,%%edx;" \
"adcl $0x0,%%edx;" \
"lock; cmpxchgl %%edx,(%1);" \
"jnz 1b;" \
"cmpb $0x3,%%dl;" \
"sbbl %%eax,%%eax" \
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx"); \
} while(0)
#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
do { \
int dummy; \
asm("1: movl (%1),%%eax;" \
"movl %%eax,%%edx;" \
"andl %2,%%edx;" \
"lock; cmpxchgl %%edx,(%1);" \
"jnz 1b;" \
"andl $0x1,%%eax" \
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx"); \
} while(0)
/*
* Math helper asm macros
*/
#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
asm("divl %2;" \
:"=a"(q32), "=d"(r32) \
:"r"(d32), \
"0"(n_lo), "1"(n_hi))
#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
asm("shrl $1,%2;" \
"rcrl $1,%3;" \
:"=r"(n_hi), "=r"(n_lo) \
:"0"(n_hi), "1"(n_lo))
/*! [End] no source code translation !*/
#endif /* IA 32 */
#ifdef ACPI_DEBUG
#ifdef DEBUGGER_THREADING
#undef DEBUGGER_THREADING
#endif /* DEBUGGER_THREADING */
#define DEBUGGER_THREADING 0 /* integrated with DDB */
#ifdef ACPI_DEBUG
#include "opt_ddb.h"
#ifdef DDB
#define ENABLE_DEBUGGER
@ -204,4 +349,15 @@ strstr(char *s, char *find)
}
#endif /* _KERNEL */
#if defined(__ia64__) || defined(__x86_64__)
#define ACPI_MACHINE_WIDTH 64
#define COMPILER_DEPENDENT_INT64 long
#define COMPILER_DEPENDENT_UINT64 unsigned long
#else
#define ACPI_MACHINE_WIDTH 32
#define COMPILER_DEPENDENT_INT64 long long
#define COMPILER_DEPENDENT_UINT64 unsigned long long
#define ACPI_USE_NATIVE_DIVIDE
#endif
#endif /* __ACFREEBSD_H__ */

View File

@ -117,168 +117,6 @@
#ifndef __ACGCC_H__
#define __ACGCC_H__
#ifdef __ia64__
#define _IA64
#define COMPILER_DEPENDENT_INT64 long
#define COMPILER_DEPENDENT_UINT64 unsigned long
/*
* Calling conventions:
*
* ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
* ACPI_EXTERNAL_XFACE - External ACPI interfaces
* ACPI_INTERNAL_XFACE - Internal ACPI interfaces
* ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
*/
#define ACPI_SYSTEM_XFACE
#define ACPI_EXTERNAL_XFACE
#define ACPI_INTERNAL_XFACE
#define ACPI_INTERNAL_VAR_XFACE
/* Single threaded */
#ifndef __FreeBSD__
#define ACPI_APPLICATION
#endif
/* Asm macros */
#define ACPI_ASM_MACROS
#define BREAKPOINT3
#define ACPI_DISABLE_IRQS() __cli()
#define ACPI_ENABLE_IRQS() __sti()
/*! [Begin] no source code translation */
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
do { \
__asm__ volatile ("1: ld4 r29=%1\n" \
";;\n" \
"mov ar.ccv=r29\n" \
"mov r2=r29\n" \
"shr.u r30=r29,1\n" \
"and r29=-4,r29\n" \
";;\n" \
"add r29=2,r29\n" \
"and r30=1,r30\n" \
";;\n" \
"add r29=r29,r30\n" \
";;\n" \
"cmpxchg4.acq r30=%1,r29,ar.ccv\n" \
";;\n" \
"cmp.eq p6,p7=r2,r30\n" \
"(p7) br.dpnt.few 1b\n" \
"cmp.gt p8,p9=3,r29\n" \
";;\n" \
"(p8) mov %0=-1\n" \
"(p9) mov %0=r0\n" \
:"=r"(Acq):"m"(GLptr):"r2","r29","r30","memory"); \
} while (0)
#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
do { \
__asm__ volatile ("1: ld4 r29=%1\n" \
";;\n" \
"mov ar.ccv=r29\n" \
"mov r2=r29\n" \
"and r29=-4,r29\n" \
";;\n" \
"cmpxchg4.acq r30=%1,r29,ar.ccv\n" \
";;\n" \
"cmp.eq p6,p7=r2,r30\n" \
"(p7) br.dpnt.few 1b\n" \
"and %0=1,r2\n" \
";;\n" \
:"=r"(Acq):"m"(GLptr):"r2","r29","r30","memory"); \
} while (0)
/*! [End] no source code translation !*/
#else /* DO IA32 */
#define COMPILER_DEPENDENT_INT64 long long
#define COMPILER_DEPENDENT_UINT64 unsigned long long
/*
* Calling conventions:
*
* ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
* ACPI_EXTERNAL_XFACE - External ACPI interfaces
* ACPI_INTERNAL_XFACE - Internal ACPI interfaces
* ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
*/
#define ACPI_SYSTEM_XFACE
#define ACPI_EXTERNAL_XFACE
#define ACPI_INTERNAL_XFACE
#define ACPI_INTERNAL_VAR_XFACE
/* Asm macros */
#define ACPI_ASM_MACROS
#define BREAKPOINT3
#define ACPI_DISABLE_IRQS() __cli()
#define ACPI_ENABLE_IRQS() __sti()
/*! [Begin] no source code translation
*
* A brief explanation as GNU inline assembly is a bit hairy
* %0 is the output parameter in EAX ("=a")
* %1 and %2 are the input parameters in ECX ("c")
* and an immediate value ("i") respectively
* All actual register references are preceded with "%%" as in "%%edx"
* Immediate values in the assembly are preceded by "$" as in "$0x1"
* The final asm parameter are the operation altered non-output registers.
*/
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
do { \
int dummy; \
asm("1: movl (%1),%%eax;" \
"movl %%eax,%%edx;" \
"andl %2,%%edx;" \
"btsl $0x1,%%edx;" \
"adcl $0x0,%%edx;" \
"lock; cmpxchgl %%edx,(%1);" \
"jnz 1b;" \
"cmpb $0x3,%%dl;" \
"sbbl %%eax,%%eax" \
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx"); \
} while(0)
#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
do { \
int dummy; \
asm("1: movl (%1),%%eax;" \
"movl %%eax,%%edx;" \
"andl %2,%%edx;" \
"lock; cmpxchgl %%edx,(%1);" \
"jnz 1b;" \
"andl $0x1,%%eax" \
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx"); \
} while(0)
/*
* Math helper asm macros
*/
#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
asm("divl %2;" \
:"=a"(q32), "=d"(r32) \
:"r"(d32), \
"0"(n_lo), "1"(n_hi))
#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
asm("shrl $1,%2;" \
"rcrl $1,%3;" \
:"=r"(n_hi), "=r"(n_lo) \
:"0"(n_hi), "1"(n_lo))
/*! [End] no source code translation !*/
#endif /* IA 32 */
/* This macro is used to tag functions as "printf-like" because
* some compilers (like GCC) can catch printf format string problems.
*/

View File

@ -162,6 +162,10 @@ ACPI_STATUS
AcpiPurgeCachedObjects (
void);
ACPI_STATUS
AcpiInstallInitializationHandler (
ACPI_INIT_HANDLER Handler,
UINT32 Function);
/*
* ACPI Memory manager
@ -282,6 +286,14 @@ AcpiEvaluateObject (
ACPI_OBJECT_LIST *ParameterObjects,
ACPI_BUFFER *ReturnObjectBuffer);
ACPI_STATUS
AcpiEvaluateObjectTyped (
ACPI_HANDLE Object,
ACPI_STRING Pathname,
ACPI_OBJECT_LIST *ExternalParams,
ACPI_BUFFER *ReturnBuffer,
ACPI_OBJECT_TYPE ReturnType);
ACPI_STATUS
AcpiGetObjectInfo (
ACPI_HANDLE Device,
@ -420,6 +432,18 @@ AcpiGetIrqRoutingTable (
* Hardware (ACPI device) interfaces
*/
ACPI_STATUS
AcpiGetRegister (
UINT32 RegisterId,
UINT32 *ReturnValue,
UINT32 Flags);
ACPI_STATUS
AcpiSetRegister (
UINT32 RegisterId,
UINT32 Value,
UINT32 Flags);
ACPI_STATUS
AcpiSetFirmwareWakingVector (
ACPI_PHYSICAL_ADDRESS PhysicalAddress);
@ -428,17 +452,23 @@ ACPI_STATUS
AcpiGetFirmwareWakingVector (
ACPI_PHYSICAL_ADDRESS *PhysicalAddress);
ACPI_STATUS
AcpiGetSleepTypeData (
UINT8 SleepState,
UINT8 *Slp_TypA,
UINT8 *Slp_TypB);
ACPI_STATUS
AcpiEnterSleepStatePrep (
UINT8 SleepState);
UINT8 SleepState);
ACPI_STATUS
AcpiEnterSleepState (
UINT8 SleepState);
UINT8 SleepState);
ACPI_STATUS
AcpiLeaveSleepState (
UINT8 SleepState);
UINT8 SleepState);
#endif /* __ACXFACE_H__ */

View File

@ -191,6 +191,9 @@ NATIVE_CHAR *
AcpiUtGetMutexName (
UINT32 MutexId);
#endif
NATIVE_CHAR *
AcpiUtGetTypeName (
ACPI_OBJECT_TYPE Type);
@ -199,9 +202,6 @@ NATIVE_CHAR *
AcpiUtGetObjectTypeName (
ACPI_OPERAND_OBJECT *ObjDesc);
#endif
NATIVE_CHAR *
AcpiUtGetRegionName (
UINT8 SpaceId);

View File

@ -131,7 +131,7 @@
#define BLOCK_PAREN 1
#define BLOCK_BRACE 2
#define DB_NO_OP_INFO " [%2.2d] "
#define DB_FULL_OP_INFO "%5.5X #%4.4X [%2.2d] "
#define DB_FULL_OP_INFO "%5.5X #%4.4hX [%2.2d] "
@ -152,7 +152,7 @@ AcpiDbBlockType (
ACPI_PARSE_OBJECT *Op)
{
switch (Op->Opcode)
switch (Op->Common.AmlOpcode)
{
case AML_METHOD_OP:
return (BLOCK_BRACE);
@ -191,9 +191,9 @@ AcpiPsDisplayObjectPathname (
char *Name;
if (Op->Flags & ACPI_PARSEOP_GENERIC)
if (Op->Common.Flags & ACPI_PARSEOP_GENERIC)
{
Name = Op->Value.Name;
Name = Op->Common.Value.Name;
if (Name[0] == '\\')
{
AcpiOsPrintf (" (Fully Qualified Pathname)");
@ -202,7 +202,7 @@ AcpiPsDisplayObjectPathname (
}
else
{
Name = (char *) &((ACPI_PARSE2_OBJECT *) Op)->Name;
Name = (char *) &Op->Named.Name;
}
/* Search parent tree up to the root if necessary */
@ -250,12 +250,12 @@ AcpiPsDisplayObjectPathname (
/* Just get the Node out of the Op object */
Node = Op->Node;
Node = Op->Common.Node;
if (!Node)
{
/* Node not defined in this scope, look it up */
Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Value.String, ACPI_TYPE_ANY,
Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Common.Value.String, ACPI_TYPE_ANY,
ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node));
if (ACPI_FAILURE (Status))
@ -271,7 +271,7 @@ AcpiPsDisplayObjectPathname (
/* Save it for next time. */
Op->Node = Node;
Op->Common.Node = Node;
}
/* Convert NamedDesc/handle to a full pathname */
@ -345,12 +345,12 @@ AcpiDbDisplayOp (
/* Determine the nesting depth of this argument */
for (depth = Op->Parent; depth; depth = depth->Parent)
for (depth = Op->Common.Parent; depth; depth = depth->Common.Parent)
{
arg = AcpiPsGetArg (depth, 0);
while (arg && arg != Origin)
{
arg = arg->Next;
arg = arg->Common.Next;
}
if (arg)
@ -385,10 +385,10 @@ AcpiDbDisplayOp (
else if (DepthCount < LastDepth)
{
for (j = 0; j < (LastDepth - DepthCount); j++)
for (j = LastDepth; j >= (DepthCount + 1); j--)
{
VERBOSE_PRINT ((DB_NO_OP_INFO, LastDepth - j));
for (i = 0; i < (LastDepth - j - 1); i++)
VERBOSE_PRINT ((DB_NO_OP_INFO, (j - 1)));
for (i = 1; i < j; i++)
{
AcpiOsPrintf ("%s", AcpiGbl_DbDisasmIndent);
}
@ -406,7 +406,8 @@ AcpiDbDisplayOp (
/* In verbose mode, print the AML offset, opcode and depth count */
VERBOSE_PRINT ((DB_FULL_OP_INFO, (unsigned) Op->AmlOffset, Op->Opcode, DepthCount));
VERBOSE_PRINT ((DB_FULL_OP_INFO, (UINT32) Op->Common.AmlOffset,
Op->Common.AmlOpcode, DepthCount));
/* Indent the output according to the depth count */
@ -422,11 +423,11 @@ AcpiDbDisplayOp (
/* Resolve a name reference */
if ((Op->Opcode == AML_INT_NAMEPATH_OP && Op->Value.Name) &&
(Op->Parent) &&
if ((Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP && Op->Common.Value.Name) &&
(Op->Common.Parent) &&
(AcpiGbl_DbOpt_verbose))
{
AcpiPsDisplayObjectPathname (WalkState, Op);
(void) AcpiPsDisplayObjectPathname (WalkState, Op);
}
AcpiOsPrintf ("\n");
@ -561,7 +562,7 @@ AcpiDbDisplayPath (
/* We are only interested in named objects */
OpInfo = AcpiPsGetOpcodeInfo (Op->Opcode);
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
if (!(OpInfo->Flags & AML_NSNODE))
{
return;
@ -571,7 +572,7 @@ AcpiDbDisplayPath (
{
/* Field creation - check for a fully qualified namepath */
if (Op->Opcode == AML_CREATE_FIELD_OP)
if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP)
{
NamePath = AcpiPsGetArg (Op, 3);
}
@ -581,10 +582,10 @@ AcpiDbDisplayPath (
}
if ((NamePath) &&
(NamePath->Value.String) &&
(NamePath->Value.String[0] == '\\'))
(NamePath->Common.Value.String) &&
(NamePath->Common.Value.String[0] == '\\'))
{
AcpiDbDisplayNamestring (NamePath->Value.String);
AcpiDbDisplayNamestring (NamePath->Common.Value.String);
return;
}
}
@ -598,19 +599,19 @@ AcpiDbDisplayPath (
Search = Op;
for (; ;)
{
if (Search->Parent == Prev)
if (Search->Common.Parent == Prev)
{
break;
}
/* Go up one level */
Search = Search->Parent;
Search = Search->Common.Parent;
}
if (Prev)
{
OpInfo = AcpiPsGetOpcodeInfo (Search->Opcode);
OpInfo = AcpiPsGetOpcodeInfo (Search->Common.AmlOpcode);
if (!(OpInfo->Flags & AML_FIELD))
{
/* below root scope, append scope name */
@ -624,7 +625,7 @@ AcpiDbDisplayPath (
if (OpInfo->Flags & AML_CREATE)
{
if (Op->Opcode == AML_CREATE_FIELD_OP)
if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP)
{
NamePath = AcpiPsGetArg (Op, 3);
}
@ -634,9 +635,9 @@ AcpiDbDisplayPath (
}
if ((NamePath) &&
(NamePath->Value.String))
(NamePath->Common.Value.String))
{
AcpiOsPrintf ("%4.4s", NamePath->Value.String);
AcpiOsPrintf ("%4.4s", NamePath->Common.Value.String);
}
}
else
@ -684,21 +685,22 @@ AcpiDbDisplayOpcode (
if (!Op)
{
AcpiOsPrintf ("<NULL OP PTR>");
return;
}
/* op and arguments */
switch (Op->Opcode)
switch (Op->Common.AmlOpcode)
{
case AML_BYTE_OP:
if (AcpiGbl_DbOpt_verbose)
{
AcpiOsPrintf ("(UINT8) 0x%2.2X", Op->Value.Integer8);
AcpiOsPrintf ("(UINT8) 0x%2.2hX", Op->Common.Value.Integer8);
}
else
{
AcpiOsPrintf ("0x%2.2X", Op->Value.Integer8);
AcpiOsPrintf ("0x%2.2hX", Op->Common.Value.Integer8);
}
break;
@ -707,11 +709,11 @@ AcpiDbDisplayOpcode (
if (AcpiGbl_DbOpt_verbose)
{
AcpiOsPrintf ("(UINT16) 0x%4.4X", Op->Value.Integer16);
AcpiOsPrintf ("(UINT16) 0x%4.4hX", Op->Common.Value.Integer16);
}
else
{
AcpiOsPrintf ("0x%4.4X", Op->Value.Integer16);
AcpiOsPrintf ("0x%4.4hX", Op->Common.Value.Integer16);
}
break;
@ -720,11 +722,11 @@ AcpiDbDisplayOpcode (
if (AcpiGbl_DbOpt_verbose)
{
AcpiOsPrintf ("(UINT32) 0x%8.8X", Op->Value.Integer32);
AcpiOsPrintf ("(UINT32) 0x%8.8X", Op->Common.Value.Integer32);
}
else
{
AcpiOsPrintf ("0x%8.8X", Op->Value.Integer32);
AcpiOsPrintf ("0x%8.8X", Op->Common.Value.Integer32);
}
break;
@ -733,22 +735,22 @@ AcpiDbDisplayOpcode (
if (AcpiGbl_DbOpt_verbose)
{
AcpiOsPrintf ("(UINT64) 0x%8.8X%8.8X", Op->Value.Integer64.Hi,
Op->Value.Integer64.Lo);
AcpiOsPrintf ("(UINT64) 0x%8.8X%8.8X", Op->Common.Value.Integer64.Hi,
Op->Common.Value.Integer64.Lo);
}
else
{
AcpiOsPrintf ("0x%8.8X%8.8X", Op->Value.Integer64.Hi,
Op->Value.Integer64.Lo);
AcpiOsPrintf ("0x%8.8X%8.8X", Op->Common.Value.Integer64.Hi,
Op->Common.Value.Integer64.Lo);
}
break;
case AML_STRING_OP:
if (Op->Value.String)
if (Op->Common.Value.String)
{
AcpiOsPrintf ("\"%s\"", Op->Value.String);
AcpiOsPrintf ("\"%s\"", Op->Common.Value.String);
}
else
{
@ -759,9 +761,9 @@ AcpiDbDisplayOpcode (
case AML_INT_STATICSTRING_OP:
if (Op->Value.String)
if (Op->Common.Value.String)
{
AcpiOsPrintf ("\"%s\"", Op->Value.String);
AcpiOsPrintf ("\"%s\"", Op->Common.Value.String);
}
else
{
@ -772,25 +774,25 @@ AcpiDbDisplayOpcode (
case AML_INT_NAMEPATH_OP:
AcpiDbDisplayNamestring (Op->Value.Name);
AcpiDbDisplayNamestring (Op->Common.Value.Name);
break;
case AML_INT_NAMEDFIELD_OP:
AcpiOsPrintf ("NamedField (Length 0x%8.8X) ", Op->Value.Integer32);
AcpiOsPrintf ("NamedField (Length 0x%8.8X) ", Op->Common.Value.Integer32);
break;
case AML_INT_RESERVEDFIELD_OP:
AcpiOsPrintf ("ReservedField (Length 0x%8.8X) ", Op->Value.Integer32);
AcpiOsPrintf ("ReservedField (Length 0x%8.8X) ", Op->Common.Value.Integer32);
break;
case AML_INT_ACCESSFIELD_OP:
AcpiOsPrintf ("AccessField (Length 0x%8.8X) ", Op->Value.Integer32);
AcpiOsPrintf ("AccessField (Length 0x%8.8X) ", Op->Common.Value.Integer32);
break;
@ -798,14 +800,14 @@ AcpiDbDisplayOpcode (
if (AcpiGbl_DbOpt_verbose)
{
AcpiOsPrintf ("ByteList (Length 0x%8.8X) ", Op->Value.Integer32);
AcpiOsPrintf ("ByteList (Length 0x%8.8X) ", Op->Common.Value.Integer32);
}
else
{
AcpiOsPrintf ("0x%2.2X", Op->Value.Integer32);
AcpiOsPrintf ("0x%2.2X", Op->Common.Value.Integer32);
ByteCount = Op->Value.Integer32;
ByteData = ((ACPI_PARSE2_OBJECT *) Op)->Data;
ByteCount = Op->Common.Value.Integer32;
ByteData = Op->Named.Data;
for (i = 0; i < ByteCount; i++)
{
@ -819,12 +821,13 @@ AcpiDbDisplayOpcode (
/* Just get the opcode name and print it */
OpInfo = AcpiPsGetOpcodeInfo (Op->Opcode);
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
AcpiOsPrintf ("%s", OpInfo->Name);
#ifndef PARSER_ONLY
if ((Op->Opcode == AML_INT_RETURN_VALUE_OP) &&
if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) &&
(WalkState) &&
(WalkState->Results) &&
(WalkState->Results->Results.NumResults))
{
@ -838,7 +841,7 @@ AcpiDbDisplayOpcode (
{
/* If there is another element in the list, add a comma */
if (Op->Next)
if (Op->Common.Next)
{
AcpiOsPrintf (",");
}
@ -847,15 +850,15 @@ AcpiDbDisplayOpcode (
/*
* If this is a named opcode, print the associated name value
*/
OpInfo = AcpiPsGetOpcodeInfo (Op->Opcode);
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
if (Op && (OpInfo->Flags & AML_NAMED))
{
Name = AcpiPsGetName (Op);
AcpiOsPrintf (" %4.4s", &Name);
if ((AcpiGbl_DbOpt_verbose) && (Op->Opcode != AML_INT_NAMEDFIELD_OP))
if ((AcpiGbl_DbOpt_verbose) && (Op->Common.AmlOpcode != AML_INT_NAMEDFIELD_OP))
{
AcpiPsDisplayObjectPathname (WalkState, Op);
(void) AcpiPsDisplayObjectPathname (WalkState, Op);
}
}
}

View File

@ -119,8 +119,6 @@
#include "acpi.h"
#include "acdebug.h"
#include "acnamesp.h"
#include "acparser.h"
#include "acevents.h"
#include "actables.h"
#ifdef ENABLE_DEBUGGER
@ -139,7 +137,6 @@ FILE *AcpiGbl_DebugFile = NULL;
#endif
/*******************************************************************************
*
* FUNCTION: AcpiDbMatchArgument
@ -262,7 +259,7 @@ AcpiDbOpenDebugFile (
*
******************************************************************************/
ACPI_STATUS
static ACPI_STATUS
AcpiDbLoadTable(
FILE *fp,
ACPI_TABLE_HEADER **TablePtr,
@ -387,7 +384,7 @@ AeLocalLoadTable (
TableInfo.Pointer = TablePtr;
Status = AcpiTbInstallTable (NULL, &TableInfo);
Status = AcpiTbInstallTable (&TableInfo);
if (ACPI_FAILURE (Status))
{
/* Free table allocated by AcpiTbGetTable */
@ -481,7 +478,7 @@ AcpiDbLoadAcpiTable (
if (Status == AE_ALREADY_EXISTS)
{
AcpiOsPrintf ("Table %4.4s is already installed\n",
&AcpiGbl_DbTablePtr->Signature);
AcpiGbl_DbTablePtr->Signature);
}
else
{
@ -493,7 +490,7 @@ AcpiDbLoadAcpiTable (
}
AcpiOsPrintf ("%4.4s at %p successfully installed and loaded\n",
&AcpiGbl_DbTablePtr->Signature, AcpiGbl_DbTablePtr);
AcpiGbl_DbTablePtr->Signature, AcpiGbl_DbTablePtr);
AcpiGbl_AcpiHardwarePresent = FALSE;

View File

@ -120,8 +120,6 @@
#include "acpi.h"
#include "acinterp.h"
#include "amlcode.h"
#include "acnamesp.h"
#include "achware.h"
#include "acevents.h"
#include "acdispat.h"
@ -159,10 +157,12 @@ AcpiExSetupRegion (
RgnDesc = ObjDesc->CommonField.RegionObj;
if (ACPI_TYPE_REGION != RgnDesc->Common.Type)
if (ACPI_GET_OBJECT_TYPE (RgnDesc) != ACPI_TYPE_REGION)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %x %s\n",
RgnDesc->Common.Type, AcpiUtGetTypeName (RgnDesc->Common.Type)));
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %X (%s)\n",
ACPI_GET_OBJECT_TYPE (RgnDesc),
AcpiUtGetObjectTypeName (RgnDesc)));
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
@ -197,8 +197,8 @@ AcpiExSetupRegion (
*/
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Field [%4.4s] access width (%d bytes) too large for region [%4.4s] (length %X)\n",
(char *) &ObjDesc->CommonField.Node->Name, ObjDesc->CommonField.AccessByteWidth,
(char *) &RgnDesc->Region.Node->Name, RgnDesc->Region.Length));
ObjDesc->CommonField.Node->Name.Ascii, ObjDesc->CommonField.AccessByteWidth,
RgnDesc->Region.Node->Name.Ascii, RgnDesc->Region.Length));
}
/*
@ -207,9 +207,9 @@ AcpiExSetupRegion (
*/
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Field [%4.4s] Base+Offset+Width %X+%X+%X is beyond end of region [%4.4s] (length %X)\n",
(char *) &ObjDesc->CommonField.Node->Name, ObjDesc->CommonField.BaseByteOffset,
ObjDesc->CommonField.Node->Name.Ascii, ObjDesc->CommonField.BaseByteOffset,
FieldDatumByteOffset, ObjDesc->CommonField.AccessByteWidth,
(char *) &RgnDesc->Region.Node->Name, RgnDesc->Region.Length));
RgnDesc->Region.Node->Name.Ascii, RgnDesc->Region.Length));
return_ACPI_STATUS (AE_AML_REGION_LIMIT);
}
@ -339,7 +339,7 @@ AcpiExRegisterOverflow (
return (FALSE);
}
if (Value >= (ACPI_INTEGER) (1 << ObjDesc->CommonField.BitLength))
if (Value >= ((ACPI_INTEGER) 1 << ObjDesc->CommonField.BitLength))
{
/*
* The Value is larger than the maximum value that can fit into
@ -407,7 +407,7 @@ AcpiExFieldDatumIo (
* BankFields - Write to a Bank Register, then read/write from/to an OpRegion
* IndexFields - Write to an Index Register, then read/write from/to a Data Register
*/
switch (ObjDesc->Common.Type)
switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
{
case ACPI_TYPE_BUFFER_FIELD:
/*
@ -455,7 +455,7 @@ AcpiExFieldDatumIo (
/* Ensure that the BankValue is not beyond the capacity of the register */
if (AcpiExRegisterOverflow (ObjDesc->BankField.BankObj,
ObjDesc->BankField.Value))
(ACPI_INTEGER) ObjDesc->BankField.Value))
{
return_ACPI_STATUS (AE_AML_REGISTER_LIMIT);
}
@ -477,7 +477,7 @@ AcpiExFieldDatumIo (
* RegionField case and write the datum to the Operation Region
*/
/* No break; ! */
/*lint -fallthrough */
case INTERNAL_TYPE_REGION_FIELD:
@ -502,7 +502,7 @@ AcpiExFieldDatumIo (
/* Ensure that the IndexValue is not beyond the capacity of the register */
if (AcpiExRegisterOverflow (ObjDesc->IndexField.IndexObj,
ObjDesc->IndexField.Value))
(ACPI_INTEGER) ObjDesc->IndexField.Value))
{
return_ACPI_STATUS (AE_AML_REGISTER_LIMIT);
}
@ -537,7 +537,7 @@ AcpiExFieldDatumIo (
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p, Wrong object type - %s\n",
ObjDesc, AcpiUtGetTypeName (ObjDesc->Common.Type)));
ObjDesc, AcpiUtGetObjectTypeName (ObjDesc)));
Status = AE_AML_INTERNAL;
break;
}
@ -594,7 +594,7 @@ AcpiExWriteWithUpdateRule (
/* If the mask is all ones, we don't need to worry about the update rule */
if (Mask != ACPI_UINT32_MAX)
if (Mask != ACPI_INTEGER_MAX)
{
/* Decode the update rule */
@ -634,7 +634,7 @@ AcpiExWriteWithUpdateRule (
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"WriteWithUpdateRule: Unknown UpdateRule setting: %x\n",
"WriteWithUpdateRule: Unknown UpdateRule setting: %X\n",
(ObjDesc->CommonField.FieldFlags & AML_FIELD_UPDATE_RULE_MASK)));
return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
}
@ -705,6 +705,10 @@ AcpiExGetBufferDatum(
ACPI_MOVE_UNALIGNED64_TO_64 (Datum, &(((UINT64 *) Buffer) [Offset]));
break;
default:
/* Should not get here */
break;
}
}
@ -758,6 +762,10 @@ AcpiExSetBufferDatum (
ACPI_MOVE_UNALIGNED64_TO_64 (&(((UINT64 *) Buffer)[Offset]), &MergedDatum);
break;
default:
/* Should not get here */
break;
}
}
@ -813,7 +821,7 @@ AcpiExExtractFromField (
ObjDesc->CommonField.AccessByteWidth);
ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"ByteLen=%x, DatumLen=%x, ByteGran=%x\n",
"ByteLen=%X, DatumLen=%X, ByteGran=%X\n",
ByteFieldLength, DatumCount,ObjDesc->CommonField.AccessByteWidth));
/*
@ -1002,7 +1010,7 @@ AcpiExInsertIntoField (
DatumCount = ACPI_ROUND_UP_TO (ByteFieldLength, ObjDesc->CommonField.AccessByteWidth);
ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"ByteLen=%x, DatumLen=%x, ByteGran=%x\n",
"ByteLen=%X, DatumLen=%X, ByteGran=%X\n",
ByteFieldLength, DatumCount, ObjDesc->CommonField.AccessByteWidth));
/*

View File

@ -119,8 +119,6 @@
#include "acpi.h"
#include "acinterp.h"
#include "acnamesp.h"
#include "achware.h"
#include "acevents.h"
#define _COMPONENT ACPI_EXECUTER
@ -347,8 +345,8 @@ AcpiExSystemReleaseMutex (
*/
if (ObjDesc->Mutex.Semaphore == AcpiGbl_GlobalLockSemaphore)
{
AcpiEvReleaseGlobalLock ();
return_ACPI_STATUS (AE_OK);
Status = AcpiEvReleaseGlobalLock ();
return_ACPI_STATUS (Status);
}
Status = AcpiOsSignalSemaphore (ObjDesc->Mutex.Semaphore, 1);
@ -454,7 +452,7 @@ AcpiExSystemResetEvent (
Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, &TempSemaphore);
if (ACPI_SUCCESS (Status))
{
AcpiOsDeleteSemaphore (ObjDesc->Event.Semaphore);
(void) AcpiOsDeleteSemaphore (ObjDesc->Event.Semaphore);
ObjDesc->Event.Semaphore = TempSemaphore;
}

View File

@ -116,8 +116,6 @@
*****************************************************************************/
#include "acpi.h"
#include "acnamesp.h"
#include "achware.h"
#define _COMPONENT ACPI_HARDWARE
ACPI_MODULE_NAME ("hwsleep")
@ -148,11 +146,13 @@ AcpiSetFirmwareWakingVector (
if (AcpiGbl_CommonFACS.VectorWidth == 32)
{
*(UINT32 *) AcpiGbl_CommonFACS.FirmwareWakingVector = (UINT32) PhysicalAddress;
*(ACPI_CAST_PTR (UINT32, AcpiGbl_CommonFACS.FirmwareWakingVector))
= (UINT32) PhysicalAddress;
}
else
{
*AcpiGbl_CommonFACS.FirmwareWakingVector = PhysicalAddress;
*AcpiGbl_CommonFACS.FirmwareWakingVector
= PhysicalAddress;
}
return_ACPI_STATUS (AE_OK);
@ -190,11 +190,13 @@ AcpiGetFirmwareWakingVector (
if (AcpiGbl_CommonFACS.VectorWidth == 32)
{
*PhysicalAddress = *(UINT32 *) AcpiGbl_CommonFACS.FirmwareWakingVector;
*PhysicalAddress = (ACPI_PHYSICAL_ADDRESS)
*(ACPI_CAST_PTR (UINT32, AcpiGbl_CommonFACS.FirmwareWakingVector));
}
else
{
*PhysicalAddress = *AcpiGbl_CommonFACS.FirmwareWakingVector;
*PhysicalAddress =
*AcpiGbl_CommonFACS.FirmwareWakingVector;
}
return_ACPI_STATUS (AE_OK);
@ -231,7 +233,7 @@ AcpiEnterSleepStatePrep (
/*
* _PSW methods could be run here to enable wake-on keyboard, LAN, etc.
*/
Status = AcpiHwGetSleepTypeData (SleepState,
Status = AcpiGetSleepTypeData (SleepState,
&AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB);
if (ACPI_FAILURE (Status))
{
@ -281,11 +283,13 @@ ACPI_STATUS
AcpiEnterSleepState (
UINT8 SleepState)
{
UINT16 PM1AControl;
UINT16 PM1BControl;
UINT32 PM1AControl;
UINT32 PM1BControl;
ACPI_BIT_REGISTER_INFO *SleepTypeRegInfo;
ACPI_BIT_REGISTER_INFO *SleepEnableRegInfo;
UINT32 InValue;
UINT32 Retry;
ACPI_STATUS Status;
ACPI_FUNCTION_TRACE ("AcpiEnterSleepState");
@ -294,7 +298,7 @@ AcpiEnterSleepState (
if ((AcpiGbl_SleepTypeA > ACPI_SLEEP_TYPE_MAX) ||
(AcpiGbl_SleepTypeB > ACPI_SLEEP_TYPE_MAX))
{
ACPI_REPORT_ERROR (("Sleep values out of range: A=%x B=%x\n",
ACPI_REPORT_ERROR (("Sleep values out of range: A=%X B=%X\n",
AcpiGbl_SleepTypeA, AcpiGbl_SleepTypeB));
return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
}
@ -305,16 +309,39 @@ AcpiEnterSleepState (
/* Clear wake status */
AcpiHwBitRegisterWrite (ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_LOCK);
AcpiHwClearAcpiStatus();
Status = AcpiSetRegister (ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_LOCK);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* TBD: Disable arbitration here? */
Status = AcpiHwClearAcpiStatus();
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
AcpiHwDisableNonWakeupGpes();
/* Disable BM arbitration */
Status = AcpiSetRegister (ACPI_BITREG_ARB_DISABLE, 1, ACPI_MTX_LOCK);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
Status = AcpiHwDisableNonWakeupGpes();
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Get current value of PM1A control */
PM1AControl = (UINT16) AcpiHwRegisterRead (ACPI_MTX_LOCK, ACPI_REGISTER_PM1_CONTROL);
Status = AcpiHwRegisterRead (ACPI_MTX_LOCK, ACPI_REGISTER_PM1_CONTROL, &PM1AControl);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Entering S%d\n", SleepState));
/* Clear SLP_EN and SLP_TYP fields */
@ -329,8 +356,17 @@ AcpiEnterSleepState (
/* Write #1: fill in SLP_TYP data */
AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1A_CONTROL, PM1AControl);
AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1B_CONTROL, PM1BControl);
Status = AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1A_CONTROL, PM1AControl);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
Status = AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1B_CONTROL, PM1BControl);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Insert SLP_ENABLE bit */
@ -338,36 +374,63 @@ AcpiEnterSleepState (
PM1BControl |= SleepEnableRegInfo->AccessBitMask;
/* Write #2: SLP_TYP + SLP_EN */
ACPI_FLUSH_CPU_CACHE();
AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1A_CONTROL, PM1AControl);
AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1B_CONTROL, PM1BControl);
ACPI_FLUSH_CPU_CACHE ();
Status = AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1A_CONTROL, PM1AControl);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
Status = AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1B_CONTROL, PM1BControl);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/*
* Wait a second, then try again. This is to get S4/5 to work on all machines.
*/
if (SleepState > ACPI_STATE_S3)
{
AcpiOsStall (1000000);
/*
* We wait so long to allow chipsets that poll this reg very slowly to
* still read the right value. Ideally, this entire block would go
* away entirely.
*/
AcpiOsStall (10000000);
AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1_CONTROL,
SleepEnableRegInfo->AccessBitMask);
Status = AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1_CONTROL,
SleepEnableRegInfo->AccessBitMask);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
}
/* Wait until we enter sleep state */
/* Spin until we wake */
Retry = 1000;
while (!AcpiHwBitRegisterRead (ACPI_BITREG_WAKE_STATUS, ACPI_MTX_LOCK))
do
{
/*
* Some BIOSes don't set WAK_STS at all,
* give up waiting for wakeup if we time out.
*/
if (Retry-- == 0) {
break; /* giving up */
}
}
Status = AcpiGetRegister (ACPI_BITREG_WAKE_STATUS, &InValue, ACPI_MTX_LOCK);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/*
* Some BIOSes don't set WAK_STS at all,
* give up waiting for wakeup if we time out.
*/
if (Retry-- == 0) {
break; /* giving up */
}
/* Spin until we wake */
} while (!InValue);
return_ACPI_STATUS (AE_OK);
}
@ -424,7 +487,14 @@ AcpiLeaveSleepState (
/* _WAK returns stuff - do we want to look at it? */
AcpiHwEnableNonWakeupGpes();
Status = AcpiHwEnableNonWakeupGpes();
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
return_ACPI_STATUS (AE_OK);
/* Disable BM arbitration */
Status = AcpiSetRegister (ACPI_BITREG_ARB_DISABLE, 0, ACPI_MTX_LOCK);
return_ACPI_STATUS (Status);
}

View File

@ -129,15 +129,13 @@
#include "acdispat.h"
#include "amlcode.h"
#include "acnamesp.h"
#include "acdebug.h"
#include "acinterp.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("psparse")
UINT32 AcpiGbl_Depth = 0;
extern UINT32 AcpiGbl_ScopeDepth;
static UINT32 AcpiGbl_Depth = 0;
/*******************************************************************************
@ -267,13 +265,13 @@ AcpiPsFindObject (
* PARAMETERS: WalkState - Current State
* Op - Op to complete
*
* RETURN: TRUE if Op and subtree was deleted
* RETURN: None.
*
* DESCRIPTION: Perform any cleanup at the completion of an Op.
*
******************************************************************************/
BOOLEAN
void
AcpiPsCompleteThisOp (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op)
@ -292,7 +290,7 @@ AcpiPsCompleteThisOp (
if (!Op)
{
return_VALUE (TRUE);
return_VOID;
}
/* Delete this op and the subtree below it if asked to */
@ -302,13 +300,13 @@ AcpiPsCompleteThisOp (
{
/* Make sure that we only delete this subtree */
if (Op->Parent)
if (Op->Common.Parent)
{
/*
* Check if we need to replace the operator and its subtree
* with a return value op (placeholder op)
*/
ParentInfo = AcpiPsGetOpcodeInfo (Op->Parent->Opcode);
ParentInfo = AcpiPsGetOpcodeInfo (Op->Common.Parent->Common.AmlOpcode);
switch (ParentInfo->Class)
{
@ -324,7 +322,7 @@ AcpiPsCompleteThisOp (
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP);
if (!ReplacementOp)
{
return_VALUE (FALSE);
return_VOID;
}
break;
@ -334,37 +332,35 @@ AcpiPsCompleteThisOp (
* These opcodes contain TermArg operands. The current
* op must be replaced by a placeholder return op
*/
if ((Op->Parent->Opcode == AML_REGION_OP) ||
(Op->Parent->Opcode == AML_DATA_REGION_OP) ||
(Op->Parent->Opcode == AML_BUFFER_OP) ||
(Op->Parent->Opcode == AML_PACKAGE_OP) ||
(Op->Parent->Opcode == AML_VAR_PACKAGE_OP))
if ((Op->Common.Parent->Common.AmlOpcode == AML_REGION_OP) ||
(Op->Common.Parent->Common.AmlOpcode == AML_DATA_REGION_OP) ||
(Op->Common.Parent->Common.AmlOpcode == AML_BUFFER_OP) ||
(Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
(Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
{
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP);
if (!ReplacementOp)
{
return_VALUE (FALSE);
return_VOID;
}
}
if ((Op->Parent->Opcode == AML_NAME_OP) &&
if ((Op->Common.Parent->Common.AmlOpcode == AML_NAME_OP) &&
(WalkState->DescendingCallback != AcpiDsExecBeginOp))
{
if ((Op->Opcode == AML_BUFFER_OP) ||
(Op->Opcode == AML_PACKAGE_OP) ||
(Op->Opcode == AML_VAR_PACKAGE_OP))
if ((Op->Common.AmlOpcode == AML_BUFFER_OP) ||
(Op->Common.AmlOpcode == AML_PACKAGE_OP) ||
(Op->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
{
ReplacementOp = AcpiPsAllocOp (Op->Opcode);
ReplacementOp = AcpiPsAllocOp (Op->Common.AmlOpcode);
if (!ReplacementOp)
{
return_VALUE (FALSE);
return_VOID;
}
((ACPI_PARSE2_OBJECT *) ReplacementOp)->Data =
((ACPI_PARSE2_OBJECT *) Op)->Data;
((ACPI_PARSE2_OBJECT *) ReplacementOp)->Length =
((ACPI_PARSE2_OBJECT *) Op)->Length;
ReplacementOp->Named.Data = Op->Named.Data;
ReplacementOp->Named.Length = Op->Named.Length;
}
}
break;
@ -373,28 +369,28 @@ AcpiPsCompleteThisOp (
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP);
if (!ReplacementOp)
{
return_VALUE (FALSE);
return_VOID;
}
}
/* We must unlink this op from the parent tree */
Prev = Op->Parent->Value.Arg;
Prev = Op->Common.Parent->Common.Value.Arg;
if (Prev == Op)
{
/* This op is the first in the list */
if (ReplacementOp)
{
ReplacementOp->Parent = Op->Parent;
ReplacementOp->Value.Arg = NULL;
ReplacementOp->Node = Op->Node;
Op->Parent->Value.Arg = ReplacementOp;
ReplacementOp->Next = Op->Next;
ReplacementOp->Common.Parent = Op->Common.Parent;
ReplacementOp->Common.Value.Arg = NULL;
ReplacementOp->Common.Node = Op->Common.Node;
Op->Common.Parent->Common.Value.Arg = ReplacementOp;
ReplacementOp->Common.Next = Op->Common.Next;
}
else
{
Op->Parent->Value.Arg = Op->Next;
Op->Common.Parent->Common.Value.Arg = Op->Common.Next;
}
}
@ -404,21 +400,21 @@ AcpiPsCompleteThisOp (
{
/* Traverse all siblings in the parent's argument list */
Next = Prev->Next;
Next = Prev->Common.Next;
if (Next == Op)
{
if (ReplacementOp)
{
ReplacementOp->Parent = Op->Parent;
ReplacementOp->Value.Arg = NULL;
ReplacementOp->Node = Op->Node;
Prev->Next = ReplacementOp;
ReplacementOp->Next = Op->Next;
ReplacementOp->Common.Parent = Op->Common.Parent;
ReplacementOp->Common.Value.Arg = NULL;
ReplacementOp->Common.Node = Op->Common.Node;
Prev->Common.Next = ReplacementOp;
ReplacementOp->Common.Next = Op->Common.Next;
Next = NULL;
}
else
{
Prev->Next = Op->Next;
Prev->Common.Next = Op->Common.Next;
Next = NULL;
}
}
@ -431,13 +427,13 @@ AcpiPsCompleteThisOp (
AcpiPsDeleteParseTree (Op);
return_VALUE (TRUE);
return_VOID;
}
return_VALUE (FALSE);
return_VOID;
#else
return (FALSE);
return;
#endif
}
@ -537,7 +533,7 @@ AcpiPsNextParseState (
Status = AE_CTRL_TRANSFER;
WalkState->PrevOp = Op;
WalkState->MethodCallOp = Op;
WalkState->MethodCallNode = (Op->Value.Arg)->Node;
WalkState->MethodCallNode = (Op->Common.Value.Arg)->Common.Node;
/* Will return value (if any) be used by the caller? */
@ -585,6 +581,11 @@ AcpiPsParseLoop (
ACPI_FUNCTION_TRACE_PTR ("PsParseLoop", WalkState);
if (WalkState->DescendingCallback == NULL)
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
ParserState = &WalkState->ParserState;
WalkState->ArgTypes = 0;
@ -601,8 +602,8 @@ AcpiPsParseLoop (
* was just completed
*/
if ((ParserState->Scope->ParseScope.Op) &&
((ParserState->Scope->ParseScope.Op->Opcode == AML_IF_OP) ||
(ParserState->Scope->ParseScope.Op->Opcode == AML_WHILE_OP)) &&
((ParserState->Scope->ParseScope.Op->Common.AmlOpcode == AML_IF_OP) ||
(ParserState->Scope->ParseScope.Op->Common.AmlOpcode == AML_WHILE_OP)) &&
(WalkState->ControlState) &&
(WalkState->ControlState->Common.State ==
ACPI_CONTROL_PREDICATE_EXECUTING))
@ -649,13 +650,13 @@ AcpiPsParseLoop (
*/
while ((ParserState->Aml < ParserState->AmlEnd) || (Op))
{
AmlOpStart = ParserState->Aml;
if (!Op)
{
/* Get the next opcode from the AML stream */
AmlOpStart = ParserState->Aml;
WalkState->AmlOffset = ParserState->Aml - ParserState->AmlStart;
WalkState->Opcode = AcpiPsPeekOpcode (ParserState);
WalkState->AmlOffset = ACPI_PTR_DIFF (ParserState->Aml, ParserState->AmlStart);
WalkState->Opcode = AcpiPsPeekOpcode (ParserState);
/*
* First cut to determine what we have found:
@ -704,8 +705,8 @@ AcpiPsParseLoop (
if (WalkState->OpInfo->Flags & AML_NAMED)
{
PreOp.Value.Arg = NULL;
PreOp.Opcode = WalkState->Opcode;
PreOp.Common.Value.Arg = NULL;
PreOp.Common.AmlOpcode = WalkState->Opcode;
while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) != ARGP_NAME)
{
@ -720,44 +721,41 @@ AcpiPsParseLoop (
INCREMENT_ARG_LIST (WalkState->ArgTypes);
if (WalkState->DescendingCallback != NULL)
/*
* Find the object. This will either insert the object into
* the namespace or simply look it up
*/
WalkState->Op = NULL;
Status = WalkState->DescendingCallback (WalkState, &Op);
if (ACPI_FAILURE (Status))
{
/*
* Find the object. This will either insert the object into
* the namespace or simply look it up
*/
WalkState->Op = NULL;
Status = WalkState->DescendingCallback (WalkState, &Op);
if (ACPI_FAILURE (Status))
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "During name lookup/catalog, %s\n",
AcpiFormatException (Status)));
goto CloseThisOp;
}
if (Op == NULL)
{
continue;
}
Status = AcpiPsNextParseState (WalkState, Op, Status);
if (Status == AE_CTRL_PENDING)
{
Status = AE_OK;
goto CloseThisOp;
}
if (ACPI_FAILURE (Status))
{
goto CloseThisOp;
}
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "During name lookup/catalog, %s\n",
AcpiFormatException (Status)));
goto CloseThisOp;
}
AcpiPsAppendArg (Op, PreOp.Value.Arg);
if (Op == NULL)
{
continue;
}
Status = AcpiPsNextParseState (WalkState, Op, Status);
if (Status == AE_CTRL_PENDING)
{
Status = AE_OK;
goto CloseThisOp;
}
if (ACPI_FAILURE (Status))
{
goto CloseThisOp;
}
AcpiPsAppendArg (Op, PreOp.Common.Value.Arg);
AcpiGbl_Depth++;
if (Op->Opcode == AML_REGION_OP)
if (Op->Common.AmlOpcode == AML_REGION_OP)
{
/*
* Defer final parsing of an OperationRegion body,
@ -771,8 +769,8 @@ AcpiPsParseLoop (
*
* (Length is unknown until parse of the body complete)
*/
((ACPI_PARSE2_OBJECT * ) Op)->Data = AmlOpStart;
((ACPI_PARSE2_OBJECT * ) Op)->Length = 0;
Op->Named.Data = AmlOpStart;
Op->Named.Length = 0;
}
}
else
@ -792,8 +790,8 @@ AcpiPsParseLoop (
* Backup to beginning of CreateXXXfield declaration
* BodyLength is unknown until we parse the body
*/
((ACPI_PARSE2_OBJECT * ) Op)->Data = AmlOpStart;
((ACPI_PARSE2_OBJECT * ) Op)->Length = 0;
Op->Named.Data = AmlOpStart;
Op->Named.Length = 0;
}
AcpiPsAppendArg (AcpiPsGetParentScope (ParserState), Op);
@ -821,13 +819,14 @@ AcpiPsParseLoop (
}
}
Op->AmlOffset = WalkState->AmlOffset;
Op->Common.AmlOffset = WalkState->AmlOffset;
if (WalkState->OpInfo)
{
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
"Opcode %4.4X [%s] Op %p Aml %p AmlOffset %5.5X\n",
Op->Opcode, WalkState->OpInfo->Name, Op, ParserState->Aml, Op->AmlOffset));
"Opcode %4.4hX [%s] Op %p Aml %p AmlOffset %5.5X\n",
Op->Common.AmlOpcode, WalkState->OpInfo->Name,
Op, ParserState->Aml, Op->Common.AmlOffset));
}
}
@ -840,7 +839,7 @@ AcpiPsParseLoop (
{
/* Get arguments */
switch (Op->Opcode)
switch (Op->Common.AmlOpcode)
{
case AML_BYTE_OP: /* AML_BYTEDATA_ARG */
case AML_WORD_OP: /* AML_WORDDATA_ARG */
@ -867,20 +866,21 @@ AcpiPsParseLoop (
while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) && !WalkState->ArgCount)
{
WalkState->AmlOffset = ParserState->Aml - ParserState->AmlStart;
WalkState->AmlOffset = ACPI_PTR_DIFF (ParserState->Aml,
ParserState->AmlStart);
Arg = AcpiPsGetNextArg (ParserState,
GET_CURRENT_ARG_TYPE (WalkState->ArgTypes),
&WalkState->ArgCount);
if (Arg)
{
Arg->AmlOffset = WalkState->AmlOffset;
Arg->Common.AmlOffset = WalkState->AmlOffset;
AcpiPsAppendArg (Op, Arg);
}
INCREMENT_ARG_LIST (WalkState->ArgTypes);
}
switch (Op->Opcode)
switch (Op->Common.AmlOpcode)
{
case AML_METHOD_OP:
@ -891,9 +891,8 @@ AcpiPsParseLoop (
* because we don't have enough info in the first pass
* to parse them correctly.
*/
((ACPI_PARSE2_OBJECT * ) Op)->Data = ParserState->Aml;
((ACPI_PARSE2_OBJECT * ) Op)->Length = (UINT32) (ParserState->PkgEnd -
ParserState->Aml);
Op->Named.Data = ParserState->Aml;
Op->Named.Length = (UINT32) (ParserState->PkgEnd - ParserState->Aml);
/*
* Skip body of method. For OpRegions, we must continue
* parsing because the opregion is not a standalone
@ -907,8 +906,8 @@ AcpiPsParseLoop (
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
if ((Op->Parent) &&
(Op->Parent->Opcode == AML_NAME_OP) &&
if ((Op->Common.Parent) &&
(Op->Common.Parent->Common.AmlOpcode == AML_NAME_OP) &&
(WalkState->DescendingCallback != AcpiDsExecBeginOp))
{
/*
@ -916,9 +915,8 @@ AcpiPsParseLoop (
* because we don't have enough info in the first pass
* to parse them correctly.
*/
((ACPI_PARSE2_OBJECT * ) Op)->Data = AmlOpStart;
((ACPI_PARSE2_OBJECT * ) Op)->Length = (UINT32) (ParserState->PkgEnd -
AmlOpStart);
Op->Named.Data = AmlOpStart;
Op->Named.Length = (UINT32) (ParserState->PkgEnd - AmlOpStart);
/*
* Skip body
*/
@ -934,6 +932,10 @@ AcpiPsParseLoop (
WalkState->ControlState->Control.PackageEnd = ParserState->PkgEnd;
}
break;
default:
/* No action for all other opcodes */
break;
}
break;
}
@ -945,14 +947,18 @@ AcpiPsParseLoop (
{
/* There are arguments (complex ones), push Op and prepare for argument */
AcpiPsPushScope (ParserState, Op, WalkState->ArgTypes, WalkState->ArgCount);
Status = AcpiPsPushScope (ParserState, Op, WalkState->ArgTypes, WalkState->ArgCount);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
Op = NULL;
continue;
}
/* All arguments have been processed -- Op is complete, prepare for next */
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Opcode);
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
if (WalkState->OpInfo->Flags & AML_NAMED)
{
if (AcpiGbl_Depth)
@ -960,7 +966,7 @@ AcpiPsParseLoop (
AcpiGbl_Depth--;
}
if (Op->Opcode == AML_REGION_OP)
if (Op->Common.AmlOpcode == AML_REGION_OP)
{
/*
* Skip parsing of control method or opregion body,
@ -970,8 +976,7 @@ AcpiPsParseLoop (
* Completed parsing an OpRegion declaration, we now
* know the length.
*/
((ACPI_PARSE2_OBJECT * ) Op)->Length = (UINT32) (ParserState->Aml -
((ACPI_PARSE2_OBJECT * ) Op)->Data);
Op->Named.Length = (UINT32) (ParserState->Aml - Op->Named.Data);
}
}
@ -983,8 +988,7 @@ AcpiPsParseLoop (
*
* BodyLength is unknown until we parse the body
*/
((ACPI_PARSE2_OBJECT * ) Op)->Length = (UINT32) (ParserState->Aml -
((ACPI_PARSE2_OBJECT * ) Op)->Data);
Op->Named.Length = (UINT32) (ParserState->Aml - Op->Named.Data);
}
/* This op complete, notify the dispatcher */
@ -992,7 +996,7 @@ AcpiPsParseLoop (
if (WalkState->AscendingCallback != NULL)
{
WalkState->Op = Op;
WalkState->Opcode = Op->Opcode;
WalkState->Opcode = Op->Common.AmlOpcode;
Status = WalkState->AscendingCallback (WalkState);
Status = AcpiPsNextParseState (WalkState, Op, Status);
@ -1010,12 +1014,10 @@ AcpiPsParseLoop (
*/
ParserState->Scope->ParseScope.ArgCount--;
/* Close this Op (may result in parse subtree deletion) */
/* Close this Op (will result in parse subtree deletion) */
if (AcpiPsCompleteThisOp (WalkState, Op))
{
Op = NULL;
}
AcpiPsCompleteThisOp (WalkState, Op);
Op = NULL;
switch (Status)
{
@ -1038,8 +1040,8 @@ AcpiPsParseLoop (
AcpiPsPopScope (ParserState, &Op, &WalkState->ArgTypes, &WalkState->ArgCount);
WalkState->Op = Op;
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Opcode);
WalkState->Opcode = Op->Opcode;
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
WalkState->Opcode = Op->Common.AmlOpcode;
Status = WalkState->AscendingCallback (WalkState);
Status = AcpiPsNextParseState (WalkState, Op, Status);
@ -1055,7 +1057,7 @@ AcpiPsParseLoop (
/* Pop off scopes until we find the While */
while (!Op || (Op->Opcode != AML_WHILE_OP))
while (!Op || (Op->Common.AmlOpcode != AML_WHILE_OP))
{
AcpiPsPopScope (ParserState, &Op, &WalkState->ArgTypes, &WalkState->ArgCount);
}
@ -1063,8 +1065,8 @@ AcpiPsParseLoop (
/* Close this iteration of the While loop */
WalkState->Op = Op;
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Opcode);
WalkState->Opcode = Op->Opcode;
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
WalkState->Opcode = Op->Common.AmlOpcode;
Status = WalkState->AscendingCallback (WalkState);
Status = AcpiPsNextParseState (WalkState, Op, Status);
@ -1150,8 +1152,8 @@ AcpiPsParseLoop (
if (WalkState->AscendingCallback != NULL)
{
WalkState->Op = Op;
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Opcode);
WalkState->Opcode = Op->Opcode;
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
WalkState->Opcode = Op->Common.AmlOpcode;
Status = WalkState->AscendingCallback (WalkState);
Status = AcpiPsNextParseState (WalkState, Op, Status);
@ -1315,7 +1317,14 @@ AcpiPsParseAml (
*/
if ((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE)
{
AcpiDsTerminateControlMethod (WalkState);
Status = AcpiDsTerminateControlMethod (WalkState);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not terminate control method properly\n"));
Status = AE_OK;
/* Ignore error and continue */
}
}
/* Delete this walk state and all linked control states */
@ -1339,8 +1348,11 @@ AcpiPsParseAml (
* If the method return value is not used by the parent,
* The object is deleted
*/
AcpiDsRestartControlMethod (WalkState, PreviousWalkState->ReturnDesc);
WalkState->WalkType |= ACPI_WALK_METHOD_RESTART;
Status = AcpiDsRestartControlMethod (WalkState, PreviousWalkState->ReturnDesc);
if (ACPI_SUCCESS (Status))
{
WalkState->WalkType |= ACPI_WALK_METHOD_RESTART;
}
}
else
{
@ -1388,7 +1400,7 @@ AcpiPsParseAml (
AcpiUtRemoveReference (EffectiveReturnDesc);
AcpiExReleaseAllMutexes (Thread);
AcpiUtDeleteGenericState ((ACPI_GENERIC_STATE *) Thread);
AcpiUtDeleteGenericState (ACPI_CAST_PTR (ACPI_GENERIC_STATE, Thread));
AcpiGbl_CurrentWalkList = PrevWalkList;
return_ACPI_STATUS (Status);
}

View File

@ -172,11 +172,11 @@ AcpiRsCreateResourceList (
* Pass the ByteStreamBuffer into a module that can calculate
* the buffer size needed for the linked list
*/
Status = AcpiRsCalculateListLength (ByteStreamStart, ByteStreamBufferLength,
Status = AcpiRsGetListLength (ByteStreamStart, ByteStreamBufferLength,
&ListSizeNeeded);
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Status=%X ListSizeNeeded=%X\n",
Status, ListSizeNeeded));
Status, (UINT32) ListSizeNeeded));
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@ -200,7 +200,7 @@ AcpiRsCreateResourceList (
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
OutputBuffer->Pointer, OutputBuffer->Length));
OutputBuffer->Pointer, (UINT32) OutputBuffer->Length));
return_ACPI_STATUS (AE_OK);
}
@ -253,14 +253,14 @@ AcpiRsCreatePciRoutingTable (
/*
* Get the required buffer length
*/
Status = AcpiRsCalculatePciRoutingTableLength (PackageObject,
Status = AcpiRsGetPciRoutingTableLength (PackageObject,
&BufferSizeNeeded);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "BufferSizeNeeded = %X\n", BufferSizeNeeded));
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "BufferSizeNeeded = %X\n", (UINT32) BufferSizeNeeded));
/* Validate/Allocate/Clear caller buffer */
@ -277,7 +277,7 @@ AcpiRsCreatePciRoutingTable (
TopObjectList = PackageObject->Package.Elements;
NumberOfElements = PackageObject->Package.Count;
Buffer = OutputBuffer->Pointer;
UserPrt = (ACPI_PCI_ROUTING_TABLE *) Buffer;
UserPrt = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, Buffer);
for (Index = 0; Index < NumberOfElements; Index++)
{
@ -288,7 +288,7 @@ AcpiRsCreatePciRoutingTable (
* be zero because we cleared the return buffer earlier
*/
Buffer += UserPrt->Length;
UserPrt = (ACPI_PCI_ROUTING_TABLE *) Buffer;
UserPrt = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, Buffer);
/*
* Fill in the Length field with the information we have at this point.
@ -311,14 +311,14 @@ AcpiRsCreatePciRoutingTable (
/*
* 1) First subobject: Dereference the Address
*/
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
if (ACPI_GET_OBJECT_TYPE (*SubObjectList) == ACPI_TYPE_INTEGER)
{
UserPrt->Address = (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
AcpiUtGetObjectTypeName (*SubObjectList)));
return_ACPI_STATUS (AE_BAD_DATA);
}
@ -327,14 +327,14 @@ AcpiRsCreatePciRoutingTable (
*/
SubObjectList++;
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
if (ACPI_GET_OBJECT_TYPE (*SubObjectList) == ACPI_TYPE_INTEGER)
{
UserPrt->Pin = (UINT32) (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
AcpiUtGetObjectTypeName (*SubObjectList)));
return_ACPI_STATUS (AE_BAD_DATA);
}
@ -343,7 +343,7 @@ AcpiRsCreatePciRoutingTable (
*/
SubObjectList++;
switch ((*SubObjectList)->Common.Type)
switch (ACPI_GET_OBJECT_TYPE (*SubObjectList))
{
case INTERNAL_TYPE_REFERENCE:
@ -362,7 +362,7 @@ AcpiRsCreatePciRoutingTable (
(UINT32) ((UINT8 *) UserPrt->Source - (UINT8 *) OutputBuffer->Pointer);
PathBuffer.Pointer = UserPrt->Source;
Status = AcpiNsHandleToPathname ((ACPI_HANDLE *) Node, &PathBuffer);
Status = AcpiNsHandleToPathname ((ACPI_HANDLE) Node, &PathBuffer);
UserPrt->Length += ACPI_STRLEN (UserPrt->Source) + 1; /* include null terminator */
break;
@ -393,7 +393,7 @@ AcpiRsCreatePciRoutingTable (
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
AcpiUtGetObjectTypeName (*SubObjectList)));
return_ACPI_STATUS (AE_BAD_DATA);
}
@ -406,14 +406,14 @@ AcpiRsCreatePciRoutingTable (
*/
SubObjectList++;
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
if (ACPI_GET_OBJECT_TYPE (*SubObjectList) == ACPI_TYPE_INTEGER)
{
UserPrt->SourceIndex = (UINT32) (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
AcpiUtGetObjectTypeName (*SubObjectList)));
return_ACPI_STATUS (AE_BAD_DATA);
}
@ -423,7 +423,7 @@ AcpiRsCreatePciRoutingTable (
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
OutputBuffer->Pointer, OutputBuffer->Length));
OutputBuffer->Pointer, (UINT32) OutputBuffer->Length));
return_ACPI_STATUS (AE_OK);
}
@ -466,11 +466,11 @@ AcpiRsCreateByteStream (
* Pass the LinkedListBuffer into a module that calculates
* the buffer size needed for the byte stream.
*/
Status = AcpiRsCalculateByteStreamLength (LinkedListBuffer,
Status = AcpiRsGetByteStreamLength (LinkedListBuffer,
&ByteStreamSizeNeeded);
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ByteStreamSizeNeeded=%X, %s\n",
ByteStreamSizeNeeded, AcpiFormatException (Status)));
(UINT32) ByteStreamSizeNeeded, AcpiFormatException (Status)));
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@ -494,7 +494,7 @@ AcpiRsCreateByteStream (
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
OutputBuffer->Pointer, OutputBuffer->Length));
OutputBuffer->Pointer, (UINT32) OutputBuffer->Length));
return_ACPI_STATUS (AE_OK);
}

View File

@ -124,6 +124,128 @@
ACPI_MODULE_NAME ("tbget")
/*******************************************************************************
*
* FUNCTION: AcpiTbTableOverride
*
* PARAMETERS: *TableInfo - Info for current table
*
* RETURN: None
*
* DESCRIPTION: Attempts override of current table with a new one if provided
* by the host OS.
*
******************************************************************************/
void
AcpiTbTableOverride (
ACPI_TABLE_DESC *TableInfo)
{
ACPI_TABLE_HEADER *NewTable;
ACPI_STATUS Status;
ACPI_POINTER Address;
ACPI_TABLE_DESC NewTableInfo;
ACPI_FUNCTION_TRACE ("AcpiTbTableOverride");
Status = AcpiOsTableOverride (TableInfo->Pointer, &NewTable);
if (ACPI_FAILURE (Status))
{
/* Some severe error from the OSL, but we basically ignore it */
ACPI_REPORT_ERROR (("Could not override ACPI table, %s\n",
AcpiFormatException (Status)));
return_VOID;
}
if (!NewTable)
{
/* No table override */
return_VOID;
}
/*
* We have a new table to override the old one. Get a copy of
* the new one. We know that the new table has a logical pointer.
*/
Address.PointerType = ACPI_LOGICAL_POINTER;
Address.Pointer.Logical = NewTable;
Status = AcpiTbGetTable (&Address, &NewTableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not copy ACPI table override\n"));
return_VOID;
}
/*
* Delete the original table
*/
AcpiTbDeleteSingleTable (TableInfo);
/* Copy the table info */
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Successful table override [%4.4s]\n",
((ACPI_TABLE_HEADER *) NewTableInfo.Pointer)->Signature));
ACPI_MEMCPY (TableInfo, &NewTableInfo, sizeof (ACPI_TABLE_DESC));
return_VOID;
}
/*******************************************************************************
*
* FUNCTION: AcpiTbGetTableWithOverride
*
* PARAMETERS: Address - Physical or logical address of table
* *TableInfo - Where the table info is returned
*
* RETURN: Status
*
* DESCRIPTION: Gets and installs the table with possible table override by OS.
*
******************************************************************************/
ACPI_STATUS
AcpiTbGetTableWithOverride (
ACPI_POINTER *Address,
ACPI_TABLE_DESC *TableInfo)
{
ACPI_STATUS Status;
ACPI_FUNCTION_TRACE ("AcpiTbGetTableWithOverride");
Status = AcpiTbGetTable (Address, TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not get ACPI table, %s\n",
AcpiFormatException (Status)));
return_ACPI_STATUS (Status);
}
/*
* Attempt override. It either happens or it doesn't, no status
*/
AcpiTbTableOverride (TableInfo);
/* Install the table */
Status = AcpiTbInstallTable (TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not install ACPI table, %s\n",
AcpiFormatException (Status)));
}
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiTbGetTablePtr
@ -209,10 +331,8 @@ AcpiTbGetTablePtr (
*
* FUNCTION: AcpiTbGetTable
*
* PARAMETERS: PhysicalAddress - Physical address of table to retrieve
* *BufferPtr - If BufferPtr is valid, read data from
* buffer rather than searching memory
* *TableInfo - Where the table info is returned
* PARAMETERS: Address - Physical address of table to retrieve
* *TableInfo - Where the table info is returned
*
* RETURN: Status
*
@ -227,7 +347,7 @@ AcpiTbGetTable (
{
ACPI_TABLE_HEADER *TableHeader = NULL;
ACPI_TABLE_HEADER *FullTable = NULL;
UINT32 Size;
ACPI_SIZE Size;
UINT8 Allocation;
ACPI_STATUS Status = AE_OK;
@ -259,7 +379,7 @@ AcpiTbGetTable (
/* Copy the entire table (including header) to the local buffer */
Size = TableHeader->Length;
Size = (ACPI_SIZE) TableHeader->Length;
ACPI_MEMCPY (FullTable, TableHeader, Size);
/* Save allocation type */
@ -314,7 +434,6 @@ AcpiTbGetTable (
* FUNCTION: AcpiTbGetAllTables
*
* PARAMETERS: NumberOfTables - Number of tables to get
* TablePtr - Input buffer pointer, optional
*
* RETURN: Status
*
@ -331,8 +450,7 @@ AcpiTbGetTable (
ACPI_STATUS
AcpiTbGetAllTables (
UINT32 NumberOfTables,
ACPI_TABLE_HEADER *TablePtr)
UINT32 NumberOfTables)
{
ACPI_STATUS Status = AE_OK;
UINT32 Index;
@ -371,7 +489,7 @@ AcpiTbGetAllTables (
/* Recognize and install the table */
Status = AcpiTbInstallTable (TablePtr, &TableInfo);
Status = AcpiTbInstallTable (&TableInfo);
if (ACPI_FAILURE (Status))
{
/*
@ -379,11 +497,17 @@ AcpiTbGetAllTables (
* error. Just get as many tables as we can, later we will
* determine if there are enough tables to continue.
*/
AcpiTbUninstallTable (&TableInfo);
(void) AcpiTbUninstallTable (&TableInfo);
Status = AE_OK;
}
}
if (!AcpiGbl_FADT)
{
ACPI_REPORT_ERROR (("No FADT present in R/XSDT\n"));
return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
/*
* Convert the FADT to a common format. This allows earlier revisions of the
* table to coexist with newer versions, using common access code.
@ -405,16 +529,18 @@ AcpiTbGetAllTables (
Status = AcpiTbGetTable (&Address, &TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not get the FACS\n"));
ACPI_REPORT_ERROR (("Could not get the FACS, %s\n",
AcpiFormatException (Status)));
return_ACPI_STATUS (Status);
}
/* Install the FACS */
Status = AcpiTbInstallTable (TablePtr, &TableInfo);
Status = AcpiTbInstallTable (&TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not install the FACS\n"));
ACPI_REPORT_ERROR (("Could not install the FACS, %s\n",
AcpiFormatException (Status)));
return_ACPI_STATUS (Status);
}
@ -425,42 +551,31 @@ AcpiTbGetAllTables (
Status = AcpiTbBuildCommonFacs (&TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not convert FACS to common internal format\n"));
return_ACPI_STATUS (Status);
}
/*
* Get the DSDT (We know that the FADT is valid now)
* Get/install the DSDT (We know that the FADT is valid now)
*/
Address.PointerType = AcpiGbl_TableFlags;
Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt);
if (AcpiGbl_DSDT != NULL)
{
Address.PointerType = ACPI_LOGICAL_POINTER;
Address.Pointer.Value = ACPI_GET_ADDRESS ((NATIVE_UINT)AcpiGbl_DSDT);
}
Status = AcpiTbGetTable (&Address, &TableInfo);
Status = AcpiTbGetTableWithOverride (&Address, &TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not get the DSDT\n"));
return_ACPI_STATUS (Status);
}
/* Install the DSDT */
/* Set Integer Width (32/64) based upon DSDT revision */
Status = AcpiTbInstallTable (TablePtr, &TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("Could not install the DSDT\n"));
return_ACPI_STATUS (Status);
}
AcpiUtSetIntegerWidth (AcpiGbl_DSDT->Revision);
/* Dump the entire DSDT */
ACPI_DEBUG_PRINT ((ACPI_DB_TABLES,
"Hex dump of entire DSDT, size %d (0x%X)\n",
AcpiGbl_DSDT->Length, AcpiGbl_DSDT->Length));
"Hex dump of entire DSDT, size %d (0x%X), Integer width = %d\n",
AcpiGbl_DSDT->Length, AcpiGbl_DSDT->Length, AcpiGbl_IntegerBitWidth));
ACPI_DUMP_BUFFER ((UINT8 *) AcpiGbl_DSDT, AcpiGbl_DSDT->Length);
/* Always delete the RSDP mapping, we are done with it */
@ -549,7 +664,7 @@ AcpiTbVerifyRsdp (
/* The RSDP supplied is OK */
TableInfo.Pointer = (ACPI_TABLE_HEADER *) Rsdp;
TableInfo.Pointer = ACPI_CAST_PTR (ACPI_TABLE_HEADER, Rsdp);
TableInfo.Length = sizeof (RSDP_DESCRIPTOR);
TableInfo.Allocation = ACPI_MEM_MAPPED;
TableInfo.BasePointer = Rsdp;
@ -564,7 +679,7 @@ AcpiTbVerifyRsdp (
/* Save the RSDP in a global for easy access */
AcpiGbl_RSDP = (RSDP_DESCRIPTOR *) TableInfo.Pointer;
AcpiGbl_RSDP = ACPI_CAST_PTR (RSDP_DESCRIPTOR, TableInfo.Pointer);
return_ACPI_STATUS (Status);
@ -633,7 +748,7 @@ ACPI_STATUS
AcpiTbValidateRsdt (
ACPI_TABLE_HEADER *TablePtr)
{
UINT32 NoMatch;
int NoMatch;
ACPI_FUNCTION_NAME ("TbValidateRsdt");
@ -663,8 +778,9 @@ AcpiTbValidateRsdt (
ACPI_DUMP_BUFFER (AcpiGbl_RSDP, 20);
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR,
"RSDT/XSDT signature at %X is invalid\n",
AcpiGbl_RSDP->RsdtPhysicalAddress));
"RSDT/XSDT signature at %X (%p) is invalid\n",
AcpiGbl_RSDP->RsdtPhysicalAddress,
(void *) (NATIVE_UINT) AcpiGbl_RSDP->RsdtPhysicalAddress));
return (AE_BAD_SIGNATURE);
}
@ -691,7 +807,7 @@ ACPI_STATUS
AcpiTbGetTablePointer (
ACPI_POINTER *Address,
UINT32 Flags,
UINT32 *Size,
ACPI_SIZE *Size,
ACPI_TABLE_HEADER **TablePtr)
{
ACPI_STATUS Status = AE_OK;
@ -720,6 +836,9 @@ AcpiTbGetTablePointer (
*TablePtr = Address->Pointer.Logical;
*Size = 0;
break;
default:
return (AE_BAD_PARAMETER);
}
}
else
@ -737,6 +856,9 @@ AcpiTbGetTablePointer (
Status = AE_BAD_PARAMETER;
break;
default:
return (AE_BAD_PARAMETER);
}
}
@ -768,27 +890,23 @@ AcpiTbGetTableRsdt (
ACPI_FUNCTION_TRACE ("TbGetTableRsdt");
/*
* Get the RSDT from the RSDP
*/
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"RSDP located at %p, RSDT physical=%8.8X%8.8X \n",
AcpiGbl_RSDP,
ACPI_HIDWORD (AcpiGbl_RSDP->RsdtPhysicalAddress),
ACPI_LODWORD (AcpiGbl_RSDP->RsdtPhysicalAddress)));
/* Get the RSDT/XSDT */
/* Get the RSDT/XSDT from the RSDP */
AcpiTbGetRsdtAddress (&Address);
Status = AcpiTbGetTable (&Address, &TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not get the RSDT, %s\n",
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not get the R/XSDT, %s\n",
AcpiFormatException (Status)));
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"RSDP located at %p, RSDT physical=%8.8X%8.8X \n",
AcpiGbl_RSDP,
ACPI_HIDWORD (Address.Pointer.Value),
ACPI_LODWORD (Address.Pointer.Value)));
/* Check the RSDT or XSDT signature */
Status = AcpiTbValidateRsdt (TableInfo.Pointer);

View File

@ -118,11 +118,7 @@
#define DEFINE_ACPI_GLOBALS
#include "acpi.h"
#include "acevents.h"
#include "acnamesp.h"
#include "acinterp.h"
#include "amlcode.h"
#define _COMPONENT ACPI_UTILITIES
ACPI_MODULE_NAME ("utglobal")
@ -245,7 +241,6 @@ UINT32 AcpiGbl_NestingLevel = 0;
BOOLEAN AcpiGbl_DbTerminateThreads = FALSE;
BOOLEAN AcpiGbl_MethodExecuting = FALSE;
NATIVE_CHAR *AcpiGbl_DbDisasmIndent = "....";
ACPI_TABLE_HEADER *AcpiGbl_DbTablePtr = NULL;
/* System flags */
@ -282,15 +277,15 @@ const NATIVE_CHAR *AcpiGbl_DbSleepStates[ACPI_NUM_SLEEP_STATES] = {
const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] =
{
{"_GPE", INTERNAL_TYPE_DEF_ANY},
{"_PR_", INTERNAL_TYPE_DEF_ANY},
{"_SB_", ACPI_TYPE_DEVICE},
{"_SI_", INTERNAL_TYPE_DEF_ANY},
{"_TZ_", INTERNAL_TYPE_DEF_ANY},
{"_GPE", INTERNAL_TYPE_DEF_ANY, NULL},
{"_PR_", INTERNAL_TYPE_DEF_ANY, NULL},
{"_SB_", ACPI_TYPE_DEVICE, NULL},
{"_SI_", INTERNAL_TYPE_DEF_ANY, NULL},
{"_TZ_", INTERNAL_TYPE_DEF_ANY, NULL},
{"_REV", ACPI_TYPE_INTEGER, "2"},
{"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
{"_GL_", ACPI_TYPE_MUTEX, "0"},
{NULL, ACPI_TYPE_ANY} /* Table terminator */
{NULL, ACPI_TYPE_ANY, NULL} /* Table terminator */
};
@ -345,9 +340,9 @@ const UINT8 AcpiGbl_NsProperties[] =
/* Hex to ASCII conversion table */
const NATIVE_CHAR AcpiGbl_HexToAscii[] =
static const NATIVE_CHAR AcpiGbl_HexToAscii[] =
{'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F'};
'8','9','A','B','C','D','E','F'};
/*****************************************************************************
*
@ -363,7 +358,7 @@ const NATIVE_CHAR AcpiGbl_HexToAscii[] =
*
****************************************************************************/
UINT8
char
AcpiUtHexToAsciiChar (
ACPI_INTEGER Integer,
UINT32 Position)
@ -463,7 +458,7 @@ ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] =
/* Region type decoding */
const NATIVE_CHAR *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
static const NATIVE_CHAR *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
{
"SystemMemory",
"SystemIO",
@ -509,7 +504,7 @@ AcpiUtGetRegionName (
/* Event type decoding */
const NATIVE_CHAR *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] =
static const NATIVE_CHAR *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] =
{
"PM_Timer",
"GlobalLock",
@ -533,7 +528,7 @@ AcpiUtGetEventName (
}
#ifdef ACPI_DEBUG
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
/*
* Strings and procedures used for debug only
@ -566,6 +561,8 @@ AcpiUtGetMutexName (
return (AcpiGbl_MutexNames[MutexId]);
}
#endif
/*****************************************************************************
*
@ -647,16 +644,35 @@ AcpiUtGetTypeName (
}
NATIVE_CHAR *
AcpiUtGetObjectTypeName (
ACPI_OPERAND_OBJECT *ObjDesc)
{
if (!ObjDesc)
{
return ("[NULL Object Descriptor]");
}
return (AcpiUtGetTypeName (ACPI_GET_OBJECT_TYPE (ObjDesc)));
}
/* Various strings for future use */
#if 0
#include "amlcode.h"
/* Data used in keeping track of fields */
const NATIVE_CHAR *AcpiGbl_FENames[NUM_FIELD_NAMES] =
static const NATIVE_CHAR *AcpiGbl_FENames[NUM_FIELD_NAMES] =
{
"skip",
"?access?"
}; /* FE = Field Element */
const NATIVE_CHAR *AcpiGbl_MatchOps[NUM_MATCH_OPS] =
static const NATIVE_CHAR *AcpiGbl_MatchOps[NUM_MATCH_OPS] =
{
"Error",
"MTR",
@ -670,7 +686,7 @@ const NATIVE_CHAR *AcpiGbl_MatchOps[NUM_MATCH_OPS] =
/* Access type decoding */
const NATIVE_CHAR *AcpiGbl_AccessTypes[NUM_ACCESS_TYPES] =
static const NATIVE_CHAR *AcpiGbl_AccessTypes[NUM_ACCESS_TYPES] =
{
"AnyAcc",
"ByteAcc",
@ -683,14 +699,13 @@ const NATIVE_CHAR *AcpiGbl_AccessTypes[NUM_ACCESS_TYPES] =
/* Update rule decoding */
const NATIVE_CHAR *AcpiGbl_UpdateRules[NUM_UPDATE_RULES] =
static const NATIVE_CHAR *AcpiGbl_UpdateRules[NUM_UPDATE_RULES] =
{
"Preserve",
"WriteAsOnes",
"WriteAsZeros"
};
#endif
#endif /* Future use */
/*****************************************************************************
@ -772,6 +787,9 @@ AcpiUtAllocateOwnerId (
AcpiGbl_NextMethodOwnerId = ACPI_FIRST_METHOD_ID;
}
break;
default:
break;
}
(void) AcpiUtReleaseMutex (ACPI_MTX_CACHES);
@ -804,15 +822,15 @@ AcpiUtInitGlobals (
ACPI_MEMSET (AcpiGbl_MemoryLists, 0, sizeof (ACPI_MEMORY_LIST) * ACPI_NUM_MEM_LISTS);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_STATE].LinkOffset = (UINT16) ACPI_PTR_DIFF (&(((ACPI_GENERIC_STATE *) NULL)->Common.Next), NULL);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_PSNODE].LinkOffset = (UINT16) ACPI_PTR_DIFF (&(((ACPI_PARSE_OBJECT *) NULL)->Next), NULL);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_PSNODE_EXT].LinkOffset = (UINT16) ACPI_PTR_DIFF (&(((ACPI_PARSE2_OBJECT *) NULL)->Next), NULL);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_PSNODE].LinkOffset = (UINT16) ACPI_PTR_DIFF (&(((ACPI_PARSE_OBJECT *) NULL)->Common.Next), NULL);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_PSNODE_EXT].LinkOffset = (UINT16) ACPI_PTR_DIFF (&(((ACPI_PARSE_OBJECT *) NULL)->Common.Next), NULL);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_OPERAND].LinkOffset = (UINT16) ACPI_PTR_DIFF (&(((ACPI_OPERAND_OBJECT *) NULL)->Cache.Next), NULL);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_WALK].LinkOffset = (UINT16) ACPI_PTR_DIFF (&(((ACPI_WALK_STATE *) NULL)->Next), NULL);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_NSNODE].ObjectSize = sizeof (ACPI_NAMESPACE_NODE);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_STATE].ObjectSize = sizeof (ACPI_GENERIC_STATE);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_PSNODE].ObjectSize = sizeof (ACPI_PARSE_OBJECT);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_PSNODE_EXT].ObjectSize = sizeof (ACPI_PARSE2_OBJECT);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_PSNODE].ObjectSize = sizeof (ACPI_PARSE_OBJ_COMMON);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_PSNODE_EXT].ObjectSize = sizeof (ACPI_PARSE_OBJ_NAMED);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_OPERAND].ObjectSize = sizeof (ACPI_OPERAND_OBJECT);
AcpiGbl_MemoryLists[ACPI_MEM_LIST_WALK].ObjectSize = sizeof (ACPI_WALK_STATE);
@ -855,6 +873,7 @@ AcpiUtInitGlobals (
AcpiGbl_SysNotify.Handler = NULL;
AcpiGbl_DrvNotify.Handler = NULL;
AcpiGbl_InitHandler = NULL;
/* Global "typed" ACPI table pointers */
@ -904,7 +923,7 @@ AcpiUtInitGlobals (
#ifdef ACPI_DEBUG
AcpiGbl_LowestStackPointer = ACPI_UINT32_MAX;
AcpiGbl_LowestStackPointer = ACPI_SIZE_MAX;
#endif
return_VOID;

View File

@ -0,0 +1,71 @@
/*-
* Copyright (c) 2002 Mitsaru Iwasaki
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
/*
* ACPI Table interfaces
*/
#include "acpi.h"
#include <sys/kernel.h>
#include <sys/linker.h>
#undef _COMPONENT
#define _COMPONENT ACPI_TABLES
ACPI_STATUS
AcpiOsTableOverride (
ACPI_TABLE_HEADER *ExistingTable,
ACPI_TABLE_HEADER **NewTable)
{
caddr_t acpi_dsdt, p;
if (NewTable == NULL)
{
return(AE_BAD_PARAMETER);
}
(*NewTable) = NULL;
if ((acpi_dsdt = preload_search_by_type("acpi_dsdt")) == NULL)
{
return(AE_OK);
}
if ((p = preload_search_info(acpi_dsdt, MODINFO_ADDR)) == NULL)
{
return(AE_OK);
}
(*NewTable) = *(void **)p;
printf("ACPI: DSDT was overridden.\n");
return(AE_OK);
}

View File

@ -208,7 +208,6 @@ acpi_identify(driver_t *driver, device_t parent)
{
device_t child;
int error;
caddr_t acpi_dsdt, p;
#ifdef ENABLE_DEBUGGER
char *debugpoint;
#endif
@ -260,17 +259,6 @@ acpi_identify(driver_t *driver, device_t parent)
}
#endif
if ((acpi_dsdt = preload_search_by_type("acpi_dsdt")) != NULL) {
if ((p = preload_search_info(acpi_dsdt, MODINFO_ADDR)) != NULL) {
if (ACPI_FAILURE(error = AcpiSetDsdtTablePtr(*(void **)p))) {
printf("ACPI: DSDT overriding failed: %s\n",
AcpiFormatException(error));
} else {
printf("ACPI: DSDT was overridden.\n");
}
}
}
if (ACPI_FAILURE(error = AcpiLoadTables())) {
printf("ACPI: table load failed: %s\n", AcpiFormatException(error));
return_VOID;
@ -1335,8 +1323,8 @@ acpi_SetSleepState(struct acpi_softc *sc, int state)
case ACPI_STATE_S2:
case ACPI_STATE_S3:
case ACPI_STATE_S4:
if (ACPI_FAILURE(status = AcpiHwGetSleepTypeData((UINT8)state, &TypeA, &TypeB))) {
device_printf(sc->acpi_dev, "AcpiHwGetSleepTypeData failed - %s\n", AcpiFormatException(status));
if (ACPI_FAILURE(status = AcpiGetSleepTypeData((UINT8)state, &TypeA, &TypeB))) {
device_printf(sc->acpi_dev, "AcpiGetSleepTypeData failed - %s\n", AcpiFormatException(status));
break;
}
@ -1863,11 +1851,11 @@ static struct debugtag dbg_level[] = {
{"ACPI_LV_MUTEX", ACPI_LV_MUTEX},
{"ACPI_LV_INIT", ACPI_LV_INIT},
{"ACPI_LV_ALL", ACPI_LV_ALL},
{"ACPI_DB_AML_DISASSEMBLE", ACPI_DB_AML_DISASSEMBLE},
{"ACPI_DB_VERBOSE_INFO", ACPI_DB_VERBOSE_INFO},
{"ACPI_DB_FULL_TABLES", ACPI_DB_FULL_TABLES},
{"ACPI_DB_EVENTS", ACPI_DB_EVENTS},
{"ACPI_DB_VERBOSE", ACPI_DB_VERBOSE},
{"ACPI_LV_AML_DISASSEMBLE", ACPI_LV_AML_DISASSEMBLE},
{"ACPI_LV_VERBOSE_INFO", ACPI_LV_VERBOSE_INFO},
{"ACPI_LV_FULL_TABLES", ACPI_LV_FULL_TABLES},
{"ACPI_LV_EVENTS", ACPI_LV_EVENTS},
{"ACPI_LV_VERBOSE", ACPI_LV_VERBOSE},
{NULL, 0}
};

View File

@ -58,6 +58,7 @@ AcpiEnterSleepStateS4Bios (
{
ACPI_OBJECT_LIST ArgList;
ACPI_OBJECT Arg;
UINT32 Value;
ACPI_FUNCTION_TRACE ("AcpiEnterSleepStateS4Bios");
@ -77,7 +78,7 @@ AcpiEnterSleepStateS4Bios (
/* clear wake status */
AcpiHwBitRegisterWrite (ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_LOCK);
AcpiSetRegister (ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_LOCK);
ACPI_DISABLE_IRQS ();
@ -92,8 +93,9 @@ AcpiEnterSleepStateS4Bios (
{
AcpiOsStall(1000000);
AcpiOsWritePort (AcpiGbl_FADT->SmiCmd, AcpiGbl_FADT->S4BiosReq, 8);
AcpiGetRegister (ACPI_BITREG_WAKE_STATUS, &Value, ACPI_MTX_LOCK);
}
while (!AcpiHwBitRegisterRead (ACPI_BITREG_WAKE_STATUS, ACPI_MTX_LOCK));
while (!Value);
AcpiHwEnableNonWakeupGpes();
@ -102,42 +104,3 @@ AcpiEnterSleepStateS4Bios (
return_ACPI_STATUS (AE_OK);
}
#undef _COMPONENT
#define _COMPONENT ACPI_TABLES
/*******************************************************************************
*
* FUNCTION: AcpiSetDsdtTablePtr
*
* PARAMETERS: TablePtr - pointer to a buffer containing the entire
* DSDT table to override
*
* RETURN: Status
*
* DESCRIPTION: Set DSDT table ptr for DSDT overriding. This function should
* be called perior than AcpiLoadTables().
*
******************************************************************************/
ACPI_STATUS
AcpiSetDsdtTablePtr(
ACPI_TABLE_HEADER *TablePtr)
{
ACPI_FUNCTION_TRACE ("AcpiSetDsdtTablePtr");
if (!TablePtr)
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
if (AcpiGbl_AcpiTables[ACPI_TABLE_DSDT].LoadedIntoNamespace)
{
return_ACPI_STATUS (AE_ALREADY_EXISTS);
}
AcpiGbl_DSDT = TablePtr;
return_ACPI_STATUS (AE_OK);
}

View File

@ -33,7 +33,7 @@ SRCS+= acpi_powerres.c acpi_resource.c acpi_thermal.c acpi_timer.c
SRCS+= acpica_support.c
SRCS+= OsdDebug.c
SRCS+= OsdHardware.c OsdInterrupt.c OsdMemory.c OsdSchedule.c
SRCS+= OsdStream.c OsdSynch.c OsdEnvironment.c
SRCS+= OsdStream.c OsdSynch.c OsdTable.c OsdEnvironment.c
SRCS+= opt_acpi.h opt_ddb.h
SRCS+= device_if.h bus_if.h pci_if.h pcib_if.h isa_if.h
.if ACPI_NO_SEMAPHORES

View File

@ -38,7 +38,7 @@
#include <dev/acpica/acpiio.h>
#include <contrib/dev/acpica/acgcc.h>
#include <contrib/dev/acpica/acfreebsd.h>
#include <contrib/dev/acpica/actypes.h>
#define ACPIDEV "/dev/acpi"