2 * Jailhouse, a Linux-based partitioning hypervisor
4 * Copyright (c) Siemens AG, 2013
7 * Jan Kiszka <jan.kiszka@siemens.com>
9 * This work is licensed under the terms of the GNU GPL, version 2. See
10 * the COPYING file in the top-level directory.
14 #error 64-bit kernel required!
17 #define JAILHOUSE_BASE 0xfffffffff0000000
19 #define JAILHOUSE_CALL_INS "vmcall"
20 #define JAILHOUSE_CALL_RESULT "=a" (result)
21 #define JAILHOUSE_CALL_NUM "a" (num)
22 #define JAILHOUSE_CALL_ARG1 "D" (arg1)
23 #define JAILHOUSE_CALL_ARG2 "S" (arg2)
27 static inline __u32 jailhouse_call(__u32 num)
31 asm volatile(JAILHOUSE_CALL_INS
32 : JAILHOUSE_CALL_RESULT
38 static inline __u32 jailhouse_call_arg1(__u32 num, __u32 arg1)
42 asm volatile(JAILHOUSE_CALL_INS
43 : JAILHOUSE_CALL_RESULT
44 : JAILHOUSE_CALL_NUM, JAILHOUSE_CALL_ARG1
49 static inline __u32 jailhouse_call_arg2(__u32 num, __u32 arg1, __u32 arg2)
53 asm volatile(JAILHOUSE_CALL_INS
54 : JAILHOUSE_CALL_RESULT
55 : JAILHOUSE_CALL_NUM, JAILHOUSE_CALL_ARG1, JAILHOUSE_CALL_ARG2
61 jailhouse_send_msg_to_cell(struct jailhouse_comm_region *comm_region,
64 comm_region->reply_from_cell = JAILHOUSE_MSG_NONE;
65 /* ensure reply was cleared before sending new message */
66 asm volatile("mfence" : : : "memory");
67 comm_region->msg_to_cell = msg;
71 jailhouse_send_reply_from_cell(struct jailhouse_comm_region *comm_region,
74 comm_region->msg_to_cell = JAILHOUSE_MSG_NONE;
75 /* ensure message was cleared before sending reply */
76 asm volatile("mfence" : : : "memory");
77 comm_region->reply_from_cell = reply;
80 #endif /* !__ASSEMBLY__ */