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