FreeBSD xen subsystem code
xenstorevar.h
1/******************************************************************************
2 * xenstorevar.h
3 *
4 * Method declarations and structures for accessing the XenStore.h
5 *
6 * Copyright (C) 2005 Rusty Russell, IBM Corporation
7 * Copyright (C) 2005 XenSource Ltd.
8 * Copyright (C) 2009,2010 Spectra Logic Corporation
9 *
10 * This file may be distributed separately from the Linux kernel, or
11 * incorporated into other software packages, subject to the following license:
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining a copy
14 * of this source file (the "Software"), to deal in the Software without
15 * restriction, including without limitation the rights to use, copy, modify,
16 * merge, publish, distribute, sublicense, and/or sell copies of the Software,
17 * and to permit persons to whom the Software is furnished to do so, subject to
18 * the following conditions:
19 *
20 * The above copyright notice and this permission notice shall be included in
21 * all copies or substantial portions of the Software.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
29 * IN THE SOFTWARE.
30 *
31 * $FreeBSD$
32 */
33
34#ifndef _XEN_XENSTORE_XENSTOREVAR_H
35#define _XEN_XENSTORE_XENSTOREVAR_H
36
37#include <sys/queue.h>
38#include <sys/bus.h>
39#include <sys/eventhandler.h>
40#include <sys/malloc.h>
41#include <sys/sbuf.h>
42
43#include <machine/stdarg.h>
44
45#include <xen/xen-os.h>
46#include <contrib/xen/grant_table.h>
47#include <contrib/xen/io/xenbus.h>
48#include <contrib/xen/io/xs_wire.h>
49
50#include "xenbus_if.h"
51
52/* XenStore allocations including XenStore data returned to clients. */
53MALLOC_DECLARE(M_XENSTORE);
54
55struct xs_watch;
56
57typedef void (xs_watch_cb_t)(struct xs_watch *, const char **vec,
58 unsigned int len);
59
60/* Register callback to watch subtree (node) in the XenStore. */
62{
63 LIST_ENTRY(xs_watch) list;
64
65 /* Path being watched. */
66 char *node;
67
68 /* Callback (executed in a process context with no locks held). */
69 xs_watch_cb_t *callback;
70
71 /* Callback client data untouched by the XenStore watch mechanism. */
72 uintptr_t callback_data;
73
74 /* Maximum number of pending watch events to be delivered. */
75 unsigned int max_pending;
76
77 /*
78 * Private counter used by xenstore to keep track of the pending
79 * watches. Protected by xs.watch_events_lock.
80 */
81 unsigned int pending;
82};
83LIST_HEAD(xs_watch_list, xs_watch);
84
85typedef int (*xs_event_handler_t)(void *);
86
88{
89 uint32_t id;
90};
91
92#define XST_NIL ((struct xs_transaction) { 0 })
93
99bool xs_initialized(void);
100
106evtchn_port_t xs_evtchn(void);
107
113vm_paddr_t xs_address(void);
114
130int xs_directory(struct xs_transaction t, const char *dir,
131 const char *node, unsigned int *num, const char ***result);
132
144int xs_exists(struct xs_transaction t, const char *dir, const char *node);
145
163int xs_read(struct xs_transaction t, const char *dir,
164 const char *node, unsigned int *len, void **result);
165
177int xs_write(struct xs_transaction t, const char *dir,
178 const char *node, const char *string);
179
190int xs_mkdir(struct xs_transaction t, const char *dir,
191 const char *node);
192
203int xs_rm(struct xs_transaction t, const char *dir, const char *node);
204
215int xs_rm_tree(struct xs_transaction t, const char *dir,
216 const char *node);
217
230int xs_transaction_start(struct xs_transaction *t);
231
242int xs_transaction_end(struct xs_transaction t, int abort);
243
244/*
245 * Single file read and scanf parsing of the result.
246 *
247 * \param t The XenStore transaction covering this request.
248 * \param dir The dirname of the path to read.
249 * \param node The basename of the path to read.
250 * \param scancountp The number of input values assigned (i.e. the result
251 * of scanf).
252 * \param fmt Scanf format string followed by a variable number of
253 * scanf input arguments.
254 *
255 * \return On success, 0. Otherwise an errno value indicating the
256 * type of failure.
257 */
258int xs_scanf(struct xs_transaction t,
259 const char *dir, const char *node, int *scancountp, const char *fmt, ...)
260 __attribute__((format(scanf, 5, 6)));
261
274int xs_printf(struct xs_transaction t, const char *dir,
275 const char *node, const char *fmt, ...)
276 __attribute__((format(printf, 4, 5)));
277
290int xs_vprintf(struct xs_transaction t, const char *dir,
291 const char *node, const char *fmt, va_list ap);
292
327int xs_gather(struct xs_transaction t, const char *dir, ...);
328
343int xs_register_watch(struct xs_watch *watch);
344
355void xs_unregister_watch(struct xs_watch *watch);
356
367struct sbuf *xs_join(const char *, const char *);
368
372void xs_lock(void);
373
377void xs_unlock(void);
378
379#endif /* _XEN_XENSTORE_XENSTOREVAR_H */