/*
 * Copyright (c) 2021, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef GTSI_SVC_H
#define GTSI_SVC_H

/* GTSI error codes. */
#define GTSI_SUCCESS			0
#define GTSI_ERROR_NOT_SUPPORTED	-1
#define GTSI_ERROR_INVALID_ADDRESS	-2
#define GTSI_ERROR_INVALID_PAS		-3

/* The macros below are used to identify GTSI calls from the SMC function ID */
#define GTSI_FNUM_MIN_VALUE	U(0x1B0)
#define GTSI_FNUM_MAX_VALUE	U(0x1B1)
#define is_gtsi_fid(fid) __extension__ ({		\
	__typeof__(fid) _fid = (fid);			\
	((GET_SMC_NUM(_fid) >= GTSI_FNUM_MIN_VALUE) &&	\
	(GET_SMC_NUM(_fid) <= GTSI_FNUM_MAX_VALUE)  &&	\
	(GET_SMC_TYPE(_fid) == SMC_TYPE_FAST)	    &&	\
	(GET_SMC_CC(_fid) == SMC_64)                &&	\
	(GET_SMC_OEN(_fid) == OEN_STD_START)        &&	\
	((_fid & 0x00FE0000) == 0U)); })

/* Get GTSI fastcall std FID from function number */
#define GTSI_FID(smc_cc, func_num)			\
	((SMC_TYPE_FAST << FUNCID_TYPE_SHIFT)	|	\
	 ((smc_cc) << FUNCID_CC_SHIFT)		|	\
	 (OEN_STD_START << FUNCID_OEN_SHIFT)	|	\
	 ((func_num) << FUNCID_NUM_SHIFT))

#define GRAN_TRANS_TO_REALM_FNUM	U(0x1B0)
#define GRAN_TRANS_TO_NS_FNUM		U(0x1B1)

#define SMC_ASC_MARK_REALM	GTSI_FID(SMC_64, GRAN_TRANS_TO_REALM_FNUM)
#define SMC_ASC_MARK_NONSECURE	GTSI_FID(SMC_64, GRAN_TRANS_TO_NS_FNUM)

#define GRAN_TRANS_RET_BAD_ADDR		-2
#define GRAN_TRANS_RET_BAD_PAS		-3

#endif /* GTSI_SVC_H */
