Index: trunk/include/iprt/formats/acpi-aml.h
===================================================================
--- trunk/include/iprt/formats/acpi-aml.h	(revision 106070)
+++ trunk/include/iprt/formats/acpi-aml.h	(revision 106070)
@@ -0,0 +1,298 @@
+/* $Id$ */
+/** @file
+ * IPRT, ACPI (Advanced Configuration and Power Interface) Machine Language (AML) format.
+ *
+ * Spec taken from: https://uefi.org/sites/default/files/resources/ACPI_Spec_6_5_Aug29.pdf (2024-07-25)
+ */
+
+/*
+ * Copyright (C) 2024 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
+ * in the VirtualBox distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
+ */
+
+#ifndef IPRT_INCLUDED_formats_acpi_aml_h
+#define IPRT_INCLUDED_formats_acpi_aml_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <iprt/types.h>
+#include <iprt/cdefs.h>
+#include <iprt/assertcompile.h>
+
+
+/** @defgroup grp_rt_formats_acpi_aml    Advanced Configuration and Power Interface (ACPI) Machine Language (AML) structures and definitions
+ * @ingroup grp_rt_formats
+ * @{
+ */
+
+/** @name AML Bytecode values (see https://uefi.org/specs/ACPI/6.5/20_AML_Specification.html#aml-byte-stream-byte-values).
+ * @{ */
+/** Encoding Name: ZeroOp,              Encoding Group: Data Object */
+#define ACPI_AML_BYTE_CODE_OP_ZERO               0x00
+/** Encoding Name: OneOp,               Encoding Group: Data Object */
+#define ACPI_AML_BYTE_CODE_OP_ONE                0x01
+/** Encoding Name: AliasOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_ALIAS              0x06
+/** Encoding Name: NameOp,              Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_NAME               0x08
+/** Encoding Name: BytePrefix,          Encoding Group: Data Object */
+#define ACPI_AML_BYTE_CODE_PREFIX_BYTE           0x0a
+/** Encoding Name: WordPrefix,          Encoding Group: Data Object */
+#define ACPI_AML_BYTE_CODE_PREFIX_WORD           0x0b
+/** Encoding Name: DWordPrefix,         Encoding Group: Data Object */
+#define ACPI_AML_BYTE_CODE_PREFIX_DWORD          0x0c
+/** Encoding Name: StringPrefix,        Encoding Group: Data Object */
+#define ACPI_AML_BYTE_CODE_PREFIX_STRING         0x0d
+/** Encoding Name: QWordPrefix,         Encoding Group: Data Object */
+#define ACPI_AML_BYTE_CODE_PREFIX_QWORD          0x0e
+/** Encoding Name: ScopeOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_SCOPE              0x10
+/** Encoding Name: BufferOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_BUFFER             0x11
+/** Encoding Name: PackageOp,           Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_PACKAGE            0x12
+/** Encoding Name: VarPackageOp,        Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_VAR_PACKAGE        0x13
+/** Encoding Name: MethodOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_METHOD             0x14
+/** Encoding Name: ExternalOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_EXTERNAL           0x15
+/** Encoding Name: DualNamePrefix,      Encoding Group: Name Object */
+#define ACPI_AML_BYTE_CODE_PREFIX_DUAL_NAME      0x2e
+/** Encoding Name: MultiNamePrefix,     Encoding Group: Name Object */
+#define ACPI_AML_BYTE_CODE_PREFIX_MULTI_NAME     0x2f
+/** Encoding Name: ExtOpPrefix,         Encoding Group: - */
+#define ACPI_AML_BYTE_CODE_PREFIX_EXT_OP         0x5b
+/** Encoding Name: MutexOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_MUTEX          0x01
+/** Encoding Name: EventOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_EVENT          0x02
+/** Encoding Name: CondRefOfOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_COND_REF_OF    0x12
+/** Encoding Name: CreateFieldOp,       Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_CREATE_FIELD   0x13
+/** Encoding Name: LoadTableOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_LOAD_TABLE     0x1f
+/** Encoding Name: LoadOp,              Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_LOAD           0x20
+/** Encoding Name: StallOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_STALL          0x21
+/** Encoding Name: SleepOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_SLEEP          0x22
+/** Encoding Name: AcquireOp,           Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_ACQUIRE        0x23
+/** Encoding Name: SignalOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_SIGNAL         0x24
+/** Encoding Name: SignalOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_WAIT           0x25
+/** Encoding Name: ResetOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_RESET          0x26
+/** Encoding Name: ReleaseOp,           Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_RELEASE        0x27
+/** Encoding Name: FromBCDOp,           Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_FROM_BCD       0x28
+/** Encoding Name: ToBCDOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_TO_BCD         0x29
+/** Encoding Name: RevisionOp,          Encoding Group: Data Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_REVISION       0x30
+/** Encoding Name: DebugOp,             Encoding Group: Debug Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_DEBUG          0x31
+/** Encoding Name: FatalOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_FATAL          0x32
+/** Encoding Name: FatalOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_TIMER          0x33
+/** Encoding Name: OpRegionOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_OP_REGION      0x80
+/** Encoding Name: FieldOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_FIELD          0x81
+/** Encoding Name: DeviceOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_DEVICE         0x82
+/** Encoding Name: ProcessorOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_PROCESSOR      0x83
+/** Encoding Name: PowerResOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_POWER_RES      0x84
+/** Encoding Name: ThermalZoneOp,       Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_THERMAL_ZONE   0x85
+/** Encoding Name: IndexFieldOp,        Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_INDEX_FIELD    0x86
+/** Encoding Name: BankFieldOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_BANK_FIELD     0x87
+/** Encoding Name: DataRegionOp,        Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_EXT_OP_DATA_REGION    0x88
+/** Encoding Name: RootChar,            Encoding Group: Name Object */
+#define ACPI_AML_BYTE_CODE_ROOT_CHAR             0x5c
+/** Encoding Name: ParentPrefixChar,    Encoding Group: Name Object */
+#define ACPI_AML_BYTE_CODE_PREFIX_PARENT_CHAR    0x5e
+/** Encoding Name: NameChar,            Encoding Group: Name Object */
+#define ACPI_AML_BYTE_CODE_NAME_CHAR             0x5f
+/** Encoding Name: Local0Op,            Encoding Group: Local Object */
+#define ACPI_AML_BYTE_CODE_OP_LOCAL_0            0x60
+/** Encoding Name: Local1Op,            Encoding Group: Local Object */
+#define ACPI_AML_BYTE_CODE_OP_LOCAL_1            0x61
+/** Encoding Name: Local2Op,            Encoding Group: Local Object */
+#define ACPI_AML_BYTE_CODE_OP_LOCAL_2            0x62
+/** Encoding Name: Local3Op,            Encoding Group: Local Object */
+#define ACPI_AML_BYTE_CODE_OP_LOCAL_3            0x63
+/** Encoding Name: Local4Op,            Encoding Group: Local Object */
+#define ACPI_AML_BYTE_CODE_OP_LOCAL_4            0x64
+/** Encoding Name: Local5Op,            Encoding Group: Local Object */
+#define ACPI_AML_BYTE_CODE_OP_LOCAL_5            0x65
+/** Encoding Name: Local6Op,            Encoding Group: Local Object */
+#define ACPI_AML_BYTE_CODE_OP_LOCAL_6            0x66
+/** Encoding Name: Local7Op,            Encoding Group: Local Object */
+#define ACPI_AML_BYTE_CODE_OP_LOCAL_7            0x67
+/** Encoding Name: Arg0Op,              Encoding Group: Arg Object */
+#define ACPI_AML_BYTE_CODE_OP_ARG_0              0x68
+/** Encoding Name: Arg1Op,              Encoding Group: Arg Object */
+#define ACPI_AML_BYTE_CODE_OP_ARG_1              0x69
+/** Encoding Name: Arg2Op,              Encoding Group: Arg Object */
+#define ACPI_AML_BYTE_CODE_OP_ARG_2              0x6a
+/** Encoding Name: Arg3Op,              Encoding Group: Arg Object */
+#define ACPI_AML_BYTE_CODE_OP_ARG_3              0x6b
+/** Encoding Name: Arg4Op,              Encoding Group: Arg Object */
+#define ACPI_AML_BYTE_CODE_OP_ARG_4              0x6c
+/** Encoding Name: Arg5Op,              Encoding Group: Arg Object */
+#define ACPI_AML_BYTE_CODE_OP_ARG_5              0x6d
+/** Encoding Name: Arg6Op,              Encoding Group: Arg Object */
+#define ACPI_AML_BYTE_CODE_OP_ARG_6              0x6e
+/** Encoding Name: StoreOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_STORE              0x70
+/** Encoding Name: RefOfOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_REF_OF             0x71
+/** Encoding Name: AddOp,               Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_ADD                0x72
+/** Encoding Name: ConcatOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_CONCAT             0x73
+/** Encoding Name: SubtractOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_SUBTRACT           0x74
+/** Encoding Name: IncrementOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_INCREMENT          0x75
+/** Encoding Name: DecrementOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_DECREMENT          0x76
+/** Encoding Name: MultiplyOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_MULTIPLY           0x77
+/** Encoding Name: DivideOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_DIVIDE             0x78
+/** Encoding Name: ShiftLeftOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_SHIFT_LEFT         0x79
+/** Encoding Name: ShiftRightOp,        Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_SHIFT_RIGHT        0x7a
+/** Encoding Name: AndOp,               Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_AND                0x7b
+/** Encoding Name: NandOp,              Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_NAND               0x7c
+/** Encoding Name: OrOp,                Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_OR                 0x7d
+/** Encoding Name: NorOp,               Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_NOR                0x7e
+/** Encoding Name: XorOp,               Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_XOR                0x7f
+/** Encoding Name: NotOp,               Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_NOT                0x80
+/** Encoding Name: FindSetLeftBitOp,    Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_FIND_SET_LEFT_BIT  0x81
+/** Encoding Name: FindSetRightBitOp,   Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_FIND_SET_RIGHT_BIT 0x82
+/** Encoding Name: DerefOfOp,           Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_DEREF_OF           0x83
+/** Encoding Name: ConcatResOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_CONCAT_RES         0x84
+/** Encoding Name: ModOp,               Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_MOD                0x85
+/** Encoding Name: NotifyOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_NOTIFY             0x86
+/** Encoding Name: SizeOfOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_SIZE_OF            0x87
+/** Encoding Name: IndexOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_INDEX              0x88
+/** Encoding Name: MatchOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_MATCH              0x89
+/** Encoding Name: CreateDWordFieldOp,  Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_CREATE_DWORD_FIELD 0x8a
+/** Encoding Name: CreateWordFieldOp,   Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_CREATE_WORD_FIELD  0x8b
+/** Encoding Name: CreateByteFieldOp,   Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_CREATE_BYTE_FIELD  0x8c
+/** Encoding Name: CreateBitFieldOp,    Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_CREATE_BIT_FIELD   0x8d
+/** Encoding Name: ObjectTypeOp,        Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_OBJECT_TYPE        0x8e
+/** Encoding Name: CreateQWordFieldOp,  Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_CREATE_QWORD_FIELD 0x8f
+/** Encoding Name: LandOp,              Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_LAND               0x90
+/** Encoding Name: LorOp,               Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_LOR                0x91
+/** Encoding Name: LnotOp,              Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_LNOT               0x92
+/** Encoding Name: LEqualOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_LEQUAL             0x93
+/** Encoding Name: LGreaterOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_LGREATER           0x94
+/** Encoding Name: LLessOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_LLESS              0x95
+/** Encoding Name: ToBufferOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_TO_BUFFER          0x96
+/** Encoding Name: ToDecimalStringOp,   Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_TO_DECIMAL_STRING  0x97
+/** Encoding Name: ToHexStringOp,       Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_TO_HEX_STRING      0x98
+/** Encoding Name: ToIntegerOp,         Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_TO_INTEGER         0x99
+/** Encoding Name: ToStringOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_TO_STRING          0x9c
+/** Encoding Name: CopyObjectOp,        Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_COPY_OBJECT        0x9d
+/** Encoding Name: MidOp,               Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_MID                0x9e
+/** Encoding Name: ContinueOp,          Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_CONTINUE           0x9f
+/** Encoding Name: IfOp,                Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_IF                 0xa0
+/** Encoding Name: ElseOp,              Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_ELSE               0xa1
+/** Encoding Name: WhileOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_WHILE              0xa2
+/** Encoding Name: NoopOp,              Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_NOOP               0xa3
+/** Encoding Name: ReturnOp,            Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_RETURN             0xa4
+/** Encoding Name: BreakOp,             Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_BREAK              0xa5
+/** Encoding Name: BreakPointOp,        Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_BREAK_POINT        0xcc
+/** Encoding Name: OnesOp,              Encoding Group: Term Object */
+#define ACPI_AML_BYTE_CODE_OP_ONES               0xff
+/** @} */
+
+/** @} */
+
+#endif /* !IPRT_INCLUDED_formats_acpi_aml_h */
+
Index: trunk/include/iprt/formats/acpi-tables.h
===================================================================
--- trunk/include/iprt/formats/acpi-tables.h	(revision 106061)
+++ trunk/include/iprt/formats/acpi-tables.h	(revision 106070)
@@ -180,7 +180,7 @@
  */
 #ifdef RT_BIG_ENDIAN
-# define ACPI_SIGNATURE_MAKE_FROM_U8(b0, b1, b2, b3) RT_MAKE_U64_FROM_U8(b0, b1, b2, b3)
+# define ACPI_SIGNATURE_MAKE_FROM_U8(b0, b1, b2, b3) RT_MAKE_U32_FROM_MSB_U8(b0, b1, b2, b3)
 #elif defined(RT_LITTLE_ENDIAN)
-# define ACPI_SIGNATURE_MAKE_FROM_U8(b0, b1, b2, b3) RT_MAKE_U64_FROM_MSB_U8(b0, b1, b2, b3)
+# define ACPI_SIGNATURE_MAKE_FROM_U8(b0, b1, b2, b3) RT_MAKE_U32_FROM_U8(b0, b1, b2, b3)
 #else
 # error "Whut?"
@@ -505,15 +505,15 @@
  * @{ */
 /** Bit 0 - Indicates that the motherboard supports user-visible devices on the LPC or ISA bus if set. */
-#define ACPI_FADT_IAPC_BOOT_ARCH_F_LEGACY_DEVS  RT_BIT_16(0)
+#define ACPI_FADT_IAPC_BOOT_ARCH_F_LEGACY_DEVS  RT_BIT(0)
 /** Bit 1 - Indicates that the motherboard contains support for a port 60 and 64 based keyboard controller. */
-#define ACPI_FADT_IAPC_BOOT_ARCH_F_8042         RT_BIT_16(1)
+#define ACPI_FADT_IAPC_BOOT_ARCH_F_8042         RT_BIT(1)
 /** Bit 2 - Indicates that the OSPM must not blindly probe the VGA hardware. */
-#define ACPI_FADT_IAPC_BOOT_ARCH_F_NO_VGA       RT_BIT_16(2)
+#define ACPI_FADT_IAPC_BOOT_ARCH_F_NO_VGA       RT_BIT(2)
 /** Bit 3 - Indicates that the OSPM must not enable Message Signaled Interrupts on this platform. */
-#define ACPI_FADT_IAPC_BOOT_ARCH_F_NO_MSI       RT_BIT_16(3)
+#define ACPI_FADT_IAPC_BOOT_ARCH_F_NO_MSI       RT_BIT(3)
 /** Bit 3 - Indicates that the OSPM must not enable OSPM ASPM on this platform. */
-#define ACPI_FADT_IAPC_BOOT_ARCH_F_NO_PCIE_ASPM RT_BIT_16(4)
+#define ACPI_FADT_IAPC_BOOT_ARCH_F_NO_PCIE_ASPM RT_BIT(4)
 /** Bit 3 - Indicates that the CMOS RTC is either not implemented, or does not exist at legacy addresses. */
-#define ACPI_FADT_IAPC_BOOT_ARCH_F_NO_RTC_CMOS  RT_BIT_16(5)
+#define ACPI_FADT_IAPC_BOOT_ARCH_F_NO_RTC_CMOS  RT_BIT(5)
 /** @} */
 
@@ -582,9 +582,300 @@
  * @{ */
 /** Bit 0 - Indicates that PSCI is implemented if set. */
-#define ACPI_FADT_ARM_BOOT_ARCH_F_PSCI_COMP    RT_BIT_16(0)
+#define ACPI_FADT_ARM_BOOT_ARCH_F_PSCI_COMP    RT_BIT(0)
 /** Bit 1 - Indicates that the HVC must be used as the PSCI conduit instead of SMC. */
-#define ACPI_FADT_ARM_BOOT_ARCH_F_PSCI_USE_HVC RT_BIT_16(1)
-/** @} */
-
+#define ACPI_FADT_ARM_BOOT_ARCH_F_PSCI_USE_HVC RT_BIT(1)
+/** @} */
+
+
+/**
+ * Generic Timer Description Table (ACPIGTDT)
+ *
+ * @see  @acpi65{05_ACPI_Software_Programming_Model,generic-timer-description-table-gtdt}
+ */
+#pragma pack(1)
+typedef struct ACPIGTDT
+{
+    ACPITBLHDR          Hdr;                            /**< 0x000: The table header. */
+    uint64_t            u64PhysAddrCntControlBase;      /**< 0x024: The 64-bit physical address at which the Counter Control block is located, 0xffffffffffffffff if not provied. */
+    uint32_t            u32Rsvd;                        /**< 0x02c: Reserved. */
+    uint32_t            u32El1SecTimerGsiv;             /**< 0x030: GSIV of the secure EL1 timer, optional. */
+    uint32_t            fEl1SecTimer;                   /**< 0x034: Secure EL1 timer flags, optional. Combination of ACPI_GTDT_TIMER_F_XXX. */
+    uint32_t            u32El1NonSecTimerGsiv;          /**< 0x038: GSIV of the non-secure EL1 timer, optional. */
+    uint32_t            fEl1NonSecTimer;                /**< 0x03c: Non-Secure EL1 timer flags, optional. Combination of ACPI_GTDT_TIMER_F_XXX. */
+    uint32_t            u32El1VirtTimerGsiv;            /**< 0x040: GSIV of the virtual EL1 timer, optional. */
+    uint32_t            fEl1VirtTimer;                  /**< 0x044: Virtual EL1 timer flags, optional. Combination of ACPI_GTDT_TIMER_F_XXX. */
+    uint32_t            u32El2TimerGsiv;                /**< 0x048: GSIV of the EL2 timer, optional. */
+    uint32_t            fEl2Timer;                      /**< 0x04c: EL2 timer flags, optional. Combination of ACPI_GTDT_TIMER_F_XXX. */
+    uint64_t            u64PhysAddrCndReadBase;         /**< 0x050: The 64-bit physical address at which the Counter Read block is located, 0xffffffffffffffff if not provied. */
+    uint32_t            cPlatformTimers;                /**< 0x058: Number of entries in the plaform timer structure array. */
+    uint32_t            offPlatformTimers;              /**< 0x05c: Offset to the platform timer structure array from the start of this table. */
+    uint32_t            u32El2VirtTimerGsiv;            /**< 0x060: GSIV of the virtual EL2 timer, optional. */
+    uint32_t            fEl2VirtTimer;                  /**< 0x064: Virtual EL2 timer flags, optional. Combination of ACPI_GTDT_TIMER_F_XXX. */
+} ACPIGTDT;
+#pragma pack()
+AssertCompileSize(ACPIGTDT, 104);
+/** Pointer to an ACPI Fixed ACPI Description Table. */
+typedef ACPIGTDT *PACPIGTDT;
+/** Pointer to a const ACPI Fixed ACPI Description Table. */
+typedef const ACPIGTDT *PCACPIGTDT;
+
+
+/** @name ACPI_GTDT_TIMER_F_XXX - ACPIGTDT::fEl1SecTimer, ACPIGTDT::fEl1NonSecTimer, ACPIGTDT::fEl1VirtTimer,
+ * ACPIGTDT::fEl2Timer, ACPIGTDT::fEl2VirtTimer
+ * @{ */
+/** Bit 0 - Interrupt mode, level triggered. */
+#define ACPI_GTDT_TIMER_F_INTR_MODE_LEVEL                   0
+/** Bit 0 - Interrupt mode, edge triggered. */
+#define ACPI_GTDT_TIMER_F_INTR_MODE_EDGE                    RT_BIT_32(0)
+/** Bit 1 - Interrupt polarity, active high. */
+#define ACPI_GTDT_TIMER_F_INTR_POLARITY_ACTIVE_HIGH         0
+/** Bit 1 - Interrupt polarity, active low. */
+#define ACPI_GTDT_TIMER_F_INTR_POLARITY_ACTIVE_LOW          RT_BIT_32(1)
+/** Bit 2 - Timer is always active independent of the processor's power state,
+ * if clear the timer may lose context or not assert interrupts if the processor is in a low power state. */
+#define ACPI_GTDT_TIMER_F_ALWAYS_ON_CAP                     RT_BIT_32(0)
+/** @} */
+
+/** @todo GT Block structure and Watchdog timer structure. */
+
+
+/**
+ * Multiple APIC Description Table (ACPIMADT)
+ *
+ * @see  @acpi65{05_ACPI_Software_Programming_Model,multiple-apic-description-table-madt}
+ */
+#pragma pack(1)
+typedef struct ACPIMADT
+{
+    ACPITBLHDR          Hdr;                            /**< 0x000: The table header. */
+    uint32_t            u32PhysAddrLocalIntrCtrl;       /**< 0x024: The 32-bit physical address at which each processor can access its local interrupt controller. */
+    uint32_t            fApic;                          /**< 0x028: Multiple APIC flags. Combination of ACPI_MADT_APIC_F_XXX. */
+    /* Variable number of interrupt controller structures follows. */
+} ACPIMADT;
+#pragma pack()
+AssertCompileSize(ACPIMADT, 44);
+/** Pointer to an ACPI Multiple APIC Description Table. */
+typedef ACPIMADT *PACPIMADT;
+/** Pointer to a const ACPI Multiple APIC Description Table. */
+typedef const ACPIMADT *PCACPIMADT;
+
+
+/** @name ACPI_MADT_APIC_F_XXX - ACPIMADT::fApic
+ * @{ */
+/** Bit 0 - Indicates that the system has a PC-AT compatible dual 8259 setup. */
+#define ACPI_MADT_APIC_F_PCAT_COMPAT                        RT_BIT_32(0)
+/** @} */
+
+
+/** @name ACPI_MADT_INTR_CTRL_TYPE_XXX - Interrupt Controller Structure Types.
+ * @{ */
+/** Processor Local APIC. */
+#define ACPI_MADT_INTR_CTRL_TYPE_PROCESSOR_LOCAL_APIC       0
+/** I/O APIC. */
+#define ACPI_MADT_INTR_CTRL_TYPE_IO_APIC                    1
+/** Interrupt source override. */
+#define ACPI_MADT_INTR_CTRL_TYPE_INTR_SRC_OVERRIDE          2
+/** Non-maskable Interrupt (NMI) Source. */
+#define ACPI_MADT_INTR_CTRL_TYPE_NMI                        3
+/** Local APIC NMI. */
+#define ACPI_MADT_INTR_CTRL_TYPE_LOCAL_APIC_NMI             4
+/** Local APIC address override. */
+#define ACPI_MADT_INTR_CTRL_TYPE_LOCAL_APIC_ADDR_OVERRIDE   5
+/** I/O SAPIC. */
+#define ACPI_MADT_INTR_CTRL_TYPE_IO_SAPIC                   6
+/** Local SAPIC. */
+#define ACPI_MADT_INTR_CTRL_TYPE_LOCAL_SAPIC                7
+/** Platform interrupt sources. */
+#define ACPI_MADT_INTR_CTRL_TYPE_PLATFORM_INTR_SRCS         8
+/** Processor Local x2APIC. */
+#define ACPI_MADT_INTR_CTRL_TYPE_PROCESSOR_LOCAL_X2APIC     9
+/** Local x2APIC NMI. */
+#define ACPI_MADT_INTR_CTRL_TYPE_LOCAL_X2APIC_NMI          10
+/** GIC CPU Interface (GICC). */
+#define ACPI_MADT_INTR_CTRL_TYPE_GICC                      11
+/** GIC Distributor (GICD). */
+#define ACPI_MADT_INTR_CTRL_TYPE_GICD                      12
+/** GIC MSI Frame. */
+#define ACPI_MADT_INTR_CTRL_TYPE_GIC_MSI_FRAME             13
+/** GIC Redistributor (GICR). */
+#define ACPI_MADT_INTR_CTRL_TYPE_GICR                      14
+/** GIC Interrupt Translation Service (ITS). */
+#define ACPI_MADT_INTR_CTRL_TYPE_GIC_ITS                   15
+/** @} */
+
+
+/**
+ * GIC CPU Interface (GICC) Structure.
+ *
+ * @see  @acpi65{05_ACPI_Software_Programming_Model,gic-cpu-interface-gicc-structure}
+ */
+#pragma pack(1)
+typedef struct ACPIMADTGICC
+{
+    uint8_t             bType;                          /**< 0x000: The GICC structure type, ACPI_MADT_INTR_CTRL_TYPE_GICC. */
+    uint8_t             cbThis;                         /**< 0x001: Length of this structure, 82. */
+    uint16_t            u16Rsvd0;                       /**< 0x002: Reserved, MBZ. */
+    uint32_t            u32CpuId;                       /**< 0x004: GIC's CPU Interface Number. */
+    uint32_t            u32AcpiCpuUid;                  /**< 0x008: The matching processor object's _UID return value for this structure. */
+    uint32_t            fGicc;                          /**< 0x00c: GICC CPU interface flags, see ACPI_MADT_GICC_F_XXX. */
+    uint32_t            u32ParkingProtocolVersion;      /**< 0x010: Version of the ARM-Processor Parking Protocol implemented. */
+    uint32_t            u32PerformanceGsiv;             /**< 0x014: The GSIV used for performance monitoring interrupts. */
+    uint64_t            u64PhysAddrParked;              /**< 0x018: The 64-bit physical address of the processor's parking protocol mailbox. */
+    uint64_t            u64PhysAddrBase;                /**< 0x020: Physical address at which the CPU can access the GIC CPU interface. */
+    uint64_t            u64PhysAddrGicv;                /**< 0x028: Address of the GIC virtual CPU interface registers. 0 if not present. */
+    uint64_t            u64PhysAddrGich;                /**< 0x030: Address of the GIC virtual interface control block registers. 0 if not present. */
+    uint32_t            u32VGicMaintenanceGsiv;         /**< 0x038: GSIV for the Virtual GIC maintenance interrupt. */
+    uint64_t            u64PhysAddrGicrBase;            /**< 0x03c: On GICv3+ holds the 64-bit physical address of the associated redistributor. */
+    uint64_t            u64Mpidr;                       /**< 0x044: Matches the MPIDR register of the CPU associated with this structure. */
+    uint8_t             bCpuEfficiencyClass;            /**< 0x04c: Describes the relative power efficiency of the associated processor. */
+    uint8_t             bRsvd1;                         /**< 0x04d: Reserved, MBZ. */
+    uint16_t            u16SpeOverflowGsiv;             /**< 0x04e: Statistical Profiling Extension buffer overflow GSIV, level triggered PPI. */
+    uint16_t            u16TrbeGsiv;                    /**< 0x050: Trace Buffer Extension interrupt GSIV, level triggered PPI. */
+} ACPIMADTGICC;
+#pragma pack()
+AssertCompileSize(ACPIMADTGICC, 82);
+/** Pointer to an GIC CPU Interface (GICC) Structure. */
+typedef ACPIMADTGICC *PACPIMADTGICC;
+/** Pointer to a const GIC CPU Interface (GICC) Structure. */
+typedef const ACPIMADTGICC *PCACPIMADTGICC;
+
+
+/** @name ACPI_MADT_GICC_F_XXX - ACPIMADTGICC::fGicc
+ * @{ */
+/** Bit 0 - If set the processor is ready for use. */
+#define ACPI_MADT_GICC_F_ENABLED                            RT_BIT_32(0)
+/** Bit 1 - The performance interrupt is edge triggered, if 0 level triggered. */
+#define ACPI_MADT_GICC_F_PERF_INTR_MODE_EDGE                RT_BIT_32(1)
+/** Bit 2 - The VGIC maintenance interrupt is edge triggered, if 0 level triggered. */
+#define ACPI_MADT_GICC_F_VGIC_MAINTENANCE_INTR_MODE_EDGE    RT_BIT_32(2)
+/** Bit 3 - System supports enabling this processor later during OS runtime. */
+#define ACPI_MADT_GICC_F_ONLINE_CAPABLE                     RT_BIT_32(3)
+/** @} */
+
+
+/**
+ * GIC Distributor Interface (GICD) Structure.
+ *
+ * @see  @acpi65{05_ACPI_Software_Programming_Model,gic-distributor-gicd-structure}
+ */
+#pragma pack(1)
+typedef struct ACPIMADTGICD
+{
+    uint8_t             bType;                          /**< 0x000: The GICD structure type, ACPI_MADT_INTR_CTRL_TYPE_GICD. */
+    uint8_t             cbThis;                         /**< 0x001: Length of this structure, 24. */
+    uint16_t            u16Rsvd0;                       /**< 0x002: Reserved, MBZ. */
+    uint32_t            u32GicdId;                      /**< 0x004: This GIC distributor's hardware ID. */
+    uint64_t            u64PhysAddrBase;                /**< 0x008: The 64-bit physical address for this distributor. */
+    uint32_t            u32SystemVectorBase;            /**< 0x010: Reserved, MBZ. */
+    uint8_t             bGicVersion;                    /**< 0x014: GIC version, ACPI_MADT_GICD_VERSION_XXX. */
+    uint8_t             abRsvd0[3];                     /**< 0x015: Reserved, MBZ. */
+} ACPIMADTGICD;
+#pragma pack()
+AssertCompileSize(ACPIMADTGICD, 24);
+/** Pointer to an GIC Distributor Interface (GICD) Structure. */
+typedef ACPIMADTGICD *PACPIMADTGICD;
+/** Pointer to a const GIC Distributor Interface (GICD) Structure. */
+typedef const ACPIMADTGICD *PCACPIMADTGICD;
+
+
+/** @name ACPI_MADT_GICD_VERSION_XXX - ACPIMADTGICD::bGicVersion
+ * @{ */
+/** No GIC version is specified, fall back to hardware discovery for GIC version. */
+#define ACPI_MADT_GICD_VERSION_UNSPECIFIED                  0
+/** GICv1. */
+#define ACPI_MADT_GICD_VERSION_GICv1                        1
+/** GICv2. */
+#define ACPI_MADT_GICD_VERSION_GICv2                        2
+/** GICv3. */
+#define ACPI_MADT_GICD_VERSION_GICv3                        3
+/** GICv4. */
+#define ACPI_MADT_GICD_VERSION_GICv4                        4
+/** @} */
+
+
+/** @todo GIC MSI Frame Structure. */
+
+
+/**
+ * GIC Redistributor (GICR) Structure.
+ *
+ * @see  @acpi65{05_ACPI_Software_Programming_Model,gic-redistributor-gicr-structure}
+ */
+#pragma pack(1)
+typedef struct ACPIMADTGICR
+{
+    uint8_t             bType;                          /**< 0x000: The GICR structure type, ACPI_MADT_INTR_CTRL_TYPE_GICR. */
+    uint8_t             cbThis;                         /**< 0x001: Length of this structure, 16. */
+    uint16_t            u16Rsvd0;                       /**< 0x002: Reserved, MBZ. */
+    uint64_t            u64PhysAddrGicrRangeBase;       /**< 0x004: The 64-bit physical address of a page range containing all GIC Redistributors. */
+    uint32_t            cbGicrRange;                    /**< 0x00c: The length of the GIC Redistributor discovery page range. */
+} ACPIMADTGICR;
+#pragma pack()
+AssertCompileSize(ACPIMADTGICR, 16);
+/** Pointer to an GIC Redistributor (GICR) Structure. */
+typedef ACPIMADTGICR *PACPIMADTGICR;
+/** Pointer to a const GIC Redistributor (GICR) Structure. */
+typedef const ACPIMADTGICR *PCACPIMADTGICR;
+
+
+/**
+ * GIC Interrupt Translation Service (ITS) Structure.
+ *
+ * @see  @acpi65{05_ACPI_Software_Programming_Model,gic-interrupt-translation-service-its-structure}
+ */
+#pragma pack(1)
+typedef struct ACPIMADTGICITS
+{
+    uint8_t             bType;                          /**< 0x000: The GICR structure type, ACPI_MADT_INTR_CTRL_TYPE_GICR. */
+    uint8_t             cbThis;                         /**< 0x001: Length of this structure, 16. */
+    uint16_t            u16Rsvd0;                       /**< 0x002: Reserved, MBZ. */
+    uint32_t            u32GicItsId;                    /**< 0x004: This GIC ITS ID. */
+    uint64_t            u64PhysAddrBase;                /**< 0x008: The 64-bit physical address for the Interrupt Translation Service. */
+    uint32_t            u32Rsvd1;                       /**< 0x010: Rserved, MBZ. */
+} ACPIMADTGICITS;
+#pragma pack()
+AssertCompileSize(ACPIMADTGICITS, 20);
+/** Pointer to an GIC Interrupt Translation Service (ITS) Structure. */
+typedef ACPIMADTGICITS *PACPIMADTGICITS;
+/** Pointer to a const GIC Interrupt Translation Service (ITS) Structure. */
+typedef const ACPIMADTGICITS *PCACPIMADTGICITS;
+
+
+/**
+ * Memory Mapped Configuration Space base address description table (MCFG). (part of the PCI Express spec).
+ */
+#pragma pack(1)
+typedef struct ACPIMCFG
+{
+    ACPITBLHDR          Hdr;                            /**< 0x000: The table header. */
+    uint64_t            u64Rsvd0;                       /**< 0x024: Reserved, MBZ. */
+    /* Variable number of base address allocation structures follows. */
+} ACPIMCFG;
+#pragma pack()
+AssertCompileSize(ACPIMCFG, 44);
+/** Pointer to an ACPI MCFG Table. */
+typedef ACPIMCFG *PACPIMCFG;
+/** Pointer to a const ACPI MCFG Table. */
+typedef const ACPIMCFG *PCACPIMCFG;
+
+
+/**
+ * MCFG allocation structure.
+ */
+#pragma pack(1)
+typedef struct ACPIMCFGALLOC
+{
+    uint64_t            u64PhysAddrBase;                /**< 0x000: Base address of the enhanced configuration mechanism. */
+    uint16_t            u16PciSegGrpNr;                 /**< 0x008: PCI segment group number. */
+    uint8_t             bPciBusFirst;                   /**< 0x00a: First PCI bus number decoded by this PCI host bridge. */
+    uint8_t             bPciBusLast;                    /**< 0x00b: Last PCI bus number decoded by this PCI host bridge. */
+    uint32_t            u32Rsvd0;                       /**< 0x00c: Reserved, MBZ. */
+} ACPIMCFGALLOC;
+#pragma pack()
+AssertCompileSize(ACPIMCFGALLOC, 16);
+/** Pointer to an ACPI MCFG Table. */
+typedef ACPIMCFGALLOC *PACPIMCFGALLOC;
+/** Pointer to a const ACPI MCFG Table. */
+typedef const ACPIMCFGALLOC *PCACPIMCFGALLOC;
 
 /** @} */
