Initial revision
[linux-2.6.git] / include / xen / interface / callback.h
1 /******************************************************************************
2  * callback.h
3  *
4  * Register guest OS callbacks with Xen.
5  *
6  * Copyright (c) 2006, Ian Campbell
7  */
8
9 #ifndef __XEN_PUBLIC_CALLBACK_H__
10 #define __XEN_PUBLIC_CALLBACK_H__
11
12 #include "xen.h"
13
14 /*
15  * Prototype for this hypercall is:
16  *   long callback_op(int cmd, void *extra_args)
17  * @cmd        == CALLBACKOP_??? (callback operation).
18  * @extra_args == Operation-specific extra arguments (NULL if none).
19  */
20
21 #define CALLBACKTYPE_event                 0
22 #define CALLBACKTYPE_failsafe              1
23 #define CALLBACKTYPE_syscall               2 /* x86_64 only */
24 /*
25  * sysenter is only available on x86_32 with the
26  * supervisor_mode_kernel option enabled.
27  */
28 #define CALLBACKTYPE_sysenter              3
29 #define CALLBACKTYPE_nmi                   4
30
31 /*
32  * Disable event deliver during callback? This flag is ignored for event and
33  * NMI callbacks: event delivery is unconditionally disabled.
34  */
35 #define _CALLBACKF_mask_events             0
36 #define CALLBACKF_mask_events              (1U << _CALLBACKF_mask_events)
37
38 /*
39  * Register a callback.
40  */
41 #define CALLBACKOP_register                0
42 struct callback_register {
43     uint16_t type;
44     uint16_t flags;
45     xen_callback_t address;
46 };
47 typedef struct callback_register callback_register_t;
48 DEFINE_XEN_GUEST_HANDLE(callback_register_t);
49
50 /*
51  * Unregister a callback.
52  *
53  * Not all callbacks can be unregistered. -EINVAL will be returned if
54  * you attempt to unregister such a callback.
55  */
56 #define CALLBACKOP_unregister              1
57 struct callback_unregister {
58     uint16_t type;
59     uint16_t _unused;
60 };
61 typedef struct callback_unregister callback_unregister_t;
62 DEFINE_XEN_GUEST_HANDLE(callback_unregister_t);
63
64 #endif /* __XEN_PUBLIC_CALLBACK_H__ */
65
66 /*
67  * Local variables:
68  * mode: C
69  * c-set-style: "BSD"
70  * c-basic-offset: 4
71  * tab-width: 4
72  * indent-tabs-mode: nil
73  * End:
74  */