11bb92983SJerome Forissier/* SPDX-License-Identifier: BSD-2-Clause */ 2f74a4a2bSJens Wiklander/* 3f74a4a2bSJens Wiklander * Copyright (c) 2015, Linaro Limited 4f74a4a2bSJens Wiklander */ 5f74a4a2bSJens Wiklander 6f74a4a2bSJens Wiklander#include <tee_syscall_numbers.h> 7a0fdab65SJens Wiklander#include <asm.S> 8f74a4a2bSJens Wiklander 9f74a4a2bSJens Wiklander .section .text 10f74a4a2bSJens Wiklander 11f74a4a2bSJens Wiklander .macro UTEE_SYSCALL name, scn, num_args 12a0fdab65SJens Wiklander FUNC \name , : 13f74a4a2bSJens Wiklander 14f74a4a2bSJens Wiklander .if \num_args > TEE_SVC_MAX_ARGS || \num_args > 8 15f74a4a2bSJens Wiklander .error "Too many arguments for syscall" 16f74a4a2bSJens Wiklander .endif 17*f93627d9SSumit Garg#if defined(CFG_ULIBS_MCOUNT) && !defined(__LDELF__) 18*f93627d9SSumit Garg .if \scn != TEE_SCN_RETURN 19*f93627d9SSumit Garg stp x29, x30, [sp, #-80]! 20*f93627d9SSumit Garg mov x29, sp 21*f93627d9SSumit Garg stp x0, x1, [sp, #16] 22*f93627d9SSumit Garg stp x2, x3, [sp, #32] 23*f93627d9SSumit Garg stp x4, x5, [sp, #48] 24*f93627d9SSumit Garg stp x6, x7, [sp, #64] 25*f93627d9SSumit Garg mov x0, x30 26*f93627d9SSumit Garg bl _mcount 27*f93627d9SSumit Garg ldp x0, x1, [sp, #16] 28*f93627d9SSumit Garg ldp x2, x3, [sp, #32] 29*f93627d9SSumit Garg ldp x4, x5, [sp, #48] 30*f93627d9SSumit Garg ldp x6, x7, [sp, #64] 31*f93627d9SSumit Garg ldp x29, x30, [sp], #80 32*f93627d9SSumit Garg .endif 33*f93627d9SSumit Garg#endif 34f74a4a2bSJens Wiklander mov x8, #(\scn) 35f74a4a2bSJens Wiklander svc #0 36f74a4a2bSJens Wiklander ret 37a0fdab65SJens Wiklander END_FUNC \name 38f74a4a2bSJens Wiklander .endm 39f74a4a2bSJens Wiklander 400e1c6e8eSJerome Forissier FUNC utee_panic, : 410e1c6e8eSJerome Forissier stp x29, x30, [sp, #-16]! 420e1c6e8eSJerome Forissier mov x1, sp 430e1c6e8eSJerome Forissier bl __utee_panic 440e1c6e8eSJerome Forissier /* Not reached */ 450e1c6e8eSJerome Forissier END_FUNC utee_panic 460e1c6e8eSJerome Forissier 47f74a4a2bSJens Wiklander#include "utee_syscalls_asm.S" 48f74a4a2bSJens Wiklander 49