mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
Merge a9fa6918d7 into cc9a0425a2
This commit is contained in:
commit
7bc1a677c3
7 changed files with 1423 additions and 0 deletions
|
|
@ -230,6 +230,11 @@
|
|||
}
|
||||
|
||||
[Components.LOONGARCH64]
|
||||
#
|
||||
# Generators (LoongArch64 specific)
|
||||
#
|
||||
DynamicTablesPkg/Library/Acpi/LoongArch64/AcpiMadtLibLoongArch64/AcpiMadtLibLoongArch64.inf
|
||||
|
||||
#
|
||||
# Dynamic Table Factory Dxe
|
||||
#
|
||||
|
|
@ -242,6 +247,8 @@
|
|||
NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf
|
||||
NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf
|
||||
NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSlitLib/AcpiSlitLib.inf
|
||||
# LoongArch64 specific
|
||||
NULL|DynamicTablesPkg/Library/Acpi/LoongArch64/AcpiMadtLibLoongArch64/AcpiMadtLibLoongArch64.inf
|
||||
|
||||
NULL|DynamicTablesPkg/Library/Smbios/SmbiosType0Lib/SmbiosType0Lib.inf
|
||||
NULL|DynamicTablesPkg/Library/Smbios/SmbiosType4Lib/SmbiosType4Lib.inf
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@
|
|||
"deviceid",
|
||||
"EArch",
|
||||
"edynamic",
|
||||
"eloongarch",
|
||||
"eventq",
|
||||
"EOBJECT",
|
||||
"gerror",
|
||||
|
|
|
|||
|
|
@ -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.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
|
|
@ -15,6 +16,7 @@
|
|||
|
||||
#include <ArchCommonNameSpaceObjects.h>
|
||||
#include <ArmNameSpaceObjects.h>
|
||||
#include <LoongArch64NameSpaceObjects.h>
|
||||
#include <RiscVNameSpaceObjects.h>
|
||||
#include <StandardNameSpaceObjects.h>
|
||||
#include <X64NameSpaceObjects.h>
|
||||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
179
DynamicTablesPkg/Include/LoongArch64NameSpaceObjects.h
Normal file
179
DynamicTablesPkg/Include/LoongArch64NameSpaceObjects.h
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
/** @file
|
||||
|
||||
Copyright (c) 2026, Loongson Technology Corporation Limited. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Glossary:
|
||||
- Cm or CM - Configuration Manager
|
||||
- Obj or OBJ - Object
|
||||
**/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AcpiObjects.h>
|
||||
#include <StandardNameSpaceObjects.h>
|
||||
|
||||
#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()
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
## @file
|
||||
# LoongArch64 MADT Table Generator
|
||||
#
|
||||
# Copyright (c) 2026, Loongson Technology Corporation Limited. All rights reserved.<BR>
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010019
|
||||
BASE_NAME = AcpiMadtLibLoongArch64
|
||||
FILE_GUID = 019B6DB8-92C5-4C96-9085-85DA15F5E568
|
||||
VERSION_STRING = 1.0
|
||||
MODULE_TYPE = DXE_DRIVER
|
||||
LIBRARY_CLASS = NULL|DXE_DRIVER
|
||||
CONSTRUCTOR = AcpiMadtLibConstructor
|
||||
DESTRUCTOR = AcpiMadtLibDestructor
|
||||
|
||||
[Sources]
|
||||
MadtGenerator.c
|
||||
|
||||
[Packages]
|
||||
DynamicTablesPkg/DynamicTablesPkg.dec
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
MemoryAllocationLib
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -4,6 +4,7 @@
|
|||
Copyright (c) 2021 - 2026, ARM Limited. All rights reserved.<BR>
|
||||
Copyright (C) 2024 - 2025 Advanced Micro Devices, Inc. All rights reserved.
|
||||
Copyright (c) 2024 - 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.<BR>
|
||||
Copyright (c) 2026, Loongson Technology Corporation Limited. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
|
@ -1836,6 +1837,93 @@ STATIC CONST CM_OBJ_PARSER_ARRAY RiscVNamespaceObjectParser[] = {
|
|||
CM_PARSER_ADD_OBJECT_RESERVED (ERiscVObjMax)
|
||||
};
|
||||
|
||||
/** A parser for ELoongArch64ObjMadtInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmLoongArch64MadtInfoParser[] = {
|
||||
{ "LocalApicAddress", 4, "0x%x", NULL },
|
||||
{ "Flags", 4, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for ELoongArch64ObjCorePicInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmLoongArch64CorePicInfoParser[] = {
|
||||
{ "Version", 1, "0x%x", NULL },
|
||||
{ "AcpiProcessorUid", 4, "0x%x", NULL },
|
||||
{ "CoreId", 4, "0x%x", NULL },
|
||||
{ "Flags", 4, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for ELoongArch64ObjLioPicInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmLoongArch64LioPicInfoParser[] = {
|
||||
{ "Version", 1, "0x%x", NULL },
|
||||
{ "Address", 8, "0x%llx", NULL },
|
||||
{ "Size", 2, "0x%x", NULL },
|
||||
{ "Cascade", sizeof (UINT8) * 2, NULL, HexDump },
|
||||
{ "CascadeMap", sizeof (UINT32) * 2, NULL, HexDump }
|
||||
};
|
||||
|
||||
/** A parser for ELoongArch64ObjHtPicInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmLoongArch64HtPicInfoParser[] = {
|
||||
{ "Version", 1, "0x%x", NULL },
|
||||
{ "Address", 8, "0x%llx", NULL },
|
||||
{ "Size", 2, "0x%x", NULL },
|
||||
{ "Cascade", sizeof (UINT8) * 8, NULL, HexDump }
|
||||
};
|
||||
|
||||
/** A parser for ELoongArch64ObjEioPicInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmLoongArch64EioPicInfoParser[] = {
|
||||
{ "Version", 1, "0x%x", NULL },
|
||||
{ "Cascade", 1, "0x%x", NULL },
|
||||
{ "Node", 1, "0x%x", NULL },
|
||||
{ "NodeMap", 8, "0x%llx", NULL }
|
||||
};
|
||||
|
||||
/** A parser for ELoongArch64ObjMsiPicInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmLoongArch64MsiPicInfoParser[] = {
|
||||
{ "Version", 1, "0x%x", NULL },
|
||||
{ "MsgAddress", 8, "0x%llx", NULL },
|
||||
{ "Start", 4, "0x%x", NULL },
|
||||
{ "Count", 4, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for ELoongArch64ObjBioPicInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmLoongArch64BioPicInfoParser[] = {
|
||||
{ "Version", 1, "0x%x", NULL },
|
||||
{ "Address", 8, "0x%llx", NULL },
|
||||
{ "Size", 2, "0x%x", NULL },
|
||||
{ "Id", 2, "0x%x", NULL },
|
||||
{ "GsiBase", 2, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for ELoongArch64ObjLpcPicInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmLoongArch64LpcPicInfoParser[] = {
|
||||
{ "Version", 1, "0x%x", NULL },
|
||||
{ "Address", 8, "0x%llx", NULL },
|
||||
{ "Size", 2, "0x%x", NULL },
|
||||
{ "Cascade", 1, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for LoongArch64 namespace objects.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER_ARRAY LoongArch64NamespaceObjectParser[] = {
|
||||
CM_PARSER_ADD_OBJECT_RESERVED (ELoongArch64ObjReserved),
|
||||
CM_PARSER_ADD_OBJECT (ELoongArch64ObjMadtInfo, CmLoongArch64MadtInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (ELoongArch64ObjCorePicInfo, CmLoongArch64CorePicInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (ELoongArch64ObjLioPicInfo, CmLoongArch64LioPicInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (ELoongArch64ObjHtPicInfo, CmLoongArch64HtPicInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (ELoongArch64ObjEioPicInfo, CmLoongArch64EioPicInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (ELoongArch64ObjMsiPicInfo, CmLoongArch64MsiPicInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (ELoongArch64ObjBioPicInfo, CmLoongArch64BioPicInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (ELoongArch64ObjLpcPicInfo, CmLoongArch64LpcPicInfoParser),
|
||||
CM_PARSER_ADD_OBJECT_RESERVED (ELoongArch64ObjMax)
|
||||
};
|
||||
|
||||
/** A parser for EStdObjCfgMgrInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER StdObjCfgMgrInfoParser[] = {
|
||||
|
|
@ -2174,6 +2262,21 @@ ParseCmObjDesc (
|
|||
ParserArray = &RiscVNamespaceObjectParser[ObjId];
|
||||
break;
|
||||
|
||||
case EObjNameSpaceLoongArch64:
|
||||
if (ObjId >= ELoongArch64ObjMax) {
|
||||
ASSERT (0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ObjId >= ARRAY_SIZE (LoongArch64NamespaceObjectParser)) {
|
||||
DEBUG ((DEBUG_ERROR, "ObjId 0x%x is missing from the LoongArch64NamespaceObjectParser array\n", ObjId));
|
||||
ASSERT (0);
|
||||
return;
|
||||
}
|
||||
|
||||
ParserArray = &LoongArch64NamespaceObjectParser[ObjId];
|
||||
break;
|
||||
|
||||
case EObjNameSpaceArchCommon:
|
||||
if (ObjId >= EArchCommonObjMax) {
|
||||
ASSERT (0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue