On Mon, Oct 03, 2022 at 09:34:52 +0200, pierre.gond...@arm.com wrote: > From: Sami Mujawar <sami.muja...@arm.com> > > Bugzilla: 3668 (https://bugzilla.tianocore.org/show_bug.cgi?id=3668) > > The Arm True Random Number Generator Firmware, Interface 1.0, > Platform Design Document > (https://developer.arm.com/documentation/den0098/latest/) > defines an interface between an Operating System (OS) executing > at EL1 and Firmware (FW) exposing a conditioned entropy source > that is provided by a TRNG back end. > > New function IDs have been defined by the specification for > accessing the TRNG services. Therefore, add these definitions > to the Arm standard SMC header. > > Signed-off-by: Pierre Gondois <pierre.gond...@arm.com> > --- > ArmPkg/Include/IndustryStandard/ArmStdSmc.h | 109 +++++++++++++++++++- > 1 file changed, 107 insertions(+), 2 deletions(-) > > diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h > b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h > index 78ce77cd734d..fa977a03a7ab 100644 > --- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h > +++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h > @@ -1,13 +1,20 @@ > /** @file > * > * Copyright (c) 2020, NUVIA Inc. All rights reserved.<BR> > -* Copyright (c) 2012-2017, ARM Limited. All rights reserved. > +* Copyright (c) 2012 - 2022, Arm Limited. All rights reserved. > * > * SPDX-License-Identifier: BSD-2-Clause-Patent > * > * @par Revision Reference: > -* - SMC Calling Convention version 1.2 > +* - [1] SMC Calling Convention version 1.2 > * (https://developer.arm.com/documentation/den0028/c/?lang=en) > +* - [2] Arm True Random Number Generator Firmware, Interface 1.0, > +* Platform Design Document. > +* (https://developer.arm.com/documentation/den0098/latest/) > +* > +* @par Glossary: > +* - TRNG - True Random Number Generator > +* > **/ > > #ifndef ARM_STD_SMC_H_ > @@ -139,4 +146,102 @@ > /* 0xbf00ff02 is reserved */ > #define ARM_SMC_ID_TOS_REVISION 0xbf00ff03 > > +// Firmware TRNG interface Function IDs > + > +/* > + SMC/HVC call to get the version of the TRNG backend, > + Cf. [2], 2.1 TRNG_VERSION > + Input values: > + W0 0x8400_0050 > + W1-W7 Reserved (MBZ) > + Return values: > + Success (W0 > 0) W0[31] MBZ > + W0[30:16] Major revision > + W0[15:0] Minor revision > + W1 - W3 Reserved (MBZ) > + Error (W0 < 0) > + NOT_SUPPORTED Function not implemented > +*/ > +#define FID_TRNG_VERSION 0x84000050
Hmm, I think, given this is ArmStdSmc.h, we ideally want ARM_SMC_ID_ prefixes on these, just like on the PSCI ones. / Leif > + > +/* > + SMC/HVC call to check if a TRNG function ID is implemented by the backend, > + Cf. [2], Section 2.2 TRNG_FEATURES > + Input Values > + W0 0x8400_0051 > + W1 trng_func_id > + W2-W7 Reserved (MBZ) > + Return values: > + Success (W0 >= 0): > + SUCCESS Function is implemented. > + > 0 Function is implemented and > + has specific capabilities, > + see function definition. > + Error (W0 < 0) > + NOT_SUPPORTED Function with FID=trng_func_id > + is not implemented > +*/ > +#define FID_TRNG_FEATURES 0x84000051 > + > +/* > + SMC/HVC call to get the UUID of the TRNG backend, > + Cf. [2], Section 2.3 TRNG_GET_UUID > + Input Values: > + W0 0x8400_0052 > + W1-W7 Reserved (MBZ) > + Return Values: > + Success (W0 != -1) > + W0 UUID[31:0] > + W1 UUID[63:32] > + W2 UUID[95:64] > + W3 UUID[127:96] > + Error (W0 = -1) > + W0 NOT_SUPPORTED > +*/ > +#define FID_TRNG_GET_UUID 0x84000052 > + > +/* > + AARCH32 SMC/HVC call to get entropy bits, Cf. [2], Section 2.4 TRNG_RND. > + Input values: > + W0 0x8400_0053 > + W2-W7 Reserved (MBZ) > + Return values: > + Success (W0 = 0): > + W0 MBZ > + W1 Entropy[95:64] > + W2 Entropy[63:32] > + W3 Entropy[31:0] > + Error (W0 < 0) > + W0 NOT_SUPPORTED > + NO_ENTROPY > + INVALID_PARAMETERS > + W1 - W3 Reserved (MBZ) > +*/ > +#define FID_TRNG_RND_AARCH32 0x84000053 > + > +/* > + AARCH64 SMC/HVC call to get entropy bits, Cf. [2], Section 2.4 TRNG_RND. > + Input values: > + X0 0xC400_0053 > + X2-X7 Reserved (MBZ) > + Return values: > + Success (X0 = 0): > + X0 MBZ > + X1 Entropy[191:128] > + X2 Entropy[127:64] > + X3 Entropy[63:0] > + Error (X0 < 0) > + X0 NOT_SUPPORTED > + NO_ENTROPY > + INVALID_PARAMETERS > + X1 - X3 Reserved (MBZ) > +*/ > +#define FID_TRNG_RND_AARCH64 0xC4000053 > + > +// Firmware TRNG status codes > +#define TRNG_STATUS_SUCCESS (INT32)(0) > +#define TRNG_STATUS_NOT_SUPPORTED (INT32)(-1) > +#define TRNG_STATUS_INVALID_PARAMETER (INT32)(-2) > +#define TRNG_STATUS_NO_ENTROPY (INT32)(-3) > + > #endif // ARM_STD_SMC_H_ > -- > 2.25.1 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#94751): https://edk2.groups.io/g/devel/message/94751 Mute This Topic: https://groups.io/mt/94085852/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-