]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg/Include: LoongArch definitions.
authorChao Li <lichao@loongson.cn>
Tue, 6 Sep 2022 07:53:36 +0000 (15:53 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 14 Oct 2022 02:16:33 +0000 (02:16 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4053

Add LoongArch processor related definitions.

For the Http boot and PXE boot types seeing this URL section "Processor
Architecture Type" for the LOONGARCH values:
https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml

For definitions of PE/COFF and LOONGARCH relocation types, see the
"Machine Types" and "Basic Relocation Types" sections of this URL for
LOONGARCH values:
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format

For the register definitions of exceptions context, see the UEFI V2.10
18.2.2, 18.2.4 and 18.2.5 sections of this URL for LOONGARCH
definitions:
https://uefi.org/specs/UEFI/2.10/18_Protocols_Debugger_Support.html

Cc: 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>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
MdePkg/Include/IndustryStandard/PeImage.h
MdePkg/Include/Protocol/DebugSupport.h
MdePkg/Include/Protocol/PxeBaseCode.h
MdePkg/Include/Uefi/UefiBaseType.h
MdePkg/Include/Uefi/UefiSpec.h

index 3109dc20f8dd82769379b7d7c101d15f82033cf0..dd4cc25483bc4bcf7b9c2677526acd4f6e4492a0 100644 (file)
@@ -10,6 +10,7 @@
 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
 Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
 Portions Copyright (c) 2016 - 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>\r
+Portions Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>\r
 \r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
@@ -38,6 +39,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #define IMAGE_FILE_MACHINE_RISCV32         0x5032\r
 #define IMAGE_FILE_MACHINE_RISCV64         0x5064\r
 #define IMAGE_FILE_MACHINE_RISCV128        0x5128\r
+#define IMAGE_FILE_MACHINE_LOONGARCH32     0x6232\r
+#define IMAGE_FILE_MACHINE_LOONGARCH64     0x6264\r
 \r
 //\r
 // EXE file formats\r
@@ -503,6 +506,12 @@ typedef struct {
 #define EFI_IMAGE_REL_BASED_RISCV_LOW12I  7\r
 #define EFI_IMAGE_REL_BASED_RISCV_LOW12S  8\r
 \r
+//\r
+// Relocation types of LoongArch processor.\r
+//\r
+#define EFI_IMAGE_REL_BASED_LOONGARCH32_MARK_LA  8\r
+#define EFI_IMAGE_REL_BASED_LOONGARCH64_MARK_LA  8\r
+\r
 ///\r
 /// Line number format.\r
 ///\r
index ec5b92a5c505a8aa3c18c8e3e61a3955c1c934c4..2b0ae2d1577ba601c9d882d0790c998a477cf366 100644 (file)
@@ -654,17 +654,110 @@ typedef struct {
   UINT64    X31;\r
 } EFI_SYSTEM_CONTEXT_RISCV64;\r
 \r
+//\r
+// LoongArch processor exception types.\r
+//\r
+#define EXCEPT_LOONGARCH_INT   0\r
+#define EXCEPT_LOONGARCH_PIL   1\r
+#define EXCEPT_LOONGARCH_PIS   2\r
+#define EXCEPT_LOONGARCH_PIF   3\r
+#define EXCEPT_LOONGARCH_PME   4\r
+#define EXCEPT_LOONGARCH_PNR   5\r
+#define EXCEPT_LOONGARCH_PNX   6\r
+#define EXCEPT_LOONGARCH_PPI   7\r
+#define EXCEPT_LOONGARCH_ADE   8\r
+#define EXCEPT_LOONGARCH_ALE   9\r
+#define EXCEPT_LOONGARCH_BCE   10\r
+#define EXCEPT_LOONGARCH_SYS   11\r
+#define EXCEPT_LOONGARCH_BRK   12\r
+#define EXCEPT_LOONGARCH_INE   13\r
+#define EXCEPT_LOONGARCH_IPE   14\r
+#define EXCEPT_LOONGARCH_FPD   15\r
+#define EXCEPT_LOONGARCH_SXD   16\r
+#define EXCEPT_LOONGARCH_ASXD  17\r
+#define EXCEPT_LOONGARCH_FPE   18\r
+#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.\r
+\r
+//\r
+// LoongArch processor Interrupt types.\r
+//\r
+#define EXCEPT_LOONGARCH_INT_SIP0   0\r
+#define EXCEPT_LOONGARCH_INT_SIP1   1\r
+#define EXCEPT_LOONGARCH_INT_IP0    2\r
+#define EXCEPT_LOONGARCH_INT_IP1    3\r
+#define EXCEPT_LOONGARCH_INT_IP2    4\r
+#define EXCEPT_LOONGARCH_INT_IP3    5\r
+#define EXCEPT_LOONGARCH_INT_IP4    6\r
+#define EXCEPT_LOONGARCH_INT_IP5    7\r
+#define EXCEPT_LOONGARCH_INT_IP6    8\r
+#define EXCEPT_LOONGARCH_INT_IP7    9\r
+#define EXCEPT_LOONGARCH_INT_PMC    10\r
+#define EXCEPT_LOONGARCH_INT_TIMER  11\r
+#define EXCEPT_LOONGARCH_INT_IPI    12\r
+\r
+//\r
+// For coding convenience, define the maximum valid\r
+// LoongArch interrupt.\r
+//\r
+#define MAX_LOONGARCH_INTERRUPT  14\r
+\r
+typedef struct {\r
+  UINT64    R0;\r
+  UINT64    R1;\r
+  UINT64    R2;\r
+  UINT64    R3;\r
+  UINT64    R4;\r
+  UINT64    R5;\r
+  UINT64    R6;\r
+  UINT64    R7;\r
+  UINT64    R8;\r
+  UINT64    R9;\r
+  UINT64    R10;\r
+  UINT64    R11;\r
+  UINT64    R12;\r
+  UINT64    R13;\r
+  UINT64    R14;\r
+  UINT64    R15;\r
+  UINT64    R16;\r
+  UINT64    R17;\r
+  UINT64    R18;\r
+  UINT64    R19;\r
+  UINT64    R20;\r
+  UINT64    R21;\r
+  UINT64    R22;\r
+  UINT64    R23;\r
+  UINT64    R24;\r
+  UINT64    R25;\r
+  UINT64    R26;\r
+  UINT64    R27;\r
+  UINT64    R28;\r
+  UINT64    R29;\r
+  UINT64    R30;\r
+  UINT64    R31;\r
+\r
+  UINT64    CRMD;  // CuRrent MoDe information\r
+  UINT64    PRMD;  // PRe-exception MoDe information\r
+  UINT64    EUEN;  // Extended component Unit ENable\r
+  UINT64    MISC;  // MISCellaneous controller\r
+  UINT64    ECFG;  // Exception ConFiGuration\r
+  UINT64    ESTAT; // Exception STATus\r
+  UINT64    ERA;   // Exception Return Address\r
+  UINT64    BADV;  // BAD Virtual address\r
+  UINT64    BADI;  // BAD Instruction\r
+} EFI_SYSTEM_CONTEXT_LOONGARCH64;\r
+\r
 ///\r
 /// Universal EFI_SYSTEM_CONTEXT definition.\r
 ///\r
 typedef union {\r
-  EFI_SYSTEM_CONTEXT_EBC        *SystemContextEbc;\r
-  EFI_SYSTEM_CONTEXT_IA32       *SystemContextIa32;\r
-  EFI_SYSTEM_CONTEXT_X64        *SystemContextX64;\r
-  EFI_SYSTEM_CONTEXT_IPF        *SystemContextIpf;\r
-  EFI_SYSTEM_CONTEXT_ARM        *SystemContextArm;\r
-  EFI_SYSTEM_CONTEXT_AARCH64    *SystemContextAArch64;\r
-  EFI_SYSTEM_CONTEXT_RISCV64    *SystemContextRiscV64;\r
+  EFI_SYSTEM_CONTEXT_EBC            *SystemContextEbc;\r
+  EFI_SYSTEM_CONTEXT_IA32           *SystemContextIa32;\r
+  EFI_SYSTEM_CONTEXT_X64            *SystemContextX64;\r
+  EFI_SYSTEM_CONTEXT_IPF            *SystemContextIpf;\r
+  EFI_SYSTEM_CONTEXT_ARM            *SystemContextArm;\r
+  EFI_SYSTEM_CONTEXT_AARCH64        *SystemContextAArch64;\r
+  EFI_SYSTEM_CONTEXT_RISCV64        *SystemContextRiscV64;\r
+  EFI_SYSTEM_CONTEXT_LOONGARCH64    *SystemContextLoongArch64;\r
 } EFI_SYSTEM_CONTEXT;\r
 \r
 //\r
index 11872d602d2f2bf29b63d56393af3411577f1d8b..6787941a5d7799bfdd13f204b6a90150704f8d1e 100644 (file)
@@ -4,6 +4,7 @@
 \r
 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
 Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>\r
+Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>\r
 \r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
@@ -158,6 +159,8 @@ typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT;
 #define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE  0x000B\r
 #elif defined (MDE_CPU_RISCV64)\r
 #define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE  0x001B\r
+#elif defined (MDE_CPU_LOONGARCH64)\r
+#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE  0x0027\r
 #endif\r
 \r
 ///\r
index 4a34ce8e2534837a5221f41ef8b97b4fcebe2bb3..83975a08eb4c2faf31787af26db51d8edfe4bbff 100644 (file)
@@ -4,6 +4,7 @@
 Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>\r
 Portions copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR>\r
 Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>\r
+Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>\r
 \r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
@@ -246,6 +247,12 @@ typedef union {
 #define EFI_IMAGE_MACHINE_RISCV64   0x5064\r
 #define EFI_IMAGE_MACHINE_RISCV128  0x5128\r
 \r
+///\r
+/// PE32+ Machine type for LoongArch 32/64 images.\r
+///\r
+#define EFI_IMAGE_MACHINE_LOONGARCH32  0x6232\r
+#define EFI_IMAGE_MACHINE_LOONGARCH64  0x6264\r
+\r
 #if !defined (EFI_IMAGE_MACHINE_TYPE_VALUE) && !defined (EFI_IMAGE_MACHINE_CROSS_TYPE_VALUE)\r
   #if   defined (MDE_CPU_IA32)\r
 \r
@@ -278,6 +285,13 @@ typedef union {
 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
   ((Machine) == EFI_IMAGE_MACHINE_RISCV64)\r
 \r
+#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine)  (FALSE)\r
+\r
+  #elif defined (MDE_CPU_LOONGARCH64)\r
+\r
+#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
+    ((Machine) == EFI_IMAGE_MACHINE_LOONGARCH64)\r
+\r
 #define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine)  (FALSE)\r
 \r
   #elif defined (MDE_CPU_EBC)\r
index 2b38b100f6a56a4d44d1b2365b0d63f771840328..3abebbb8d90484c2273a31bed1b47d58e537fd1d 100644 (file)
@@ -7,6 +7,7 @@
 \r
 Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>\r
 Portions Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>\r
+Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>\r
 \r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
@@ -2195,12 +2196,13 @@ typedef struct {
 //\r
 // EFI File location to boot from on removable media devices\r
 //\r
-#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA32     L"\\EFI\\BOOT\\BOOTIA32.EFI"\r
-#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA64     L"\\EFI\\BOOT\\BOOTIA64.EFI"\r
-#define EFI_REMOVABLE_MEDIA_FILE_NAME_X64      L"\\EFI\\BOOT\\BOOTX64.EFI"\r
-#define EFI_REMOVABLE_MEDIA_FILE_NAME_ARM      L"\\EFI\\BOOT\\BOOTARM.EFI"\r
-#define EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64  L"\\EFI\\BOOT\\BOOTAA64.EFI"\r
-#define EFI_REMOVABLE_MEDIA_FILE_NAME_RISCV64  L"\\EFI\\BOOT\\BOOTRISCV64.EFI"\r
+#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA32         L"\\EFI\\BOOT\\BOOTIA32.EFI"\r
+#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA64         L"\\EFI\\BOOT\\BOOTIA64.EFI"\r
+#define EFI_REMOVABLE_MEDIA_FILE_NAME_X64          L"\\EFI\\BOOT\\BOOTX64.EFI"\r
+#define EFI_REMOVABLE_MEDIA_FILE_NAME_ARM          L"\\EFI\\BOOT\\BOOTARM.EFI"\r
+#define EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64      L"\\EFI\\BOOT\\BOOTAA64.EFI"\r
+#define EFI_REMOVABLE_MEDIA_FILE_NAME_RISCV64      L"\\EFI\\BOOT\\BOOTRISCV64.EFI"\r
+#define EFI_REMOVABLE_MEDIA_FILE_NAME_LOONGARCH64  L"\\EFI\\BOOT\\BOOTLOONGARCH64.EFI"\r
 \r
 #if !defined (EFI_REMOVABLE_MEDIA_FILE_NAME)\r
   #if   defined (MDE_CPU_IA32)\r
@@ -2214,6 +2216,8 @@ typedef struct {
 #define EFI_REMOVABLE_MEDIA_FILE_NAME  EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64\r
   #elif defined (MDE_CPU_RISCV64)\r
 #define EFI_REMOVABLE_MEDIA_FILE_NAME  EFI_REMOVABLE_MEDIA_FILE_NAME_RISCV64\r
+  #elif defined (MDE_CPU_LOONGARCH64)\r
+#define EFI_REMOVABLE_MEDIA_FILE_NAME  EFI_REMOVABLE_MEDIA_FILE_NAME_LOONGARCH64\r
   #else\r
     #error Unknown Processor Type\r
   #endif\r