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 Parkstatic inline void trng_setup(void) 38*54fd6939SJiyong Park { 39*54fd6939SJiyong Park } 40*54fd6939SJiyong Park is_trng_fid(uint32_t smc_fid)41*54fd6939SJiyong Parkstatic 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