xref: /openbmc/qemu/hw/i386/kvm/xenstore_impl.h (revision 0b29090a)
1 /*
2  * QEMU Xen emulation: The actual implementation of XenStore
3  *
4  * Copyright © 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
5  *
6  * Authors: David Woodhouse <dwmw2@infradead.org>
7  *
8  * This work is licensed under the terms of the GNU GPL, version 2 or later.
9  * See the COPYING file in the top-level directory.
10  */
11 
12 #ifndef QEMU_XENSTORE_IMPL_H
13 #define QEMU_XENSTORE_IMPL_H
14 
15 #include "hw/xen/xen_backend_ops.h"
16 
17 typedef struct XenstoreImplState XenstoreImplState;
18 
19 XenstoreImplState *xs_impl_create(unsigned int dom_id);
20 
21 char *xs_perm_as_string(unsigned int perm, unsigned int domid);
22 
23 /*
24  * These functions return *positive* error numbers. This is a little
25  * unconventional but it helps to keep us honest because there is
26  * also a very limited set of error numbers that they are permitted
27  * to return (those in xsd_errors).
28  */
29 
30 int xs_impl_read(XenstoreImplState *s, unsigned int dom_id,
31                  xs_transaction_t tx_id, const char *path, GByteArray *data);
32 int xs_impl_write(XenstoreImplState *s, unsigned int dom_id,
33                   xs_transaction_t tx_id, const char *path, GByteArray *data);
34 int xs_impl_directory(XenstoreImplState *s, unsigned int dom_id,
35                       xs_transaction_t tx_id, const char *path,
36                       uint64_t *gencnt, GList **items);
37 int xs_impl_transaction_start(XenstoreImplState *s, unsigned int dom_id,
38                               xs_transaction_t *tx_id);
39 int xs_impl_transaction_end(XenstoreImplState *s, unsigned int dom_id,
40                             xs_transaction_t tx_id, bool commit);
41 int xs_impl_rm(XenstoreImplState *s, unsigned int dom_id,
42                xs_transaction_t tx_id, const char *path);
43 int xs_impl_get_perms(XenstoreImplState *s, unsigned int dom_id,
44                       xs_transaction_t tx_id, const char *path, GList **perms);
45 int xs_impl_set_perms(XenstoreImplState *s, unsigned int dom_id,
46                       xs_transaction_t tx_id, const char *path, GList *perms);
47 
48 /* This differs from xs_watch_fn because it has the token */
49 typedef void(xs_impl_watch_fn)(void *opaque, const char *path,
50                                const char *token);
51 int xs_impl_watch(XenstoreImplState *s, unsigned int dom_id, const char *path,
52                   const char *token, xs_impl_watch_fn fn, void *opaque);
53 int xs_impl_unwatch(XenstoreImplState *s, unsigned int dom_id,
54                     const char *path, const char *token, xs_impl_watch_fn fn,
55                     void *opaque);
56 int xs_impl_reset_watches(XenstoreImplState *s, unsigned int dom_id);
57 
58 GByteArray *xs_impl_serialize(XenstoreImplState *s);
59 int xs_impl_deserialize(XenstoreImplState *s, GByteArray *bytes,
60                         unsigned int dom_id, xs_impl_watch_fn watch_fn,
61                         void *watch_opaque);
62 
63 #endif /* QEMU_XENSTORE_IMPL_H */
64