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