Added to support X64 port (with SV5 ABI). May be able to remove after we port everything, but Sec, to EFI X64 ABI.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10683 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
		
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/ARShiftU64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/ARShiftU64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Shifts a 64-bit integer right between 0 and 63 bits. The high bits are filled
 | 
			
		||||
  with the 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.
 | 
			
		||||
 | 
			
		||||
  If Count is greater than 63, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 64-bit operand to shift right.
 | 
			
		||||
  @param  Count   The number of bits to shift right.
 | 
			
		||||
 | 
			
		||||
  @return Operand >> Count
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
ARShiftU64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     Count
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Count < 64);
 | 
			
		||||
  return InternalMathARShiftU64 (Operand, Count);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1655
									
								
								UnixPkg/Library/UnixBaseLib/BaseLibInternals.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1655
									
								
								UnixPkg/Library/UnixBaseLib/BaseLibInternals.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										868
									
								
								UnixPkg/Library/UnixBaseLib/BitField.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										868
									
								
								UnixPkg/Library/UnixBaseLib/BitField.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,868 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Bit field functions of 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
InternalBaseLibBitFieldReadUint (
 | 
			
		||||
  IN      UINTN                     Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ~((UINTN)-2 << EndBit) is a mask in which bit[0] thru bit[EndBit]
 | 
			
		||||
  // are 1's while bit[EndBit + 1] thru the most significant bit are 0's.
 | 
			
		||||
  //
 | 
			
		||||
  return (Operand & ~((UINTN)-2 << EndBit)) >> StartBit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
InternalBaseLibBitFieldOrUint (
 | 
			
		||||
  IN      UINTN                     Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINTN                     OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ~((UINTN)-2 << EndBit) is a mask in which bit[0] thru bit[EndBit]
 | 
			
		||||
  // are 1's while bit[EndBit + 1] thru the most significant bit are 0's.
 | 
			
		||||
  //
 | 
			
		||||
  return Operand | ((OrData << StartBit) & ~((UINTN) -2 << EndBit));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
InternalBaseLibBitFieldAndUint (
 | 
			
		||||
  IN      UINTN                     Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINTN                     AndData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ~((UINTN)-2 << EndBit) is a mask in which bit[0] thru bit[EndBit]
 | 
			
		||||
  // are 1's while bit[EndBit + 1] thru the most significant bit are 0's.
 | 
			
		||||
  //
 | 
			
		||||
  return Operand & ~((~AndData << StartBit) & ~((UINTN)-2 << EndBit));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns a bit field from an 8-bit value.
 | 
			
		||||
 | 
			
		||||
  Returns the bitfield specified by the StartBit and the EndBit from Operand.
 | 
			
		||||
 | 
			
		||||
  If 8-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
 | 
			
		||||
  @return The bit field read.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT8
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldRead8 (
 | 
			
		||||
  IN      UINT8                     Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 8);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT8)InternalBaseLibBitFieldReadUint (Operand, StartBit, EndBit);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Writes a bit field to an 8-bit value, and returns the result.
 | 
			
		||||
 | 
			
		||||
  Writes Value to the bit field specified by the StartBit and the EndBit in
 | 
			
		||||
  Operand. All other bits in Operand are preserved. The new 8-bit value is
 | 
			
		||||
  returned.
 | 
			
		||||
 | 
			
		||||
  If 8-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  Value     The new value of the bit field.
 | 
			
		||||
 | 
			
		||||
  @return The new 8-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT8
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldWrite8 (
 | 
			
		||||
  IN      UINT8                     Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT8                     Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 8);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return BitFieldAndThenOr8 (Operand, StartBit, EndBit, 0, Value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from an 8-bit value, 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 OrData. All other bits in
 | 
			
		||||
  Operand are preserved. The new 8-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 8-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  OrData    The value to OR with the read value from the value.
 | 
			
		||||
 | 
			
		||||
  @return The new 8-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT8
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldOr8 (
 | 
			
		||||
  IN      UINT8                     Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT8                     OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 8);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT8)InternalBaseLibBitFieldOrUint (Operand, StartBit, EndBit, OrData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from an 8-bit value, 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 8-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 8-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  AndData   The value to AND with the read value from the value.
 | 
			
		||||
 | 
			
		||||
  @return The new 8-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT8
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldAnd8 (
 | 
			
		||||
  IN      UINT8                     Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT8                     AndData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 8);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT8)InternalBaseLibBitFieldAndUint (Operand, StartBit, EndBit, AndData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from an 8-bit value, performs a bitwise AND followed by a
 | 
			
		||||
  bitwise OR, 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, followed by a bitwise 
 | 
			
		||||
  OR with value specified by OrData. All other bits in Operand are
 | 
			
		||||
  preserved. The new 8-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 8-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 7, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..7.
 | 
			
		||||
  @param  AndData   The value to AND with the read value from the value.
 | 
			
		||||
  @param  OrData    The value to OR with the result of the AND operation.
 | 
			
		||||
 | 
			
		||||
  @return The new 8-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT8
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldAndThenOr8 (
 | 
			
		||||
  IN      UINT8                     Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT8                     AndData,
 | 
			
		||||
  IN      UINT8                     OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 8);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return BitFieldOr8 (
 | 
			
		||||
           BitFieldAnd8 (Operand, StartBit, EndBit, AndData),
 | 
			
		||||
           StartBit,
 | 
			
		||||
           EndBit,
 | 
			
		||||
           OrData
 | 
			
		||||
           );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns a bit field from a 16-bit value.
 | 
			
		||||
 | 
			
		||||
  Returns the bitfield specified by the StartBit and the EndBit from Operand.
 | 
			
		||||
 | 
			
		||||
  If 16-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
 | 
			
		||||
  @return The bit field read.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldRead16 (
 | 
			
		||||
  IN      UINT16                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 16);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT16)InternalBaseLibBitFieldReadUint (Operand, StartBit, EndBit);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Writes a bit field to a 16-bit value, and returns the result.
 | 
			
		||||
 | 
			
		||||
  Writes Value to the bit field specified by the StartBit and the EndBit in
 | 
			
		||||
  Operand. All other bits in Operand are preserved. The new 16-bit value is
 | 
			
		||||
  returned.
 | 
			
		||||
 | 
			
		||||
  If 16-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  Value     The new value of the bit field.
 | 
			
		||||
 | 
			
		||||
  @return The new 16-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldWrite16 (
 | 
			
		||||
  IN      UINT16                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT16                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 16);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return BitFieldAndThenOr16 (Operand, StartBit, EndBit, 0, Value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 16-bit value, 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 OrData. All other bits in
 | 
			
		||||
  Operand are preserved. The new 16-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 16-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  OrData    The value to OR with the read value from the value.
 | 
			
		||||
 | 
			
		||||
  @return The new 16-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldOr16 (
 | 
			
		||||
  IN      UINT16                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT16                    OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 16);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT16)InternalBaseLibBitFieldOrUint (Operand, StartBit, EndBit, OrData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 16-bit value, 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 16-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 16-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  AndData   The value to AND with the read value from the value.
 | 
			
		||||
 | 
			
		||||
  @return The new 16-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldAnd16 (
 | 
			
		||||
  IN      UINT16                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT16                    AndData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 16);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT16)InternalBaseLibBitFieldAndUint (Operand, StartBit, EndBit, AndData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 16-bit value, performs a bitwise AND followed by a
 | 
			
		||||
  bitwise OR, 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, followed by a bitwise 
 | 
			
		||||
  OR with value specified by OrData. All other bits in Operand are
 | 
			
		||||
  preserved. The new 16-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 16-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 15, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..15.
 | 
			
		||||
  @param  AndData   The value to AND with the read value from the value.
 | 
			
		||||
  @param  OrData    The value to OR with the result of the AND operation.
 | 
			
		||||
 | 
			
		||||
  @return The new 16-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldAndThenOr16 (
 | 
			
		||||
  IN      UINT16                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT16                    AndData,
 | 
			
		||||
  IN      UINT16                    OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 16);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return BitFieldOr16 (
 | 
			
		||||
           BitFieldAnd16 (Operand, StartBit, EndBit, AndData),
 | 
			
		||||
           StartBit,
 | 
			
		||||
           EndBit,
 | 
			
		||||
           OrData
 | 
			
		||||
           );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns a bit field from a 32-bit value.
 | 
			
		||||
 | 
			
		||||
  Returns the bitfield specified by the StartBit and the EndBit from Operand.
 | 
			
		||||
 | 
			
		||||
  If 32-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
 | 
			
		||||
  @return The bit field read.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldRead32 (
 | 
			
		||||
  IN      UINT32                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 32);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT32)InternalBaseLibBitFieldReadUint (Operand, StartBit, EndBit);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Writes a bit field to a 32-bit value, and returns the result.
 | 
			
		||||
 | 
			
		||||
  Writes Value to the bit field specified by the StartBit and the EndBit in
 | 
			
		||||
  Operand. All other bits in Operand are preserved. The new 32-bit value is
 | 
			
		||||
  returned.
 | 
			
		||||
 | 
			
		||||
  If 32-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  Value     The new value of the bit field.
 | 
			
		||||
 | 
			
		||||
  @return The new 32-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldWrite32 (
 | 
			
		||||
  IN      UINT32                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT32                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 32);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return BitFieldAndThenOr32 (Operand, StartBit, EndBit, 0, Value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 32-bit value, 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 OrData. All other bits in
 | 
			
		||||
  Operand are preserved. The new 32-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 32-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  OrData    The value to OR with the read value from the value.
 | 
			
		||||
 | 
			
		||||
  @return The new 32-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldOr32 (
 | 
			
		||||
  IN      UINT32                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT32                    OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 32);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT32)InternalBaseLibBitFieldOrUint (Operand, StartBit, EndBit, OrData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 32-bit value, 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 32-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 32-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  AndData   The value to AND with the read value from the value.
 | 
			
		||||
 | 
			
		||||
  @return The new 32-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldAnd32 (
 | 
			
		||||
  IN      UINT32                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT32                    AndData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 32);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return (UINT32)InternalBaseLibBitFieldAndUint (Operand, StartBit, EndBit, AndData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 32-bit value, performs a bitwise AND followed by a
 | 
			
		||||
  bitwise OR, 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, followed by a bitwise 
 | 
			
		||||
  OR with value specified by OrData. All other bits in Operand are
 | 
			
		||||
  preserved. The new 32-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 32-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 31, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..31.
 | 
			
		||||
  @param  AndData   The value to AND with the read value from the value.
 | 
			
		||||
  @param  OrData    The value to OR with the result of the AND operation.
 | 
			
		||||
 | 
			
		||||
  @return The new 32-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldAndThenOr32 (
 | 
			
		||||
  IN      UINT32                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT32                    AndData,
 | 
			
		||||
  IN      UINT32                    OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 32);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return BitFieldOr32 (
 | 
			
		||||
           BitFieldAnd32 (Operand, StartBit, EndBit, AndData),
 | 
			
		||||
           StartBit,
 | 
			
		||||
           EndBit,
 | 
			
		||||
           OrData
 | 
			
		||||
           );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns a bit field from a 64-bit value.
 | 
			
		||||
 | 
			
		||||
  Returns the bitfield specified by the StartBit and the EndBit from Operand.
 | 
			
		||||
 | 
			
		||||
  If 64-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
 | 
			
		||||
  @return The bit field read.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldRead64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 64);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return RShiftU64 (Operand & ~LShiftU64 ((UINT64)-2, EndBit), StartBit);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Writes a bit field to a 64-bit value, and returns the result.
 | 
			
		||||
 | 
			
		||||
  Writes Value to the bit field specified by the StartBit and the EndBit in
 | 
			
		||||
  Operand. All other bits in Operand are preserved. The new 64-bit value is
 | 
			
		||||
  returned.
 | 
			
		||||
 | 
			
		||||
  If 64-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  Value     The new value of the bit field.
 | 
			
		||||
 | 
			
		||||
  @return The new 64-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldWrite64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT64                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 64);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return BitFieldAndThenOr64 (Operand, StartBit, EndBit, 0, Value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 64-bit value, 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 OrData. All other bits in
 | 
			
		||||
  Operand are preserved. The new 64-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 64-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  OrData    The value to OR with the read value from the value
 | 
			
		||||
 | 
			
		||||
  @return The new 64-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldOr64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT64                    OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT64  Value1;
 | 
			
		||||
  UINT64  Value2;
 | 
			
		||||
 | 
			
		||||
  ASSERT (EndBit < 64);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
 | 
			
		||||
  Value1 = LShiftU64 (OrData, StartBit);
 | 
			
		||||
  Value2 = LShiftU64 ((UINT64) - 2, EndBit);
 | 
			
		||||
 | 
			
		||||
  return Operand | (Value1 & ~Value2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 64-bit value, 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 64-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 64-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  AndData   The value to AND with the read value from the value.
 | 
			
		||||
 | 
			
		||||
  @return The new 64-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldAnd64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT64                    AndData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT64  Value1;
 | 
			
		||||
  UINT64  Value2;
 | 
			
		||||
  
 | 
			
		||||
  ASSERT (EndBit < 64);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
 | 
			
		||||
  Value1 = LShiftU64 (~AndData, StartBit);
 | 
			
		||||
  Value2 = LShiftU64 ((UINT64)-2, EndBit);
 | 
			
		||||
 | 
			
		||||
  return Operand & ~(Value1 & ~Value2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a bit field from a 64-bit value, performs a bitwise AND followed by a
 | 
			
		||||
  bitwise OR, 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, followed by a bitwise 
 | 
			
		||||
  OR with value specified by OrData. All other bits in Operand are
 | 
			
		||||
  preserved. The new 64-bit value is returned.
 | 
			
		||||
 | 
			
		||||
  If 64-bit operations are not supported, then ASSERT().
 | 
			
		||||
  If StartBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is greater than 63, then ASSERT().
 | 
			
		||||
  If EndBit is less than StartBit, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand   Operand on which to perform the bitfield operation.
 | 
			
		||||
  @param  StartBit  The ordinal of the least significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  EndBit    The ordinal of the most significant bit in the bit field.
 | 
			
		||||
                    Range 0..63.
 | 
			
		||||
  @param  AndData   The value to AND with the read value from the value.
 | 
			
		||||
  @param  OrData    The value to OR with the result of the AND operation.
 | 
			
		||||
 | 
			
		||||
  @return The new 64-bit value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
BitFieldAndThenOr64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     StartBit,
 | 
			
		||||
  IN      UINTN                     EndBit,
 | 
			
		||||
  IN      UINT64                    AndData,
 | 
			
		||||
  IN      UINT64                    OrData
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (EndBit < 64);
 | 
			
		||||
  ASSERT (StartBit <= EndBit);
 | 
			
		||||
  return BitFieldOr64 (
 | 
			
		||||
           BitFieldAnd64 (Operand, StartBit, EndBit, AndData),
 | 
			
		||||
           StartBit,
 | 
			
		||||
           EndBit,
 | 
			
		||||
           OrData
 | 
			
		||||
           );
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										337
									
								
								UnixPkg/Library/UnixBaseLib/CheckSum.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										337
									
								
								UnixPkg/Library/UnixBaseLib/CheckSum.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,337 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Utility functions to generate checksum based on 2's complement
 | 
			
		||||
  algorithm.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2007 - 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the sum of all elements in a buffer in unit of UINT8.
 | 
			
		||||
  During calculation, the carry bits are dropped.
 | 
			
		||||
 | 
			
		||||
  This function calculates the sum of all elements in a buffer
 | 
			
		||||
  in unit of UINT8. The carry bits in result of addition are dropped.
 | 
			
		||||
  The result is returned as UINT8. If Length is Zero, then Zero is
 | 
			
		||||
  returned.
 | 
			
		||||
 | 
			
		||||
  If Buffer is NULL, then ASSERT().
 | 
			
		||||
  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer      The pointer to the buffer to carry out the sum operation.
 | 
			
		||||
  @param  Length      The size, in bytes, of Buffer.
 | 
			
		||||
 | 
			
		||||
  @return Sum         The sum of Buffer with carry bits dropped during additions.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT8
 | 
			
		||||
EFIAPI
 | 
			
		||||
CalculateSum8 (
 | 
			
		||||
  IN      CONST UINT8              *Buffer,
 | 
			
		||||
  IN      UINTN                     Length
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT8     Sum;
 | 
			
		||||
  UINTN     Count;
 | 
			
		||||
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
  ASSERT (Length <= (MAX_ADDRESS - ((UINTN) Buffer) + 1));
 | 
			
		||||
 | 
			
		||||
  for (Sum = 0, Count = 0; Count < Length; Count++) {
 | 
			
		||||
    Sum = (UINT8) (Sum + *(Buffer + Count));
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return Sum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the two's complement checksum of all elements in a buffer
 | 
			
		||||
  of 8-bit values.
 | 
			
		||||
 | 
			
		||||
  This function first calculates the sum of the 8-bit values in the
 | 
			
		||||
  buffer specified by Buffer and Length.  The carry bits in the result
 | 
			
		||||
  of addition are dropped. Then, the two's complement of the sum is
 | 
			
		||||
  returned.  If Length is 0, then 0 is returned.
 | 
			
		||||
 | 
			
		||||
  If Buffer is NULL, then ASSERT().
 | 
			
		||||
  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer      The pointer to the buffer to carry out the checksum operation.
 | 
			
		||||
  @param  Length      The size, in bytes, of Buffer.
 | 
			
		||||
 | 
			
		||||
  @return Checksum    The 2's complement checksum of Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT8
 | 
			
		||||
EFIAPI
 | 
			
		||||
CalculateCheckSum8 (
 | 
			
		||||
  IN      CONST UINT8              *Buffer,
 | 
			
		||||
  IN      UINTN                     Length
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT8     CheckSum;
 | 
			
		||||
 | 
			
		||||
  CheckSum = CalculateSum8 (Buffer, Length);
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Return the checksum based on 2's complement.
 | 
			
		||||
  //
 | 
			
		||||
  return (UINT8) (0x100 - CheckSum);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the sum of all elements in a buffer of 16-bit values.  During
 | 
			
		||||
  calculation, the carry bits are dropped.
 | 
			
		||||
 | 
			
		||||
  This function calculates the sum of the 16-bit values in the buffer
 | 
			
		||||
  specified by Buffer and Length. The carry bits in result of addition are dropped.
 | 
			
		||||
  The 16-bit result is returned.  If Length is 0, then 0 is returned.
 | 
			
		||||
 | 
			
		||||
  If Buffer is NULL, then ASSERT().
 | 
			
		||||
  If Buffer is not aligned on a 16-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is not aligned on a 16-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer      The pointer to the buffer to carry out the sum operation.
 | 
			
		||||
  @param  Length      The size, in bytes, of Buffer.
 | 
			
		||||
 | 
			
		||||
  @return Sum         The sum of Buffer with carry bits dropped during additions.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
CalculateSum16 (
 | 
			
		||||
  IN      CONST UINT16             *Buffer,
 | 
			
		||||
  IN      UINTN                     Length
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT16    Sum;
 | 
			
		||||
  UINTN     Count;
 | 
			
		||||
  UINTN     Total;
 | 
			
		||||
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
  ASSERT (((UINTN) Buffer & 0x1) == 0);
 | 
			
		||||
  ASSERT ((Length & 0x1) == 0);
 | 
			
		||||
  ASSERT (Length <= (MAX_ADDRESS - ((UINTN) Buffer) + 1));
 | 
			
		||||
 | 
			
		||||
  Total = Length / sizeof (*Buffer);
 | 
			
		||||
  for (Sum = 0, Count = 0; Count < Total; Count++) {
 | 
			
		||||
    Sum = (UINT16) (Sum + *(Buffer + Count));
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return Sum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the two's complement checksum of all elements in a buffer of
 | 
			
		||||
  16-bit values.
 | 
			
		||||
 | 
			
		||||
  This function first calculates the sum of the 16-bit values in the buffer
 | 
			
		||||
  specified by Buffer and Length.  The carry bits in the result of addition
 | 
			
		||||
  are dropped. Then, the two's complement of the sum is returned.  If Length
 | 
			
		||||
  is 0, then 0 is returned.
 | 
			
		||||
 | 
			
		||||
  If Buffer is NULL, then ASSERT().
 | 
			
		||||
  If Buffer is not aligned on a 16-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is not aligned on a 16-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer      The pointer to the buffer to carry out the checksum operation.
 | 
			
		||||
  @param  Length      The size, in bytes, of Buffer.
 | 
			
		||||
 | 
			
		||||
  @return Checksum    The 2's complement checksum of Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
CalculateCheckSum16 (
 | 
			
		||||
  IN      CONST UINT16             *Buffer,
 | 
			
		||||
  IN      UINTN                     Length
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT16     CheckSum;
 | 
			
		||||
 | 
			
		||||
  CheckSum = CalculateSum16 (Buffer, Length);
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Return the checksum based on 2's complement.
 | 
			
		||||
  //
 | 
			
		||||
  return (UINT16) (0x10000 - CheckSum);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the sum of all elements in a buffer of 32-bit values. During
 | 
			
		||||
  calculation, the carry bits are dropped.
 | 
			
		||||
 | 
			
		||||
  This function calculates the sum of the 32-bit values in the buffer
 | 
			
		||||
  specified by Buffer and Length. The carry bits in result of addition are dropped.
 | 
			
		||||
  The 32-bit result is returned. If Length is 0, then 0 is returned.
 | 
			
		||||
 | 
			
		||||
  If Buffer is NULL, then ASSERT().
 | 
			
		||||
  If Buffer is not aligned on a 32-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is not aligned on a 32-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer      The pointer to the buffer to carry out the sum operation.
 | 
			
		||||
  @param  Length      The size, in bytes, of Buffer.
 | 
			
		||||
 | 
			
		||||
  @return Sum         The sum of Buffer with carry bits dropped during additions.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
CalculateSum32 (
 | 
			
		||||
  IN      CONST UINT32             *Buffer,
 | 
			
		||||
  IN      UINTN                     Length
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT32    Sum;
 | 
			
		||||
  UINTN     Count;
 | 
			
		||||
  UINTN     Total;
 | 
			
		||||
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
  ASSERT (((UINTN) Buffer & 0x3) == 0);
 | 
			
		||||
  ASSERT ((Length & 0x3) == 0);
 | 
			
		||||
  ASSERT (Length <= (MAX_ADDRESS - ((UINTN) Buffer) + 1));
 | 
			
		||||
 | 
			
		||||
  Total = Length / sizeof (*Buffer);
 | 
			
		||||
  for (Sum = 0, Count = 0; Count < Total; Count++) {
 | 
			
		||||
    Sum = Sum + *(Buffer + Count);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return Sum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the two's complement checksum of all elements in a buffer of
 | 
			
		||||
  32-bit values.
 | 
			
		||||
 | 
			
		||||
  This function first calculates the sum of the 32-bit values in the buffer
 | 
			
		||||
  specified by Buffer and Length.  The carry bits in the result of addition
 | 
			
		||||
  are dropped. Then, the two's complement of the sum is returned.  If Length
 | 
			
		||||
  is 0, then 0 is returned.
 | 
			
		||||
 | 
			
		||||
  If Buffer is NULL, then ASSERT().
 | 
			
		||||
  If Buffer is not aligned on a 32-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is not aligned on a 32-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer      The pointer to the buffer to carry out the checksum operation.
 | 
			
		||||
  @param  Length      The size, in bytes, of Buffer.
 | 
			
		||||
 | 
			
		||||
  @return Checksum    The 2's complement checksum of Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
CalculateCheckSum32 (
 | 
			
		||||
  IN      CONST UINT32             *Buffer,
 | 
			
		||||
  IN      UINTN                     Length
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT32     CheckSum;
 | 
			
		||||
 | 
			
		||||
  CheckSum = CalculateSum32 (Buffer, Length);
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Return the checksum based on 2's complement.
 | 
			
		||||
  //
 | 
			
		||||
  return (UINT32) ((UINT32)(-1) - CheckSum + 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the sum of all elements in a buffer of 64-bit values.  During
 | 
			
		||||
  calculation, the carry bits are dropped.
 | 
			
		||||
 | 
			
		||||
  This function calculates the sum of the 64-bit values in the buffer
 | 
			
		||||
  specified by Buffer and Length. The carry bits in result of addition are dropped.
 | 
			
		||||
  The 64-bit result is returned.  If Length is 0, then 0 is returned.
 | 
			
		||||
 | 
			
		||||
  If Buffer is NULL, then ASSERT().
 | 
			
		||||
  If Buffer is not aligned on a 64-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is not aligned on a 64-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer      The pointer to the buffer to carry out the sum operation.
 | 
			
		||||
  @param  Length      The size, in bytes, of Buffer.
 | 
			
		||||
 | 
			
		||||
  @return Sum         The sum of Buffer with carry bits dropped during additions.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
CalculateSum64 (
 | 
			
		||||
  IN      CONST UINT64             *Buffer,
 | 
			
		||||
  IN      UINTN                     Length
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT64    Sum;
 | 
			
		||||
  UINTN     Count;
 | 
			
		||||
  UINTN     Total;
 | 
			
		||||
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
  ASSERT (((UINTN) Buffer & 0x7) == 0);
 | 
			
		||||
  ASSERT ((Length & 0x7) == 0);
 | 
			
		||||
  ASSERT (Length <= (MAX_ADDRESS - ((UINTN) Buffer) + 1));
 | 
			
		||||
 | 
			
		||||
  Total = Length / sizeof (*Buffer);
 | 
			
		||||
  for (Sum = 0, Count = 0; Count < Total; Count++) {
 | 
			
		||||
    Sum = Sum + *(Buffer + Count);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return Sum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the two's complement checksum of all elements in a buffer of
 | 
			
		||||
  64-bit values.
 | 
			
		||||
 | 
			
		||||
  This function first calculates the sum of the 64-bit values in the buffer
 | 
			
		||||
  specified by Buffer and Length.  The carry bits in the result of addition
 | 
			
		||||
  are dropped. Then, the two's complement of the sum is returned.  If Length
 | 
			
		||||
  is 0, then 0 is returned.
 | 
			
		||||
 | 
			
		||||
  If Buffer is NULL, then ASSERT().
 | 
			
		||||
  If Buffer is not aligned on a 64-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is not aligned on a 64-bit boundary, then ASSERT().
 | 
			
		||||
  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer      The pointer to the buffer to carry out the checksum operation.
 | 
			
		||||
  @param  Length      The size, in bytes, of Buffer.
 | 
			
		||||
 | 
			
		||||
  @return Checksum    The 2's complement checksum of Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
CalculateCheckSum64 (
 | 
			
		||||
  IN      CONST UINT64             *Buffer,
 | 
			
		||||
  IN      UINTN                     Length
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT64     CheckSum;
 | 
			
		||||
 | 
			
		||||
  CheckSum = CalculateSum64 (Buffer, Length);
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Return the checksum based on 2's complement.
 | 
			
		||||
  //
 | 
			
		||||
  return (UINT64) ((UINT64)(-1) - CheckSum + 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										24
									
								
								UnixPkg/Library/UnixBaseLib/ChkStkGcc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								UnixPkg/Library/UnixBaseLib/ChkStkGcc.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Provides hack function for passng GCC build.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Hack function for passing GCC build.
 | 
			
		||||
**/
 | 
			
		||||
VOID 
 | 
			
		||||
__chkstk() 
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										65
									
								
								UnixPkg/Library/UnixBaseLib/Cpu.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								UnixPkg/Library/UnixBaseLib/Cpu.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Base Library CPU Functions for all architectures.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Disables CPU interrupts and returns the interrupt state prior to the disable
 | 
			
		||||
  operation.
 | 
			
		||||
 | 
			
		||||
  @retval TRUE  CPU interrupts were enabled on entry to this call.
 | 
			
		||||
  @retval FALSE CPU interrupts were disabled on entry to this call.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
BOOLEAN
 | 
			
		||||
EFIAPI
 | 
			
		||||
SaveAndDisableInterrupts (
 | 
			
		||||
  VOID
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  BOOLEAN                           InterruptState;
 | 
			
		||||
 | 
			
		||||
  InterruptState = GetInterruptState ();
 | 
			
		||||
  DisableInterrupts ();
 | 
			
		||||
  return InterruptState;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Set the current CPU interrupt state.
 | 
			
		||||
 | 
			
		||||
  Sets the current CPU interrupt state to the state specified by
 | 
			
		||||
  InterruptState. If InterruptState is TRUE, then interrupts are enabled. If
 | 
			
		||||
  InterruptState is FALSE, then interrupts are disabled. InterruptState is
 | 
			
		||||
  returned.
 | 
			
		||||
 | 
			
		||||
  @param  InterruptState  TRUE if interrupts should be enabled. FALSE if
 | 
			
		||||
                          interrupts should be disabled.
 | 
			
		||||
 | 
			
		||||
  @return InterruptState
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
BOOLEAN
 | 
			
		||||
EFIAPI
 | 
			
		||||
SetInterruptState (
 | 
			
		||||
  IN      BOOLEAN                   InterruptState
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  if (InterruptState) {
 | 
			
		||||
    EnableInterrupts ();
 | 
			
		||||
  } else {
 | 
			
		||||
    DisableInterrupts ();
 | 
			
		||||
  }
 | 
			
		||||
  return InterruptState;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/CpuDeadLoop.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/CpuDeadLoop.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Base Library CPU Functions for all architectures.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <Base.h>
 | 
			
		||||
#include <Library/BaseLib.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Executes an infinite loop.
 | 
			
		||||
 | 
			
		||||
  Forces the CPU to execute an infinite loop. A debugger may be used to skip
 | 
			
		||||
  past the loop and the code that follows the loop must execute properly. This
 | 
			
		||||
  implies that the infinite loop must not cause the code that follow it to be
 | 
			
		||||
  optimized away.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
VOID
 | 
			
		||||
EFIAPI
 | 
			
		||||
CpuDeadLoop (
 | 
			
		||||
  VOID
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  volatile UINTN  Index;
 | 
			
		||||
 | 
			
		||||
  for (Index = 0; Index == 0;);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								UnixPkg/Library/UnixBaseLib/DivS64x64Remainder.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								UnixPkg/Library/UnixBaseLib/DivS64x64Remainder.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Divides a 64-bit signed integer by a 64-bit signed integer and generates a
 | 
			
		||||
  64-bit signed result and a 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.
 | 
			
		||||
 | 
			
		||||
  It is the caller's responsibility to not call this function with a Divisor of 0.
 | 
			
		||||
  If Divisor is 0, then the quotient and remainder should be assumed to be 
 | 
			
		||||
  the largest negative integer.
 | 
			
		||||
 | 
			
		||||
  If Divisor is 0, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @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
 | 
			
		||||
DivS64x64Remainder (
 | 
			
		||||
  IN      INT64                     Dividend,
 | 
			
		||||
  IN      INT64                     Divisor,
 | 
			
		||||
  OUT     INT64                     *Remainder  OPTIONAL
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Divisor != 0);
 | 
			
		||||
  return InternalMathDivRemS64x64 (Dividend, Divisor, Remainder);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								UnixPkg/Library/UnixBaseLib/DivU64x32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								UnixPkg/Library/UnixBaseLib/DivU64x32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
  If Divisor is 0, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Dividend  A 64-bit unsigned value.
 | 
			
		||||
  @param  Divisor   A 32-bit unsigned value.
 | 
			
		||||
 | 
			
		||||
  @return Dividend / Divisor
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
DivU64x32 (
 | 
			
		||||
  IN      UINT64                    Dividend,
 | 
			
		||||
  IN      UINT32                    Divisor
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Divisor != 0);
 | 
			
		||||
  return InternalMathDivU64x32 (Dividend, Divisor);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								UnixPkg/Library/UnixBaseLib/DivU64x32Remainder.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								UnixPkg/Library/UnixBaseLib/DivU64x32Remainder.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
  If Divisor is 0, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @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
 | 
			
		||||
DivU64x32Remainder (
 | 
			
		||||
  IN      UINT64                    Dividend,
 | 
			
		||||
  IN      UINT32                    Divisor,
 | 
			
		||||
  OUT     UINT32                    *Remainder  OPTIONAL
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Divisor != 0);
 | 
			
		||||
  return InternalMathDivRemU64x32 (Dividend, Divisor, Remainder);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								UnixPkg/Library/UnixBaseLib/DivU64x64Remainder.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								UnixPkg/Library/UnixBaseLib/DivU64x64Remainder.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
  If Divisor is 0, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @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
 | 
			
		||||
DivU64x64Remainder (
 | 
			
		||||
  IN      UINT64                    Dividend,
 | 
			
		||||
  IN      UINT64                    Divisor,
 | 
			
		||||
  OUT     UINT64                    *Remainder  OPTIONAL
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Divisor != 0);
 | 
			
		||||
  return InternalMathDivRemU64x64 (Dividend, Divisor, Remainder);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										44
									
								
								UnixPkg/Library/UnixBaseLib/GetPowerOfTwo32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								UnixPkg/Library/UnixBaseLib/GetPowerOfTwo32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the value of the highest bit set in a 32-bit value. Equivalent to
 | 
			
		||||
  1 << log2(x).
 | 
			
		||||
 | 
			
		||||
  This function computes the value of the highest bit set in the 32-bit value
 | 
			
		||||
  specified by Operand. If Operand is zero, then zero is returned.
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 32-bit operand to evaluate.
 | 
			
		||||
 | 
			
		||||
  @return 1 << HighBitSet32(Operand)
 | 
			
		||||
  @retval 0 Operand is zero.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
GetPowerOfTwo32 (
 | 
			
		||||
  IN      UINT32                    Operand
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  if (0 == Operand) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 1ul << HighBitSet32 (Operand);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										44
									
								
								UnixPkg/Library/UnixBaseLib/GetPowerOfTwo64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								UnixPkg/Library/UnixBaseLib/GetPowerOfTwo64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the value of the highest bit set in a 64-bit value. Equivalent to
 | 
			
		||||
  1 << log2(x).
 | 
			
		||||
 | 
			
		||||
  This function computes the value of the highest bit set in the 64-bit value
 | 
			
		||||
  specified by Operand. If Operand is zero, then zero is returned.
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 64-bit operand to evaluate.
 | 
			
		||||
 | 
			
		||||
  @return 1 << HighBitSet64(Operand)
 | 
			
		||||
  @retval 0 Operand is zero.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
GetPowerOfTwo64 (
 | 
			
		||||
  IN      UINT64                    Operand
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  if (Operand == 0) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return LShiftU64 (1, HighBitSet64 (Operand));
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								UnixPkg/Library/UnixBaseLib/HighBitSet32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								UnixPkg/Library/UnixBaseLib/HighBitSet32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the bit position of the highest bit set in a 32-bit value. Equivalent
 | 
			
		||||
  to log2(x).
 | 
			
		||||
 | 
			
		||||
  This function computes the bit position of the highest bit set in the 32-bit
 | 
			
		||||
  value specified by Operand. If Operand is zero, then -1 is returned.
 | 
			
		||||
  Otherwise, a value between 0 and 31 is returned.
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 32-bit operand to evaluate.
 | 
			
		||||
 | 
			
		||||
  @retval 0..31  Position of the highest bit set in Operand if found.
 | 
			
		||||
  @retval -1     Operand is zero.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
INTN
 | 
			
		||||
EFIAPI
 | 
			
		||||
HighBitSet32 (
 | 
			
		||||
  IN      UINT32                    Operand
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  INTN                              BitIndex;
 | 
			
		||||
 | 
			
		||||
  if (Operand == 0) {
 | 
			
		||||
    return - 1;
 | 
			
		||||
  }
 | 
			
		||||
  for (BitIndex = 31; (INT32)Operand > 0; BitIndex--, Operand <<= 1);
 | 
			
		||||
  return BitIndex;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										55
									
								
								UnixPkg/Library/UnixBaseLib/HighBitSet64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								UnixPkg/Library/UnixBaseLib/HighBitSet64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the bit position of the highest bit set in a 64-bit value. Equivalent
 | 
			
		||||
  to log2(x).
 | 
			
		||||
 | 
			
		||||
  This function computes the bit position of the highest bit set in the 64-bit
 | 
			
		||||
  value specified by Operand. If Operand is zero, then -1 is returned.
 | 
			
		||||
  Otherwise, a value between 0 and 63 is returned.
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 64-bit operand to evaluate.
 | 
			
		||||
 | 
			
		||||
  @retval 0..63   Position of the highest bit set in Operand if found.
 | 
			
		||||
  @retval -1      Operand is zero.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
INTN
 | 
			
		||||
EFIAPI
 | 
			
		||||
HighBitSet64 (
 | 
			
		||||
  IN      UINT64                    Operand
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  if (Operand == (UINT32)Operand) {
 | 
			
		||||
    //
 | 
			
		||||
    // Operand is just a 32-bit integer
 | 
			
		||||
    //
 | 
			
		||||
    return HighBitSet32 ((UINT32)Operand);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Operand is really a 64-bit integer
 | 
			
		||||
  //
 | 
			
		||||
  if (sizeof (UINTN) == sizeof (UINT32)) {
 | 
			
		||||
    return HighBitSet32 (((UINT32*)&Operand)[1]) + 32;
 | 
			
		||||
  } else {
 | 
			
		||||
    return HighBitSet32 ((UINT32)RShiftU64 (Operand, 32)) + 32;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/LRotU32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/LRotU32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Rotates a 32-bit integer left between 0 and 31 bits, filling the low bits
 | 
			
		||||
  with the high bits that were rotated.
 | 
			
		||||
 | 
			
		||||
  This function rotates the 32-bit value Operand to the left by Count bits. The
 | 
			
		||||
  low Count bits are fill with the high Count bits of Operand. The rotated
 | 
			
		||||
  value is returned.
 | 
			
		||||
 | 
			
		||||
  If Count is greater than 31, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 32-bit operand to rotate left.
 | 
			
		||||
  @param  Count   The number of bits to rotate left.
 | 
			
		||||
 | 
			
		||||
  @return Operand << Count
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
LRotU32 (
 | 
			
		||||
  IN      UINT32                    Operand,
 | 
			
		||||
  IN      UINTN                     Count
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Count < 32);
 | 
			
		||||
  return (Operand << Count) | (Operand >> (32 - Count));
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/LRotU64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/LRotU64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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 fill with the high Count bits of Operand. The rotated
 | 
			
		||||
  value is returned.
 | 
			
		||||
 | 
			
		||||
  If Count is greater than 63, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 64-bit operand to rotate left.
 | 
			
		||||
  @param  Count   The number of bits to rotate left.
 | 
			
		||||
 | 
			
		||||
  @return Operand << Count
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
LRotU64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     Count
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Count < 64);
 | 
			
		||||
  return InternalMathLRotU64 (Operand, Count);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/LShiftU64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/LShiftU64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
  If Count is greater than 63, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 64-bit operand to shift left.
 | 
			
		||||
  @param  Count   The number of bits to shift left.
 | 
			
		||||
 | 
			
		||||
  @return Operand << Count.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
LShiftU64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     Count
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Count < 64);
 | 
			
		||||
  return InternalMathLShiftU64 (Operand, Count);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										550
									
								
								UnixPkg/Library/UnixBaseLib/LinkedList.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										550
									
								
								UnixPkg/Library/UnixBaseLib/LinkedList.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,550 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Linked List Library Functions.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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 PcdVerifyNodeInList is TRUE and DoMembershipCheck is TRUE and Node 
 | 
			
		||||
  is in not a member of List, then return FALSE
 | 
			
		||||
  If PcdMaximumLinkedListLenth is not zero, and List contains more than
 | 
			
		||||
  PcdMaximumLinkedListLenth nodes, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  List              A pointer to a node in a linked list.
 | 
			
		||||
  @param  Node              A pointer to a node in a linked list.
 | 
			
		||||
  @param  VerifyNodeInList  TRUE if a check should be made to see if Node is a 
 | 
			
		||||
                            member of List.  FALSE if no membership test should 
 | 
			
		||||
                            be performed.
 | 
			
		||||
 | 
			
		||||
  @retval   TRUE if PcdVerifyNodeInList is FALSE
 | 
			
		||||
  @retval   TRUE if DoMembershipCheck is FALSE
 | 
			
		||||
  @retval   TRUE if PcdVerifyNodeInList is TRUE and DoMembershipCheck is TRUE 
 | 
			
		||||
            and Node is a member of List.
 | 
			
		||||
  @retval   FALSE if PcdVerifyNodeInList is TRUE and DoMembershipCheck is TRUE 
 | 
			
		||||
            and Node is in not a member of List.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
BOOLEAN
 | 
			
		||||
EFIAPI
 | 
			
		||||
InternalBaseLibIsNodeInList (
 | 
			
		||||
  IN CONST LIST_ENTRY  *List,
 | 
			
		||||
  IN CONST LIST_ENTRY  *Node,
 | 
			
		||||
  IN BOOLEAN           VerifyNodeInList
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINTN             Count;
 | 
			
		||||
  CONST LIST_ENTRY  *Ptr;
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Test the validity of List and Node
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (List != NULL);
 | 
			
		||||
  ASSERT (List->ForwardLink != NULL);
 | 
			
		||||
  ASSERT (List->BackLink != NULL);
 | 
			
		||||
  ASSERT (Node != NULL);
 | 
			
		||||
 | 
			
		||||
  Count = 0;
 | 
			
		||||
  Ptr   = List;
 | 
			
		||||
 | 
			
		||||
  if (FeaturePcdGet (PcdVerifyNodeInList) && VerifyNodeInList) {
 | 
			
		||||
    //
 | 
			
		||||
    // Check to see if Node is a member of List.  
 | 
			
		||||
    // Exit early if the number of nodes in List >= PcdMaximumLinkedListLength
 | 
			
		||||
    //
 | 
			
		||||
    do {
 | 
			
		||||
      Ptr = Ptr->ForwardLink;
 | 
			
		||||
      if (PcdGet32 (PcdMaximumLinkedListLength) > 0) {
 | 
			
		||||
        Count++;
 | 
			
		||||
        //
 | 
			
		||||
        // ASSERT() if the linked list is too long
 | 
			
		||||
        //
 | 
			
		||||
        ASSERT (Count < PcdGet32 (PcdMaximumLinkedListLength));
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Return if the linked list is too long
 | 
			
		||||
        //
 | 
			
		||||
        if (Count >= PcdGet32 (PcdMaximumLinkedListLength)) {
 | 
			
		||||
          return (BOOLEAN)(Ptr == Node);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } while ((Ptr != List) && (Ptr != Node)); 
 | 
			
		||||
 | 
			
		||||
    if (Ptr != Node) {
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (PcdGet32 (PcdMaximumLinkedListLength) > 0) {
 | 
			
		||||
    //
 | 
			
		||||
    // Count the total number of nodes in List.
 | 
			
		||||
    // Exit early if the number of nodes in List >= PcdMaximumLinkedListLength
 | 
			
		||||
    //
 | 
			
		||||
    do {
 | 
			
		||||
      Ptr = Ptr->ForwardLink;
 | 
			
		||||
      Count++;
 | 
			
		||||
    } while ((Ptr != List) && (Count < PcdGet32 (PcdMaximumLinkedListLength)));
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // ASSERT() if the linked list is too long
 | 
			
		||||
    //
 | 
			
		||||
    ASSERT (Count < PcdGet32 (PcdMaximumLinkedListLength));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Initializes the head node of a doubly-linked list, and returns the pointer to
 | 
			
		||||
  the head node of the doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  Initializes the forward and backward links of a new linked list. After
 | 
			
		||||
  initializing a linked list with this function, the other linked list
 | 
			
		||||
  functions may be used to add and remove nodes from the linked list. It is up
 | 
			
		||||
  to the caller of this function to allocate the memory for ListHead.
 | 
			
		||||
 | 
			
		||||
  If ListHead is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  ListHead  A pointer to the head node of a new doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  @return ListHead
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
LIST_ENTRY *
 | 
			
		||||
EFIAPI
 | 
			
		||||
InitializeListHead (
 | 
			
		||||
  IN OUT  LIST_ENTRY                *ListHead
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (ListHead != NULL);
 | 
			
		||||
 | 
			
		||||
  ListHead->ForwardLink = ListHead;
 | 
			
		||||
  ListHead->BackLink = ListHead;
 | 
			
		||||
  return ListHead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Adds a node to the beginning of a doubly-linked list, and returns the pointer
 | 
			
		||||
  to the head node of the doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  Adds the node Entry at the beginning of the doubly-linked list denoted by
 | 
			
		||||
  ListHead, and returns ListHead.
 | 
			
		||||
 | 
			
		||||
  If ListHead is NULL, then ASSERT().
 | 
			
		||||
  If Entry is NULL, then ASSERT().
 | 
			
		||||
  If ListHead was not initialized with INTIALIZE_LIST_HEAD_VARIABLE() or
 | 
			
		||||
  InitializeListHead(), 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  ListHead  A pointer to the head node of a doubly-linked list.
 | 
			
		||||
  @param  Entry     A pointer to a node that is to be inserted at the beginning
 | 
			
		||||
                    of a doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  @return ListHead
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
LIST_ENTRY *
 | 
			
		||||
EFIAPI
 | 
			
		||||
InsertHeadList (
 | 
			
		||||
  IN OUT  LIST_ENTRY                *ListHead,
 | 
			
		||||
  IN OUT  LIST_ENTRY                *Entry
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT List not too long and Entry is not one of the nodes of List
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (ListHead, Entry, FALSE));
 | 
			
		||||
  
 | 
			
		||||
  Entry->ForwardLink = ListHead->ForwardLink;
 | 
			
		||||
  Entry->BackLink = ListHead;
 | 
			
		||||
  Entry->ForwardLink->BackLink = Entry;
 | 
			
		||||
  ListHead->ForwardLink = Entry;
 | 
			
		||||
  return ListHead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Adds a node to the end of a doubly-linked list, and returns the pointer to
 | 
			
		||||
  the head node of the doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  Adds the node Entry to the end of the doubly-linked list denoted by ListHead,
 | 
			
		||||
  and returns ListHead.
 | 
			
		||||
 | 
			
		||||
  If ListHead is NULL, then ASSERT().
 | 
			
		||||
  If Entry is NULL, then ASSERT().
 | 
			
		||||
  If ListHead was not initialized with INTIALIZE_LIST_HEAD_VARIABLE() or 
 | 
			
		||||
  InitializeListHead(), 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  ListHead  A pointer to the head node of a doubly-linked list.
 | 
			
		||||
  @param  Entry     A pointer to a node that is to be added at the end of the
 | 
			
		||||
                    doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  @return ListHead
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
LIST_ENTRY *
 | 
			
		||||
EFIAPI
 | 
			
		||||
InsertTailList (
 | 
			
		||||
  IN OUT  LIST_ENTRY                *ListHead,
 | 
			
		||||
  IN OUT  LIST_ENTRY                *Entry
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT List not too long and Entry is not one of the nodes of List
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (ListHead, Entry, FALSE));
 | 
			
		||||
  
 | 
			
		||||
  Entry->ForwardLink = ListHead;
 | 
			
		||||
  Entry->BackLink = ListHead->BackLink;
 | 
			
		||||
  Entry->BackLink->ForwardLink = Entry;
 | 
			
		||||
  ListHead->BackLink = Entry;
 | 
			
		||||
  return ListHead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Retrieves the first node of a doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  Returns the first node of a doubly-linked list.  List must have been 
 | 
			
		||||
  initialized with INTIALIZE_LIST_HEAD_VARIABLE() or InitializeListHead().
 | 
			
		||||
  If List is empty, then List is returned.
 | 
			
		||||
 | 
			
		||||
  If List is NULL, then ASSERT().
 | 
			
		||||
  If List was not initialized with INTIALIZE_LIST_HEAD_VARIABLE() or 
 | 
			
		||||
  InitializeListHead(), then ASSERT().
 | 
			
		||||
  If PcdMaximumLinkedListLenth is not zero, and the number of nodes
 | 
			
		||||
  in List, including the List node, is greater than or equal to
 | 
			
		||||
  PcdMaximumLinkedListLength, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  List  A pointer to the head node of a doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  @return The first node of a doubly-linked list.
 | 
			
		||||
  @retval NULL  The list is empty.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
LIST_ENTRY *
 | 
			
		||||
EFIAPI
 | 
			
		||||
GetFirstNode (
 | 
			
		||||
  IN      CONST LIST_ENTRY          *List
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT List not too long
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (List, List, FALSE));
 | 
			
		||||
 | 
			
		||||
  return List->ForwardLink;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Retrieves the next node of a doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  Returns the node of a doubly-linked list that follows Node.  
 | 
			
		||||
  List must have been initialized with INTIALIZE_LIST_HEAD_VARIABLE()
 | 
			
		||||
  or InitializeListHead().  If List is empty, then List is returned.
 | 
			
		||||
 | 
			
		||||
  If List is NULL, then ASSERT().
 | 
			
		||||
  If Node is NULL, then ASSERT().
 | 
			
		||||
  If List was not initialized with INTIALIZE_LIST_HEAD_VARIABLE() or 
 | 
			
		||||
  InitializeListHead(), then ASSERT().
 | 
			
		||||
  If PcdMaximumLinkedListLenth is not zero, and List contains more than
 | 
			
		||||
  PcdMaximumLinkedListLenth nodes, then ASSERT().
 | 
			
		||||
  If PcdVerifyNodeInList is TRUE and Node is not a node in List, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  List  A pointer to the head node of a doubly-linked list.
 | 
			
		||||
  @param  Node  A pointer to a node in the doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  @return A pointer to the next node if one exists. Otherwise List is returned.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
LIST_ENTRY *
 | 
			
		||||
EFIAPI
 | 
			
		||||
GetNextNode (
 | 
			
		||||
  IN      CONST LIST_ENTRY          *List,
 | 
			
		||||
  IN      CONST LIST_ENTRY          *Node
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT List not too long and Node is one of the nodes of List
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (List, Node, TRUE));
 | 
			
		||||
 | 
			
		||||
  return Node->ForwardLink;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Retrieves the previous node of a doubly-linked list.
 | 
			
		||||
 
 | 
			
		||||
  Returns the node of a doubly-linked list that precedes Node.  
 | 
			
		||||
  List must have been initialized with INTIALIZE_LIST_HEAD_VARIABLE()
 | 
			
		||||
  or InitializeListHead().  If List is empty, then List is returned.
 | 
			
		||||
 
 | 
			
		||||
  If List is NULL, then ASSERT().
 | 
			
		||||
  If Node is NULL, then ASSERT().
 | 
			
		||||
  If List was not initialized with INTIALIZE_LIST_HEAD_VARIABLE() or 
 | 
			
		||||
  InitializeListHead(), then ASSERT().
 | 
			
		||||
  If PcdMaximumLinkedListLenth is not zero, and List contains more than
 | 
			
		||||
  PcdMaximumLinkedListLenth nodes, then ASSERT().
 | 
			
		||||
  If PcdVerifyNodeInList is TRUE and Node is not a node in List, then ASSERT().
 | 
			
		||||
 
 | 
			
		||||
  @param  List  A pointer to the head node of a doubly-linked list.
 | 
			
		||||
  @param  Node  A pointer to a node in the doubly-linked list.
 | 
			
		||||
 
 | 
			
		||||
  @return A pointer to the previous node if one exists. Otherwise List is returned.
 | 
			
		||||
 
 | 
			
		||||
**/
 | 
			
		||||
LIST_ENTRY *
 | 
			
		||||
EFIAPI
 | 
			
		||||
GetPreviousNode (
 | 
			
		||||
  IN      CONST LIST_ENTRY          *List,
 | 
			
		||||
  IN      CONST LIST_ENTRY          *Node
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT List not too long and Node is one of the nodes of List
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (List, Node, TRUE));
 | 
			
		||||
 
 | 
			
		||||
  return Node->BackLink;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Checks to see if a doubly-linked list is empty or not.
 | 
			
		||||
 | 
			
		||||
  Checks to see if the doubly-linked list is empty. If the linked list contains
 | 
			
		||||
  zero nodes, this function returns TRUE. Otherwise, it returns FALSE.
 | 
			
		||||
 | 
			
		||||
  If ListHead is NULL, then ASSERT().
 | 
			
		||||
  If ListHead was not initialized with INTIALIZE_LIST_HEAD_VARIABLE() or 
 | 
			
		||||
  InitializeListHead(), then ASSERT().
 | 
			
		||||
  If PcdMaximumLinkedListLenth is not zero, and the number of nodes
 | 
			
		||||
  in List, including the List node, is greater than or equal to
 | 
			
		||||
  PcdMaximumLinkedListLength, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  ListHead  A pointer to the head node of a doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  @retval TRUE  The linked list is empty.
 | 
			
		||||
  @retval FALSE The linked list is not empty.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
BOOLEAN
 | 
			
		||||
EFIAPI
 | 
			
		||||
IsListEmpty (
 | 
			
		||||
  IN      CONST LIST_ENTRY          *ListHead
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT List not too long
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (ListHead, ListHead, FALSE));
 | 
			
		||||
  
 | 
			
		||||
  return (BOOLEAN)(ListHead->ForwardLink == ListHead);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Determines if a node in a doubly-linked list is the head node of a the same
 | 
			
		||||
  doubly-linked list.  This function is typically used to terminate a loop that
 | 
			
		||||
  traverses all the nodes in a doubly-linked list starting with the head node.
 | 
			
		||||
 | 
			
		||||
  Returns TRUE if Node is equal to List.  Returns FALSE if Node is one of the
 | 
			
		||||
  nodes in the doubly-linked list specified by List.  List must have been
 | 
			
		||||
  initialized with INTIALIZE_LIST_HEAD_VARIABLE() or InitializeListHead().
 | 
			
		||||
 | 
			
		||||
  If List is NULL, then ASSERT().
 | 
			
		||||
  If Node is NULL, then ASSERT().
 | 
			
		||||
  If List was not initialized with INTIALIZE_LIST_HEAD_VARIABLE() or InitializeListHead(), 
 | 
			
		||||
  then ASSERT().
 | 
			
		||||
  If PcdMaximumLinkedListLenth is not zero, and the number of nodes
 | 
			
		||||
  in List, including the List node, is greater than or equal to
 | 
			
		||||
  PcdMaximumLinkedListLength, then ASSERT().
 | 
			
		||||
  If PcdVerifyNodeInList is TRUE and Node is not a node in List and Node is not 
 | 
			
		||||
  equal to List, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  List  A pointer to the head node of a doubly-linked list.
 | 
			
		||||
  @param  Node  A pointer to a node in the doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  @retval TRUE  Node is one of the nodes in the doubly-linked list.
 | 
			
		||||
  @retval FALSE Node is not one of the nodes in the doubly-linked list.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
BOOLEAN
 | 
			
		||||
EFIAPI
 | 
			
		||||
IsNull (
 | 
			
		||||
  IN      CONST LIST_ENTRY          *List,
 | 
			
		||||
  IN      CONST LIST_ENTRY          *Node
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT List not too long and Node is one of the nodes of List
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (List, Node, TRUE));
 | 
			
		||||
  
 | 
			
		||||
  return (BOOLEAN)(Node == List);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Determines if a node the last node in a doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  Returns TRUE if Node is the last node in the doubly-linked list specified by
 | 
			
		||||
  List. Otherwise, FALSE is returned. List must have been initialized with
 | 
			
		||||
  INTIALIZE_LIST_HEAD_VARIABLE() or InitializeListHead().
 | 
			
		||||
 | 
			
		||||
  If List is NULL, then ASSERT().
 | 
			
		||||
  If Node is NULL, then ASSERT().
 | 
			
		||||
  If List was not initialized with INTIALIZE_LIST_HEAD_VARIABLE() or
 | 
			
		||||
  InitializeListHead(), then ASSERT().
 | 
			
		||||
  If PcdMaximumLinkedListLenth is not zero, and the number of nodes
 | 
			
		||||
  in List, including the List node, is greater than or equal to
 | 
			
		||||
  PcdMaximumLinkedListLength, then ASSERT().
 | 
			
		||||
  If PcdVerifyNodeInList is TRUE and Node is not a node in List, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  List  A pointer to the head node of a doubly-linked list.
 | 
			
		||||
  @param  Node  A pointer to a node in the doubly-linked list.
 | 
			
		||||
 | 
			
		||||
  @retval TRUE  Node is the last node in the linked list.
 | 
			
		||||
  @retval FALSE Node is not the last node in the linked list.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
BOOLEAN
 | 
			
		||||
EFIAPI
 | 
			
		||||
IsNodeAtEnd (
 | 
			
		||||
  IN      CONST LIST_ENTRY          *List,
 | 
			
		||||
  IN      CONST LIST_ENTRY          *Node
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT List not too long and Node is one of the nodes of List
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (List, Node, TRUE));
 | 
			
		||||
  
 | 
			
		||||
  return (BOOLEAN)(!IsNull (List, Node) && List->BackLink == Node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Swaps the location of two nodes in a doubly-linked list, and returns the
 | 
			
		||||
  first node after the swap.
 | 
			
		||||
 | 
			
		||||
  If FirstEntry is identical to SecondEntry, then SecondEntry is returned.
 | 
			
		||||
  Otherwise, the location of the FirstEntry node is swapped with the location
 | 
			
		||||
  of the SecondEntry node in a doubly-linked list. SecondEntry must be in the
 | 
			
		||||
  same double linked list as FirstEntry and that double linked list must have
 | 
			
		||||
  been initialized with INTIALIZE_LIST_HEAD_VARIABLE() or InitializeListHead(). 
 | 
			
		||||
  SecondEntry is returned after the nodes are swapped.
 | 
			
		||||
 | 
			
		||||
  If FirstEntry is NULL, then ASSERT().
 | 
			
		||||
  If SecondEntry is NULL, then ASSERT().
 | 
			
		||||
  If PcdVerifyNodeInList is TRUE and SecondEntry and FirstEntry are not in the 
 | 
			
		||||
  same linked list, then ASSERT().
 | 
			
		||||
  If PcdMaximumLinkedListLength is not zero, and the number of nodes in the
 | 
			
		||||
  linked list containing the FirstEntry and SecondEntry nodes, including
 | 
			
		||||
  the FirstEntry and SecondEntry nodes, is greater than or equal to
 | 
			
		||||
  PcdMaximumLinkedListLength, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  FirstEntry  A pointer to a node in a linked list.
 | 
			
		||||
  @param  SecondEntry A pointer to another node in the same linked list.
 | 
			
		||||
  
 | 
			
		||||
  @return SecondEntry.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
LIST_ENTRY *
 | 
			
		||||
EFIAPI
 | 
			
		||||
SwapListEntries (
 | 
			
		||||
  IN OUT  LIST_ENTRY                *FirstEntry,
 | 
			
		||||
  IN OUT  LIST_ENTRY                *SecondEntry
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  LIST_ENTRY                    *Ptr;
 | 
			
		||||
 | 
			
		||||
  if (FirstEntry == SecondEntry) {
 | 
			
		||||
    return SecondEntry;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // ASSERT Entry1 and Entry2 are in the same linked list
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (InternalBaseLibIsNodeInList (FirstEntry, SecondEntry, TRUE));
 | 
			
		||||
  
 | 
			
		||||
  //
 | 
			
		||||
  // Ptr is the node pointed to by FirstEntry->ForwardLink
 | 
			
		||||
  //
 | 
			
		||||
  Ptr = RemoveEntryList (FirstEntry);
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // If FirstEntry immediately follows SecondEntry, FirstEntry will be placed
 | 
			
		||||
  // immediately in front of SecondEntry
 | 
			
		||||
  //
 | 
			
		||||
  if (Ptr->BackLink == SecondEntry) {
 | 
			
		||||
    return InsertTailList (SecondEntry, FirstEntry);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Ptr == SecondEntry means SecondEntry immediately follows FirstEntry,
 | 
			
		||||
  // then there are no further steps necessary
 | 
			
		||||
  //
 | 
			
		||||
  if (Ptr == InsertHeadList (SecondEntry, FirstEntry)) {
 | 
			
		||||
    return Ptr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Move SecondEntry to the front of Ptr
 | 
			
		||||
  //
 | 
			
		||||
  RemoveEntryList (SecondEntry);
 | 
			
		||||
  InsertTailList (Ptr, SecondEntry);
 | 
			
		||||
  return SecondEntry;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Removes a node from a doubly-linked list, and returns the node that follows
 | 
			
		||||
  the removed node.
 | 
			
		||||
 | 
			
		||||
  Removes the node Entry from a doubly-linked list. It is up to the caller of
 | 
			
		||||
  this function to release the memory used by this node if that is required. On
 | 
			
		||||
  exit, the node following Entry in the doubly-linked list is returned. If
 | 
			
		||||
  Entry is the only node in the linked list, then the head node of the linked
 | 
			
		||||
  list is returned.
 | 
			
		||||
 | 
			
		||||
  If Entry is NULL, then ASSERT().
 | 
			
		||||
  If Entry is the head node of an empty list, then ASSERT().
 | 
			
		||||
  If PcdMaximumLinkedListLength is not zero, and the number of nodes in the
 | 
			
		||||
  linked list containing Entry, including the Entry node, is greater than
 | 
			
		||||
  or equal to PcdMaximumLinkedListLength, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Entry A pointer to a node in a linked list.
 | 
			
		||||
 | 
			
		||||
  @return Entry.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
LIST_ENTRY *
 | 
			
		||||
EFIAPI
 | 
			
		||||
RemoveEntryList (
 | 
			
		||||
  IN      CONST LIST_ENTRY          *Entry
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (!IsListEmpty (Entry));
 | 
			
		||||
  
 | 
			
		||||
  Entry->ForwardLink->BackLink = Entry->BackLink;
 | 
			
		||||
  Entry->BackLink->ForwardLink = Entry->ForwardLink;
 | 
			
		||||
  return Entry->ForwardLink;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								UnixPkg/Library/UnixBaseLib/LongJump.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								UnixPkg/Library/UnixBaseLib/LongJump.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Long Jump functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
  If JumpBuffer is NULL, then ASSERT().
 | 
			
		||||
  For IPF CPUs, if JumpBuffer is not aligned on a 16-byte boundary, then ASSERT().
 | 
			
		||||
  If Value is 0, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  JumpBuffer  A pointer to CPU context buffer.
 | 
			
		||||
  @param  Value       The value to return when the SetJump() context is
 | 
			
		||||
                      restored and must be non-zero.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
VOID
 | 
			
		||||
EFIAPI
 | 
			
		||||
LongJump (
 | 
			
		||||
  IN      BASE_LIBRARY_JUMP_BUFFER  *JumpBuffer,
 | 
			
		||||
  IN      UINTN                     Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  InternalAssertJumpBuffer (JumpBuffer);
 | 
			
		||||
  ASSERT (Value != 0);
 | 
			
		||||
 | 
			
		||||
  InternalLongJump (JumpBuffer, Value);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								UnixPkg/Library/UnixBaseLib/LowBitSet32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								UnixPkg/Library/UnixBaseLib/LowBitSet32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the bit position of the lowest bit set in a 32-bit value.
 | 
			
		||||
 | 
			
		||||
  This function computes the bit position of the lowest bit set in the 32-bit
 | 
			
		||||
  value specified by Operand. If Operand is zero, then -1 is returned.
 | 
			
		||||
  Otherwise, a value between 0 and 31 is returned.
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 32-bit operand to evaluate.
 | 
			
		||||
 | 
			
		||||
  @retval 0..31  The lowest bit set in Operand was found.
 | 
			
		||||
  @retval -1     Operand is zero.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
INTN
 | 
			
		||||
EFIAPI
 | 
			
		||||
LowBitSet32 (
 | 
			
		||||
  IN      UINT32                    Operand
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  INTN                              BitIndex;
 | 
			
		||||
 | 
			
		||||
  if (Operand == 0) {
 | 
			
		||||
    return -1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (BitIndex = 0; 0 == (Operand & 1); BitIndex++, Operand >>= 1);
 | 
			
		||||
  return BitIndex;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								UnixPkg/Library/UnixBaseLib/LowBitSet64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								UnixPkg/Library/UnixBaseLib/LowBitSet64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Returns the bit position of the lowest bit set in a 64-bit value.
 | 
			
		||||
 | 
			
		||||
  This function computes the bit position of the lowest bit set in the 64-bit
 | 
			
		||||
  value specified by Operand. If Operand is zero, then -1 is returned.
 | 
			
		||||
  Otherwise, a value between 0 and 63 is returned.
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 64-bit operand to evaluate.
 | 
			
		||||
 | 
			
		||||
  @retval 0..63  The lowest bit set in Operand was found.
 | 
			
		||||
  @retval -1     Operand is zero.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
INTN
 | 
			
		||||
EFIAPI
 | 
			
		||||
LowBitSet64 (
 | 
			
		||||
  IN      UINT64                    Operand
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  INTN                              BitIndex;
 | 
			
		||||
 | 
			
		||||
  if (Operand == 0) {
 | 
			
		||||
    return -1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (BitIndex = 0;
 | 
			
		||||
       (Operand & 1) == 0;
 | 
			
		||||
       BitIndex++, Operand = RShiftU64 (Operand, 1));
 | 
			
		||||
  return BitIndex;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										368
									
								
								UnixPkg/Library/UnixBaseLib/Math64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										368
									
								
								UnixPkg/Library/UnixBaseLib/Math64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,368 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Leaf math worker functions that require 64-bit arithmetic support from the
 | 
			
		||||
  compiler.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return Operand << Count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Shifts a 64-bit integer right between 0 and 63 bits. This 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return Operand >> 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  INTN  TestValue;
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Test if this compiler supports arithmetic shift
 | 
			
		||||
  //
 | 
			
		||||
  TestValue = (((-1) << (sizeof (-1) * 8 - 1)) >> (sizeof (-1) * 8 - 1));
 | 
			
		||||
  if (TestValue == -1) {
 | 
			
		||||
    //
 | 
			
		||||
    // Arithmetic shift is supported
 | 
			
		||||
    //
 | 
			
		||||
    return (UINT64)((INT64)Operand >> Count);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Arithmetic is not supported
 | 
			
		||||
  //
 | 
			
		||||
  return (Operand >> Count) |
 | 
			
		||||
         ((INTN)Operand < 0 ? ~((UINTN)-1 >> Count) : 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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 fill 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return (Operand << Count) | (Operand >> (64 - 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 fill 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return (Operand >> Count) | (Operand << (64 - 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT64  LowerBytes;
 | 
			
		||||
  UINT64  HigherBytes;
 | 
			
		||||
 | 
			
		||||
  LowerBytes  = (UINT64) SwapBytes32 ((UINT32) Operand);
 | 
			
		||||
  HigherBytes = (UINT64) SwapBytes32 ((UINT32) (Operand >> 32));
 | 
			
		||||
 | 
			
		||||
  return (LowerBytes << 32 | HigherBytes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return Multiplicand * Multiplier;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Multiplies a 64-bit unsigned integer by a 64-bit unsigned integer
 | 
			
		||||
  and generates a 64-bit unsigned result.
 | 
			
		||||
 | 
			
		||||
  This function multiplies 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return Multiplicand * 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return Dividend / 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return (UINT32)(Dividend % 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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  if (Remainder != NULL) {
 | 
			
		||||
    *Remainder = (UINT32)(Dividend % Divisor);
 | 
			
		||||
  }
 | 
			
		||||
  return Dividend / Divisor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  if (Remainder != NULL) {
 | 
			
		||||
    *Remainder = Dividend % Divisor;
 | 
			
		||||
  }
 | 
			
		||||
  return Dividend / Divisor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  if (Remainder != NULL) {
 | 
			
		||||
    *Remainder = Dividend % Divisor;
 | 
			
		||||
  }
 | 
			
		||||
  return Dividend / Divisor;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								UnixPkg/Library/UnixBaseLib/ModU64x32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								UnixPkg/Library/UnixBaseLib/ModU64x32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
  If Divisor is 0, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Dividend  A 64-bit unsigned value.
 | 
			
		||||
  @param  Divisor   A 32-bit unsigned value.
 | 
			
		||||
 | 
			
		||||
  @return Dividend % Divisor.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
ModU64x32 (
 | 
			
		||||
  IN      UINT64                    Dividend,
 | 
			
		||||
  IN      UINT32                    Divisor
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Divisor != 0);
 | 
			
		||||
  return InternalMathModU64x32 (Dividend, Divisor);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/MultS64x64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/MultS64x64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Multiplies a 64-bit signed integer by a 64-bit signed integer and generates a
 | 
			
		||||
  64-bit signed result.
 | 
			
		||||
 | 
			
		||||
  This function multiplies the 64-bit signed value Multiplicand by the 64-bit
 | 
			
		||||
  signed value Multiplier and generates a 64-bit signed result. This 64-bit
 | 
			
		||||
  signed result is returned.
 | 
			
		||||
 | 
			
		||||
  @param  Multiplicand  A 64-bit signed value.
 | 
			
		||||
  @param  Multiplier    A 64-bit signed value.
 | 
			
		||||
 | 
			
		||||
  @return Multiplicand * Multiplier.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
INT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
MultS64x64 (
 | 
			
		||||
  IN      INT64                     Multiplicand,
 | 
			
		||||
  IN      INT64                     Multiplier
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return (INT64)MultU64x64 (Multiplicand, Multiplier);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										46
									
								
								UnixPkg/Library/UnixBaseLib/MultU64x32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								UnixPkg/Library/UnixBaseLib/MultU64x32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
MultU64x32 (
 | 
			
		||||
  IN      UINT64                    Multiplicand,
 | 
			
		||||
  IN      UINT32                    Multiplier
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT64                            Result;
 | 
			
		||||
 | 
			
		||||
  Result = InternalMathMultU64x32 (Multiplicand, Multiplier);
 | 
			
		||||
 | 
			
		||||
  return Result;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										46
									
								
								UnixPkg/Library/UnixBaseLib/MultU64x64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								UnixPkg/Library/UnixBaseLib/MultU64x64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Multiplies a 64-bit unsigned integer by a 64-bit unsigned integer and
 | 
			
		||||
  generates a 64-bit unsigned result.
 | 
			
		||||
 | 
			
		||||
  This function multiplies 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
 | 
			
		||||
MultU64x64 (
 | 
			
		||||
  IN      UINT64                    Multiplicand,
 | 
			
		||||
  IN      UINT64                    Multiplier
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT64                            Result;
 | 
			
		||||
 | 
			
		||||
  Result = InternalMathMultU64x64 (Multiplicand, Multiplier);
 | 
			
		||||
 | 
			
		||||
  return Result;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/RRotU32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/RRotU32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Rotates a 32-bit integer right between 0 and 31 bits, filling the high bits
 | 
			
		||||
  with the low bits that were rotated.
 | 
			
		||||
 | 
			
		||||
  This function rotates the 32-bit value Operand to the right by Count bits.
 | 
			
		||||
  The high Count bits are fill with the low Count bits of Operand. The rotated
 | 
			
		||||
  value is returned.
 | 
			
		||||
 | 
			
		||||
  If Count is greater than 31, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 32-bit operand to rotate right.
 | 
			
		||||
  @param  Count   The number of bits to rotate right.
 | 
			
		||||
 | 
			
		||||
  @return Operand >> Count.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
RRotU32 (
 | 
			
		||||
  IN      UINT32                    Operand,
 | 
			
		||||
  IN      UINTN                     Count
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Count < 32);
 | 
			
		||||
  return (Operand >> Count) | (Operand << (32 - Count));
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/RRotU64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/RRotU64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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 fill with the low Count bits of Operand. The rotated
 | 
			
		||||
  value is returned.
 | 
			
		||||
 | 
			
		||||
  If Count is greater than 63, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 64-bit operand to rotate right.
 | 
			
		||||
  @param  Count   The number of bits to rotate right.
 | 
			
		||||
 | 
			
		||||
  @return Operand >> Count.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
RRotU64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     Count
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Count < 64);
 | 
			
		||||
  return InternalMathRRotU64 (Operand, Count);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/RShiftU64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/RShiftU64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Shifts a 64-bit integer right between 0 and 63 bits. This 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.
 | 
			
		||||
 | 
			
		||||
  If Count is greater than 63, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Operand The 64-bit operand to shift right.
 | 
			
		||||
  @param  Count   The number of bits to shift right.
 | 
			
		||||
 | 
			
		||||
  @return Operand >> Count.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
RShiftU64 (
 | 
			
		||||
  IN      UINT64                    Operand,
 | 
			
		||||
  IN      UINTN                     Count
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Count < 64);
 | 
			
		||||
  return InternalMathRShiftU64 (Operand, Count);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								UnixPkg/Library/UnixBaseLib/SetJump.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								UnixPkg/Library/UnixBaseLib/SetJump.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Internal ASSERT () functions for SetJump.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (JumpBuffer != NULL);
 | 
			
		||||
 | 
			
		||||
  ASSERT (((UINTN)JumpBuffer & (BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT - 1)) == 0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2109
									
								
								UnixPkg/Library/UnixBaseLib/String.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2109
									
								
								UnixPkg/Library/UnixBaseLib/String.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/SwapBytes16.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/SwapBytes16.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Switches the endianess of a 16-bit integer.
 | 
			
		||||
 | 
			
		||||
  This function swaps the bytes in a 16-bit unsigned value to switch the value
 | 
			
		||||
  from little endian to big endian or vice versa. The byte swapped value is
 | 
			
		||||
  returned.
 | 
			
		||||
 | 
			
		||||
  @param  Value A 16-bit unsigned value.
 | 
			
		||||
 | 
			
		||||
  @return The byte swapped Value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
SwapBytes16 (
 | 
			
		||||
  IN      UINT16                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return (UINT16) ((Value<< 8) | (Value>> 8));
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								UnixPkg/Library/UnixBaseLib/SwapBytes32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								UnixPkg/Library/UnixBaseLib/SwapBytes32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Switches the endianess of a 32-bit integer.
 | 
			
		||||
 | 
			
		||||
  This function swaps the bytes in a 32-bit unsigned value to switch the value
 | 
			
		||||
  from little endian to big endian or vice versa. The byte swapped value is
 | 
			
		||||
  returned.
 | 
			
		||||
 | 
			
		||||
  @param  Value A 32-bit unsigned value.
 | 
			
		||||
 | 
			
		||||
  @return The byte swapped Value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
SwapBytes32 (
 | 
			
		||||
  IN      UINT32                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  UINT32  LowerBytes;
 | 
			
		||||
  UINT32  HigherBytes;
 | 
			
		||||
 | 
			
		||||
  LowerBytes  = (UINT32) SwapBytes16 ((UINT16) Value);
 | 
			
		||||
  HigherBytes = (UINT32) SwapBytes16 ((UINT16) (Value >> 16));
 | 
			
		||||
 | 
			
		||||
  return (LowerBytes << 16 | HigherBytes);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/SwapBytes64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/SwapBytes64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Math worker functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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  Value A 64-bit unsigned value.
 | 
			
		||||
 | 
			
		||||
  @return The byte swapped Value.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
SwapBytes64 (
 | 
			
		||||
  IN      UINT64                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return InternalMathSwapBytes64 (Value);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								UnixPkg/Library/UnixBaseLib/SwitchStack.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								UnixPkg/Library/UnixBaseLib/SwitchStack.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Switch Stack functions.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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.  This function
 | 
			
		||||
  supports a variable number of arguments following the NewStack parameter.
 | 
			
		||||
  These additional arguments are 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  ...         This variable argument list is ignored for IA32, x64, and EBC.  
 | 
			
		||||
                      For IPF, this variable argument list is expected to contain 
 | 
			
		||||
                      a single parameter of type VOID * that specifies the new backing 
 | 
			
		||||
                      store pointer.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
VOID
 | 
			
		||||
EFIAPI
 | 
			
		||||
SwitchStack (
 | 
			
		||||
  IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,
 | 
			
		||||
  IN      VOID                      *Context1,  OPTIONAL
 | 
			
		||||
  IN      VOID                      *Context2,  OPTIONAL
 | 
			
		||||
  IN      VOID                      *NewStack,
 | 
			
		||||
  ...
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  VA_LIST    Marker;
 | 
			
		||||
 | 
			
		||||
  ASSERT (EntryPoint != NULL);
 | 
			
		||||
  ASSERT (NewStack != NULL);
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // New stack must be aligned with CPU_STACK_ALIGNMENT
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0);
 | 
			
		||||
 | 
			
		||||
  VA_START (Marker, NewStack);
 | 
			
		||||
 | 
			
		||||
  InternalSwitchStack (EntryPoint, Context1, Context2, NewStack, Marker);
 | 
			
		||||
 | 
			
		||||
  VA_END (Marker);
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // InternalSwitchStack () will never return
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (FALSE);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										222
									
								
								UnixPkg/Library/UnixBaseLib/Unaligned.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										222
									
								
								UnixPkg/Library/UnixBaseLib/Unaligned.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,222 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Unaligned access functions of 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "BaseLibInternals.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a 16-bit value from memory that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  This function returns the 16-bit value pointed to by Buffer. The function
 | 
			
		||||
  guarantees that the read operation does not produce an alignment fault.
 | 
			
		||||
 | 
			
		||||
  If the Buffer is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer  A pointer to a 16-bit value that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  @return The 16-bit value read from Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
ReadUnaligned16 (
 | 
			
		||||
  IN CONST UINT16              *Buffer
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
 | 
			
		||||
  return *Buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Writes a 16-bit value to memory that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  This function writes the 16-bit value specified by Value to Buffer. Value is
 | 
			
		||||
  returned. The function guarantees that the write operation does not produce
 | 
			
		||||
  an alignment fault.
 | 
			
		||||
 | 
			
		||||
  If the Buffer is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer  A pointer to a 16-bit value that may be unaligned.
 | 
			
		||||
  @param  Value   16-bit value to write to Buffer.
 | 
			
		||||
 | 
			
		||||
  @return The 16-bit value to write to Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT16
 | 
			
		||||
EFIAPI
 | 
			
		||||
WriteUnaligned16 (
 | 
			
		||||
  OUT UINT16                    *Buffer,
 | 
			
		||||
  IN  UINT16                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
 | 
			
		||||
  return *Buffer = Value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a 24-bit value from memory that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  This function returns the 24-bit value pointed to by Buffer. The function
 | 
			
		||||
  guarantees that the read operation does not produce an alignment fault.
 | 
			
		||||
 | 
			
		||||
  If the Buffer is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer  A pointer to a 24-bit value that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  @return The 24-bit value read from Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
ReadUnaligned24 (
 | 
			
		||||
  IN CONST UINT32              *Buffer
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
 | 
			
		||||
  return *Buffer & 0xffffff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Writes a 24-bit value to memory that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  This function writes the 24-bit value specified by Value to Buffer. Value is
 | 
			
		||||
  returned. The function guarantees that the write operation does not produce
 | 
			
		||||
  an alignment fault.
 | 
			
		||||
 | 
			
		||||
  If the Buffer is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer  A pointer to a 24-bit value that may be unaligned.
 | 
			
		||||
  @param  Value   24-bit value to write to Buffer.
 | 
			
		||||
 | 
			
		||||
  @return The 24-bit value to write to Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
WriteUnaligned24 (
 | 
			
		||||
  OUT UINT32                    *Buffer,
 | 
			
		||||
  IN  UINT32                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
 | 
			
		||||
  *Buffer = BitFieldWrite32 (*Buffer, 0, 23, Value);
 | 
			
		||||
  return Value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a 32-bit value from memory that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  This function returns the 32-bit value pointed to by Buffer. The function
 | 
			
		||||
  guarantees that the read operation does not produce an alignment fault.
 | 
			
		||||
 | 
			
		||||
  If the Buffer is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer  A pointer to a 32-bit value that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  @return The 32-bit value read from Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
ReadUnaligned32 (
 | 
			
		||||
  IN CONST UINT32              *Buffer
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
 | 
			
		||||
  return *Buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Writes a 32-bit value to memory that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  This function writes the 32-bit value specified by Value to Buffer. Value is
 | 
			
		||||
  returned. The function guarantees that the write operation does not produce
 | 
			
		||||
  an alignment fault.
 | 
			
		||||
 | 
			
		||||
  If the Buffer is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer  A pointer to a 32-bit value that may be unaligned.
 | 
			
		||||
  @param  Value   The 32-bit value to write to Buffer.
 | 
			
		||||
 | 
			
		||||
  @return The 32-bit value to write to Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT32
 | 
			
		||||
EFIAPI
 | 
			
		||||
WriteUnaligned32 (
 | 
			
		||||
  OUT UINT32                    *Buffer,
 | 
			
		||||
  IN  UINT32                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
 | 
			
		||||
  return *Buffer = Value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Reads a 64-bit value from memory that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  This function returns the 64-bit value pointed to by Buffer. The function
 | 
			
		||||
  guarantees that the read operation does not produce an alignment fault.
 | 
			
		||||
 | 
			
		||||
  If the Buffer is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer  A pointer to a 64-bit value that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  @return The 64-bit value read from Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
ReadUnaligned64 (
 | 
			
		||||
  IN CONST UINT64              *Buffer
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
 | 
			
		||||
  return *Buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Writes a 64-bit value to memory that may be unaligned.
 | 
			
		||||
 | 
			
		||||
  This function writes the 64-bit value specified by Value to Buffer. Value is
 | 
			
		||||
  returned. The function guarantees that the write operation does not produce
 | 
			
		||||
  an alignment fault.
 | 
			
		||||
 | 
			
		||||
  If the Buffer is NULL, then ASSERT().
 | 
			
		||||
 | 
			
		||||
  @param  Buffer  A pointer to a 64-bit value that may be unaligned.
 | 
			
		||||
  @param  Value   The 64-bit value to write to Buffer.
 | 
			
		||||
 | 
			
		||||
  @return The 64-bit value to write to Buffer.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
WriteUnaligned64 (
 | 
			
		||||
  OUT UINT64                    *Buffer,
 | 
			
		||||
  IN  UINT64                    Value
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  ASSERT (Buffer != NULL);
 | 
			
		||||
 | 
			
		||||
  return *Buffer = Value;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										201
									
								
								UnixPkg/Library/UnixBaseLib/UnixBaseLib.inf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								UnixPkg/Library/UnixBaseLib/UnixBaseLib.inf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,201 @@
 | 
			
		||||
## @file
 | 
			
		||||
#  Base Library implementation for X64 UnixPkg. X64 code writes CR3 so to
 | 
			
		||||
#  not change MdeModulePkg DxeIpl we need a UnixPkg copy of the BaseLib.
 | 
			
		||||
#  
 | 
			
		||||
#  Currently I'm debugging UnixPkg with SVR V ABI so there are some 
 | 
			
		||||
#   temp changes for that too.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
#  Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
 | 
			
		||||
#  Portions copyright (c) 2008 - 2009, Apple Inc. 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.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
[Defines]
 | 
			
		||||
  INF_VERSION                    = 0x00010005
 | 
			
		||||
  BASE_NAME                      = BaseLib
 | 
			
		||||
  FILE_GUID                      = 27d67720-ea68-48ae-93da-a3a074c90e30
 | 
			
		||||
  MODULE_TYPE                    = BASE
 | 
			
		||||
  VERSION_STRING                 = 1.0
 | 
			
		||||
  LIBRARY_CLASS                  = BaseLib 
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
[Sources]
 | 
			
		||||
  CheckSum.c
 | 
			
		||||
  SwitchStack.c
 | 
			
		||||
  SwapBytes64.c
 | 
			
		||||
  SwapBytes32.c
 | 
			
		||||
  SwapBytes16.c
 | 
			
		||||
  LongJump.c
 | 
			
		||||
  SetJump.c
 | 
			
		||||
  RShiftU64.c
 | 
			
		||||
  RRotU64.c
 | 
			
		||||
  RRotU32.c
 | 
			
		||||
  MultU64x64.c
 | 
			
		||||
  MultU64x32.c
 | 
			
		||||
  MultS64x64.c
 | 
			
		||||
  ModU64x32.c
 | 
			
		||||
  LShiftU64.c
 | 
			
		||||
  LRotU64.c
 | 
			
		||||
  LRotU32.c
 | 
			
		||||
  LowBitSet64.c
 | 
			
		||||
  LowBitSet32.c
 | 
			
		||||
  HighBitSet64.c
 | 
			
		||||
  HighBitSet32.c
 | 
			
		||||
  GetPowerOfTwo64.c
 | 
			
		||||
  GetPowerOfTwo32.c
 | 
			
		||||
  DivU64x64Remainder.c
 | 
			
		||||
  DivU64x32Remainder.c
 | 
			
		||||
  DivU64x32.c
 | 
			
		||||
  DivS64x64Remainder.c
 | 
			
		||||
  ARShiftU64.c
 | 
			
		||||
  BitField.c
 | 
			
		||||
  CpuDeadLoop.c
 | 
			
		||||
  Cpu.c
 | 
			
		||||
  LinkedList.c
 | 
			
		||||
  String.c
 | 
			
		||||
  BaseLibInternals.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[Sources.X64]
 | 
			
		||||
  X64/Thunk16.asm
 | 
			
		||||
  X64/CpuPause.asm
 | 
			
		||||
  X64/EnableDisableInterrupts.asm
 | 
			
		||||
  X64/DisableInterrupts.asm
 | 
			
		||||
  X64/EnableInterrupts.asm
 | 
			
		||||
  X64/FlushCacheLine.asm
 | 
			
		||||
  X64/Invd.asm
 | 
			
		||||
  X64/Wbinvd.asm
 | 
			
		||||
  X64/DisablePaging64.asm
 | 
			
		||||
  X64/Mwait.asm
 | 
			
		||||
  X64/Monitor.asm
 | 
			
		||||
  X64/ReadPmc.asm
 | 
			
		||||
  X64/ReadTsc.asm
 | 
			
		||||
  X64/WriteMm7.asm
 | 
			
		||||
  X64/WriteMm6.asm
 | 
			
		||||
  X64/WriteMm5.asm
 | 
			
		||||
  X64/WriteMm4.asm
 | 
			
		||||
  X64/WriteMm3.asm
 | 
			
		||||
  X64/WriteMm2.asm
 | 
			
		||||
  X64/WriteMm1.asm
 | 
			
		||||
  X64/WriteMm0.asm
 | 
			
		||||
  X64/ReadMm7.asm
 | 
			
		||||
  X64/ReadMm6.asm
 | 
			
		||||
  X64/ReadMm5.asm
 | 
			
		||||
  X64/ReadMm4.asm
 | 
			
		||||
  X64/ReadMm3.asm
 | 
			
		||||
  X64/ReadMm2.asm
 | 
			
		||||
  X64/ReadMm1.asm
 | 
			
		||||
  X64/ReadMm0.asm
 | 
			
		||||
  X64/FxRestore.asm
 | 
			
		||||
  X64/FxSave.asm
 | 
			
		||||
  X64/WriteLdtr.asm
 | 
			
		||||
  X64/ReadLdtr.asm
 | 
			
		||||
  X64/WriteIdtr.asm
 | 
			
		||||
  X64/ReadIdtr.asm
 | 
			
		||||
  X64/WriteGdtr.asm
 | 
			
		||||
  X64/ReadGdtr.asm
 | 
			
		||||
  X64/ReadTr.asm
 | 
			
		||||
  X64/ReadSs.asm
 | 
			
		||||
  X64/ReadGs.asm
 | 
			
		||||
  X64/ReadFs.asm
 | 
			
		||||
  X64/ReadEs.asm
 | 
			
		||||
  X64/ReadDs.asm
 | 
			
		||||
  X64/ReadCs.asm
 | 
			
		||||
  X64/WriteDr7.asm
 | 
			
		||||
  X64/WriteDr6.asm
 | 
			
		||||
  X64/WriteDr5.asm
 | 
			
		||||
  X64/WriteDr4.asm
 | 
			
		||||
  X64/WriteDr3.asm
 | 
			
		||||
  X64/WriteDr2.asm
 | 
			
		||||
  X64/WriteDr1.asm
 | 
			
		||||
  X64/WriteDr0.asm
 | 
			
		||||
  X64/ReadDr7.asm
 | 
			
		||||
  X64/ReadDr6.asm
 | 
			
		||||
  X64/ReadDr5.asm
 | 
			
		||||
  X64/ReadDr4.asm
 | 
			
		||||
  X64/ReadDr3.asm
 | 
			
		||||
  X64/ReadDr2.asm
 | 
			
		||||
  X64/ReadDr1.asm
 | 
			
		||||
  X64/ReadDr0.asm
 | 
			
		||||
  X64/WriteCr4.asm
 | 
			
		||||
  X64/WriteCr3.asm
 | 
			
		||||
  X64/WriteCr2.asm
 | 
			
		||||
  X64/WriteCr0.asm
 | 
			
		||||
  X64/ReadCr4.asm
 | 
			
		||||
  X64/ReadCr3.asm
 | 
			
		||||
  X64/ReadCr2.asm
 | 
			
		||||
  X64/ReadCr0.asm
 | 
			
		||||
  X64/ReadEflags.asm
 | 
			
		||||
  X64/CpuIdEx.asm
 | 
			
		||||
  X64/CpuId.asm
 | 
			
		||||
  X64/LongJump.asm
 | 
			
		||||
  X64/SetJump.asm
 | 
			
		||||
  X64/SwitchStack.asm
 | 
			
		||||
  X64/EnableCache.asm
 | 
			
		||||
  X64/DisableCache.asm
 | 
			
		||||
 | 
			
		||||
  X64/CpuBreakpoint.c | MSFT 
 | 
			
		||||
  X64/WriteMsr64.c | MSFT 
 | 
			
		||||
  X64/ReadMsr64.c | MSFT 
 | 
			
		||||
 | 
			
		||||
  X64/CpuBreakpoint.asm | INTEL 
 | 
			
		||||
  X64/WriteMsr64.asm | INTEL 
 | 
			
		||||
  X64/ReadMsr64.asm | INTEL 
 | 
			
		||||
 | 
			
		||||
  X64/Non-existing.c
 | 
			
		||||
  Math64.c
 | 
			
		||||
  Unaligned.c
 | 
			
		||||
  X86WriteIdtr.c
 | 
			
		||||
  X86WriteGdtr.c
 | 
			
		||||
  X86Thunk.c
 | 
			
		||||
  X86ReadIdtr.c
 | 
			
		||||
  X86ReadGdtr.c
 | 
			
		||||
  X86Msr.c
 | 
			
		||||
  X86MemoryFence.c | MSFT
 | 
			
		||||
  X86MemoryFence.c | INTEL
 | 
			
		||||
  X86GetInterruptState.c
 | 
			
		||||
  X86FxSave.c
 | 
			
		||||
  X86FxRestore.c
 | 
			
		||||
  X86EnablePaging64.c
 | 
			
		||||
  X86EnablePaging32.c
 | 
			
		||||
  X86DisablePaging64.c
 | 
			
		||||
  X86DisablePaging32.c
 | 
			
		||||
  X64/GccInline.c | GCC
 | 
			
		||||
  X64/Thunk16.S | GCC 
 | 
			
		||||
  X64/SwitchStack.S | GCC 
 | 
			
		||||
  X64/SetJump.S | GCC 
 | 
			
		||||
  X64/LongJump.S | GCC 
 | 
			
		||||
  X64/EnableDisableInterrupts.S | GCC 
 | 
			
		||||
  X64/DisablePaging64.S | GCC 
 | 
			
		||||
  X64/CpuId.S | GCC 
 | 
			
		||||
  X64/CpuIdEx.S | GCC 
 | 
			
		||||
  X64/EnableCache.S | GCC
 | 
			
		||||
  X64/DisableCache.S | GCC
 | 
			
		||||
  ChkStkGcc.c  | GCC 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[Packages]
 | 
			
		||||
  MdePkg/MdePkg.dec
 | 
			
		||||
 | 
			
		||||
[LibraryClasses]
 | 
			
		||||
  PcdLib
 | 
			
		||||
  DebugLib
 | 
			
		||||
  BaseMemoryLib
 | 
			
		||||
 | 
			
		||||
[Pcd]
 | 
			
		||||
  gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength
 | 
			
		||||
  gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength
 | 
			
		||||
  gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength
 | 
			
		||||
  gEfiMdePkgTokenSpaceGuid.PcdVerifyNodeInList
 | 
			
		||||
							
								
								
									
										25
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuBreakpoint.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuBreakpoint.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
#
 | 
			
		||||
# Module Name:
 | 
			
		||||
#
 | 
			
		||||
#   CpuBreakpoint.S
 | 
			
		||||
#
 | 
			
		||||
# Abstract:
 | 
			
		||||
#
 | 
			
		||||
#   Implementation of CpuBreakpoint() on x86_64
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ASM_GLOBAL ASM_PFX(CpuBreakpoint)
 | 
			
		||||
ASM_PFX(CpuBreakpoint):
 | 
			
		||||
  int $0x3
 | 
			
		||||
  ret
 | 
			
		||||
							
								
								
									
										37
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuBreakpoint.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuBreakpoint.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
;------------------------------------------------------------------------------ ;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   CpuBreakpoint.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   CpuBreakpoint function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; CpuBreakpoint (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
CpuBreakpoint   PROC
 | 
			
		||||
    int  3
 | 
			
		||||
    ret
 | 
			
		||||
CpuBreakpoint   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuBreakpoint.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuBreakpoint.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  CpuBreakpoint function.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics.
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
void __debugbreak ();
 | 
			
		||||
 | 
			
		||||
#pragma intrinsic(__debugbreak)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Generates a breakpoint on the CPU.
 | 
			
		||||
 | 
			
		||||
  Generates a breakpoint on the CPU. The breakpoint must be implemented such
 | 
			
		||||
  that code can resume normal execution after the breakpoint.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
VOID
 | 
			
		||||
EFIAPI
 | 
			
		||||
CpuBreakpoint (
 | 
			
		||||
  VOID
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  __debugbreak ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										60
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuId.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuId.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
#
 | 
			
		||||
# Module Name:
 | 
			
		||||
#
 | 
			
		||||
#   CpuId.S
 | 
			
		||||
#
 | 
			
		||||
# Abstract:
 | 
			
		||||
#
 | 
			
		||||
#   AsmCpuid function
 | 
			
		||||
#
 | 
			
		||||
# Notes:
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#  VOID
 | 
			
		||||
#  EFIAPI
 | 
			
		||||
#  AsmCpuid (
 | 
			
		||||
#    IN   UINT32  RegisterInEax,
 | 
			
		||||
#    OUT  UINT32  *RegisterOutEax  OPTIONAL,
 | 
			
		||||
#    OUT  UINT32  *RegisterOutEbx  OPTIONAL,
 | 
			
		||||
#    OUT  UINT32  *RegisterOutEcx  OPTIONAL,
 | 
			
		||||
#    OUT  UINT32  *RegisterOutEdx  OPTIONAL
 | 
			
		||||
#    )
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
ASM_GLOBAL ASM_PFX(AsmCpuid)
 | 
			
		||||
ASM_PFX(AsmCpuid):
 | 
			
		||||
    push    %rbx
 | 
			
		||||
    mov     %ecx, %eax
 | 
			
		||||
    push    %rax                         # save Index on stack
 | 
			
		||||
    push    %rdx
 | 
			
		||||
    cpuid
 | 
			
		||||
    test    %r9, %r9
 | 
			
		||||
    jz      L1
 | 
			
		||||
    mov     %ecx, (%r9)
 | 
			
		||||
L1:
 | 
			
		||||
    pop     %rcx
 | 
			
		||||
    jrcxz   L2
 | 
			
		||||
    mov     %eax, (%rcx)
 | 
			
		||||
L2:
 | 
			
		||||
    mov     %r8, %rcx
 | 
			
		||||
    jrcxz   L3
 | 
			
		||||
    mov     %ebx, (%rcx)
 | 
			
		||||
L3:
 | 
			
		||||
    mov     0x38(%rsp), %rcx
 | 
			
		||||
    jrcxz   L4
 | 
			
		||||
    mov     %edx, (%rcx)
 | 
			
		||||
L4:
 | 
			
		||||
    pop     %rax                         # restore Index to rax as return value
 | 
			
		||||
    pop     %rbx
 | 
			
		||||
    ret
 | 
			
		||||
							
								
								
									
										62
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuId.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuId.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   CpuId.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmCpuid function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;  VOID
 | 
			
		||||
;  EFIAPI
 | 
			
		||||
;  AsmCpuid (
 | 
			
		||||
;    IN   UINT32  RegisterInEax,
 | 
			
		||||
;    OUT  UINT32  *RegisterOutEax  OPTIONAL,
 | 
			
		||||
;    OUT  UINT32  *RegisterOutEbx  OPTIONAL,
 | 
			
		||||
;    OUT  UINT32  *RegisterOutEcx  OPTIONAL,
 | 
			
		||||
;    OUT  UINT32  *RegisterOutEdx  OPTIONAL
 | 
			
		||||
;    )
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmCpuid    PROC    USES    rbx
 | 
			
		||||
    mov     eax, ecx
 | 
			
		||||
    push    rax                         ; save Index on stack
 | 
			
		||||
    push    rdx
 | 
			
		||||
    cpuid
 | 
			
		||||
    test    r9, r9
 | 
			
		||||
    jz      @F
 | 
			
		||||
    mov     [r9], ecx
 | 
			
		||||
@@:
 | 
			
		||||
    pop     rcx
 | 
			
		||||
    jrcxz   @F
 | 
			
		||||
    mov     [rcx], eax
 | 
			
		||||
@@:
 | 
			
		||||
    mov     rcx, r8
 | 
			
		||||
    jrcxz   @F
 | 
			
		||||
    mov     [rcx], ebx
 | 
			
		||||
@@:
 | 
			
		||||
    mov     rcx, [rsp + 38h]
 | 
			
		||||
    jrcxz   @F
 | 
			
		||||
    mov     [rcx], edx
 | 
			
		||||
@@:
 | 
			
		||||
    pop     rax                         ; restore Index to rax as return value
 | 
			
		||||
    ret
 | 
			
		||||
AsmCpuid    ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										62
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuIdEx.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuIdEx.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
#
 | 
			
		||||
# Module Name:
 | 
			
		||||
#
 | 
			
		||||
#   CpuIdEx.S
 | 
			
		||||
#
 | 
			
		||||
# Abstract:
 | 
			
		||||
#
 | 
			
		||||
#   AsmCpuidEx function
 | 
			
		||||
#
 | 
			
		||||
# Notes:
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#  UINT32
 | 
			
		||||
#  EFIAPI
 | 
			
		||||
#  AsmCpuidEx (
 | 
			
		||||
#    IN   UINT32  RegisterInEax,
 | 
			
		||||
#    IN   UINT32  RegisterInEcx,
 | 
			
		||||
#    OUT  UINT32  *RegisterOutEax  OPTIONAL,
 | 
			
		||||
#    OUT  UINT32  *RegisterOutEbx  OPTIONAL,
 | 
			
		||||
#    OUT  UINT32  *RegisterOutEcx  OPTIONAL,
 | 
			
		||||
#    OUT  UINT32  *RegisterOutEdx  OPTIONAL
 | 
			
		||||
#    )
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
ASM_GLOBAL ASM_PFX(AsmCpuidEx)
 | 
			
		||||
ASM_PFX(AsmCpuidEx):
 | 
			
		||||
    push    %rbx
 | 
			
		||||
    movl    %ecx,%eax
 | 
			
		||||
    movl    %edx,%ecx
 | 
			
		||||
    push    %rax                  # save Index on stack
 | 
			
		||||
    cpuid
 | 
			
		||||
    mov     0x38(%rsp), %r10
 | 
			
		||||
    test    %r10, %r10
 | 
			
		||||
    jz      L1
 | 
			
		||||
    mov     %ecx,(%r10)
 | 
			
		||||
L1: 
 | 
			
		||||
    mov     %r8, %rcx
 | 
			
		||||
    jrcxz   L2
 | 
			
		||||
    movl    %eax,(%rcx)
 | 
			
		||||
L2: 
 | 
			
		||||
    mov     %r9, %rcx
 | 
			
		||||
    jrcxz   L3
 | 
			
		||||
    mov     %ebx, (%rcx)
 | 
			
		||||
L3: 
 | 
			
		||||
    mov     0x40(%rsp), %rcx
 | 
			
		||||
    jrcxz   L4
 | 
			
		||||
    mov     %edx, (%rcx)
 | 
			
		||||
L4: 
 | 
			
		||||
    pop     %rax                  # restore Index to rax as return value
 | 
			
		||||
    pop     %rbx
 | 
			
		||||
    ret
 | 
			
		||||
							
								
								
									
										64
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuIdEx.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuIdEx.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   CpuIdEx.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmCpuidEx function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;  UINT32
 | 
			
		||||
;  EFIAPI
 | 
			
		||||
;  AsmCpuidEx (
 | 
			
		||||
;    IN   UINT32  RegisterInEax,
 | 
			
		||||
;    IN   UINT32  RegisterInEcx,
 | 
			
		||||
;    OUT  UINT32  *RegisterOutEax  OPTIONAL,
 | 
			
		||||
;    OUT  UINT32  *RegisterOutEbx  OPTIONAL,
 | 
			
		||||
;    OUT  UINT32  *RegisterOutEcx  OPTIONAL,
 | 
			
		||||
;    OUT  UINT32  *RegisterOutEdx  OPTIONAL
 | 
			
		||||
;    )
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmCpuidEx  PROC    USES    rbx
 | 
			
		||||
    mov     eax, ecx
 | 
			
		||||
    mov     ecx, edx
 | 
			
		||||
    push    rax                         ; save Index on stack
 | 
			
		||||
    cpuid
 | 
			
		||||
    mov     r10, [rsp + 38h]
 | 
			
		||||
    test    r10, r10
 | 
			
		||||
    jz      @F
 | 
			
		||||
    mov     [r10], ecx
 | 
			
		||||
@@:
 | 
			
		||||
    mov     rcx, r8
 | 
			
		||||
    jrcxz   @F
 | 
			
		||||
    mov     [rcx], eax
 | 
			
		||||
@@:
 | 
			
		||||
    mov     rcx, r9
 | 
			
		||||
    jrcxz   @F
 | 
			
		||||
    mov     [rcx], ebx
 | 
			
		||||
@@:
 | 
			
		||||
    mov     rcx, [rsp + 40h]
 | 
			
		||||
    jrcxz   @F
 | 
			
		||||
    mov     [rcx], edx
 | 
			
		||||
@@:
 | 
			
		||||
    pop     rax                         ; restore Index to rax as return value
 | 
			
		||||
    ret
 | 
			
		||||
AsmCpuidEx  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										37
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuPause.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								UnixPkg/Library/UnixBaseLib/X64/CpuPause.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
;------------------------------------------------------------------------------ ;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   CpuPause.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   CpuPause function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; CpuPause (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
CpuPause    PROC
 | 
			
		||||
    pause
 | 
			
		||||
    ret
 | 
			
		||||
CpuPause    ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisableCache.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisableCache.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
#
 | 
			
		||||
# Module Name:
 | 
			
		||||
#
 | 
			
		||||
#   DisableCache.S
 | 
			
		||||
#
 | 
			
		||||
# Abstract:
 | 
			
		||||
#
 | 
			
		||||
#   Set the CD bit of CR0 to 1, clear the NW bit of CR0 to 0, and flush all caches with a
 | 
			
		||||
#   WBINVD instruction.
 | 
			
		||||
#
 | 
			
		||||
# Notes:
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# VOID
 | 
			
		||||
# EFIAPI
 | 
			
		||||
# AsmDisableCache (
 | 
			
		||||
#   VOID
 | 
			
		||||
#   );
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
ASM_GLOBAL ASM_PFX(AsmDisableCache)
 | 
			
		||||
ASM_PFX(AsmDisableCache):
 | 
			
		||||
    movq    %cr0, %rax
 | 
			
		||||
    btsq    $30, %rax
 | 
			
		||||
    btrq    $29, %rax
 | 
			
		||||
    movq    %rax, %cr0
 | 
			
		||||
    wbinvd
 | 
			
		||||
    ret
 | 
			
		||||
							
								
								
									
										43
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisableCache.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisableCache.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   DisableCache.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   Set the CD bit of CR0 to 1, clear the NW bit of CR0 to 0, and flush all caches with a
 | 
			
		||||
;   WBINVD instruction.
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmDisableCache (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmDisableCache PROC
 | 
			
		||||
    mov     rax, cr0
 | 
			
		||||
    bts     rax, 30
 | 
			
		||||
    btr     rax, 29
 | 
			
		||||
    mov     cr0, rax
 | 
			
		||||
    wbinvd
 | 
			
		||||
    ret
 | 
			
		||||
AsmDisableCache ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisableInterrupts.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisableInterrupts.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   DisableInterrupts.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   DisableInterrupts function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; DisableInterrupts (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
DisableInterrupts   PROC
 | 
			
		||||
    cli
 | 
			
		||||
    ret
 | 
			
		||||
DisableInterrupts   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										82
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisablePaging64.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisablePaging64.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006 - 2009, 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.
 | 
			
		||||
#
 | 
			
		||||
# Module Name:
 | 
			
		||||
#
 | 
			
		||||
#   DisablePaging64.S
 | 
			
		||||
#
 | 
			
		||||
# Abstract:
 | 
			
		||||
#
 | 
			
		||||
#   AsmDisablePaging64 function
 | 
			
		||||
#
 | 
			
		||||
# Notes:
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# VOID
 | 
			
		||||
# EFIAPI
 | 
			
		||||
# InternalX86DisablePaging64 (
 | 
			
		||||
#   IN      UINT16                    Cs,
 | 
			
		||||
#   IN      UINT32                    EntryPoint,
 | 
			
		||||
#   IN      UINT32                    Context1,  OPTIONAL
 | 
			
		||||
#   IN      UINT32                    Context2,  OPTIONAL
 | 
			
		||||
#   IN      UINT32                    NewStack
 | 
			
		||||
#   );
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ASM_GLOBAL ASM_PFX(InternalX86DisablePaging64)
 | 
			
		||||
ASM_PFX(InternalX86DisablePaging64):
 | 
			
		||||
    cli    
 | 
			
		||||
    lea    L1(%rip), %rsi                 # rsi <- The start address of transition code
 | 
			
		||||
    mov    0x28(%rsp), %edi               # rdi <- New stack
 | 
			
		||||
    lea    _mTransitionEnd(%rip), %rax    # rax <- end of transition code
 | 
			
		||||
    sub    %rsi, %rax                     # rax <- The size of transition piece code
 | 
			
		||||
    add    $4, %rax                       # round rax up to the next 4 byte boundary
 | 
			
		||||
    and    $0xfc, %al
 | 
			
		||||
    sub    %rax, %rdi                     # rdi <- use stack to hold transition code 
 | 
			
		||||
    mov    %edi, %r10d                    # r10 <- The start address of transicition code below 4G
 | 
			
		||||
    push   %rcx                           # save rcx to stack
 | 
			
		||||
    mov    %rax, %rcx                     # rcx <- The size of transition piece code
 | 
			
		||||
    rep
 | 
			
		||||
    movsb                                 # copy transition code to (new stack - 64byte) below 4G
 | 
			
		||||
    pop    %rcx                           # restore rcx
 | 
			
		||||
   
 | 
			
		||||
    mov    %r8d, %esi 
 | 
			
		||||
    mov    %r9d, %edi 
 | 
			
		||||
    mov    %r10d, %eax
 | 
			
		||||
    sub    $4, %eax
 | 
			
		||||
    push   %rcx                           # push Cs to stack
 | 
			
		||||
    push   %r10                           # push address of transition code on stack  
 | 
			
		||||
    .byte  0x48, 0xcb                     # retq: Use far return to load CS register from stack
 | 
			
		||||
                                          # (Use raw byte code since some GNU assemblers generates incorrect code for "retq")  
 | 
			
		||||
L1:
 | 
			
		||||
    mov    %eax,%esp                      # set up new stack
 | 
			
		||||
    mov    %cr0,%rax
 | 
			
		||||
    btr    $0x1f,%eax                     # clear CR0.PG
 | 
			
		||||
    mov    %rax,%cr0                      # disable paging
 | 
			
		||||
 | 
			
		||||
    mov    %edx,%ebx                      # save EntryPoint to ebx, for rdmsr will overwrite edx
 | 
			
		||||
    mov    $0xc0000080,%ecx
 | 
			
		||||
    rdmsr  
 | 
			
		||||
    and    $0xfe,%ah                      # clear LME
 | 
			
		||||
    wrmsr  
 | 
			
		||||
    mov    %cr4,%rax
 | 
			
		||||
    and    $0xdf,%al                      # clear PAE
 | 
			
		||||
    mov    %rax,%cr4
 | 
			
		||||
    push   %rdi                           # push Context2
 | 
			
		||||
    push   %rsi                           # push Context1
 | 
			
		||||
    callq  *%rbx                          # transfer control to EntryPoint
 | 
			
		||||
    jmp    .                              # no one should get here
 | 
			
		||||
 | 
			
		||||
_mTransitionEnd :
 | 
			
		||||
							
								
								
									
										84
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisablePaging64.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								UnixPkg/Library/UnixBaseLib/X64/DisablePaging64.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   DisablePaging64.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmDisablePaging64 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; InternalX86DisablePaging64 (
 | 
			
		||||
;   IN      UINT16                    Cs,
 | 
			
		||||
;   IN      UINT32                    EntryPoint,
 | 
			
		||||
;   IN      UINT32                    Context1,  OPTIONAL
 | 
			
		||||
;   IN      UINT32                    Context2,  OPTIONAL
 | 
			
		||||
;   IN      UINT32                    NewStack
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
InternalX86DisablePaging64    PROC
 | 
			
		||||
    cli
 | 
			
		||||
    lea     rsi, @F                     ; rsi <- The start address of transition code
 | 
			
		||||
    mov     edi, [rsp + 28h]            ; rdi <- New stack
 | 
			
		||||
    lea     rax, mTransitionEnd         ; rax <- end of transition code
 | 
			
		||||
    sub     rax, rsi                    ; rax <- The size of transition piece code 
 | 
			
		||||
    add     rax, 4                      ; Round RAX up to the next 4 byte boundary
 | 
			
		||||
    and     al, 0fch
 | 
			
		||||
    sub     rdi, rax                    ; rdi <- Use stack to hold transition code
 | 
			
		||||
    mov     r10d, edi                   ; r10 <- The start address of transicition code below 4G
 | 
			
		||||
    push    rcx                         ; save rcx to stack
 | 
			
		||||
    mov     rcx, rax                    ; rcx <- The size of transition piece code
 | 
			
		||||
    rep     movsb                       ; copy transition code to top of new stack which must be below 4GB
 | 
			
		||||
    pop     rcx                         ; restore rcx
 | 
			
		||||
    
 | 
			
		||||
    mov     esi, r8d
 | 
			
		||||
    mov     edi, r9d
 | 
			
		||||
    mov     eax, r10d                   ; eax <- start of the transition code on the stack
 | 
			
		||||
    sub     eax, 4                      ; eax <- One slot below transition code on the stack
 | 
			
		||||
    push    rcx                         ; push Cs to stack
 | 
			
		||||
    push    r10                         ; push address of tansition code on stack
 | 
			
		||||
    DB      48h                         ; prefix to composite "retq" with next "retf"
 | 
			
		||||
    retf                                ; Use far return to load CS register from stack
 | 
			
		||||
 | 
			
		||||
; Start of transition code
 | 
			
		||||
@@:
 | 
			
		||||
    mov     esp, eax                    ; set up new stack
 | 
			
		||||
    mov     rax, cr0
 | 
			
		||||
    btr     eax, 31                     ; Clear CR0.PG
 | 
			
		||||
    mov     cr0, rax                    ; disable paging and caches
 | 
			
		||||
    
 | 
			
		||||
    mov     ebx, edx                    ; save EntryPoint to rbx, for rdmsr will overwrite rdx
 | 
			
		||||
    mov     ecx, 0c0000080h
 | 
			
		||||
    rdmsr
 | 
			
		||||
    and     ah, NOT 1                   ; clear LME
 | 
			
		||||
    wrmsr
 | 
			
		||||
    mov     rax, cr4
 | 
			
		||||
    and     al, NOT (1 SHL 5)           ; clear PAE
 | 
			
		||||
    mov     cr4, rax
 | 
			
		||||
    push    rdi                         ; push Context2
 | 
			
		||||
    push    rsi                         ; push Context1
 | 
			
		||||
    call    rbx                         ; transfer control to EntryPoint
 | 
			
		||||
    hlt                                 ; no one should get here
 | 
			
		||||
InternalX86DisablePaging64    ENDP
 | 
			
		||||
 | 
			
		||||
mTransitionEnd LABEL    BYTE
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableCache.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableCache.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
#
 | 
			
		||||
# Module Name:
 | 
			
		||||
#
 | 
			
		||||
#   EnableCache.S
 | 
			
		||||
#
 | 
			
		||||
# Abstract:
 | 
			
		||||
#
 | 
			
		||||
#   Flush all caches with a WBINVD instruction, clear the CD bit of CR0 to 0, and clear 
 | 
			
		||||
#   the NW bit of CR0 to 0
 | 
			
		||||
#
 | 
			
		||||
# Notes:
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# VOID
 | 
			
		||||
# EFIAPI
 | 
			
		||||
# AsmEnableCache (
 | 
			
		||||
#   VOID
 | 
			
		||||
#   );
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
ASM_GLOBAL ASM_PFX(AsmEnableCache)
 | 
			
		||||
ASM_PFX(AsmEnableCache):
 | 
			
		||||
    wbinvd
 | 
			
		||||
    movq    %cr0, %rax
 | 
			
		||||
    btrq    $30, %rax
 | 
			
		||||
    btrq    $29, %rax
 | 
			
		||||
    movq    %rax, %cr0
 | 
			
		||||
    ret
 | 
			
		||||
							
								
								
									
										43
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableCache.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableCache.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   EnableCache.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;  Flush all caches with a WBINVD instruction, clear the CD bit of CR0 to 0, and clear 
 | 
			
		||||
;  the NW bit of CR0 to 0
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmEnableCache (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmEnableCache PROC
 | 
			
		||||
    wbinvd
 | 
			
		||||
    mov     rax, cr0
 | 
			
		||||
    btr     rax, 29
 | 
			
		||||
    btr     rax, 30
 | 
			
		||||
    mov     cr0, rax
 | 
			
		||||
    ret
 | 
			
		||||
AsmEnableCache ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										36
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableDisableInterrupts.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableDisableInterrupts.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006 - 2009, 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.
 | 
			
		||||
#
 | 
			
		||||
# Module Name:
 | 
			
		||||
#
 | 
			
		||||
#   EnableDisableInterrupts.S
 | 
			
		||||
#
 | 
			
		||||
# Abstract:
 | 
			
		||||
#
 | 
			
		||||
#   EnableDisableInterrupts function
 | 
			
		||||
#
 | 
			
		||||
# Notes:
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# VOID
 | 
			
		||||
# EFIAPI
 | 
			
		||||
# EnableDisableInterrupts (
 | 
			
		||||
#   VOID
 | 
			
		||||
#   );
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
ASM_GLOBAL ASM_PFX(EnableDisableInterrupts)
 | 
			
		||||
ASM_PFX(EnableDisableInterrupts):
 | 
			
		||||
    sti
 | 
			
		||||
    cli
 | 
			
		||||
    ret
 | 
			
		||||
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableDisableInterrupts.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableDisableInterrupts.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   EnableDisableInterrupts.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   EnableDisableInterrupts function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; EnableDisableInterrupts (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
EnableDisableInterrupts PROC
 | 
			
		||||
    sti
 | 
			
		||||
    cli
 | 
			
		||||
    ret
 | 
			
		||||
EnableDisableInterrupts ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableInterrupts.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/EnableInterrupts.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   EnableInterrupts.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   EnableInterrupts function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; EnableInterrupts (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
EnableInterrupts    PROC
 | 
			
		||||
    sti
 | 
			
		||||
    ret
 | 
			
		||||
EnableInterrupts    ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/FlushCacheLine.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/FlushCacheLine.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   FlushCacheLine.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmFlushCacheLine function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID *
 | 
			
		||||
; EFIAPI 
 | 
			
		||||
; AsmFlushCacheLine (
 | 
			
		||||
;   IN      VOID                      *LinearAddress
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmFlushCacheLine   PROC
 | 
			
		||||
    clflush [rcx]
 | 
			
		||||
    mov     rax, rcx
 | 
			
		||||
    ret
 | 
			
		||||
AsmFlushCacheLine   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/FxRestore.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/FxRestore.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   FxRestore.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmFxRestore function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; InternalX86FxRestore (
 | 
			
		||||
;   IN CONST IA32_FX_BUFFER *Buffer
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
InternalX86FxRestore  PROC
 | 
			
		||||
    fxrstor [rcx]
 | 
			
		||||
    ret
 | 
			
		||||
InternalX86FxRestore  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/FxSave.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/FxSave.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   FxSave.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmFxSave function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; InternalX86FxSave (
 | 
			
		||||
;   OUT IA32_FX_BUFFER *Buffer
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
InternalX86FxSave PROC
 | 
			
		||||
    fxsave  [rcx]
 | 
			
		||||
    ret
 | 
			
		||||
InternalX86FxSave ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										1801
									
								
								UnixPkg/Library/UnixBaseLib/X64/GccInline.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1801
									
								
								UnixPkg/Library/UnixBaseLib/X64/GccInline.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/Invd.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/Invd.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   Invd.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmInvd function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmInvd (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmInvd PROC
 | 
			
		||||
    invd
 | 
			
		||||
    ret
 | 
			
		||||
AsmInvd ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										88
									
								
								UnixPkg/Library/UnixBaseLib/X64/LongJump.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								UnixPkg/Library/UnixBaseLib/X64/LongJump.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
#
 | 
			
		||||
# Module Name:
 | 
			
		||||
#
 | 
			
		||||
#   LongJump.S
 | 
			
		||||
#
 | 
			
		||||
# Abstract:
 | 
			
		||||
#
 | 
			
		||||
#   Implementation of _LongJump() on x64.
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# VOID
 | 
			
		||||
# EFIAPI
 | 
			
		||||
# InternalLongJump (
 | 
			
		||||
#   IN      BASE_LIBRARY_JUMP_BUFFER  *JumpBuffer, // %rcx
 | 
			
		||||
#   IN      UINTN                     Value        // %rdx
 | 
			
		||||
#   );
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
ASM_GLOBAL ASM_PFX(EfiInternalLongJump)
 | 
			
		||||
ASM_PFX(EfiInternalLongJump):
 | 
			
		||||
    mov     (%rcx), %rbx
 | 
			
		||||
    mov     0x8(%rcx), %rsp
 | 
			
		||||
    mov     0x10(%rcx), %rbp
 | 
			
		||||
    mov     0x18(%rcx), %rdi
 | 
			
		||||
    mov     0x20(%rcx), %rsi
 | 
			
		||||
    mov     0x28(%rcx), %r12
 | 
			
		||||
    mov     0x30(%rcx), %r13
 | 
			
		||||
    mov     0x38(%rcx), %r14
 | 
			
		||||
    mov     0x40(%rcx), %r15
 | 
			
		||||
    # load non-volatile fp registers
 | 
			
		||||
    ldmxcsr 0x50(%rcx)
 | 
			
		||||
    movdqu  0x58(%rcx), %xmm6
 | 
			
		||||
    movdqu  0x68(%rcx), %xmm7
 | 
			
		||||
    movdqu  0x78(%rcx), %xmm8
 | 
			
		||||
    movdqu  0x88(%rcx), %xmm9
 | 
			
		||||
    movdqu  0x98(%rcx), %xmm10
 | 
			
		||||
    movdqu  0xA8(%rcx), %xmm11
 | 
			
		||||
    movdqu  0xB8(%rcx), %xmm12
 | 
			
		||||
    movdqu  0xC8(%rcx), %xmm13
 | 
			
		||||
    movdqu  0xD8(%rcx), %xmm14
 | 
			
		||||
    movdqu  0xE8(%rcx), %xmm15  
 | 
			
		||||
    mov     %rdx, %rax          # set return value
 | 
			
		||||
    jmp     *0x48(%rcx)
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# VOID
 | 
			
		||||
# EFIAPI
 | 
			
		||||
# UnixInternalLongJump (
 | 
			
		||||
#   IN      BASE_LIBRARY_JUMP_BUFFER  *JumpBuffer, // %rdi
 | 
			
		||||
#   IN      UINTN                     Value        // %rsi
 | 
			
		||||
#   );
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
ASM_GLOBAL ASM_PFX(InternalLongJump)
 | 
			
		||||
ASM_PFX(InternalLongJump):
 | 
			
		||||
    mov     (%rdi), %rbx
 | 
			
		||||
    mov     0x8(%rdi), %rsp
 | 
			
		||||
    mov     0x10(%rdi), %rbp
 | 
			
		||||
    mov     0x18(%rdi), %rdi
 | 
			
		||||
    mov     0x20(%rdi), %rsi
 | 
			
		||||
    mov     0x28(%rdi), %r12
 | 
			
		||||
    mov     0x30(%rdi), %r13
 | 
			
		||||
    mov     0x38(%rdi), %r14
 | 
			
		||||
    mov     0x40(%rdi), %r15
 | 
			
		||||
    # load non-volatile fp registers
 | 
			
		||||
    ldmxcsr 0x50(%rdi)
 | 
			
		||||
    movdqu  0x58(%rdi), %xmm6
 | 
			
		||||
    movdqu  0x68(%rdi), %xmm7
 | 
			
		||||
    movdqu  0x78(%rdi), %xmm8
 | 
			
		||||
    movdqu  0x88(%rdi), %xmm9
 | 
			
		||||
    movdqu  0x98(%rdi), %xmm10
 | 
			
		||||
    movdqu  0xA8(%rdi), %xmm11
 | 
			
		||||
    movdqu  0xB8(%rdi), %xmm12
 | 
			
		||||
    movdqu  0xC8(%rdi), %xmm13
 | 
			
		||||
    movdqu  0xD8(%rdi), %xmm14
 | 
			
		||||
    movdqu  0xE8(%rdi), %xmm15  
 | 
			
		||||
    mov     %rsi, %rax          # set return value
 | 
			
		||||
    jmp     *0x48(%rdi)
 | 
			
		||||
							
								
								
									
										58
									
								
								UnixPkg/Library/UnixBaseLib/X64/LongJump.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								UnixPkg/Library/UnixBaseLib/X64/LongJump.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   LongJump.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   Implementation of _LongJump() on x64.
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; InternalLongJump (
 | 
			
		||||
;   IN      BASE_LIBRARY_JUMP_BUFFER  *JumpBuffer,
 | 
			
		||||
;   IN      UINTN                     Value
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
InternalLongJump    PROC
 | 
			
		||||
    mov     rbx, [rcx]
 | 
			
		||||
    mov     rsp, [rcx + 8]
 | 
			
		||||
    mov     rbp, [rcx + 10h]
 | 
			
		||||
    mov     rdi, [rcx + 18h]
 | 
			
		||||
    mov     rsi, [rcx + 20h]
 | 
			
		||||
    mov     r12, [rcx + 28h]
 | 
			
		||||
    mov     r13, [rcx + 30h]
 | 
			
		||||
    mov     r14, [rcx + 38h]
 | 
			
		||||
    mov     r15, [rcx + 40h]
 | 
			
		||||
    ; load non-volatile fp registers
 | 
			
		||||
    ldmxcsr [rcx + 50h]
 | 
			
		||||
    movdqu  xmm6,  [rcx + 58h]
 | 
			
		||||
    movdqu  xmm7,  [rcx + 68h]
 | 
			
		||||
    movdqu  xmm8,  [rcx + 78h]
 | 
			
		||||
    movdqu  xmm9,  [rcx + 88h]
 | 
			
		||||
    movdqu  xmm10, [rcx + 98h]
 | 
			
		||||
    movdqu  xmm11, [rcx + 0A8h]
 | 
			
		||||
    movdqu  xmm12, [rcx + 0B8h]
 | 
			
		||||
    movdqu  xmm13, [rcx + 0C8h]
 | 
			
		||||
    movdqu  xmm14, [rcx + 0D8h]
 | 
			
		||||
    movdqu  xmm15, [rcx + 0E8h]
 | 
			
		||||
    mov     rax, rdx               ; set return value
 | 
			
		||||
    jmp     qword ptr [rcx + 48h]
 | 
			
		||||
InternalLongJump    ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										43
									
								
								UnixPkg/Library/UnixBaseLib/X64/Monitor.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								UnixPkg/Library/UnixBaseLib/X64/Monitor.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   Monitor.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmMonitor function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmMonitor (
 | 
			
		||||
;   IN      UINTN                     Eax,
 | 
			
		||||
;   IN      UINTN                     Ecx,
 | 
			
		||||
;   IN      UINTN                     Edx
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmMonitor  PROC
 | 
			
		||||
    mov     eax, ecx
 | 
			
		||||
    mov     ecx, edx
 | 
			
		||||
    mov     edx, r8d
 | 
			
		||||
    DB      0fh, 1, 0c8h                ; monitor
 | 
			
		||||
    ret
 | 
			
		||||
AsmMonitor  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/Mwait.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/Mwait.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   Mwait.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmMwait function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmMwait (
 | 
			
		||||
;   IN      UINTN                     Eax,
 | 
			
		||||
;   IN      UINTN                     Ecx
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmMwait    PROC
 | 
			
		||||
    mov     eax, ecx
 | 
			
		||||
    mov     ecx, edx
 | 
			
		||||
    DB      0fh, 1, 0c9h                ; mwait
 | 
			
		||||
    ret
 | 
			
		||||
AsmMwait    ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										153
									
								
								UnixPkg/Library/UnixBaseLib/X64/Non-existing.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								UnixPkg/Library/UnixBaseLib/X64/Non-existing.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,153 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Non-existing BaseLib functions on x64
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include <Library/BaseLib.h>
 | 
			
		||||
#include <Library/DebugLib.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // This function cannot work on x64 platform
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // This function cannot work on x64 platform
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  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
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  //
 | 
			
		||||
  // This function cannot work on x64 platform.
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (FALSE);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCr0.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCr0.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadCr0.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadCr0 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadCr0 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadCr0  PROC
 | 
			
		||||
    mov     rax, cr0
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadCr0  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCr2.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCr2.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadCr2.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadCr2 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadCr2 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadCr2  PROC
 | 
			
		||||
    mov     rax, cr2
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadCr2  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCr3.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCr3.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadCr3.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadCr3 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadCr3 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadCr3  PROC
 | 
			
		||||
    mov     rax, cr3
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadCr3  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCr4.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCr4.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadCr4.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadCr4 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadCr4 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadCr4  PROC
 | 
			
		||||
    mov     rax, cr4
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadCr4  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCs.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadCs.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadCs.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadCs function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT16
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadCs (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadCs   PROC
 | 
			
		||||
    mov     eax, cs
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadCs   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr0.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr0.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDr0.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDr0 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDr0 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDr0  PROC
 | 
			
		||||
    mov     rax, dr0
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDr0  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr1.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr1.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDr1.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDr1 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDr1 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDr1  PROC
 | 
			
		||||
    mov     rax, dr1
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDr1  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr2.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr2.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDr2.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDr2 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDr2 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDr2  PROC
 | 
			
		||||
    mov     rax, dr2
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDr2  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr3.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr3.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDr3.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDr3 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDr3 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDr3  PROC
 | 
			
		||||
    mov     rax, dr3
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDr3  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr4.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr4.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDr4.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDr4 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDr4 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDr4  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; There's no obvious reason to access this register, since it's aliased to
 | 
			
		||||
    ; DR7 when DE=0 or an exception generated when DE=1
 | 
			
		||||
    ;
 | 
			
		||||
    DB      0fh, 21h, 0e0h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDr4  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr5.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr5.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDr5.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDr5 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDr5 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDr5  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; There's no obvious reason to access this register, since it's aliased to
 | 
			
		||||
    ; DR7 when DE=0 or an exception generated when DE=1
 | 
			
		||||
    ;
 | 
			
		||||
    DB      0fh, 21h, 0e8h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDr5  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr6.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr6.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDr6.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDr6 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDr6 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDr6  PROC
 | 
			
		||||
    mov     rax, dr6
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDr6  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr7.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDr7.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDr7.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDr7 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDr7 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDr7  PROC
 | 
			
		||||
    mov     rax, dr7
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDr7  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDs.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadDs.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadDs.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadDs function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT16
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadDs (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadDs   PROC
 | 
			
		||||
    mov     eax, ds
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadDs   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadEflags.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadEflags.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadEflags.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadEflags function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINTN
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadEflags (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadEflags   PROC
 | 
			
		||||
    pushfq
 | 
			
		||||
    pop     rax
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadEflags   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadEs.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadEs.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadEs.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadEs function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT16
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadEs (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadEs   PROC
 | 
			
		||||
    mov     eax, es
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadEs   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadFs.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadFs.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadFs.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadFs function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT16
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadFs (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadFs   PROC
 | 
			
		||||
    mov     eax, fs
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadFs   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadGdtr.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadGdtr.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadGdtr.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadGdtr function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; InternalX86ReadGdtr (
 | 
			
		||||
;   OUT IA32_DESCRIPTOR  *Gdtr
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
InternalX86ReadGdtr   PROC
 | 
			
		||||
    sgdt    fword ptr [rcx]
 | 
			
		||||
    ret
 | 
			
		||||
InternalX86ReadGdtr   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadGs.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadGs.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadGs.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadGs function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT16
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadGs (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadGs   PROC
 | 
			
		||||
    mov     eax, gs
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadGs   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadIdtr.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadIdtr.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadIdtr.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadIdtr function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; VOID
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; InternalX86ReadIdtr (
 | 
			
		||||
;   OUT     IA32_DESCRIPTOR           *Idtr
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
InternalX86ReadIdtr   PROC
 | 
			
		||||
    sidt    fword ptr [rcx]
 | 
			
		||||
    ret
 | 
			
		||||
InternalX86ReadIdtr   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadLdtr.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadLdtr.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadLdtr.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadLdtr function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT16
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadLdtr (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadLdtr PROC
 | 
			
		||||
    sldt    eax
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadLdtr ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm0.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm0.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMm0.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMm0 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMm0 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMm0  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; 64-bit MASM doesn't support MMX instructions, so use opcode here
 | 
			
		||||
    ;
 | 
			
		||||
    DB      48h, 0fh, 7eh, 0c0h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMm0  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm1.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm1.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMm1.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMm1 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMm1 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMm1  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; 64-bit MASM doesn't support MMX instructions, so use opcode here
 | 
			
		||||
    ;
 | 
			
		||||
    DB      48h, 0fh, 7eh, 0c8h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMm1  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm2.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm2.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMm2.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMm2 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMm2 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMm2  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; 64-bit MASM doesn't support MMX instructions, so use opcode here
 | 
			
		||||
    ;
 | 
			
		||||
    DB      48h, 0fh, 7eh, 0d0h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMm2  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm3.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm3.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMm3.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMm3 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMm3 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMm3  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; 64-bit MASM doesn't support MMX instructions, so use opcode here
 | 
			
		||||
    ;
 | 
			
		||||
    DB      48h, 0fh, 7eh, 0d8h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMm3  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm4.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm4.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMm4.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMm4 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMm4 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMm4  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; 64-bit MASM doesn't support MMX instructions, so use opcode here
 | 
			
		||||
    ;
 | 
			
		||||
    DB      48h, 0fh, 7eh, 0e0h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMm4  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm5.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm5.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMm5.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMm5 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMm5 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMm5  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; 64-bit MASM doesn't support MMX instructions, so use opcode here
 | 
			
		||||
    ;
 | 
			
		||||
    DB      48h, 0fh, 7eh, 0e8h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMm5  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm6.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm6.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMm6.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMm6 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMm6 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMm6  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; 64-bit MASM doesn't support MMX instructions, so use opcode here
 | 
			
		||||
    ;
 | 
			
		||||
    DB      48h, 0fh, 7eh, 0f0h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMm6  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm7.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMm7.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMm7.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMm7 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMm7 (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMm7  PROC
 | 
			
		||||
    ;
 | 
			
		||||
    ; 64-bit MASM doesn't support MMX instructions, so use opcode here
 | 
			
		||||
    ;
 | 
			
		||||
    DB      48h, 0fh, 7eh, 0f8h
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMm7  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										40
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMsr64.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMsr64.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadMsr64.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadMsr64 function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadMsr64 (
 | 
			
		||||
;   IN UINT32  Index
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadMsr64    PROC
 | 
			
		||||
    rdmsr                               ; edx & eax are zero extended
 | 
			
		||||
    shl     rdx, 20h
 | 
			
		||||
    or      rax, rdx
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadMsr64    ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMsr64.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadMsr64.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  CpuBreakpoint function.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2008, 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.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics.
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
unsigned __int64 __readmsr (int register);
 | 
			
		||||
 | 
			
		||||
#pragma intrinsic(__readmsr)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  Read data to MSR.
 | 
			
		||||
 | 
			
		||||
  @param  Index                Register index of MSR.
 | 
			
		||||
 | 
			
		||||
  @return Value read from MSR.
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
UINT64
 | 
			
		||||
EFIAPI
 | 
			
		||||
AsmReadMsr64 (
 | 
			
		||||
  IN UINT32  Index
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return __readmsr (Index);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadPmc.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadPmc.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadPmc.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadPmc function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT64
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadPmc (
 | 
			
		||||
;   IN UINT32   PmcIndex
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadPmc  PROC
 | 
			
		||||
    rdpmc
 | 
			
		||||
    shl     rdx, 20h
 | 
			
		||||
    or      rax, rdx
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadPmc  ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadSs.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadSs.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadSs.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadSs function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT16
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadSs (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadSs   PROC
 | 
			
		||||
    mov     eax, ss
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadSs   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
							
								
								
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadTr.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UnixPkg/Library/UnixBaseLib/X64/ReadTr.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
;
 | 
			
		||||
; Copyright (c) 2006, 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.
 | 
			
		||||
;
 | 
			
		||||
; Module Name:
 | 
			
		||||
;
 | 
			
		||||
;   ReadTr.Asm
 | 
			
		||||
;
 | 
			
		||||
; Abstract:
 | 
			
		||||
;
 | 
			
		||||
;   AsmReadTr function
 | 
			
		||||
;
 | 
			
		||||
; Notes:
 | 
			
		||||
;
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    .code
 | 
			
		||||
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
; UINT16
 | 
			
		||||
; EFIAPI
 | 
			
		||||
; AsmReadTr (
 | 
			
		||||
;   VOID
 | 
			
		||||
;   );
 | 
			
		||||
;------------------------------------------------------------------------------
 | 
			
		||||
AsmReadTr   PROC
 | 
			
		||||
    str     eax
 | 
			
		||||
    ret
 | 
			
		||||
AsmReadTr   ENDP
 | 
			
		||||
 | 
			
		||||
    END
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user