/*
 * Copyright (c) 2006-2019, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 */
#ifndef __SMCCC_H__
#define __SMCCC_H__

/**
 * result from SMC/HVC call
 * ARM DEN0028E chapter 5,
 */
typedef struct arm_smccc_res_t
{
    unsigned long a0;
    // reserved for ARM SMC and HVC Fast Call services
    unsigned long a1;
    unsigned long a2;
    unsigned long a3;
} arm_smccc_res_t;

/**
 * quirk is a structure contains vendor specified information,
 * it just a placeholder currently
 */
struct arm_smccc_quirk_t
{
};

/* smccc version 0.2 */

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_t *res,
                   struct arm_smccc_quirk_t *quirk);

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_t *res,
                   struct arm_smccc_quirk_t *quirk);

#endif /* __SMCCC_H__ */