/* SPDX-License-Identifier: MIT */1/******************************************************************************2* callback.h3*4* Register guest OS callbacks with Xen.5*6* Copyright (c) 2006, Ian Campbell7*/89#ifndef __XEN_PUBLIC_CALLBACK_H__10#define __XEN_PUBLIC_CALLBACK_H__1112#include <xen/interface/xen.h>1314/*15* Prototype for this hypercall is:16* long callback_op(int cmd, void *extra_args)17* @cmd == CALLBACKOP_??? (callback operation).18* @extra_args == Operation-specific extra arguments (NULL if none).19*/2021/* x86: Callback for event delivery. */22#define CALLBACKTYPE_event 02324/* x86: Failsafe callback when guest state cannot be restored by Xen. */25#define CALLBACKTYPE_failsafe 12627/* x86/64 hypervisor: Syscall by 64-bit guest app ('64-on-64-on-64'). */28#define CALLBACKTYPE_syscall 22930/*31* x86/32 hypervisor: Only available on x86/32 when supervisor_mode_kernel32* feature is enabled. Do not use this callback type in new code.33*/34#define CALLBACKTYPE_sysenter_deprecated 33536/* x86: Callback for NMI delivery. */37#define CALLBACKTYPE_nmi 43839/*40* x86: sysenter is only available as follows:41* - 32-bit hypervisor: with the supervisor_mode_kernel feature enabled42* - 64-bit hypervisor: 32-bit guest applications on Intel CPUs43* ('32-on-32-on-64', '32-on-64-on-64')44* [nb. also 64-bit guest applications on Intel CPUs45* ('64-on-64-on-64'), but syscall is preferred]46*/47#define CALLBACKTYPE_sysenter 54849/*50* x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs51* ('32-on-32-on-64', '32-on-64-on-64')52*/53#define CALLBACKTYPE_syscall32 75455/*56* Disable event deliver during callback? This flag is ignored for event and57* NMI callbacks: event delivery is unconditionally disabled.58*/59#define _CALLBACKF_mask_events 060#define CALLBACKF_mask_events (1U << _CALLBACKF_mask_events)6162/*63* Register a callback.64*/65#define CALLBACKOP_register 066struct callback_register {67uint16_t type;68uint16_t flags;69xen_callback_t address;70};7172/*73* Unregister a callback.74*75* Not all callbacks can be unregistered. -EINVAL will be returned if76* you attempt to unregister such a callback.77*/78#define CALLBACKOP_unregister 179struct callback_unregister {80uint16_t type;81uint16_t _unused;82};8384#endif /* __XEN_PUBLIC_CALLBACK_H__ */858687