1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-07 13:14:51 +00:00

MFV: r333378

Import ACPICA 20180508.
This commit is contained in:
Jung-uk Kim 2018-05-08 18:18:27 +00:00
commit e7dfa7d8ab
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=333380
7 changed files with 108 additions and 28 deletions

View File

@ -1,3 +1,24 @@
----------------------------------------
8 May 2018. Summary of changes for version 20180508:
1) ACPICA kernel-resident subsystem:
Completed the new (recently deployed) package resolution mechanism for
the Load and LoadTable ASL/AML operators. This fixes a regression that
was introduced in version 20180209 that could result in an
AE_AML_INTERNAL exception during the loading of a dynamic ACPI/AML table
(SSDT) that contains package objects.
2) iASL Compiler/Disassembler and Tools:
AcpiDump and AcpiXtract: Implemented support for ACPI tables larger than
1 MB. This change allows for table offsets within the acpidump file to be
up to 8 characters. These changes are backwards compatible with existing
acpidump files.
----------------------------------------
27 April 2018. Summary of changes for version 20180427:

View File

@ -342,6 +342,11 @@ AcpiExLoadTableOp (
return_ACPI_STATUS (Status);
}
/* Complete the initialization/resolution of package objects */
Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
/* Parameter Data (optional) */
if (ParameterNode)
@ -615,6 +620,11 @@ AcpiExLoadOp (
return_ACPI_STATUS (Status);
}
/* Complete the initialization/resolution of package objects */
Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
/* Store the DdbHandle into the Target operand */
Status = AcpiExStore (DdbHandle, Target, WalkState);

View File

@ -406,6 +406,65 @@ AcpiNsInitializeDevices (
}
/*******************************************************************************
*
* FUNCTION: AcpiNsInitOnePackage
*
* PARAMETERS: ObjHandle - Node
* Level - Current nesting level
* Context - Not used
* ReturnValue - Not used
*
* RETURN: Status
*
* DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every package
* within the namespace. Used during dynamic load of an SSDT.
*
******************************************************************************/
ACPI_STATUS
AcpiNsInitOnePackage (
ACPI_HANDLE ObjHandle,
UINT32 Level,
void *Context,
void **ReturnValue)
{
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
ObjDesc = AcpiNsGetAttachedObject (Node);
if (!ObjDesc)
{
return (AE_OK);
}
/* Exit if package is already initialized */
if (ObjDesc->Package.Flags & AOPOBJ_DATA_VALID)
{
return (AE_OK);
}
Status = AcpiDsGetPackageArguments (ObjDesc);
if (ACPI_FAILURE (Status))
{
return (AE_OK);
}
Status = AcpiUtWalkPackageTree (ObjDesc, NULL, AcpiDsInitPackageElement,
NULL);
if (ACPI_FAILURE (Status))
{
return (AE_OK);
}
ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID;
return (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: AcpiNsInitOneObject
@ -533,27 +592,10 @@ AcpiNsInitOneObject (
case ACPI_TYPE_PACKAGE:
/* Complete the initialization/resolution of the package object */
Info->PackageInit++;
Status = AcpiDsGetPackageArguments (ObjDesc);
if (ACPI_FAILURE (Status))
{
break;
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE,
"%s: Completing resolution of Package elements\n",
ACPI_GET_FUNCTION_NAME));
/*
* Resolve all named references in package objects (and all
* sub-packages). This action has been deferred until the entire
* namespace has been loaded, in order to support external and
* forward references from individual package elements (05/2017).
*/
Status = AcpiUtWalkPackageTree (ObjDesc, NULL,
AcpiDsInitPackageElement, NULL);
ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID;
Status = AcpiNsInitOnePackage (ObjHandle, Level, NULL, NULL);
break;
default:

View File

@ -205,7 +205,7 @@ AcpiUtDumpBuffer (
{
/* Print current offset */
AcpiOsPrintf ("%6.4X: ", (BaseOffset + i));
AcpiOsPrintf ("%8.4X: ", (BaseOffset + i));
/* Print 16 hex chars */
@ -387,7 +387,7 @@ AcpiUtDumpBufferToFile (
{
/* Print current offset */
fprintf (File, "%6.4X: ", (BaseOffset + i));
fprintf (File, "%8.4X: ", (BaseOffset + i));
/* Print 16 hex chars */

View File

@ -284,7 +284,7 @@ typedef enum
* DescriptorType is used to differentiate between internal descriptors.
*
* The node is optimized for both 32-bit and 64-bit platforms:
* 20 bytes for the 32-bit case, 32 bytes for the 64-bit case.
* 28 bytes for the 32-bit case, 48 bytes for the 64-bit case.
*
* Note: The DescriptorType and Type fields must appear in the identical
* position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT
@ -301,10 +301,12 @@ typedef struct acpi_namespace_node
struct acpi_namespace_node *Parent; /* Parent node */
struct acpi_namespace_node *Child; /* First child */
struct acpi_namespace_node *Peer; /* First peer */
struct acpi_namespace_node *OwnerList; /* All nodes owned by a table or method */
/*
* The following fields are used by the ASL compiler and disassembler only
*/
/*
* The following fields are appended to the namespace node and
* are used by the ASL compiler and AML disassembler only
*/
#ifdef ACPI_LARGE_NAMESPACE_NODE
union acpi_parse_object *Op;
void *MethodLocals;
@ -312,7 +314,6 @@ typedef struct acpi_namespace_node
UINT32 Value;
UINT32 Length;
UINT8 ArgCount;
#endif
} ACPI_NAMESPACE_NODE;

View File

@ -204,6 +204,12 @@ ACPI_STATUS
AcpiNsInitializeDevices (
UINT32 Flags);
ACPI_STATUS
AcpiNsInitOnePackage (
ACPI_HANDLE ObjHandle,
UINT32 Level,
void *Context,
void **ReturnValue);
/*
* nsload - Namespace loading

View File

@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20180427
#define ACPI_CA_VERSION 0x20180508
#include <contrib/dev/acpica/include/acconfig.h>
#include <contrib/dev/acpica/include/actypes.h>