]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Library/BaseLib.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Include / Library / BaseLib.h
index 6aa0d972186e2101ca2b790caab3b6df03661c9d..8f2df76c29a303b156b10ba5ec86a20525989af2 100644 (file)
@@ -6,6 +6,7 @@ Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
 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
@@ -150,8 +151,81 @@ typedef struct {
 \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
@@ -4503,6 +4577,40 @@ CalculateCrc32 (
   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
@@ -4512,7 +4620,6 @@ CalculateCrc32 (
 \r
   @param  Context1        Context1 parameter passed into SwitchStack().\r
   @param  Context2        Context2 parameter passed into SwitchStack().\r
-\r
 **/\r
 typedef\r
 VOID\r
@@ -4759,6 +4866,72 @@ SpeculationBarrier (
   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