]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/X86Msr.c
MdePkg BaseLib: Convert Ia32/WriteCr4.asm to NASM
[mirror_edk2.git] / MdePkg / Library / BaseLib / X86Msr.c
index 13065dd4672d69bef51a86ca4f6a033ce244d76f..9430980401b4f571a4a52429b37ebf32ee2cb2d0 100644 (file)
@@ -1,11 +1,11 @@
 /** @file\r
   IA-32/x64 MSR functions.\r
 \r
-  Copyright (c) 2006, Intel Corporation<BR>\r
-  All rights reserved. This program and the accompanying materials\r
+  Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
+  http://opensource.org/licenses/bsd-license.php.\r
 \r
   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
@@ -40,7 +40,8 @@ AsmReadMsr32 (
 }\r
 \r
 /**\r
-  Zero-extend a 32-bit value and writes it to a Machine Specific Register(MSR).\r
+  Writes a 32-bit value to a Machine Specific Register(MSR), and returns the value.\r
+  The upper 32-bits of the MSR are set to zero.\r
 \r
   Writes the 32-bit value specified by Value to the MSR specified by Index. The\r
   upper 32-bits of the MSR write are set to zero. The 32-bit value written to\r
@@ -66,10 +67,10 @@ AsmWriteMsr32 (
 }\r
 \r
 /**\r
-  Reads a 64-bit MSR, performs a bitwise inclusive OR on the lower 32-bits, and\r
+  Reads a 64-bit MSR, performs a bitwise OR on the lower 32-bits, and\r
   writes the result back to the 64-bit MSR.\r
 \r
-  Reads the 64-bit MSR specified by Index, performs a bitwise inclusive OR\r
+  Reads the 64-bit MSR specified by Index, performs a bitwise OR\r
   between the lower 32-bits of the read result and the value specified by\r
   OrData, and writes the result to the 64-bit MSR specified by Index. The lower\r
   32-bits of the value written to the MSR is returned. No parameter checking is\r
@@ -124,12 +125,12 @@ AsmMsrAnd32 (
 }\r
 \r
 /**\r
-  Reads a 64-bit MSR, performs a bitwise AND followed by a bitwise inclusive OR\r
+  Reads a 64-bit MSR, performs a bitwise AND followed by a bitwise OR\r
   on the lower 32-bits, and writes the result back to the 64-bit MSR.\r
 \r
   Reads the 64-bit MSR specified by Index, performs a bitwise AND between the\r
   lower 32-bits of the read result and the value specified by AndData\r
-  preserving the upper 32-bits, performs a bitwise inclusive OR between the\r
+  preserving the upper 32-bits, performs a bitwise OR between the\r
   result of the AND operation and the value specified by OrData, and writes the\r
   result to the 64-bit MSR specified by Address. The lower 32-bits of the value\r
   written to the MSR is returned. No parameter checking is performed on Index,\r
@@ -192,24 +193,24 @@ AsmMsrBitFieldRead32 (
 /**\r
   Writes a bit field to an MSR.\r
 \r
-  Writes Value to a bit field in the lower 32-bits of a  64-bit MSR. The bit\r
+  Writes Value to a bit field in the lower 32-bits of a 64-bit MSR. The bit\r
   field is specified by the StartBit and the EndBit. All other bits in the\r
   destination MSR are preserved. The lower 32-bits of the MSR written is\r
-  returned. Extra left bits in Value are stripped. The caller must either\r
-  guarantee that Index and the data written is valid, or the caller must set up\r
-  exception handlers to catch the exceptions. This function is only available\r
-  on IA-32 and x64.\r
+  returned. The caller must either guarantee that Index and the data written \r
+  is valid, or the caller must set up exception handlers to catch the exceptions. \r
+  This function is only available on IA-32 and x64.\r
 \r
   If StartBit is greater than 31, then ASSERT().\r
   If EndBit is greater than 31, then ASSERT().\r
   If EndBit is less than StartBit, then ASSERT().\r
+  If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
 \r
   @param  Index     The 32-bit MSR index to write.\r
   @param  StartBit  The ordinal of the least significant bit in the bit field.\r
                     Range 0..31.\r
   @param  EndBit    The ordinal of the most significant bit in the bit field.\r
                     Range 0..31.\r
-  @param  Value     New value of the bit field.\r
+  @param  Value     The new value of the bit field.\r
 \r
   @return The lower 32-bit of the value written to the MSR.\r
 \r
@@ -232,7 +233,7 @@ AsmMsrBitFieldWrite32 (
   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
 \r
-  Reads the 64-bit MSR specified by Index, performs a bitwise inclusive OR\r
+  Reads the 64-bit MSR specified by Index, performs a bitwise OR\r
   between the read result and the value specified by OrData, and writes the\r
   result to the 64-bit MSR specified by Index. The lower 32-bits of the value\r
   written to the MSR are returned. Extra left bits in OrData are stripped. The\r
@@ -243,6 +244,7 @@ AsmMsrBitFieldWrite32 (
   If StartBit is greater than 31, then ASSERT().\r
   If EndBit is greater than 31, then ASSERT().\r
   If EndBit is less than StartBit, then ASSERT().\r
+  If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
 \r
   @param  Index     The 32-bit MSR index to write.\r
   @param  StartBit  The ordinal of the least significant bit in the bit field.\r
@@ -283,6 +285,7 @@ AsmMsrBitFieldOr32 (
   If StartBit is greater than 31, then ASSERT().\r
   If EndBit is greater than 31, then ASSERT().\r
   If EndBit is less than StartBit, then ASSERT().\r
+  If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
 \r
   @param  Index     The 32-bit MSR index to write.\r
   @param  StartBit  The ordinal of the least significant bit in the bit field.\r
@@ -310,11 +313,11 @@ AsmMsrBitFieldAnd32 (
 \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
+  bitwise OR, and writes the result back to the bit field in the\r
   64-bit MSR.\r
 \r
   Reads the 64-bit MSR specified by Index, performs a bitwise AND followed by a\r
-  bitwise inclusive OR between the read result and the value specified by\r
+  bitwise OR between the read result and the value specified by\r
   AndData, and writes the result to the 64-bit MSR specified by Index. The\r
   lower 32-bits of the value written to the MSR are returned. Extra left bits\r
   in both AndData and OrData are stripped. The caller must either guarantee\r
@@ -325,6 +328,8 @@ AsmMsrBitFieldAnd32 (
   If StartBit is greater than 31, then ASSERT().\r
   If EndBit is greater than 31, then ASSERT().\r
   If EndBit is less than StartBit, then ASSERT().\r
+  If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
+  If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
 \r
   @param  Index     The 32-bit MSR index to write.\r
   @param  StartBit  The ordinal of the least significant bit in the bit field.\r
@@ -359,10 +364,10 @@ AsmMsrBitFieldAndThenOr32 (
 }\r
 \r
 /**\r
-  Reads a 64-bit MSR, performs a bitwise inclusive OR, and writes the result\r
+  Reads a 64-bit MSR, performs a bitwise OR, and writes the result\r
   back to the 64-bit MSR.\r
 \r
-  Reads the 64-bit MSR specified by Index, performs a bitwise inclusive OR\r
+  Reads the 64-bit MSR specified by Index, performs a bitwise OR\r
   between the read result and the value specified by OrData, and writes the\r
   result to the 64-bit MSR specified by Index. The value written to the MSR is\r
   returned. No parameter checking is performed on Index or OrData, and some of\r
@@ -415,11 +420,11 @@ AsmMsrAnd64 (
 }\r
 \r
 /**\r
-  Reads a 64-bit MSR, performs a bitwise AND followed by a bitwise inclusive\r
+  Reads a 64-bit MSR, performs a bitwise AND followed by a bitwise \r
   OR, and writes the result back to the 64-bit MSR.\r
 \r
   Reads the 64-bit MSR specified by Index, performs a bitwise AND between read\r
-  result and the value specified by AndData, performs a bitwise inclusive OR\r
+  result and the value specified by AndData, performs a bitwise OR\r
   between the result of the AND operation and the value specified by OrData,\r
   and writes the result to the 64-bit MSR specified by Index. The value written\r
   to the MSR is returned. No parameter checking is performed on Index, AndData,\r
@@ -465,7 +470,7 @@ AsmMsrAndThenOr64 (
   @param  EndBit    The ordinal of the most significant bit in the bit field.\r
                     Range 0..63.\r
 \r
-  @return The value written back to the MSR.\r
+  @return The value read from the MSR.\r
 \r
 **/\r
 UINT64\r
@@ -484,21 +489,21 @@ AsmMsrBitFieldRead64 (
 \r
   Writes Value to a bit field in a 64-bit MSR. The bit field is specified by\r
   the StartBit and the EndBit. All other bits in the destination MSR are\r
-  preserved. The MSR written is returned. Extra left bits in Value are\r
-  stripped. The caller must either guarantee that Index and the data written is\r
-  valid, or the caller must set up exception handlers to catch the exceptions.\r
-  This function is only available on IA-32 and x64.\r
+  preserved. The MSR written is returned. The caller must either guarantee \r
+  that Index and the data written is valid, or the caller must set up exception \r
+  handlers to catch the exceptions. This function is only available on IA-32 and x64.\r
 \r
   If StartBit is greater than 63, then ASSERT().\r
   If EndBit is greater than 63, then ASSERT().\r
   If EndBit is less than StartBit, then ASSERT().\r
+  If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
 \r
   @param  Index     The 32-bit MSR index to write.\r
   @param  StartBit  The ordinal of the least significant bit in the bit field.\r
                     Range 0..63.\r
   @param  EndBit    The ordinal of the most significant bit in the bit field.\r
                     Range 0..63.\r
-  @param  Value     New value of the bit field.\r
+  @param  Value     The new value of the bit field.\r
 \r
   @return The value written back to the MSR.\r
 \r
@@ -519,10 +524,10 @@ AsmMsrBitFieldWrite64 (
 }\r
 \r
 /**\r
-  Reads a bit field in a 64-bit MSR, performs a bitwise inclusive OR, and\r
+  Reads a bit field in a 64-bit MSR, performs a bitwise OR, and\r
   writes the result back to the bit field in the 64-bit MSR.\r
 \r
-  Reads the 64-bit MSR specified by Index, performs a bitwise inclusive OR\r
+  Reads the 64-bit MSR specified by Index, performs a bitwise OR\r
   between the read result and the value specified by OrData, and writes the\r
   result to the 64-bit MSR specified by Index. The value written to the MSR is\r
   returned. Extra left bits in OrData are stripped. The caller must either\r
@@ -533,6 +538,7 @@ AsmMsrBitFieldWrite64 (
   If StartBit is greater than 63, then ASSERT().\r
   If EndBit is greater than 63, then ASSERT().\r
   If EndBit is less than StartBit, then ASSERT().\r
+  If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
 \r
   @param  Index     The 32-bit MSR index to write.\r
   @param  StartBit  The ordinal of the least significant bit in the bit field.\r
@@ -574,6 +580,7 @@ AsmMsrBitFieldOr64 (
   If StartBit is greater than 63, then ASSERT().\r
   If EndBit is greater than 63, then ASSERT().\r
   If EndBit is less than StartBit, then ASSERT().\r
+  If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
 \r
   @param  Index     The 32-bit MSR index to write.\r
   @param  StartBit  The ordinal of the least significant bit in the bit field.\r
@@ -602,11 +609,11 @@ AsmMsrBitFieldAnd64 (
 \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
+  bitwise OR, and writes the result back to the bit field in the\r
   64-bit MSR.\r
 \r
   Reads the 64-bit MSR specified by Index, performs a bitwise AND followed by\r
-  a bitwise inclusive OR between the read result and the value specified by\r
+  a bitwise OR between the read result and the value specified by\r
   AndData, and writes the result to the 64-bit MSR specified by Index. The\r
   value written to the MSR is returned. Extra left bits in both AndData and\r
   OrData are stripped. The caller must either guarantee that Index and the data\r
@@ -616,6 +623,8 @@ AsmMsrBitFieldAnd64 (
   If StartBit is greater than 63, then ASSERT().\r
   If EndBit is greater than 63, then ASSERT().\r
   If EndBit is less than StartBit, then ASSERT().\r
+  If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
+  If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().\r
 \r
   @param  Index     The 32-bit MSR index to write.\r
   @param  StartBit  The ordinal of the least significant bit in the bit field.\r