Make BaseRngLib more generic by moving x86-specific functionality into 'Rand' and adding files under 'AArch64' to support the optional ARMv8.5 RNG instruction RNDR that is a part of FEAT_RNG. Signed-off-by: Rebecca Cran <rebecca@nuviainc.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			40 lines
		
	
	
		
			895 B
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			895 B
		
	
	
	
		
			NASM
		
	
	
	
	
	
| ;------------------------------------------------------------------------------
 | |
| ;
 | |
| ; ArmRndr() for AArch64
 | |
| ;
 | |
| ; Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
 | |
| ;
 | |
| ; SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| ;
 | |
| ;------------------------------------------------------------------------------
 | |
| 
 | |
| #include "BaseRngLibInternals.h"
 | |
| 
 | |
|   EXPORT ArmRndr
 | |
|   AREA BaseLib_LowLevel, CODE, READONLY
 | |
| 
 | |
| 
 | |
| ;/**
 | |
| ;  Generates a random number using RNDR.
 | |
| ;  Returns TRUE on success; FALSE on failure.
 | |
| ;
 | |
| ;  @param[out] Rand     Buffer pointer to store the 64-bit random value.
 | |
| ;
 | |
| ;  @retval TRUE         Random number generated successfully.
 | |
| ;  @retval FALSE        Failed to generate the random number.
 | |
| ;
 | |
| ;**/
 | |
| ;BOOLEAN
 | |
| ;EFIAPI
 | |
| ;ArmRndr (
 | |
| ;  OUT UINT64 *Rand
 | |
| ;  );
 | |
| ;
 | |
| ArmRndr
 | |
|   mrs  x1, RNDR
 | |
|   str  x1, [x0]
 | |
|   cset x0, ne    // RNDR sets NZCV to 0b0100 on failure
 | |
|   ret
 | |
| 
 | |
|   END
 |