| // SPDX-License-Identifier: GPL-2.0 | |
| /* | |
| * PAPR (pseries) hcall support. | |
| */ | |
| #include "kvm_util.h" | |
| #include "hcall.h" | |
| s64 hcall0(u64 token) | |
| { | |
| register uintptr_t r3 asm ("r3") = token; | |
| asm volatile("sc 1" : "+r"(r3) : | |
| : "r0", "r4", "r5", "r6", "r7", "r8", "r9", | |
| "r10", "r11", "r12", "ctr", "xer", | |
| "cc", "memory"); | |
| return r3; | |
| } | |
| s64 hcall1(u64 token, u64 arg1) | |
| { | |
| register uintptr_t r3 asm ("r3") = token; | |
| register uintptr_t r4 asm ("r4") = arg1; | |
| asm volatile("sc 1" : "+r"(r3), "+r"(r4) : | |
| : "r0", "r5", "r6", "r7", "r8", "r9", | |
| "r10", "r11", "r12", "ctr", "xer", | |
| "cc", "memory"); | |
| return r3; | |
| } | |
| s64 hcall2(u64 token, u64 arg1, u64 arg2) | |
| { | |
| register uintptr_t r3 asm ("r3") = token; | |
| register uintptr_t r4 asm ("r4") = arg1; | |
| register uintptr_t r5 asm ("r5") = arg2; | |
| asm volatile("sc 1" : "+r"(r3), "+r"(r4), "+r"(r5) : | |
| : "r0", "r6", "r7", "r8", "r9", | |
| "r10", "r11", "r12", "ctr", "xer", | |
| "cc", "memory"); | |
| return r3; | |
| } |