1 #include <linux/syscalls.h>
4 // * Disable IRQ syscall (__NR_prem_irq_disable)
6 // asmlinkage long sys_prem_irq_disable(void)
8 // /* We need to update userspace pstate that is going to be recovered.
9 // * If we call any system call, the irq enabled on OS level */
10 // struct pt_regs * regs = task_pt_regs(current);
11 // regs->pstate |= (PSR_I_BIT | PSR_F_BIT);
16 // * Enable IRQ syscall (__NR_prem_irq_enable)
18 // asmlinkage long sys_prem_irq_enable(void)
20 // struct pt_regs * regs = task_pt_regs(current);
21 // regs->pstate &= ~(PSR_I_BIT | PSR_F_BIT);
25 extern void __flush_dcache_all(void);
28 * Flush and invalidate entire cache (__NR_prem_flush)
30 SYSCALL_DEFINE0(prem_flush)
36 /* Invoke prem_guard_set hypercall implemented in Jailhouse hypervisor */
37 SYSCALL_DEFINE3(premguard, unsigned long, phase, unsigned long, budget,
38 unsigned long, timeout)
40 register uint64_t num_result asm("x0") = 9;
41 register uint64_t __arg1 asm("x1") = phase;
42 register uint64_t __arg2 asm("x2") = budget;
43 register uint64_t __arg3 asm("x3") = timeout;
48 : "r" (num_result), "r" (__arg1), "r" (__arg2), "r" (__arg3)
54 /* Invoke memguard hypercall implemented in the Jailhouse hypervisor */
55 SYSCALL_DEFINE3(memguard, unsigned long, budget_time,
56 unsigned long, budget_memory,
59 register uint64_t num_result asm("x0") = 10;
60 register uint64_t __arg1 asm("x1") = budget_time;
61 register uint64_t __arg2 asm("x2") = budget_memory;
62 register uint64_t __arg3 asm("x3") = flags;
67 : "r" (num_result), "r" (__arg1), "r" (__arg2), "r" (__arg3)