linux/arch/mips/include/asm/kvm_para.h
<<
>>
Prefs
   1#ifndef _ASM_MIPS_KVM_PARA_H
   2#define _ASM_MIPS_KVM_PARA_H
   3
   4#include <uapi/asm/kvm_para.h>
   5
   6#define KVM_HYPERCALL ".word 0x42000028"
   7
   8/*
   9 * Hypercalls for KVM.
  10 *
  11 * Hypercall number is passed in v0.
  12 * Return value will be placed in v0.
  13 * Up to 3 arguments are passed in a0, a1, and a2.
  14 */
  15static inline unsigned long kvm_hypercall0(unsigned long num)
  16{
  17        register unsigned long n asm("v0");
  18        register unsigned long r asm("v0");
  19
  20        n = num;
  21        __asm__ __volatile__(
  22                KVM_HYPERCALL
  23                : "=r" (r) : "r" (n) : "memory"
  24                );
  25
  26        return r;
  27}
  28
  29static inline unsigned long kvm_hypercall1(unsigned long num,
  30                                        unsigned long arg0)
  31{
  32        register unsigned long n asm("v0");
  33        register unsigned long r asm("v0");
  34        register unsigned long a0 asm("a0");
  35
  36        n = num;
  37        a0 = arg0;
  38        __asm__ __volatile__(
  39                KVM_HYPERCALL
  40                : "=r" (r) : "r" (n), "r" (a0) : "memory"
  41                );
  42
  43        return r;
  44}
  45
  46static inline unsigned long kvm_hypercall2(unsigned long num,
  47                                        unsigned long arg0, unsigned long arg1)
  48{
  49        register unsigned long n asm("v0");
  50        register unsigned long r asm("v0");
  51        register unsigned long a0 asm("a0");
  52        register unsigned long a1 asm("a1");
  53
  54        n = num;
  55        a0 = arg0;
  56        a1 = arg1;
  57        __asm__ __volatile__(
  58                KVM_HYPERCALL
  59                : "=r" (r) : "r" (n), "r" (a0), "r" (a1) : "memory"
  60                );
  61
  62        return r;
  63}
  64
  65static inline unsigned long kvm_hypercall3(unsigned long num,
  66        unsigned long arg0, unsigned long arg1, unsigned long arg2)
  67{
  68        register unsigned long n asm("v0");
  69        register unsigned long r asm("v0");
  70        register unsigned long a0 asm("a0");
  71        register unsigned long a1 asm("a1");
  72        register unsigned long a2 asm("a2");
  73
  74        n = num;
  75        a0 = arg0;
  76        a1 = arg1;
  77        a2 = arg2;
  78        __asm__ __volatile__(
  79                KVM_HYPERCALL
  80                : "=r" (r) : "r" (n), "r" (a0), "r" (a1), "r" (a2) : "memory"
  81                );
  82
  83        return r;
  84}
  85
  86static inline bool kvm_check_and_clear_guest_paused(void)
  87{
  88        return false;
  89}
  90
  91static inline unsigned int kvm_arch_para_features(void)
  92{
  93        return 0;
  94}
  95
  96#ifdef CONFIG_MIPS_PARAVIRT
  97static inline bool kvm_para_available(void)
  98{
  99        return true;
 100}
 101#else
 102static inline bool kvm_para_available(void)
 103{
 104        return false;
 105}
 106#endif
 107
 108
 109#endif /* _ASM_MIPS_KVM_PARA_H */
 110