blob: 611ad6c7add19d86497862395a39182ec5883914 [file] [log] [blame]
/*
* Copyright 2020 Carlo Caione <ccaione@baylibre.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_ARCH_ARM64_SMCCC_H_
#define ZEPHYR_INCLUDE_ARCH_ARM64_SMCCC_H_
/*
* Result from SMC/HVC call
* @a0-a7 result values from registers 0 to 7
*/
struct arm_smccc_res {
unsigned long a0;
unsigned long a1;
unsigned long a2;
unsigned long a3;
unsigned long a4;
unsigned long a5;
unsigned long a6;
unsigned long a7;
};
typedef struct arm_smccc_res arm_smccc_res_t;
enum arm_smccc_conduit {
SMCCC_CONDUIT_NONE,
SMCCC_CONDUIT_SMC,
SMCCC_CONDUIT_HVC,
};
/*
* @brief Make HVC calls
*
* @param a0 function identifier
* @param a1-a7 parameters registers
* @param res results
*/
void arm_smccc_hvc(unsigned long a0, unsigned long a1,
unsigned long a2, unsigned long a3,
unsigned long a4, unsigned long a5,
unsigned long a6, unsigned long a7,
struct arm_smccc_res *res);
/*
* @brief Make SMC calls
*
* @param a0 function identifier
* @param a1-a7 parameters registers
* @param res results
*/
void arm_smccc_smc(unsigned long a0, unsigned long a1,
unsigned long a2, unsigned long a3,
unsigned long a4, unsigned long a5,
unsigned long a6, unsigned long a7,
struct arm_smccc_res *res);
#endif /* ZEPHYR_INCLUDE_ARCH_ARM64_SMCCC_H_ */