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