Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
Copyright (c) Microsoft Corporation.<BR>\r
Portions Copyright (c) 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
\r
#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
\r
+VOID\r
+RiscVSetSupervisorScratch (\r
+ IN UINT64\r
+ );\r
+\r
+UINT64\r
+RiscVGetSupervisorScratch (\r
+ VOID\r
+ );\r
+\r
+VOID\r
+RiscVSetSupervisorStvec (\r
+ IN UINT64\r
+ );\r
+\r
+UINT64\r
+RiscVGetSupervisorStvec (\r
+ VOID\r
+ );\r
+\r
+UINT64\r
+RiscVGetSupervisorTrapCause (\r
+ VOID\r
+ );\r
+\r
+VOID\r
+RiscVSetSupervisorAddressTranslationRegister (\r
+ IN UINT64\r
+ );\r
+\r
+UINT64\r
+RiscVReadTimer (\r
+ VOID\r
+ );\r
+\r
+VOID\r
+RiscVEnableTimerInterrupt (\r
+ VOID\r
+ );\r
+\r
+VOID\r
+RiscVDisableTimerInterrupt (\r
+ VOID\r
+ );\r
+\r
+VOID\r
+RiscVClearPendingTimerInterrupt (\r
+ VOID\r
+ );\r
+\r
#endif // defined (MDE_CPU_RISCV64)\r
\r
+#if defined (MDE_CPU_LOONGARCH64)\r
+///\r
+/// The LoongArch architecture context buffer used by SetJump() and LongJump()\r
+///\r
+typedef struct {\r
+ UINT64 S0;\r
+ UINT64 S1;\r
+ UINT64 S2;\r
+ UINT64 S3;\r
+ UINT64 S4;\r
+ UINT64 S5;\r
+ UINT64 S6;\r
+ UINT64 S7;\r
+ UINT64 S8;\r
+ UINT64 SP;\r
+ UINT64 FP;\r
+ UINT64 RA;\r
+} BASE_LIBRARY_JUMP_BUFFER;\r
+\r
+#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
+\r
+#endif // defined (MDE_CPU_LOONGARCH64)\r
+\r
//\r
// String Services\r
//\r
IN UINTN Length\r
);\r
\r
+/**\r
+ Calculates the CRC16-ANSI checksum of the given buffer.\r
+\r
+ @param[in] Buffer Pointer to the buffer.\r
+ @param[in] Length Length of the buffer, in bytes.\r
+ @param[in] InitialValue Initial value of the CRC.\r
+\r
+ @return The CRC16-ANSI checksum.\r
+**/\r
+UINT16\r
+EFIAPI\r
+CalculateCrc16Ansi (\r
+ IN CONST VOID *Buffer,\r
+ IN UINTN Length,\r
+ IN UINT16 InitialValue\r
+ );\r
+\r
+/**\r
+ Calculates the CRC32c checksum of the given buffer.\r
+\r
+ @param[in] Buffer Pointer to the buffer.\r
+ @param[in] Length Length of the buffer, in bytes.\r
+ @param[in] InitialValue Initial value of the CRC.\r
+\r
+ @return The CRC32c checksum.\r
+**/\r
+UINT32\r
+EFIAPI\r
+CalculateCrc32c (\r
+ IN CONST VOID *Buffer,\r
+ IN UINTN Length,\r
+ IN UINT32 InitialValue\r
+ );\r
+\r
//\r
// Base Library CPU Functions\r
//\r
\r
@param Context1 Context1 parameter passed into SwitchStack().\r
@param Context2 Context2 parameter passed into SwitchStack().\r
-\r
**/\r
typedef\r
VOID\r
VOID\r
);\r
\r
+#if defined (MDE_CPU_X64) || defined (MDE_CPU_IA32)\r
+\r
+/**\r
+ The TDCALL instruction causes a VM exit to the Intel TDX module. It is\r
+ used to call guest-side Intel TDX functions, either local or a TD exit\r
+ to the host VMM, as selected by Leaf.\r
+\r
+ @param[in] Leaf Leaf number of TDCALL instruction\r
+ @param[in] Arg1 Arg1\r
+ @param[in] Arg2 Arg2\r
+ @param[in] Arg3 Arg3\r
+ @param[in,out] Results Returned result of the Leaf function\r
+\r
+ @return 0 A successful call\r
+ @return Other See individual leaf functions\r
+**/\r
+UINTN\r
+EFIAPI\r
+TdCall (\r
+ IN UINT64 Leaf,\r
+ IN UINT64 Arg1,\r
+ IN UINT64 Arg2,\r
+ IN UINT64 Arg3,\r
+ IN OUT VOID *Results\r
+ );\r
+\r
+/**\r
+ TDVMALL is a leaf function 0 for TDCALL. It helps invoke services from the\r
+ host VMM to pass/receive information.\r
+\r
+ @param[in] Leaf Number of sub-functions\r
+ @param[in] Arg1 Arg1\r
+ @param[in] Arg2 Arg2\r
+ @param[in] Arg3 Arg3\r
+ @param[in] Arg4 Arg4\r
+ @param[in,out] Results Returned result of the sub-function\r
+\r
+ @return 0 A successful call\r
+ @return Other See individual sub-functions\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+TdVmCall (\r
+ IN UINT64 Leaf,\r
+ IN UINT64 Arg1,\r
+ IN UINT64 Arg2,\r
+ IN UINT64 Arg3,\r
+ IN UINT64 Arg4,\r
+ IN OUT VOID *Results\r
+ );\r
+\r
+/**\r
+ Probe if TD is enabled.\r
+\r
+ @return TRUE TD is enabled.\r
+ @return FALSE TD is not enabled.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+TdIsEnabled (\r
+ VOID\r
+ );\r
+\r
+#endif\r
+\r
#if defined (MDE_CPU_X64)\r
//\r
// The page size for the PVALIDATE instruction\r