mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 16:22:46 -04:00
Import ACPICA 20180508.
This commit is contained in:
parent
5dc04bcfd5
commit
c7fe43df36
10 changed files with 120 additions and 32 deletions
21
changes.txt
21
changes.txt
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -406,6 +406,65 @@ ErrorExit:
|
|||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* 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:
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -204,6 +204,12 @@ ACPI_STATUS
|
|||
AcpiNsInitializeDevices (
|
||||
UINT32 Flags);
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiNsInitOnePackage (
|
||||
ACPI_HANDLE ObjHandle,
|
||||
UINT32 Level,
|
||||
void *Context,
|
||||
void **ReturnValue);
|
||||
|
||||
/*
|
||||
* nsload - Namespace loading
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@
|
|||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20180427
|
||||
#define ACPI_CA_VERSION 0x20180508
|
||||
|
||||
#include "acconfig.h"
|
||||
#include "actypes.h"
|
||||
|
|
|
|||
|
|
@ -186,7 +186,6 @@ AbDisplayUsage (
|
|||
ACPI_OPTION ("-a <File1> <File2>", "Compare two binary AML files, dump all mismatches");
|
||||
ACPI_OPTION ("-c <File1> <File2>", "Compare two binary AML files, dump first 100 mismatches");
|
||||
ACPI_OPTION ("-d <In> <Out>", "Dump AML binary to text file");
|
||||
ACPI_OPTION ("-e <Sig> <In> <Out>", "Extract binary AML table from acpidump file");
|
||||
ACPI_OPTION ("-o <Value>", "Start comparison at this offset into second file");
|
||||
ACPI_OPTION ("-h <File>", "Display table header for binary AML file");
|
||||
ACPI_OPTION ("-s <File>", "Update checksum for binary AML file");
|
||||
|
|
|
|||
|
|
@ -193,8 +193,9 @@
|
|||
|
||||
#define AX_LINE_BUFFER_SIZE 256
|
||||
#define AX_MIN_BLOCK_HEADER_LENGTH 6 /* strlen ("DSDT @") */
|
||||
#define AX_IS_TABLE_BLOCK_HEADER (strlen (Gbl_LineBuffer) < AX_END_OF_HEX_DATA) && (strstr (Gbl_LineBuffer, " @ "))
|
||||
#define AX_END_OF_HEX_DATA 55
|
||||
#define AX_HEX_DATA_LENGTH 49 /* (3 * 16) + 1 for the colon delimiter */
|
||||
#define AX_IS_TABLE_BLOCK_HEADER (strlen (Gbl_LineBuffer) < AX_HEX_DATA_LENGTH) && \
|
||||
(strstr (Gbl_LineBuffer, " @ "))
|
||||
|
||||
|
||||
typedef struct AxTableInfo
|
||||
|
|
|
|||
|
|
@ -432,6 +432,7 @@ AxConvertToBinary (
|
|||
char *InputLine,
|
||||
unsigned char *OutputData)
|
||||
{
|
||||
char *ColonDelimiter;
|
||||
int BytesConverted;
|
||||
int Converted[16];
|
||||
int i;
|
||||
|
|
@ -441,10 +442,17 @@ AxConvertToBinary (
|
|||
* Terminate input line immediately after the data. Otherwise, the
|
||||
* second line below will not scan correctly.
|
||||
*
|
||||
* This handles varying lengths for the offset: line prefix. This support
|
||||
* for tables larger than 1mb was added 05/2018.
|
||||
*
|
||||
* 00b0: 03 00 00 00 43 48 41 36 0c 00 00 00 03 00 00 00 ....CHA6........
|
||||
* 00c0: 43 48 41 37 CHA7
|
||||
*
|
||||
* 012340b0: 03 00 00 00 43 48 41 36 0c 00 00 00 03 00 00 00 ....CHA6........
|
||||
* 012340c0: 43 48 41 37 CHA7
|
||||
*/
|
||||
InputLine [AX_END_OF_HEX_DATA] = 0;
|
||||
ColonDelimiter = strchr (InputLine, ':');
|
||||
ColonDelimiter [AX_HEX_DATA_LENGTH] = 0;
|
||||
|
||||
/*
|
||||
* Convert one line of table data, of the form:
|
||||
|
|
|
|||
Loading…
Reference in a new issue