Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: MIT */
0002 /******************************************************************************
0003  * callback.h
0004  *
0005  * Register guest OS callbacks with Xen.
0006  *
0007  * Copyright (c) 2006, Ian Campbell
0008  */
0009 
0010 #ifndef __XEN_PUBLIC_CALLBACK_H__
0011 #define __XEN_PUBLIC_CALLBACK_H__
0012 
0013 #include <xen/interface/xen.h>
0014 
0015 /*
0016  * Prototype for this hypercall is:
0017  *   long callback_op(int cmd, void *extra_args)
0018  * @cmd        == CALLBACKOP_??? (callback operation).
0019  * @extra_args == Operation-specific extra arguments (NULL if none).
0020  */
0021 
0022 /* x86: Callback for event delivery. */
0023 #define CALLBACKTYPE_event                 0
0024 
0025 /* x86: Failsafe callback when guest state cannot be restored by Xen. */
0026 #define CALLBACKTYPE_failsafe              1
0027 
0028 /* x86/64 hypervisor: Syscall by 64-bit guest app ('64-on-64-on-64'). */
0029 #define CALLBACKTYPE_syscall               2
0030 
0031 /*
0032  * x86/32 hypervisor: Only available on x86/32 when supervisor_mode_kernel
0033  *     feature is enabled. Do not use this callback type in new code.
0034  */
0035 #define CALLBACKTYPE_sysenter_deprecated   3
0036 
0037 /* x86: Callback for NMI delivery. */
0038 #define CALLBACKTYPE_nmi                   4
0039 
0040 /*
0041  * x86: sysenter is only available as follows:
0042  * - 32-bit hypervisor: with the supervisor_mode_kernel feature enabled
0043  * - 64-bit hypervisor: 32-bit guest applications on Intel CPUs
0044  *                      ('32-on-32-on-64', '32-on-64-on-64')
0045  *                      [nb. also 64-bit guest applications on Intel CPUs
0046  *                           ('64-on-64-on-64'), but syscall is preferred]
0047  */
0048 #define CALLBACKTYPE_sysenter              5
0049 
0050 /*
0051  * x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs
0052  *                    ('32-on-32-on-64', '32-on-64-on-64')
0053  */
0054 #define CALLBACKTYPE_syscall32             7
0055 
0056 /*
0057  * Disable event deliver during callback? This flag is ignored for event and
0058  * NMI callbacks: event delivery is unconditionally disabled.
0059  */
0060 #define _CALLBACKF_mask_events             0
0061 #define CALLBACKF_mask_events              (1U << _CALLBACKF_mask_events)
0062 
0063 /*
0064  * Register a callback.
0065  */
0066 #define CALLBACKOP_register                0
0067 struct callback_register {
0068     uint16_t type;
0069     uint16_t flags;
0070     xen_callback_t address;
0071 };
0072 
0073 /*
0074  * Unregister a callback.
0075  *
0076  * Not all callbacks can be unregistered. -EINVAL will be returned if
0077  * you attempt to unregister such a callback.
0078  */
0079 #define CALLBACKOP_unregister              1
0080 struct callback_unregister {
0081     uint16_t type;
0082     uint16_t _unused;
0083 };
0084 
0085 #endif /* __XEN_PUBLIC_CALLBACK_H__ */