1aa380c82SJeremy Fitzhardinge /****************************************************************************** 2aa380c82SJeremy Fitzhardinge * callback.h 3aa380c82SJeremy Fitzhardinge * 4aa380c82SJeremy Fitzhardinge * Register guest OS callbacks with Xen. 5aa380c82SJeremy Fitzhardinge * 6aa380c82SJeremy Fitzhardinge * Permission is hereby granted, free of charge, to any person obtaining a copy 7aa380c82SJeremy Fitzhardinge * of this software and associated documentation files (the "Software"), to 8aa380c82SJeremy Fitzhardinge * deal in the Software without restriction, including without limitation the 9aa380c82SJeremy Fitzhardinge * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10aa380c82SJeremy Fitzhardinge * sell copies of the Software, and to permit persons to whom the Software is 11aa380c82SJeremy Fitzhardinge * furnished to do so, subject to the following conditions: 12aa380c82SJeremy Fitzhardinge * 13aa380c82SJeremy Fitzhardinge * The above copyright notice and this permission notice shall be included in 14aa380c82SJeremy Fitzhardinge * all copies or substantial portions of the Software. 15aa380c82SJeremy Fitzhardinge * 16aa380c82SJeremy Fitzhardinge * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17aa380c82SJeremy Fitzhardinge * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18aa380c82SJeremy Fitzhardinge * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19aa380c82SJeremy Fitzhardinge * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20aa380c82SJeremy Fitzhardinge * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21aa380c82SJeremy Fitzhardinge * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22aa380c82SJeremy Fitzhardinge * DEALINGS IN THE SOFTWARE. 23aa380c82SJeremy Fitzhardinge * 24aa380c82SJeremy Fitzhardinge * Copyright (c) 2006, Ian Campbell 25aa380c82SJeremy Fitzhardinge */ 26aa380c82SJeremy Fitzhardinge 27aa380c82SJeremy Fitzhardinge #ifndef __XEN_PUBLIC_CALLBACK_H__ 28aa380c82SJeremy Fitzhardinge #define __XEN_PUBLIC_CALLBACK_H__ 29aa380c82SJeremy Fitzhardinge 30a1ce3928SDavid Howells #include <xen/interface/xen.h> 31aa380c82SJeremy Fitzhardinge 32aa380c82SJeremy Fitzhardinge /* 33aa380c82SJeremy Fitzhardinge * Prototype for this hypercall is: 34aa380c82SJeremy Fitzhardinge * long callback_op(int cmd, void *extra_args) 35aa380c82SJeremy Fitzhardinge * @cmd == CALLBACKOP_??? (callback operation). 36aa380c82SJeremy Fitzhardinge * @extra_args == Operation-specific extra arguments (NULL if none). 37aa380c82SJeremy Fitzhardinge */ 38aa380c82SJeremy Fitzhardinge 39d52eefb4SBoris Ostrovsky /* x86: Callback for event delivery. */ 40aa380c82SJeremy Fitzhardinge #define CALLBACKTYPE_event 0 41aa380c82SJeremy Fitzhardinge 42aa380c82SJeremy Fitzhardinge /* x86: Failsafe callback when guest state cannot be restored by Xen. */ 43aa380c82SJeremy Fitzhardinge #define CALLBACKTYPE_failsafe 1 44aa380c82SJeremy Fitzhardinge 45aa380c82SJeremy Fitzhardinge /* x86/64 hypervisor: Syscall by 64-bit guest app ('64-on-64-on-64'). */ 46aa380c82SJeremy Fitzhardinge #define CALLBACKTYPE_syscall 2 47aa380c82SJeremy Fitzhardinge 48aa380c82SJeremy Fitzhardinge /* 49aa380c82SJeremy Fitzhardinge * x86/32 hypervisor: Only available on x86/32 when supervisor_mode_kernel 50aa380c82SJeremy Fitzhardinge * feature is enabled. Do not use this callback type in new code. 51aa380c82SJeremy Fitzhardinge */ 52aa380c82SJeremy Fitzhardinge #define CALLBACKTYPE_sysenter_deprecated 3 53aa380c82SJeremy Fitzhardinge 54aa380c82SJeremy Fitzhardinge /* x86: Callback for NMI delivery. */ 55aa380c82SJeremy Fitzhardinge #define CALLBACKTYPE_nmi 4 56aa380c82SJeremy Fitzhardinge 57aa380c82SJeremy Fitzhardinge /* 58aa380c82SJeremy Fitzhardinge * x86: sysenter is only available as follows: 59aa380c82SJeremy Fitzhardinge * - 32-bit hypervisor: with the supervisor_mode_kernel feature enabled 60aa380c82SJeremy Fitzhardinge * - 64-bit hypervisor: 32-bit guest applications on Intel CPUs 61aa380c82SJeremy Fitzhardinge * ('32-on-32-on-64', '32-on-64-on-64') 62aa380c82SJeremy Fitzhardinge * [nb. also 64-bit guest applications on Intel CPUs 63aa380c82SJeremy Fitzhardinge * ('64-on-64-on-64'), but syscall is preferred] 64aa380c82SJeremy Fitzhardinge */ 65aa380c82SJeremy Fitzhardinge #define CALLBACKTYPE_sysenter 5 66aa380c82SJeremy Fitzhardinge 67aa380c82SJeremy Fitzhardinge /* 68aa380c82SJeremy Fitzhardinge * x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs 69aa380c82SJeremy Fitzhardinge * ('32-on-32-on-64', '32-on-64-on-64') 70aa380c82SJeremy Fitzhardinge */ 71aa380c82SJeremy Fitzhardinge #define CALLBACKTYPE_syscall32 7 72aa380c82SJeremy Fitzhardinge 73aa380c82SJeremy Fitzhardinge /* 74aa380c82SJeremy Fitzhardinge * Disable event deliver during callback? This flag is ignored for event and 75aa380c82SJeremy Fitzhardinge * NMI callbacks: event delivery is unconditionally disabled. 76aa380c82SJeremy Fitzhardinge */ 77aa380c82SJeremy Fitzhardinge #define _CALLBACKF_mask_events 0 78aa380c82SJeremy Fitzhardinge #define CALLBACKF_mask_events (1U << _CALLBACKF_mask_events) 79aa380c82SJeremy Fitzhardinge 80aa380c82SJeremy Fitzhardinge /* 81aa380c82SJeremy Fitzhardinge * Register a callback. 82aa380c82SJeremy Fitzhardinge */ 83aa380c82SJeremy Fitzhardinge #define CALLBACKOP_register 0 84aa380c82SJeremy Fitzhardinge struct callback_register { 85aa380c82SJeremy Fitzhardinge uint16_t type; 86aa380c82SJeremy Fitzhardinge uint16_t flags; 8748b5db20SJeremy Fitzhardinge xen_callback_t address; 88aa380c82SJeremy Fitzhardinge }; 89aa380c82SJeremy Fitzhardinge 90aa380c82SJeremy Fitzhardinge /* 91aa380c82SJeremy Fitzhardinge * Unregister a callback. 92aa380c82SJeremy Fitzhardinge * 93aa380c82SJeremy Fitzhardinge * Not all callbacks can be unregistered. -EINVAL will be returned if 94aa380c82SJeremy Fitzhardinge * you attempt to unregister such a callback. 95aa380c82SJeremy Fitzhardinge */ 96aa380c82SJeremy Fitzhardinge #define CALLBACKOP_unregister 1 97aa380c82SJeremy Fitzhardinge struct callback_unregister { 98aa380c82SJeremy Fitzhardinge uint16_t type; 99aa380c82SJeremy Fitzhardinge uint16_t _unused; 100aa380c82SJeremy Fitzhardinge }; 101aa380c82SJeremy Fitzhardinge 102aa380c82SJeremy Fitzhardinge #endif /* __XEN_PUBLIC_CALLBACK_H__ */ 103