callback.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* SPDX-License-Identifier: MIT */
  2. /******************************************************************************
  3. * callback.h
  4. *
  5. * Register guest OS callbacks with Xen.
  6. *
  7. * Copyright (c) 2006, Ian Campbell
  8. */
  9. #ifndef __XEN_PUBLIC_CALLBACK_H__
  10. #define __XEN_PUBLIC_CALLBACK_H__
  11. #include <xen/interface/xen.h>
  12. /*
  13. * Prototype for this hypercall is:
  14. * long callback_op(int cmd, void *extra_args)
  15. * @cmd == CALLBACKOP_??? (callback operation).
  16. * @extra_args == Operation-specific extra arguments (NULL if none).
  17. */
  18. /* x86: Callback for event delivery. */
  19. #define CALLBACKTYPE_event 0
  20. /* x86: Failsafe callback when guest state cannot be restored by Xen. */
  21. #define CALLBACKTYPE_failsafe 1
  22. /* x86/64 hypervisor: Syscall by 64-bit guest app ('64-on-64-on-64'). */
  23. #define CALLBACKTYPE_syscall 2
  24. /*
  25. * x86/32 hypervisor: Only available on x86/32 when supervisor_mode_kernel
  26. * feature is enabled. Do not use this callback type in new code.
  27. */
  28. #define CALLBACKTYPE_sysenter_deprecated 3
  29. /* x86: Callback for NMI delivery. */
  30. #define CALLBACKTYPE_nmi 4
  31. /*
  32. * x86: sysenter is only available as follows:
  33. * - 32-bit hypervisor: with the supervisor_mode_kernel feature enabled
  34. * - 64-bit hypervisor: 32-bit guest applications on Intel CPUs
  35. * ('32-on-32-on-64', '32-on-64-on-64')
  36. * [nb. also 64-bit guest applications on Intel CPUs
  37. * ('64-on-64-on-64'), but syscall is preferred]
  38. */
  39. #define CALLBACKTYPE_sysenter 5
  40. /*
  41. * x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs
  42. * ('32-on-32-on-64', '32-on-64-on-64')
  43. */
  44. #define CALLBACKTYPE_syscall32 7
  45. /*
  46. * Disable event deliver during callback? This flag is ignored for event and
  47. * NMI callbacks: event delivery is unconditionally disabled.
  48. */
  49. #define _CALLBACKF_mask_events 0
  50. #define CALLBACKF_mask_events (1U << _CALLBACKF_mask_events)
  51. /*
  52. * Register a callback.
  53. */
  54. #define CALLBACKOP_register 0
  55. struct callback_register {
  56. uint16_t type;
  57. uint16_t flags;
  58. xen_callback_t address;
  59. };
  60. /*
  61. * Unregister a callback.
  62. *
  63. * Not all callbacks can be unregistered. -EINVAL will be returned if
  64. * you attempt to unregister such a callback.
  65. */
  66. #define CALLBACKOP_unregister 1
  67. struct callback_unregister {
  68. uint16_t type;
  69. uint16_t _unused;
  70. };
  71. #endif /* __XEN_PUBLIC_CALLBACK_H__ */