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

#ifndef ARM_SIP_SVC_H
#define ARM_SIP_SVC_H

#include <lib/utils_def.h>

/* SMC function IDs for SiP Service queries */

#define ARM_SIP_SVC_CALL_COUNT		U(0x8200ff00)
#define ARM_SIP_SVC_UID			U(0x8200ff01)
/*					U(0x8200ff02) is reserved */
#define ARM_SIP_SVC_VERSION		U(0x8200ff03)

/* PMF_SMC_GET_TIMESTAMP_32		0x82000010 */
/* PMF_SMC_GET_TIMESTAMP_64		0xC2000010 */

/* Function ID for requesting state switch of lower EL */
#define ARM_SIP_SVC_EXE_STATE_SWITCH	U(0x82000020)

/* DEBUGFS_SMC_32			0x82000030U */
/* DEBUGFS_SMC_64			0xC2000030U */

/*
 * Arm(R) Ethos(TM)-N NPU SiP SMC function IDs
 * 0xC2000050-0xC200005F
 * 0x82000050-0x8200005F
 */

/* ARM SiP Service Calls version numbers */
#define ARM_SIP_SVC_VERSION_MAJOR		U(0x0)
#define ARM_SIP_SVC_VERSION_MINOR		U(0x2)

/*
 * Arm SiP SMC calls that are primarily used for testing purposes.
 */
#if PLAT_TEST_SPM
#define ARM_SIP_SET_INTERRUPT_PENDING	U(0x82000100)
#endif

/**
 * Arm SiP Service Call for the SPM to leverage RME to protect a give memory range.
 * Protected memory range is one whose PAS was made secure.
 * Unprotect relates to reverting a protect operation.
 */
#if SPMD_SPM_AT_SEL2 && ENABLE_RME
#define PLAT_PROTECT_MEM_SMC64 0xC2000101
#define PLAT_UNPROTECT_MEM_SMC64 0xC2000102
#endif

/* SiP handler specific to each Arm platform. */
uintptr_t plat_arm_sip_handler(uint32_t smc_fid,
				u_register_t x1,
				u_register_t x2,
				u_register_t x3,
				u_register_t x4,
				void *cookie,
				void *handle,
				u_register_t flags);

#endif /* ARM_SIP_SVC_H */
