//\r
// SPIN_LOCK\r
//\r
-typedef UINTN SPIN_LOCK;\r
+typedef volatile UINTN SPIN_LOCK;\r
\r
#if defined (MDE_CPU_IA32)\r
//\r
OUT CHAR16 *Destination,\r
IN CONST CHAR16 *Source\r
);\r
+\r
+\r
/**\r
Copies one Null-terminated Unicode string with a maximum length to another\r
Null-terminated Unicode string with a maximum length and returns the new\r
IN CONST CHAR16 *Source,\r
IN UINTN Length\r
);\r
+\r
+\r
/**\r
Returns the length of a Null-terminated Unicode string.\r
\r
GlueStrLen (\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
GlueStrSize (\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
IN CONST CHAR16 *FirstString,\r
IN CONST CHAR16 *SecondString\r
);\r
+\r
+\r
/**\r
Compares two Null-terminated Unicode strings with maximum lengths, and\r
returns the difference between the first mismatched Unicode characters.\r
IN CONST CHAR16 *SecondString,\r
IN UINTN Length\r
);\r
+\r
+\r
/**\r
Concatenates one Null-terminated Unicode string to another Null-terminated\r
Unicode string, and returns the concatenated Unicode string.\r
IN OUT CHAR16 *Destination,\r
IN CONST CHAR16 *Source\r
);\r
+\r
+\r
/**\r
Concatenates one Null-terminated Unicode string with a maximum length to the\r
end of another Null-terminated Unicode string, and returns the concatenated\r
);\r
\r
/**\r
- Returns the first occurance of a Null-terminated Unicode sub-string \r
+ Returns the first occurance of a Null-terminated Unicode sub-string\r
in a Null-terminated Unicode string.\r
\r
- This function scans the contents of the Null-terminated Unicode string \r
- specified by String and returns the first occurrence of SearchString. \r
- If SearchString is not found in String, then NULL is returned. If \r
- the length of SearchString is zero, then String is \r
+ This function scans the contents of the Null-terminated Unicode string\r
+ specified by String and returns the first occurrence of SearchString.\r
+ If SearchString is not found in String, then NULL is returned. If\r
+ the length of SearchString is zero, then String is\r
returned.\r
- \r
+\r
If String is NULL, then ASSERT().\r
If String is not aligned on a 16-bit boundary, then ASSERT().\r
If SearchString is NULL, then ASSERT().\r
If SearchString is not aligned on a 16-bit boundary, then ASSERT().\r
\r
- If PcdMaximumUnicodeStringLength is not zero, and SearchString \r
- or String contains more than PcdMaximumUnicodeStringLength Unicode \r
+ If PcdMaximumUnicodeStringLength is not zero, and SearchString\r
+ or String contains more than PcdMaximumUnicodeStringLength Unicode\r
characters not including the Null-terminator, then ASSERT().\r
\r
@param String Pointer to a Null-terminated Unicode string.\r
);\r
\r
/**\r
- Convert a Null-terminated Unicode decimal string to a value of \r
+ Convert a Null-terminated Unicode decimal string to a value of\r
type UINTN.\r
\r
- This function returns a value of type UINTN by interpreting the contents \r
- of the Unicode string specified by String as a decimal number. The format \r
+ This function returns a value of type UINTN by interpreting the contents\r
+ of the Unicode string specified by String as a decimal number. The format\r
of the input Unicode string String is:\r
- \r
+\r
[spaces] [decimal digits].\r
- \r
- The valid decimal digit character is in the range [0-9]. The \r
- function will ignore the pad space, which includes spaces or \r
- tab characters, before [decimal digits]. The running zero in the \r
- beginning of [decimal digits] will be ignored. Then, the function \r
- stops at the first character that is a not a valid decimal character \r
- or a Null-terminator, whichever one comes first. \r
- \r
+\r
+ The valid decimal digit character is in the range [0-9]. The\r
+ function will ignore the pad space, which includes spaces or\r
+ tab characters, before [decimal digits]. The running zero in the\r
+ beginning of [decimal digits] will be ignored. Then, the function\r
+ stops at the first character that is a not a valid decimal character\r
+ or a Null-terminator, whichever one comes first.\r
+\r
If String is NULL, then ASSERT().\r
- If String is not aligned in a 16-bit boundary, then ASSERT(). \r
+ If String is not aligned in a 16-bit boundary, then ASSERT().\r
If String has only pad spaces, then 0 is returned.\r
- If String has no pad spaces or valid decimal digits, \r
+ If String has no pad spaces or valid decimal digits,\r
then 0 is returned.\r
- If the number represented by String overflows according \r
+ If the number represented by String overflows according\r
to the range defined by UINTN, then ASSERT().\r
- \r
- If PcdMaximumUnicodeStringLength is not zero, and String contains \r
- more than PcdMaximumUnicodeStringLength Unicode characters not including \r
+\r
+ If PcdMaximumUnicodeStringLength is not zero, and String contains\r
+ more than PcdMaximumUnicodeStringLength Unicode characters not including\r
the Null-terminator, then ASSERT().\r
\r
@param String Pointer to a Null-terminated Unicode string.\r
\r
- @retval UINTN \r
+ @retval UINTN\r
\r
**/\r
UINTN\r
);\r
\r
/**\r
- Convert a Null-terminated Unicode decimal string to a value of \r
+ Convert a Null-terminated Unicode decimal string to a value of\r
type UINT64.\r
\r
- This function returns a value of type UINT64 by interpreting the contents \r
- of the Unicode string specified by String as a decimal number. The format \r
+ This function returns a value of type UINT64 by interpreting the contents\r
+ of the Unicode string specified by String as a decimal number. The format\r
of the input Unicode string String is:\r
- \r
+\r
[spaces] [decimal digits].\r
- \r
- The valid decimal digit character is in the range [0-9]. The \r
- function will ignore the pad space, which includes spaces or \r
- tab characters, before [decimal digits]. The running zero in the \r
- beginning of [decimal digits] will be ignored. Then, the function \r
- stops at the first character that is a not a valid decimal character \r
- or a Null-terminator, whichever one comes first. \r
- \r
+\r
+ The valid decimal digit character is in the range [0-9]. The\r
+ function will ignore the pad space, which includes spaces or\r
+ tab characters, before [decimal digits]. The running zero in the\r
+ beginning of [decimal digits] will be ignored. Then, the function\r
+ stops at the first character that is a not a valid decimal character\r
+ or a Null-terminator, whichever one comes first.\r
+\r
If String is NULL, then ASSERT().\r
- If String is not aligned in a 16-bit boundary, then ASSERT(). \r
+ If String is not aligned in a 16-bit boundary, then ASSERT().\r
If String has only pad spaces, then 0 is returned.\r
- If String has no pad spaces or valid decimal digits, \r
+ If String has no pad spaces or valid decimal digits,\r
then 0 is returned.\r
- If the number represented by String overflows according \r
+ If the number represented by String overflows according\r
to the range defined by UINT64, then ASSERT().\r
- \r
- If PcdMaximumUnicodeStringLength is not zero, and String contains \r
- more than PcdMaximumUnicodeStringLength Unicode characters not including \r
+\r
+ If PcdMaximumUnicodeStringLength is not zero, and String contains\r
+ more than PcdMaximumUnicodeStringLength Unicode characters not including\r
the Null-terminator, then ASSERT().\r
\r
@param String Pointer to a Null-terminated Unicode string.\r
\r
- @retval UINT64 \r
+ @retval UINT64\r
\r
**/\r
UINT64\r
StrDecimalToUint64 (\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
- This function returns a value of type UINTN by interpreting the contents \r
- of the Unicode string specified by String as a hexadecimal number. \r
+ This function returns a value of type UINTN by interpreting the contents\r
+ of the Unicode string specified by String as a hexadecimal number.\r
The format of the input Unicode string String is:\r
- \r
- [spaces][zeros][x][hexadecimal digits]. \r
-\r
- The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F]. \r
- The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. \r
- If "x" appears in the input string, it must be prefixed with at least one 0. \r
- The function will ignore the pad space, which includes spaces or tab characters, \r
- before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or \r
- [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the \r
- first valid hexadecimal digit. Then, the function stops at the first character that is \r
+\r
+ [spaces][zeros][x][hexadecimal digits].\r
+\r
+ The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+ The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix.\r
+ If "x" appears in the input string, it must be prefixed with at least one 0.\r
+ The function will ignore the pad space, which includes spaces or tab characters,\r
+ before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or\r
+ [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the\r
+ first valid hexadecimal digit. Then, the function stops at the first character that is\r
a not a valid hexadecimal character or NULL, whichever one comes first.\r
\r
If String is NULL, then ASSERT().\r
If String is not aligned in a 16-bit boundary, then ASSERT().\r
If String has only pad spaces, then zero is returned.\r
- If String has no leading pad spaces, leading zeros or valid hexadecimal digits, \r
+ If String has no leading pad spaces, leading zeros or valid hexadecimal digits,\r
then zero is returned.\r
- If the number represented by String overflows according to the range defined by \r
+ If the number represented by String overflows according to the range defined by\r
UINTN, then ASSERT().\r
\r
- If PcdMaximumUnicodeStringLength is not zero, and String contains more than \r
- PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, \r
+ If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator,\r
then ASSERT().\r
\r
@param String Pointer to a Null-terminated Unicode 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
- This function returns a value of type UINT64 by interpreting the contents \r
- of the Unicode string specified by String as a hexadecimal number. \r
- The format of the input Unicode string String is \r
- \r
- [spaces][zeros][x][hexadecimal digits]. \r
-\r
- The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F]. \r
- The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. \r
- If "x" appears in the input string, it must be prefixed with at least one 0. \r
- The function will ignore the pad space, which includes spaces or tab characters, \r
- before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or \r
- [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the \r
- first valid hexadecimal digit. Then, the function stops at the first character that is \r
+ This function returns a value of type UINT64 by interpreting the contents\r
+ of the Unicode string specified by String as a hexadecimal number.\r
+ The format of the input Unicode string String is\r
+\r
+ [spaces][zeros][x][hexadecimal digits].\r
+\r
+ The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+ The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix.\r
+ If "x" appears in the input string, it must be prefixed with at least one 0.\r
+ The function will ignore the pad space, which includes spaces or tab characters,\r
+ before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or\r
+ [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the\r
+ first valid hexadecimal digit. Then, the function stops at the first character that is\r
a not a valid hexadecimal character or NULL, whichever one comes first.\r
\r
If String is NULL, then ASSERT().\r
If String is not aligned in a 16-bit boundary, then ASSERT().\r
If String has only pad spaces, then zero is returned.\r
- If String has no leading pad spaces, leading zeros or valid hexadecimal digits, \r
+ If String has no leading pad spaces, leading zeros or valid hexadecimal digits,\r
then zero is returned.\r
- If the number represented by String overflows according to the range defined by \r
+ If the number represented by String overflows according to the range defined by\r
UINT64, then ASSERT().\r
\r
- If PcdMaximumUnicodeStringLength is not zero, and String contains more than \r
- PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, \r
+ If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator,\r
then ASSERT().\r
\r
@param String Pointer to a Null-terminated Unicode string.\r
IN CONST CHAR16 *String\r
);\r
\r
+\r
/**\r
- Convert one Null-terminated Unicode string to a Null-terminated \r
+ Convert one Null-terminated Unicode string to a Null-terminated\r
ASCII string and returns the ASCII string.\r
- \r
- This function converts the content of the Unicode string Source \r
- to the ASCII string Destination by copying the lower 8 bits of \r
- each Unicode character. It returns Destination. \r
\r
- If any Unicode characters in Source contain non-zero value in \r
+ This function converts the content of the Unicode string Source\r
+ to the ASCII string Destination by copying the lower 8 bits of\r
+ each Unicode character. It returns Destination.\r
+\r
+ If any Unicode characters in Source contain non-zero value in\r
the upper 8 bits, then ASSERT().\r
- \r
+\r
If Destination is NULL, then ASSERT().\r
If Source is NULL, then ASSERT().\r
If Source is not aligned on a 16-bit boundary, then ASSERT().\r
If Source and Destination overlap, then ASSERT().\r
- \r
- If PcdMaximumUnicodeStringLength is not zero, and Source contains \r
- more than PcdMaximumUnicodeStringLength Unicode characters not including \r
+\r
+ If PcdMaximumUnicodeStringLength is not zero, and Source contains\r
+ more than PcdMaximumUnicodeStringLength Unicode characters not including\r
the Null-terminator, then ASSERT().\r
- \r
- If PcdMaximumAsciiStringLength is not zero, and Source contains more \r
- than PcdMaximumAsciiStringLength Unicode characters not including the \r
+\r
+ If PcdMaximumAsciiStringLength is not zero, and Source contains more\r
+ than PcdMaximumAsciiStringLength Unicode characters not including the\r
Null-terminator, then ASSERT().\r
\r
@param Source Pointer to a Null-terminated Unicode string.\r
OUT CHAR8 *Destination\r
);\r
\r
+\r
/**\r
Copies one Null-terminated ASCII string to another Null-terminated ASCII\r
string and returns the new ASCII string.\r
OUT CHAR8 *Destination,\r
IN CONST CHAR8 *Source\r
);\r
+\r
+\r
/**\r
Copies one Null-terminated ASCII string with a maximum length to another\r
Null-terminated ASCII string with a maximum length and returns the new ASCII\r
IN CONST CHAR8 *Source,\r
IN UINTN Length\r
);\r
+\r
+\r
/**\r
Returns the length of a Null-terminated ASCII string.\r
\r
AsciiStrLen (\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
AsciiStrSize (\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
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
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
IN CONST CHAR8 *SecondString,\r
IN UINTN Length\r
);\r
+\r
+\r
/**\r
Concatenates one Null-terminated ASCII string to another Null-terminated\r
ASCII string, and returns the concatenated ASCII string.\r
IN OUT CHAR8 *Destination,\r
IN CONST CHAR8 *Source\r
);\r
+\r
+\r
/**\r
Concatenates one Null-terminated ASCII string with a maximum length to the\r
end of another Null-terminated ASCII string, and returns the concatenated\r
IN UINTN Length\r
);\r
\r
+\r
/**\r
- Returns the first occurance of a Null-terminated ASCII sub-string \r
+ Returns the first occurance of a Null-terminated ASCII sub-string\r
in a Null-terminated ASCII string.\r
\r
- This function scans the contents of the ASCII string specified by String \r
- and returns the first occurrence of SearchString. If SearchString is not \r
- found in String, then NULL is returned. If the length of SearchString is zero, \r
+ This function scans the contents of the ASCII string specified by String\r
+ and returns the first occurrence of SearchString. If SearchString is not\r
+ found in String, then NULL is returned. If the length of SearchString is zero,\r
then String is returned.\r
- \r
+\r
If String is NULL, then ASSERT().\r
If SearchString is NULL, then ASSERT().\r
\r
- If PcdMaximumAsciiStringLength is not zero, and SearchString or \r
- String contains more than PcdMaximumAsciiStringLength Unicode characters \r
+ If PcdMaximumAsciiStringLength is not zero, and SearchString or\r
+ String contains more than PcdMaximumAsciiStringLength Unicode characters\r
not including the Null-terminator, then ASSERT().\r
\r
@param String Pointer to a Null-terminated ASCII string.\r
IN CONST CHAR8 *SearchString\r
);\r
\r
+\r
/**\r
- Convert a Null-terminated ASCII decimal string to a value of type \r
+ Convert a Null-terminated ASCII decimal string to a value of type\r
UINTN.\r
\r
- This function returns a value of type UINTN by interpreting the contents \r
- of the ASCII string String as a decimal number. The format of the input \r
+ This function returns a value of type UINTN by interpreting the contents\r
+ of the ASCII string String as a decimal number. The format of the input\r
ASCII string String is:\r
- \r
+\r
[spaces] [decimal digits].\r
- \r
- The valid decimal digit character is in the range [0-9]. The function will \r
- ignore the pad space, which includes spaces or tab characters, before the digits. \r
- The running zero in the beginning of [decimal digits] will be ignored. Then, the \r
- function stops at the first character that is a not a valid decimal character or \r
+\r
+ The valid decimal digit character is in the range [0-9]. The function will\r
+ ignore the pad space, which includes spaces or tab characters, before the digits.\r
+ The running zero in the beginning of [decimal digits] will be ignored. Then, the\r
+ function stops at the first character that is a not a valid decimal character or\r
Null-terminator, whichever on comes first.\r
- \r
+\r
If String has only pad spaces, then 0 is returned.\r
If String has no pad spaces or valid decimal digits, then 0 is returned.\r
- If the number represented by String overflows according to the range defined by \r
+ If the number represented by String overflows according to the range defined by\r
UINTN, then ASSERT().\r
If String is NULL, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and String contains more than \r
- PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, \r
+ If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
+ PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
then ASSERT().\r
\r
@param String Pointer to a Null-terminated ASCII string.\r
\r
- @retval UINTN \r
+ @retval UINTN\r
\r
**/\r
UINTN\r
IN CONST CHAR8 *String\r
);\r
\r
+\r
/**\r
- Convert a Null-terminated ASCII decimal string to a value of type \r
+ Convert a Null-terminated ASCII decimal string to a value of type\r
UINT64.\r
\r
- This function returns a value of type UINT64 by interpreting the contents \r
- of the ASCII string String as a decimal number. The format of the input \r
+ This function returns a value of type UINT64 by interpreting the contents\r
+ of the ASCII string String as a decimal number. The format of the input\r
ASCII string String is:\r
- \r
+\r
[spaces] [decimal digits].\r
- \r
- The valid decimal digit character is in the range [0-9]. The function will \r
- ignore the pad space, which includes spaces or tab characters, before the digits. \r
- The running zero in the beginning of [decimal digits] will be ignored. Then, the \r
- function stops at the first character that is a not a valid decimal character or \r
+\r
+ The valid decimal digit character is in the range [0-9]. The function will\r
+ ignore the pad space, which includes spaces or tab characters, before the digits.\r
+ The running zero in the beginning of [decimal digits] will be ignored. Then, the\r
+ function stops at the first character that is a not a valid decimal character or\r
Null-terminator, whichever on comes first.\r
- \r
+\r
If String has only pad spaces, then 0 is returned.\r
If String has no pad spaces or valid decimal digits, then 0 is returned.\r
- If the number represented by String overflows according to the range defined by \r
+ If the number represented by String overflows according to the range defined by\r
UINT64, then ASSERT().\r
If String is NULL, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and String contains more than \r
- PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, \r
+ If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
+ PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
then ASSERT().\r
\r
@param String Pointer to a Null-terminated ASCII string.\r
\r
- @retval UINT64 \r
+ @retval UINT64\r
\r
**/\r
UINT64\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
- This function returns a value of type UINTN by interpreting the contents of \r
- the ASCII string String as a hexadecimal number. The format of the input ASCII \r
+ This function returns a value of type UINTN by interpreting the contents of\r
+ the ASCII string String as a hexadecimal number. The format of the input ASCII\r
string String is:\r
- \r
+\r
[spaces][zeros][x][hexadecimal digits].\r
- \r
- The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F]. \r
- The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x" \r
- appears in the input string, it must be prefixed with at least one 0. The function \r
- will ignore the pad space, which includes spaces or tab characters, before [zeros], \r
- [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits] \r
- will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal \r
- digit. Then, the function stops at the first character that is a not a valid \r
+\r
+ The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+ The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x"\r
+ appears in the input string, it must be prefixed with at least one 0. The function\r
+ will ignore the pad space, which includes spaces or tab characters, before [zeros],\r
+ [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits]\r
+ will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal\r
+ digit. Then, the function stops at the first character that is a not a valid\r
hexadecimal character or Null-terminator, whichever on comes first.\r
- \r
+\r
If String has only pad spaces, then 0 is returned.\r
If String has no leading pad spaces, leading zeros or valid hexadecimal digits, then\r
0 is returned.\r
\r
- If the number represented by String overflows according to the range defined by UINTN, \r
+ If the number represented by String overflows according to the range defined by UINTN,\r
then ASSERT().\r
If String is NULL, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, \r
- and String contains more than PcdMaximumAsciiStringLength ASCII characters not including \r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and String contains more than PcdMaximumAsciiStringLength ASCII characters not including\r
the Null-terminator, then ASSERT().\r
\r
@param String Pointer to a Null-terminated ASCII 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
- This function returns a value of type UINT64 by interpreting the contents of \r
- the ASCII string String as a hexadecimal number. The format of the input ASCII \r
+ This function returns a value of type UINT64 by interpreting the contents of\r
+ the ASCII string String as a hexadecimal number. The format of the input ASCII\r
string String is:\r
- \r
+\r
[spaces][zeros][x][hexadecimal digits].\r
- \r
- The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F]. \r
- The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x" \r
- appears in the input string, it must be prefixed with at least one 0. The function \r
- will ignore the pad space, which includes spaces or tab characters, before [zeros], \r
- [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits] \r
- will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal \r
- digit. Then, the function stops at the first character that is a not a valid \r
+\r
+ The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+ The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x"\r
+ appears in the input string, it must be prefixed with at least one 0. The function\r
+ will ignore the pad space, which includes spaces or tab characters, before [zeros],\r
+ [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits]\r
+ will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal\r
+ digit. Then, the function stops at the first character that is a not a valid\r
hexadecimal character or Null-terminator, whichever on comes first.\r
- \r
+\r
If String has only pad spaces, then 0 is returned.\r
If String has no leading pad spaces, leading zeros or valid hexadecimal digits, then\r
0 is returned.\r
\r
- If the number represented by String overflows according to the range defined by UINT64, \r
+ If the number represented by String overflows according to the range defined by UINT64,\r
then ASSERT().\r
If String is NULL, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, \r
- and String contains more than PcdMaximumAsciiStringLength ASCII characters not including \r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and String contains more than PcdMaximumAsciiStringLength ASCII characters not including\r
the Null-terminator, then ASSERT().\r
\r
@param String Pointer to a Null-terminated ASCII string.\r
IN CONST CHAR8 *String\r
);\r
\r
+\r
/**\r
- Convert one Null-terminated ASCII string to a Null-terminated \r
+ Convert one Null-terminated ASCII string to a Null-terminated\r
Unicode string and returns the Unicode string.\r
\r
- This function converts the contents of the ASCII string Source to the Unicode \r
- string Destination, and returns Destination. The function terminates the \r
- Unicode string Destination by appending a Null-terminator character at the end. \r
- The caller is responsible to make sure Destination points to a buffer with size \r
+ This function converts the contents of the ASCII string Source to the Unicode\r
+ string Destination, and returns Destination. The function terminates the\r
+ Unicode string Destination by appending a Null-terminator character at the end.\r
+ The caller is responsible to make sure Destination points to a buffer with size\r
equal or greater than ((AsciiStrLen (Source) + 1) * sizeof (CHAR16)) in bytes.\r
- \r
+\r
If Destination is NULL, then ASSERT().\r
If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
If Source is NULL, then ASSERT().\r
If Source and Destination overlap, then ASSERT().\r
- If PcdMaximumAsciiStringLength is not zero, and Source contains more than \r
- PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, \r
+ If PcdMaximumAsciiStringLength is not zero, and Source contains more than\r
+ PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
then ASSERT().\r
- If PcdMaximumUnicodeStringLength is not zero, and Source contains more than \r
- PcdMaximumUnicodeStringLength ASCII characters not including the \r
+ If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
+ PcdMaximumUnicodeStringLength ASCII characters not including the\r
Null-terminator, then ASSERT().\r
\r
@param Source Pointer to a Null-terminated ASCII string.\r
OUT CHAR16 *Destination\r
);\r
\r
+\r
/**\r
Converts an 8-bit value to an 8-bit BCD value.\r
\r
IN UINT8 Value\r
);\r
\r
+\r
/**\r
Converts an 8-bit BCD value to an 8-bit value.\r
\r
**/\r
#define INITIALIZE_LIST_HEAD_VARIABLE(ListHead) {&ListHead, &ListHead}\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
IN 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
IN 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
IN LIST_ENTRY *Entry\r
);\r
\r
+\r
/**\r
Retrieves the first node of a doubly linked list.\r
\r
IN CONST LIST_ENTRY *List\r
);\r
\r
+\r
/**\r
Retrieves the next node of a doubly linked list.\r
\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
IN CONST LIST_ENTRY *ListHead\r
);\r
\r
+\r
/**\r
Determines if a node in a doubly linked list is null.\r
\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
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
IN 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
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
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
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
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
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
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
IN UINTN Count\r
);\r
\r
+\r
/**\r
Returns the bit position of the lowest bit set in a 32-bit value.\r
\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
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
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
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 << HighBitSet32(x).\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 << HighBitSet64(x).\r
IN UINT64 Operand\r
);\r
\r
+\r
/**\r
Switches the endianess of a 16-bit integer.\r
\r
IN UINT16 Value\r
);\r
\r
+\r
/**\r
Switches the endianess of a 32-bit integer.\r
\r
IN UINT32 Value\r
);\r
\r
+\r
/**\r
Switches the endianess of a 64-bit integer.\r
\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
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
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
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
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
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
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
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
OUT INT64 *Remainder OPTIONAL\r
);\r
\r
+\r
/**\r
Reads a 16-bit value from memory that may be unaligned.\r
\r
IN CONST UINT16 *Uint16\r
);\r
\r
+\r
/**\r
Writes a 16-bit value to memory that may be unaligned.\r
\r
IN UINT16 Value\r
);\r
\r
+\r
/**\r
Reads a 24-bit value from memory that may be unaligned.\r
\r
IN CONST UINT32 *Buffer\r
);\r
\r
+\r
/**\r
Writes a 24-bit value to memory that may be unaligned.\r
\r
IN UINT32 Value\r
);\r
\r
+\r
/**\r
Reads a 32-bit value from memory that may be unaligned.\r
\r
IN CONST UINT32 *Uint32\r
);\r
\r
+\r
/**\r
Writes a 32-bit value to memory that may be unaligned.\r
\r
IN UINT32 Value\r
);\r
\r
+\r
/**\r
Reads a 64-bit value from memory that may be unaligned.\r
\r
IN CONST UINT64 *Uint64\r
);\r
\r
+\r
/**\r
Writes a 64-bit value to memory that may be unaligned.\r
\r
IN UINT64 Value\r
);\r
\r
+\r
//\r
// Bit Field Functions\r
//\r
IN UINTN EndBit\r
);\r
\r
+\r
/**\r
Writes a bit field to an 8-bit value, and returns the result.\r
\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
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
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
IN UINT8 OrData\r
);\r
\r
+\r
/**\r
Returns a bit field from a 16-bit value.\r
\r
IN UINTN EndBit\r
);\r
\r
+\r
/**\r
Writes a bit field to a 16-bit value, and returns the result.\r
\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
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
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
IN UINT16 OrData\r
);\r
\r
+\r
/**\r
Returns a bit field from a 32-bit value.\r
\r
IN UINTN EndBit\r
);\r
\r
+\r
/**\r
Writes a bit field to a 32-bit value, and returns the result.\r
\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
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
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
IN UINT32 OrData\r
);\r
\r
+\r
/**\r
Returns a bit field from a 64-bit value.\r
\r
IN UINTN EndBit\r
);\r
\r
+\r
/**\r
Writes a bit field to a 64-bit value, and returns the result.\r
\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
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
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
IN UINT64 OrData\r
);\r
\r
+\r
//\r
// Base Library Synchronization Functions\r
//\r
VOID\r
);\r
\r
+\r
/**\r
Initializes a spin lock to the released state and returns the spin lock.\r
\r
IN SPIN_LOCK *SpinLock\r
);\r
\r
+\r
/**\r
Waits until a spin lock can be placed in the acquired state.\r
\r
IN SPIN_LOCK *SpinLock\r
);\r
\r
+\r
/**\r
Attempts to place a spin lock in the acquired state.\r
\r
IN SPIN_LOCK *SpinLock\r
);\r
\r
+\r
/**\r
Releases a spin lock.\r
\r
IN SPIN_LOCK *SpinLock\r
);\r
\r
+\r
/**\r
Performs an atomic increment of an 32-bit unsigned integer.\r
\r
IN UINT32 *Value\r
);\r
\r
+\r
/**\r
Performs an atomic decrement of an 32-bit unsigned integer.\r
\r
IN UINT32 *Value\r
);\r
\r
+\r
/**\r
Performs an atomic compare exchange operation on a 32-bit unsigned integer.\r
\r
IN UINT32 ExchangeValue\r
);\r
\r
+\r
/**\r
Performs an atomic compare exchange operation on a 64-bit unsigned integer.\r
\r
IN UINT64 ExchangeValue\r
);\r
\r
+\r
/**\r
Performs an atomic compare exchange operation on a pointer value.\r
\r
IN VOID *ExchangeValue\r
);\r
\r
+\r
//\r
// Base Library Checksum Functions\r
//\r
\r
/**\r
- Calculate the sum of all elements in a buffer in unit of UINT8. \r
+ Calculate the sum of all elements in a buffer in unit of UINT8.\r
During calculation, the carry bits are dropped.\r
\r
- This function calculates the sum of all elements in a buffer \r
- in unit of UINT8. The carry bits in result of addition are dropped. \r
- The result is returned as UINT8. If Length is Zero, then Zero is \r
+ This function calculates the sum of all elements in a buffer\r
+ in unit of UINT8. The carry bits in result of addition are dropped.\r
+ The result is returned as UINT8. If Length is Zero, then Zero is\r
returned.\r
- \r
+\r
If Buffer is NULL, then ASSERT().\r
- If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+ If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().\r
\r
@param Buffer Pointer to the buffer to carry out the sum operation.\r
@param Length The size, in bytes, of Buffer .\r
\r
\r
/**\r
- Returns the two's complement checksum of all elements in a buffer \r
+ Returns the two's complement checksum of all elements in a buffer\r
of 8-bit values.\r
\r
- This function first calculates the sum of the 8-bit values in the \r
- buffer specified by Buffer and Length. The carry bits in the result \r
- of addition are dropped. Then, the two's complement of the sum is \r
+ This function first calculates the sum of the 8-bit values in the\r
+ buffer specified by Buffer and Length. The carry bits in the result\r
+ of addition are dropped. Then, the two's complement of the sum is\r
returned. If Length is 0, then 0 is returned.\r
- \r
+\r
If Buffer is NULL, then ASSERT().\r
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().\r
\r
IN UINTN Length\r
);\r
\r
+\r
/**\r
- Returns the sum of all elements in a buffer of 16-bit values. During \r
+ Returns the sum of all elements in a buffer of 16-bit values. During\r
calculation, the carry bits are dropped.\r
\r
- This function calculates the sum of the 16-bit values in the buffer \r
- specified by Buffer and Length. The carry bits in result of addition are dropped. \r
- The 16-bit result is returned. If Length is 0, then 0 is returned. \r
- \r
+ This function calculates the sum of the 16-bit values in the buffer\r
+ specified by Buffer and Length. The carry bits in result of addition are dropped.\r
+ The 16-bit result is returned. If Length is 0, then 0 is returned.\r
+\r
If Buffer is NULL, then ASSERT().\r
If Buffer is not aligned on a 16-bit boundary, then ASSERT().\r
If Length is not aligned on a 16-bit boundary, then ASSERT().\r
IN UINTN Length\r
);\r
\r
+\r
/**\r
- Returns the two's complement checksum of all elements in a buffer of \r
+ Returns the two's complement checksum of all elements in a buffer of\r
16-bit values.\r
\r
- This function first calculates the sum of the 16-bit values in the buffer \r
- specified by Buffer and Length. The carry bits in the result of addition \r
- are dropped. Then, the two's complement of the sum is returned. If Length \r
+ This function first calculates the sum of the 16-bit values in the buffer\r
+ specified by Buffer and Length. The carry bits in the result of addition\r
+ are dropped. Then, the two's complement of the sum is returned. If Length\r
is 0, then 0 is returned.\r
- \r
+\r
If Buffer is NULL, then ASSERT().\r
If Buffer is not aligned on a 16-bit boundary, then ASSERT().\r
If Length is not aligned on a 16-bit boundary, then ASSERT().\r
- If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+ If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().\r
\r
@param Buffer Pointer to the buffer to carry out the checksum operation.\r
@param Length The size, in bytes, of 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
+ Returns the sum of all elements in a buffer of 32-bit values. During\r
calculation, the carry bits are dropped.\r
\r
- This function calculates the sum of the 32-bit values in the buffer \r
- specified by Buffer and Length. The carry bits in result of addition are dropped. \r
- The 32-bit result is returned. If Length is 0, then 0 is returned. \r
- \r
+ This function calculates the sum of the 32-bit values in the buffer\r
+ specified by Buffer and Length. The carry bits in result of addition are dropped.\r
+ The 32-bit result is returned. If Length is 0, then 0 is returned.\r
+\r
If Buffer is NULL, then ASSERT().\r
If Buffer is not aligned on a 32-bit boundary, then ASSERT().\r
If Length is not aligned on a 32-bit boundary, then ASSERT().\r
IN UINTN Length\r
);\r
\r
+\r
/**\r
- Returns the two's complement checksum of all elements in a buffer of \r
+ Returns the two's complement checksum of all elements in a buffer of\r
32-bit values.\r
\r
- This function first calculates the sum of the 32-bit values in the buffer \r
- specified by Buffer and Length. The carry bits in the result of addition \r
- are dropped. Then, the two's complement of the sum is returned. If Length \r
+ This function first calculates the sum of the 32-bit values in the buffer\r
+ specified by Buffer and Length. The carry bits in the result of addition\r
+ are dropped. Then, the two's complement of the sum is returned. If Length\r
is 0, then 0 is returned.\r
- \r
+\r
If Buffer is NULL, then ASSERT().\r
If Buffer is not aligned on a 32-bit boundary, then ASSERT().\r
If Length is not aligned on a 32-bit boundary, then ASSERT().\r
- If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+ If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().\r
\r
@param Buffer Pointer to the buffer to carry out the checksum operation.\r
@param Length The size, in bytes, of 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
+ Returns the sum of all elements in a buffer of 64-bit values. During\r
calculation, the carry bits are dropped.\r
\r
- This function calculates the sum of the 64-bit values in the buffer \r
- specified by Buffer and Length. The carry bits in result of addition are dropped. \r
- The 64-bit result is returned. If Length is 0, then 0 is returned. \r
- \r
+ This function calculates the sum of the 64-bit values in the buffer\r
+ specified by Buffer and Length. The carry bits in result of addition are dropped.\r
+ The 64-bit result is returned. If Length is 0, then 0 is returned.\r
+\r
If Buffer is NULL, then ASSERT().\r
If Buffer is not aligned on a 64-bit boundary, then ASSERT().\r
If Length is not aligned on a 64-bit boundary, then ASSERT().\r
IN UINTN Length\r
);\r
\r
+\r
/**\r
- Returns the two's complement checksum of all elements in a buffer of \r
+ Returns the two's complement checksum of all elements in a buffer of\r
64-bit values.\r
\r
- This function first calculates the sum of the 64-bit values in the buffer \r
- specified by Buffer and Length. The carry bits in the result of addition \r
- are dropped. Then, the two's complement of the sum is returned. If Length \r
+ This function first calculates the sum of the 64-bit values in the buffer\r
+ specified by Buffer and Length. The carry bits in the result of addition\r
+ are dropped. Then, the two's complement of the sum is returned. If Length\r
is 0, then 0 is returned.\r
- \r
+\r
If Buffer is NULL, then ASSERT().\r
If Buffer is not aligned on a 64-bit boundary, then ASSERT().\r
If Length is not aligned on a 64-bit boundary, then ASSERT().\r
- If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+ If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().\r
\r
@param Buffer Pointer to the buffer to carry out the checksum operation.\r
@param Length The size, in bytes, of Buffer.\r
IN UINTN Length\r
);\r
\r
+\r
//\r
// Base Library CPU Functions\r
//\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
IN BOOLEAN InterruptState\r
);\r
\r
+\r
/**\r
Places the CPU in a sleep state until an interrupt is received.\r
\r
VOID\r
);\r
\r
+\r
/**\r
Requests CPU to pause for a short period of time.\r
\r
VOID\r
);\r
\r
+\r
/**\r
Flushes all the Translation Lookaside Buffers(TLB) entries in a CPU.\r
\r
VOID\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
+ Transfers control to the function specified by EntryPoint using the\r
+ new stack specified by NewStack and passing in the parameters specified\r
+ by Context1 and Context2. Context1 and Context2 are optional and may\r
+ be NULL. The function EntryPoint must never return. This function\r
+ supports a variable number of arguments following the NewStack parameter.\r
+ These additional arguments are ignored on IA-32, x64, and EBC.\r
+ IPF CPUs expect one additional parameter of type VOID * that specifies\r
+ the new backing store pointer.\r
\r
If EntryPoint is NULL, then ASSERT().\r
If NewStack is NULL, then ASSERT().\r
IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
IN VOID *Context1, OPTIONAL\r
IN VOID *Context2, OPTIONAL\r
- IN VOID *NewStack\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
-// IA32 and X64 Specific Functions\r
-//\r
-//\r
-// Byte packed structure for 16-bit Real Mode EFLAGS\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
- } Bits;\r
+\r
+#if defined (MDE_CPU_IPF)\r
+\r
+/**\r
+ Flush a range of cache lines in the cache coherency domain of the calling\r
+ CPU.\r
+\r
+ Invalidates the cache lines specified by Address and Length. If Address is\r
+ not aligned on a cache line boundary, then entire cache line containing\r
+ Address is invalidated. If Address + Length is not aligned on a cache line\r
+ boundary, then the entire instruction cache line containing Address + Length\r
+ -1 is invalidated. This function may choose to invalidate the entire\r
+ instruction cache if that is more efficient than invalidating the specified\r
+ range. If Length is 0, the no instruction cache lines are invalidated.\r
+ Address is returned.\r
+\r
+ If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT().\r
+\r
+ @param Address The base address of the instruction lines to invalidate. If\r
+ the CPU is in a physical addressing mode, then Address is a\r
+ physical address. If the CPU is in a virtual addressing mode,\r
+ then Address is a virtual address.\r
+\r
+ @param Length The number of bytes to invalidate from the instruction cache.\r
+\r
+ @return Address\r
+\r
+**/\r
+VOID *\r
+EFIAPI\r
+IpfFlushCacheRange (\r
+ IN VOID *Address,\r
+ IN UINTN Length\r
+ );\r
+\r
+\r
+/**\r
+ Executes a FC instruction\r
+ Executes a FC instruction on the cache line specified by Address.\r
+ The cache line size affected is at least 32-bytes (aligned on a 32-byte boundary).\r
+ An implementation may flush a larger region. This function is only available on IPF.\r
+\r
+ @param Address The Address of cache line to be flushed.\r
+\r
+ @return The address of FC instruction executed.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmFc (\r
+ IN UINT64 Address\r
+ );\r
+\r
+\r
+/**\r
+ Executes a FC.I instruction.\r
+ Executes a FC.I instruction on the cache line specified by Address.\r
+ The cache line size affected is at least 32-bytes (aligned on a 32-byte boundary).\r
+ An implementation may flush a larger region. This function is only available on IPF.\r
+\r
+ @param Address The Address of cache line to be flushed.\r
+\r
+ @return The address of FC.I instruction executed.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmFci (\r
+ IN UINT64 Address\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of a Processor Identifier Register (CPUID).\r
+ The Index of largest implemented CPUID (One less than the number of implemented CPUID\r
+ registers) is determined by CPUID [3] bits {7:0}.\r
+ No parameter checking is performed on Index. If the Index value is beyond the\r
+ implemented CPUID register range, a Reserved Register/Field fault may occur. The caller\r
+ must either guarantee that Index is valid, or the caller must set up fault handlers to\r
+ catch the faults. This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Processor Identifier Register index to read.\r
+\r
+ @return The current value of Processor Identifier Register specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadCpuid (\r
+ IN UINT8 Index\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Processor Status Register (PSR).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of PSR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadPsr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Processor Status Register (PSR).\r
+ No parameter checking is performed on Value. All bits of Value corresponding to\r
+ reserved fields of PSR must be 0 or a Reserved Register/Field fault may occur. The caller must either guarantee that Value is valid, or the caller must set up fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to PSR.\r
+\r
+ @return The 64-bit value written to the PSR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWritePsr (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Kernel Register #0 (KR0).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of KR0.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadKr0 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Kernel Register #1 (KR1).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of KR1.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadKr1 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Kernel Register #2 (KR2).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of KR2.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadKr2 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Kernel Register #3 (KR3).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of KR3.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadKr3 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Kernel Register #4 (KR4).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of KR4.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadKr4 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Kernel Register #5 (KR5).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of KR5.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadKr5 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Kernel Register #6 (KR6).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of KR6.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadKr6 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Kernel Register #7 (KR7).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of KR7.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadKr7 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Kernel Register #0 (KR0).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to KR0.\r
+\r
+ @return The 64-bit value written to the KR0.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteKr0 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Kernel Register #1 (KR1).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to KR1.\r
+\r
+ @return The 64-bit value written to the KR1.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteKr1 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Kernel Register #2 (KR2).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to KR2.\r
+\r
+ @return The 64-bit value written to the KR2.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteKr2 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Kernel Register #3 (KR3).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to KR3.\r
+\r
+ @return The 64-bit value written to the KR3.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteKr3 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Kernel Register #4 (KR4).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to KR4.\r
+\r
+ @return The 64-bit value written to the KR4.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteKr4 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Kernel Register #5 (KR5).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to KR5.\r
+\r
+ @return The 64-bit value written to the KR5.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteKr5 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Kernel Register #6 (KR6).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to KR6.\r
+\r
+ @return The 64-bit value written to the KR6.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteKr6 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Kernel Register #7 (KR7).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to KR7.\r
+\r
+ @return The 64-bit value written to the KR7.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteKr7 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Interval Timer Counter Register (ITC).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of ITC.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadItc (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Interval Timer Vector Register (ITV).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of ITV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadItv (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Interval Timer Match Register (ITM).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of ITM.\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadItm (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Interval Timer Counter Register (ITC).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to ITC.\r
+\r
+ @return The 64-bit value written to the ITC.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteItc (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Interval Timer Match Register (ITM).\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to ITM.\r
+\r
+ @return The 64-bit value written to the ITM.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteItm (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Interval Timer Vector Register (ITV).\r
+ No parameter checking is performed on Value. All bits of Value corresponding to\r
+ reserved fields of ITV must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to ITV.\r
+\r
+ @return The 64-bit value written to the ITV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteItv (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Default Control Register (DCR).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of DCR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadDcr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Interruption Vector Address Register (IVA).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of IVA.\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadIva (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Page Table Address Register (PTA).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of PTA.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadPta (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Default Control Register (DCR).\r
+ No parameter checking is performed on Value. All bits of Value corresponding to\r
+ reserved fields of DCR must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to DCR.\r
+\r
+ @return The 64-bit value written to the DCR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteDcr (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Interruption Vector Address Register (IVA).\r
+ The size of vector table is 32 K bytes and is 32 K bytes aligned\r
+ the low 15 bits of Value is ignored when written.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to IVA.\r
+\r
+ @return The 64-bit value written to the IVA.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteIva (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Page Table Address Register (PTA).\r
+ No parameter checking is performed on Value. All bits of Value corresponding to\r
+ reserved fields of DCR must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to PTA.\r
+\r
+ @return The 64-bit value written to the PTA.\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWritePta (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Local Interrupt ID Register (LID).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of LID.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadLid (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of External Interrupt Vector Register (IVR).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of IVR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadIvr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Task Priority Register (TPR).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of TPR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadTpr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of External Interrupt Request Register #0 (IRR0).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of IRR0.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadIrr0 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of External Interrupt Request Register #1 (IRR1).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of IRR1.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadIrr1 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of External Interrupt Request Register #2 (IRR2).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of IRR2.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadIrr2 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of External Interrupt Request Register #3 (IRR3).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of IRR3.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadIrr3 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Performance Monitor Vector Register (PMV).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of PMV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadPmv (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Corrected Machine Check Vector Register (CMCV).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of CMCV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadCmcv (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Local Redirection Register #0 (LRR0).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of LRR0.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadLrr0 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Local Redirection Register #1 (LRR1).\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of LRR1.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadLrr1 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Page Local Interrupt ID Register (LID).\r
+ No parameter checking is performed on Value. All bits of Value corresponding to\r
+ reserved fields of LID must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to LID.\r
+\r
+ @return The 64-bit value written to the LID.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteLid (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Task Priority Register (TPR).\r
+ No parameter checking is performed on Value. All bits of Value corresponding to\r
+ reserved fields of TPR must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to TPR.\r
+\r
+ @return The 64-bit value written to the TPR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteTpr (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Performs a write operation on End OF External Interrupt Register (EOI).\r
+ Writes a value of 0 to the EOI Register. This function is only available on IPF.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+AsmWriteEoi (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Performance Monitor Vector Register (PMV).\r
+ No parameter checking is performed on Value. All bits of Value corresponding\r
+ to reserved fields of PMV must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to PMV.\r
+\r
+ @return The 64-bit value written to the PMV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWritePmv (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Corrected Machine Check Vector Register (CMCV).\r
+ No parameter checking is performed on Value. All bits of Value corresponding\r
+ to reserved fields of CMCV must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to CMCV.\r
+\r
+ @return The 64-bit value written to the CMCV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteCmcv (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Local Redirection Register #0 (LRR0).\r
+ No parameter checking is performed on Value. All bits of Value corresponding\r
+ to reserved fields of LRR0 must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to LRR0.\r
+\r
+ @return The 64-bit value written to the LRR0.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteLrr0 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Local Redirection Register #1 (LRR1).\r
+ No parameter checking is performed on Value. All bits of Value corresponding\r
+ to reserved fields of LRR1 must be 0 or a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Value is valid, or the caller must\r
+ set up fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to LRR1.\r
+\r
+ @return The 64-bit value written to the LRR1.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteLrr1 (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Instruction Breakpoint Register (IBR).\r
+ \r
+ The Instruction Breakpoint Registers are used in pairs. The even numbered\r
+ registers contain breakpoint addresses, and the odd numbered registers contain\r
+ breakpoint mask conditions. At least 4 instruction registers pairs are implemented\r
+ on all processor models. Implemented registers are contiguous starting with\r
+ register 0. No parameter checking is performed on Index, and if the Index value\r
+ is beyond the implemented IBR register range, a Reserved Register/Field fault may\r
+ occur. The caller must either guarantee that Index is valid, or the caller must\r
+ set up fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Instruction Breakpoint Register index to read.\r
+\r
+ @return The current value of Instruction Breakpoint Register specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadIbr (\r
+ IN UINT8 Index\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Data Breakpoint Register (DBR).\r
+\r
+ The Data Breakpoint Registers are used in pairs. The even numbered registers\r
+ contain breakpoint addresses, and odd numbered registers contain breakpoint\r
+ mask conditions. At least 4 data registers pairs are implemented on all processor\r
+ models. Implemented registers are contiguous starting with register 0.\r
+ No parameter checking is performed on Index. If the Index value is beyond\r
+ the implemented DBR register range, a Reserved Register/Field fault may occur.\r
+ The caller must either guarantee that Index is valid, or the caller must set up\r
+ fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Data Breakpoint Register index to read.\r
+\r
+ @return The current value of Data Breakpoint Register specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadDbr (\r
+ IN UINT8 Index\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Performance Monitor Configuration Register (PMC).\r
+\r
+ All processor implementations provide at least 4 performance counters\r
+ (PMC/PMD [4]...PMC/PMD [7] pairs), and 4 performance monitor counter overflow\r
+ status registers (PMC [0]¡ PMC [3]). Processor implementations may provide\r
+ additional implementation-dependent PMC and PMD to increase the number of\r
+ ¡®generic¡¯ performance counters (PMC/PMD pairs). The remainder of PMC and PMD\r
+ register set is implementation dependent. No parameter checking is performed\r
+ on Index. If the Index value is beyond the implemented PMC register range,\r
+ zero value will be returned.\r
+ This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Performance Monitor Configuration Register index to read.\r
+\r
+ @return The current value of Performance Monitor Configuration Register\r
+ specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadPmc (\r
+ IN UINT8 Index\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of Performance Monitor Data Register (PMD).\r
+\r
+ All processor implementations provide at least 4 performance counters\r
+ (PMC/PMD [4]...PMC/PMD [7] pairs), and 4 performance monitor counter\r
+ overflow status registers (PMC [0]¡ PMC [3]). Processor implementations may\r
+ provide additional implementation-dependent PMC and PMD to increase the number\r
+ of ¡®generic¡¯ performance counters (PMC/PMD pairs). The remainder of PMC and PMD\r
+ register set is implementation dependent. No parameter checking is performed\r
+ on Index. If the Index value is beyond the implemented PMD register range,\r
+ zero value will be returned.\r
+ This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Performance Monitor Data Register index to read.\r
+\r
+ @return The current value of Performance Monitor Data Register specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadPmd (\r
+ IN UINT8 Index\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Instruction Breakpoint Register (IBR).\r
+\r
+ Writes current value of Instruction Breakpoint Register specified by Index.\r
+ The Instruction Breakpoint Registers are used in pairs. The even numbered\r
+ registers contain breakpoint addresses, and odd numbered registers contain\r
+ breakpoint mask conditions. At least 4 instruction registers pairs are implemented\r
+ on all processor models. Implemented registers are contiguous starting with\r
+ register 0. No parameter checking is performed on Index. If the Index value\r
+ is beyond the implemented IBR register range, a Reserved Register/Field fault may\r
+ occur. The caller must either guarantee that Index is valid, or the caller must\r
+ set up fault handlers to catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Instruction Breakpoint Register index to write.\r
+ @param Value The 64-bit value to write to IBR.\r
+\r
+ @return The 64-bit value written to the IBR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteIbr (\r
+ IN UINT8 Index,\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Data Breakpoint Register (DBR).\r
+\r
+ Writes current value of Data Breakpoint Register specified by Index.\r
+ The Data Breakpoint Registers are used in pairs. The even numbered registers\r
+ contain breakpoint addresses, and odd numbered registers contain breakpoint\r
+ mask conditions. At least 4 data registers pairs are implemented on all processor\r
+ models. Implemented registers are contiguous starting with register 0. No parameter\r
+ checking is performed on Index. If the Index value is beyond the implemented\r
+ DBR register range, a Reserved Register/Field fault may occur. The caller must\r
+ either guarantee that Index is valid, or the caller must set up fault handlers to\r
+ catch the faults.\r
+ This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Data Breakpoint Register index to write.\r
+ @param Value The 64-bit value to write to DBR.\r
+\r
+ @return The 64-bit value written to the DBR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteDbr (\r
+ IN UINT8 Index,\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Performance Monitor Configuration Register (PMC).\r
+\r
+ Writes current value of Performance Monitor Configuration Register specified by Index.\r
+ All processor implementations provide at least 4 performance counters\r
+ (PMC/PMD [4]...PMC/PMD [7] pairs), and 4 performance monitor counter overflow status\r
+ registers (PMC [0]¡ PMC [3]). Processor implementations may provide additional\r
+ implementation-dependent PMC and PMD to increase the number of ¡®generic¡¯ performance\r
+ counters (PMC/PMD pairs). The remainder of PMC and PMD register set is implementation\r
+ dependent. No parameter checking is performed on Index. If the Index value is\r
+ beyond the implemented PMC register range, the write is ignored.\r
+ This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Performance Monitor Configuration Register index to write.\r
+ @param Value The 64-bit value to write to PMC.\r
+\r
+ @return The 64-bit value written to the PMC.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWritePmc (\r
+ IN UINT8 Index,\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Writes the current value of 64-bit Performance Monitor Data Register (PMD).\r
+\r
+ Writes current value of Performance Monitor Data Register specified by Index.\r
+ All processor implementations provide at least 4 performance counters\r
+ (PMC/PMD [4]...PMC/PMD [7] pairs), and 4 performance monitor counter overflow\r
+ status registers (PMC [0]¡ PMC [3]). Processor implementations may provide\r
+ additional implementation-dependent PMC and PMD to increase the number of ¡®generic¡¯\r
+ performance counters (PMC/PMD pairs). The remainder of PMC and PMD register set\r
+ is implementation dependent. No parameter checking is performed on Index. If the\r
+ Index value is beyond the implemented PMD register range, the write is ignored.\r
+ This function is only available on IPF.\r
+\r
+ @param Index The 8-bit Performance Monitor Data Register index to write.\r
+ @param Value The 64-bit value to write to PMD.\r
+\r
+ @return The 64-bit value written to the PMD.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWritePmd (\r
+ IN UINT8 Index,\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Global Pointer (GP).\r
+\r
+ Reads and returns the current value of GP.\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of GP.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadGp (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Write the current value of 64-bit Global Pointer (GP).\r
+\r
+ Writes the current value of GP. The 64-bit value written to the GP is returned.\r
+ No parameter checking is performed on Value.\r
+ This function is only available on IPF.\r
+\r
+ @param Value The 64-bit value to write to GP.\r
+\r
+ @return The 64-bit value written to the GP.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmWriteGp (\r
+ IN UINT64 Value\r
+ );\r
+\r
+\r
+/**\r
+ Reads the current value of 64-bit Stack Pointer (SP).\r
+\r
+ Reads and returns the current value of SP.\r
+ This function is only available on IPF.\r
+\r
+ @return The current value of SP.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadSp (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Determines if the CPU is currently executing in virtual, physical, or mixed mode.\r
+\r
+ Determines the current execution mode of the CPU.\r
+ If the CPU is in virtual mode(PSR.RT=1, PSR.DT=1, PSR.IT=1), then 1 is returned.\r
+ If the CPU is in physical mode(PSR.RT=0, PSR.DT=0, PSR.IT=0), then 0 is returned.\r
+ If the CPU is not in physical mode or virtual mode, then it is in mixed mode,\r
+ and -1 is returned.\r
+ This function is only available on IPF.\r
+\r
+ @return 1 The CPU is in virtual mode.\r
+ @return 0 The CPU is in physical mode.\r
+ @return -1 The CPU is in mixed mode.\r
+\r
+**/\r
+INT64\r
+EFIAPI\r
+AsmCpuVirtual (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Makes a PAL procedure call.\r
+\r
+ This is a wrapper function to make a PAL procedure call. Based on the Index\r
+ value this API will make static or stacked PAL call. The following table\r
+ describes the usage of PAL Procedure Index Assignment. Architected procedures\r
+ may be designated as required or optional. If a PAL procedure is specified\r
+ as optional, a unique return code of 0xFFFFFFFFFFFFFFFF is returned in the\r
+ Status field of the PAL_CALL_RETURN structure.\r
+ This indicates that the procedure is not present in this PAL implementation.\r
+ It is the caller¡¯s responsibility to check for this return code after calling\r
+ any optional PAL procedure.\r
+ No parameter checking is performed on the 5 input parameters, but there are\r
+ some common rules that the caller should follow when making a PAL call. Any\r
+ address passed to PAL as buffers for return parameters must be 8-byte aligned.\r
+ Unaligned addresses may cause undefined results. For those parameters defined\r
+ as reserved or some fields defined as reserved must be zero filled or the invalid\r
+ argument return value may be returned or undefined result may occur during the\r
+ execution of the procedure. If the PalEntryPoint does not point to a valid\r
+ PAL entry point then the system behavior is undefined. This function is only\r
+ available on IPF.\r
+\r
+ @param PalEntryPoint The PAL procedure calls entry point.\r
+ @param Index The PAL procedure Index number.\r
+ @param Arg2 The 2nd parameter for PAL procedure calls.\r
+ @param Arg3 The 3rd parameter for PAL procedure calls.\r
+ @param Arg4 The 4th parameter for PAL procedure calls.\r
+\r
+ @return structure returned from the PAL Call procedure, including the status and return value.\r
+\r
+**/\r
+PAL_CALL_RETURN\r
+EFIAPI\r
+AsmPalCall (\r
+ IN UINT64 PalEntryPoint,\r
+ IN UINT64 Index,\r
+ IN UINT64 Arg2,\r
+ IN UINT64 Arg3,\r
+ IN UINT64 Arg4\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
+\r
+\r
+//\r
+// Bugbug: This call should be removed after\r
+// the PalCall Instance issue has been fixed.\r
+//\r
+/**\r
+ Performs a PAL call using static calling convention.\r
+\r
+ An internal function to perform a PAL call using static calling convention.\r
+\r
+ @param PalEntryPoint The entry point address of PAL. The address in ar.kr5\r
+ would be used if this parameter were NULL on input.\r
+ @param Arg1 The first argument of a PAL call.\r
+ @param Arg1 The second argument of a PAL call.\r
+ @param Arg1 The third argument of a PAL call.\r
+ @param Arg1 The fourth argument of a PAL call.\r
+\r
+ @return The values returned in r8, r9, r10 and r11.\r
+\r
+**/\r
+PAL_CALL_RETURN\r
+PalCallStatic (\r
+ IN CONST VOID *PalEntryPoint,\r
+ IN UINT64 Arg1,\r
+ IN UINT64 Arg2,\r
+ IN UINT64 Arg3,\r
+ IN UINT64 Arg4\r
+ );\r
+\r
+\r
+#elif defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)\r
+//\r
+// IA32 and X64 Specific Functions\r
+//\r
+//\r
+// Byte packed structure for 16-bit Real Mode EFLAGS\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
+ } Bits;\r
UINT16 Uint16;\r
} IA32_FLAGS16;\r
\r
OUT UINT32 *Edx OPTIONAL\r
);\r
\r
+\r
/**\r
Retrieves CPUID information using an extended leaf identifier.\r
\r
OUT UINT32 *Edx OPTIONAL\r
);\r
\r
+\r
/**\r
Returns the lower 32-bits of a Machine Specific Register(MSR).\r
\r
IN UINT32 Index\r
);\r
\r
+\r
/**\r
Zero-extend a 32-bit value and writes it to a Machine Specific Register(MSR).\r
\r
IN UINT32 Value\r
);\r
\r
+\r
/**\r
Reads a 64-bit MSR, performs a bitwise inclusive OR on the lower 32-bits, and\r
writes the result back to the 64-bit MSR.\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
IN UINT32 AndData\r
);\r
\r
+\r
/**\r
Reads a 64-bit MSR, performs a bitwise AND followed by a bitwise inclusive OR\r
on the lower 32-bits, and writes the result back to the 64-bit MSR.\r
IN UINT32 OrData\r
);\r
\r
+\r
/**\r
Reads a bit field of an MSR.\r
\r
IN UINTN EndBit\r
);\r
\r
+\r
/**\r
Writes a bit field to an MSR.\r
\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
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
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 inclusive OR, and writes the result back to the bit field in the\r
IN UINT32 OrData\r
);\r
\r
+\r
/**\r
Returns a 64-bit Machine Specific Register(MSR).\r
\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
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Reads a 64-bit MSR, performs a bitwise inclusive OR, and writes the result\r
back to the 64-bit MSR.\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
IN UINT64 AndData\r
);\r
\r
+\r
/**\r
Reads a 64-bit MSR, performs a bitwise AND followed by a bitwise inclusive\r
OR, and writes the result back to the 64-bit MSR.\r
IN UINT64 OrData\r
);\r
\r
+\r
/**\r
Reads a bit field of an MSR.\r
\r
IN UINTN EndBit\r
);\r
\r
+\r
/**\r
Writes a bit field to an MSR.\r
\r
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Reads a bit field in a 64-bit MSR, performs a bitwise inclusive OR, and\r
writes the result back to the bit field in the 64-bit MSR.\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
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 inclusive OR, and writes the result back to the bit field in the\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
OUT IA32_DESCRIPTOR *Gdtr\r
);\r
\r
+\r
/**\r
Writes the current Global Descriptor Table Register (GDTR) descriptor.\r
\r
IN CONST IA32_DESCRIPTOR *Gdtr\r
);\r
\r
+\r
/**\r
Reads the current Interrupt Descriptor Table Register(GDTR) descriptor.\r
\r
OUT IA32_DESCRIPTOR *Idtr\r
);\r
\r
+\r
/**\r
Writes the current Interrupt Descriptor Table Register(GDTR) descriptor.\r
\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 (GDTR) selector.\r
\r
IN UINT16 Ldtr\r
);\r
\r
+\r
/**\r
Save the current floating point/SSE/SSE2 context to a buffer.\r
\r
OUT IA32_FX_BUFFER *Buffer\r
);\r
\r
+\r
/**\r
Restores the current floating point/SSE/SSE2 context from a buffer.\r
\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
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Writes the current value of 64-bit MMX Register #1 (MM1).\r
\r
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Writes the current value of 64-bit MMX Register #2 (MM2).\r
\r
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Writes the current value of 64-bit MMX Register #3 (MM3).\r
\r
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Writes the current value of 64-bit MMX Register #4 (MM4).\r
\r
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Writes the current value of 64-bit MMX Register #5 (MM5).\r
\r
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Writes the current value of 64-bit MMX Register #6 (MM6).\r
\r
IN UINT64 Value\r
);\r
\r
+\r
/**\r
Writes the current value of 64-bit MMX Register #7 (MM7).\r
\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
IN UINT32 Index\r
);\r
\r
+\r
/**\r
Sets up a monitor buffer that is used by AsmMwait().\r
\r
IN UINTN Edx\r
);\r
\r
+\r
/**\r
Executes an MWAIT instruction.\r
\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
IN VOID *LinearAddress\r
);\r
\r
+\r
/**\r
Enables the 32-bit paging mode on the CPU.\r
\r
IN VOID *NewStack\r
);\r
\r
+\r
/**\r
Disables the 32-bit paging mode on the CPU.\r
\r
IN VOID *NewStack\r
);\r
\r
+\r
/**\r
Enables the 64-bit paging mode on the CPU.\r
\r
IN UINT64 NewStack\r
);\r
\r
+\r
/**\r
Disables the 64-bit paging mode on the CPU.\r
\r
IN UINT32 NewStack\r
);\r
\r
+\r
//\r
// 16-bit thunking services\r
//\r
OUT UINT32 *ExtraStackSize\r
);\r
\r
+\r
/**\r
Prepares all structures a code required to use AsmThunk16().\r
\r
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
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
IN OUT THUNK_CONTEXT *ThunkContext\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
-\r
-typedef struct {\r
- UINT64 Status;\r
- UINT64 r9;\r
- UINT64 r10;\r
- UINT64 r11;\r
-} PAL_PROC_RETURN;\r
-\r
-//\r
-// IPF Specific functions\r
-//\r
-\r
-\r
-/**\r
- Performs a PAL call using static calling convention.\r
-\r
- An internal function to perform a PAL call using static calling convention.\r
-\r
- @param PalEntryPoint The entry point address of PAL. The address in ar.kr5\r
- would be used if this parameter were NULL on input.\r
- @param Arg1 The first argument of a PAL call.\r
- @param Arg1 The second argument of a PAL call.\r
- @param Arg1 The third argument of a PAL call.\r
- @param Arg1 The fourth argument of a PAL call.\r
-\r
- @return The values returned in r8, r9, r10 and r11.\r
-\r
-**/\r
-PAL_PROC_RETURN\r
-PalCallStatic (\r
- IN CONST VOID *PalEntryPoint,\r
- IN UINT64 Arg1,\r
- IN UINT64 Arg2,\r
- IN UINT64 Arg3,\r
- IN UINT64 Arg4\r
- );\r
-\r
-\r
-/**\r
- Returns the current value of ar.itc.\r
-\r
- An internal function to return the current value of ar.itc, which is the\r
- timer tick on IPF.\r
-\r
- @return The currect value of ar.itc\r
-\r
-**/\r
-INT64\r
-IpfReadItc (\r
- VOID\r
- );\r
-\r
-\r
-/**\r
- Flush a range of cache lines in the cache coherency domain of the calling \r
- CPU.\r
-\r
- Invalidates the cache lines specified by Address and Length. If Address is \r
- not aligned on a cache line boundary, then entire cache line containing \r
- Address is invalidated. If Address + Length is not aligned on a cache line \r
- boundary, then the entire instruction cache line containing Address + Length\r
- -1 is invalidated. This function may choose to invalidate the entire \r
- instruction cache if that is more efficient than invalidating the specified \r
- range. If Length is 0, the no instruction cache lines are invalidated. \r
- Address is returned.\r
-\r
- If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT().\r
-\r
- @param Address The base address of the instruction lines to invalidate. If \r
- the CPU is in a physical addressing mode, then Address is a\r
- physical address. If the CPU is in a virtual addressing mode,\r
- then Address is a virtual address.\r
-\r
- @param Length The number of bytes to invalidate from the instruction cache.\r
-\r
- @return Address\r
-\r
-**/\r
-VOID *\r
-EFIAPI\r
-IpfFlushCacheRange (\r
- IN VOID *Address,\r
- IN UINTN Length\r
- );\r
+#else\r
\r
#endif\r
\r
+#endif\r