#include <linux/cleanup.h>
#include <linux/io.h>
#include <linux/errno.h>
#include <linux/delay.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/firmware/qcom/qcom_scm.h>
#include <linux/firmware/qcom/qcom_tzmem.h>
#include <linux/arm-smccc.h>
#include <linux/dma-mapping.h>
#include "qcom_scm.h"
struct arm_smccc_args { … };
static DEFINE_MUTEX(qcom_scm_lock);
#define QCOM_SCM_EBUSY_WAIT_MS …
#define QCOM_SCM_EBUSY_MAX_RETRY …
#define SCM_SMC_N_REG_ARGS …
#define SCM_SMC_FIRST_EXT_IDX …
#define SCM_SMC_N_EXT_ARGS …
#define SCM_SMC_FIRST_REG_IDX …
#define SCM_SMC_LAST_REG_IDX …
static void __scm_smc_do_quirk(const struct arm_smccc_args *smc,
struct arm_smccc_res *res)
{ … }
static void fill_wq_resume_args(struct arm_smccc_args *resume, u32 smc_call_ctx)
{ … }
int scm_get_wq_ctx(u32 *wq_ctx, u32 *flags, u32 *more_pending)
{ … }
static int __scm_smc_do_quirk_handle_waitq(struct device *dev, struct arm_smccc_args *waitq,
struct arm_smccc_res *res)
{ … }
static int __scm_smc_do(struct device *dev, struct arm_smccc_args *smc,
struct arm_smccc_res *res, bool atomic)
{ … }
int __scm_smc_call(struct device *dev, const struct qcom_scm_desc *desc,
enum qcom_scm_convention qcom_convention,
struct qcom_scm_res *res, bool atomic)
{ … }