Thanks,
Chao
--------
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4053Add LoongArch processor related definitions.For the Http boot and PXE boot types seeing this URL section "ProcessorArchitecture Type" for the LOONGARCH values:https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtmlFor definitions of PE/COFF and LOONGARCH relocation types, see the"Machine Types" and "Basic Relocation Types" sections of this URL forLOONGARCH values:https://docs.microsoft.com/en-us/windows/win32/debug/pe-formatFor the register definitions of exceptions context, see the UEFI V2.1018.2.2, 18.2.4 and 18.2.5 sections of this URL for LOONGARCHdefinitions:https://uefi.org/specs/UEFI/2.10/18_Protocols_Debugger_Support.htmlCc: Michael D Kinney <michael.d.kinney@intel.com>Cc: Liming Gao <gaoliming@byosoft.com.cn>Cc: Zhiguang Liu <zhiguang.liu@intel.com>Signed-off-by: Chao Li <lichao@loongson.cn>---MdePkg/Include/IndustryStandard/PeImage.h | 9 ++MdePkg/Include/Protocol/DebugSupport.h | 107 ++++++++++++++++++++--MdePkg/Include/Protocol/PxeBaseCode.h | 3 +MdePkg/Include/Uefi/UefiBaseType.h | 14 +++MdePkg/Include/Uefi/UefiSpec.h | 16 ++--5 files changed, 136 insertions(+), 13 deletions(-)diff --git a/MdePkg/Include/IndustryStandard/PeImage.h b/MdePkg/Include/IndustryStandard/PeImage.hindex 3109dc20f8..dd4cc25483 100644--- a/MdePkg/Include/IndustryStandard/PeImage.h+++ b/MdePkg/Include/IndustryStandard/PeImage.h@@ -10,6 +10,7 @@Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>Portions Copyright (c) 2016 - 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>+Portions Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>SPDX-License-Identifier: BSD-2-Clause-Patent@@ -38,6 +39,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent#define IMAGE_FILE_MACHINE_RISCV32 0x5032#define IMAGE_FILE_MACHINE_RISCV64 0x5064#define IMAGE_FILE_MACHINE_RISCV128 0x5128+#define IMAGE_FILE_MACHINE_LOONGARCH32 0x6232+#define IMAGE_FILE_MACHINE_LOONGARCH64 0x6264//// EXE file formats@@ -503,6 +506,12 @@ typedef struct {#define EFI_IMAGE_REL_BASED_RISCV_LOW12I 7#define EFI_IMAGE_REL_BASED_RISCV_LOW12S 8+//+// Relocation types of LoongArch processor.+//+#define EFI_IMAGE_REL_BASED_LOONGARCH32_MARK_LA 8+#define EFI_IMAGE_REL_BASED_LOONGARCH64_MARK_LA 8+////// Line number format.///diff --git a/MdePkg/Include/Protocol/DebugSupport.h b/MdePkg/Include/Protocol/DebugSupport.hindex ec5b92a5c5..2b0ae2d157 100644--- a/MdePkg/Include/Protocol/DebugSupport.h+++ b/MdePkg/Include/Protocol/DebugSupport.h@@ -654,17 +654,110 @@ typedef struct {UINT64 X31;} EFI_SYSTEM_CONTEXT_RISCV64;+//+// LoongArch processor exception types.+//+#define EXCEPT_LOONGARCH_INT 0+#define EXCEPT_LOONGARCH_PIL 1+#define EXCEPT_LOONGARCH_PIS 2+#define EXCEPT_LOONGARCH_PIF 3+#define EXCEPT_LOONGARCH_PME 4+#define EXCEPT_LOONGARCH_PNR 5+#define EXCEPT_LOONGARCH_PNX 6+#define EXCEPT_LOONGARCH_PPI 7+#define EXCEPT_LOONGARCH_ADE 8+#define EXCEPT_LOONGARCH_ALE 9+#define EXCEPT_LOONGARCH_BCE 10+#define EXCEPT_LOONGARCH_SYS 11+#define EXCEPT_LOONGARCH_BRK 12+#define EXCEPT_LOONGARCH_INE 13+#define EXCEPT_LOONGARCH_IPE 14+#define EXCEPT_LOONGARCH_FPD 15+#define EXCEPT_LOONGARCH_SXD 16+#define EXCEPT_LOONGARCH_ASXD 17+#define EXCEPT_LOONGARCH_FPE 18+#define EXCEPT_LOONGARCH_TBR 64 // For code only, there is no such type in the ISA spec, the TLB refill is defined for an independent exception.++//+// LoongArch processor Interrupt types.+//+#define EXCEPT_LOONGARCH_INT_SIP0 0+#define EXCEPT_LOONGARCH_INT_SIP1 1+#define EXCEPT_LOONGARCH_INT_IP0 2+#define EXCEPT_LOONGARCH_INT_IP1 3+#define EXCEPT_LOONGARCH_INT_IP2 4+#define EXCEPT_LOONGARCH_INT_IP3 5+#define EXCEPT_LOONGARCH_INT_IP4 6+#define EXCEPT_LOONGARCH_INT_IP5 7+#define EXCEPT_LOONGARCH_INT_IP6 8+#define EXCEPT_LOONGARCH_INT_IP7 9+#define EXCEPT_LOONGARCH_INT_PMC 10+#define EXCEPT_LOONGARCH_INT_TIMER 11+#define EXCEPT_LOONGARCH_INT_IPI 12++//+// For coding convenience, define the maximum valid+// LoongArch interrupt.+//+#define MAX_LOONGARCH_INTERRUPT 14++typedef struct {+ UINT64 R0;+ UINT64 R1;+ UINT64 R2;+ UINT64 R3;+ UINT64 R4;+ UINT64 R5;+ UINT64 R6;+ UINT64 R7;+ UINT64 R8;+ UINT64 R9;+ UINT64 R10;+ UINT64 R11;+ UINT64 R12;+ UINT64 R13;+ UINT64 R14;+ UINT64 R15;+ UINT64 R16;+ UINT64 R17;+ UINT64 R18;+ UINT64 R19;+ UINT64 R20;+ UINT64 R21;+ UINT64 R22;+ UINT64 R23;+ UINT64 R24;+ UINT64 R25;+ UINT64 R26;+ UINT64 R27;+ UINT64 R28;+ UINT64 R29;+ UINT64 R30;+ UINT64 R31;++ UINT64 CRMD; // CuRrent MoDe information+ UINT64 PRMD; // PRe-exception MoDe information+ UINT64 EUEN; // Extended component Unit ENable+ UINT64 MISC; // MISCellaneous controller+ UINT64 ECFG; // Exception ConFiGuration+ UINT64 ESTAT; // Exception STATus+ UINT64 ERA; // Exception Return Address+ UINT64 BADV; // BAD Virtual address+ UINT64 BADI; // BAD Instruction+} EFI_SYSTEM_CONTEXT_LOONGARCH64;+////// Universal EFI_SYSTEM_CONTEXT definition.///typedef union {- EFI_SYSTEM_CONTEXT_EBC *SystemContextEbc;- EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32;- EFI_SYSTEM_CONTEXT_X64 *SystemContextX64;- EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf;- EFI_SYSTEM_CONTEXT_ARM *SystemContextArm;- EFI_SYSTEM_CONTEXT_AARCH64 *SystemContextAArch64;- EFI_SYSTEM_CONTEXT_RISCV64 *SystemContextRiscV64;+ EFI_SYSTEM_CONTEXT_EBC *SystemContextEbc;+ EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32;+ EFI_SYSTEM_CONTEXT_X64 *SystemContextX64;+ EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf;+ EFI_SYSTEM_CONTEXT_ARM *SystemContextArm;+ EFI_SYSTEM_CONTEXT_AARCH64 *SystemContextAArch64;+ EFI_SYSTEM_CONTEXT_RISCV64 *SystemContextRiscV64;+ EFI_SYSTEM_CONTEXT_LOONGARCH64 *SystemContextLoongArch64;} EFI_SYSTEM_CONTEXT;//diff --git a/MdePkg/Include/Protocol/PxeBaseCode.h b/MdePkg/Include/Protocol/PxeBaseCode.hindex 11872d602d..6787941a5d 100644--- a/MdePkg/Include/Protocol/PxeBaseCode.h+++ b/MdePkg/Include/Protocol/PxeBaseCode.h@@ -4,6 +4,7 @@Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>+Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>SPDX-License-Identifier: BSD-2-Clause-Patent@@ -158,6 +159,8 @@ typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT;#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x000B#elif defined (MDE_CPU_RISCV64)#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x001B+#elif defined (MDE_CPU_LOONGARCH64)+#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x0027#endif///diff --git a/MdePkg/Include/Uefi/UefiBaseType.h b/MdePkg/Include/Uefi/UefiBaseType.hindex 4a34ce8e25..83975a08eb 100644--- a/MdePkg/Include/Uefi/UefiBaseType.h+++ b/MdePkg/Include/Uefi/UefiBaseType.h@@ -4,6 +4,7 @@Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>Portions copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR>Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>+Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>SPDX-License-Identifier: BSD-2-Clause-Patent@@ -246,6 +247,12 @@ typedef union {#define EFI_IMAGE_MACHINE_RISCV64 0x5064#define EFI_IMAGE_MACHINE_RISCV128 0x5128+///+/// PE32+ Machine type for LoongArch 32/64 images.+///+#define EFI_IMAGE_MACHINE_LOONGARCH32 0x6232+#define EFI_IMAGE_MACHINE_LOONGARCH64 0x6264+#if !defined (EFI_IMAGE_MACHINE_TYPE_VALUE) && !defined (EFI_IMAGE_MACHINE_CROSS_TYPE_VALUE)#if defined (MDE_CPU_IA32)@@ -278,6 +285,13 @@ typedef union {#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \((Machine) == EFI_IMAGE_MACHINE_RISCV64)+#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE)++ #elif defined (MDE_CPU_LOONGARCH64)++#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \+ ((Machine) == EFI_IMAGE_MACHINE_LOONGARCH64)+#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE)#elif defined (MDE_CPU_EBC)diff --git a/MdePkg/Include/Uefi/UefiSpec.h b/MdePkg/Include/Uefi/UefiSpec.hindex 2b38b100f6..3abebbb8d9 100644--- a/MdePkg/Include/Uefi/UefiSpec.h+++ b/MdePkg/Include/Uefi/UefiSpec.h@@ -7,6 +7,7 @@Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>Portions Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>+Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>SPDX-License-Identifier: BSD-2-Clause-Patent@@ -2195,12 +2196,13 @@ typedef struct {//// EFI File location to boot from on removable media devices//-#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA32 L"\\EFI\\BOOT\\BOOTIA32.EFI"-#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA64 L"\\EFI\\BOOT\\BOOTIA64.EFI"-#define EFI_REMOVABLE_MEDIA_FILE_NAME_X64 L"\\EFI\\BOOT\\BOOTX64.EFI"-#define EFI_REMOVABLE_MEDIA_FILE_NAME_ARM L"\\EFI\\BOOT\\BOOTARM.EFI"-#define EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64 L"\\EFI\\BOOT\\BOOTAA64.EFI"-#define EFI_REMOVABLE_MEDIA_FILE_NAME_RISCV64 L"\\EFI\\BOOT\\BOOTRISCV64.EFI"+#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA32 L"\\EFI\\BOOT\\BOOTIA32.EFI"+#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA64 L"\\EFI\\BOOT\\BOOTIA64.EFI"+#define EFI_REMOVABLE_MEDIA_FILE_NAME_X64 L"\\EFI\\BOOT\\BOOTX64.EFI"+#define EFI_REMOVABLE_MEDIA_FILE_NAME_ARM L"\\EFI\\BOOT\\BOOTARM.EFI"+#define EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64 L"\\EFI\\BOOT\\BOOTAA64.EFI"+#define EFI_REMOVABLE_MEDIA_FILE_NAME_RISCV64 L"\\EFI\\BOOT\\BOOTRISCV64.EFI"+#define EFI_REMOVABLE_MEDIA_FILE_NAME_LOONGARCH64 L"\\EFI\\BOOT\\BOOTLOONGARCH64.EFI"#if !defined (EFI_REMOVABLE_MEDIA_FILE_NAME)#if defined (MDE_CPU_IA32)@@ -2214,6 +2216,8 @@ typedef struct {#define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64#elif defined (MDE_CPU_RISCV64)#define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_RISCV64+ #elif defined (MDE_CPU_LOONGARCH64)+#define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_LOONGARCH64#else#error Unknown Processor Type#endif--2.27.0