1*e62748e3SManish V Badarkhe /* 2*e62748e3SManish V Badarkhe * Copyright (c) 2022 Arm Limited. All rights reserved. 3*e62748e3SManish V Badarkhe * 4*e62748e3SManish V Badarkhe * SPDX-License-Identifier: BSD-3-Clause 5*e62748e3SManish V Badarkhe * 6*e62748e3SManish V Badarkhe * DRTM service 7*e62748e3SManish V Badarkhe * 8*e62748e3SManish V Badarkhe * Authors: 9*e62748e3SManish V Badarkhe * Lucian Paul-Trifu <lucian.paultrifu@gmail.com> 10*e62748e3SManish V Badarkhe * Brian Nezvadovitz <brinez@microsoft.com> 2021-02-01 11*e62748e3SManish V Badarkhe * 12*e62748e3SManish V Badarkhe */ 13*e62748e3SManish V Badarkhe 14*e62748e3SManish V Badarkhe #ifndef ARM_DRTM_SVC_H 15*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_H 16*e62748e3SManish V Badarkhe 17*e62748e3SManish V Badarkhe /* 18*e62748e3SManish V Badarkhe * SMC function IDs for DRTM Service 19*e62748e3SManish V Badarkhe * Upper word bits set: Fast call, SMC64, Standard Secure Svc. Call (OEN = 4) 20*e62748e3SManish V Badarkhe */ 21*e62748e3SManish V Badarkhe #define DRTM_FID(func_num) \ 22*e62748e3SManish V Badarkhe ((SMC_TYPE_FAST << FUNCID_TYPE_SHIFT) | \ 23*e62748e3SManish V Badarkhe (SMC_64 << FUNCID_CC_SHIFT) | \ 24*e62748e3SManish V Badarkhe (OEN_STD_START << FUNCID_OEN_SHIFT) | \ 25*e62748e3SManish V Badarkhe ((func_num) << FUNCID_NUM_SHIFT)) 26*e62748e3SManish V Badarkhe 27*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_VERSION U(0x110) 28*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_FEATURES U(0x111) 29*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_UNPROTECT_MEM U(0x113) 30*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_DYNAMIC_LAUNCH U(0x114) 31*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_CLOSE_LOCALITY U(0x115) 32*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_GET_ERROR U(0x116) 33*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_SET_ERROR U(0x117) 34*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_SET_TCB_HASH U(0x118) 35*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_LOCK_TCB_HASH U(0x119) 36*e62748e3SManish V Badarkhe 37*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_VERSION DRTM_FID(DRTM_FNUM_SVC_VERSION) 38*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_FEATURES DRTM_FID(DRTM_FNUM_SVC_FEATURES) 39*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_UNPROTECT_MEM DRTM_FID(DRTM_FNUM_SVC_UNPROTECT_MEM) 40*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_DYNAMIC_LAUNCH DRTM_FID(DRTM_FNUM_SVC_DYNAMIC_LAUNCH) 41*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_CLOSE_LOCALITY DRTM_FID(DRTM_FNUM_SVC_CLOSE_LOCALITY) 42*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_GET_ERROR DRTM_FID(DRTM_FNUM_SVC_GET_ERROR) 43*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_SET_ERROR DRTM_FID(DRTM_FNUM_SVC_SET_ERROR) 44*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_SET_TCB_HASH DRTM_FID(DRTM_FNUM_SVC_SET_TCB_HASH) 45*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_LOCK_TCB_HASH DRTM_FID(DRTM_FNUM_SVC_LOCK_TCB_HASH) 46*e62748e3SManish V Badarkhe 47*e62748e3SManish V Badarkhe #define is_drtm_fid(_fid) \ 48*e62748e3SManish V Badarkhe (((_fid) >= ARM_DRTM_SVC_VERSION) && ((_fid) <= ARM_DRTM_SVC_LOCK_TCB_HASH)) 49*e62748e3SManish V Badarkhe 50*e62748e3SManish V Badarkhe /* ARM DRTM Service Calls version numbers */ 51*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MAJOR U(0) 52*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MAJOR_SHIFT 16 53*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MAJOR_MASK U(0x7FFF) 54*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MINOR U(1) 55*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MINOR_SHIFT 0 56*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MINOR_MASK U(0xFFFF) 57*e62748e3SManish V Badarkhe 58*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION \ 59*e62748e3SManish V Badarkhe ((((ARM_DRTM_VERSION_MAJOR) & ARM_DRTM_VERSION_MAJOR_MASK) << \ 60*e62748e3SManish V Badarkhe ARM_DRTM_VERSION_MAJOR_SHIFT) \ 61*e62748e3SManish V Badarkhe | (((ARM_DRTM_VERSION_MINOR) & ARM_DRTM_VERSION_MINOR_MASK) << \ 62*e62748e3SManish V Badarkhe ARM_DRTM_VERSION_MINOR_SHIFT)) 63*e62748e3SManish V Badarkhe 64*e62748e3SManish V Badarkhe #define ARM_DRTM_FUNC_SHIFT U(63) 65*e62748e3SManish V Badarkhe #define ARM_DRTM_FUNC_MASK U(0x1) 66*e62748e3SManish V Badarkhe #define ARM_DRTM_FUNC_ID U(0x0) 67*e62748e3SManish V Badarkhe #define ARM_DRTM_FEAT_ID U(0x1) 68*e62748e3SManish V Badarkhe 69*e62748e3SManish V Badarkhe /* Initialization routine for the DRTM service */ 70*e62748e3SManish V Badarkhe int drtm_setup(void); 71*e62748e3SManish V Badarkhe 72*e62748e3SManish V Badarkhe /* Handler to be called to handle DRTM SMC calls */ 73*e62748e3SManish V Badarkhe uint64_t drtm_smc_handler(uint32_t smc_fid, 74*e62748e3SManish V Badarkhe uint64_t x1, 75*e62748e3SManish V Badarkhe uint64_t x2, 76*e62748e3SManish V Badarkhe uint64_t x3, 77*e62748e3SManish V Badarkhe uint64_t x4, 78*e62748e3SManish V Badarkhe void *cookie, 79*e62748e3SManish V Badarkhe void *handle, 80*e62748e3SManish V Badarkhe uint64_t flags); 81*e62748e3SManish V Badarkhe 82*e62748e3SManish V Badarkhe #endif /* ARM_DRTM_SVC_H */ 83