Module Name:    src
Committed By:   christos
Date:           Sat Dec 18 17:58:49 UTC 2021

Modified Files:
        src/sys/external/bsd/acpica/dist/common: dmtbinfo.c
        src/sys/external/bsd/acpica/dist/compiler: aslfiles.c aslutils.c
            dttable.c dtutils.c
        src/sys/external/bsd/acpica/dist/dispatcher: dsopcode.c
        src/sys/external/bsd/acpica/dist/events: evregion.c evrgnini.c
        src/sys/external/bsd/acpica/dist/executer: exconfig.c exdebug.c
        src/sys/external/bsd/acpica/dist/include: acapps.h acdisasm.h acpixf.h
            actables.h actypes.h
        src/sys/external/bsd/acpica/dist/resources: rsdumpinfo.c
        src/sys/external/bsd/acpica/dist/tables: tbdata.c tbfadt.c tbinstal.c
            tbutils.c tbxfload.c
        src/sys/external/bsd/acpica/dist/utilities: utdelete.c

Log Message:
merge changes from acpica-20210930 to acpica-20211217


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/external/bsd/acpica/dist/common/dmtbinfo.c
cvs rdiff -u -r1.17 -r1.18 \
    src/sys/external/bsd/acpica/dist/compiler/aslfiles.c
cvs rdiff -u -r1.30 -r1.31 \
    src/sys/external/bsd/acpica/dist/compiler/aslutils.c
cvs rdiff -u -r1.15 -r1.16 \
    src/sys/external/bsd/acpica/dist/compiler/dttable.c
cvs rdiff -u -r1.18 -r1.19 \
    src/sys/external/bsd/acpica/dist/compiler/dtutils.c
cvs rdiff -u -r1.16 -r1.17 \
    src/sys/external/bsd/acpica/dist/dispatcher/dsopcode.c
cvs rdiff -u -r1.13 -r1.14 src/sys/external/bsd/acpica/dist/events/evregion.c
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/acpica/dist/events/evrgnini.c
cvs rdiff -u -r1.17 -r1.18 \
    src/sys/external/bsd/acpica/dist/executer/exconfig.c
cvs rdiff -u -r1.14 -r1.15 \
    src/sys/external/bsd/acpica/dist/executer/exdebug.c
cvs rdiff -u -r1.17 -r1.18 src/sys/external/bsd/acpica/dist/include/acapps.h
cvs rdiff -u -r1.23 -r1.24 \
    src/sys/external/bsd/acpica/dist/include/acdisasm.h
cvs rdiff -u -r1.31 -r1.32 src/sys/external/bsd/acpica/dist/include/acpixf.h
cvs rdiff -u -r1.15 -r1.16 \
    src/sys/external/bsd/acpica/dist/include/actables.h
cvs rdiff -u -r1.25 -r1.26 src/sys/external/bsd/acpica/dist/include/actypes.h
cvs rdiff -u -r1.12 -r1.13 \
    src/sys/external/bsd/acpica/dist/resources/rsdumpinfo.c
cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/acpica/dist/tables/tbdata.c \
    src/sys/external/bsd/acpica/dist/tables/tbfadt.c \
    src/sys/external/bsd/acpica/dist/tables/tbinstal.c
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/acpica/dist/tables/tbutils.c
cvs rdiff -u -r1.14 -r1.15 src/sys/external/bsd/acpica/dist/tables/tbxfload.c
cvs rdiff -u -r1.7 -r1.8 \
    src/sys/external/bsd/acpica/dist/utilities/utdelete.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/acpica/dist/common/dmtbinfo.c
diff -u src/sys/external/bsd/acpica/dist/common/dmtbinfo.c:1.19 src/sys/external/bsd/acpica/dist/common/dmtbinfo.c:1.20
--- src/sys/external/bsd/acpica/dist/common/dmtbinfo.c:1.19	Sat Apr  3 13:45:02 2021
+++ src/sys/external/bsd/acpica/dist/common/dmtbinfo.c	Sat Dec 18 12:58:48 2021
@@ -184,7 +184,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
 ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt1[] =
 {
     {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Facs),                    "FACS Address", 0},
-    {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Dsdt),                    "DSDT Address", DT_NON_ZERO},
+    {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Dsdt),                    "DSDT Address", 0},
     {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (Model),                   "Model", 0},
     {ACPI_DMT_FADTPM,   ACPI_FADT_OFFSET (PreferredProfile),        "PM Profile", 0},
     {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (SciInterrupt),            "SCI Interrupt", 0},
@@ -300,7 +300,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
     ACPI_DMT_TERMINATOR
 };
 
-/* ACPI 5.0 Extensions (FADT version 5) */
+/* Extensions for FADT version 5 */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt5[] =
 {
@@ -309,7 +309,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
     ACPI_DMT_TERMINATOR
 };
 
-/* ACPI 6.0 Extensions (FADT version 6) */
+/* Extensions for FADT version 6 */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt6[] =
 {

Index: src/sys/external/bsd/acpica/dist/compiler/aslfiles.c
diff -u src/sys/external/bsd/acpica/dist/compiler/aslfiles.c:1.17 src/sys/external/bsd/acpica/dist/compiler/aslfiles.c:1.18
--- src/sys/external/bsd/acpica/dist/compiler/aslfiles.c:1.17	Sat Apr  3 13:45:02 2021
+++ src/sys/external/bsd/acpica/dist/compiler/aslfiles.c	Sat Dec 18 12:58:48 2021
@@ -727,8 +727,8 @@ ErrorExit:
  * RETURN:      Status
  *
  * DESCRIPTION: Open the specified input file, and save the directory path to
- *              the file so that include files can be opened in
- *              the same directory.
+ *              the file so that include files can be opened in the same
+ *              directory. NOTE: File is opened in text mode.
  *
  ******************************************************************************/
 

Index: src/sys/external/bsd/acpica/dist/compiler/aslutils.c
diff -u src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.30 src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.31
--- src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.30	Thu Oct 28 10:53:08 2021
+++ src/sys/external/bsd/acpica/dist/compiler/aslutils.c	Sat Dec 18 12:58:48 2021
@@ -530,7 +530,7 @@ UtDisplayOneSummary (
         /* Compiler name and version number */
 
         FlPrintFile (FileId, "%s version %X [%s]\n\n",
-            ASL_COMPILER_NAME, (UINT32) ACPI_CA_VERSION, "2017-01-19");
+            ASL_COMPILER_NAME, (UINT32) ACPI_CA_VERSION, ACPI_DATE);
     }
 
     /* Summary of main input and output files */

Index: src/sys/external/bsd/acpica/dist/compiler/dttable.c
diff -u src/sys/external/bsd/acpica/dist/compiler/dttable.c:1.15 src/sys/external/bsd/acpica/dist/compiler/dttable.c:1.16
--- src/sys/external/bsd/acpica/dist/compiler/dttable.c:1.15	Sat Apr  3 13:45:02 2021
+++ src/sys/external/bsd/acpica/dist/compiler/dttable.c	Sat Dec 18 12:58:48 2021
@@ -115,10 +115,12 @@ DtCompileRsdp (
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Compile FADT.
+ * DESCRIPTION: Compile FADT (signature FACP).
  *
  *****************************************************************************/
 
+#define ACPI_XDSDT_LOCATION_IN_LIST         11
+
 ACPI_STATUS
 DtCompileFadt (
     void                    **List)
@@ -127,10 +129,17 @@ DtCompileFadt (
     DT_SUBTABLE             *Subtable;
     DT_SUBTABLE             *ParentTable;
     DT_FIELD                **PFieldList = (DT_FIELD **) List;
-    ACPI_TABLE_HEADER       *Table;
+    DT_FIELD                *DsdtFieldList;
+    ACPI_TABLE_FADT         *Table;
     UINT8                   Revision;
+    UINT32                  DsdtAddress;
+    UINT64                  X_DsdtAddress;
+    UINT32                  i;
+
 
+    /* Get the table revision and 32-bit DSDT Address definition */
 
+    DsdtFieldList = (*PFieldList)->Next;
     Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt1,
         &Subtable);
     if (ACPI_FAILURE (Status))
@@ -141,8 +150,16 @@ DtCompileFadt (
     ParentTable = DtPeekSubtable ();
     DtInsertSubtable (ParentTable, Subtable);
 
-    Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
-    Revision = Table->Revision;
+    Table = ACPI_CAST_PTR (ACPI_TABLE_FADT, ParentTable->Buffer);
+    Revision = Table->Header.Revision;
+    DsdtAddress = Table->Dsdt;
+
+    /* FADT version 1 has only 32-bit addresses - error if DSDT address is NULL */
+
+    if ((Revision == 1) && (!DsdtAddress))
+    {
+        DtError (ASL_ERROR, ASL_MSG_ZERO_VALUE, DsdtFieldList, NULL);
+    }
 
     if (Revision == 2)
     {
@@ -155,8 +172,24 @@ DtCompileFadt (
 
         DtInsertSubtable (ParentTable, Subtable);
     }
-    else if (Revision >= 2)
+
+    else if (Revision > 2)
     {
+        /*
+         * Rev 3 and greater have 64-bit addresses (as well as 32-bit).
+         * Get the 64-bit DSDT (X_DSDT) Address definition. Note: This
+         * appears at field list offset 11 within AcpiDmTableInfoFadt3.
+         */
+        DsdtFieldList = *PFieldList;
+        for (i = 0; i < ACPI_XDSDT_LOCATION_IN_LIST; i++)
+        {
+            DsdtFieldList = DsdtFieldList->Next;
+            if (!DsdtFieldList)
+            {
+                return (ASL_MSG_BAD_PARSE_TREE);
+            }
+        }
+
         Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt3,
             &Subtable);
         if (ACPI_FAILURE (Status))
@@ -166,6 +199,20 @@ DtCompileFadt (
 
         DtInsertSubtable (ParentTable, Subtable);
 
+        Table = ACPI_CAST_PTR (ACPI_TABLE_FADT, ParentTable->Buffer);
+        X_DsdtAddress = Table->XDsdt;
+
+        /*
+         * Error if both the 32-bit DSDT address and the
+         * 64-bit X_DSDT address are zero.
+         */
+        if ((!X_DsdtAddress) && (!DsdtAddress))
+        {
+            DtError (ASL_ERROR, ASL_MSG_TWO_ZERO_VALUES, DsdtFieldList, NULL);
+        }
+
+        /* Fields specific to FADT Revision 5 (appended to previous) */
+
         if (Revision >= 5)
         {
             Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt5,
@@ -178,6 +225,8 @@ DtCompileFadt (
             DtInsertSubtable (ParentTable, Subtable);
         }
 
+        /* Fields specific to FADT Revision 6 (appended to previous) */
+
         if (Revision >= 6)
         {
             Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt6,

Index: src/sys/external/bsd/acpica/dist/compiler/dtutils.c
diff -u src/sys/external/bsd/acpica/dist/compiler/dtutils.c:1.18 src/sys/external/bsd/acpica/dist/compiler/dtutils.c:1.19
--- src/sys/external/bsd/acpica/dist/compiler/dtutils.c:1.18	Thu Oct 28 10:53:08 2021
+++ src/sys/external/bsd/acpica/dist/compiler/dtutils.c	Sat Dec 18 12:58:48 2021
@@ -329,6 +329,7 @@ DtGetFieldType (
     case ACPI_DMT_BUF10:
     case ACPI_DMT_BUF12:
     case ACPI_DMT_BUF16:
+    case ACPI_DMT_BUF18:
     case ACPI_DMT_BUF128:
     case ACPI_DMT_PCI_PATH:
     case ACPI_DMT_PMTT_VENDOR:
@@ -475,6 +476,10 @@ DtGetFieldLength (
     case ACPI_DMT_MADT:
     case ACPI_DMT_NHLT1:
     case ACPI_DMT_NHLT1a:
+    case ACPI_DMT_NHLT1b:
+    case ACPI_DMT_NHLT1c:
+    case ACPI_DMT_NHLT1d:
+    case ACPI_DMT_NHLT1f:
     case ACPI_DMT_PCCT:
     case ACPI_DMT_PMTT:
     case ACPI_DMT_PPTT:
@@ -503,6 +508,7 @@ DtGetFieldLength (
     case ACPI_DMT_HEST:
     case ACPI_DMT_HMAT:
     case ACPI_DMT_NFIT:
+    case ACPI_DMT_NHLT1e:
     case ACPI_DMT_PCI_PATH:
     case ACPI_DMT_PHAT:
 
@@ -574,7 +580,7 @@ DtGetFieldLength (
         else
         {   /* At this point, this is a fatal error */
 
-            sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name);
+            snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), "Expected \"%s\"", Info->Name);
             DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer);
             return (0);
         }
@@ -629,6 +635,11 @@ DtGetFieldLength (
         ByteLength = 16;
         break;
 
+    case ACPI_DMT_BUF18:
+
+        ByteLength = 18;
+        break;
+
     case ACPI_DMT_BUF128:
 
         ByteLength = 128;

Index: src/sys/external/bsd/acpica/dist/dispatcher/dsopcode.c
diff -u src/sys/external/bsd/acpica/dist/dispatcher/dsopcode.c:1.16 src/sys/external/bsd/acpica/dist/dispatcher/dsopcode.c:1.17
--- src/sys/external/bsd/acpica/dist/dispatcher/dsopcode.c:1.16	Sat Apr  3 13:45:02 2021
+++ src/sys/external/bsd/acpica/dist/dispatcher/dsopcode.c	Sat Dec 18 12:58:48 2021
@@ -599,6 +599,7 @@ AcpiDsEvalTableRegionOperands (
 
     ObjDesc->Region.Address = ACPI_PTR_TO_PHYSADDR (Table);
     ObjDesc->Region.Length = Table->Length;
+    ObjDesc->Region.Pointer = Table;
 
     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
         ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),

Index: src/sys/external/bsd/acpica/dist/events/evregion.c
diff -u src/sys/external/bsd/acpica/dist/events/evregion.c:1.13 src/sys/external/bsd/acpica/dist/events/evregion.c:1.14
--- src/sys/external/bsd/acpica/dist/events/evregion.c:1.13	Sat Apr  3 13:45:02 2021
+++ src/sys/external/bsd/acpica/dist/events/evregion.c	Sat Dec 18 12:58:49 2021
@@ -212,6 +212,15 @@ AcpiEvAddressSpaceDispatch (
             return_ACPI_STATUS (AE_NOT_EXIST);
         }
 
+	if (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM)
+	{
+	    ACPI_PCC_INFO *Ctx = HandlerDesc->AddressSpace.Context;
+
+	    Ctx->InternalBuffer = FieldObj->Field.InternalPccBuffer;
+	    Ctx->Length = (UINT16) RegionObj->Region.Length;
+	    Ctx->SubspaceId = (UINT8) RegionObj->Region.Address;
+	}
+
         /*
          * We must exit the interpreter because the region setup will
          * potentially execute control methods (for example, the _REG method

Index: src/sys/external/bsd/acpica/dist/events/evrgnini.c
diff -u src/sys/external/bsd/acpica/dist/events/evrgnini.c:1.18 src/sys/external/bsd/acpica/dist/events/evrgnini.c:1.19
--- src/sys/external/bsd/acpica/dist/events/evrgnini.c:1.18	Sat Apr  3 13:45:02 2021
+++ src/sys/external/bsd/acpica/dist/events/evrgnini.c	Sat Dec 18 12:58:49 2021
@@ -493,6 +493,64 @@ AcpiEvCmosRegionSetup (
 
 /*******************************************************************************
  *
+ * FUNCTION:    AcpiEvDataTableRegionSetup
+ *
+ * PARAMETERS:  Handle              - Region we are interested in
+ *              Function            - Start or stop
+ *              HandlerContext      - Address space handler context
+ *              RegionContext       - Region specific context
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Setup a DataTableRegion
+ *
+ * MUTEX:       Assumes namespace is not locked
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiEvDataTableRegionSetup (
+    ACPI_HANDLE             Handle,
+    UINT32                  Function,
+    void                    *HandlerContext,
+    void                    **RegionContext)
+{
+    ACPI_OPERAND_OBJECT     *RegionDesc = (ACPI_OPERAND_OBJECT *) Handle;
+    ACPI_DATA_TABLE_MAPPING *LocalRegionContext;
+
+
+    ACPI_FUNCTION_TRACE (EvDataTableRegionSetup);
+
+
+    if (Function == ACPI_REGION_DEACTIVATE)
+    {
+        if (*RegionContext)
+        {
+            ACPI_FREE (*RegionContext);
+            *RegionContext = NULL;
+        }
+        return_ACPI_STATUS (AE_OK);
+    }
+
+    /* Create a new context */
+
+    LocalRegionContext = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_DATA_TABLE_MAPPING));
+    if (!(LocalRegionContext))
+    {
+        return_ACPI_STATUS (AE_NO_MEMORY);
+    }
+
+    /* Save the data table pointer for use in the handler */
+
+    LocalRegionContext->Pointer = RegionDesc->Region.Pointer;
+
+    *RegionContext = LocalRegionContext;
+    return_ACPI_STATUS (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    AcpiEvDefaultRegionSetup
  *
  * PARAMETERS:  Handle              - Region we are interested in

Index: src/sys/external/bsd/acpica/dist/executer/exconfig.c
diff -u src/sys/external/bsd/acpica/dist/executer/exconfig.c:1.17 src/sys/external/bsd/acpica/dist/executer/exconfig.c:1.18
--- src/sys/external/bsd/acpica/dist/executer/exconfig.c:1.17	Sat Apr  3 13:45:03 2021
+++ src/sys/external/bsd/acpica/dist/executer/exconfig.c	Sat Dec 18 12:58:49 2021
@@ -487,7 +487,7 @@ AcpiExLoadOp (
     ACPI_INFO (("Dynamic OEM Table Load:"));
     AcpiExExitInterpreter ();
     Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
-        ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, TRUE, &TableIndex);
+        ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, Table, TRUE, &TableIndex);
     AcpiExEnterInterpreter ();
     if (ACPI_FAILURE (Status))
     {

Index: src/sys/external/bsd/acpica/dist/executer/exdebug.c
diff -u src/sys/external/bsd/acpica/dist/executer/exdebug.c:1.14 src/sys/external/bsd/acpica/dist/executer/exdebug.c:1.15
--- src/sys/external/bsd/acpica/dist/executer/exdebug.c:1.14	Sat Apr  3 13:45:03 2021
+++ src/sys/external/bsd/acpica/dist/executer/exdebug.c	Sat Dec 18 12:58:49 2021
@@ -66,9 +66,10 @@
  *
  * This function is not compiled if ACPI_NO_ERROR_MESSAGES is set.
  *
- * This function is only enabled if AcpiGbl_EnableAmlDebugObject is set.
- * Thus, in the normal operational case, stores to the debug object are
- * ignored but can be easily enabled if necessary.
+ * This function is only enabled if AcpiGbl_EnableAmlDebugObject is set, or
+ * if ACPI_LV_DEBUG_OBJECT is set in the AcpiDbgLevel. Thus, in the normal
+ * operational case, stores to the debug object are ignored but can be easily
+ * enabled if necessary.
  *
  ******************************************************************************/
 
@@ -87,9 +88,10 @@ AcpiExDoDebugObject (
     ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc);
 
 
-    /* Output must be enabled via the DebugObject global */
+    /* Output must be enabled via the DebugObject global or the DbgLevel */
 
-    if (!AcpiGbl_EnableAmlDebugObject)
+    if (!AcpiGbl_EnableAmlDebugObject &&
+        !(AcpiDbgLevel & ACPI_LV_DEBUG_OBJECT))
     {
         return_VOID;
     }

Index: src/sys/external/bsd/acpica/dist/include/acapps.h
diff -u src/sys/external/bsd/acpica/dist/include/acapps.h:1.17 src/sys/external/bsd/acpica/dist/include/acapps.h:1.18
--- src/sys/external/bsd/acpica/dist/include/acapps.h:1.17	Sat Apr  3 13:45:03 2021
+++ src/sys/external/bsd/acpica/dist/include/acapps.h	Sat Dec 18 12:58:49 2021
@@ -67,7 +67,7 @@
 
 /* Macros for signons and file headers */
 #ifdef ACPI_REPRO
-#define ACPI_DATE "18 Dec 2013"
+#define ACPI_DATE "18 Dec 2021"
 #define ACPI_TIME "00:00:00"
 #else
 #define ACPI_DATE __DATE__

Index: src/sys/external/bsd/acpica/dist/include/acdisasm.h
diff -u src/sys/external/bsd/acpica/dist/include/acdisasm.h:1.23 src/sys/external/bsd/acpica/dist/include/acdisasm.h:1.24
--- src/sys/external/bsd/acpica/dist/include/acdisasm.h:1.23	Thu Oct 28 10:53:09 2021
+++ src/sys/external/bsd/acpica/dist/include/acdisasm.h	Sat Dec 18 12:58:49 2021
@@ -149,6 +149,7 @@ typedef enum
     ACPI_DMT_AEST_RES,
     ACPI_DMT_AEST_XFACE,
     ACPI_DMT_AEST_XRUPT,
+    ACPI_DMT_AGDI,
     ACPI_DMT_ASF,
     ACPI_DMT_CEDT,
     ACPI_DMT_DMAR,
@@ -172,6 +173,11 @@ typedef enum
     ACPI_DMT_NFIT,
     ACPI_DMT_NHLT1,
     ACPI_DMT_NHLT1a,
+    ACPI_DMT_NHLT1b,
+    ACPI_DMT_NHLT1c,
+    ACPI_DMT_NHLT1d,
+    ACPI_DMT_NHLT1e,
+    ACPI_DMT_NHLT1f,
     ACPI_DMT_PCCT,
     ACPI_DMT_PHAT,
     ACPI_DMT_PMTT,
@@ -273,6 +279,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTa
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestGicError[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXrupt[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAgdi[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf1a[];
@@ -451,9 +458,13 @@ extern ACPI_DMTABLE_INFO        AcpiDmTa
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt5b[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt5c[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt6[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt6a[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt6b[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt7[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt7a[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt7b[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt8[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNhlt9[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPhatHdr[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPhat0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPhat0a[];
@@ -527,6 +538,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTa
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaHdr[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaClient[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaServer[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTdel[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2a[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm211[];
@@ -775,6 +787,10 @@ AcpiDmDumpTcpa (
     ACPI_TABLE_HEADER       *Table);
 
 void
+AcpiDmDumpTdel (
+    ACPI_TABLE_HEADER       *Table);
+
+void
 AcpiDmDumpTpm2 (
     ACPI_TABLE_HEADER       *Table);
 

Index: src/sys/external/bsd/acpica/dist/include/acpixf.h
diff -u src/sys/external/bsd/acpica/dist/include/acpixf.h:1.31 src/sys/external/bsd/acpica/dist/include/acpixf.h:1.32
--- src/sys/external/bsd/acpica/dist/include/acpixf.h:1.31	Thu Oct 28 10:53:09 2021
+++ src/sys/external/bsd/acpica/dist/include/acpixf.h	Sat Dec 18 12:58:49 2021
@@ -46,7 +46,7 @@
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20210930
+#define ACPI_CA_VERSION                 0x20211217
 
 #include "acconfig.h"
 #include "actypes.h"
@@ -550,8 +550,12 @@ AcpiDecodePldBuffer (
 ACPI_EXTERNAL_RETURN_STATUS (
 ACPI_STATUS ACPI_INIT_FUNCTION
 AcpiInstallTable (
-    ACPI_PHYSICAL_ADDRESS   Address,
-    BOOLEAN                 Physical))
+    ACPI_TABLE_HEADER       *Table))
+
+ACPI_EXTERNAL_RETURN_STATUS (
+ACPI_STATUS ACPI_INIT_FUNCTION
+AcpiInstallPhysicalTable (
+    ACPI_PHYSICAL_ADDRESS   Address))
 
 ACPI_EXTERNAL_RETURN_STATUS (
 ACPI_STATUS

Index: src/sys/external/bsd/acpica/dist/include/actables.h
diff -u src/sys/external/bsd/acpica/dist/include/actables.h:1.15 src/sys/external/bsd/acpica/dist/include/actables.h:1.16
--- src/sys/external/bsd/acpica/dist/include/actables.h:1.15	Sat Apr  3 13:45:03 2021
+++ src/sys/external/bsd/acpica/dist/include/actables.h	Sat Dec 18 12:58:49 2021
@@ -85,7 +85,8 @@ ACPI_STATUS
 AcpiTbAcquireTempTable (
     ACPI_TABLE_DESC         *TableDesc,
     ACPI_PHYSICAL_ADDRESS   Address,
-    UINT8                   Flags);
+    UINT8                   Flags,
+    ACPI_TABLE_HEADER       *Table);
 
 void
 AcpiTbReleaseTempTable (
@@ -171,6 +172,7 @@ ACPI_STATUS
 AcpiTbInstallStandardTable (
     ACPI_PHYSICAL_ADDRESS   Address,
     UINT8                   Flags,
+    ACPI_TABLE_HEADER       *Table,
     BOOLEAN                 Reload,
     BOOLEAN                 Override,
     UINT32                  *TableIndex);
@@ -188,6 +190,7 @@ ACPI_STATUS
 AcpiTbInstallAndLoadTable (
     ACPI_PHYSICAL_ADDRESS   Address,
     UINT8                   Flags,
+    ACPI_TABLE_HEADER       *Table,
     BOOLEAN                 Override,
     UINT32                  *TableIndex);
 

Index: src/sys/external/bsd/acpica/dist/include/actypes.h
diff -u src/sys/external/bsd/acpica/dist/include/actypes.h:1.25 src/sys/external/bsd/acpica/dist/include/actypes.h:1.26
--- src/sys/external/bsd/acpica/dist/include/actypes.h:1.25	Thu Oct 28 10:53:09 2021
+++ src/sys/external/bsd/acpica/dist/include/actypes.h	Sat Dec 18 12:58:49 2021
@@ -1216,6 +1216,13 @@ typedef struct acpi_connection_info
 
 } ACPI_CONNECTION_INFO;
 
+/* Special Context data for PCC Opregion (ACPI 6.3) */
+
+typedef struct acpi_pcc_info {
+    UINT8                           SubspaceId;
+    UINT16                          Length;
+    UINT8                           *InternalBuffer;
+} ACPI_PCC_INFO;
 
 typedef
 ACPI_STATUS (*ACPI_ADR_SPACE_SETUP) (
@@ -1355,6 +1362,11 @@ typedef struct acpi_mem_space_context
 
 } ACPI_MEM_SPACE_CONTEXT;
 
+typedef struct acpi_data_table_space_context
+{
+    void                            *Pointer;
+
+} ACPI_DATA_TABLE_MAPPING;
 
 /*
  * ACPI_MEMORY_LIST is used only if the ACPICA local cache is enabled

Index: src/sys/external/bsd/acpica/dist/resources/rsdumpinfo.c
diff -u src/sys/external/bsd/acpica/dist/resources/rsdumpinfo.c:1.12 src/sys/external/bsd/acpica/dist/resources/rsdumpinfo.c:1.13
--- src/sys/external/bsd/acpica/dist/resources/rsdumpinfo.c:1.12	Sat Apr  3 13:45:04 2021
+++ src/sys/external/bsd/acpica/dist/resources/rsdumpinfo.c	Sat Dec 18 12:58:49 2021
@@ -410,20 +410,18 @@ ACPI_RSDUMP_INFO        AcpiRsDumpGenera
     {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.MaxAddressFixed),          "Max Relocatability",       AcpiGbl_MaxDecode}
 };
 
-static const char *AcpiGbl_MemoryRange[] = { "Memory Range" };
 ACPI_RSDUMP_INFO        AcpiRsDumpMemoryFlags[5] =
 {
-    {ACPI_RSD_LITERAL,  ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemoryFlags),        "Resource Type",            AcpiGbl_MemoryRange},
+    {ACPI_RSD_LITERAL,  ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemoryFlags),        "Resource Type",            __UNCONST("Memory Range")},
     {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.WriteProtect),    "Write Protect",            AcpiGbl_RwDecode},
     {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Caching),         "Caching",                  AcpiGbl_MemDecode},
     {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.RangeType),       "Range Type",               AcpiGbl_MtpDecode},
     {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Translation),     "Translation",              AcpiGbl_TtpDecode}
 };
 
-static const char *AcpiGbl_IORange[] = { "I/O Range" };
 ACPI_RSDUMP_INFO        AcpiRsDumpIoFlags[4] =
 {
-    {ACPI_RSD_LITERAL,  ACPI_RSD_TABLE_SIZE (AcpiRsDumpIoFlags),            "Resource Type",            AcpiGbl_IORange },
+    {ACPI_RSD_LITERAL,  ACPI_RSD_TABLE_SIZE (AcpiRsDumpIoFlags),            "Resource Type",            __UNCONST("I/O Range")},
     {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.RangeType),        "Range Type",               AcpiGbl_RngDecode},
     {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.Translation),      "Translation",              AcpiGbl_TtpDecode},
     {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.TranslationType),  "Translation Type",         AcpiGbl_TrsDecode}

Index: src/sys/external/bsd/acpica/dist/tables/tbdata.c
diff -u src/sys/external/bsd/acpica/dist/tables/tbdata.c:1.16 src/sys/external/bsd/acpica/dist/tables/tbdata.c:1.17
--- src/sys/external/bsd/acpica/dist/tables/tbdata.c:1.16	Sat Apr  3 13:45:04 2021
+++ src/sys/external/bsd/acpica/dist/tables/tbdata.c	Sat Dec 18 12:58:49 2021
@@ -135,14 +135,28 @@ AcpiTbInitTableDescriptor (
 {
 
     /*
-     * Initialize the table descriptor. Set the pointer to NULL, since the
-     * table is not fully mapped at this time.
+     * Initialize the table descriptor. Set the pointer to NULL for external
+     * tables, since the table is not fully mapped at this time.
      */
     memset (TableDesc, 0, sizeof (ACPI_TABLE_DESC));
     TableDesc->Address = Address;
     TableDesc->Length = Table->Length;
     TableDesc->Flags = Flags;
     ACPI_MOVE_32_TO_32 (TableDesc->Signature.Ascii, Table->Signature);
+
+    switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
+    {
+    case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
+    case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
+
+        TableDesc->Pointer = Table;
+        break;
+
+    case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
+    default:
+
+        break;
+    }
 }
 
 
@@ -182,8 +196,7 @@ AcpiTbAcquireTable (
     case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
     case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
 
-        Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER,
-            ACPI_PHYSADDR_TO_PTR (TableDesc->Address));
+        Table = TableDesc->Pointer;
         break;
 
     default:
@@ -251,6 +264,8 @@ AcpiTbReleaseTable (
  * PARAMETERS:  TableDesc           - Table descriptor to be acquired
  *              Address             - Address of the table
  *              Flags               - Allocation flags of the table
+ *              Table               - Pointer to the table (required for virtual
+ *                                    origins, optional for physical)
  *
  * RETURN:      Status
  *
@@ -265,9 +280,10 @@ ACPI_STATUS
 AcpiTbAcquireTempTable (
     ACPI_TABLE_DESC         *TableDesc,
     ACPI_PHYSICAL_ADDRESS   Address,
-    UINT8                   Flags)
+    UINT8                   Flags,
+    ACPI_TABLE_HEADER       *Table)
 {
-    ACPI_TABLE_HEADER       *TableHeader;
+    BOOLEAN                 MappedTable = FALSE;
 
 
     switch (Flags & ACPI_TABLE_ORIGIN_MASK)
@@ -276,37 +292,43 @@ AcpiTbAcquireTempTable (
 
         /* Get the length of the full table from the header */
 
-        TableHeader = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
-        if (!TableHeader)
+        if (!Table)
         {
-            return (AE_NO_MEMORY);
+            Table = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
+            if (!Table)
+            {
+                return (AE_NO_MEMORY);
+            }
+
+            MappedTable = TRUE;
         }
 
-        AcpiTbInitTableDescriptor (TableDesc, Address, Flags, TableHeader);
-        AcpiOsUnmapMemory (TableHeader, sizeof (ACPI_TABLE_HEADER));
-        return (AE_OK);
+        break;
 
     case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
     case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
 
-        TableHeader = ACPI_CAST_PTR (ACPI_TABLE_HEADER,
-            ACPI_PHYSADDR_TO_PTR (Address));
-        if (!TableHeader)
+        if (!Table)
         {
-            return (AE_NO_MEMORY);
+            return (AE_BAD_PARAMETER);
         }
 
-        AcpiTbInitTableDescriptor (TableDesc, Address, Flags, TableHeader);
-        return (AE_OK);
+        break;
 
     default:
 
-        break;
+        /* Table is not valid yet */
+
+        return (AE_NO_MEMORY);
     }
 
-    /* Table is not valid yet */
+    AcpiTbInitTableDescriptor (TableDesc, Address, Flags, Table);
+    if (MappedTable)
+    {
+        AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER));
+    }
 
-    return (AE_NO_MEMORY);
+    return (AE_OK);
 }
 
 
@@ -405,7 +427,20 @@ AcpiTbInvalidateTable (
 
     AcpiTbReleaseTable (TableDesc->Pointer, TableDesc->Length,
         TableDesc->Flags);
-    TableDesc->Pointer = NULL;
+
+    switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
+    {
+    case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
+
+        TableDesc->Pointer = NULL;
+        break;
+
+    case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
+    case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
+    default:
+
+        break;
+    }
 
     return_VOID;
 }
@@ -1111,6 +1146,9 @@ AcpiTbLoadTable (
  *
  * PARAMETERS:  Address                 - Physical address of the table
  *              Flags                   - Allocation flags of the table
+ *              Table                   - Pointer to the table (required for
+ *                                        virtual origins, optional for
+ *                                        physical)
  *              Override                - Whether override should be performed
  *              TableIndex              - Where table index is returned
  *
@@ -1124,6 +1162,7 @@ ACPI_STATUS
 AcpiTbInstallAndLoadTable (
     ACPI_PHYSICAL_ADDRESS   Address,
     UINT8                   Flags,
+    ACPI_TABLE_HEADER       *Table,
     BOOLEAN                 Override,
     UINT32                  *TableIndex)
 {
@@ -1136,7 +1175,7 @@ AcpiTbInstallAndLoadTable (
 
     /* Install the table and load it into the namespace */
 
-    Status = AcpiTbInstallStandardTable (Address, Flags, TRUE,
+    Status = AcpiTbInstallStandardTable (Address, Flags, Table, TRUE,
         Override, &i);
     if (ACPI_FAILURE (Status))
     {
Index: src/sys/external/bsd/acpica/dist/tables/tbfadt.c
diff -u src/sys/external/bsd/acpica/dist/tables/tbfadt.c:1.16 src/sys/external/bsd/acpica/dist/tables/tbfadt.c:1.17
--- src/sys/external/bsd/acpica/dist/tables/tbfadt.c:1.16	Sat Apr  3 13:45:04 2021
+++ src/sys/external/bsd/acpica/dist/tables/tbfadt.c	Sat Dec 18 12:58:49 2021
@@ -378,7 +378,7 @@ AcpiTbParseFadt (
 
     AcpiTbInstallStandardTable (
         (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XDsdt,
-        ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE,
+        ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
         &AcpiGbl_DsdtIndex);
 
     /* If Hardware Reduced flag is set, there is no FACS */
@@ -389,14 +389,14 @@ AcpiTbParseFadt (
         {
             AcpiTbInstallStandardTable (
                 (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.Facs,
-                ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE,
+                ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
                 &AcpiGbl_FacsIndex);
         }
         if (AcpiGbl_FADT.XFacs)
         {
             AcpiTbInstallStandardTable (
                 (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
-                ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE,
+                ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
                 &AcpiGbl_XFacsIndex);
         }
     }
Index: src/sys/external/bsd/acpica/dist/tables/tbinstal.c
diff -u src/sys/external/bsd/acpica/dist/tables/tbinstal.c:1.16 src/sys/external/bsd/acpica/dist/tables/tbinstal.c:1.17
--- src/sys/external/bsd/acpica/dist/tables/tbinstal.c:1.16	Sat Apr  3 13:45:04 2021
+++ src/sys/external/bsd/acpica/dist/tables/tbinstal.c	Sat Dec 18 12:58:49 2021
@@ -119,6 +119,8 @@ AcpiTbInstallTableWithOverride (
  * PARAMETERS:  Address             - Address of the table (might be a virtual
  *                                    address depending on the TableFlags)
  *              Flags               - Flags for the table
+ *              Table               - Pointer to the table (required for virtual
+ *                                    origins, optional for physical)
  *              Reload              - Whether reload should be performed
  *              Override            - Whether override should be performed
  *              TableIndex          - Where the table index is returned
@@ -137,6 +139,7 @@ ACPI_STATUS
 AcpiTbInstallStandardTable (
     ACPI_PHYSICAL_ADDRESS   Address,
     UINT8                   Flags,
+    ACPI_TABLE_HEADER       *Table,
     BOOLEAN                 Reload,
     BOOLEAN                 Override,
     UINT32                  *TableIndex)
@@ -151,7 +154,7 @@ AcpiTbInstallStandardTable (
 
     /* Acquire a temporary table descriptor for validation */
 
-    Status = AcpiTbAcquireTempTable (&NewTableDesc, Address, Flags);
+    Status = AcpiTbAcquireTempTable (&NewTableDesc, Address, Flags, Table);
     if (ACPI_FAILURE (Status))
     {
         ACPI_ERROR ((AE_INFO,
@@ -261,7 +264,7 @@ AcpiTbOverrideTable (
     if (ACPI_SUCCESS (Status) && Table)
     {
         AcpiTbAcquireTempTable (&NewTableDesc, ACPI_PTR_TO_PHYSADDR (Table),
-            ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL);
+            ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table);
         ACPI_ERROR_ONLY (OverrideType = "Logical");
         goto FinishOverride;
     }
@@ -273,7 +276,7 @@ AcpiTbOverrideTable (
     if (ACPI_SUCCESS (Status) && Address && Length)
     {
         AcpiTbAcquireTempTable (&NewTableDesc, Address,
-            ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL);
+            ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL);
         ACPI_ERROR_ONLY (OverrideType = "Physical");
         goto FinishOverride;
     }
@@ -349,11 +352,8 @@ AcpiTbUninstallTable (
     if ((TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) ==
         ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL)
     {
-	void *ptr = ACPI_PHYSADDR_TO_PTR (TableDesc->Address);
-	if (ptr)
-	{
-		ACPI_FREE (ptr);
-	}
+        ACPI_FREE (TableDesc->Pointer);
+        TableDesc->Pointer = NULL;
     }
 
     TableDesc->Address = ACPI_PTR_TO_PHYSADDR (NULL);

Index: src/sys/external/bsd/acpica/dist/tables/tbutils.c
diff -u src/sys/external/bsd/acpica/dist/tables/tbutils.c:1.18 src/sys/external/bsd/acpica/dist/tables/tbutils.c:1.19
--- src/sys/external/bsd/acpica/dist/tables/tbutils.c:1.18	Sat Apr  3 13:45:04 2021
+++ src/sys/external/bsd/acpica/dist/tables/tbutils.c	Sat Dec 18 12:58:49 2021
@@ -228,9 +228,8 @@ AcpiTbGetRootTableEntry (
          * 32-bit platform, RSDT: Return 32-bit table entry
          * 64-bit platform, RSDT: Expand 32-bit to 64-bit and return
          */
-        UINT32 addr;
-        memcpy(&addr, ACPI_CAST_PTR (UINT32, TableEntry), sizeof(addr));
-        return (ACPI_PHYSICAL_ADDRESS) addr;
+        return ((ACPI_PHYSICAL_ADDRESS) (*ACPI_CAST_PTR (
+            UINT32, TableEntry)));
     }
     else
     {
@@ -393,7 +392,8 @@ AcpiTbParseRootTable (
         }
 
         Status = AcpiTbInstallStandardTable (Address,
-            ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE, &TableIndex);
+            ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
+            &TableIndex);
 
         if (ACPI_SUCCESS (Status) &&
             ACPI_COMPARE_NAMESEG (

Index: src/sys/external/bsd/acpica/dist/tables/tbxfload.c
diff -u src/sys/external/bsd/acpica/dist/tables/tbxfload.c:1.14 src/sys/external/bsd/acpica/dist/tables/tbxfload.c:1.15
--- src/sys/external/bsd/acpica/dist/tables/tbxfload.c:1.14	Sat Apr  3 13:45:04 2021
+++ src/sys/external/bsd/acpica/dist/tables/tbxfload.c	Sat Dec 18 12:58:49 2021
@@ -157,7 +157,6 @@ AcpiTbLoadNamespace (
 
     ACPI_FUNCTION_TRACE (TbLoadNamespace);
 
-
     (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
 
 #ifdef __ia64__
@@ -170,7 +169,7 @@ AcpiTbLoadNamespace (
         goto UnlockAndExit;
     }
 #endif
-    
+
     /*
      * Load the namespace. The DSDT is required, but any SSDT and
      * PSDT tables are optional. Verify the DSDT.
@@ -299,9 +298,7 @@ UnlockAndExit:
  *
  * FUNCTION:    AcpiInstallTable
  *
- * PARAMETERS:  Address             - Address of the ACPI table to be installed.
- *              Physical            - Whether the address is a physical table
- *                                    address or not
+ * PARAMETERS:  Table               - Pointer to the ACPI table to be installed.
  *
  * RETURN:      Status
  *
@@ -313,28 +310,17 @@ UnlockAndExit:
 
 ACPI_STATUS ACPI_INIT_FUNCTION
 AcpiInstallTable (
-    ACPI_PHYSICAL_ADDRESS   Address,
-    BOOLEAN                 Physical)
+    ACPI_TABLE_HEADER       *Table)
 {
     ACPI_STATUS             Status;
-    UINT8                   Flags;
     UINT32                  TableIndex;
 
 
     ACPI_FUNCTION_TRACE (AcpiInstallTable);
 
 
-    if (Physical)
-    {
-        Flags = ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL;
-    }
-    else
-    {
-        Flags = ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL;
-    }
-
-    Status = AcpiTbInstallStandardTable (Address, Flags,
-        FALSE, FALSE, &TableIndex);
+    Status = AcpiTbInstallStandardTable (ACPI_PTR_TO_PHYSADDR (Table),
+        ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table, FALSE, FALSE, &TableIndex);
 
     return_ACPI_STATUS (Status);
 }
@@ -344,6 +330,40 @@ ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTabl
 
 /*******************************************************************************
  *
+ * FUNCTION:    AcpiInstallPhysicalTable
+ *
+ * PARAMETERS:  Address             - Address of the ACPI table to be installed.
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Dynamically install an ACPI table.
+ *              Note: This function should only be invoked after
+ *                    AcpiInitializeTables() and before AcpiLoadTables().
+ *
+ ******************************************************************************/
+
+ACPI_STATUS ACPI_INIT_FUNCTION
+AcpiInstallPhysicalTable (
+    ACPI_PHYSICAL_ADDRESS   Address)
+{
+    ACPI_STATUS             Status;
+    UINT32                  TableIndex;
+
+
+    ACPI_FUNCTION_TRACE (AcpiInstallPhysicalTable);
+
+
+    Status = AcpiTbInstallStandardTable (Address,
+        ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, FALSE, &TableIndex);
+
+    return_ACPI_STATUS (Status);
+}
+
+ACPI_EXPORT_SYMBOL_INIT (AcpiInstallPhysicalTable)
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    AcpiLoadTable
  *
  * PARAMETERS:  Table               - Pointer to a buffer containing the ACPI
@@ -384,7 +404,7 @@ AcpiLoadTable (
 
     ACPI_INFO (("Host-directed Dynamic ACPI Table Load:"));
     Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
-        ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex);
+        ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table, FALSE, &TableIndex);
     if (TableIdx)
     {
         *TableIdx = TableIndex;

Index: src/sys/external/bsd/acpica/dist/utilities/utdelete.c
diff -u src/sys/external/bsd/acpica/dist/utilities/utdelete.c:1.7 src/sys/external/bsd/acpica/dist/utilities/utdelete.c:1.8
--- src/sys/external/bsd/acpica/dist/utilities/utdelete.c:1.7	Tue Jul  6 08:23:46 2021
+++ src/sys/external/bsd/acpica/dist/utilities/utdelete.c	Sat Dec 18 12:58:49 2021
@@ -486,6 +486,7 @@ AcpiUtUpdateRefCount (
             ACPI_WARNING ((AE_INFO,
                 "Obj %p, Reference Count is already zero, cannot decrement\n",
                 Object));
+	    return;
         }
 
         ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS,

Reply via email to