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