kvm_para.h 2.1 KB

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