Provides string functions, linked list functions, math functions, synchronization\r
functions, file path functions, and CPU architecture-specific functions.\r
\r
-Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>\r
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
/// The IA-32 architecture context buffer used by SetJump() and LongJump().\r
///\r
typedef struct {\r
- UINT32 Ebx;\r
- UINT32 Esi;\r
- UINT32 Edi;\r
- UINT32 Ebp;\r
- UINT32 Esp;\r
- UINT32 Eip;\r
- UINT32 Ssp;\r
+ UINT32 Ebx;\r
+ UINT32 Esi;\r
+ UINT32 Edi;\r
+ UINT32 Ebp;\r
+ UINT32 Esp;\r
+ UINT32 Eip;\r
+ UINT32 Ssp;\r
} BASE_LIBRARY_JUMP_BUFFER;\r
\r
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 4\r
+#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 4\r
\r
#endif // defined (MDE_CPU_IA32)\r
\r
/// The x64 architecture context buffer used by SetJump() and LongJump().\r
///\r
typedef struct {\r
- UINT64 Rbx;\r
- UINT64 Rsp;\r
- UINT64 Rbp;\r
- UINT64 Rdi;\r
- UINT64 Rsi;\r
- UINT64 R12;\r
- UINT64 R13;\r
- UINT64 R14;\r
- UINT64 R15;\r
- UINT64 Rip;\r
- UINT64 MxCsr;\r
- UINT8 XmmBuffer[160]; ///< XMM6-XMM15.\r
- UINT64 Ssp;\r
+ UINT64 Rbx;\r
+ UINT64 Rsp;\r
+ UINT64 Rbp;\r
+ UINT64 Rdi;\r
+ UINT64 Rsi;\r
+ UINT64 R12;\r
+ UINT64 R13;\r
+ UINT64 R14;\r
+ UINT64 R15;\r
+ UINT64 Rip;\r
+ UINT64 MxCsr;\r
+ UINT8 XmmBuffer[160]; ///< XMM6-XMM15.\r
+ UINT64 Ssp;\r
} BASE_LIBRARY_JUMP_BUFFER;\r
\r
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
+#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
\r
#endif // defined (MDE_CPU_X64)\r
\r
/// The EBC context buffer used by SetJump() and LongJump().\r
///\r
typedef struct {\r
- UINT64 R0;\r
- UINT64 R1;\r
- UINT64 R2;\r
- UINT64 R3;\r
- UINT64 IP;\r
+ UINT64 R0;\r
+ UINT64 R1;\r
+ UINT64 R2;\r
+ UINT64 R3;\r
+ UINT64 IP;\r
} BASE_LIBRARY_JUMP_BUFFER;\r
\r
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
+#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
\r
#endif // defined (MDE_CPU_EBC)\r
\r
UINT32 R14;\r
} BASE_LIBRARY_JUMP_BUFFER;\r
\r
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 4\r
+#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 4\r
\r
-#endif // defined (MDE_CPU_ARM)\r
+#endif // defined (MDE_CPU_ARM)\r
\r
#if defined (MDE_CPU_AARCH64)\r
typedef struct {\r
UINT64 D15;\r
} BASE_LIBRARY_JUMP_BUFFER;\r
\r
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
+#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
\r
-#endif // defined (MDE_CPU_AARCH64)\r
+#endif // defined (MDE_CPU_AARCH64)\r
\r
#if defined (MDE_CPU_RISCV64)\r
///\r
/// The RISC-V architecture context buffer used by SetJump() and LongJump().\r
///\r
typedef struct {\r
- UINT64 RA;\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 S9;\r
- UINT64 S10;\r
- UINT64 S11;\r
- UINT64 SP;\r
+ UINT64 RA;\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 S9;\r
+ UINT64 S10;\r
+ UINT64 S11;\r
+ UINT64 SP;\r
} BASE_LIBRARY_JUMP_BUFFER;\r
\r
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\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
\r
-\r
/**\r
Returns the length of a Null-terminated Unicode string.\r
\r
UINTN\r
EFIAPI\r
StrnLenS (\r
- IN CONST CHAR16 *String,\r
- IN UINTN MaxSize\r
+ IN CONST CHAR16 *String,\r
+ IN UINTN MaxSize\r
);\r
\r
/**\r
UINTN\r
EFIAPI\r
StrnSizeS (\r
- IN CONST CHAR16 *String,\r
- IN UINTN MaxSize\r
+ IN CONST CHAR16 *String,\r
+ IN UINTN MaxSize\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrCpyS (\r
- OUT CHAR16 *Destination,\r
- IN UINTN DestMax,\r
- IN CONST CHAR16 *Source\r
+ OUT CHAR16 *Destination,\r
+ IN UINTN DestMax,\r
+ IN CONST CHAR16 *Source\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrnCpyS (\r
- OUT CHAR16 *Destination,\r
- IN UINTN DestMax,\r
- IN CONST CHAR16 *Source,\r
- IN UINTN Length\r
+ OUT CHAR16 *Destination,\r
+ IN UINTN DestMax,\r
+ IN CONST CHAR16 *Source,\r
+ IN UINTN Length\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrCatS (\r
- IN OUT CHAR16 *Destination,\r
- IN UINTN DestMax,\r
- IN CONST CHAR16 *Source\r
+ IN OUT CHAR16 *Destination,\r
+ IN UINTN DestMax,\r
+ IN CONST CHAR16 *Source\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrnCatS (\r
- IN OUT CHAR16 *Destination,\r
- IN UINTN DestMax,\r
- IN CONST CHAR16 *Source,\r
- IN UINTN Length\r
+ IN OUT CHAR16 *Destination,\r
+ IN UINTN DestMax,\r
+ IN CONST CHAR16 *Source,\r
+ IN UINTN Length\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrDecimalToUintnS (\r
- IN CONST CHAR16 *String,\r
- OUT CHAR16 **EndPointer, OPTIONAL\r
- OUT UINTN *Data\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer OPTIONAL,\r
+ OUT UINTN *Data\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrDecimalToUint64S (\r
- IN CONST CHAR16 *String,\r
- OUT CHAR16 **EndPointer, OPTIONAL\r
- OUT UINT64 *Data\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer OPTIONAL,\r
+ OUT UINT64 *Data\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrHexToUintnS (\r
- IN CONST CHAR16 *String,\r
- OUT CHAR16 **EndPointer, OPTIONAL\r
- OUT UINTN *Data\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer OPTIONAL,\r
+ OUT UINTN *Data\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrHexToUint64S (\r
- IN CONST CHAR16 *String,\r
- OUT CHAR16 **EndPointer, OPTIONAL\r
- OUT UINT64 *Data\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer OPTIONAL,\r
+ OUT UINT64 *Data\r
);\r
\r
/**\r
UINTN\r
EFIAPI\r
AsciiStrnLenS (\r
- IN CONST CHAR8 *String,\r
- IN UINTN MaxSize\r
+ IN CONST CHAR8 *String,\r
+ IN UINTN MaxSize\r
);\r
\r
/**\r
UINTN\r
EFIAPI\r
AsciiStrnSizeS (\r
- IN CONST CHAR8 *String,\r
- IN UINTN MaxSize\r
+ IN CONST CHAR8 *String,\r
+ IN UINTN MaxSize\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrDecimalToUintnS (\r
- IN CONST CHAR8 *String,\r
- OUT CHAR8 **EndPointer, OPTIONAL\r
- OUT UINTN *Data\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer OPTIONAL,\r
+ OUT UINTN *Data\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrDecimalToUint64S (\r
- IN CONST CHAR8 *String,\r
- OUT CHAR8 **EndPointer, OPTIONAL\r
- OUT UINT64 *Data\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer OPTIONAL,\r
+ OUT UINT64 *Data\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrHexToUintnS (\r
- IN CONST CHAR8 *String,\r
- OUT CHAR8 **EndPointer, OPTIONAL\r
- OUT UINTN *Data\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer OPTIONAL,\r
+ OUT UINTN *Data\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrHexToUint64S (\r
- IN CONST CHAR8 *String,\r
- OUT CHAR8 **EndPointer, OPTIONAL\r
- OUT UINT64 *Data\r
- );\r
-\r
-\r
-#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Copies one Null-terminated Unicode string to another Null-terminated Unicode\r
- string and returns the new Unicode string.\r
-\r
- This function copies the contents of the Unicode string Source to the Unicode\r
- string Destination, and returns Destination. If Source and Destination\r
- overlap, then the results are undefined.\r
-\r
- If Destination is NULL, then ASSERT().\r
- If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
- If Source is NULL, then ASSERT().\r
- If Source is not aligned on a 16-bit boundary, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
- PcdMaximumUnicodeStringLength Unicode characters not including the\r
- Null-terminator, then ASSERT().\r
-\r
- @param Destination The pointer to a Null-terminated Unicode string.\r
- @param Source The pointer to a Null-terminated Unicode string.\r
-\r
- @return Destination.\r
-\r
-**/\r
-CHAR16 *\r
-EFIAPI\r
-StrCpy (\r
- OUT CHAR16 *Destination,\r
- IN CONST CHAR16 *Source\r
- );\r
-\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Copies up to a specified length from one Null-terminated Unicode string to\r
- another Null-terminated Unicode string and returns the new Unicode string.\r
-\r
- This function copies the contents of the Unicode string Source to the Unicode\r
- string Destination, and returns Destination. At most, Length Unicode\r
- characters are copied from Source to Destination. If Length is 0, then\r
- Destination is returned unmodified. If Length is greater that the number of\r
- Unicode characters in Source, then Destination is padded with Null Unicode\r
- characters. If Source and Destination overlap, then the results are\r
- undefined.\r
-\r
- If Length > 0 and Destination is NULL, then ASSERT().\r
- If Length > 0 and Destination is not aligned on a 16-bit boundary, then ASSERT().\r
- If Length > 0 and Source is NULL, then ASSERT().\r
- If Length > 0 and Source is not aligned on a 16-bit boundary, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Length is greater than\r
- PcdMaximumUnicodeStringLength, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
- PcdMaximumUnicodeStringLength Unicode characters, not including the Null-terminator,\r
- then ASSERT().\r
-\r
- @param Destination The pointer to a Null-terminated Unicode string.\r
- @param Source The pointer to a Null-terminated Unicode string.\r
- @param Length The maximum number of Unicode characters to copy.\r
-\r
- @return Destination.\r
-\r
-**/\r
-CHAR16 *\r
-EFIAPI\r
-StrnCpy (\r
- OUT CHAR16 *Destination,\r
- IN CONST CHAR16 *Source,\r
- IN UINTN Length\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer OPTIONAL,\r
+ OUT UINT64 *Data\r
);\r
-#endif // !defined (DISABLE_NEW_DEPRECATED_INTERFACES)\r
\r
/**\r
Returns the length of a Null-terminated Unicode string.\r
UINTN\r
EFIAPI\r
StrLen (\r
- IN CONST CHAR16 *String\r
+ IN CONST CHAR16 *String\r
);\r
\r
-\r
/**\r
Returns the size of a Null-terminated Unicode string in bytes, including the\r
Null terminator.\r
UINTN\r
EFIAPI\r
StrSize (\r
- IN CONST CHAR16 *String\r
+ IN CONST CHAR16 *String\r
);\r
\r
-\r
/**\r
Compares two Null-terminated Unicode strings, and returns the difference\r
between the first mismatched Unicode characters.\r
INTN\r
EFIAPI\r
StrCmp (\r
- IN CONST CHAR16 *FirstString,\r
- IN CONST CHAR16 *SecondString\r
+ IN CONST CHAR16 *FirstString,\r
+ IN CONST CHAR16 *SecondString\r
);\r
\r
-\r
/**\r
Compares up to a specified length the contents of two Null-terminated Unicode strings,\r
and returns the difference between the first mismatched Unicode characters.\r
INTN\r
EFIAPI\r
StrnCmp (\r
- IN CONST CHAR16 *FirstString,\r
- IN CONST CHAR16 *SecondString,\r
- IN UINTN Length\r
- );\r
-\r
-\r
-#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Concatenates one Null-terminated Unicode string to another Null-terminated\r
- Unicode string, and returns the concatenated Unicode string.\r
-\r
- This function concatenates two Null-terminated Unicode strings. The contents\r
- of Null-terminated Unicode string Source are concatenated to the end of\r
- Null-terminated Unicode string Destination. The Null-terminated concatenated\r
- Unicode String is returned. If Source and Destination overlap, then the\r
- results are undefined.\r
-\r
- If Destination is NULL, then ASSERT().\r
- If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
- If Source is NULL, then ASSERT().\r
- If Source is not aligned on a 16-bit boundary, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Destination contains more\r
- than PcdMaximumUnicodeStringLength Unicode characters, not including the\r
- Null-terminator, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
- PcdMaximumUnicodeStringLength Unicode characters, not including the\r
- Null-terminator, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and concatenating Destination\r
- and Source results in a Unicode string with more than\r
- PcdMaximumUnicodeStringLength Unicode characters, not including the\r
- Null-terminator, then ASSERT().\r
-\r
- @param Destination The pointer to a Null-terminated Unicode string.\r
- @param Source The pointer to a Null-terminated Unicode string.\r
-\r
- @return Destination.\r
-\r
-**/\r
-CHAR16 *\r
-EFIAPI\r
-StrCat (\r
- IN OUT CHAR16 *Destination,\r
- IN CONST CHAR16 *Source\r
- );\r
-\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Concatenates up to a specified length one Null-terminated Unicode to the end\r
- of another Null-terminated Unicode string, and returns the concatenated\r
- Unicode string.\r
-\r
- This function concatenates two Null-terminated Unicode strings. The contents\r
- of Null-terminated Unicode string Source are concatenated to the end of\r
- Null-terminated Unicode string Destination, and Destination is returned. At\r
- most, Length Unicode characters are concatenated from Source to the end of\r
- Destination, and Destination is always Null-terminated. If Length is 0, then\r
- Destination is returned unmodified. If Source and Destination overlap, then\r
- the results are undefined.\r
-\r
- If Destination is NULL, then ASSERT().\r
- If Length > 0 and Destination is not aligned on a 16-bit boundary, then ASSERT().\r
- If Length > 0 and Source is NULL, then ASSERT().\r
- If Length > 0 and Source is not aligned on a 16-bit boundary, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Length is greater than\r
- PcdMaximumUnicodeStringLength, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Destination contains more\r
- than PcdMaximumUnicodeStringLength Unicode characters, not including the\r
- Null-terminator, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
- PcdMaximumUnicodeStringLength Unicode characters, not including the\r
- Null-terminator, then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and concatenating Destination\r
- and Source results in a Unicode string with more than PcdMaximumUnicodeStringLength\r
- Unicode characters, not including the Null-terminator, then ASSERT().\r
-\r
- @param Destination The pointer to a Null-terminated Unicode string.\r
- @param Source The pointer to a Null-terminated Unicode string.\r
- @param Length The maximum number of Unicode characters to concatenate from\r
- Source.\r
-\r
- @return Destination.\r
-\r
-**/\r
-CHAR16 *\r
-EFIAPI\r
-StrnCat (\r
- IN OUT CHAR16 *Destination,\r
- IN CONST CHAR16 *Source,\r
- IN UINTN Length\r
+ IN CONST CHAR16 *FirstString,\r
+ IN CONST CHAR16 *SecondString,\r
+ IN UINTN Length\r
);\r
-#endif // !defined (DISABLE_NEW_DEPRECATED_INTERFACES)\r
\r
/**\r
Returns the first occurrence of a Null-terminated Unicode sub-string\r
CHAR16 *\r
EFIAPI\r
StrStr (\r
- IN CONST CHAR16 *String,\r
- IN CONST CHAR16 *SearchString\r
+ IN CONST CHAR16 *String,\r
+ IN CONST CHAR16 *SearchString\r
);\r
\r
/**\r
UINTN\r
EFIAPI\r
StrDecimalToUintn (\r
- IN CONST CHAR16 *String\r
+ IN CONST CHAR16 *String\r
);\r
\r
/**\r
UINT64\r
EFIAPI\r
StrDecimalToUint64 (\r
- IN CONST CHAR16 *String\r
+ IN CONST CHAR16 *String\r
);\r
\r
-\r
/**\r
Convert a Null-terminated Unicode hexadecimal string to a value of type UINTN.\r
\r
UINTN\r
EFIAPI\r
StrHexToUintn (\r
- IN CONST CHAR16 *String\r
+ IN CONST CHAR16 *String\r
);\r
\r
-\r
/**\r
Convert a Null-terminated Unicode hexadecimal string to a value of type UINT64.\r
\r
UINT64\r
EFIAPI\r
StrHexToUint64 (\r
- IN CONST CHAR16 *String\r
+ IN CONST CHAR16 *String\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrToIpv6Address (\r
- IN CONST CHAR16 *String,\r
- OUT CHAR16 **EndPointer, OPTIONAL\r
- OUT IPv6_ADDRESS *Address,\r
- OUT UINT8 *PrefixLength OPTIONAL\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer OPTIONAL,\r
+ OUT IPv6_ADDRESS *Address,\r
+ OUT UINT8 *PrefixLength OPTIONAL\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrToIpv4Address (\r
- IN CONST CHAR16 *String,\r
- OUT CHAR16 **EndPointer, OPTIONAL\r
- OUT IPv4_ADDRESS *Address,\r
- OUT UINT8 *PrefixLength OPTIONAL\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer OPTIONAL,\r
+ OUT IPv4_ADDRESS *Address,\r
+ OUT UINT8 *PrefixLength OPTIONAL\r
);\r
\r
#define GUID_STRING_LENGTH 36\r
RETURN_STATUS\r
EFIAPI\r
StrToGuid (\r
- IN CONST CHAR16 *String,\r
- OUT GUID *Guid\r
+ IN CONST CHAR16 *String,\r
+ OUT GUID *Guid\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
StrHexToBytes (\r
- IN CONST CHAR16 *String,\r
- IN UINTN Length,\r
- OUT UINT8 *Buffer,\r
- IN UINTN MaxBufferSize\r
+ IN CONST CHAR16 *String,\r
+ IN UINTN Length,\r
+ OUT UINT8 *Buffer,\r
+ IN UINTN MaxBufferSize\r
);\r
\r
-#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Convert a Null-terminated Unicode string to a Null-terminated\r
- ASCII string and returns the ASCII string.\r
-\r
- This function converts the content of the Unicode string Source\r
- to the ASCII string Destination by copying the lower 8 bits of\r
- each Unicode character. It returns Destination.\r
-\r
- The caller is responsible to make sure Destination points to a buffer with size\r
- equal or greater than ((StrLen (Source) + 1) * sizeof (CHAR8)) in bytes.\r
-\r
- If any Unicode characters in Source contain non-zero value in\r
- the upper 8 bits, then ASSERT().\r
-\r
- If Destination is NULL, then ASSERT().\r
- If Source is NULL, then ASSERT().\r
- If Source is not aligned on a 16-bit boundary, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
-\r
- If PcdMaximumUnicodeStringLength is not zero, and Source contains\r
- more than PcdMaximumUnicodeStringLength Unicode characters not including\r
- the Null-terminator, then ASSERT().\r
-\r
- If PcdMaximumAsciiStringLength is not zero, and Source contains more\r
- than PcdMaximumAsciiStringLength Unicode characters not including the\r
- Null-terminator, then ASSERT().\r
-\r
- @param Source The pointer to a Null-terminated Unicode string.\r
- @param Destination The pointer to a Null-terminated ASCII string.\r
-\r
- @return Destination.\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-UnicodeStrToAsciiStr (\r
- IN CONST CHAR16 *Source,\r
- OUT CHAR8 *Destination\r
- );\r
-\r
-#endif // !defined (DISABLE_NEW_DEPRECATED_INTERFACES)\r
-\r
/**\r
Convert a Null-terminated Unicode string to a Null-terminated\r
ASCII string.\r
RETURN_STATUS\r
EFIAPI\r
UnicodeStrToAsciiStrS (\r
- IN CONST CHAR16 *Source,\r
- OUT CHAR8 *Destination,\r
- IN UINTN DestMax\r
+ IN CONST CHAR16 *Source,\r
+ OUT CHAR8 *Destination,\r
+ IN UINTN DestMax\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
UnicodeStrnToAsciiStrS (\r
- IN CONST CHAR16 *Source,\r
- IN UINTN Length,\r
- OUT CHAR8 *Destination,\r
- IN UINTN DestMax,\r
- OUT UINTN *DestinationLength\r
- );\r
-\r
-#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Copies one Null-terminated ASCII string to another Null-terminated ASCII\r
- string and returns the new ASCII string.\r
-\r
- This function copies the contents of the ASCII string Source to the ASCII\r
- string Destination, and returns Destination. If Source and Destination\r
- overlap, then the results are undefined.\r
-\r
- If Destination is NULL, then ASSERT().\r
- If Source is NULL, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero and Source contains more than\r
- PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
- then ASSERT().\r
-\r
- @param Destination The pointer to a Null-terminated ASCII string.\r
- @param Source The pointer to a Null-terminated ASCII string.\r
-\r
- @return Destination\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-AsciiStrCpy (\r
- OUT CHAR8 *Destination,\r
- IN CONST CHAR8 *Source\r
- );\r
-\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Copies up to a specified length one Null-terminated ASCII string to another\r
- Null-terminated ASCII string and returns the new ASCII string.\r
-\r
- This function copies the contents of the ASCII string Source to the ASCII\r
- string Destination, and returns Destination. At most, Length ASCII characters\r
- are copied from Source to Destination. If Length is 0, then Destination is\r
- returned unmodified. If Length is greater that the number of ASCII characters\r
- in Source, then Destination is padded with Null ASCII characters. If Source\r
- and Destination overlap, then the results are undefined.\r
-\r
- If Destination is NULL, then ASSERT().\r
- If Source is NULL, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and Length is greater than\r
- PcdMaximumAsciiStringLength, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and Source contains more than\r
- PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
- then ASSERT().\r
-\r
- @param Destination The pointer to a Null-terminated ASCII string.\r
- @param Source The pointer to a Null-terminated ASCII string.\r
- @param Length The maximum number of ASCII characters to copy.\r
-\r
- @return Destination\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-AsciiStrnCpy (\r
- OUT CHAR8 *Destination,\r
- IN CONST CHAR8 *Source,\r
- IN UINTN Length\r
+ IN CONST CHAR16 *Source,\r
+ IN UINTN Length,\r
+ OUT CHAR8 *Destination,\r
+ IN UINTN DestMax,\r
+ OUT UINTN *DestinationLength\r
);\r
-#endif // !defined (DISABLE_NEW_DEPRECATED_INTERFACES)\r
\r
/**\r
Returns the length of a Null-terminated ASCII string.\r
UINTN\r
EFIAPI\r
AsciiStrLen (\r
- IN CONST CHAR8 *String\r
+ IN CONST CHAR8 *String\r
);\r
\r
-\r
/**\r
Returns the size of a Null-terminated ASCII string in bytes, including the\r
Null terminator.\r
UINTN\r
EFIAPI\r
AsciiStrSize (\r
- IN CONST CHAR8 *String\r
+ IN CONST CHAR8 *String\r
);\r
\r
-\r
/**\r
Compares two Null-terminated ASCII strings, and returns the difference\r
between the first mismatched ASCII characters.\r
INTN\r
EFIAPI\r
AsciiStrCmp (\r
- IN CONST CHAR8 *FirstString,\r
- IN CONST CHAR8 *SecondString\r
+ IN CONST CHAR8 *FirstString,\r
+ IN CONST CHAR8 *SecondString\r
);\r
\r
-\r
/**\r
Performs a case insensitive comparison of two Null-terminated ASCII strings,\r
and returns the difference between the first mismatched ASCII characters.\r
INTN\r
EFIAPI\r
AsciiStriCmp (\r
- IN CONST CHAR8 *FirstString,\r
- IN CONST CHAR8 *SecondString\r
+ IN CONST CHAR8 *FirstString,\r
+ IN CONST CHAR8 *SecondString\r
);\r
\r
-\r
/**\r
Compares two Null-terminated ASCII strings with maximum lengths, and returns\r
the difference between the first mismatched ASCII characters.\r
INTN\r
EFIAPI\r
AsciiStrnCmp (\r
- IN CONST CHAR8 *FirstString,\r
- IN CONST CHAR8 *SecondString,\r
- IN UINTN Length\r
- );\r
-\r
-\r
-#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Concatenates one Null-terminated ASCII string to another Null-terminated\r
- ASCII string, and returns the concatenated ASCII string.\r
-\r
- This function concatenates two Null-terminated ASCII strings. The contents of\r
- Null-terminated ASCII string Source are concatenated to the end of Null-\r
- terminated ASCII string Destination. The Null-terminated concatenated ASCII\r
- String is returned.\r
-\r
- If Destination is NULL, then ASSERT().\r
- If Source is NULL, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero and Destination contains more than\r
- PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
- then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero and Source contains more than\r
- PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
- then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero and concatenating Destination and\r
- Source results in a ASCII string with more than PcdMaximumAsciiStringLength\r
- ASCII characters, then ASSERT().\r
-\r
- @param Destination The pointer to a Null-terminated ASCII string.\r
- @param Source The pointer to a Null-terminated ASCII string.\r
-\r
- @return Destination\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-AsciiStrCat (\r
- IN OUT CHAR8 *Destination,\r
- IN CONST CHAR8 *Source\r
+ IN CONST CHAR8 *FirstString,\r
+ IN CONST CHAR8 *SecondString,\r
+ IN UINTN Length\r
);\r
\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Concatenates up to a specified length one Null-terminated ASCII string to\r
- the end of another Null-terminated ASCII string, and returns the\r
- concatenated ASCII string.\r
-\r
- This function concatenates two Null-terminated ASCII strings. The contents\r
- of Null-terminated ASCII string Source are concatenated to the end of Null-\r
- terminated ASCII string Destination, and Destination is returned. At most,\r
- Length ASCII characters are concatenated from Source to the end of\r
- Destination, and Destination is always Null-terminated. If Length is 0, then\r
- Destination is returned unmodified. If Source and Destination overlap, then\r
- the results are undefined.\r
-\r
- If Length > 0 and Destination is NULL, then ASSERT().\r
- If Length > 0 and Source is NULL, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and Length is greater than\r
- PcdMaximumAsciiStringLength, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and Destination contains more than\r
- PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
- then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and Source contains more than\r
- PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
- then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and concatenating Destination and\r
- Source results in a ASCII string with more than PcdMaximumAsciiStringLength\r
- ASCII characters, not including the Null-terminator, then ASSERT().\r
-\r
- @param Destination The pointer to a Null-terminated ASCII string.\r
- @param Source The pointer to a Null-terminated ASCII string.\r
- @param Length The maximum number of ASCII characters to concatenate from\r
- Source.\r
-\r
- @return Destination\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-AsciiStrnCat (\r
- IN OUT CHAR8 *Destination,\r
- IN CONST CHAR8 *Source,\r
- IN UINTN Length\r
- );\r
-#endif // !defined (DISABLE_NEW_DEPRECATED_INTERFACES)\r
-\r
/**\r
Returns the first occurrence of a Null-terminated ASCII sub-string\r
in a Null-terminated ASCII string.\r
CHAR8 *\r
EFIAPI\r
AsciiStrStr (\r
- IN CONST CHAR8 *String,\r
- IN CONST CHAR8 *SearchString\r
+ IN CONST CHAR8 *String,\r
+ IN CONST CHAR8 *SearchString\r
);\r
\r
-\r
/**\r
Convert a Null-terminated ASCII decimal string to a value of type\r
UINTN.\r
UINTN\r
EFIAPI\r
AsciiStrDecimalToUintn (\r
- IN CONST CHAR8 *String\r
+ IN CONST CHAR8 *String\r
);\r
\r
-\r
/**\r
Convert a Null-terminated ASCII decimal string to a value of type\r
UINT64.\r
UINT64\r
EFIAPI\r
AsciiStrDecimalToUint64 (\r
- IN CONST CHAR8 *String\r
+ IN CONST CHAR8 *String\r
);\r
\r
-\r
/**\r
Convert a Null-terminated ASCII hexadecimal string to a value of type UINTN.\r
\r
UINTN\r
EFIAPI\r
AsciiStrHexToUintn (\r
- IN CONST CHAR8 *String\r
+ IN CONST CHAR8 *String\r
);\r
\r
-\r
/**\r
Convert a Null-terminated ASCII hexadecimal string to a value of type UINT64.\r
\r
UINT64\r
EFIAPI\r
AsciiStrHexToUint64 (\r
- IN CONST CHAR8 *String\r
+ IN CONST CHAR8 *String\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrToIpv6Address (\r
- IN CONST CHAR8 *String,\r
- OUT CHAR8 **EndPointer, OPTIONAL\r
- OUT IPv6_ADDRESS *Address,\r
- OUT UINT8 *PrefixLength OPTIONAL\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer OPTIONAL,\r
+ OUT IPv6_ADDRESS *Address,\r
+ OUT UINT8 *PrefixLength OPTIONAL\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrToIpv4Address (\r
- IN CONST CHAR8 *String,\r
- OUT CHAR8 **EndPointer, OPTIONAL\r
- OUT IPv4_ADDRESS *Address,\r
- OUT UINT8 *PrefixLength OPTIONAL\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer OPTIONAL,\r
+ OUT IPv4_ADDRESS *Address,\r
+ OUT UINT8 *PrefixLength OPTIONAL\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrToGuid (\r
- IN CONST CHAR8 *String,\r
- OUT GUID *Guid\r
+ IN CONST CHAR8 *String,\r
+ OUT GUID *Guid\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrHexToBytes (\r
- IN CONST CHAR8 *String,\r
- IN UINTN Length,\r
- OUT UINT8 *Buffer,\r
- IN UINTN MaxBufferSize\r
- );\r
-\r
-#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
-\r
-/**\r
- [ATTENTION] This function is deprecated for security reason.\r
-\r
- Convert one Null-terminated ASCII string to a Null-terminated\r
- Unicode string and returns the Unicode string.\r
-\r
- This function converts the contents of the ASCII string Source to the Unicode\r
- string Destination, and returns Destination. The function terminates the\r
- Unicode string Destination by appending a Null-terminator character at the end.\r
- The caller is responsible to make sure Destination points to a buffer with size\r
- equal or greater than ((AsciiStrLen (Source) + 1) * sizeof (CHAR16)) in bytes.\r
-\r
- If Destination is NULL, then ASSERT().\r
- If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
- If Source is NULL, then ASSERT().\r
- If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and Source contains more than\r
- PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
- then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
- PcdMaximumUnicodeStringLength ASCII characters not including the\r
- Null-terminator, then ASSERT().\r
-\r
- @param Source The pointer to a Null-terminated ASCII string.\r
- @param Destination The pointer to a Null-terminated Unicode string.\r
-\r
- @return Destination.\r
-\r
-**/\r
-CHAR16 *\r
-EFIAPI\r
-AsciiStrToUnicodeStr (\r
- IN CONST CHAR8 *Source,\r
- OUT CHAR16 *Destination\r
+ IN CONST CHAR8 *String,\r
+ IN UINTN Length,\r
+ OUT UINT8 *Buffer,\r
+ IN UINTN MaxBufferSize\r
);\r
\r
-#endif // !defined (DISABLE_NEW_DEPRECATED_INTERFACES)\r
-\r
/**\r
Convert one Null-terminated ASCII string to a Null-terminated\r
Unicode string.\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrToUnicodeStrS (\r
- IN CONST CHAR8 *Source,\r
- OUT CHAR16 *Destination,\r
- IN UINTN DestMax\r
+ IN CONST CHAR8 *Source,\r
+ OUT CHAR16 *Destination,\r
+ IN UINTN DestMax\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
AsciiStrnToUnicodeStrS (\r
- IN CONST CHAR8 *Source,\r
- IN UINTN Length,\r
- OUT CHAR16 *Destination,\r
- IN UINTN DestMax,\r
- OUT UINTN *DestinationLength\r
+ IN CONST CHAR8 *Source,\r
+ IN UINTN Length,\r
+ OUT CHAR16 *Destination,\r
+ IN UINTN DestMax,\r
+ OUT UINTN *DestinationLength\r
);\r
\r
/**\r
CHAR16\r
EFIAPI\r
CharToUpper (\r
- IN CHAR16 Char\r
+ IN CHAR16 Char\r
);\r
\r
/**\r
CHAR8\r
EFIAPI\r
AsciiCharToUpper (\r
- IN CHAR8 Chr\r
+ IN CHAR8 Chr\r
);\r
\r
/**\r
EFIAPI\r
Base64Encode (\r
IN CONST UINT8 *Source,\r
- IN UINTN SourceLength,\r
+ IN UINTN SourceLength,\r
OUT CHAR8 *Destination OPTIONAL,\r
IN OUT UINTN *DestinationSize\r
);\r
RETURN_STATUS\r
EFIAPI\r
Base64Decode (\r
- IN CONST CHAR8 *Source OPTIONAL,\r
- IN UINTN SourceSize,\r
- OUT UINT8 *Destination OPTIONAL,\r
- IN OUT UINTN *DestinationSize\r
+ IN CONST CHAR8 *Source OPTIONAL,\r
+ IN UINTN SourceSize,\r
+ OUT UINT8 *Destination OPTIONAL,\r
+ IN OUT UINTN *DestinationSize\r
);\r
\r
/**\r
UINT8\r
EFIAPI\r
DecimalToBcd8 (\r
- IN UINT8 Value\r
+ IN UINT8 Value\r
);\r
\r
-\r
/**\r
Converts an 8-bit BCD value to an 8-bit value.\r
\r
UINT8\r
EFIAPI\r
BcdToDecimal8 (\r
- IN UINT8 Value\r
+ IN UINT8 Value\r
);\r
\r
//\r
**/\r
BOOLEAN\r
EFIAPI\r
-PathRemoveLastItem(\r
- IN OUT CHAR16 *Path\r
+PathRemoveLastItem (\r
+ IN OUT CHAR16 *Path\r
);\r
\r
/**\r
\r
@return Returns Path, otherwise returns NULL to indicate that an error has occurred.\r
**/\r
-CHAR16*\r
+CHAR16 *\r
EFIAPI\r
-PathCleanUpDirectories(\r
- IN CHAR16 *Path\r
+PathCleanUpDirectories (\r
+ IN CHAR16 *Path\r
);\r
\r
//\r
BOOLEAN\r
EFIAPI\r
IsNodeInList (\r
- IN CONST LIST_ENTRY *FirstEntry,\r
- IN CONST LIST_ENTRY *SecondEntry\r
+ IN CONST LIST_ENTRY *FirstEntry,\r
+ IN CONST LIST_ENTRY *SecondEntry\r
);\r
\r
-\r
/**\r
Initializes the head node of a doubly linked list, and returns the pointer to\r
the head node of the doubly linked list.\r
LIST_ENTRY *\r
EFIAPI\r
InitializeListHead (\r
- IN OUT LIST_ENTRY *ListHead\r
+ IN OUT LIST_ENTRY *ListHead\r
);\r
\r
-\r
/**\r
Adds a node to the beginning of a doubly linked list, and returns the pointer\r
to the head node of the doubly linked list.\r
LIST_ENTRY *\r
EFIAPI\r
InsertHeadList (\r
- IN OUT LIST_ENTRY *ListHead,\r
- IN OUT LIST_ENTRY *Entry\r
+ IN OUT LIST_ENTRY *ListHead,\r
+ IN OUT LIST_ENTRY *Entry\r
);\r
\r
-\r
/**\r
Adds a node to the end of a doubly linked list, and returns the pointer to\r
the head node of the doubly linked list.\r
LIST_ENTRY *\r
EFIAPI\r
InsertTailList (\r
- IN OUT LIST_ENTRY *ListHead,\r
- IN OUT LIST_ENTRY *Entry\r
+ IN OUT LIST_ENTRY *ListHead,\r
+ IN OUT LIST_ENTRY *Entry\r
);\r
\r
-\r
/**\r
Retrieves the first node of a doubly linked list.\r
\r
LIST_ENTRY *\r
EFIAPI\r
GetFirstNode (\r
- IN CONST LIST_ENTRY *List\r
+ IN CONST LIST_ENTRY *List\r
);\r
\r
-\r
/**\r
Retrieves the next node of a doubly linked list.\r
\r
LIST_ENTRY *\r
EFIAPI\r
GetNextNode (\r
- IN CONST LIST_ENTRY *List,\r
- IN CONST LIST_ENTRY *Node\r
+ IN CONST LIST_ENTRY *List,\r
+ IN CONST LIST_ENTRY *Node\r
);\r
\r
-\r
/**\r
Retrieves the previous node of a doubly linked list.\r
\r
LIST_ENTRY *\r
EFIAPI\r
GetPreviousNode (\r
- IN CONST LIST_ENTRY *List,\r
- IN CONST LIST_ENTRY *Node\r
+ IN CONST LIST_ENTRY *List,\r
+ IN CONST LIST_ENTRY *Node\r
);\r
\r
-\r
/**\r
Checks to see if a doubly linked list is empty or not.\r
\r
BOOLEAN\r
EFIAPI\r
IsListEmpty (\r
- IN CONST LIST_ENTRY *ListHead\r
+ IN CONST LIST_ENTRY *ListHead\r
);\r
\r
-\r
/**\r
Determines if a node in a doubly linked list is the head node of a the same\r
doubly linked list. This function is typically used to terminate a loop that\r
BOOLEAN\r
EFIAPI\r
IsNull (\r
- IN CONST LIST_ENTRY *List,\r
- IN CONST LIST_ENTRY *Node\r
+ IN CONST LIST_ENTRY *List,\r
+ IN CONST LIST_ENTRY *Node\r
);\r
\r
-\r
/**\r
Determines if a node the last node in a doubly linked list.\r
\r
BOOLEAN\r
EFIAPI\r
IsNodeAtEnd (\r
- IN CONST LIST_ENTRY *List,\r
- IN CONST LIST_ENTRY *Node\r
+ IN CONST LIST_ENTRY *List,\r
+ IN CONST LIST_ENTRY *Node\r
);\r
\r
-\r
/**\r
Swaps the location of two nodes in a doubly linked list, and returns the\r
first node after the swap.\r
LIST_ENTRY *\r
EFIAPI\r
SwapListEntries (\r
- IN OUT LIST_ENTRY *FirstEntry,\r
- IN OUT LIST_ENTRY *SecondEntry\r
+ IN OUT LIST_ENTRY *FirstEntry,\r
+ IN OUT LIST_ENTRY *SecondEntry\r
);\r
\r
-\r
/**\r
Removes a node from a doubly linked list, and returns the node that follows\r
the removed node.\r
LIST_ENTRY *\r
EFIAPI\r
RemoveEntryList (\r
- IN CONST LIST_ENTRY *Entry\r
+ IN CONST LIST_ENTRY *Entry\r
);\r
\r
//\r
// Math Services\r
//\r
\r
+/**\r
+ Prototype for comparison function for any two element types.\r
+\r
+ @param[in] Buffer1 The pointer to first buffer.\r
+ @param[in] Buffer2 The pointer to second buffer.\r
+\r
+ @retval 0 Buffer1 equal to Buffer2.\r
+ @return <0 Buffer1 is less than Buffer2.\r
+ @return >0 Buffer1 is greater than Buffer2.\r
+**/\r
+typedef\r
+INTN\r
+(EFIAPI *BASE_SORT_COMPARE)(\r
+ IN CONST VOID *Buffer1,\r
+ IN CONST VOID *Buffer2\r
+ );\r
+\r
+/**\r
+ This function is identical to perform QuickSort,\r
+ except that is uses the pre-allocated buffer so the in place sorting does not need to\r
+ allocate and free buffers constantly.\r
+\r
+ Each element must be equal sized.\r
+\r
+ if BufferToSort is NULL, then ASSERT.\r
+ if CompareFunction is NULL, then ASSERT.\r
+ if BufferOneElement is NULL, then ASSERT.\r
+ if ElementSize is < 1, then ASSERT.\r
+\r
+ if Count is < 2 then perform no action.\r
+\r
+ @param[in, out] BufferToSort on call a Buffer of (possibly sorted) elements\r
+ on return a buffer of sorted elements\r
+ @param[in] Count the number of elements in the buffer to sort\r
+ @param[in] ElementSize Size of an element in bytes\r
+ @param[in] CompareFunction The function to call to perform the comparison\r
+ of any 2 elements\r
+ @param[out] BufferOneElement Caller provided buffer whose size equals to ElementSize.\r
+ It's used by QuickSort() for swapping in sorting.\r
+**/\r
+VOID\r
+EFIAPI\r
+QuickSort (\r
+ IN OUT VOID *BufferToSort,\r
+ IN CONST UINTN Count,\r
+ IN CONST UINTN ElementSize,\r
+ IN BASE_SORT_COMPARE CompareFunction,\r
+ OUT VOID *BufferOneElement\r
+ );\r
+\r
/**\r
Shifts a 64-bit integer left between 0 and 63 bits. The low bits are filled\r
with zeros. The shifted value is returned.\r
UINT64\r
EFIAPI\r
LShiftU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
-\r
/**\r
Shifts a 64-bit integer right between 0 and 63 bits. This high bits are\r
filled with zeros. The shifted value is returned.\r
UINT64\r
EFIAPI\r
RShiftU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
-\r
/**\r
Shifts a 64-bit integer right between 0 and 63 bits. The high bits are filled\r
with original integer's bit 63. The shifted value is returned.\r
UINT64\r
EFIAPI\r
ARShiftU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
-\r
/**\r
Rotates a 32-bit integer left between 0 and 31 bits, filling the low bits\r
with the high bits that were rotated.\r
UINT32\r
EFIAPI\r
LRotU32 (\r
- IN UINT32 Operand,\r
- IN UINTN Count\r
+ IN UINT32 Operand,\r
+ IN UINTN Count\r
);\r
\r
-\r
/**\r
Rotates a 32-bit integer right between 0 and 31 bits, filling the high bits\r
with the low bits that were rotated.\r
UINT32\r
EFIAPI\r
RRotU32 (\r
- IN UINT32 Operand,\r
- IN UINTN Count\r
+ IN UINT32 Operand,\r
+ IN UINTN Count\r
);\r
\r
-\r
/**\r
Rotates a 64-bit integer left between 0 and 63 bits, filling the low bits\r
with the high bits that were rotated.\r
UINT64\r
EFIAPI\r
LRotU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
-\r
/**\r
Rotates a 64-bit integer right between 0 and 63 bits, filling the high bits\r
with the high low bits that were rotated.\r
UINT64\r
EFIAPI\r
RRotU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
-\r
/**\r
Returns the bit position of the lowest bit set in a 32-bit value.\r
\r
INTN\r
EFIAPI\r
LowBitSet32 (\r
- IN UINT32 Operand\r
+ IN UINT32 Operand\r
);\r
\r
-\r
/**\r
Returns the bit position of the lowest bit set in a 64-bit value.\r
\r
INTN\r
EFIAPI\r
LowBitSet64 (\r
- IN UINT64 Operand\r
+ IN UINT64 Operand\r
);\r
\r
-\r
/**\r
Returns the bit position of the highest bit set in a 32-bit value. Equivalent\r
to log2(x).\r
INTN\r
EFIAPI\r
HighBitSet32 (\r
- IN UINT32 Operand\r
+ IN UINT32 Operand\r
);\r
\r
-\r
/**\r
Returns the bit position of the highest bit set in a 64-bit value. Equivalent\r
to log2(x).\r
INTN\r
EFIAPI\r
HighBitSet64 (\r
- IN UINT64 Operand\r
+ IN UINT64 Operand\r
);\r
\r
-\r
/**\r
Returns the value of the highest bit set in a 32-bit value. Equivalent to\r
1 << log2(x).\r
UINT32\r
EFIAPI\r
GetPowerOfTwo32 (\r
- IN UINT32 Operand\r
+ IN UINT32 Operand\r
);\r
\r
-\r
/**\r
Returns the value of the highest bit set in a 64-bit value. Equivalent to\r
1 << log2(x).\r
UINT64\r
EFIAPI\r
GetPowerOfTwo64 (\r
- IN UINT64 Operand\r
+ IN UINT64 Operand\r
);\r
\r
-\r
/**\r
Switches the endianness of a 16-bit integer.\r
\r
UINT16\r
EFIAPI\r
SwapBytes16 (\r
- IN UINT16 Value\r
+ IN UINT16 Value\r
);\r
\r
-\r
/**\r
Switches the endianness of a 32-bit integer.\r
\r
UINT32\r
EFIAPI\r
SwapBytes32 (\r
- IN UINT32 Value\r
+ IN UINT32 Value\r
);\r
\r
-\r
/**\r
Switches the endianness of a 64-bit integer.\r
\r
UINT64\r
EFIAPI\r
SwapBytes64 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Multiples a 64-bit unsigned integer by a 32-bit unsigned integer and\r
generates a 64-bit unsigned result.\r
UINT64\r
EFIAPI\r
MultU64x32 (\r
- IN UINT64 Multiplicand,\r
- IN UINT32 Multiplier\r
+ IN UINT64 Multiplicand,\r
+ IN UINT32 Multiplier\r
);\r
\r
-\r
/**\r
Multiples a 64-bit unsigned integer by a 64-bit unsigned integer and\r
generates a 64-bit unsigned result.\r
UINT64\r
EFIAPI\r
MultU64x64 (\r
- IN UINT64 Multiplicand,\r
- IN UINT64 Multiplier\r
+ IN UINT64 Multiplicand,\r
+ IN UINT64 Multiplier\r
);\r
\r
-\r
/**\r
Multiples a 64-bit signed integer by a 64-bit signed integer and generates a\r
64-bit signed result.\r
INT64\r
EFIAPI\r
MultS64x64 (\r
- IN INT64 Multiplicand,\r
- IN INT64 Multiplier\r
+ IN INT64 Multiplicand,\r
+ IN INT64 Multiplier\r
);\r
\r
-\r
/**\r
Divides a 64-bit unsigned integer by a 32-bit unsigned integer and generates\r
a 64-bit unsigned result.\r
UINT64\r
EFIAPI\r
DivU64x32 (\r
- IN UINT64 Dividend,\r
- IN UINT32 Divisor\r
+ IN UINT64 Dividend,\r
+ IN UINT32 Divisor\r
);\r
\r
-\r
/**\r
Divides a 64-bit unsigned integer by a 32-bit unsigned integer and generates\r
a 32-bit unsigned remainder.\r
UINT32\r
EFIAPI\r
ModU64x32 (\r
- IN UINT64 Dividend,\r
- IN UINT32 Divisor\r
+ IN UINT64 Dividend,\r
+ IN UINT32 Divisor\r
);\r
\r
-\r
/**\r
Divides a 64-bit unsigned integer by a 32-bit unsigned integer and generates\r
a 64-bit unsigned result and an optional 32-bit unsigned remainder.\r
UINT64\r
EFIAPI\r
DivU64x32Remainder (\r
- IN UINT64 Dividend,\r
- IN UINT32 Divisor,\r
- OUT UINT32 *Remainder OPTIONAL\r
+ IN UINT64 Dividend,\r
+ IN UINT32 Divisor,\r
+ OUT UINT32 *Remainder OPTIONAL\r
);\r
\r
-\r
/**\r
Divides a 64-bit unsigned integer by a 64-bit unsigned integer and generates\r
a 64-bit unsigned result and an optional 64-bit unsigned remainder.\r
UINT64\r
EFIAPI\r
DivU64x64Remainder (\r
- IN UINT64 Dividend,\r
- IN UINT64 Divisor,\r
- OUT UINT64 *Remainder OPTIONAL\r
+ IN UINT64 Dividend,\r
+ IN UINT64 Divisor,\r
+ OUT UINT64 *Remainder OPTIONAL\r
);\r
\r
-\r
/**\r
Divides a 64-bit signed integer by a 64-bit signed integer and generates a\r
64-bit signed result and a optional 64-bit signed remainder.\r
INT64\r
EFIAPI\r
DivS64x64Remainder (\r
- IN INT64 Dividend,\r
- IN INT64 Divisor,\r
- OUT INT64 *Remainder OPTIONAL\r
+ IN INT64 Dividend,\r
+ IN INT64 Divisor,\r
+ OUT INT64 *Remainder OPTIONAL\r
);\r
\r
-\r
/**\r
Reads a 16-bit value from memory that may be unaligned.\r
\r
UINT16\r
EFIAPI\r
ReadUnaligned16 (\r
- IN CONST UINT16 *Buffer\r
+ IN CONST UINT16 *Buffer\r
);\r
\r
-\r
/**\r
Writes a 16-bit value to memory that may be unaligned.\r
\r
UINT16\r
EFIAPI\r
WriteUnaligned16 (\r
- OUT UINT16 *Buffer,\r
- IN UINT16 Value\r
+ OUT UINT16 *Buffer,\r
+ IN UINT16 Value\r
);\r
\r
-\r
/**\r
Reads a 24-bit value from memory that may be unaligned.\r
\r
UINT32\r
EFIAPI\r
ReadUnaligned24 (\r
- IN CONST UINT32 *Buffer\r
+ IN CONST UINT32 *Buffer\r
);\r
\r
-\r
/**\r
Writes a 24-bit value to memory that may be unaligned.\r
\r
UINT32\r
EFIAPI\r
WriteUnaligned24 (\r
- OUT UINT32 *Buffer,\r
- IN UINT32 Value\r
+ OUT UINT32 *Buffer,\r
+ IN UINT32 Value\r
);\r
\r
-\r
/**\r
Reads a 32-bit value from memory that may be unaligned.\r
\r
UINT32\r
EFIAPI\r
ReadUnaligned32 (\r
- IN CONST UINT32 *Buffer\r
+ IN CONST UINT32 *Buffer\r
);\r
\r
-\r
/**\r
Writes a 32-bit value to memory that may be unaligned.\r
\r
UINT32\r
EFIAPI\r
WriteUnaligned32 (\r
- OUT UINT32 *Buffer,\r
- IN UINT32 Value\r
+ OUT UINT32 *Buffer,\r
+ IN UINT32 Value\r
);\r
\r
-\r
/**\r
Reads a 64-bit value from memory that may be unaligned.\r
\r
UINT64\r
EFIAPI\r
ReadUnaligned64 (\r
- IN CONST UINT64 *Buffer\r
+ IN CONST UINT64 *Buffer\r
);\r
\r
-\r
/**\r
Writes a 64-bit value to memory that may be unaligned.\r
\r
UINT64\r
EFIAPI\r
WriteUnaligned64 (\r
- OUT UINT64 *Buffer,\r
- IN UINT64 Value\r
+ OUT UINT64 *Buffer,\r
+ IN UINT64 Value\r
);\r
\r
-\r
//\r
// Bit Field Functions\r
//\r
UINT8\r
EFIAPI\r
BitFieldRead8 (\r
- IN UINT8 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINT8 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
-\r
/**\r
Writes a bit field to an 8-bit value, and returns the result.\r
\r
UINT8\r
EFIAPI\r
BitFieldWrite8 (\r
- IN UINT8 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT8 Value\r
+ IN UINT8 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT8 Value\r
);\r
\r
-\r
/**\r
Reads a bit field from an 8-bit value, performs a bitwise OR, and returns the\r
result.\r
UINT8\r
EFIAPI\r
BitFieldOr8 (\r
- IN UINT8 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT8 OrData\r
+ IN UINT8 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT8 OrData\r
);\r
\r
-\r
/**\r
Reads a bit field from an 8-bit value, performs a bitwise AND, and returns\r
the result.\r
UINT8\r
EFIAPI\r
BitFieldAnd8 (\r
- IN UINT8 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT8 AndData\r
+ IN UINT8 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT8 AndData\r
);\r
\r
-\r
/**\r
Reads a bit field from an 8-bit value, performs a bitwise AND followed by a\r
bitwise OR, and returns the result.\r
UINT8\r
EFIAPI\r
BitFieldAndThenOr8 (\r
- IN UINT8 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT8 AndData,\r
- IN UINT8 OrData\r
+ IN UINT8 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT8 AndData,\r
+ IN UINT8 OrData\r
);\r
\r
-\r
/**\r
Returns a bit field from a 16-bit value.\r
\r
UINT16\r
EFIAPI\r
BitFieldRead16 (\r
- IN UINT16 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINT16 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
-\r
/**\r
Writes a bit field to a 16-bit value, and returns the result.\r
\r
UINT16\r
EFIAPI\r
BitFieldWrite16 (\r
- IN UINT16 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT16 Value\r
+ IN UINT16 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT16 Value\r
);\r
\r
-\r
/**\r
Reads a bit field from a 16-bit value, performs a bitwise OR, and returns the\r
result.\r
UINT16\r
EFIAPI\r
BitFieldOr16 (\r
- IN UINT16 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT16 OrData\r
+ IN UINT16 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT16 OrData\r
);\r
\r
-\r
/**\r
Reads a bit field from a 16-bit value, performs a bitwise AND, and returns\r
the result.\r
UINT16\r
EFIAPI\r
BitFieldAnd16 (\r
- IN UINT16 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT16 AndData\r
+ IN UINT16 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT16 AndData\r
);\r
\r
-\r
/**\r
Reads a bit field from a 16-bit value, performs a bitwise AND followed by a\r
bitwise OR, and returns the result.\r
UINT16\r
EFIAPI\r
BitFieldAndThenOr16 (\r
- IN UINT16 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT16 AndData,\r
- IN UINT16 OrData\r
+ IN UINT16 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT16 AndData,\r
+ IN UINT16 OrData\r
);\r
\r
-\r
/**\r
Returns a bit field from a 32-bit value.\r
\r
UINT32\r
EFIAPI\r
BitFieldRead32 (\r
- IN UINT32 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINT32 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
-\r
/**\r
Writes a bit field to a 32-bit value, and returns the result.\r
\r
UINT32\r
EFIAPI\r
BitFieldWrite32 (\r
- IN UINT32 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT32 Value\r
+ IN UINT32 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT32 Value\r
);\r
\r
-\r
/**\r
Reads a bit field from a 32-bit value, performs a bitwise OR, and returns the\r
result.\r
UINT32\r
EFIAPI\r
BitFieldOr32 (\r
- IN UINT32 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT32 OrData\r
+ IN UINT32 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT32 OrData\r
);\r
\r
-\r
/**\r
Reads a bit field from a 32-bit value, performs a bitwise AND, and returns\r
the result.\r
UINT32\r
EFIAPI\r
BitFieldAnd32 (\r
- IN UINT32 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT32 AndData\r
+ IN UINT32 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT32 AndData\r
);\r
\r
-\r
/**\r
Reads a bit field from a 32-bit value, performs a bitwise AND followed by a\r
bitwise OR, and returns the result.\r
UINT32\r
EFIAPI\r
BitFieldAndThenOr32 (\r
- IN UINT32 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT32 AndData,\r
- IN UINT32 OrData\r
+ IN UINT32 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT32 AndData,\r
+ IN UINT32 OrData\r
);\r
\r
-\r
/**\r
Returns a bit field from a 64-bit value.\r
\r
UINT64\r
EFIAPI\r
BitFieldRead64 (\r
- IN UINT64 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINT64 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
-\r
/**\r
Writes a bit field to a 64-bit value, and returns the result.\r
\r
UINT64\r
EFIAPI\r
BitFieldWrite64 (\r
- IN UINT64 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT64 Value\r
+ IN UINT64 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Reads a bit field from a 64-bit value, performs a bitwise OR, and returns the\r
result.\r
UINT64\r
EFIAPI\r
BitFieldOr64 (\r
- IN UINT64 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT64 OrData\r
+ IN UINT64 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT64 OrData\r
);\r
\r
-\r
/**\r
Reads a bit field from a 64-bit value, performs a bitwise AND, and returns\r
the result.\r
UINT64\r
EFIAPI\r
BitFieldAnd64 (\r
- IN UINT64 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT64 AndData\r
+ IN UINT64 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT64 AndData\r
);\r
\r
-\r
/**\r
Reads a bit field from a 64-bit value, performs a bitwise AND followed by a\r
bitwise OR, and returns the result.\r
UINT64\r
EFIAPI\r
BitFieldAndThenOr64 (\r
- IN UINT64 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT64 AndData,\r
- IN UINT64 OrData\r
+ IN UINT64 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT64 AndData,\r
+ IN UINT64 OrData\r
);\r
\r
/**\r
UINT8\r
EFIAPI\r
BitFieldCountOnes32 (\r
- IN UINT32 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINT32 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
/**\r
UINT8\r
EFIAPI\r
BitFieldCountOnes64 (\r
- IN UINT64 Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINT64 Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
//\r
UINT8\r
EFIAPI\r
CalculateSum8 (\r
- IN CONST UINT8 *Buffer,\r
- IN UINTN Length\r
+ IN CONST UINT8 *Buffer,\r
+ IN UINTN Length\r
);\r
\r
-\r
/**\r
Returns the two's complement checksum of all elements in a buffer\r
of 8-bit values.\r
UINT8\r
EFIAPI\r
CalculateCheckSum8 (\r
- IN CONST UINT8 *Buffer,\r
- IN UINTN Length\r
+ IN CONST UINT8 *Buffer,\r
+ IN UINTN Length\r
);\r
\r
-\r
/**\r
Returns the sum of all elements in a buffer of 16-bit values. During\r
calculation, the carry bits are dropped.\r
UINT16\r
EFIAPI\r
CalculateSum16 (\r
- IN CONST UINT16 *Buffer,\r
- IN UINTN Length\r
+ IN CONST UINT16 *Buffer,\r
+ IN UINTN Length\r
);\r
\r
-\r
/**\r
Returns the two's complement checksum of all elements in a buffer of\r
16-bit values.\r
UINT16\r
EFIAPI\r
CalculateCheckSum16 (\r
- IN CONST UINT16 *Buffer,\r
- IN UINTN Length\r
+ IN CONST UINT16 *Buffer,\r
+ IN UINTN Length\r
);\r
\r
-\r
/**\r
Returns the sum of all elements in a buffer of 32-bit values. During\r
calculation, the carry bits are dropped.\r
UINT32\r
EFIAPI\r
CalculateSum32 (\r
- IN CONST UINT32 *Buffer,\r
- IN UINTN Length\r
+ IN CONST UINT32 *Buffer,\r
+ IN UINTN Length\r
);\r
\r
-\r
/**\r
Returns the two's complement checksum of all elements in a buffer of\r
32-bit values.\r
UINT32\r
EFIAPI\r
CalculateCheckSum32 (\r
- IN CONST UINT32 *Buffer,\r
- IN UINTN Length\r
+ IN CONST UINT32 *Buffer,\r
+ IN UINTN Length\r
);\r
\r
-\r
/**\r
Returns the sum of all elements in a buffer of 64-bit values. During\r
calculation, the carry bits are dropped.\r
UINT64\r
EFIAPI\r
CalculateSum64 (\r
- IN CONST UINT64 *Buffer,\r
- IN UINTN Length\r
+ IN CONST UINT64 *Buffer,\r
+ IN UINTN Length\r
);\r
\r
-\r
/**\r
Returns the two's complement checksum of all elements in a buffer of\r
64-bit values.\r
UINT64\r
EFIAPI\r
CalculateCheckSum64 (\r
- IN CONST UINT64 *Buffer,\r
- IN UINTN Length\r
+ IN CONST UINT64 *Buffer,\r
+ IN UINTN Length\r
);\r
\r
/**\r
**/\r
UINT32\r
EFIAPI\r
-CalculateCrc32(\r
- IN VOID *Buffer,\r
- IN UINTN Length\r
+CalculateCrc32 (\r
+ IN VOID *Buffer,\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
\r
@param Context1 Context1 parameter passed into SwitchStack().\r
@param Context2 Context2 parameter passed into SwitchStack().\r
-\r
**/\r
typedef\r
VOID\r
(EFIAPI *SWITCH_STACK_ENTRY_POINT)(\r
- IN VOID *Context1, OPTIONAL\r
+ IN VOID *Context1 OPTIONAL,\r
IN VOID *Context2 OPTIONAL\r
);\r
\r
-\r
/**\r
Used to serialize load and store operations.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Saves the current CPU context that can be restored with a call to LongJump()\r
and returns 0.\r
OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer\r
);\r
\r
-\r
/**\r
Restores the CPU context that was saved with SetJump().\r
\r
IN UINTN Value\r
);\r
\r
-\r
/**\r
Enables CPU interrupts.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Disables CPU interrupts.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Disables CPU interrupts and returns the interrupt state prior to the disable\r
operation.\r
VOID\r
);\r
\r
-\r
/**\r
Enables CPU interrupts for the smallest window required to capture any\r
pending interrupts.\r
VOID\r
);\r
\r
-\r
/**\r
Retrieves the current CPU interrupt state.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Set the current CPU interrupt state.\r
\r
BOOLEAN\r
EFIAPI\r
SetInterruptState (\r
- IN BOOLEAN InterruptState\r
+ IN BOOLEAN InterruptState\r
);\r
\r
-\r
/**\r
Requests CPU to pause for a short period of time.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Transfers control to a function starting with a new stack.\r
\r
EFIAPI\r
SwitchStack (\r
IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
- IN VOID *Context1, OPTIONAL\r
- IN VOID *Context2, OPTIONAL\r
+ IN VOID *Context1 OPTIONAL,\r
+ IN VOID *Context2 OPTIONAL,\r
IN VOID *NewStack,\r
...\r
);\r
\r
-\r
/**\r
Generates a breakpoint on the CPU.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Executes an infinite loop.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Uses as a barrier to stop speculative execution.\r
\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
+//\r
+typedef enum {\r
+ PvalidatePageSize4K = 0,\r
+ PvalidatePageSize2MB,\r
+} PVALIDATE_PAGE_SIZE;\r
+\r
+//\r
+// PVALIDATE Return Code.\r
+//\r
+#define PVALIDATE_RET_SUCCESS 0\r
+#define PVALIDATE_RET_FAIL_INPUT 1\r
+#define PVALIDATE_RET_SIZE_MISMATCH 6\r
+\r
+//\r
+// The PVALIDATE instruction did not make any changes to the RMP entry.\r
+//\r
+#define PVALIDATE_RET_NO_RMPUPDATE 255\r
+\r
+/**\r
+ Execute a PVALIDATE instruction to validate or to rescinds validation of a guest\r
+ page's RMP entry.\r
+\r
+ The instruction is available only when CPUID Fn8000_001F_EAX[SNP]=1.\r
+\r
+ The function is available on X64.\r
+\r
+ @param[in] PageSize The page size to use.\r
+ @param[in] Validate If TRUE, validate the guest virtual address\r
+ otherwise invalidate the guest virtual address.\r
+ @param[in] Address The guest virtual address.\r
+\r
+ @retval PVALIDATE_RET_SUCCESS The PVALIDATE instruction succeeded, and\r
+ updated the RMP entry.\r
+ @retval PVALIDATE_RET_NO_RMPUPDATE The PVALIDATE instruction succeeded, but\r
+ did not update the RMP entry.\r
+ @return Failure code from the PVALIDATE\r
+ instruction.\r
+**/\r
+UINT32\r
+EFIAPI\r
+AsmPvalidate (\r
+ IN PVALIDATE_PAGE_SIZE PageSize,\r
+ IN BOOLEAN Validate,\r
+ IN PHYSICAL_ADDRESS Address\r
+ );\r
+\r
+//\r
+// RDX settings for RMPADJUST\r
+//\r
+#define RMPADJUST_VMPL_MAX 3\r
+#define RMPADJUST_VMPL_MASK 0xFF\r
+#define RMPADJUST_VMPL_SHIFT 0\r
+#define RMPADJUST_PERMISSION_MASK_MASK 0xFF\r
+#define RMPADJUST_PERMISSION_MASK_SHIFT 8\r
+#define RMPADJUST_VMSA_PAGE_BIT BIT16\r
+\r
+/**\r
+ Adjusts the permissions of an SEV-SNP guest page.\r
+\r
+ Executes a RMPADJUST instruction with the register state specified by Rax,\r
+ Rcx, and Rdx. Returns Eax. This function is only available on X64.\r
+\r
+ The instruction is available only when CPUID Fn8000_001F_EAX[SNP]=1.\r
+\r
+ @param[in] Rax The value to load into RAX before executing the RMPADJUST\r
+ instruction.\r
+ @param[in] Rcx The value to load into RCX before executing the RMPADJUST\r
+ instruction.\r
+ @param[in] Rdx The value to load into RDX before executing the RMPADJUST\r
+ instruction.\r
+\r
+ @return Eax\r
+**/\r
+UINT32\r
+EFIAPI\r
+AsmRmpAdjust (\r
+ IN UINT64 Rax,\r
+ IN UINT64 Rcx,\r
+ IN UINT64 Rdx\r
+ );\r
+\r
+#endif\r
\r
#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)\r
///\r
///\r
typedef union {\r
struct {\r
- UINT32 CF:1; ///< Carry Flag.\r
- UINT32 Reserved_0:1; ///< Reserved.\r
- UINT32 PF:1; ///< Parity Flag.\r
- UINT32 Reserved_1:1; ///< Reserved.\r
- UINT32 AF:1; ///< Auxiliary Carry Flag.\r
- UINT32 Reserved_2:1; ///< Reserved.\r
- UINT32 ZF:1; ///< Zero Flag.\r
- UINT32 SF:1; ///< Sign Flag.\r
- UINT32 TF:1; ///< Trap Flag.\r
- UINT32 IF:1; ///< Interrupt Enable Flag.\r
- UINT32 DF:1; ///< Direction Flag.\r
- UINT32 OF:1; ///< Overflow Flag.\r
- UINT32 IOPL:2; ///< I/O Privilege Level.\r
- UINT32 NT:1; ///< Nested Task.\r
- UINT32 Reserved_3:1; ///< Reserved.\r
+ UINT32 CF : 1; ///< Carry Flag.\r
+ UINT32 Reserved_0 : 1; ///< Reserved.\r
+ UINT32 PF : 1; ///< Parity Flag.\r
+ UINT32 Reserved_1 : 1; ///< Reserved.\r
+ UINT32 AF : 1; ///< Auxiliary Carry Flag.\r
+ UINT32 Reserved_2 : 1; ///< Reserved.\r
+ UINT32 ZF : 1; ///< Zero Flag.\r
+ UINT32 SF : 1; ///< Sign Flag.\r
+ UINT32 TF : 1; ///< Trap Flag.\r
+ UINT32 IF : 1; ///< Interrupt Enable Flag.\r
+ UINT32 DF : 1; ///< Direction Flag.\r
+ UINT32 OF : 1; ///< Overflow Flag.\r
+ UINT32 IOPL : 2; ///< I/O Privilege Level.\r
+ UINT32 NT : 1; ///< Nested Task.\r
+ UINT32 Reserved_3 : 1; ///< Reserved.\r
} Bits;\r
UINT16 Uint16;\r
} IA32_FLAGS16;\r
///\r
typedef union {\r
struct {\r
- UINT32 CF:1; ///< Carry Flag.\r
- UINT32 Reserved_0:1; ///< Reserved.\r
- UINT32 PF:1; ///< Parity Flag.\r
- UINT32 Reserved_1:1; ///< Reserved.\r
- UINT32 AF:1; ///< Auxiliary Carry Flag.\r
- UINT32 Reserved_2:1; ///< Reserved.\r
- UINT32 ZF:1; ///< Zero Flag.\r
- UINT32 SF:1; ///< Sign Flag.\r
- UINT32 TF:1; ///< Trap Flag.\r
- UINT32 IF:1; ///< Interrupt Enable Flag.\r
- UINT32 DF:1; ///< Direction Flag.\r
- UINT32 OF:1; ///< Overflow Flag.\r
- UINT32 IOPL:2; ///< I/O Privilege Level.\r
- UINT32 NT:1; ///< Nested Task.\r
- UINT32 Reserved_3:1; ///< Reserved.\r
- UINT32 RF:1; ///< Resume Flag.\r
- UINT32 VM:1; ///< Virtual 8086 Mode.\r
- UINT32 AC:1; ///< Alignment Check.\r
- UINT32 VIF:1; ///< Virtual Interrupt Flag.\r
- UINT32 VIP:1; ///< Virtual Interrupt Pending.\r
- UINT32 ID:1; ///< ID Flag.\r
- UINT32 Reserved_4:10; ///< Reserved.\r
+ UINT32 CF : 1; ///< Carry Flag.\r
+ UINT32 Reserved_0 : 1; ///< Reserved.\r
+ UINT32 PF : 1; ///< Parity Flag.\r
+ UINT32 Reserved_1 : 1; ///< Reserved.\r
+ UINT32 AF : 1; ///< Auxiliary Carry Flag.\r
+ UINT32 Reserved_2 : 1; ///< Reserved.\r
+ UINT32 ZF : 1; ///< Zero Flag.\r
+ UINT32 SF : 1; ///< Sign Flag.\r
+ UINT32 TF : 1; ///< Trap Flag.\r
+ UINT32 IF : 1; ///< Interrupt Enable Flag.\r
+ UINT32 DF : 1; ///< Direction Flag.\r
+ UINT32 OF : 1; ///< Overflow Flag.\r
+ UINT32 IOPL : 2; ///< I/O Privilege Level.\r
+ UINT32 NT : 1; ///< Nested Task.\r
+ UINT32 Reserved_3 : 1; ///< Reserved.\r
+ UINT32 RF : 1; ///< Resume Flag.\r
+ UINT32 VM : 1; ///< Virtual 8086 Mode.\r
+ UINT32 AC : 1; ///< Alignment Check.\r
+ UINT32 VIF : 1; ///< Virtual Interrupt Flag.\r
+ UINT32 VIP : 1; ///< Virtual Interrupt Pending.\r
+ UINT32 ID : 1; ///< ID Flag.\r
+ UINT32 Reserved_4 : 10; ///< Reserved.\r
} Bits;\r
- UINTN UintN;\r
+ UINTN UintN;\r
} IA32_EFLAGS32;\r
\r
///\r
///\r
typedef union {\r
struct {\r
- UINT32 PE:1; ///< Protection Enable.\r
- UINT32 MP:1; ///< Monitor Coprocessor.\r
- UINT32 EM:1; ///< Emulation.\r
- UINT32 TS:1; ///< Task Switched.\r
- UINT32 ET:1; ///< Extension Type.\r
- UINT32 NE:1; ///< Numeric Error.\r
- UINT32 Reserved_0:10; ///< Reserved.\r
- UINT32 WP:1; ///< Write Protect.\r
- UINT32 Reserved_1:1; ///< Reserved.\r
- UINT32 AM:1; ///< Alignment Mask.\r
- UINT32 Reserved_2:10; ///< Reserved.\r
- UINT32 NW:1; ///< Mot Write-through.\r
- UINT32 CD:1; ///< Cache Disable.\r
- UINT32 PG:1; ///< Paging.\r
+ UINT32 PE : 1; ///< Protection Enable.\r
+ UINT32 MP : 1; ///< Monitor Coprocessor.\r
+ UINT32 EM : 1; ///< Emulation.\r
+ UINT32 TS : 1; ///< Task Switched.\r
+ UINT32 ET : 1; ///< Extension Type.\r
+ UINT32 NE : 1; ///< Numeric Error.\r
+ UINT32 Reserved_0 : 10; ///< Reserved.\r
+ UINT32 WP : 1; ///< Write Protect.\r
+ UINT32 Reserved_1 : 1; ///< Reserved.\r
+ UINT32 AM : 1; ///< Alignment Mask.\r
+ UINT32 Reserved_2 : 10; ///< Reserved.\r
+ UINT32 NW : 1; ///< Mot Write-through.\r
+ UINT32 CD : 1; ///< Cache Disable.\r
+ UINT32 PG : 1; ///< Paging.\r
} Bits;\r
- UINTN UintN;\r
+ UINTN UintN;\r
} IA32_CR0;\r
\r
///\r
///\r
typedef union {\r
struct {\r
- UINT32 VME:1; ///< Virtual-8086 Mode Extensions.\r
- UINT32 PVI:1; ///< Protected-Mode Virtual Interrupts.\r
- UINT32 TSD:1; ///< Time Stamp Disable.\r
- UINT32 DE:1; ///< Debugging Extensions.\r
- UINT32 PSE:1; ///< Page Size Extensions.\r
- UINT32 PAE:1; ///< Physical Address Extension.\r
- UINT32 MCE:1; ///< Machine Check Enable.\r
- UINT32 PGE:1; ///< Page Global Enable.\r
- UINT32 PCE:1; ///< Performance Monitoring Counter\r
- ///< Enable.\r
- UINT32 OSFXSR:1; ///< Operating System Support for\r
- ///< FXSAVE and FXRSTOR instructions\r
- UINT32 OSXMMEXCPT:1; ///< Operating System Support for\r
- ///< Unmasked SIMD Floating Point\r
- ///< Exceptions.\r
- UINT32 UMIP:1; ///< User-Mode Instruction Prevention.\r
- UINT32 LA57:1; ///< Linear Address 57bit.\r
- UINT32 VMXE:1; ///< VMX Enable.\r
- UINT32 SMXE:1; ///< SMX Enable.\r
- UINT32 Reserved_3:1; ///< Reserved.\r
- UINT32 FSGSBASE:1; ///< FSGSBASE Enable.\r
- UINT32 PCIDE:1; ///< PCID Enable.\r
- UINT32 OSXSAVE:1; ///< XSAVE and Processor Extended States Enable.\r
- UINT32 Reserved_4:1; ///< Reserved.\r
- UINT32 SMEP:1; ///< SMEP Enable.\r
- UINT32 SMAP:1; ///< SMAP Enable.\r
- UINT32 PKE:1; ///< Protection-Key Enable.\r
- UINT32 Reserved_5:9; ///< Reserved.\r
+ UINT32 VME : 1; ///< Virtual-8086 Mode Extensions.\r
+ UINT32 PVI : 1; ///< Protected-Mode Virtual Interrupts.\r
+ UINT32 TSD : 1; ///< Time Stamp Disable.\r
+ UINT32 DE : 1; ///< Debugging Extensions.\r
+ UINT32 PSE : 1; ///< Page Size Extensions.\r
+ UINT32 PAE : 1; ///< Physical Address Extension.\r
+ UINT32 MCE : 1; ///< Machine Check Enable.\r
+ UINT32 PGE : 1; ///< Page Global Enable.\r
+ UINT32 PCE : 1; ///< Performance Monitoring Counter\r
+ ///< Enable.\r
+ UINT32 OSFXSR : 1; ///< Operating System Support for\r
+ ///< FXSAVE and FXRSTOR instructions\r
+ UINT32 OSXMMEXCPT : 1; ///< Operating System Support for\r
+ ///< Unmasked SIMD Floating Point\r
+ ///< Exceptions.\r
+ UINT32 UMIP : 1; ///< User-Mode Instruction Prevention.\r
+ UINT32 LA57 : 1; ///< Linear Address 57bit.\r
+ UINT32 VMXE : 1; ///< VMX Enable.\r
+ UINT32 SMXE : 1; ///< SMX Enable.\r
+ UINT32 Reserved_3 : 1; ///< Reserved.\r
+ UINT32 FSGSBASE : 1; ///< FSGSBASE Enable.\r
+ UINT32 PCIDE : 1; ///< PCID Enable.\r
+ UINT32 OSXSAVE : 1; ///< XSAVE and Processor Extended States Enable.\r
+ UINT32 Reserved_4 : 1; ///< Reserved.\r
+ UINT32 SMEP : 1; ///< SMEP Enable.\r
+ UINT32 SMAP : 1; ///< SMAP Enable.\r
+ UINT32 PKE : 1; ///< Protection-Key Enable.\r
+ UINT32 Reserved_5 : 9; ///< Reserved.\r
} Bits;\r
- UINTN UintN;\r
+ UINTN UintN;\r
} IA32_CR4;\r
\r
///\r
///\r
typedef union {\r
struct {\r
- UINT32 LimitLow:16;\r
- UINT32 BaseLow:16;\r
- UINT32 BaseMid:8;\r
- UINT32 Type:4;\r
- UINT32 S:1;\r
- UINT32 DPL:2;\r
- UINT32 P:1;\r
- UINT32 LimitHigh:4;\r
- UINT32 AVL:1;\r
- UINT32 L:1;\r
- UINT32 DB:1;\r
- UINT32 G:1;\r
- UINT32 BaseHigh:8;\r
+ UINT32 LimitLow : 16;\r
+ UINT32 BaseLow : 16;\r
+ UINT32 BaseMid : 8;\r
+ UINT32 Type : 4;\r
+ UINT32 S : 1;\r
+ UINT32 DPL : 2;\r
+ UINT32 P : 1;\r
+ UINT32 LimitHigh : 4;\r
+ UINT32 AVL : 1;\r
+ UINT32 L : 1;\r
+ UINT32 DB : 1;\r
+ UINT32 G : 1;\r
+ UINT32 BaseHigh : 8;\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} IA32_SEGMENT_DESCRIPTOR;\r
\r
///\r
/// Byte packed structure for an IDTR, GDTR, LDTR descriptor.\r
///\r
-#pragma pack (1)\r
+ #pragma pack (1)\r
typedef struct {\r
- UINT16 Limit;\r
- UINTN Base;\r
+ UINT16 Limit;\r
+ UINTN Base;\r
} IA32_DESCRIPTOR;\r
-#pragma pack ()\r
+ #pragma pack ()\r
\r
#define IA32_IDT_GATE_TYPE_TASK 0x85\r
#define IA32_IDT_GATE_TYPE_INTERRUPT_16 0x86\r
#define IA32_IDT_GATE_TYPE_INTERRUPT_32 0x8E\r
#define IA32_IDT_GATE_TYPE_TRAP_32 0x8F\r
\r
-#define IA32_GDT_TYPE_TSS 0x9\r
-#define IA32_GDT_ALIGNMENT 8\r
+#define IA32_GDT_TYPE_TSS 0x9\r
+#define IA32_GDT_ALIGNMENT 8\r
\r
-#if defined (MDE_CPU_IA32)\r
+ #if defined (MDE_CPU_IA32)\r
///\r
/// Byte packed structure for an IA-32 Interrupt Gate Descriptor.\r
///\r
typedef union {\r
struct {\r
- UINT32 OffsetLow:16; ///< Offset bits 15..0.\r
- UINT32 Selector:16; ///< Selector.\r
- UINT32 Reserved_0:8; ///< Reserved.\r
- UINT32 GateType:8; ///< Gate Type. See #defines above.\r
- UINT32 OffsetHigh:16; ///< Offset bits 31..16.\r
+ UINT32 OffsetLow : 16; ///< Offset bits 15..0.\r
+ UINT32 Selector : 16; ///< Selector.\r
+ UINT32 Reserved_0 : 8; ///< Reserved.\r
+ UINT32 GateType : 8; ///< Gate Type. See #defines above.\r
+ UINT32 OffsetHigh : 16; ///< Offset bits 31..16.\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} IA32_IDT_GATE_DESCRIPTOR;\r
\r
-#pragma pack (1)\r
+ #pragma pack (1)\r
//\r
// IA32 Task-State Segment Definition\r
//\r
\r
typedef union {\r
struct {\r
- UINT32 LimitLow:16; ///< Segment Limit 15..00\r
- UINT32 BaseLow:16; ///< Base Address 15..00\r
- UINT32 BaseMid:8; ///< Base Address 23..16\r
- UINT32 Type:4; ///< Type (1 0 B 1)\r
- UINT32 Reserved_43:1; ///< 0\r
- UINT32 DPL:2; ///< Descriptor Privilege Level\r
- UINT32 P:1; ///< Segment Present\r
- UINT32 LimitHigh:4; ///< Segment Limit 19..16\r
- UINT32 AVL:1; ///< Available for use by system software\r
- UINT32 Reserved_52:2; ///< 0 0\r
- UINT32 G:1; ///< Granularity\r
- UINT32 BaseHigh:8; ///< Base Address 31..24\r
+ UINT32 LimitLow : 16; ///< Segment Limit 15..00\r
+ UINT32 BaseLow : 16; ///< Base Address 15..00\r
+ UINT32 BaseMid : 8; ///< Base Address 23..16\r
+ UINT32 Type : 4; ///< Type (1 0 B 1)\r
+ UINT32 Reserved_43 : 1; ///< 0\r
+ UINT32 DPL : 2; ///< Descriptor Privilege Level\r
+ UINT32 P : 1; ///< Segment Present\r
+ UINT32 LimitHigh : 4; ///< Segment Limit 19..16\r
+ UINT32 AVL : 1; ///< Available for use by system software\r
+ UINT32 Reserved_52 : 2; ///< 0 0\r
+ UINT32 G : 1; ///< Granularity\r
+ UINT32 BaseHigh : 8; ///< Base Address 31..24\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} IA32_TSS_DESCRIPTOR;\r
-#pragma pack ()\r
+ #pragma pack ()\r
\r
-#endif // defined (MDE_CPU_IA32)\r
+ #endif // defined (MDE_CPU_IA32)\r
\r
-#if defined (MDE_CPU_X64)\r
+ #if defined (MDE_CPU_X64)\r
///\r
/// Byte packed structure for an x64 Interrupt Gate Descriptor.\r
///\r
typedef union {\r
struct {\r
- UINT32 OffsetLow:16; ///< Offset bits 15..0.\r
- UINT32 Selector:16; ///< Selector.\r
- UINT32 Reserved_0:8; ///< Reserved.\r
- UINT32 GateType:8; ///< Gate Type. See #defines above.\r
- UINT32 OffsetHigh:16; ///< Offset bits 31..16.\r
- UINT32 OffsetUpper:32; ///< Offset bits 63..32.\r
- UINT32 Reserved_1:32; ///< Reserved.\r
+ UINT32 OffsetLow : 16; ///< Offset bits 15..0.\r
+ UINT32 Selector : 16; ///< Selector.\r
+ UINT32 Reserved_0 : 8; ///< Reserved.\r
+ UINT32 GateType : 8; ///< Gate Type. See #defines above.\r
+ UINT32 OffsetHigh : 16; ///< Offset bits 31..16.\r
+ UINT32 OffsetUpper : 32; ///< Offset bits 63..32.\r
+ UINT32 Reserved_1 : 32; ///< Reserved.\r
} Bits;\r
struct {\r
- UINT64 Uint64;\r
- UINT64 Uint64_1;\r
+ UINT64 Uint64;\r
+ UINT64 Uint64_1;\r
} Uint128;\r
} IA32_IDT_GATE_DESCRIPTOR;\r
\r
-#pragma pack (1)\r
+ #pragma pack (1)\r
//\r
// IA32 Task-State Segment Definition\r
//\r
\r
typedef union {\r
struct {\r
- UINT32 LimitLow:16; ///< Segment Limit 15..00\r
- UINT32 BaseLow:16; ///< Base Address 15..00\r
- UINT32 BaseMidl:8; ///< Base Address 23..16\r
- UINT32 Type:4; ///< Type (1 0 B 1)\r
- UINT32 Reserved_43:1; ///< 0\r
- UINT32 DPL:2; ///< Descriptor Privilege Level\r
- UINT32 P:1; ///< Segment Present\r
- UINT32 LimitHigh:4; ///< Segment Limit 19..16\r
- UINT32 AVL:1; ///< Available for use by system software\r
- UINT32 Reserved_52:2; ///< 0 0\r
- UINT32 G:1; ///< Granularity\r
- UINT32 BaseMidh:8; ///< Base Address 31..24\r
- UINT32 BaseHigh:32; ///< Base Address 63..32\r
- UINT32 Reserved_96:32; ///< Reserved\r
+ UINT32 LimitLow : 16; ///< Segment Limit 15..00\r
+ UINT32 BaseLow : 16; ///< Base Address 15..00\r
+ UINT32 BaseMidl : 8; ///< Base Address 23..16\r
+ UINT32 Type : 4; ///< Type (1 0 B 1)\r
+ UINT32 Reserved_43 : 1; ///< 0\r
+ UINT32 DPL : 2; ///< Descriptor Privilege Level\r
+ UINT32 P : 1; ///< Segment Present\r
+ UINT32 LimitHigh : 4; ///< Segment Limit 19..16\r
+ UINT32 AVL : 1; ///< Available for use by system software\r
+ UINT32 Reserved_52 : 2; ///< 0 0\r
+ UINT32 G : 1; ///< Granularity\r
+ UINT32 BaseMidh : 8; ///< Base Address 31..24\r
+ UINT32 BaseHigh : 32; ///< Base Address 63..32\r
+ UINT32 Reserved_96 : 32; ///< Reserved\r
} Bits;\r
struct {\r
- UINT64 Uint64;\r
- UINT64 Uint64_1;\r
+ UINT64 Uint64;\r
+ UINT64 Uint64_1;\r
} Uint128;\r
} IA32_TSS_DESCRIPTOR;\r
-#pragma pack ()\r
+ #pragma pack ()\r
\r
-#endif // defined (MDE_CPU_X64)\r
+ #endif // defined (MDE_CPU_X64)\r
\r
///\r
/// Byte packed structure for an FP/SSE/SSE2 context.\r
///\r
typedef struct {\r
- UINT8 Buffer[512];\r
+ UINT8 Buffer[512];\r
} IA32_FX_BUFFER;\r
\r
///\r
/// Structures for the 16-bit real mode thunks.\r
///\r
typedef struct {\r
- UINT32 Reserved1;\r
- UINT32 Reserved2;\r
- UINT32 Reserved3;\r
- UINT32 Reserved4;\r
- UINT8 BL;\r
- UINT8 BH;\r
- UINT16 Reserved5;\r
- UINT8 DL;\r
- UINT8 DH;\r
- UINT16 Reserved6;\r
- UINT8 CL;\r
- UINT8 CH;\r
- UINT16 Reserved7;\r
- UINT8 AL;\r
- UINT8 AH;\r
- UINT16 Reserved8;\r
+ UINT32 Reserved1;\r
+ UINT32 Reserved2;\r
+ UINT32 Reserved3;\r
+ UINT32 Reserved4;\r
+ UINT8 BL;\r
+ UINT8 BH;\r
+ UINT16 Reserved5;\r
+ UINT8 DL;\r
+ UINT8 DH;\r
+ UINT16 Reserved6;\r
+ UINT8 CL;\r
+ UINT8 CH;\r
+ UINT16 Reserved7;\r
+ UINT8 AL;\r
+ UINT8 AH;\r
+ UINT16 Reserved8;\r
} IA32_BYTE_REGS;\r
\r
typedef struct {\r
- UINT16 DI;\r
- UINT16 Reserved1;\r
- UINT16 SI;\r
- UINT16 Reserved2;\r
- UINT16 BP;\r
- UINT16 Reserved3;\r
- UINT16 SP;\r
- UINT16 Reserved4;\r
- UINT16 BX;\r
- UINT16 Reserved5;\r
- UINT16 DX;\r
- UINT16 Reserved6;\r
- UINT16 CX;\r
- UINT16 Reserved7;\r
- UINT16 AX;\r
- UINT16 Reserved8;\r
+ UINT16 DI;\r
+ UINT16 Reserved1;\r
+ UINT16 SI;\r
+ UINT16 Reserved2;\r
+ UINT16 BP;\r
+ UINT16 Reserved3;\r
+ UINT16 SP;\r
+ UINT16 Reserved4;\r
+ UINT16 BX;\r
+ UINT16 Reserved5;\r
+ UINT16 DX;\r
+ UINT16 Reserved6;\r
+ UINT16 CX;\r
+ UINT16 Reserved7;\r
+ UINT16 AX;\r
+ UINT16 Reserved8;\r
} IA32_WORD_REGS;\r
\r
typedef struct {\r
- UINT32 EDI;\r
- UINT32 ESI;\r
- UINT32 EBP;\r
- UINT32 ESP;\r
- UINT32 EBX;\r
- UINT32 EDX;\r
- UINT32 ECX;\r
- UINT32 EAX;\r
- UINT16 DS;\r
- UINT16 ES;\r
- UINT16 FS;\r
- UINT16 GS;\r
- IA32_EFLAGS32 EFLAGS;\r
- UINT32 Eip;\r
- UINT16 CS;\r
- UINT16 SS;\r
+ UINT32 EDI;\r
+ UINT32 ESI;\r
+ UINT32 EBP;\r
+ UINT32 ESP;\r
+ UINT32 EBX;\r
+ UINT32 EDX;\r
+ UINT32 ECX;\r
+ UINT32 EAX;\r
+ UINT16 DS;\r
+ UINT16 ES;\r
+ UINT16 FS;\r
+ UINT16 GS;\r
+ IA32_EFLAGS32 EFLAGS;\r
+ UINT32 Eip;\r
+ UINT16 CS;\r
+ UINT16 SS;\r
} IA32_DWORD_REGS;\r
\r
typedef union {\r
- IA32_DWORD_REGS E;\r
- IA32_WORD_REGS X;\r
- IA32_BYTE_REGS H;\r
+ IA32_DWORD_REGS E;\r
+ IA32_WORD_REGS X;\r
+ IA32_BYTE_REGS H;\r
} IA32_REGISTER_SET;\r
\r
///\r
/// Byte packed structure for an 16-bit real mode thunks.\r
///\r
typedef struct {\r
- IA32_REGISTER_SET *RealModeState;\r
- VOID *RealModeBuffer;\r
- UINT32 RealModeBufferSize;\r
- UINT32 ThunkAttributes;\r
+ IA32_REGISTER_SET *RealModeState;\r
+ VOID *RealModeBuffer;\r
+ UINT32 RealModeBufferSize;\r
+ UINT32 ThunkAttributes;\r
} THUNK_CONTEXT;\r
\r
-#define THUNK_ATTRIBUTE_BIG_REAL_MODE 0x00000001\r
-#define THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15 0x00000002\r
-#define THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL 0x00000004\r
+#define THUNK_ATTRIBUTE_BIG_REAL_MODE 0x00000001\r
+#define THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15 0x00000002\r
+#define THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL 0x00000004\r
\r
///\r
/// Type definition for representing labels in NASM source code that allow for\r
/// edk2 coding style for function (or pointer-to-function) typedefs. The VOID\r
/// return type and the VOID argument list are merely artifacts.\r
///\r
-typedef VOID (X86_ASSEMBLY_PATCH_LABEL) (VOID);\r
+typedef VOID (X86_ASSEMBLY_PATCH_LABEL) (\r
+ VOID\r
+ );\r
\r
/**\r
Retrieves CPUID information.\r
UINT32\r
EFIAPI\r
AsmCpuid (\r
- IN UINT32 Index,\r
- OUT UINT32 *Eax, OPTIONAL\r
- OUT UINT32 *Ebx, OPTIONAL\r
- OUT UINT32 *Ecx, OPTIONAL\r
- OUT UINT32 *Edx OPTIONAL\r
+ IN UINT32 Index,\r
+ OUT UINT32 *Eax OPTIONAL,\r
+ OUT UINT32 *Ebx OPTIONAL,\r
+ OUT UINT32 *Ecx OPTIONAL,\r
+ OUT UINT32 *Edx OPTIONAL\r
);\r
\r
-\r
/**\r
Retrieves CPUID information using an extended leaf identifier.\r
\r
UINT32\r
EFIAPI\r
AsmCpuidEx (\r
- IN UINT32 Index,\r
- IN UINT32 SubIndex,\r
- OUT UINT32 *Eax, OPTIONAL\r
- OUT UINT32 *Ebx, OPTIONAL\r
- OUT UINT32 *Ecx, OPTIONAL\r
- OUT UINT32 *Edx OPTIONAL\r
+ IN UINT32 Index,\r
+ IN UINT32 SubIndex,\r
+ OUT UINT32 *Eax OPTIONAL,\r
+ OUT UINT32 *Ebx OPTIONAL,\r
+ OUT UINT32 *Ecx OPTIONAL,\r
+ OUT UINT32 *Edx OPTIONAL\r
);\r
\r
-\r
/**\r
Set CD bit and clear NW bit of CR0 followed by a WBINVD.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Perform a WBINVD and clear both the CD and NW bits of CR0.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Returns the lower 32-bits of a Machine Specific Register(MSR).\r
\r
UINT32\r
EFIAPI\r
AsmReadMsr32 (\r
- IN UINT32 Index\r
+ IN UINT32 Index\r
);\r
\r
-\r
/**\r
Writes a 32-bit value to a Machine Specific Register(MSR), and returns the value.\r
The upper 32-bits of the MSR are set to zero.\r
UINT32\r
EFIAPI\r
AsmWriteMsr32 (\r
- IN UINT32 Index,\r
- IN UINT32 Value\r
+ IN UINT32 Index,\r
+ IN UINT32 Value\r
);\r
\r
-\r
/**\r
Reads a 64-bit MSR, performs a bitwise OR on the lower 32-bits, and\r
writes the result back to the 64-bit MSR.\r
UINT32\r
EFIAPI\r
AsmMsrOr32 (\r
- IN UINT32 Index,\r
- IN UINT32 OrData\r
+ IN UINT32 Index,\r
+ IN UINT32 OrData\r
);\r
\r
-\r
/**\r
Reads a 64-bit MSR, performs a bitwise AND on the lower 32-bits, and writes\r
the result back to the 64-bit MSR.\r
UINT32\r
EFIAPI\r
AsmMsrAnd32 (\r
- IN UINT32 Index,\r
- IN UINT32 AndData\r
+ IN UINT32 Index,\r
+ IN UINT32 AndData\r
);\r
\r
-\r
/**\r
Reads a 64-bit MSR, performs a bitwise AND followed by a bitwise OR\r
on the lower 32-bits, and writes the result back to the 64-bit MSR.\r
UINT32\r
EFIAPI\r
AsmMsrAndThenOr32 (\r
- IN UINT32 Index,\r
- IN UINT32 AndData,\r
- IN UINT32 OrData\r
+ IN UINT32 Index,\r
+ IN UINT32 AndData,\r
+ IN UINT32 OrData\r
);\r
\r
-\r
/**\r
Reads a bit field of an MSR.\r
\r
UINT32\r
EFIAPI\r
AsmMsrBitFieldRead32 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
-\r
/**\r
Writes a bit field to an MSR.\r
\r
UINT32\r
EFIAPI\r
AsmMsrBitFieldWrite32 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT32 Value\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT32 Value\r
);\r
\r
-\r
/**\r
Reads a bit field in a 64-bit MSR, performs a bitwise OR, and writes the\r
result back to the bit field in the 64-bit MSR.\r
UINT32\r
EFIAPI\r
AsmMsrBitFieldOr32 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT32 OrData\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT32 OrData\r
);\r
\r
-\r
/**\r
Reads a bit field in a 64-bit MSR, performs a bitwise AND, and writes the\r
result back to the bit field in the 64-bit MSR.\r
UINT32\r
EFIAPI\r
AsmMsrBitFieldAnd32 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT32 AndData\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT32 AndData\r
);\r
\r
-\r
/**\r
Reads a bit field in a 64-bit MSR, performs a bitwise AND followed by a\r
bitwise OR, and writes the result back to the bit field in the\r
UINT32\r
EFIAPI\r
AsmMsrBitFieldAndThenOr32 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT32 AndData,\r
- IN UINT32 OrData\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT32 AndData,\r
+ IN UINT32 OrData\r
);\r
\r
-\r
/**\r
Returns a 64-bit Machine Specific Register(MSR).\r
\r
UINT64\r
EFIAPI\r
AsmReadMsr64 (\r
- IN UINT32 Index\r
+ IN UINT32 Index\r
);\r
\r
-\r
/**\r
Writes a 64-bit value to a Machine Specific Register(MSR), and returns the\r
value.\r
UINT64\r
EFIAPI\r
AsmWriteMsr64 (\r
- IN UINT32 Index,\r
- IN UINT64 Value\r
+ IN UINT32 Index,\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Reads a 64-bit MSR, performs a bitwise OR, and writes the result\r
back to the 64-bit MSR.\r
UINT64\r
EFIAPI\r
AsmMsrOr64 (\r
- IN UINT32 Index,\r
- IN UINT64 OrData\r
+ IN UINT32 Index,\r
+ IN UINT64 OrData\r
);\r
\r
-\r
/**\r
Reads a 64-bit MSR, performs a bitwise AND, and writes the result back to the\r
64-bit MSR.\r
UINT64\r
EFIAPI\r
AsmMsrAnd64 (\r
- IN UINT32 Index,\r
- IN UINT64 AndData\r
+ IN UINT32 Index,\r
+ IN UINT64 AndData\r
);\r
\r
-\r
/**\r
Reads a 64-bit MSR, performs a bitwise AND followed by a bitwise\r
OR, and writes the result back to the 64-bit MSR.\r
UINT64\r
EFIAPI\r
AsmMsrAndThenOr64 (\r
- IN UINT32 Index,\r
- IN UINT64 AndData,\r
- IN UINT64 OrData\r
+ IN UINT32 Index,\r
+ IN UINT64 AndData,\r
+ IN UINT64 OrData\r
);\r
\r
-\r
/**\r
Reads a bit field of an MSR.\r
\r
UINT64\r
EFIAPI\r
AsmMsrBitFieldRead64 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
-\r
/**\r
Writes a bit field to an MSR.\r
\r
UINT64\r
EFIAPI\r
AsmMsrBitFieldWrite64 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT64 Value\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Reads a bit field in a 64-bit MSR, performs a bitwise OR, and\r
writes the result back to the bit field in the 64-bit MSR.\r
UINT64\r
EFIAPI\r
AsmMsrBitFieldOr64 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT64 OrData\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT64 OrData\r
);\r
\r
-\r
/**\r
Reads a bit field in a 64-bit MSR, performs a bitwise AND, and writes the\r
result back to the bit field in the 64-bit MSR.\r
UINT64\r
EFIAPI\r
AsmMsrBitFieldAnd64 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT64 AndData\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT64 AndData\r
);\r
\r
-\r
/**\r
Reads a bit field in a 64-bit MSR, performs a bitwise AND followed by a\r
bitwise OR, and writes the result back to the bit field in the\r
UINT64\r
EFIAPI\r
AsmMsrBitFieldAndThenOr64 (\r
- IN UINT32 Index,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINT64 AndData,\r
- IN UINT64 OrData\r
+ IN UINT32 Index,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINT64 AndData,\r
+ IN UINT64 OrData\r
);\r
\r
-\r
/**\r
Reads the current value of the EFLAGS register.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of the Control Register 0 (CR0).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of the Control Register 2 (CR2).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of the Control Register 3 (CR3).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of the Control Register 4 (CR4).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Writes a value to Control Register 0 (CR0).\r
\r
UINTN Cr0\r
);\r
\r
-\r
/**\r
Writes a value to Control Register 2 (CR2).\r
\r
UINTN Cr2\r
);\r
\r
-\r
/**\r
Writes a value to Control Register 3 (CR3).\r
\r
UINTN Cr3\r
);\r
\r
-\r
/**\r
Writes a value to Control Register 4 (CR4).\r
\r
UINTN Cr4\r
);\r
\r
-\r
/**\r
Reads the current value of Debug Register 0 (DR0).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Debug Register 1 (DR1).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Debug Register 2 (DR2).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Debug Register 3 (DR3).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Debug Register 4 (DR4).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Debug Register 5 (DR5).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Debug Register 6 (DR6).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Debug Register 7 (DR7).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Writes a value to Debug Register 0 (DR0).\r
\r
UINTN Dr0\r
);\r
\r
-\r
/**\r
Writes a value to Debug Register 1 (DR1).\r
\r
UINTN Dr1\r
);\r
\r
-\r
/**\r
Writes a value to Debug Register 2 (DR2).\r
\r
UINTN Dr2\r
);\r
\r
-\r
/**\r
Writes a value to Debug Register 3 (DR3).\r
\r
UINTN Dr3\r
);\r
\r
-\r
/**\r
Writes a value to Debug Register 4 (DR4).\r
\r
UINTN Dr4\r
);\r
\r
-\r
/**\r
Writes a value to Debug Register 5 (DR5).\r
\r
UINTN Dr5\r
);\r
\r
-\r
/**\r
Writes a value to Debug Register 6 (DR6).\r
\r
UINTN Dr6\r
);\r
\r
-\r
/**\r
Writes a value to Debug Register 7 (DR7).\r
\r
UINTN Dr7\r
);\r
\r
-\r
/**\r
Reads the current value of Code Segment Register (CS).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Data Segment Register (DS).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Extra Segment Register (ES).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of FS Data Segment Register (FS).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of GS Data Segment Register (GS).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Stack Segment Register (SS).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of Task Register (TR).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current Global Descriptor Table Register(GDTR) descriptor.\r
\r
VOID\r
EFIAPI\r
AsmReadGdtr (\r
- OUT IA32_DESCRIPTOR *Gdtr\r
+ OUT IA32_DESCRIPTOR *Gdtr\r
);\r
\r
-\r
/**\r
Writes the current Global Descriptor Table Register (GDTR) descriptor.\r
\r
VOID\r
EFIAPI\r
AsmWriteGdtr (\r
- IN CONST IA32_DESCRIPTOR *Gdtr\r
+ IN CONST IA32_DESCRIPTOR *Gdtr\r
);\r
\r
-\r
/**\r
Reads the current Interrupt Descriptor Table Register(IDTR) descriptor.\r
\r
VOID\r
EFIAPI\r
AsmReadIdtr (\r
- OUT IA32_DESCRIPTOR *Idtr\r
+ OUT IA32_DESCRIPTOR *Idtr\r
);\r
\r
-\r
/**\r
Writes the current Interrupt Descriptor Table Register(IDTR) descriptor.\r
\r
VOID\r
EFIAPI\r
AsmWriteIdtr (\r
- IN CONST IA32_DESCRIPTOR *Idtr\r
+ IN CONST IA32_DESCRIPTOR *Idtr\r
);\r
\r
-\r
/**\r
Reads the current Local Descriptor Table Register(LDTR) selector.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Writes the current Local Descriptor Table Register (LDTR) selector.\r
\r
VOID\r
EFIAPI\r
AsmWriteLdtr (\r
- IN UINT16 Ldtr\r
+ IN UINT16 Ldtr\r
);\r
\r
-\r
/**\r
Save the current floating point/SSE/SSE2 context to a buffer.\r
\r
VOID\r
EFIAPI\r
AsmFxSave (\r
- OUT IA32_FX_BUFFER *Buffer\r
+ OUT IA32_FX_BUFFER *Buffer\r
);\r
\r
-\r
/**\r
Restores the current floating point/SSE/SSE2 context from a buffer.\r
\r
VOID\r
EFIAPI\r
AsmFxRestore (\r
- IN CONST IA32_FX_BUFFER *Buffer\r
+ IN CONST IA32_FX_BUFFER *Buffer\r
);\r
\r
-\r
/**\r
Reads the current value of 64-bit MMX Register #0 (MM0).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of 64-bit MMX Register #1 (MM1).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of 64-bit MMX Register #2 (MM2).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of 64-bit MMX Register #3 (MM3).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of 64-bit MMX Register #4 (MM4).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of 64-bit MMX Register #5 (MM5).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of 64-bit MMX Register #6 (MM6).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of 64-bit MMX Register #7 (MM7).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Writes the current value of 64-bit MMX Register #0 (MM0).\r
\r
VOID\r
EFIAPI\r
AsmWriteMm0 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Writes the current value of 64-bit MMX Register #1 (MM1).\r
\r
VOID\r
EFIAPI\r
AsmWriteMm1 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Writes the current value of 64-bit MMX Register #2 (MM2).\r
\r
VOID\r
EFIAPI\r
AsmWriteMm2 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Writes the current value of 64-bit MMX Register #3 (MM3).\r
\r
VOID\r
EFIAPI\r
AsmWriteMm3 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Writes the current value of 64-bit MMX Register #4 (MM4).\r
\r
VOID\r
EFIAPI\r
AsmWriteMm4 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Writes the current value of 64-bit MMX Register #5 (MM5).\r
\r
VOID\r
EFIAPI\r
AsmWriteMm5 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Writes the current value of 64-bit MMX Register #6 (MM6).\r
\r
VOID\r
EFIAPI\r
AsmWriteMm6 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Writes the current value of 64-bit MMX Register #7 (MM7).\r
\r
VOID\r
EFIAPI\r
AsmWriteMm7 (\r
- IN UINT64 Value\r
+ IN UINT64 Value\r
);\r
\r
-\r
/**\r
Reads the current value of Time Stamp Counter (TSC).\r
\r
VOID\r
);\r
\r
-\r
/**\r
Reads the current value of a Performance Counter (PMC).\r
\r
UINT64\r
EFIAPI\r
AsmReadPmc (\r
- IN UINT32 Index\r
+ IN UINT32 Index\r
);\r
\r
-\r
/**\r
Sets up a monitor buffer that is used by AsmMwait().\r
\r
UINTN\r
EFIAPI\r
AsmMonitor (\r
- IN UINTN Eax,\r
- IN UINTN Ecx,\r
- IN UINTN Edx\r
+ IN UINTN Eax,\r
+ IN UINTN Ecx,\r
+ IN UINTN Edx\r
);\r
\r
-\r
/**\r
Executes an MWAIT instruction.\r
\r
UINTN\r
EFIAPI\r
AsmMwait (\r
- IN UINTN Eax,\r
- IN UINTN Ecx\r
+ IN UINTN Eax,\r
+ IN UINTN Ecx\r
);\r
\r
-\r
/**\r
Executes a WBINVD instruction.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Executes a INVD instruction.\r
\r
VOID\r
);\r
\r
-\r
/**\r
Flushes a cache line from all the instruction and data caches within the\r
coherency domain of the CPU.\r
VOID *\r
EFIAPI\r
AsmFlushCacheLine (\r
- IN VOID *LinearAddress\r
+ IN VOID *LinearAddress\r
);\r
\r
-\r
/**\r
Enables the 32-bit paging mode on the CPU.\r
\r
EFIAPI\r
AsmEnablePaging32 (\r
IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
- IN VOID *Context1, OPTIONAL\r
- IN VOID *Context2, OPTIONAL\r
+ IN VOID *Context1 OPTIONAL,\r
+ IN VOID *Context2 OPTIONAL,\r
IN VOID *NewStack\r
);\r
\r
-\r
/**\r
Disables the 32-bit paging mode on the CPU.\r
\r
EFIAPI\r
AsmDisablePaging32 (\r
IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
- IN VOID *Context1, OPTIONAL\r
- IN VOID *Context2, OPTIONAL\r
+ IN VOID *Context1 OPTIONAL,\r
+ IN VOID *Context2 OPTIONAL,\r
IN VOID *NewStack\r
);\r
\r
-\r
/**\r
Enables the 64-bit paging mode on the CPU.\r
\r
VOID\r
EFIAPI\r
AsmEnablePaging64 (\r
- IN UINT16 Cs,\r
- IN UINT64 EntryPoint,\r
- IN UINT64 Context1, OPTIONAL\r
- IN UINT64 Context2, OPTIONAL\r
- IN UINT64 NewStack\r
+ IN UINT16 Cs,\r
+ IN UINT64 EntryPoint,\r
+ IN UINT64 Context1 OPTIONAL,\r
+ IN UINT64 Context2 OPTIONAL,\r
+ IN UINT64 NewStack\r
);\r
\r
-\r
/**\r
Disables the 64-bit paging mode on the CPU.\r
\r
VOID\r
EFIAPI\r
AsmDisablePaging64 (\r
- IN UINT16 Cs,\r
- IN UINT32 EntryPoint,\r
- IN UINT32 Context1, OPTIONAL\r
- IN UINT32 Context2, OPTIONAL\r
- IN UINT32 NewStack\r
+ IN UINT16 Cs,\r
+ IN UINT32 EntryPoint,\r
+ IN UINT32 Context1 OPTIONAL,\r
+ IN UINT32 Context2 OPTIONAL,\r
+ IN UINT32 NewStack\r
);\r
\r
-\r
//\r
// 16-bit thunking services\r
//\r
VOID\r
EFIAPI\r
AsmGetThunk16Properties (\r
- OUT UINT32 *RealModeBufferSize,\r
- OUT UINT32 *ExtraStackSize\r
+ OUT UINT32 *RealModeBufferSize,\r
+ OUT UINT32 *ExtraStackSize\r
);\r
\r
-\r
/**\r
Prepares all structures a code required to use AsmThunk16().\r
\r
VOID\r
EFIAPI\r
AsmPrepareThunk16 (\r
- IN OUT THUNK_CONTEXT *ThunkContext\r
+ IN OUT THUNK_CONTEXT *ThunkContext\r
);\r
\r
-\r
/**\r
Transfers control to a 16-bit real mode entry point and returns the results.\r
\r
VOID\r
EFIAPI\r
AsmThunk16 (\r
- IN OUT THUNK_CONTEXT *ThunkContext\r
+ IN OUT THUNK_CONTEXT *ThunkContext\r
);\r
\r
-\r
/**\r
Prepares all structures and code for a 16-bit real mode thunk, transfers\r
control to a 16-bit real mode entry point, and returns the results.\r
VOID\r
EFIAPI\r
AsmPrepareAndThunk16 (\r
- IN OUT THUNK_CONTEXT *ThunkContext\r
+ IN OUT THUNK_CONTEXT *ThunkContext\r
);\r
\r
/**\r
BOOLEAN\r
EFIAPI\r
AsmRdRand16 (\r
- OUT UINT16 *Rand\r
+ OUT UINT16 *Rand\r
);\r
\r
/**\r
BOOLEAN\r
EFIAPI\r
AsmRdRand32 (\r
- OUT UINT32 *Rand\r
+ OUT UINT32 *Rand\r
);\r
\r
/**\r
BOOLEAN\r
EFIAPI\r
AsmRdRand64 (\r
- OUT UINT64 *Rand\r
+ OUT UINT64 *Rand\r
);\r
\r
/**\r
VOID\r
EFIAPI\r
AsmWriteTr (\r
- IN UINT16 Selector\r
+ IN UINT16 Selector\r
);\r
\r
/**\r
IN UINT32 Index\r
);\r
\r
+/**\r
+ Executes a XSETBV instruction to write a 64-bit value to a Extended Control\r
+ Register(XCR), and returns the value.\r
+\r
+ Writes the 64-bit value specified by Value to the XCR specified by Index. The\r
+ 64-bit value written to the XCR is returned. No parameter checking is\r
+ performed on Index or Value, and some of these may cause CPU exceptions. The\r
+ caller must either guarantee that Index and Value are valid, or the caller\r
+ must establish proper exception handlers. This function is only available on\r
+ IA-32 and x64.\r
+\r
+ @param Index The 32-bit XCR index to write.\r
+ @param Value The 64-bit value to write to the XCR.\r
+\r
+ @return Value\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmXSetBv (\r
+ IN UINT32 Index,\r
+ IN UINT64 Value\r
+ );\r
+\r
+/**\r
+ Executes a VMGEXIT instruction (VMMCALL with a REP prefix)\r
+\r
+ Executes a VMGEXIT instruction. This function is only available on IA-32 and\r
+ x64.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+AsmVmgExit (\r
+ VOID\r
+ );\r
\r
/**\r
Patch the immediate operand of an IA32 or X64 instruction such that the byte,\r
VOID\r
EFIAPI\r
PatchInstructionX86 (\r
- OUT X86_ASSEMBLY_PATCH_LABEL *InstructionEnd,\r
- IN UINT64 PatchValue,\r
- IN UINTN ValueSize\r
+ OUT X86_ASSEMBLY_PATCH_LABEL *InstructionEnd,\r
+ IN UINT64 PatchValue,\r
+ IN UINTN ValueSize\r
);\r
\r
#endif // defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)\r