git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10683 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			1656 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1656 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Declaration of internal functions in BaseLib.
 | |
| 
 | |
|   Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
 | |
|   This program and the accompanying materials
 | |
|   are licensed and made available under the terms and conditions of the BSD License
 | |
|   which accompanies this distribution.  The full text of the license may be found at
 | |
|   http://opensource.org/licenses/bsd-license.php.
 | |
| 
 | |
|   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
|   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __BASE_LIB_INTERNALS__
 | |
| #define __BASE_LIB_INTERNALS__
 | |
| 
 | |
| #include <Base.h>
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/PcdLib.h>
 | |
| 
 | |
| //
 | |
| // Math functions
 | |
| //
 | |
| 
 | |
| /**
 | |
|   Shifts a 64-bit integer left between 0 and 63 bits. The low bits
 | |
|   are filled with zeros. The shifted value is returned.
 | |
| 
 | |
|   This function shifts the 64-bit value Operand to the left by Count bits. The
 | |
|   low Count bits are set to zero. The shifted value is returned.
 | |
| 
 | |
|   @param  Operand The 64-bit operand to shift left.
 | |
|   @param  Count   The number of bits to shift left.
 | |
| 
 | |
|   @return Operand << Count
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathLShiftU64 (
 | |
|   IN      UINT64                    Operand,
 | |
|   IN      UINTN                     Count
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Shifts a 64-bit integer right between 0 and 63 bits. The high bits
 | |
|   are filled with zeros. The shifted value is returned.
 | |
| 
 | |
|   This function shifts the 64-bit value Operand to the right by Count bits. The
 | |
|   high Count bits are set to zero. The shifted value is returned.
 | |
| 
 | |
|   @param  Operand The 64-bit operand to shift right.
 | |
|   @param  Count   The number of bits to shift right.
 | |
| 
 | |
|   @return Operand >> Count
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathRShiftU64 (
 | |
|   IN      UINT64                    Operand,
 | |
|   IN      UINTN                     Count
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Shifts a 64-bit integer right between 0 and 63 bits. The high bits
 | |
|   are filled with original integer's bit 63. The shifted value is returned.
 | |
| 
 | |
|   This function shifts the 64-bit value Operand to the right by Count bits. The
 | |
|   high Count bits are set to bit 63 of Operand.  The shifted value is returned.
 | |
| 
 | |
|   @param  Operand The 64-bit operand to shift right.
 | |
|   @param  Count   The number of bits to shift right.
 | |
| 
 | |
|   @return Operand arithmetically shifted right by Count
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathARShiftU64 (
 | |
|   IN      UINT64                    Operand,
 | |
|   IN      UINTN                     Count
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Rotates a 64-bit integer left between 0 and 63 bits, filling
 | |
|   the low bits with the high bits that were rotated.
 | |
| 
 | |
|   This function rotates the 64-bit value Operand to the left by Count bits. The
 | |
|   low Count bits are filled with the high Count bits of Operand. The rotated
 | |
|   value is returned.
 | |
| 
 | |
|   @param  Operand The 64-bit operand to rotate left.
 | |
|   @param  Count   The number of bits to rotate left.
 | |
| 
 | |
|   @return Operand <<< Count
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathLRotU64 (
 | |
|   IN      UINT64                    Operand,
 | |
|   IN      UINTN                     Count
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Rotates a 64-bit integer right between 0 and 63 bits, filling
 | |
|   the high bits with the high low bits that were rotated.
 | |
| 
 | |
|   This function rotates the 64-bit value Operand to the right by Count bits.
 | |
|   The high Count bits are filled with the low Count bits of Operand. The rotated
 | |
|   value is returned.
 | |
| 
 | |
|   @param  Operand The 64-bit operand to rotate right.
 | |
|   @param  Count   The number of bits to rotate right.
 | |
| 
 | |
|   @return Operand >>> Count
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathRRotU64 (
 | |
|   IN      UINT64                    Operand,
 | |
|   IN      UINTN                     Count
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Switches the endianess of a 64-bit integer.
 | |
| 
 | |
|   This function swaps the bytes in a 64-bit unsigned value to switch the value
 | |
|   from little endian to big endian or vice versa. The byte swapped value is
 | |
|   returned.
 | |
| 
 | |
|   @param  Operand A 64-bit unsigned value.
 | |
| 
 | |
|   @return The byte swapped Operand.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathSwapBytes64 (
 | |
|   IN      UINT64                    Operand
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Multiplies a 64-bit unsigned integer by a 32-bit unsigned integer
 | |
|   and generates a 64-bit unsigned result.
 | |
| 
 | |
|   This function multiplies the 64-bit unsigned value Multiplicand by the 32-bit
 | |
|   unsigned value Multiplier and generates a 64-bit unsigned result. This 64-
 | |
|   bit unsigned result is returned.
 | |
| 
 | |
|   @param  Multiplicand  A 64-bit unsigned value.
 | |
|   @param  Multiplier    A 32-bit unsigned value.
 | |
| 
 | |
|   @return Multiplicand * Multiplier
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathMultU64x32 (
 | |
|   IN      UINT64                    Multiplicand,
 | |
|   IN      UINT32                    Multiplier
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Multiplies a 64-bit unsigned integer by a 64-bit unsigned integer
 | |
|   and generates a 64-bit unsigned result.
 | |
| 
 | |
|   This function multiples the 64-bit unsigned value Multiplicand by the 64-bit
 | |
|   unsigned value Multiplier and generates a 64-bit unsigned result. This 64-
 | |
|   bit unsigned result is returned.
 | |
| 
 | |
|   @param  Multiplicand  A 64-bit unsigned value.
 | |
|   @param  Multiplier    A 64-bit unsigned value.
 | |
| 
 | |
|   @return Multiplicand * Multiplier
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathMultU64x64 (
 | |
|   IN      UINT64                    Multiplicand,
 | |
|   IN      UINT64                    Multiplier
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Divides a 64-bit unsigned integer by a 32-bit unsigned integer and
 | |
|   generates a 64-bit unsigned result.
 | |
| 
 | |
|   This function divides the 64-bit unsigned value Dividend by the 32-bit
 | |
|   unsigned value Divisor and generates a 64-bit unsigned quotient. This
 | |
|   function returns the 64-bit unsigned quotient.
 | |
| 
 | |
|   @param  Dividend  A 64-bit unsigned value.
 | |
|   @param  Divisor   A 32-bit unsigned value.
 | |
| 
 | |
|   @return Dividend / Divisor
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathDivU64x32 (
 | |
|   IN      UINT64                    Dividend,
 | |
|   IN      UINT32                    Divisor
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Divides a 64-bit unsigned integer by a 32-bit unsigned integer and
 | |
|   generates a 32-bit unsigned remainder.
 | |
| 
 | |
|   This function divides the 64-bit unsigned value Dividend by the 32-bit
 | |
|   unsigned value Divisor and generates a 32-bit remainder. This function
 | |
|   returns the 32-bit unsigned remainder.
 | |
| 
 | |
|   @param  Dividend  A 64-bit unsigned value.
 | |
|   @param  Divisor   A 32-bit unsigned value.
 | |
| 
 | |
|   @return Dividend % Divisor
 | |
| 
 | |
| **/
 | |
| UINT32
 | |
| EFIAPI
 | |
| InternalMathModU64x32 (
 | |
|   IN      UINT64                    Dividend,
 | |
|   IN      UINT32                    Divisor
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Divides a 64-bit unsigned integer by a 32-bit unsigned integer and
 | |
|   generates a 64-bit unsigned result and an optional 32-bit unsigned remainder.
 | |
| 
 | |
|   This function divides the 64-bit unsigned value Dividend by the 32-bit
 | |
|   unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder
 | |
|   is not NULL, then the 32-bit unsigned remainder is returned in Remainder.
 | |
|   This function returns the 64-bit unsigned quotient.
 | |
| 
 | |
|   @param  Dividend  A 64-bit unsigned value.
 | |
|   @param  Divisor   A 32-bit unsigned value.
 | |
|   @param  Remainder A pointer to a 32-bit unsigned value. This parameter is
 | |
|                     optional and may be NULL.
 | |
| 
 | |
|   @return Dividend / Divisor
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathDivRemU64x32 (
 | |
|   IN      UINT64                    Dividend,
 | |
|   IN      UINT32                    Divisor,
 | |
|   OUT     UINT32                    *Remainder OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Divides a 64-bit unsigned integer by a 64-bit unsigned integer and
 | |
|   generates a 64-bit unsigned result and an optional 64-bit unsigned remainder.
 | |
| 
 | |
|   This function divides the 64-bit unsigned value Dividend by the 64-bit
 | |
|   unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder
 | |
|   is not NULL, then the 64-bit unsigned remainder is returned in Remainder.
 | |
|   This function returns the 64-bit unsigned quotient.
 | |
| 
 | |
|   @param  Dividend  A 64-bit unsigned value.
 | |
|   @param  Divisor   A 64-bit unsigned value.
 | |
|   @param  Remainder A pointer to a 64-bit unsigned value. This parameter is
 | |
|                     optional and may be NULL.
 | |
| 
 | |
|   @return Dividend / Divisor
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| InternalMathDivRemU64x64 (
 | |
|   IN      UINT64                    Dividend,
 | |
|   IN      UINT64                    Divisor,
 | |
|   OUT     UINT64                    *Remainder OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Divides a 64-bit signed integer by a 64-bit signed integer and
 | |
|   generates a 64-bit signed result and an optional 64-bit signed remainder.
 | |
| 
 | |
|   This function divides the 64-bit signed value Dividend by the 64-bit
 | |
|   signed value Divisor and generates a 64-bit signed quotient. If Remainder
 | |
|   is not NULL, then the 64-bit signed remainder is returned in Remainder.
 | |
|   This function returns the 64-bit signed quotient.
 | |
| 
 | |
|   @param  Dividend  A 64-bit signed value.
 | |
|   @param  Divisor   A 64-bit signed value.
 | |
|   @param  Remainder A pointer to a 64-bit signed value. This parameter is
 | |
|                     optional and may be NULL.
 | |
| 
 | |
|   @return Dividend / Divisor
 | |
| 
 | |
| **/
 | |
| INT64
 | |
| EFIAPI
 | |
| InternalMathDivRemS64x64 (
 | |
|   IN      INT64                     Dividend,
 | |
|   IN      INT64                     Divisor,
 | |
|   OUT     INT64                     *Remainder  OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Transfers control to a function starting with a new stack.
 | |
| 
 | |
|   Transfers control to the function specified by EntryPoint using the
 | |
|   new stack specified by NewStack and passing in the parameters specified
 | |
|   by Context1 and Context2.  Context1 and Context2 are optional and may
 | |
|   be NULL.  The function EntryPoint must never return.
 | |
|   Marker will be ignored on IA-32, x64, and EBC.
 | |
|   IPF CPUs expect one additional parameter of type VOID * that specifies
 | |
|   the new backing store pointer.
 | |
| 
 | |
|   If EntryPoint is NULL, then ASSERT().
 | |
|   If NewStack is NULL, then ASSERT().
 | |
| 
 | |
|   @param  EntryPoint  A pointer to function to call with the new stack.
 | |
|   @param  Context1    A pointer to the context to pass into the EntryPoint
 | |
|                       function.
 | |
|   @param  Context2    A pointer to the context to pass into the EntryPoint
 | |
|                       function.
 | |
|   @param  NewStack    A pointer to the new stack to use for the EntryPoint
 | |
|                       function.
 | |
|   @param  Marker      VA_LIST marker for the variable argument list.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalSwitchStack (
 | |
|   IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,
 | |
|   IN      VOID                      *Context1,   OPTIONAL
 | |
|   IN      VOID                      *Context2,   OPTIONAL
 | |
|   IN      VOID                      *NewStack,
 | |
|   IN      VA_LIST                   Marker
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Worker function that locates the Node in the List.
 | |
| 
 | |
|   By searching the List, finds the location of the Node in List. At the same time,
 | |
|   verifies the validity of this list.
 | |
| 
 | |
|   If List is NULL, then ASSERT().
 | |
|   If List->ForwardLink is NULL, then ASSERT().
 | |
|   If List->backLink is NULL, then ASSERT().
 | |
|   If Node is NULL, then ASSERT();
 | |
|   If PcdMaximumLinkedListLenth is not zero, and prior to insertion the number
 | |
|   of nodes in ListHead, including the ListHead node, is greater than or
 | |
|   equal to PcdMaximumLinkedListLength, then ASSERT().
 | |
| 
 | |
|   @param  List  A pointer to a node in a linked list.
 | |
|   @param  Node  A pointer to one nod.
 | |
| 
 | |
|   @retval TRUE   Node is in List.
 | |
|   @retval FALSE  Node isn't in List, or List is invalid.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| IsNodeInList (
 | |
|   IN      CONST LIST_ENTRY      *List,
 | |
|   IN      CONST LIST_ENTRY      *Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Worker function that returns a bit field from Operand.
 | |
| 
 | |
|   Returns the bitfield specified by the StartBit and the EndBit from Operand.
 | |
| 
 | |
|   @param  Operand   Operand on which to perform the bitfield operation.
 | |
|   @param  StartBit  The ordinal of the least significant bit in the bit field.
 | |
|   @param  EndBit    The ordinal of the most significant bit in the bit field.
 | |
| 
 | |
|   @return The bit field read.
 | |
| 
 | |
| **/
 | |
| UINTN
 | |
| EFIAPI
 | |
| BitFieldReadUint (
 | |
|   IN      UINTN                     Operand,
 | |
|   IN      UINTN                     StartBit,
 | |
|   IN      UINTN                     EndBit
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Worker function that reads a bit field from Operand, performs a bitwise OR,
 | |
|   and returns the result.
 | |
| 
 | |
|   Performs a bitwise OR between the bit field specified by StartBit and EndBit
 | |
|   in Operand and the value specified by AndData. All other bits in Operand are
 | |
|   preserved. The new value is returned.
 | |
| 
 | |
|   @param  Operand   Operand on which to perform the bitfield operation.
 | |
|   @param  StartBit  The ordinal of the least significant bit in the bit field.
 | |
|   @param  EndBit    The ordinal of the most significant bit in the bit field.
 | |
|   @param  OrData    The value to OR with the read value from the value
 | |
| 
 | |
|   @return The new value.
 | |
| 
 | |
| **/
 | |
| UINTN
 | |
| EFIAPI
 | |
| BitFieldOrUint (
 | |
|   IN      UINTN                     Operand,
 | |
|   IN      UINTN                     StartBit,
 | |
|   IN      UINTN                     EndBit,
 | |
|   IN      UINTN                     OrData
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Worker function that reads a bit field from Operand, performs a bitwise AND,
 | |
|   and returns the result.
 | |
| 
 | |
|   Performs a bitwise AND between the bit field specified by StartBit and EndBit
 | |
|   in Operand and the value specified by AndData. All other bits in Operand are
 | |
|   preserved. The new value is returned.
 | |
| 
 | |
|   @param  Operand   Operand on which to perform the bitfield operation.
 | |
|   @param  StartBit  The ordinal of the least significant bit in the bit field.
 | |
|   @param  EndBit    The ordinal of the most significant bit in the bit field.
 | |
|   @param  AndData    The value to And with the read value from the value
 | |
| 
 | |
|   @return The new value.
 | |
| 
 | |
| **/
 | |
| UINTN
 | |
| EFIAPI
 | |
| BitFieldAndUint (
 | |
|   IN      UINTN                     Operand,
 | |
|   IN      UINTN                     StartBit,
 | |
|   IN      UINTN                     EndBit,
 | |
|   IN      UINTN                     AndData
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Worker function that checks ASSERT condition for JumpBuffer
 | |
| 
 | |
|   Checks ASSERT condition for JumpBuffer.
 | |
| 
 | |
|   If JumpBuffer is NULL, then ASSERT().
 | |
|   For IPF CPUs, if JumpBuffer is not aligned on a 16-byte boundary, then ASSERT().
 | |
| 
 | |
|   @param  JumpBuffer    A pointer to CPU context buffer.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalAssertJumpBuffer (
 | |
|   IN      BASE_LIBRARY_JUMP_BUFFER  *JumpBuffer
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Restores the CPU context that was saved with SetJump().
 | |
| 
 | |
|   Restores the CPU context from the buffer specified by JumpBuffer.
 | |
|   This function never returns to the caller.
 | |
|   Instead is resumes execution based on the state of JumpBuffer.
 | |
| 
 | |
|   @param  JumpBuffer    A pointer to CPU context buffer.
 | |
|   @param  Value         The value to return when the SetJump() context is restored.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalLongJump (
 | |
|   IN      BASE_LIBRARY_JUMP_BUFFER  *JumpBuffer,
 | |
|   IN      UINTN                     Value
 | |
|   );
 | |
| 
 | |
| 
 | |
| //
 | |
| // Ia32 and x64 specific functions
 | |
| //
 | |
| #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
 | |
| 
 | |
| /**
 | |
|   Reads the current Global Descriptor Table Register(GDTR) descriptor.
 | |
| 
 | |
|   Reads and returns the current GDTR descriptor and returns it in Gdtr. This
 | |
|   function is only available on IA-32 and x64.
 | |
| 
 | |
|   @param  Gdtr  The pointer to a GDTR descriptor.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86ReadGdtr (
 | |
|   OUT     IA32_DESCRIPTOR           *Gdtr
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Writes the current Global Descriptor Table Register (GDTR) descriptor.
 | |
| 
 | |
|   Writes and the current GDTR descriptor specified by Gdtr. This function is
 | |
|   only available on IA-32 and x64.
 | |
| 
 | |
|   @param  Gdtr  The pointer to a GDTR descriptor.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86WriteGdtr (
 | |
|   IN      CONST IA32_DESCRIPTOR     *Gdtr
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Reads the current Interrupt Descriptor Table Register(GDTR) descriptor.
 | |
| 
 | |
|   Reads and returns the current IDTR descriptor and returns it in Idtr. This
 | |
|   function is only available on IA-32 and x64.
 | |
| 
 | |
|   @param  Idtr  The pointer to an IDTR descriptor.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86ReadIdtr (
 | |
|   OUT     IA32_DESCRIPTOR           *Idtr
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Writes the current Interrupt Descriptor Table Register(GDTR) descriptor.
 | |
| 
 | |
|   Writes the current IDTR descriptor and returns it in Idtr. This function is
 | |
|   only available on IA-32 and x64.
 | |
| 
 | |
|   @param  Idtr  The pointer to an IDTR descriptor.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86WriteIdtr (
 | |
|   IN      CONST IA32_DESCRIPTOR     *Idtr
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Save the current floating point/SSE/SSE2 context to a buffer.
 | |
| 
 | |
|   Saves the current floating point/SSE/SSE2 state to the buffer specified by
 | |
|   Buffer. Buffer must be aligned on a 16-byte boundary. This function is only
 | |
|   available on IA-32 and x64.
 | |
| 
 | |
|   @param  Buffer  The pointer to a buffer to save the floating point/SSE/SSE2 context.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86FxSave (
 | |
|   OUT     IA32_FX_BUFFER            *Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Restores the current floating point/SSE/SSE2 context from a buffer.
 | |
| 
 | |
|   Restores the current floating point/SSE/SSE2 state from the buffer specified
 | |
|   by Buffer. Buffer must be aligned on a 16-byte boundary. This function is
 | |
|   only available on IA-32 and x64.
 | |
| 
 | |
|   @param  Buffer  The pointer to a buffer to save the floating point/SSE/SSE2 context.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86FxRestore (
 | |
|   IN      CONST IA32_FX_BUFFER      *Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Enables the 32-bit paging mode on the CPU.
 | |
| 
 | |
|   Enables the 32-bit paging mode on the CPU. CR0, CR3, CR4, and the page tables
 | |
|   must be properly initialized prior to calling this service. This function
 | |
|   assumes the current execution mode is 32-bit protected mode. This function is
 | |
|   only available on IA-32. After the 32-bit paging mode is enabled, control is
 | |
|   transferred to the function specified by EntryPoint using the new stack
 | |
|   specified by NewStack and passing in the parameters specified by Context1 and
 | |
|   Context2. Context1 and Context2 are optional and may be NULL. The function
 | |
|   EntryPoint must never return.
 | |
| 
 | |
|   There are a number of constraints that must be followed before calling this
 | |
|   function:
 | |
|   1)  Interrupts must be disabled.
 | |
|   2)  The caller must be in 32-bit protected mode with flat descriptors. This
 | |
|       means all descriptors must have a base of 0 and a limit of 4GB.
 | |
|   3)  CR0 and CR4 must be compatible with 32-bit protected mode with flat
 | |
|       descriptors.
 | |
|   4)  CR3 must point to valid page tables that will be used once the transition
 | |
|       is complete, and those page tables must guarantee that the pages for this
 | |
|       function and the stack are identity mapped.
 | |
| 
 | |
|   @param  EntryPoint  A pointer to function to call with the new stack after
 | |
|                       paging is enabled.
 | |
|   @param  Context1    A pointer to the context to pass into the EntryPoint
 | |
|                       function as the first parameter after paging is enabled.
 | |
|   @param  Context2    A pointer to the context to pass into the EntryPoint
 | |
|                       function as the second parameter after paging is enabled.
 | |
|   @param  NewStack    A pointer to the new stack to use for the EntryPoint
 | |
|                       function after paging is enabled.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86EnablePaging32 (
 | |
|   IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,
 | |
|   IN      VOID                      *Context1,  OPTIONAL
 | |
|   IN      VOID                      *Context2,  OPTIONAL
 | |
|   IN      VOID                      *NewStack
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Disables the 32-bit paging mode on the CPU.
 | |
| 
 | |
|   Disables the 32-bit paging mode on the CPU and returns to 32-bit protected
 | |
|   mode. This function assumes the current execution mode is 32-paged protected
 | |
|   mode. This function is only available on IA-32. After the 32-bit paging mode
 | |
|   is disabled, control is transferred to the function specified by EntryPoint
 | |
|   using the new stack specified by NewStack and passing in the parameters
 | |
|   specified by Context1 and Context2. Context1 and Context2 are optional and
 | |
|   may be NULL. The function EntryPoint must never return.
 | |
| 
 | |
|   There are a number of constraints that must be followed before calling this
 | |
|   function:
 | |
|   1)  Interrupts must be disabled.
 | |
|   2)  The caller must be in 32-bit paged mode.
 | |
|   3)  CR0, CR3, and CR4 must be compatible with 32-bit paged mode.
 | |
|   4)  CR3 must point to valid page tables that guarantee that the pages for
 | |
|       this function and the stack are identity mapped.
 | |
| 
 | |
|   @param  EntryPoint  A pointer to function to call with the new stack after
 | |
|                       paging is disabled.
 | |
|   @param  Context1    A pointer to the context to pass into the EntryPoint
 | |
|                       function as the first parameter after paging is disabled.
 | |
|   @param  Context2    A pointer to the context to pass into the EntryPoint
 | |
|                       function as the second parameter after paging is
 | |
|                       disabled.
 | |
|   @param  NewStack    A pointer to the new stack to use for the EntryPoint
 | |
|                       function after paging is disabled.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86DisablePaging32 (
 | |
|   IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,
 | |
|   IN      VOID                      *Context1,  OPTIONAL
 | |
|   IN      VOID                      *Context2,  OPTIONAL
 | |
|   IN      VOID                      *NewStack
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Enables the 64-bit paging mode on the CPU.
 | |
| 
 | |
|   Enables the 64-bit paging mode on the CPU. CR0, CR3, CR4, and the page tables
 | |
|   must be properly initialized prior to calling this service. This function
 | |
|   assumes the current execution mode is 32-bit protected mode with flat
 | |
|   descriptors. This function is only available on IA-32. After the 64-bit
 | |
|   paging mode is enabled, control is transferred to the function specified by
 | |
|   EntryPoint using the new stack specified by NewStack and passing in the
 | |
|   parameters specified by Context1 and Context2. Context1 and Context2 are
 | |
|   optional and may be 0. The function EntryPoint must never return.
 | |
| 
 | |
|   @param  Cs          The 16-bit selector to load in the CS before EntryPoint
 | |
|                       is called. The descriptor in the GDT that this selector
 | |
|                       references must be setup for long mode.
 | |
|   @param  EntryPoint  The 64-bit virtual address of the function to call with
 | |
|                       the new stack after paging is enabled.
 | |
|   @param  Context1    The 64-bit virtual address of the context to pass into
 | |
|                       the EntryPoint function as the first parameter after
 | |
|                       paging is enabled.
 | |
|   @param  Context2    The 64-bit virtual address of the context to pass into
 | |
|                       the EntryPoint function as the second parameter after
 | |
|                       paging is enabled.
 | |
|   @param  NewStack    The 64-bit virtual address of the new stack to use for
 | |
|                       the EntryPoint function after paging is enabled.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86EnablePaging64 (
 | |
|   IN      UINT16                    Cs,
 | |
|   IN      UINT64                    EntryPoint,
 | |
|   IN      UINT64                    Context1,  OPTIONAL
 | |
|   IN      UINT64                    Context2,  OPTIONAL
 | |
|   IN      UINT64                    NewStack
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Disables the 64-bit paging mode on the CPU.
 | |
| 
 | |
|   Disables the 64-bit paging mode on the CPU and returns to 32-bit protected
 | |
|   mode. This function assumes the current execution mode is 64-paging mode.
 | |
|   This function is only available on x64. After the 64-bit paging mode is
 | |
|   disabled, control is transferred to the function specified by EntryPoint
 | |
|   using the new stack specified by NewStack and passing in the parameters
 | |
|   specified by Context1 and Context2. Context1 and Context2 are optional and
 | |
|   may be 0. The function EntryPoint must never return.
 | |
| 
 | |
|   @param  Cs          The 16-bit selector to load in the CS before EntryPoint
 | |
|                       is called. The descriptor in the GDT that this selector
 | |
|                       references must be setup for 32-bit protected mode.
 | |
|   @param  EntryPoint  The 64-bit virtual address of the function to call with
 | |
|                       the new stack after paging is disabled.
 | |
|   @param  Context1    The 64-bit virtual address of the context to pass into
 | |
|                       the EntryPoint function as the first parameter after
 | |
|                       paging is disabled.
 | |
|   @param  Context2    The 64-bit virtual address of the context to pass into
 | |
|                       the EntryPoint function as the second parameter after
 | |
|                       paging is disabled.
 | |
|   @param  NewStack    The 64-bit virtual address of the new stack to use for
 | |
|                       the EntryPoint function after paging is disabled.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| InternalX86DisablePaging64 (
 | |
|   IN      UINT16                    Cs,
 | |
|   IN      UINT32                    EntryPoint,
 | |
|   IN      UINT32                    Context1,  OPTIONAL
 | |
|   IN      UINT32                    Context2,  OPTIONAL
 | |
|   IN      UINT32                    NewStack
 | |
|   );
 | |
| 
 | |
| 
 | |
| #elif defined (MDE_CPU_IPF)
 | |
| //
 | |
| //
 | |
| // IPF specific functions
 | |
| //
 | |
| 
 | |
| /**
 | |
|   Reads control register DCR.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_DCR.
 | |
| 
 | |
|   @return The 64-bit control register DCR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterDcr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register ITM.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_ITM.
 | |
| 
 | |
|   @return The 64-bit control register ITM.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterItm (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IVA.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IVA.
 | |
| 
 | |
|   @return The 64-bit control register IVA.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIva (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register PTA.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_PTA.
 | |
| 
 | |
|   @return The 64-bit control register PTA.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterPta (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IPSR.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IPSR.
 | |
| 
 | |
|   @return The 64-bit control register IPSR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIpsr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register ISR.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_ISR.
 | |
| 
 | |
|   @return The 64-bit control register ISR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIsr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IIP.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IIP.
 | |
| 
 | |
|   @return The 64-bit control register IIP.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIip (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IFA.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IFA.
 | |
| 
 | |
|   @return The 64-bit control register IFA.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIfa (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register ITIR.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_ITIR.
 | |
| 
 | |
|   @return The 64-bit control register ITIR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterItir (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IIPA.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IIPA.
 | |
| 
 | |
|   @return The 64-bit control register IIPA.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIipa (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IFS.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IFS.
 | |
| 
 | |
|   @return The 64-bit control register IFS.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIfs (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IIM.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IIM.
 | |
| 
 | |
|   @return The 64-bit control register IIM.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIim (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IHA.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IHA.
 | |
| 
 | |
|   @return The 64-bit control register IHA.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIha (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register LID.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_LID.
 | |
| 
 | |
|   @return The 64-bit control register LID.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterLid (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IVR.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IVR.
 | |
| 
 | |
|   @return The 64-bit control register IVR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIvr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register TPR.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_TPR.
 | |
| 
 | |
|   @return The 64-bit control register TPR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterTpr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register EOI.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_EOI.
 | |
| 
 | |
|   @return The 64-bit control register EOI.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterEoi (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IRR0.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IRR0.
 | |
| 
 | |
|   @return The 64-bit control register IRR0.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIrr0 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IRR1.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IRR1.
 | |
| 
 | |
|   @return The 64-bit control register IRR1.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIrr1 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IRR2.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IRR2.
 | |
| 
 | |
|   @return The 64-bit control register IRR2.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIrr2 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register IRR3.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_IRR3.
 | |
| 
 | |
|   @return The 64-bit control register IRR3.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterIrr3 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register ITV.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_ITV.
 | |
| 
 | |
|   @return The 64-bit control register ITV.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterItv (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register PMV.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_PMV.
 | |
| 
 | |
|   @return The 64-bit control register PMV.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterPmv (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register CMCV.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_CMCV.
 | |
| 
 | |
|   @return The 64-bit control register CMCV.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterCmcv (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register LRR0.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_LRR0.
 | |
| 
 | |
|   @return The 64-bit control register LRR0.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterLrr0 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads control register LRR1.
 | |
| 
 | |
|   This is a worker function for AsmReadControlRegister()
 | |
|   when its parameter Index is IPF_CONTROL_REGISTER_LRR1.
 | |
| 
 | |
|   @return The 64-bit control register LRR1.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadControlRegisterLrr1 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register K0.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_K0.
 | |
| 
 | |
|   @return The 64-bit application register K0.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterK0 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register K1.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_K1.
 | |
| 
 | |
|   @return The 64-bit application register K1.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterK1 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register K2.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_K2.
 | |
| 
 | |
|   @return The 64-bit application register K2.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterK2 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register K3.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_K3.
 | |
| 
 | |
|   @return The 64-bit application register K3.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterK3 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register K4.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_K4.
 | |
| 
 | |
|   @return The 64-bit application register K4.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterK4 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register K5.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_K5.
 | |
| 
 | |
|   @return The 64-bit application register K5.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterK5 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register K6.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_K6.
 | |
| 
 | |
|   @return The 64-bit application register K6.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterK6 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register K7.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_K7.
 | |
| 
 | |
|   @return The 64-bit application register K7.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterK7 (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register RSC.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_RSC.
 | |
| 
 | |
|   @return The 64-bit application register RSC.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterRsc (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register BSP.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_BSP.
 | |
| 
 | |
|   @return The 64-bit application register BSP.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterBsp (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register BSPSTORE.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_BSPSTORE.
 | |
| 
 | |
|   @return The 64-bit application register BSPSTORE.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterBspstore (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register RNAT.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_RNAT.
 | |
| 
 | |
|   @return The 64-bit application register RNAT.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterRnat (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register FCR.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_FCR.
 | |
| 
 | |
|   @return The 64-bit application register FCR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterFcr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register EFLAG.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_EFLAG.
 | |
| 
 | |
|   @return The 64-bit application register EFLAG.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterEflag (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register CSD.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_CSD.
 | |
| 
 | |
|   @return The 64-bit application register CSD.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterCsd (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register SSD.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_SSD.
 | |
| 
 | |
|   @return The 64-bit application register SSD.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterSsd (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register CFLG.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_CFLG.
 | |
| 
 | |
|   @return The 64-bit application register CFLG.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterCflg (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register FSR.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_FSR.
 | |
| 
 | |
|   @return The 64-bit application register FSR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterFsr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register FIR.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_FIR.
 | |
| 
 | |
|   @return The 64-bit application register FIR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterFir (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register FDR.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_FDR.
 | |
| 
 | |
|   @return The 64-bit application register FDR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterFdr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register CCV.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_CCV.
 | |
| 
 | |
|   @return The 64-bit application register CCV.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterCcv (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register UNAT.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_UNAT.
 | |
| 
 | |
|   @return The 64-bit application register UNAT.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterUnat (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register FPSR.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_FPSR.
 | |
| 
 | |
|   @return The 64-bit application register FPSR.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterFpsr (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register ITC.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_ITC.
 | |
| 
 | |
|   @return The 64-bit application register ITC.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterItc (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register PFS.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_PFS.
 | |
| 
 | |
|   @return The 64-bit application register PFS.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterPfs (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register LC.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_LC.
 | |
| 
 | |
|   @return The 64-bit application register LC.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterLc (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Reads application register EC.
 | |
| 
 | |
|   This is a worker function for AsmReadApplicationRegister()
 | |
|   when its parameter Index is IPF_APPLICATION_REGISTER_EC.
 | |
| 
 | |
|   @return The 64-bit application register EC.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| AsmReadApplicationRegisterEc (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Transfers control to a function starting with a new stack.
 | |
| 
 | |
|   Transfers control to the function specified by EntryPoint using the new stack
 | |
|   specified by NewStack and passing in the parameters specified by Context1 and
 | |
|   Context2. Context1 and Context2 are optional and may be NULL. The function
 | |
|   EntryPoint must never return.
 | |
| 
 | |
|   If EntryPoint is NULL, then ASSERT().
 | |
|   If NewStack is NULL, then ASSERT().
 | |
| 
 | |
|   @param  EntryPoint  A pointer to function to call with the new stack.
 | |
|   @param  Context1    A pointer to the context to pass into the EntryPoint
 | |
|                       function.
 | |
|   @param  Context2    A pointer to the context to pass into the EntryPoint
 | |
|                       function.
 | |
|   @param  NewStack    A pointer to the new stack to use for the EntryPoint
 | |
|                       function.
 | |
|   @param  NewBsp      A pointer to the new memory location for RSE backing
 | |
|                       store.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| AsmSwitchStackAndBackingStore (
 | |
|   IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,
 | |
|   IN      VOID                      *Context1,  OPTIONAL
 | |
|   IN      VOID                      *Context2,  OPTIONAL
 | |
|   IN      VOID                      *NewStack,
 | |
|   IN      VOID                      *NewBsp
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Internal worker function to invalidate a range of instruction cache lines
 | |
|   in the cache coherency domain of the calling CPU.
 | |
| 
 | |
|   Internal worker function to invalidate the instruction cache lines specified
 | |
|   by Address and Length. If Address is not aligned on a cache line boundary,
 | |
|   then entire instruction cache line containing Address is invalidated. If
 | |
|   Address + Length is not aligned on a cache line boundary, then the entire
 | |
|   instruction cache line containing Address + Length -1 is invalidated. This
 | |
|   function may choose to invalidate the entire instruction cache if that is more
 | |
|   efficient than invalidating the specified range. If Length is 0, the no instruction
 | |
|   cache lines are invalidated. Address is returned.
 | |
|   This function is only available on IPF.
 | |
| 
 | |
|   @param  Address The base address of the instruction cache lines to
 | |
|                   invalidate. If the CPU is in a physical addressing mode, then
 | |
|                   Address is a physical address. If the CPU is in a virtual
 | |
|                   addressing mode, then Address is a virtual address.
 | |
| 
 | |
|   @param  Length  The number of bytes to invalidate from the instruction cache.
 | |
| 
 | |
|   @return Address
 | |
| 
 | |
| **/
 | |
| VOID *
 | |
| EFIAPI
 | |
| InternalFlushCacheRange (
 | |
|   IN      VOID                      *Address,
 | |
|   IN      UINTN                     Length
 | |
|   );
 | |
| 
 | |
| #else
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif
 |