| /** @file | |
| Arm specific code. | |
| Copyright (c) 2022, Arm Limited. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #include <Library/BaseLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/ArmTrngLib.h> | |
| #include "RngDxeInternals.h" | |
| // Maximum number of Rng algorithms. | |
| #define RNG_AVAILABLE_ALGO_MAX 1 | |
| /** Allocate and initialize mAvailableAlgoArray with the available | |
| Rng algorithms. Also update mAvailableAlgoArrayCount. | |
| @retval EFI_SUCCESS The function completed successfully. | |
| @retval EFI_OUT_OF_RESOURCES Could not allocate memory. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| GetAvailableAlgorithms ( | |
| VOID | |
| ) | |
| { | |
| UINT16 MajorRevision; | |
| UINT16 MinorRevision; | |
| // Rng algorithms 2 times, one for the allocation, one to populate. | |
| mAvailableAlgoArray = AllocateZeroPool (RNG_AVAILABLE_ALGO_MAX * sizeof (EFI_RNG_ALGORITHM)); | |
| if (mAvailableAlgoArray == NULL) { | |
| return EFI_OUT_OF_RESOURCES; | |
| } | |
| // Raw algorithm (Trng) | |
| if (!EFI_ERROR (GetArmTrngVersion (&MajorRevision, &MinorRevision))) { | |
| CopyMem ( | |
| &mAvailableAlgoArray[mAvailableAlgoArrayCount], | |
| &gEfiRngAlgorithmRaw, | |
| sizeof (EFI_RNG_ALGORITHM) | |
| ); | |
| mAvailableAlgoArrayCount++; | |
| } | |
| return EFI_SUCCESS; | |
| } |