/// 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
#endif // defined (MDE_CPU_RISCV64)\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
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer OPTIONAL,\r
+ OUT UINT64 *Data\r
);\r
\r
-\r
/**\r
Returns the length of a Null-terminated Unicode string.\r
\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
+ IN CONST CHAR16 *FirstString,\r
+ IN CONST CHAR16 *SecondString,\r
+ IN UINTN Length\r
);\r
\r
-\r
/**\r
Returns the first occurrence of a Null-terminated Unicode sub-string\r
in a Null-terminated Unicode 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
-\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
+ IN CONST CHAR16 *Source,\r
+ IN UINTN Length,\r
+ OUT CHAR8 *Destination,\r
+ IN UINTN DestMax,\r
+ OUT UINTN *DestinationLength\r
);\r
\r
-\r
/**\r
Returns the length of a Null-terminated ASCII string.\r
\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
+ IN CONST CHAR8 *FirstString,\r
+ IN CONST CHAR8 *SecondString,\r
+ IN UINTN Length\r
);\r
\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
+ IN CONST CHAR8 *String,\r
+ IN UINTN Length,\r
+ OUT UINT8 *Buffer,\r
+ IN UINTN MaxBufferSize\r
);\r
\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
VOID\r
);\r
\r
-\r
/**\r
Patch the immediate operand of an IA32 or X64 instruction such that the byte,\r
word, dword or qword operand is encoded at the end of the instruction's\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