Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / arch / arm / kvm / interrupts.S
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2012 - Virtual Open Systems and Columbia University
4  * Author: Christoffer Dall <c.dall@virtualopensystems.com>
5  */
6
7 #include <linux/linkage.h>
8
9         .text
10
11 /********************************************************************
12  *  Call function in Hyp mode
13  *
14  *
15  * unsigned long kvm_call_hyp(void *hypfn, ...);
16  *
17  * This is not really a variadic function in the classic C-way and care must
18  * be taken when calling this to ensure parameters are passed in registers
19  * only, since the stack will change between the caller and the callee.
20  *
21  * Call the function with the first argument containing a pointer to the
22  * function you wish to call in Hyp mode, and subsequent arguments will be
23  * passed as r0, r1, and r2 (a maximum of 3 arguments in addition to the
24  * function pointer can be passed).  The function being called must be mapped
25  * in Hyp mode (see init_hyp_mode in arch/arm/kvm/arm.c).  Return values are
26  * passed in r0 (strictly 32bit).
27  *
28  * The calling convention follows the standard AAPCS:
29  *   r0 - r3: caller save
30  *   r12:     caller save
31  *   rest:    callee save
32  */
33 ENTRY(__kvm_call_hyp)
34         hvc     #0
35         bx      lr
36 ENDPROC(__kvm_call_hyp)