86 lines · c
1/* SPDX-License-Identifier: MIT */2/******************************************************************************3 * callback.h4 *5 * Register guest OS callbacks with Xen.6 *7 * Copyright (c) 2006, Ian Campbell8 */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 024 25/* x86: Failsafe callback when guest state cannot be restored by Xen. */26#define CALLBACKTYPE_failsafe 127 28/* x86/64 hypervisor: Syscall by 64-bit guest app ('64-on-64-on-64'). */29#define CALLBACKTYPE_syscall 230 31/*32 * x86/32 hypervisor: Only available on x86/32 when supervisor_mode_kernel33 * feature is enabled. Do not use this callback type in new code.34 */35#define CALLBACKTYPE_sysenter_deprecated 336 37/* x86: Callback for NMI delivery. */38#define CALLBACKTYPE_nmi 439 40/*41 * x86: sysenter is only available as follows:42 * - 32-bit hypervisor: with the supervisor_mode_kernel feature enabled43 * - 64-bit hypervisor: 32-bit guest applications on Intel CPUs44 * ('32-on-32-on-64', '32-on-64-on-64')45 * [nb. also 64-bit guest applications on Intel CPUs46 * ('64-on-64-on-64'), but syscall is preferred]47 */48#define CALLBACKTYPE_sysenter 549 50/*51 * x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs52 * ('32-on-32-on-64', '32-on-64-on-64')53 */54#define CALLBACKTYPE_syscall32 755 56/*57 * Disable event deliver during callback? This flag is ignored for event and58 * NMI callbacks: event delivery is unconditionally disabled.59 */60#define _CALLBACKF_mask_events 061#define CALLBACKF_mask_events (1U << _CALLBACKF_mask_events)62 63/*64 * Register a callback.65 */66#define CALLBACKOP_register 067struct 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 if77 * you attempt to unregister such a callback.78 */79#define CALLBACKOP_unregister 180struct callback_unregister {81 uint16_t type;82 uint16_t _unused;83};84 85#endif /* __XEN_PUBLIC_CALLBACK_H__ */86