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