nmi.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /* SPDX-License-Identifier: MIT */
  2. /******************************************************************************
  3. * nmi.h
  4. *
  5. * NMI callback registration and reason codes.
  6. *
  7. * Copyright (c) 2005, Keir Fraser <[email protected]>
  8. */
  9. #ifndef __XEN_PUBLIC_NMI_H__
  10. #define __XEN_PUBLIC_NMI_H__
  11. #include <xen/interface/xen.h>
  12. /*
  13. * NMI reason codes:
  14. * Currently these are x86-specific, stored in arch_shared_info.nmi_reason.
  15. */
  16. /* I/O-check error reported via ISA port 0x61, bit 6. */
  17. #define _XEN_NMIREASON_io_error 0
  18. #define XEN_NMIREASON_io_error (1UL << _XEN_NMIREASON_io_error)
  19. /* PCI SERR reported via ISA port 0x61, bit 7. */
  20. #define _XEN_NMIREASON_pci_serr 1
  21. #define XEN_NMIREASON_pci_serr (1UL << _XEN_NMIREASON_pci_serr)
  22. /* Unknown hardware-generated NMI. */
  23. #define _XEN_NMIREASON_unknown 2
  24. #define XEN_NMIREASON_unknown (1UL << _XEN_NMIREASON_unknown)
  25. /*
  26. * long nmi_op(unsigned int cmd, void *arg)
  27. * NB. All ops return zero on success, else a negative error code.
  28. */
  29. /*
  30. * Register NMI callback for this (calling) VCPU. Currently this only makes
  31. * sense for domain 0, vcpu 0. All other callers will be returned EINVAL.
  32. * arg == pointer to xennmi_callback structure.
  33. */
  34. #define XENNMI_register_callback 0
  35. struct xennmi_callback {
  36. unsigned long handler_address;
  37. unsigned long pad;
  38. };
  39. DEFINE_GUEST_HANDLE_STRUCT(xennmi_callback);
  40. /*
  41. * Deregister NMI callback for this (calling) VCPU.
  42. * arg == NULL.
  43. */
  44. #define XENNMI_unregister_callback 1
  45. #endif /* __XEN_PUBLIC_NMI_H__ */