/** @file\r
Declaration of internal functions in BaseLib.\r
\r
- Copyright (c) 2006 - 2008, Intel Corporation<BR>\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include <Library/BaseLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/DebugLib.h>\r
-#include <Library/TimerLib.h>\r
#include <Library/PcdLib.h>\r
\r
//\r
UINT64\r
EFIAPI\r
InternalMathLShiftU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
/**\r
- Shifts a 64-bit integer right between 0 and 63 bits. This high bits\r
+ Shifts a 64-bit integer right between 0 and 63 bits. The high bits\r
are filled with zeros. The shifted value is returned.\r
\r
This function shifts the 64-bit value Operand to the right by Count bits. The\r
UINT64\r
EFIAPI\r
InternalMathRShiftU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
/**\r
UINT64\r
EFIAPI\r
InternalMathARShiftU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
/**\r
the low bits with the high bits that were rotated.\r
\r
This function rotates the 64-bit value Operand to the left by Count bits. The\r
- low Count bits are fill with the high Count bits of Operand. The rotated\r
+ low Count bits are filled with the high Count bits of Operand. The rotated\r
value is returned.\r
\r
@param Operand The 64-bit operand to rotate left.\r
UINT64\r
EFIAPI\r
InternalMathLRotU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
/**\r
the high bits with the high low bits that were rotated.\r
\r
This function rotates the 64-bit value Operand to the right by Count bits.\r
- The high Count bits are fill with the low Count bits of Operand. The rotated\r
+ The high Count bits are filled with the low Count bits of Operand. The rotated\r
value is returned.\r
\r
@param Operand The 64-bit operand to rotate right.\r
UINT64\r
EFIAPI\r
InternalMathRRotU64 (\r
- IN UINT64 Operand,\r
- IN UINTN Count\r
+ IN UINT64 Operand,\r
+ IN UINTN Count\r
);\r
\r
/**\r
UINT64\r
EFIAPI\r
InternalMathSwapBytes64 (\r
- IN UINT64 Operand\r
+ IN UINT64 Operand\r
);\r
\r
/**\r
- Multiples a 64-bit unsigned integer by a 32-bit unsigned integer\r
+ Multiplies a 64-bit unsigned integer by a 32-bit unsigned integer\r
and generates a 64-bit unsigned result.\r
\r
- This function multiples the 64-bit unsigned value Multiplicand by the 32-bit\r
+ This function multiplies the 64-bit unsigned value Multiplicand by the 32-bit\r
unsigned value Multiplier and generates a 64-bit unsigned result. This 64-\r
bit unsigned result is returned.\r
\r
UINT64\r
EFIAPI\r
InternalMathMultU64x32 (\r
- IN UINT64 Multiplicand,\r
- IN UINT32 Multiplier\r
+ IN UINT64 Multiplicand,\r
+ IN UINT32 Multiplier\r
);\r
\r
/**\r
- Multiples a 64-bit unsigned integer by a 64-bit unsigned integer\r
+ Multiplies a 64-bit unsigned integer by a 64-bit unsigned integer\r
and generates a 64-bit unsigned result.\r
\r
This function multiples the 64-bit unsigned value Multiplicand by the 64-bit\r
UINT64\r
EFIAPI\r
InternalMathMultU64x64 (\r
- IN UINT64 Multiplicand,\r
- IN UINT64 Multiplier\r
+ IN UINT64 Multiplicand,\r
+ IN UINT64 Multiplier\r
);\r
\r
/**\r
UINT64\r
EFIAPI\r
InternalMathDivU64x32 (\r
- IN UINT64 Dividend,\r
- IN UINT32 Divisor\r
+ IN UINT64 Dividend,\r
+ IN UINT32 Divisor\r
);\r
\r
/**\r
UINT32\r
EFIAPI\r
InternalMathModU64x32 (\r
- IN UINT64 Dividend,\r
- IN UINT32 Divisor\r
+ IN UINT64 Dividend,\r
+ IN UINT32 Divisor\r
);\r
\r
/**\r
UINT64\r
EFIAPI\r
InternalMathDivRemU64x32 (\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
UINT64\r
EFIAPI\r
InternalMathDivRemU64x64 (\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
INT64\r
EFIAPI\r
InternalMathDivRemS64x64 (\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
EFIAPI\r
InternalSwitchStack (\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
IN VA_LIST Marker\r
);\r
\r
-\r
-/**\r
- Worker function that locates the Node in the List.\r
-\r
- By searching the List, finds the location of the Node in List. At the same time,\r
- verifies the validity of this list.\r
-\r
- If List is NULL, then ASSERT().\r
- If List->ForwardLink is NULL, then ASSERT().\r
- If List->backLink is NULL, then ASSERT().\r
- If Node is NULL, then ASSERT();\r
- If PcdMaximumLinkedListLenth is not zero, and prior to insertion the number\r
- of nodes in ListHead, including the ListHead node, is greater than or\r
- equal to PcdMaximumLinkedListLength, then ASSERT().\r
-\r
- @param List A pointer to a node in a linked list.\r
- @param Node A pointer to one nod.\r
-\r
- @retval TRUE Node is in List\r
- @retval FALSE Node isn't in List, or List is invalid\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-IsNodeInList (\r
- IN CONST LIST_ENTRY *List,\r
- IN CONST LIST_ENTRY *Node\r
- );\r
-\r
-\r
-/**\r
- Performs an atomic increment of an 32-bit unsigned integer.\r
-\r
- Performs an atomic increment of the 32-bit unsigned integer specified by\r
- Value and returns the incremented value. The increment operation must be\r
- performed using MP safe mechanisms. The state of the return value is not\r
- guaranteed to be MP safe.\r
-\r
- @param Value A pointer to the 32-bit value to increment.\r
-\r
- @return The incremented value.\r
-\r
-**/\r
-UINT32\r
-EFIAPI\r
-InternalSyncIncrement (\r
- IN volatile UINT32 *Value\r
- );\r
-\r
-\r
-/**\r
- Performs an atomic decrement of an 32-bit unsigned integer.\r
-\r
- Performs an atomic decrement of the 32-bit unsigned integer specified by\r
- Value and returns the decrement value. The decrement operation must be\r
- performed using MP safe mechanisms. The state of the return value is not\r
- guaranteed to be MP safe.\r
-\r
- @param Value A pointer to the 32-bit value to decrement.\r
-\r
- @return The decrement value.\r
-\r
-**/\r
-UINT32\r
-EFIAPI\r
-InternalSyncDecrement (\r
- IN volatile UINT32 *Value\r
- );\r
-\r
-\r
-/**\r
- Performs an atomic compare exchange operation on a 32-bit unsigned integer.\r
-\r
- Performs an atomic compare exchange operation on the 32-bit unsigned integer\r
- specified by Value. If Value is equal to CompareValue, then Value is set to\r
- ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,\r
- then Value is returned. The compare exchange operation must be performed using\r
- MP safe mechanisms.\r
-\r
- @param Value A pointer to the 32-bit value for the compare exchange\r
- operation.\r
- @param CompareValue 32-bit value used in compare operation.\r
- @param ExchangeValue 32-bit value used in exchange operation.\r
-\r
- @return The original *Value before exchange.\r
-\r
-**/\r
-UINT32\r
-EFIAPI\r
-InternalSyncCompareExchange32 (\r
- IN volatile UINT32 *Value,\r
- IN UINT32 CompareValue,\r
- IN UINT32 ExchangeValue\r
- );\r
-\r
-\r
-/**\r
- Performs an atomic compare exchange operation on a 64-bit unsigned integer.\r
-\r
- Performs an atomic compare exchange operation on the 64-bit unsigned integer specified\r
- by Value. If Value is equal to CompareValue, then Value is set to ExchangeValue and\r
- CompareValue is returned. If Value is not equal to CompareValue, then Value is returned.\r
- The compare exchange operation must be performed using MP safe mechanisms.\r
-\r
- @param Value A pointer to the 64-bit value for the compare exchange\r
- operation.\r
- @param CompareValue 64-bit value used in compare operation.\r
- @param ExchangeValue 64-bit value used in exchange operation.\r
-\r
- @return The original *Value before exchange.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-InternalSyncCompareExchange64 (\r
- IN volatile UINT64 *Value,\r
- IN UINT64 CompareValue,\r
- IN UINT64 ExchangeValue\r
- );\r
-\r
-\r
/**\r
Worker function that returns a bit field from Operand.\r
\r
UINTN\r
EFIAPI\r
BitFieldReadUint (\r
- IN UINTN Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit\r
+ IN UINTN Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit\r
);\r
\r
-\r
/**\r
Worker function that reads a bit field from Operand, performs a bitwise OR,\r
and returns the result.\r
UINTN\r
EFIAPI\r
BitFieldOrUint (\r
- IN UINTN Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINTN OrData\r
+ IN UINTN Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINTN OrData\r
);\r
\r
-\r
/**\r
Worker function that reads a bit field from Operand, performs a bitwise AND,\r
and returns the result.\r
UINTN\r
EFIAPI\r
BitFieldAndUint (\r
- IN UINTN Operand,\r
- IN UINTN StartBit,\r
- IN UINTN EndBit,\r
- IN UINTN AndData\r
+ IN UINTN Operand,\r
+ IN UINTN StartBit,\r
+ IN UINTN EndBit,\r
+ IN UINTN AndData\r
);\r
\r
-\r
/**\r
Worker function that checks ASSERT condition for JumpBuffer\r
\r
IN 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
+ Check if a Unicode character is a decimal character.\r
+\r
+ This internal function checks if a Unicode character is a\r
+ decimal character. The valid decimal character is from\r
+ L'0' to L'9'.\r
+\r
+ @param Char The character to check against.\r
+\r
+ @retval TRUE If the Char is a decmial character.\r
+ @retval FALSE If the Char is not a decmial character.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+InternalIsDecimalDigitCharacter (\r
+ IN CHAR16 Char\r
+ );\r
+\r
+/**\r
+ Convert a Unicode character to numerical value.\r
+\r
+ This internal function only deal with Unicode character\r
+ which maps to a valid hexadecimal ASII character, i.e.\r
+ L'0' to L'9', L'a' to L'f' or L'A' to L'F'. For other\r
+ Unicode character, the value returned does not make sense.\r
+\r
+ @param Char The character to convert.\r
+\r
+ @return The numerical value converted.\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+InternalHexCharToUintn (\r
+ IN CHAR16 Char\r
+ );\r
+\r
+/**\r
+ Check if a Unicode character is a hexadecimal character.\r
+\r
+ This internal function checks if a Unicode character is a\r
+ decimal character. The valid hexadecimal character is\r
+ L'0' to L'9', L'a' to L'f', or L'A' to L'F'.\r
+\r
+\r
+ @param Char The character to check against.\r
+\r
+ @retval TRUE If the Char is a hexadecmial character.\r
+ @retval FALSE If the Char is not a hexadecmial character.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+InternalIsHexaDecimalDigitCharacter (\r
+ IN CHAR16 Char\r
+ );\r
+\r
+/**\r
+ Check if a ASCII character is a decimal character.\r
+\r
+ This internal function checks if a Unicode character is a\r
+ decimal character. The valid decimal character is from\r
+ '0' to '9'.\r
+\r
+ @param Char The character to check against.\r
+\r
+ @retval TRUE If the Char is a decmial character.\r
+ @retval FALSE If the Char is not a decmial character.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+InternalAsciiIsDecimalDigitCharacter (\r
+ IN CHAR8 Char\r
+ );\r
+\r
+/**\r
+ Check if a ASCII character is a hexadecimal character.\r
+\r
+ This internal function checks if a ASCII character is a\r
+ decimal character. The valid hexadecimal character is\r
+ L'0' to L'9', L'a' to L'f', or L'A' to L'F'.\r
+\r
+\r
+ @param Char The character to check against.\r
+\r
+ @retval TRUE If the Char is a hexadecmial character.\r
+ @retval FALSE If the Char is not a hexadecmial character.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+InternalAsciiIsHexaDecimalDigitCharacter (\r
+ IN CHAR8 Char\r
+ );\r
+\r
+/**\r
+ Convert a ASCII character to numerical value.\r
+\r
+ This internal function only deal with Unicode character\r
+ which maps to a valid hexadecimal ASII character, i.e.\r
+ '0' to '9', 'a' to 'f' or 'A' to 'F'. For other\r
+ ASCII character, the value returned does not make sense.\r
+\r
+ @param Char The character to convert.\r
+\r
+ @return The numerical value converted.\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+InternalAsciiHexCharToUintn (\r
+ IN CHAR8 Char\r
+ );\r
\r
//\r
// Ia32 and x64 specific functions\r
Reads and returns the current GDTR descriptor and returns it in Gdtr. This\r
function is only available on IA-32 and x64.\r
\r
- @param Gdtr Pointer to a GDTR descriptor.\r
+ @param Gdtr The pointer to a GDTR descriptor.\r
\r
**/\r
VOID\r
EFIAPI\r
InternalX86ReadGdtr (\r
- OUT IA32_DESCRIPTOR *Gdtr\r
+ OUT IA32_DESCRIPTOR *Gdtr\r
);\r
\r
/**\r
Writes and the current GDTR descriptor specified by Gdtr. This function is\r
only available on IA-32 and x64.\r
\r
- @param Gdtr Pointer to a GDTR descriptor.\r
+ @param Gdtr The pointer to a GDTR descriptor.\r
\r
**/\r
VOID\r
EFIAPI\r
InternalX86WriteGdtr (\r
- IN CONST IA32_DESCRIPTOR *Gdtr\r
+ IN CONST IA32_DESCRIPTOR *Gdtr\r
);\r
\r
/**\r
Reads and returns the current IDTR descriptor and returns it in Idtr. This\r
function is only available on IA-32 and x64.\r
\r
- @param Idtr Pointer to a IDTR descriptor.\r
+ @param Idtr The pointer to an IDTR descriptor.\r
\r
**/\r
VOID\r
EFIAPI\r
InternalX86ReadIdtr (\r
- OUT IA32_DESCRIPTOR *Idtr\r
+ OUT IA32_DESCRIPTOR *Idtr\r
);\r
\r
/**\r
Writes the current IDTR descriptor and returns it in Idtr. This function is\r
only available on IA-32 and x64.\r
\r
- @param Idtr Pointer to a IDTR descriptor.\r
+ @param Idtr The pointer to an IDTR descriptor.\r
\r
**/\r
VOID\r
EFIAPI\r
InternalX86WriteIdtr (\r
- IN CONST IA32_DESCRIPTOR *Idtr\r
+ IN CONST IA32_DESCRIPTOR *Idtr\r
);\r
\r
/**\r
Buffer. Buffer must be aligned on a 16-byte boundary. This function is only\r
available on IA-32 and x64.\r
\r
- @param Buffer Pointer to a buffer to save the floating point/SSE/SSE2 context.\r
+ @param Buffer The pointer to a buffer to save the floating point/SSE/SSE2 context.\r
\r
**/\r
VOID\r
EFIAPI\r
InternalX86FxSave (\r
- OUT IA32_FX_BUFFER *Buffer\r
+ OUT IA32_FX_BUFFER *Buffer\r
);\r
\r
/**\r
by Buffer. Buffer must be aligned on a 16-byte boundary. This function is\r
only available on IA-32 and x64.\r
\r
- @param Buffer Pointer to a buffer to save the floating point/SSE/SSE2 context.\r
+ @param Buffer The pointer to a buffer to save the floating point/SSE/SSE2 context.\r
\r
**/\r
VOID\r
EFIAPI\r
InternalX86FxRestore (\r
- IN CONST IA32_FX_BUFFER *Buffer\r
+ IN CONST IA32_FX_BUFFER *Buffer\r
);\r
\r
/**\r
EFIAPI\r
InternalX86EnablePaging32 (\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
EFIAPI\r
InternalX86DisablePaging32 (\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
VOID\r
EFIAPI\r
InternalX86EnablePaging64 (\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
VOID\r
EFIAPI\r
InternalX86DisablePaging64 (\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
-#elif defined (MDE_CPU_IPF)\r
-//\r
-//\r
-// IPF specific functions\r
-//\r
-\r
-//\r
-// Structure definition for look up table.\r
-//\r
-typedef struct {\r
- UINT64 Index;\r
- UINT64 (*Function) (VOID);\r
-} REGISTER_ENTRY;\r
-\r
-\r
-/**\r
- Reads control register DCR.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_DCR\r
-\r
- @return The 64-bit control register DCR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterDcr (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register ITM.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_ITM\r
-\r
- @return The 64-bit control register ITM.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterItm (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register IVA.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IVA\r
-\r
- @return The 64-bit control register IVA.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIva (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register PTA.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_PTA\r
-\r
- @return The 64-bit control register PTA.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterPta (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register IPSR.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IPSR\r
-\r
- @return The 64-bit control register IPSR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIpsr (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register ISR.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_ISR\r
-\r
- @return The 64-bit control register ISR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIsr (\r
- VOID\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
- Reads control register IIP.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IIP\r
-\r
- @return The 64-bit control register IIP.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIip (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register IFA.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IFA\r
-\r
- @return The 64-bit control register IFA.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIfa (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register ITIR.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_ITIR\r
-\r
- @return The 64-bit control register ITIR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterItir (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register IIPA.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IIPA\r
-\r
- @return The 64-bit control register IIPA.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIipa (\r
- VOID\r
- );\r
-\r
-\r
/**\r
- Reads control register IFS.\r
+ Generates a 16-bit random number through RDRAND instruction.\r
\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IFS\r
+ @param[out] Rand Buffer pointer to store the random result.\r
\r
- @return The 64-bit control register IFS.\r
+ @retval TRUE RDRAND call was successful.\r
+ @retval FALSE Failed attempts to call RDRAND.\r
\r
-**/\r
-UINT64\r
+ **/\r
+BOOLEAN\r
EFIAPI\r
-AsmReadControlRegisterIfs (\r
- VOID\r
+InternalX86RdRand16 (\r
+ OUT UINT16 *Rand\r
);\r
\r
-\r
/**\r
- Reads control register IIM.\r
+ Generates a 32-bit random number through RDRAND instruction.\r
\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IIM\r
+ @param[out] Rand Buffer pointer to store the random result.\r
\r
- @return The 64-bit control register IIM.\r
+ @retval TRUE RDRAND call was successful.\r
+ @retval FALSE Failed attempts to call RDRAND.\r
\r
**/\r
-UINT64\r
+BOOLEAN\r
EFIAPI\r
-AsmReadControlRegisterIim (\r
- VOID\r
+InternalX86RdRand32 (\r
+ OUT UINT32 *Rand\r
);\r
\r
-\r
/**\r
- Reads control register IHA.\r
+ Generates a 64-bit random number through RDRAND instruction.\r
\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IHA\r
\r
- @return The 64-bit control register IHA.\r
+ @param[out] Rand Buffer pointer to store the random result.\r
\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIha (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register LID.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_LID\r
-\r
- @return The 64-bit control register LID.\r
+ @retval TRUE RDRAND call was successful.\r
+ @retval FALSE Failed attempts to call RDRAND.\r
\r
**/\r
-UINT64\r
+BOOLEAN\r
EFIAPI\r
-AsmReadControlRegisterLid (\r
- VOID\r
+InternalX86RdRand64 (\r
+ OUT UINT64 *Rand\r
);\r
\r
-\r
-/**\r
- Reads control register IVR.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IVR\r
-\r
- @return The 64-bit control register IVR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIvr (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register TPR.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_TPR\r
-\r
- @return The 64-bit control register TPR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterTpr (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register EOI.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_EOI\r
-\r
- @return The 64-bit control register EOI.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterEoi (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register IRR0.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IRR0\r
-\r
- @return The 64-bit control register IRR0.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIrr0 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register IRR1.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IRR1\r
-\r
- @return The 64-bit control register IRR1.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIrr1 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register IRR2.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IRR2\r
-\r
- @return The 64-bit control register IRR2.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIrr2 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register IRR3.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_IRR3\r
-\r
- @return The 64-bit control register IRR3.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterIrr3 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register ITV.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_ITV\r
-\r
- @return The 64-bit control register ITV.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterItv (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register PMV.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_PMV\r
-\r
- @return The 64-bit control register PMV.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterPmv (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register CMCV.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_CMCV\r
-\r
- @return The 64-bit control register CMCV.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterCmcv (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register LRR0.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_LRR0\r
-\r
- @return The 64-bit control register LRR0.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterLrr0 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads control register LRR1.\r
-\r
- This is a worker function for AsmReadControlRegister()\r
- when its parameter Index is IPF_CONTROL_REGISTER_LRR1\r
-\r
- @return The 64-bit control register LRR1.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadControlRegisterLrr1 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register K0.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_K0\r
-\r
- @return The 64-bit application register K0.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterK0 (\r
- VOID\r
- );\r
-\r
-\r
-\r
-/**\r
- Reads application register K1.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_K1\r
-\r
- @return The 64-bit application register K1.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterK1 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register K2.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_K2\r
-\r
- @return The 64-bit application register K2.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterK2 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register K3.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_K3\r
-\r
- @return The 64-bit application register K3.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterK3 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register K4.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_K4\r
-\r
- @return The 64-bit application register K4.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterK4 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register K5.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_K5\r
-\r
- @return The 64-bit application register K5.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterK5 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register K6.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_K6\r
-\r
- @return The 64-bit application register K6.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterK6 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register K7.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_K7\r
-\r
- @return The 64-bit application register K7.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterK7 (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register RSC.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_RSC\r
-\r
- @return The 64-bit application register RSC.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterRsc (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register BSP.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_BSP\r
-\r
- @return The 64-bit application register BSP.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterBsp (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register BSPSTORE.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_BSPSTORE\r
-\r
- @return The 64-bit application register BSPSTORE.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterBspstore (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register RNAT.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_RNAT\r
-\r
- @return The 64-bit application register RNAT.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterRnat (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register FCR.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_FCR\r
-\r
- @return The 64-bit application register FCR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterFcr (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register EFLAG.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_EFLAG\r
-\r
- @return The 64-bit application register EFLAG.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterEflag (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register CSD.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_CSD\r
-\r
- @return The 64-bit application register CSD.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterCsd (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register SSD.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_SSD\r
-\r
- @return The 64-bit application register SSD.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterSsd (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register CFLG.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_CFLG\r
-\r
- @return The 64-bit application register CFLG.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterCflg (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register FSR.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_FSR\r
-\r
- @return The 64-bit application register FSR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterFsr (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register FIR.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_FIR\r
-\r
- @return The 64-bit application register FIR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterFir (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register FDR.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_FDR\r
-\r
- @return The 64-bit application register FDR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterFdr (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register CCV.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_CCV\r
-\r
- @return The 64-bit application register CCV.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterCcv (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register UNAT.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_UNAT\r
-\r
- @return The 64-bit application register UNAT.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterUnat (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register FPSR.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_FPSR\r
-\r
- @return The 64-bit application register FPSR.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterFpsr (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register ITC.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_ITC\r
-\r
- @return The 64-bit application register ITC.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterItc (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register PFS.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_PFS\r
-\r
- @return The 64-bit application register PFS.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterPfs (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register LC.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_LC\r
-\r
- @return The 64-bit application register LC.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterLc (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Reads application register EC.\r
-\r
- This is a worker function for AsmReadApplicationRegister()\r
- when its parameter Index is IPF_APPLICATION_REGISTER_EC\r
-\r
- @return The 64-bit application register EC.\r
-\r
-**/\r
-UINT64\r
-EFIAPI\r
-AsmReadApplicationRegisterEc (\r
- VOID\r
- );\r
-\r
-\r
-\r
-/**\r
- Transfers control to a function starting with a new stack.\r
-\r
- Transfers control to the function specified by EntryPoint using the new stack\r
- specified by NewStack and passing in the parameters specified by Context1 and\r
- Context2. Context1 and Context2 are optional and may be NULL. The function\r
- EntryPoint must never return.\r
-\r
- If EntryPoint is NULL, then ASSERT().\r
- If NewStack is NULL, then ASSERT().\r
-\r
- @param EntryPoint A pointer to function to call with the new stack.\r
- @param Context1 A pointer to the context to pass into the EntryPoint\r
- function.\r
- @param Context2 A pointer to the context to pass into the EntryPoint\r
- function.\r
- @param NewStack A pointer to the new stack to use for the EntryPoint\r
- function.\r
- @param NewBsp A pointer to the new memory location for RSE backing\r
- store.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-AsmSwitchStackAndBackingStore (\r
- IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
- IN VOID *Context1, OPTIONAL\r
- IN VOID *Context2, OPTIONAL\r
- IN VOID *NewStack,\r
- IN VOID *NewBsp\r
- );\r
#else\r
\r
#endif\r