This patch adds a new source module, xen-bus-helper.c, which builds on basic libxenstore primitives to provide functions to create (setting permissions appropriately) and destroy xenstore areas, and functions to 'printf' and 'scanf' nodes therein. The main xen-bus code then uses these primitives [1] to initialize and destroy the frontend and backend areas for a XenDevice during realize and unrealize respectively. The 'xen-block' implementation is extended with a 'get_name' method that returns the VBD number. This number is required to 'name' the xenstore areas. NOTE: An exit handler is also added to make sure the xenstore areas are cleaned up if QEMU terminates without devices being unrealized. [1] The 'scanf' functions are actually not yet needed, but they will be needed by code delivered in subsequent patches. Signed-off-by: Paul Durrant <paul.durrant@citrix.com> Reviewed-by: Anthony Perard <anthony.perard@citrix.com> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
40 lines
1.5 KiB
C
40 lines
1.5 KiB
C
/*
|
|
* Copyright (c) 2018 Citrix Systems Inc.
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#ifndef HW_XEN_BUS_HELPER_H
|
|
#define HW_XEN_BUS_HELPER_H
|
|
|
|
#include "hw/xen/xen_common.h"
|
|
|
|
const char *xs_strstate(enum xenbus_state state);
|
|
|
|
void xs_node_create(struct xs_handle *xsh, xs_transaction_t tid,
|
|
const char *node, struct xs_permissions perms[],
|
|
unsigned int nr_perms, Error **errp);
|
|
void xs_node_destroy(struct xs_handle *xsh, xs_transaction_t tid,
|
|
const char *node, Error **errp);
|
|
|
|
/* Write to node/key unless node is empty, in which case write to key */
|
|
void xs_node_vprintf(struct xs_handle *xsh, xs_transaction_t tid,
|
|
const char *node, const char *key, Error **errp,
|
|
const char *fmt, va_list ap)
|
|
GCC_FMT_ATTR(6, 0);
|
|
void xs_node_printf(struct xs_handle *xsh, xs_transaction_t tid,
|
|
const char *node, const char *key, Error **errp,
|
|
const char *fmt, ...)
|
|
GCC_FMT_ATTR(6, 7);
|
|
|
|
/* Read from node/key unless node is empty, in which case read from key */
|
|
int xs_node_vscanf(struct xs_handle *xsh, xs_transaction_t tid,
|
|
const char *node, const char *key, Error **errp,
|
|
const char *fmt, va_list ap);
|
|
int xs_node_scanf(struct xs_handle *xsh, xs_transaction_t tid,
|
|
const char *node, const char *key, Error **errp,
|
|
const char *fmt, ...);
|
|
|
|
#endif /* HW_XEN_BUS_HELPER_H */
|