xref: /rk3399_ARM-atf/include/services/trng_svc.h (revision 00bf236e32d55604bda14c2d0f9ce757e5d9292d)
17dfb9911SJimmy Brisson /*
2*0b22e591SJayanth Dodderi Chidanand  * Copyright (c) 2021-2022, ARM Limited. All rights reserved.
37dfb9911SJimmy Brisson  *
47dfb9911SJimmy Brisson  * SPDX-License-Identifier: BSD-3-Clause
57dfb9911SJimmy Brisson  */
67dfb9911SJimmy Brisson 
77dfb9911SJimmy Brisson #ifndef TRNG_SVC_H
87dfb9911SJimmy Brisson #define TRNG_SVC_H
97dfb9911SJimmy Brisson 
107dfb9911SJimmy Brisson #include <stdbool.h>
117dfb9911SJimmy Brisson #include <stdint.h>
127dfb9911SJimmy Brisson 
137dfb9911SJimmy Brisson #include <lib/smccc.h>
147dfb9911SJimmy Brisson 
157dfb9911SJimmy Brisson /* SMC function IDs for TRNG queries */
167dfb9911SJimmy Brisson #define ARM_TRNG_VERSION	U(0x84000050)
177dfb9911SJimmy Brisson #define ARM_TRNG_FEATURES	U(0x84000051)
187dfb9911SJimmy Brisson #define ARM_TRNG_GET_UUID	U(0x84000052)
197dfb9911SJimmy Brisson #define ARM_TRNG_RND32		U(0x84000053)
20*0b22e591SJayanth Dodderi Chidanand #define ARM_TRNG_RND64		U(0xC4000053)
217dfb9911SJimmy Brisson 
227dfb9911SJimmy Brisson /* TRNG version numbers */
237dfb9911SJimmy Brisson #define TRNG_VERSION_MAJOR	(0x1)
247dfb9911SJimmy Brisson #define TRNG_VERSION_MINOR	(0x0)
257dfb9911SJimmy Brisson 
267dfb9911SJimmy Brisson /* TRNG Error Numbers */
277dfb9911SJimmy Brisson #define TRNG_E_SUCCESS		(0)
287dfb9911SJimmy Brisson #define TRNG_E_NOT_SUPPORTED	(-1)
297dfb9911SJimmy Brisson #define TRNG_E_INVALID_PARAMS	(-2)
307dfb9911SJimmy Brisson #define TRNG_E_NO_ENTROPY	(-3)
317dfb9911SJimmy Brisson #define TRNG_E_NOT_IMPLEMENTED	(-4)
327dfb9911SJimmy Brisson 
33*0b22e591SJayanth Dodderi Chidanand /* TRNG Entropy Bit Numbers */
34*0b22e591SJayanth Dodderi Chidanand #define TRNG_RND32_ENTROPY_MAXBITS	(96U)
35*0b22e591SJayanth Dodderi Chidanand #define TRNG_RND64_ENTROPY_MAXBITS	(192U)
367dfb9911SJimmy Brisson 
37*0b22e591SJayanth Dodderi Chidanand /* Public API to perform the initial TRNG entropy setup */
38*0b22e591SJayanth Dodderi Chidanand void trng_setup(void);
39*0b22e591SJayanth Dodderi Chidanand 
40*0b22e591SJayanth Dodderi Chidanand /* Public API to verify function id is part of TRNG */
41*0b22e591SJayanth Dodderi Chidanand bool is_trng_fid(uint32_t smc_fid);
42*0b22e591SJayanth Dodderi Chidanand 
43*0b22e591SJayanth Dodderi Chidanand /* Handler to be called to handle TRNG smc calls */
447dfb9911SJimmy Brisson uintptr_t trng_smc_handler(
457dfb9911SJimmy Brisson 	uint32_t smc_fid,
467dfb9911SJimmy Brisson 	u_register_t x1,
477dfb9911SJimmy Brisson 	u_register_t x2,
487dfb9911SJimmy Brisson 	u_register_t x3,
497dfb9911SJimmy Brisson 	u_register_t x4,
507dfb9911SJimmy Brisson 	void *cookie,
517dfb9911SJimmy Brisson 	void *handle,
527dfb9911SJimmy Brisson 	u_register_t flags
537dfb9911SJimmy Brisson );
547dfb9911SJimmy Brisson 
557dfb9911SJimmy Brisson #endif /* TRNG_SVC_H */
56