13a9fd824SRoger Pau Monné /****************************************************************************** 23a9fd824SRoger Pau Monné * callback.h 33a9fd824SRoger Pau Monné * 43a9fd824SRoger Pau Monné * Register guest OS callbacks with Xen. 53a9fd824SRoger Pau Monné * 63a9fd824SRoger Pau Monné * Permission is hereby granted, free of charge, to any person obtaining a copy 73a9fd824SRoger Pau Monné * of this software and associated documentation files (the "Software"), to 83a9fd824SRoger Pau Monné * deal in the Software without restriction, including without limitation the 93a9fd824SRoger Pau Monné * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 103a9fd824SRoger Pau Monné * sell copies of the Software, and to permit persons to whom the Software is 113a9fd824SRoger Pau Monné * furnished to do so, subject to the following conditions: 123a9fd824SRoger Pau Monné * 133a9fd824SRoger Pau Monné * The above copyright notice and this permission notice shall be included in 143a9fd824SRoger Pau Monné * all copies or substantial portions of the Software. 153a9fd824SRoger Pau Monné * 163a9fd824SRoger Pau Monné * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 173a9fd824SRoger Pau Monné * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 183a9fd824SRoger Pau Monné * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 193a9fd824SRoger Pau Monné * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 203a9fd824SRoger Pau Monné * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 213a9fd824SRoger Pau Monné * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 223a9fd824SRoger Pau Monné * DEALINGS IN THE SOFTWARE. 233a9fd824SRoger Pau Monné * 243a9fd824SRoger Pau Monné * Copyright (c) 2006, Ian Campbell 253a9fd824SRoger Pau Monné */ 263a9fd824SRoger Pau Monné 273a9fd824SRoger Pau Monné #ifndef __XEN_PUBLIC_CALLBACK_H__ 283a9fd824SRoger Pau Monné #define __XEN_PUBLIC_CALLBACK_H__ 293a9fd824SRoger Pau Monné 303a9fd824SRoger Pau Monné #include "xen.h" 313a9fd824SRoger Pau Monné 323a9fd824SRoger Pau Monné /* 333a9fd824SRoger Pau Monné * Prototype for this hypercall is: 343a9fd824SRoger Pau Monné * long callback_op(int cmd, void *extra_args) 353a9fd824SRoger Pau Monné * @cmd == CALLBACKOP_??? (callback operation). 363a9fd824SRoger Pau Monné * @extra_args == Operation-specific extra arguments (NULL if none). 373a9fd824SRoger Pau Monné */ 383a9fd824SRoger Pau Monné 393a9fd824SRoger Pau Monné /* x86: Callback for event delivery. */ 403a9fd824SRoger Pau Monné #define CALLBACKTYPE_event 0 413a9fd824SRoger Pau Monné 423a9fd824SRoger Pau Monné /* x86: Failsafe callback when guest state cannot be restored by Xen. */ 433a9fd824SRoger Pau Monné #define CALLBACKTYPE_failsafe 1 443a9fd824SRoger Pau Monné 453a9fd824SRoger Pau Monné /* x86/64 hypervisor: Syscall by 64-bit guest app ('64-on-64-on-64'). */ 463a9fd824SRoger Pau Monné #define CALLBACKTYPE_syscall 2 473a9fd824SRoger Pau Monné 483a9fd824SRoger Pau Monné /* 493a9fd824SRoger Pau Monné * x86/32 hypervisor: Only available on x86/32 when supervisor_mode_kernel 503a9fd824SRoger Pau Monné * feature is enabled. Do not use this callback type in new code. 513a9fd824SRoger Pau Monné */ 523a9fd824SRoger Pau Monné #define CALLBACKTYPE_sysenter_deprecated 3 533a9fd824SRoger Pau Monné 543a9fd824SRoger Pau Monné /* x86: Callback for NMI delivery. */ 553a9fd824SRoger Pau Monné #define CALLBACKTYPE_nmi 4 563a9fd824SRoger Pau Monné 573a9fd824SRoger Pau Monné /* 583a9fd824SRoger Pau Monné * x86: sysenter is only available as follows: 593a9fd824SRoger Pau Monné * - 32-bit hypervisor: with the supervisor_mode_kernel feature enabled 603a9fd824SRoger Pau Monné * - 64-bit hypervisor: 32-bit guest applications on Intel CPUs 613a9fd824SRoger Pau Monné * ('32-on-32-on-64', '32-on-64-on-64') 623a9fd824SRoger Pau Monné * [nb. also 64-bit guest applications on Intel CPUs 633a9fd824SRoger Pau Monné * ('64-on-64-on-64'), but syscall is preferred] 643a9fd824SRoger Pau Monné */ 653a9fd824SRoger Pau Monné #define CALLBACKTYPE_sysenter 5 663a9fd824SRoger Pau Monné 673a9fd824SRoger Pau Monné /* 683a9fd824SRoger Pau Monné * x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs 693a9fd824SRoger Pau Monné * ('32-on-32-on-64', '32-on-64-on-64') 703a9fd824SRoger Pau Monné */ 713a9fd824SRoger Pau Monné #define CALLBACKTYPE_syscall32 7 723a9fd824SRoger Pau Monné 733a9fd824SRoger Pau Monné /* 743a9fd824SRoger Pau Monné * Disable event deliver during callback? This flag is ignored for event and 753a9fd824SRoger Pau Monné * NMI callbacks: event delivery is unconditionally disabled. 763a9fd824SRoger Pau Monné */ 773a9fd824SRoger Pau Monné #define _CALLBACKF_mask_events 0 783a9fd824SRoger Pau Monné #define CALLBACKF_mask_events (1U << _CALLBACKF_mask_events) 793a9fd824SRoger Pau Monné 803a9fd824SRoger Pau Monné /* 813a9fd824SRoger Pau Monné * Register a callback. 823a9fd824SRoger Pau Monné */ 833a9fd824SRoger Pau Monné #define CALLBACKOP_register 0 843a9fd824SRoger Pau Monné struct callback_register { 853a9fd824SRoger Pau Monné uint16_t type; 863a9fd824SRoger Pau Monné uint16_t flags; 873a9fd824SRoger Pau Monné xen_callback_t address; 883a9fd824SRoger Pau Monné }; 893a9fd824SRoger Pau Monné typedef struct callback_register callback_register_t; 903a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(callback_register_t); 913a9fd824SRoger Pau Monné 923a9fd824SRoger Pau Monné /* 933a9fd824SRoger Pau Monné * Unregister a callback. 943a9fd824SRoger Pau Monné * 953a9fd824SRoger Pau Monné * Not all callbacks can be unregistered. -EINVAL will be returned if 963a9fd824SRoger Pau Monné * you attempt to unregister such a callback. 973a9fd824SRoger Pau Monné */ 983a9fd824SRoger Pau Monné #define CALLBACKOP_unregister 1 993a9fd824SRoger Pau Monné struct callback_unregister { 1003a9fd824SRoger Pau Monné uint16_t type; 1013a9fd824SRoger Pau Monné uint16_t _unused; 1023a9fd824SRoger Pau Monné }; 1033a9fd824SRoger Pau Monné typedef struct callback_unregister callback_unregister_t; 1043a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(callback_unregister_t); 1053a9fd824SRoger Pau Monné 1063a9fd824SRoger Pau Monné #if __XEN_INTERFACE_VERSION__ < 0x00030207 1073a9fd824SRoger Pau Monné #undef CALLBACKTYPE_sysenter 1083a9fd824SRoger Pau Monné #define CALLBACKTYPE_sysenter CALLBACKTYPE_sysenter_deprecated 1093a9fd824SRoger Pau Monné #endif 1103a9fd824SRoger Pau Monné 1113a9fd824SRoger Pau Monné #endif /* __XEN_PUBLIC_CALLBACK_H__ */ 1123a9fd824SRoger Pau Monné 1133a9fd824SRoger Pau Monné /* 1143a9fd824SRoger Pau Monné * Local variables: 1153a9fd824SRoger Pau Monné * mode: C 1163a9fd824SRoger Pau Monné * c-file-style: "BSD" 1173a9fd824SRoger Pau Monné * c-basic-offset: 4 1183a9fd824SRoger Pau Monné * tab-width: 4 1193a9fd824SRoger Pau Monné * indent-tabs-mode: nil 1203a9fd824SRoger Pau Monné * End: 1213a9fd824SRoger Pau Monné */ 122