root/arch/arm64/kernel/smccc-call.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright (c) 2015, Linaro Limited
   4  */
   5 #include <linux/linkage.h>
   6 #include <linux/arm-smccc.h>
   7 
   8 #include <asm/asm-offsets.h>
   9 #include <asm/assembler.h>
  10 
  11         .macro SMCCC instr
  12         .cfi_startproc
  13         \instr  #0
  14         ldr     x4, [sp]
  15         stp     x0, x1, [x4, #ARM_SMCCC_RES_X0_OFFS]
  16         stp     x2, x3, [x4, #ARM_SMCCC_RES_X2_OFFS]
  17         ldr     x4, [sp, #8]
  18         cbz     x4, 1f /* no quirk structure */
  19         ldr     x9, [x4, #ARM_SMCCC_QUIRK_ID_OFFS]
  20         cmp     x9, #ARM_SMCCC_QUIRK_QCOM_A6
  21         b.ne    1f
  22         str     x6, [x4, ARM_SMCCC_QUIRK_STATE_OFFS]
  23 1:      ret
  24         .cfi_endproc
  25         .endm
  26 
  27 /*
  28  * void arm_smccc_smc(unsigned long a0, unsigned long a1, unsigned long a2,
  29  *                unsigned long a3, unsigned long a4, unsigned long a5,
  30  *                unsigned long a6, unsigned long a7, struct arm_smccc_res *res,
  31  *                struct arm_smccc_quirk *quirk)
  32  */
  33 ENTRY(__arm_smccc_smc)
  34         SMCCC   smc
  35 ENDPROC(__arm_smccc_smc)
  36 EXPORT_SYMBOL(__arm_smccc_smc)
  37 
  38 /*
  39  * void arm_smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2,
  40  *                unsigned long a3, unsigned long a4, unsigned long a5,
  41  *                unsigned long a6, unsigned long a7, struct arm_smccc_res *res,
  42  *                struct arm_smccc_quirk *quirk)
  43  */
  44 ENTRY(__arm_smccc_hvc)
  45         SMCCC   hvc
  46 ENDPROC(__arm_smccc_hvc)
  47 EXPORT_SYMBOL(__arm_smccc_hvc)

/* [<][>][^][v][top][bottom][index][help] */