tftf: provide hvc conduit facility
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
Change-Id: I3ad6e6767c2ca915f4a4fe8c5accc07e3e255387
diff --git a/lib/smc/aarch64/asm_smc.S b/lib/smc/aarch64/asm_smc.S
index c3044a4..b11baa8 100644
--- a/lib/smc/aarch64/asm_smc.S
+++ b/lib/smc/aarch64/asm_smc.S
@@ -1,28 +1,15 @@
/*
- * Copyright (c) 2013-2019, Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <asm_macros.S>
- .globl asm_tftf_smc64
-
.section .text, "ax"
+ .macro smccc_conduit _conduit
-/* ---------------------------------------------------------------------------
- * smc_ret_values asm_tftf_smc64(uint32_t fid,
- * u_register_t arg1,
- * u_register_t arg2,
- * u_register_t arg3,
- * u_register_t arg4,
- * u_register_t arg5,
- * u_register_t arg6,
- * u_register_t arg7);
- * ---------------------------------------------------------------------------
- */
-func asm_tftf_smc64
/*
* According to the AAPCS64, x8 is the indirect result location
* register. It contains the address of the memory block that the caller
@@ -34,8 +21,8 @@
*/
str x8, [sp, #-16]!
- /* SMC arguments are already stored in x0-x7 */
- smc #0
+ /* "Conduit" arguments are already stored in x0-x7 */
+ \_conduit #0
/* Pop x8 into a caller-saved register */
ldr x9, [sp], #16
@@ -48,5 +35,41 @@
stp x2, x3, [x9, #16]
stp x4, x5, [x9, #32]
stp x6, x7, [x9, #48]
+
+ .endm
+
+/* ---------------------------------------------------------------------------
+ * smc_ret_values asm_tftf_smc64(uint32_t fid,
+ * u_register_t arg1,
+ * u_register_t arg2,
+ * u_register_t arg3,
+ * u_register_t arg4,
+ * u_register_t arg5,
+ * u_register_t arg6,
+ * u_register_t arg7);
+ * ---------------------------------------------------------------------------
+ */
+ .globl asm_tftf_smc64
+
+func asm_tftf_smc64
+ smccc_conduit smc
ret
endfunc asm_tftf_smc64
+
+/* ---------------------------------------------------------------------------
+ * hvc_ret_values asm_tftf_hvcc64(uint32_t fid,
+ * u_register_t arg1,
+ * u_register_t arg2,
+ * u_register_t arg3,
+ * u_register_t arg4,
+ * u_register_t arg5,
+ * u_register_t arg6,
+ * u_register_t arg7);
+ * ---------------------------------------------------------------------------
+ */
+ .globl asm_tftf_hvc64
+
+func asm_tftf_hvc64
+ smccc_conduit hvc
+ ret
+endfunc asm_tftf_hvc64