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