xref: /aosp_15_r20/external/arm-trusted-firmware/include/services/trng_svc.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2021, ARM Limited. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef TRNG_SVC_H
8*54fd6939SJiyong Park #define TRNG_SVC_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <stdbool.h>
11*54fd6939SJiyong Park #include <stdint.h>
12*54fd6939SJiyong Park 
13*54fd6939SJiyong Park #include <lib/smccc.h>
14*54fd6939SJiyong Park 
15*54fd6939SJiyong Park /* SMC function IDs for TRNG queries */
16*54fd6939SJiyong Park #define ARM_TRNG_VERSION	U(0x84000050)
17*54fd6939SJiyong Park #define ARM_TRNG_FEATURES	U(0x84000051)
18*54fd6939SJiyong Park #define ARM_TRNG_GET_UUID	U(0x84000052)
19*54fd6939SJiyong Park #define ARM_TRNG_RND32		U(0x84000053)
20*54fd6939SJiyong Park #define ARM_TRNG_RND64		U(0xc4000053)
21*54fd6939SJiyong Park 
22*54fd6939SJiyong Park /* TRNG version numbers */
23*54fd6939SJiyong Park #define TRNG_VERSION_MAJOR	(0x1)
24*54fd6939SJiyong Park #define TRNG_VERSION_MINOR	(0x0)
25*54fd6939SJiyong Park 
26*54fd6939SJiyong Park /* TRNG Error Numbers */
27*54fd6939SJiyong Park #define TRNG_E_SUCCESS		(0)
28*54fd6939SJiyong Park #define TRNG_E_NOT_SUPPORTED	(-1)
29*54fd6939SJiyong Park #define TRNG_E_INVALID_PARAMS	(-2)
30*54fd6939SJiyong Park #define TRNG_E_NO_ENTROPY	(-3)
31*54fd6939SJiyong Park #define TRNG_E_NOT_IMPLEMENTED	(-4)
32*54fd6939SJiyong Park 
33*54fd6939SJiyong Park #if TRNG_SUPPORT
34*54fd6939SJiyong Park void trng_setup(void);
35*54fd6939SJiyong Park bool is_trng_fid(uint32_t smc_fid);
36*54fd6939SJiyong Park #else
trng_setup(void)37*54fd6939SJiyong Park static inline void trng_setup(void)
38*54fd6939SJiyong Park {
39*54fd6939SJiyong Park }
40*54fd6939SJiyong Park 
is_trng_fid(uint32_t smc_fid)41*54fd6939SJiyong Park static inline bool is_trng_fid(uint32_t smc_fid)
42*54fd6939SJiyong Park {
43*54fd6939SJiyong Park 	return false;
44*54fd6939SJiyong Park }
45*54fd6939SJiyong Park #endif
46*54fd6939SJiyong Park uintptr_t trng_smc_handler(
47*54fd6939SJiyong Park 	uint32_t smc_fid,
48*54fd6939SJiyong Park 	u_register_t x1,
49*54fd6939SJiyong Park 	u_register_t x2,
50*54fd6939SJiyong Park 	u_register_t x3,
51*54fd6939SJiyong Park 	u_register_t x4,
52*54fd6939SJiyong Park 	void *cookie,
53*54fd6939SJiyong Park 	void *handle,
54*54fd6939SJiyong Park 	u_register_t flags
55*54fd6939SJiyong Park );
56*54fd6939SJiyong Park 
57*54fd6939SJiyong Park #endif /* TRNG_SVC_H */
58