]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseRngLib/AArch64/ArmRng.asm
MdePkg/BaseRngLib: Add support for ARMv8.5 RNG instructions
[mirror_edk2.git] / MdePkg / Library / BaseRngLib / AArch64 / ArmRng.asm
diff --git a/MdePkg/Library/BaseRngLib/AArch64/ArmRng.asm b/MdePkg/Library/BaseRngLib/AArch64/ArmRng.asm
new file mode 100644 (file)
index 0000000..3314419
--- /dev/null
@@ -0,0 +1,39 @@
+;------------------------------------------------------------------------------\r
+;\r
+; ArmRndr() for AArch64\r
+;\r
+; Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>\r
+;\r
+; SPDX-License-Identifier: BSD-2-Clause-Patent\r
+;\r
+;------------------------------------------------------------------------------\r
+\r
+#include "BaseRngLibInternals.h"\r
+\r
+  EXPORT ArmRndr\r
+  AREA BaseLib_LowLevel, CODE, READONLY\r
+\r
+\r
+;/**\r
+;  Generates a random number using RNDR.\r
+;  Returns TRUE on success; FALSE on failure.\r
+;\r
+;  @param[out] Rand     Buffer pointer to store the 64-bit random value.\r
+;\r
+;  @retval TRUE         Random number generated successfully.\r
+;  @retval FALSE        Failed to generate the random number.\r
+;\r
+;**/\r
+;BOOLEAN\r
+;EFIAPI\r
+;ArmRndr (\r
+;  OUT UINT64 *Rand\r
+;  );\r
+;\r
+ArmRndr\r
+  mrs  x1, RNDR\r
+  str  x1, [x0]\r
+  cset x0, ne    // RNDR sets NZCV to 0b0100 on failure\r
+  ret\r
+\r
+  END\r