xref: /openbmc/linux/arch/arm64/kernel/smccc-call.S (revision a06c488d)
1/*
2 * Copyright (c) 2015, Linaro Limited
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 */
14#include <linux/linkage.h>
15#include <asm/asm-offsets.h>
16
17	.macro SMCCC instr
18	.cfi_startproc
19	\instr	#0
20	ldr	x4, [sp]
21	stp	x0, x1, [x4, #ARM_SMCCC_RES_X0_OFFS]
22	stp	x2, x3, [x4, #ARM_SMCCC_RES_X2_OFFS]
23	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 */
32ENTRY(arm_smccc_smc)
33	SMCCC	smc
34ENDPROC(arm_smccc_smc)
35
36/*
37 * void arm_smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2,
38 *		  unsigned long a3, unsigned long a4, unsigned long a5,
39 *		  unsigned long a6, unsigned long a7, struct arm_smccc_res *res)
40 */
41ENTRY(arm_smccc_hvc)
42	SMCCC	hvc
43ENDPROC(arm_smccc_hvc)
44