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