]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Include/Library/EdkIIGlueBaseLib.h
1) Sync EdkCompatibilityPkg with EDK 1.04. The changes includes:
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / Include / Library / EdkIIGlueBaseLib.h
index 4c95c85ce181a9b36a4fe765e242f6bdce3ebdff..59cd6727409c9e8c6d8962f4cf74a46c1e3fdfd1 100644 (file)
@@ -72,7 +72,7 @@ Abstract:
 //\r
 // SPIN_LOCK\r
 //\r
-typedef UINTN                       SPIN_LOCK;\r
+typedef volatile UINTN              SPIN_LOCK;\r
 \r
 #if   defined (MDE_CPU_IA32)\r
 //\r
@@ -206,6 +206,8 @@ GlueStrCpy (
   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
@@ -242,6 +244,8 @@ GlueStrnCpy (
   IN      CONST CHAR16              *Source,\r
   IN      UINTN                     Length\r
   );\r
+\r
+\r
 /**\r
   Returns the length of a Null-terminated Unicode string.\r
 \r
@@ -264,6 +268,8 @@ EFIAPI
 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
@@ -287,6 +293,8 @@ EFIAPI
 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
@@ -321,6 +329,8 @@ GlueStrCmp (
   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
@@ -358,6 +368,8 @@ GlueStrnCmp (
   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
@@ -396,6 +408,8 @@ GlueStrCat (
   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
@@ -442,22 +456,22 @@ GlueStrnCat (
   );\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
@@ -475,37 +489,37 @@ StrStr (
   );\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
@@ -515,37 +529,37 @@ StrDecimalToUintn (
   );\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
@@ -553,35 +567,36 @@ EFIAPI
 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
@@ -595,34 +610,35 @@ StrHexToUintn (
   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
@@ -636,28 +652,29 @@ StrHexToUint64 (
   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
@@ -673,6 +690,7 @@ UnicodeStrToAsciiStr (
   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
@@ -700,6 +718,8 @@ AsciiStrCpy (
   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
@@ -733,6 +753,8 @@ AsciiStrnCpy (
   IN      CONST CHAR8               *Source,\r
   IN      UINTN                     Length\r
   );\r
+\r
+\r
 /**\r
   Returns the length of a Null-terminated ASCII string.\r
 \r
@@ -755,6 +777,8 @@ EFIAPI
 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
@@ -777,6 +801,8 @@ EFIAPI
 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
@@ -809,6 +835,8 @@ AsciiStrCmp (
   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
@@ -844,6 +872,8 @@ AsciiStriCmp (
   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
@@ -878,6 +908,8 @@ AsciiStrnCmp (
   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
@@ -911,6 +943,8 @@ AsciiStrCat (
   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
@@ -953,20 +987,21 @@ AsciiStrnCat (
   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
@@ -983,34 +1018,35 @@ AsciiStrStr (
   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
@@ -1019,34 +1055,35 @@ AsciiStrDecimalToUintn (
   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
@@ -1055,33 +1092,34 @@ AsciiStrDecimalToUint64 (
   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
@@ -1095,33 +1133,34 @@ AsciiStrHexToUintn (
   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
@@ -1135,25 +1174,26 @@ AsciiStrHexToUint64 (
   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
@@ -1169,6 +1209,7 @@ AsciiStrToUnicodeStr (
   OUT    CHAR16                        *Destination\r
   );\r
 \r
+\r
 /**\r
   Converts an 8-bit value to an 8-bit BCD value.\r
 \r
@@ -1188,6 +1229,7 @@ DecimalToBcd8 (
   IN      UINT8                     Value\r
   );\r
 \r
+\r
 /**\r
   Converts an 8-bit BCD value to an 8-bit value.\r
 \r
@@ -1238,6 +1280,7 @@ struct _LIST_ENTRY {
 **/\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
@@ -1260,6 +1303,7 @@ GlueInitializeListHead (
   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
@@ -1288,6 +1332,7 @@ GlueInsertHeadList (
   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
@@ -1316,6 +1361,7 @@ GlueInsertTailList (
   IN      LIST_ENTRY                *Entry\r
   );\r
 \r
+\r
 /**\r
   Retrieves the first node of a doubly linked list.\r
 \r
@@ -1341,6 +1387,7 @@ GlueGetFirstNode (
   IN      CONST LIST_ENTRY          *List\r
   );\r
 \r
+\r
 /**\r
   Retrieves the next node of a doubly linked list.\r
 \r
@@ -1369,6 +1416,7 @@ GlueGetNextNode (
   IN      CONST LIST_ENTRY          *Node\r
   );\r
 \r
+\r
 /**\r
   Checks to see if a doubly linked list is empty or not.\r
 \r
@@ -1393,6 +1441,7 @@ GlueIsListEmpty (
   IN      CONST LIST_ENTRY          *ListHead\r
   );\r
 \r
+\r
 /**\r
   Determines if a node in a doubly linked list is null.\r
 \r
@@ -1422,6 +1471,7 @@ GlueIsNull (
   IN      CONST LIST_ENTRY          *Node\r
   );\r
 \r
+\r
 /**\r
   Determines if a node the last node in a doubly linked list.\r
 \r
@@ -1451,6 +1501,7 @@ GlueIsNodeAtEnd (
   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
@@ -1481,6 +1532,7 @@ GlueSwapListEntries (
   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
@@ -1534,6 +1586,7 @@ GlueLShiftU64 (
   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
@@ -1556,6 +1609,7 @@ GlueRShiftU64 (
   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
@@ -1578,6 +1632,7 @@ ARShiftU64 (
   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
@@ -1601,6 +1656,7 @@ LRotU32 (
   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
@@ -1624,6 +1680,7 @@ RRotU32 (
   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
@@ -1647,6 +1704,7 @@ LRotU64 (
   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
@@ -1670,6 +1728,7 @@ RRotU64 (
   IN      UINTN                     Count\r
   );\r
 \r
+\r
 /**\r
   Returns the bit position of the lowest bit set in a 32-bit value.\r
 \r
@@ -1689,6 +1748,7 @@ LowBitSet32 (
   IN      UINT32                    Operand\r
   );\r
 \r
+\r
 /**\r
   Returns the bit position of the lowest bit set in a 64-bit value.\r
 \r
@@ -1708,6 +1768,7 @@ LowBitSet64 (
   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
@@ -1728,6 +1789,7 @@ HighBitSet32 (
   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
@@ -1748,6 +1810,7 @@ HighBitSet64 (
   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
@@ -1767,6 +1830,7 @@ GetPowerOfTwo32 (
   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
@@ -1786,6 +1850,7 @@ GetPowerOfTwo64 (
   IN      UINT64                    Operand\r
   );\r
 \r
+\r
 /**\r
   Switches the endianess of a 16-bit integer.\r
 \r
@@ -1804,6 +1869,7 @@ SwapBytes16 (
   IN      UINT16                    Value\r
   );\r
 \r
+\r
 /**\r
   Switches the endianess of a 32-bit integer.\r
 \r
@@ -1822,6 +1888,7 @@ SwapBytes32 (
   IN      UINT32                    Value\r
   );\r
 \r
+\r
 /**\r
   Switches the endianess of a 64-bit integer.\r
 \r
@@ -1840,6 +1907,7 @@ SwapBytes64 (
   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
@@ -1863,6 +1931,7 @@ GlueMultU64x32 (
   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
@@ -1886,6 +1955,7 @@ MultU64x64 (
   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
@@ -1909,6 +1979,7 @@ MultS64x64 (
   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
@@ -1932,6 +2003,7 @@ GlueDivU64x32 (
   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
@@ -1955,6 +2027,7 @@ ModU64x32 (
   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
@@ -1982,6 +2055,7 @@ DivU64x32Remainder (
   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
@@ -2009,6 +2083,7 @@ DivU64x64Remainder (
   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
@@ -2036,6 +2111,7 @@ DivS64x64Remainder (
   OUT     INT64                     *Remainder  OPTIONAL\r
   );\r
 \r
+\r
 /**\r
   Reads a 16-bit value from memory that may be unaligned.\r
 \r
@@ -2055,6 +2131,7 @@ ReadUnaligned16 (
   IN      CONST UINT16              *Uint16\r
   );\r
 \r
+\r
 /**\r
   Writes a 16-bit value to memory that may be unaligned.\r
 \r
@@ -2077,6 +2154,7 @@ WriteUnaligned16 (
   IN      UINT16                    Value\r
   );\r
 \r
+\r
 /**\r
   Reads a 24-bit value from memory that may be unaligned.\r
 \r
@@ -2096,6 +2174,7 @@ ReadUnaligned24 (
   IN      CONST UINT32              *Buffer\r
   );\r
 \r
+\r
 /**\r
   Writes a 24-bit value to memory that may be unaligned.\r
 \r
@@ -2118,6 +2197,7 @@ WriteUnaligned24 (
   IN      UINT32                    Value\r
   );\r
 \r
+\r
 /**\r
   Reads a 32-bit value from memory that may be unaligned.\r
 \r
@@ -2137,6 +2217,7 @@ ReadUnaligned32 (
   IN      CONST UINT32              *Uint32\r
   );\r
 \r
+\r
 /**\r
   Writes a 32-bit value to memory that may be unaligned.\r
 \r
@@ -2159,6 +2240,7 @@ WriteUnaligned32 (
   IN      UINT32                    Value\r
   );\r
 \r
+\r
 /**\r
   Reads a 64-bit value from memory that may be unaligned.\r
 \r
@@ -2178,6 +2260,7 @@ ReadUnaligned64 (
   IN      CONST UINT64              *Uint64\r
   );\r
 \r
+\r
 /**\r
   Writes a 64-bit value to memory that may be unaligned.\r
 \r
@@ -2200,6 +2283,7 @@ WriteUnaligned64 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 //\r
 // Bit Field Functions\r
 //\r
@@ -2231,6 +2315,7 @@ BitFieldRead8 (
   IN      UINTN                     EndBit\r
   );\r
 \r
+\r
 /**\r
   Writes a bit field to an 8-bit value, and returns the result.\r
 \r
@@ -2262,6 +2347,7 @@ BitFieldWrite8 (
   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
@@ -2294,6 +2380,7 @@ BitFieldOr8 (
   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
@@ -2326,6 +2413,7 @@ BitFieldAnd8 (
   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
@@ -2361,6 +2449,7 @@ BitFieldAndThenOr8 (
   IN      UINT8                     OrData\r
   );\r
 \r
+\r
 /**\r
   Returns a bit field from a 16-bit value.\r
 \r
@@ -2388,6 +2477,7 @@ BitFieldRead16 (
   IN      UINTN                     EndBit\r
   );\r
 \r
+\r
 /**\r
   Writes a bit field to a 16-bit value, and returns the result.\r
 \r
@@ -2419,6 +2509,7 @@ BitFieldWrite16 (
   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
@@ -2451,6 +2542,7 @@ BitFieldOr16 (
   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
@@ -2483,6 +2575,7 @@ BitFieldAnd16 (
   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
@@ -2518,6 +2611,7 @@ BitFieldAndThenOr16 (
   IN      UINT16                    OrData\r
   );\r
 \r
+\r
 /**\r
   Returns a bit field from a 32-bit value.\r
 \r
@@ -2545,6 +2639,7 @@ BitFieldRead32 (
   IN      UINTN                     EndBit\r
   );\r
 \r
+\r
 /**\r
   Writes a bit field to a 32-bit value, and returns the result.\r
 \r
@@ -2576,6 +2671,7 @@ BitFieldWrite32 (
   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
@@ -2608,6 +2704,7 @@ BitFieldOr32 (
   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
@@ -2640,6 +2737,7 @@ BitFieldAnd32 (
   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
@@ -2675,6 +2773,7 @@ BitFieldAndThenOr32 (
   IN      UINT32                    OrData\r
   );\r
 \r
+\r
 /**\r
   Returns a bit field from a 64-bit value.\r
 \r
@@ -2702,6 +2801,7 @@ BitFieldRead64 (
   IN      UINTN                     EndBit\r
   );\r
 \r
+\r
 /**\r
   Writes a bit field to a 64-bit value, and returns the result.\r
 \r
@@ -2733,6 +2833,7 @@ BitFieldWrite64 (
   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
@@ -2765,6 +2866,7 @@ BitFieldOr64 (
   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
@@ -2797,6 +2899,7 @@ BitFieldAnd64 (
   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
@@ -2832,6 +2935,7 @@ BitFieldAndThenOr64 (
   IN      UINT64                    OrData\r
   );\r
 \r
+\r
 //\r
 // Base Library Synchronization Functions\r
 //\r
@@ -2858,6 +2962,7 @@ GetSpinLockProperties (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Initializes a spin lock to the released state and returns the spin lock.\r
 \r
@@ -2880,6 +2985,7 @@ InitializeSpinLock (
   IN      SPIN_LOCK                 *SpinLock\r
   );\r
 \r
+\r
 /**\r
   Waits until a spin lock can be placed in the acquired state.\r
 \r
@@ -2906,6 +3012,7 @@ AcquireSpinLock (
   IN      SPIN_LOCK                 *SpinLock\r
   );\r
 \r
+\r
 /**\r
   Attempts to place a spin lock in the acquired state.\r
 \r
@@ -2929,6 +3036,7 @@ AcquireSpinLockOrFail (
   IN      SPIN_LOCK                 *SpinLock\r
   );\r
 \r
+\r
 /**\r
   Releases a spin lock.\r
 \r
@@ -2949,6 +3057,7 @@ ReleaseSpinLock (
   IN      SPIN_LOCK                 *SpinLock\r
   );\r
 \r
+\r
 /**\r
   Performs an atomic increment of an 32-bit unsigned integer.\r
 \r
@@ -2970,6 +3079,7 @@ InterlockedIncrement (
   IN      UINT32                    *Value\r
   );\r
 \r
+\r
 /**\r
   Performs an atomic decrement of an 32-bit unsigned integer.\r
 \r
@@ -2991,6 +3101,7 @@ InterlockedDecrement (
   IN      UINT32                    *Value\r
   );\r
 \r
+\r
 /**\r
   Performs an atomic compare exchange operation on a 32-bit unsigned integer.\r
 \r
@@ -3018,6 +3129,7 @@ InterlockedCompareExchange32 (
   IN      UINT32                    ExchangeValue\r
   );\r
 \r
+\r
 /**\r
   Performs an atomic compare exchange operation on a 64-bit unsigned integer.\r
 \r
@@ -3044,6 +3156,7 @@ InterlockedCompareExchange64 (
   IN      UINT64                    ExchangeValue\r
   );\r
 \r
+\r
 /**\r
   Performs an atomic compare exchange operation on a pointer value.\r
 \r
@@ -3069,21 +3182,22 @@ InterlockedCompareExchangePointer (
   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
@@ -3100,14 +3214,14 @@ CalculateSum8 (
 \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
@@ -3125,14 +3239,15 @@ CalculateCheckSum8 (
   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
@@ -3151,19 +3266,20 @@ CalculateSum16 (
   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
@@ -3178,14 +3294,15 @@ CalculateCheckSum16 (
   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
@@ -3204,19 +3321,20 @@ CalculateSum32 (
   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
@@ -3231,14 +3349,15 @@ CalculateCheckSum32 (
   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
@@ -3257,19 +3376,20 @@ CalculateSum64 (
   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
@@ -3284,6 +3404,7 @@ CalculateCheckSum64 (
   IN      UINTN                                      Length\r
   );\r
 \r
+\r
 //\r
 // Base Library CPU Functions\r
 //\r
@@ -3294,6 +3415,7 @@ VOID
   IN      VOID                      *Context2   OPTIONAL\r
   );\r
 \r
+\r
 /**\r
   Used to serialize load and store operations.\r
 \r
@@ -3307,6 +3429,7 @@ MemoryFence (
   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
@@ -3329,6 +3452,7 @@ SetJump (
   OUT     BASE_LIBRARY_JUMP_BUFFER  *JumpBuffer\r
   );\r
 \r
+\r
 /**\r
   Restores the CPU context that was saved with SetJump().\r
 \r
@@ -3352,6 +3476,7 @@ LongJump (
   IN      UINTN                     Value\r
   );\r
 \r
+\r
 /**\r
   Enables CPU interrupts.\r
 \r
@@ -3364,6 +3489,7 @@ EnableInterrupts (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Disables CPU interrupts.\r
 \r
@@ -3376,6 +3502,7 @@ DisableInterrupts (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Disables CPU interrupts and returns the interrupt state prior to the disable\r
   operation.\r
@@ -3393,6 +3520,7 @@ SaveAndDisableInterrupts (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Enables CPU interrupts for the smallest window required to capture any\r
   pending interrupts.\r
@@ -3407,6 +3535,7 @@ EnableDisableInterrupts (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Retrieves the current CPU interrupt state.\r
 \r
@@ -3423,6 +3552,7 @@ GlueGetInterruptState (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Set the current CPU interrupt state.\r
 \r
@@ -3443,6 +3573,7 @@ SetInterruptState (
   IN      BOOLEAN                   InterruptState\r
   );\r
 \r
+\r
 /**\r
   Places the CPU in a sleep state until an interrupt is received.\r
 \r
@@ -3457,6 +3588,7 @@ CpuSleep (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Requests CPU to pause for a short period of time.\r
 \r
@@ -3470,6 +3602,7 @@ CpuPause (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Flushes all the Translation Lookaside Buffers(TLB) entries in a CPU.\r
 \r
@@ -3482,13 +3615,18 @@ CpuFlushTlb (
   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
@@ -3508,9 +3646,11 @@ SwitchStack (
   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
@@ -3524,6 +3664,7 @@ CpuBreakpoint (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Executes an infinite loop.\r
 \r
@@ -3539,30 +3680,1261 @@ CpuDeadLoop (
   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
@@ -3806,6 +5178,7 @@ AsmCpuid (
   OUT     UINT32                    *Edx   OPTIONAL\r
   );\r
 \r
+\r
 /**\r
   Retrieves CPUID information using an extended leaf identifier.\r
 \r
@@ -3849,6 +5222,7 @@ AsmCpuidEx (
   OUT     UINT32                    *Edx   OPTIONAL\r
   );\r
 \r
+\r
 /**\r
   Returns the lower 32-bits of a Machine Specific Register(MSR).\r
 \r
@@ -3869,6 +5243,7 @@ AsmReadMsr32 (
   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
@@ -3892,6 +5267,7 @@ AsmWriteMsr32 (
   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
@@ -3918,6 +5294,7 @@ AsmMsrOr32 (
   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
@@ -3944,6 +5321,7 @@ AsmMsrAnd32 (
   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
@@ -3974,6 +5352,7 @@ AsmMsrAndThenOr32 (
   IN      UINT32                    OrData\r
   );\r
 \r
+\r
 /**\r
   Reads a bit field of an MSR.\r
 \r
@@ -4004,6 +5383,7 @@ AsmMsrBitFieldRead32 (
   IN      UINTN                     EndBit\r
   );\r
 \r
+\r
 /**\r
   Writes a bit field to an MSR.\r
 \r
@@ -4038,6 +5418,7 @@ AsmMsrBitFieldWrite32 (
   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
@@ -4073,6 +5454,7 @@ AsmMsrBitFieldOr32 (
   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
@@ -4108,6 +5490,7 @@ AsmMsrBitFieldAnd32 (
   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
@@ -4147,6 +5530,7 @@ AsmMsrBitFieldAndThenOr32 (
   IN      UINT32                    OrData\r
   );\r
 \r
+\r
 /**\r
   Returns a 64-bit Machine Specific Register(MSR).\r
 \r
@@ -4167,6 +5551,7 @@ AsmReadMsr64 (
   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
@@ -4191,6 +5576,7 @@ AsmWriteMsr64 (
   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
@@ -4216,6 +5602,7 @@ AsmMsrOr64 (
   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
@@ -4241,6 +5628,7 @@ AsmMsrAnd64 (
   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
@@ -4270,6 +5658,7 @@ AsmMsrAndThenOr64 (
   IN      UINT64                    OrData\r
   );\r
 \r
+\r
 /**\r
   Reads a bit field of an MSR.\r
 \r
@@ -4300,6 +5689,7 @@ AsmMsrBitFieldRead64 (
   IN      UINTN                     EndBit\r
   );\r
 \r
+\r
 /**\r
   Writes a bit field to an MSR.\r
 \r
@@ -4333,6 +5723,7 @@ AsmMsrBitFieldWrite64 (
   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
@@ -4368,6 +5759,7 @@ AsmMsrBitFieldOr64 (
   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
@@ -4403,6 +5795,7 @@ AsmMsrBitFieldAnd64 (
   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
@@ -4441,6 +5834,7 @@ AsmMsrBitFieldAndThenOr64 (
   IN      UINT64                    OrData\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of the EFLAGS register.\r
 \r
@@ -4457,6 +5851,7 @@ AsmReadEflags (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of the Control Register 0 (CR0).\r
 \r
@@ -4473,6 +5868,7 @@ AsmReadCr0 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of the Control Register 2 (CR2).\r
 \r
@@ -4489,6 +5885,7 @@ AsmReadCr2 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of the Control Register 3 (CR3).\r
 \r
@@ -4505,6 +5902,7 @@ AsmReadCr3 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of the Control Register 4 (CR4).\r
 \r
@@ -4521,6 +5919,7 @@ AsmReadCr4 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Control Register 0 (CR0).\r
 \r
@@ -4538,6 +5937,7 @@ AsmWriteCr0 (
   UINTN  Cr0\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Control Register 2 (CR2).\r
 \r
@@ -4555,6 +5955,7 @@ AsmWriteCr2 (
   UINTN  Cr2\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Control Register 3 (CR3).\r
 \r
@@ -4572,6 +5973,7 @@ AsmWriteCr3 (
   UINTN  Cr3\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Control Register 4 (CR4).\r
 \r
@@ -4589,6 +5991,7 @@ AsmWriteCr4 (
   UINTN  Cr4\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Debug Register 0 (DR0).\r
 \r
@@ -4605,6 +6008,7 @@ AsmReadDr0 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Debug Register 1 (DR1).\r
 \r
@@ -4621,6 +6025,7 @@ AsmReadDr1 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Debug Register 2 (DR2).\r
 \r
@@ -4637,6 +6042,7 @@ AsmReadDr2 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Debug Register 3 (DR3).\r
 \r
@@ -4653,6 +6059,7 @@ AsmReadDr3 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Debug Register 4 (DR4).\r
 \r
@@ -4669,6 +6076,7 @@ AsmReadDr4 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Debug Register 5 (DR5).\r
 \r
@@ -4685,6 +6093,7 @@ AsmReadDr5 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Debug Register 6 (DR6).\r
 \r
@@ -4701,6 +6110,7 @@ AsmReadDr6 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Debug Register 7 (DR7).\r
 \r
@@ -4717,6 +6127,7 @@ AsmReadDr7 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Debug Register 0 (DR0).\r
 \r
@@ -4734,6 +6145,7 @@ AsmWriteDr0 (
   UINTN  Dr0\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Debug Register 1 (DR1).\r
 \r
@@ -4751,6 +6163,7 @@ AsmWriteDr1 (
   UINTN  Dr1\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Debug Register 2 (DR2).\r
 \r
@@ -4768,6 +6181,7 @@ AsmWriteDr2 (
   UINTN  Dr2\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Debug Register 3 (DR3).\r
 \r
@@ -4785,6 +6199,7 @@ AsmWriteDr3 (
   UINTN  Dr3\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Debug Register 4 (DR4).\r
 \r
@@ -4802,6 +6217,7 @@ AsmWriteDr4 (
   UINTN  Dr4\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Debug Register 5 (DR5).\r
 \r
@@ -4819,6 +6235,7 @@ AsmWriteDr5 (
   UINTN  Dr5\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Debug Register 6 (DR6).\r
 \r
@@ -4836,6 +6253,7 @@ AsmWriteDr6 (
   UINTN  Dr6\r
   );\r
 \r
+\r
 /**\r
   Writes a value to Debug Register 7 (DR7).\r
 \r
@@ -4853,6 +6271,7 @@ AsmWriteDr7 (
   UINTN  Dr7\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Code Segment Register (CS).\r
 \r
@@ -4868,6 +6287,7 @@ AsmReadCs (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Data Segment Register (DS).\r
 \r
@@ -4883,6 +6303,7 @@ AsmReadDs (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Extra Segment Register (ES).\r
 \r
@@ -4898,6 +6319,7 @@ AsmReadEs (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of FS Data Segment Register (FS).\r
 \r
@@ -4913,6 +6335,7 @@ AsmReadFs (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of GS Data Segment Register (GS).\r
 \r
@@ -4928,6 +6351,7 @@ AsmReadGs (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Stack Segment Register (SS).\r
 \r
@@ -4943,6 +6367,7 @@ AsmReadSs (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Task Register (TR).\r
 \r
@@ -4958,6 +6383,7 @@ AsmReadTr (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current Global Descriptor Table Register(GDTR) descriptor.\r
 \r
@@ -4975,6 +6401,7 @@ AsmReadGdtr (
   OUT     IA32_DESCRIPTOR           *Gdtr\r
   );\r
 \r
+\r
 /**\r
   Writes the current Global Descriptor Table Register (GDTR) descriptor.\r
 \r
@@ -4992,6 +6419,7 @@ AsmWriteGdtr (
   IN      CONST IA32_DESCRIPTOR     *Gdtr\r
   );\r
 \r
+\r
 /**\r
   Reads the current Interrupt Descriptor Table Register(GDTR) descriptor.\r
 \r
@@ -5009,6 +6437,7 @@ AsmReadIdtr (
   OUT     IA32_DESCRIPTOR           *Idtr\r
   );\r
 \r
+\r
 /**\r
   Writes the current Interrupt Descriptor Table Register(GDTR) descriptor.\r
 \r
@@ -5026,6 +6455,7 @@ AsmWriteIdtr (
   IN      CONST IA32_DESCRIPTOR     *Idtr\r
   );\r
 \r
+\r
 /**\r
   Reads the current Local Descriptor Table Register(LDTR) selector.\r
 \r
@@ -5041,6 +6471,7 @@ AsmReadLdtr (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Writes the current Local Descriptor Table Register (GDTR) selector.\r
 \r
@@ -5056,6 +6487,7 @@ AsmWriteLdtr (
   IN      UINT16                    Ldtr\r
   );\r
 \r
+\r
 /**\r
   Save the current floating point/SSE/SSE2 context to a buffer.\r
 \r
@@ -5075,6 +6507,7 @@ AsmFxSave (
   OUT     IA32_FX_BUFFER            *Buffer\r
   );\r
 \r
+\r
 /**\r
   Restores the current floating point/SSE/SSE2 context from a buffer.\r
 \r
@@ -5095,6 +6528,7 @@ AsmFxRestore (
   IN      CONST IA32_FX_BUFFER      *Buffer\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of 64-bit MMX Register #0 (MM0).\r
 \r
@@ -5110,6 +6544,7 @@ AsmReadMm0 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of 64-bit MMX Register #1 (MM1).\r
 \r
@@ -5125,6 +6560,7 @@ AsmReadMm1 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of 64-bit MMX Register #2 (MM2).\r
 \r
@@ -5140,6 +6576,7 @@ AsmReadMm2 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of 64-bit MMX Register #3 (MM3).\r
 \r
@@ -5155,6 +6592,7 @@ AsmReadMm3 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of 64-bit MMX Register #4 (MM4).\r
 \r
@@ -5170,6 +6608,7 @@ AsmReadMm4 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of 64-bit MMX Register #5 (MM5).\r
 \r
@@ -5185,6 +6624,7 @@ AsmReadMm5 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of 64-bit MMX Register #6 (MM6).\r
 \r
@@ -5200,6 +6640,7 @@ AsmReadMm6 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of 64-bit MMX Register #7 (MM7).\r
 \r
@@ -5215,6 +6656,7 @@ AsmReadMm7 (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Writes the current value of 64-bit MMX Register #0 (MM0).\r
 \r
@@ -5230,6 +6672,7 @@ AsmWriteMm0 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 /**\r
   Writes the current value of 64-bit MMX Register #1 (MM1).\r
 \r
@@ -5245,6 +6688,7 @@ AsmWriteMm1 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 /**\r
   Writes the current value of 64-bit MMX Register #2 (MM2).\r
 \r
@@ -5260,6 +6704,7 @@ AsmWriteMm2 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 /**\r
   Writes the current value of 64-bit MMX Register #3 (MM3).\r
 \r
@@ -5275,6 +6720,7 @@ AsmWriteMm3 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 /**\r
   Writes the current value of 64-bit MMX Register #4 (MM4).\r
 \r
@@ -5290,6 +6736,7 @@ AsmWriteMm4 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 /**\r
   Writes the current value of 64-bit MMX Register #5 (MM5).\r
 \r
@@ -5305,6 +6752,7 @@ AsmWriteMm5 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 /**\r
   Writes the current value of 64-bit MMX Register #6 (MM6).\r
 \r
@@ -5320,6 +6768,7 @@ AsmWriteMm6 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 /**\r
   Writes the current value of 64-bit MMX Register #7 (MM7).\r
 \r
@@ -5335,6 +6784,7 @@ AsmWriteMm7 (
   IN      UINT64                    Value\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of Time Stamp Counter (TSC).\r
 \r
@@ -5350,6 +6800,7 @@ AsmReadTsc (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Reads the current value of a Performance Counter (PMC).\r
 \r
@@ -5367,6 +6818,7 @@ AsmReadPmc (
   IN      UINT32                    Index\r
   );\r
 \r
+\r
 /**\r
   Sets up a monitor buffer that is used by AsmMwait().\r
 \r
@@ -5391,6 +6843,7 @@ AsmMonitor (
   IN      UINTN                     Edx\r
   );\r
 \r
+\r
 /**\r
   Executes an MWAIT instruction.\r
 \r
@@ -5412,6 +6865,7 @@ AsmMwait (
   IN      UINTN                     Ecx\r
   );\r
 \r
+\r
 /**\r
   Executes a WBINVD instruction.\r
 \r
@@ -5425,6 +6879,7 @@ AsmWbinvd (
   VOID\r
   );\r
 \r
+\r
 /**\r
   Executes a INVD instruction.\r
 \r
@@ -5438,6 +6893,7 @@ AsmInvd (
   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
@@ -5459,6 +6915,7 @@ AsmFlushCacheLine (
   IN      VOID                      *LinearAddress\r
   );\r
 \r
+\r
 /**\r
   Enables the 32-bit paging mode on the CPU.\r
 \r
@@ -5505,6 +6962,7 @@ AsmEnablePaging32 (
   IN      VOID                      *NewStack\r
   );\r
 \r
+\r
 /**\r
   Disables the 32-bit paging mode on the CPU.\r
 \r
@@ -5548,6 +7006,7 @@ AsmDisablePaging32 (
   IN      VOID                      *NewStack\r
   );\r
 \r
+\r
 /**\r
   Enables the 64-bit paging mode on the CPU.\r
 \r
@@ -5590,6 +7049,7 @@ AsmEnablePaging64 (
   IN      UINT64                    NewStack\r
   );\r
 \r
+\r
 /**\r
   Disables the 64-bit paging mode on the CPU.\r
 \r
@@ -5630,6 +7090,7 @@ AsmDisablePaging64 (
   IN      UINT32                    NewStack\r
   );\r
 \r
+\r
 //\r
 // 16-bit thunking services\r
 //\r
@@ -5662,6 +7123,7 @@ AsmGetThunk16Properties (
   OUT     UINT32                    *ExtraStackSize\r
   );\r
 \r
+\r
 /**\r
   Prepares all structures a code required to use AsmThunk16().\r
 \r
@@ -5679,6 +7141,7 @@ AsmPrepareThunk16 (
   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
@@ -5699,6 +7162,7 @@ AsmThunk16 (
   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
@@ -5722,121 +7186,8 @@ AsmPrepareAndThunk16 (
   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