diff --git a/DynamicTablesPkg/DynamicTablesPkg.ci.yaml b/DynamicTablesPkg/DynamicTablesPkg.ci.yaml index 0631fe8149..bf318b94d2 100644 --- a/DynamicTablesPkg/DynamicTablesPkg.ci.yaml +++ b/DynamicTablesPkg/DynamicTablesPkg.ci.yaml @@ -112,6 +112,7 @@ "deviceid", "EArch", "edynamic", + "eloongarch", "eventq", "EOBJECT", "gerror", diff --git a/DynamicTablesPkg/Include/ConfigurationManagerObject.h b/DynamicTablesPkg/Include/ConfigurationManagerObject.h index 4bdedb2277..e88ed97a38 100644 --- a/DynamicTablesPkg/Include/ConfigurationManagerObject.h +++ b/DynamicTablesPkg/Include/ConfigurationManagerObject.h @@ -2,6 +2,7 @@ Copyright (c) 2017 - 2024, Arm Limited. All rights reserved. Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved. + Copyright (c) 2026, Loongson Technology Corporation Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -15,6 +16,7 @@ #include #include +#include #include #include #include @@ -37,6 +39,7 @@ Bits: [31:28] - Name Space ID 0010 - ARM 0011 - X64 0100 - RISC-V + 0101 - LoongArch64 1111 - Custom/OEM All other values are reserved. @@ -90,6 +93,7 @@ typedef enum ObjectNameSpaceID { EObjNameSpaceArm, ///< ARM Objects Namespace EObjNameSpaceX64, ///< X64 Objects Namespace EObjNameSpaceRiscV, ///< RISC-V Objects Namespace + EObjNameSpaceLoongArch64, ///< LoongArch64 Objects Namespace EObjNameSpaceOem = 0xF, ///< OEM Objects Namespace EObjNameSpaceMax, } EOBJECT_NAMESPACE_ID; @@ -175,6 +179,16 @@ typedef struct CmObjDescriptor { #define CREATE_CM_RISCV_OBJECT_ID(ObjectId) \ (CREATE_CM_OBJECT_ID (EObjNameSpaceRiscV, ObjectId)) +/** This macro returns a Configuration Manager Object ID + in the LoongArch64 Object Namespace. + + @param [in] ObjectId The Object ID. + + @retval Returns a LoongArch64 Configuration Manager Object ID. +**/ +#define CREATE_CM_LOONGARCH64_OBJECT_ID(ObjectId) \ + (CREATE_CM_OBJECT_ID (EObjNameSpaceLoongArch64, ObjectId)) + /** This macro returns a Configuration Manager Object ID in the Arch Common Object Namespace. diff --git a/DynamicTablesPkg/Include/LoongArch64NameSpaceObjects.h b/DynamicTablesPkg/Include/LoongArch64NameSpaceObjects.h new file mode 100644 index 0000000000..f017ae630a --- /dev/null +++ b/DynamicTablesPkg/Include/LoongArch64NameSpaceObjects.h @@ -0,0 +1,179 @@ +/** @file + + Copyright (c) 2026, Loongson Technology Corporation Limited. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Glossary: + - Cm or CM - Configuration Manager + - Obj or OBJ - Object +**/ + +#pragma once + +#include +#include + +#pragma pack(1) + +/** The ELOONGARCH64_OBJECT_ID enum describes the Object IDs + in the LoongArch64 Namespace. +*/ +typedef enum LoongArch64ObjectID { + ELoongArch64ObjReserved, ///< 0 - Reserved + ELoongArch64ObjMadtInfo, ///< 1 - MADT table information + ELoongArch64ObjCorePicInfo, ///< 2 - Core Programmable Interrupt Controller Info + ELoongArch64ObjLioPicInfo, ///< 3 - Legacy I/O Programmable Interrupt Controller Info + ELoongArch64ObjHtPicInfo, ///< 4 - HyperTransport Programmable Interrupt Controller Info + ELoongArch64ObjEioPicInfo, ///< 5 - Extend I/O Programmable Interrupt Controller Info + ELoongArch64ObjMsiPicInfo, ///< 6 - MSI Programmable Interrupt Controller Info + ELoongArch64ObjBioPicInfo, ///< 7 - Bridge I/O Programmable Interrupt Controller Info + ELoongArch64ObjLpcPicInfo, ///< 8 - Low Pin Count Programmable Interrupt Controller Info + ELoongArch64ObjMax +} ELOONGARCH64_OBJECT_ID; + +/** A structure that describes MADT table-wide LoongArch64 information. + + ID: ELoongArch64ObjMadtInfo +*/ +typedef struct CmLoongArch64MadtInfo { + /// Address of the local interrupt controller. + UINT32 LocalApicAddress; + + /// MADT flags. + UINT32 Flags; +} CM_LOONGARCH64_MADT_INFO; + +/** A structure that describes a Core PIC. + + ID: ELoongArch64ObjCorePicInfo +*/ +typedef struct CmLoongArch64CorePicInfo { + /// PIC structure version. Currently, ACPI defines only version 1. + UINT8 Version; + + /// ACPI processor UID matching the processor device's _UID. + UINT32 AcpiProcessorUid; + + /// Physical processor ID. MAX_UINT32 is only valid for a disabled processor. + UINT32 CoreId; + + /// CORE PIC flags. BIT0 is Enabled; all other bits are reserved. + UINT32 Flags; +} CM_LOONGARCH64_CORE_PIC_INFO; + +/** A structure that describes a LIO PIC. + + ID: ELoongArch64ObjLioPicInfo +*/ +typedef struct CmLoongArch64LioPicInfo { + /// PIC structure version. Currently, ACPI defines only version 1. + UINT8 Version; + + /// Base address + UINT64 Address; + + /// Register space size + UINT16 Size; + + /// Cascade vector + UINT8 Cascade[2]; + + /// Cascade map + UINT32 CascadeMap[2]; +} CM_LOONGARCH64_LIO_PIC_INFO; + +/** A structure that describes a HT PIC. + + ID: ELoongArch64ObjHtPicInfo +*/ +typedef struct CmLoongArch64HtPicInfo { + /// PIC structure version. Currently, ACPI defines only version 1. + UINT8 Version; + + /// Base address + UINT64 Address; + + /// Register space size + UINT16 Size; + + /// Cascade vector + UINT8 Cascade[8]; +} CM_LOONGARCH64_HT_PIC_INFO; + +/** A structure that describes an EIO PIC. + + ID: ELoongArch64ObjEioPicInfo +*/ +typedef struct CmLoongArch64EioPicInfo { + /// PIC structure version. Currently, ACPI defines only version 1. + UINT8 Version; + + /// Cascade vector + UINT8 Cascade; + + /// Node ID + UINT8 Node; + + /// Node map + UINT64 NodeMap; +} CM_LOONGARCH64_EIO_PIC_INFO; + +/** A structure that describes a MSI PIC. + + ID: ELoongArch64ObjMsiPicInfo +*/ +typedef struct CmLoongArch64MsiPicInfo { + /// PIC structure version. Currently, ACPI defines only version 1. + UINT8 Version; + + /// MSI message address + UINT64 MsgAddress; + + /// MSI vector base + UINT32 Start; + + /// MSI vector count + UINT32 Count; +} CM_LOONGARCH64_MSI_PIC_INFO; + +/** A structure that describes a BIO PIC. + + ID: ELoongArch64ObjBioPicInfo +*/ +typedef struct CmLoongArch64BioPicInfo { + /// PIC structure version. Currently, ACPI defines only version 1. + UINT8 Version; + + /// Base address + UINT64 Address; + + /// Register space size + UINT16 Size; + + /// Controller ID + UINT16 Id; + + /// GSI base + UINT16 GsiBase; +} CM_LOONGARCH64_BIO_PIC_INFO; + +/** A structure that describes a LPC PIC. + + ID: ELoongArch64ObjLpcPicInfo +*/ +typedef struct CmLoongArch64LpcPicInfo { + /// PIC structure version. Currently, ACPI defines only version 1. + UINT8 Version; + + /// Base address + UINT64 Address; + + /// Register space size + UINT16 Size; + + /// Cascade vector + UINT8 Cascade; +} CM_LOONGARCH64_LPC_PIC_INFO; + +#pragma pack()