|
@@ -28,70 +28,10 @@
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
#include <Library/RngLib.h>
|
|
#include <Library/RngLib.h>
|
|
-#include <Library/DebugLib.h>
|
|
|
|
-#include <Library/ArmTrngLib.h>
|
|
|
|
#include <Protocol/Rng.h>
|
|
#include <Protocol/Rng.h>
|
|
|
|
|
|
#include "RngDxeInternals.h"
|
|
#include "RngDxeInternals.h"
|
|
|
|
|
|
-// Maximum number of Rng algorithms.
|
|
|
|
-#define RNG_AVAILABLE_ALGO_MAX 2
|
|
|
|
-
|
|
|
|
-/** 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
|
|
|
|
- )
|
|
|
|
-{
|
|
|
|
- UINT64 DummyRand;
|
|
|
|
- UINT16 MajorRevision;
|
|
|
|
- UINT16 MinorRevision;
|
|
|
|
-
|
|
|
|
- // Rng algorithms 2 times, one for the allocation, one to populate.
|
|
|
|
- mAvailableAlgoArray = AllocateZeroPool (RNG_AVAILABLE_ALGO_MAX);
|
|
|
|
- if (mAvailableAlgoArray == NULL) {
|
|
|
|
- return EFI_OUT_OF_RESOURCES;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Check RngGetBytes() before advertising PcdCpuRngSupportedAlgorithm.
|
|
|
|
- if (!EFI_ERROR (RngGetBytes (sizeof (DummyRand), (UINT8 *)&DummyRand))) {
|
|
|
|
- CopyMem (
|
|
|
|
- &mAvailableAlgoArray[mAvailableAlgoArrayCount],
|
|
|
|
- PcdGetPtr (PcdCpuRngSupportedAlgorithm),
|
|
|
|
- sizeof (EFI_RNG_ALGORITHM)
|
|
|
|
- );
|
|
|
|
- mAvailableAlgoArrayCount++;
|
|
|
|
-
|
|
|
|
- DEBUG_CODE_BEGIN ();
|
|
|
|
- if (IsZeroGuid (PcdGetPtr (PcdCpuRngSupportedAlgorithm))) {
|
|
|
|
- DEBUG ((
|
|
|
|
- DEBUG_WARN,
|
|
|
|
- "PcdCpuRngSupportedAlgorithm should be a non-zero GUID\n"
|
|
|
|
- ));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- DEBUG_CODE_END ();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Raw algorithm (Trng)
|
|
|
|
- if (!EFI_ERROR (GetArmTrngVersion (&MajorRevision, &MinorRevision))) {
|
|
|
|
- CopyMem (
|
|
|
|
- &mAvailableAlgoArray[mAvailableAlgoArrayCount],
|
|
|
|
- &gEfiRngAlgorithmRaw,
|
|
|
|
- sizeof (EFI_RNG_ALGORITHM)
|
|
|
|
- );
|
|
|
|
- mAvailableAlgoArrayCount++;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return EFI_SUCCESS;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/** Free mAvailableAlgoArray.
|
|
/** Free mAvailableAlgoArray.
|
|
**/
|
|
**/
|
|
VOID
|
|
VOID
|