hypercall.S 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * Support routines for Xen hypercalls
  3. *
  4. * Copyright (C) 2005 Dan Magenheimer <dan.magenheimer@hp.com>
  5. * Copyright (C) 2008 Yaozu (Eddie) Dong <eddie.dong@intel.com>
  6. */
  7. #include <asm/asmmacro.h>
  8. #include <asm/intrinsics.h>
  9. #include <asm/xen/privop.h>
  10. #ifdef __INTEL_COMPILER
  11. /*
  12. * Hypercalls without parameter.
  13. */
  14. #define __HCALL0(name,hcall) \
  15. GLOBAL_ENTRY(name); \
  16. break hcall; \
  17. br.ret.sptk.many rp; \
  18. END(name)
  19. /*
  20. * Hypercalls with 1 parameter.
  21. */
  22. #define __HCALL1(name,hcall) \
  23. GLOBAL_ENTRY(name); \
  24. mov r8=r32; \
  25. break hcall; \
  26. br.ret.sptk.many rp; \
  27. END(name)
  28. /*
  29. * Hypercalls with 2 parameters.
  30. */
  31. #define __HCALL2(name,hcall) \
  32. GLOBAL_ENTRY(name); \
  33. mov r8=r32; \
  34. mov r9=r33; \
  35. break hcall; \
  36. br.ret.sptk.many rp; \
  37. END(name)
  38. __HCALL0(xen_get_psr, HYPERPRIVOP_GET_PSR)
  39. __HCALL0(xen_get_ivr, HYPERPRIVOP_GET_IVR)
  40. __HCALL0(xen_get_tpr, HYPERPRIVOP_GET_TPR)
  41. __HCALL0(xen_hyper_ssm_i, HYPERPRIVOP_SSM_I)
  42. __HCALL1(xen_set_tpr, HYPERPRIVOP_SET_TPR)
  43. __HCALL1(xen_eoi, HYPERPRIVOP_EOI)
  44. __HCALL1(xen_thash, HYPERPRIVOP_THASH)
  45. __HCALL1(xen_set_itm, HYPERPRIVOP_SET_ITM)
  46. __HCALL1(xen_get_rr, HYPERPRIVOP_GET_RR)
  47. __HCALL1(xen_fc, HYPERPRIVOP_FC)
  48. __HCALL1(xen_get_cpuid, HYPERPRIVOP_GET_CPUID)
  49. __HCALL1(xen_get_pmd, HYPERPRIVOP_GET_PMD)
  50. __HCALL2(xen_ptcga, HYPERPRIVOP_PTC_GA)
  51. __HCALL2(xen_set_rr, HYPERPRIVOP_SET_RR)
  52. __HCALL2(xen_set_kr, HYPERPRIVOP_SET_KR)
  53. GLOBAL_ENTRY(xen_set_rr0_to_rr4)
  54. mov r8=r32
  55. mov r9=r33
  56. mov r10=r34
  57. mov r11=r35
  58. mov r14=r36
  59. XEN_HYPER_SET_RR0_TO_RR4
  60. br.ret.sptk.many rp
  61. ;;
  62. END(xen_set_rr0_to_rr4)
  63. #endif
  64. GLOBAL_ENTRY(xen_send_ipi)
  65. mov r14=r32
  66. mov r15=r33
  67. mov r2=0x400
  68. break 0x1000
  69. ;;
  70. br.ret.sptk.many rp
  71. ;;
  72. END(xen_send_ipi)
  73. GLOBAL_ENTRY(__hypercall)
  74. mov r2=r37
  75. break 0x1000
  76. br.ret.sptk.many b0
  77. ;;
  78. END(__hypercall)