{
const char *message = NULL;
int err;
- xenbus_transaction_t xbt;
+ struct xenbus_transaction xbt;
err = setup_tpmring(dev, tp);
if (err) {
if (!tp)
return -ENOMEM;
- err = xenbus_scanf(XBT_NULL, dev->nodename,
+ err = xenbus_scanf(XBT_NIL, dev->nodename,
"handle", "%i", &handle);
if (XENBUS_EXIST_ERR(err))
return err;
unsigned long long new_target;
int err;
- err = xenbus_scanf(XBT_NULL, "memory", "target", "%llu", &new_target);
+ err = xenbus_scanf(XBT_NIL, "memory", "target", "%llu", &new_target);
if (err != 1) {
/* This is ok (for domain0 at least) - so just return */
return;
DPRINTK("");
- err = xenbus_scanf(XBT_NULL, dev->nodename, "physical-device", "%x:%x",
+ err = xenbus_scanf(XBT_NIL, dev->nodename, "physical-device", "%x:%x",
&major, &minor);
if (XENBUS_EXIST_ERR(err)) {
/* Since this watch will fire once immediately after it is
return;
}
- be->mode = xenbus_read(XBT_NULL, dev->nodename, "mode", NULL);
+ be->mode = xenbus_read(XBT_NIL, dev->nodename, "mode", NULL);
if (IS_ERR(be->mode)) {
err = PTR_ERR(be->mode);
be->mode = NULL;
*/
static void connect(struct backend_info *be)
{
- xenbus_transaction_t xbt;
+ struct xenbus_transaction xbt;
int err;
struct xenbus_device *dev = be->dev;
DPRINTK("%s", dev->otherend);
- err = xenbus_gather(XBT_NULL, dev->otherend, "ring-ref", "%lu", &ring_ref,
+ err = xenbus_gather(XBT_NIL, dev->otherend, "ring-ref", "%lu", &ring_ref,
"event-channel", "%u", &evtchn, NULL);
if (err) {
xenbus_dev_fatal(dev, err,
struct blkfront_info *info;
/* FIXME: Use dynamic device id if this is not set. */
- err = xenbus_scanf(XBT_NULL, dev->nodename,
+ err = xenbus_scanf(XBT_NIL, dev->nodename,
"virtual-device", "%i", &vdevice);
if (err != 1) {
xenbus_dev_fatal(dev, err, "reading virtual-device");
struct blkfront_info *info)
{
const char *message = NULL;
- xenbus_transaction_t xbt;
+ struct xenbus_transaction xbt;
int err;
/* Create shared ring, alloc event channel. */
DPRINTK("blkfront.c:connect:%s.\n", info->xbdev->otherend);
- err = xenbus_gather(XBT_NULL, info->xbdev->otherend,
+ err = xenbus_gather(XBT_NIL, info->xbdev->otherend,
"sectors", "%lu", §ors,
"info", "%u", &binfo,
"sector-size", "%lu", §or_size,
return;
sprintf(dir, "cpu/%d", cpu);
- err = xenbus_scanf(XBT_NULL, dir, "availability", "%s", state);
+ err = xenbus_scanf(XBT_NIL, dir, "availability", "%s", state);
if (err != 1) {
printk(KERN_ERR "XENBUS: Unable to read cpu state\n");
return;
const char **vec, unsigned int len)
{
char *str;
- xenbus_transaction_t xbt;
+ struct xenbus_transaction xbt;
int err;
if (shutting_down != SHUTDOWN_INVALID)
unsigned int len)
{
char sysrq_key = '\0';
- xenbus_transaction_t xbt;
+ struct xenbus_transaction xbt;
int err;
again:
const struct xenbus_device_id *id)
{
const char *message;
- xenbus_transaction_t xbt;
+ struct xenbus_transaction xbt;
int err;
struct backend_info *be = kzalloc(sizeof(struct backend_info),
GFP_KERNEL);
DPRINTK("netback_uevent");
- val = xenbus_read(XBT_NULL, xdev->nodename, "script", NULL);
+ val = xenbus_read(XBT_NIL, xdev->nodename, "script", NULL);
if (IS_ERR(val)) {
int err = PTR_ERR(val);
xenbus_dev_fatal(xdev, err, "reading script");
DPRINTK("");
- err = xenbus_scanf(XBT_NULL, dev->nodename, "handle", "%li", &handle);
+ err = xenbus_scanf(XBT_NIL, dev->nodename, "handle", "%li", &handle);
if (XENBUS_EXIST_ERR(err)) {
/* Since this watch will fire once immediately after it is
registered, we expect this. Ignore it, and wait for the
*bytes = ~0UL;
*usec = 0;
- ratestr = xenbus_read(XBT_NULL, dev->nodename, "rate", NULL);
+ ratestr = xenbus_read(XBT_NIL, dev->nodename, "rate", NULL);
if (IS_ERR(ratestr))
return;
char *s, *e, *macstr;
int i;
- macstr = s = xenbus_read(XBT_NULL, dev->nodename, "mac", NULL);
+ macstr = s = xenbus_read(XBT_NIL, dev->nodename, "mac", NULL);
if (IS_ERR(macstr))
return PTR_ERR(macstr);
DPRINTK("");
- err = xenbus_gather(XBT_NULL, dev->otherend,
+ err = xenbus_gather(XBT_NIL, dev->otherend,
"tx-ring-ref", "%lu", &tx_ring_ref,
"rx-ring-ref", "%lu", &rx_ring_ref,
"event-channel", "%u", &evtchn, NULL);
struct netfront_info *info;
unsigned int handle;
- err = xenbus_scanf(XBT_NULL, dev->nodename, "handle", "%u", &handle);
+ err = xenbus_scanf(XBT_NIL, dev->nodename, "handle", "%u", &handle);
if (err != 1) {
xenbus_dev_fatal(dev, err, "reading handle");
return err;
char *s, *e, *macstr;
int i;
- macstr = s = xenbus_read(XBT_NULL, dev->nodename, "mac", NULL);
+ macstr = s = xenbus_read(XBT_NIL, dev->nodename, "mac", NULL);
if (IS_ERR(macstr))
return PTR_ERR(macstr);
struct netfront_info *info)
{
const char *message;
- xenbus_transaction_t xbt;
+ struct xenbus_transaction xbt;
int err;
err = xen_net_read_mac(dev, info->mac);
struct netfront_info *np = netdev_priv(dev);
int val;
- if (xenbus_scanf(XBT_NULL, np->xbdev->otherend, "feature-sg",
+ if (xenbus_scanf(XBT_NIL, np->xbdev->otherend, "feature-sg",
"%d", &val) < 0)
val = 0;
if (!val)
dev_dbg(&pdev->xdev->dev, "Reading frontend config\n");
- err = xenbus_gather(XBT_NULL, pdev->xdev->otherend,
+ err = xenbus_gather(XBT_NIL, pdev->xdev->otherend,
"pci-op-ref", "%u", &gnt_ref,
"event-channel", "%u", &remote_evtchn,
"magic", NULL, &magic, NULL);
dev_dbg(&pdev->xdev->dev, "Publishing pci roots\n");
- err = xenbus_scanf(XBT_NULL, pdev->xdev->nodename,
+ err = xenbus_scanf(XBT_NIL, pdev->xdev->nodename,
"root_num", "%d", &root_num);
if (err == 0 || err == -ENOENT)
root_num = 0;
goto out;
}
- err = xenbus_scanf(XBT_NULL, pdev->xdev->nodename,
+ err = xenbus_scanf(XBT_NIL, pdev->xdev->nodename,
str, "%x:%x", &d, &b);
if (err < 0)
goto out;
dev_dbg(&pdev->xdev->dev, "writing root %d at %04x:%02x\n",
root_num, domain, bus);
- err = xenbus_printf(XBT_NULL, pdev->xdev->nodename, str,
+ err = xenbus_printf(XBT_NIL, pdev->xdev->nodename, str,
"%04x:%02x", domain, bus);
if (err)
goto out;
- err = xenbus_printf(XBT_NULL, pdev->xdev->nodename,
+ err = xenbus_printf(XBT_NIL, pdev->xdev->nodename,
"root_num", "%d", (root_num + 1));
out:
dev_dbg(&pdev->xdev->dev, "getting be setup\n");
- err = xenbus_scanf(XBT_NULL, pdev->xdev->nodename, "num_devs", "%d",
+ err = xenbus_scanf(XBT_NIL, pdev->xdev->nodename, "num_devs", "%d",
&num_devs);
if (err != 1) {
if (err >= 0)
goto out;
}
- err = xenbus_scanf(XBT_NULL, pdev->xdev->nodename, dev_str,
+ err = xenbus_scanf(XBT_NIL, pdev->xdev->nodename, dev_str,
"%x:%x:%x.%x", &domain, &bus, &slot, &func);
if (err < 0) {
xenbus_dev_fatal(pdev->xdev, err,
static int pcifront_publish_info(struct pcifront_device *pdev)
{
int err = 0;
- xenbus_transaction_t trans;
+ struct xenbus_transaction trans;
err = xenbus_grant_ring(pdev->xdev, virt_to_mfn(pdev->sh_info));
if (err < 0)
goto out;
}
- err = xenbus_scanf(XBT_NULL, pdev->xdev->otherend,
+ err = xenbus_scanf(XBT_NIL, pdev->xdev->otherend,
"root_num", "%d", &num_roots);
if (err == -ENOENT) {
xenbus_dev_error(pdev->xdev, err,
goto out;
}
- err = xenbus_scanf(XBT_NULL, pdev->xdev->otherend, str,
+ err = xenbus_scanf(XBT_NIL, pdev->xdev->otherend, str,
"%x:%x", &domain, &bus);
if (err != 2) {
if (err >= 0)
= container_of(watch, struct backend_info, backend_watch);
struct xenbus_device *dev = be->dev;
- err = xenbus_scanf(XBT_NULL, dev->nodename,
+ err = xenbus_scanf(XBT_NIL, dev->nodename,
"instance","%li", &instance);
if (XENBUS_EXIST_ERR(err)) {
return;
static void connect(struct backend_info *be)
{
- xenbus_transaction_t xbt;
+ struct xenbus_transaction xbt;
int err;
struct xenbus_device *dev = be->dev;
unsigned long ready = 1;
unsigned int evtchn;
int err;
- err = xenbus_gather(XBT_NULL, dev->otherend,
+ err = xenbus_gather(XBT_NIL, dev->otherend,
"ring-ref", "%lu", &ring_ref,
"event-channel", "%u", &evtchn, NULL);
if (err) {
if (state == dev->state)
return 0;
- err = xenbus_scanf(XBT_NULL, dev->nodename, "state", "%d",
+ err = xenbus_scanf(XBT_NIL, dev->nodename, "state", "%d",
¤t_state);
if (err != 1)
return 0;
- err = xenbus_printf(XBT_NULL, dev->nodename, "state", "%d", state);
+ err = xenbus_printf(XBT_NIL, dev->nodename, "state", "%d", state);
if (err) {
if (state != XenbusStateClosing) /* Avoid looping */
xenbus_dev_fatal(dev, err, "writing new state");
goto fail;
}
- if (xenbus_write(XBT_NULL, path_buffer, "error", printf_buffer) != 0) {
+ if (xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer) != 0) {
printk("xenbus: failed to write error node for %s (%s)\n",
dev->nodename, printf_buffer);
goto fail;
enum xenbus_state xenbus_read_driver_state(const char *path)
{
enum xenbus_state result;
- int err = xenbus_gather(XBT_NULL, path, "state", "%d", &result, NULL);
+ int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL);
if (err)
result = XenbusStateClosed;
struct xenbus_dev_transaction {
struct list_head list;
- xenbus_transaction_t handle;
+ struct xenbus_transaction handle;
};
struct xenbus_dev_data {
}
if (msg_type == XS_TRANSACTION_START) {
- trans->handle = simple_strtoul(reply, NULL, 0);
+ trans->handle.id = simple_strtoul(reply, NULL, 0);
list_add(&trans->list, &u->transactions);
} else if (msg_type == XS_TRANSACTION_END) {
list_for_each_entry(trans, &u->transactions, list)
- if (trans->handle == u->u.msg.tx_id)
+ if (trans->handle.id == u->u.msg.tx_id)
break;
BUG_ON(&trans->list == &u->transactions);
list_del(&trans->list);
static int read_otherend_details(struct xenbus_device *xendev,
char *id_node, char *path_node)
{
- int err = xenbus_gather(XBT_NULL, xendev->nodename,
+ int err = xenbus_gather(XBT_NIL, xendev->nodename,
id_node, "%i", &xendev->otherend_id,
path_node, NULL, &xendev->otherend,
NULL);
return err;
}
if (strlen(xendev->otherend) == 0 ||
- !xenbus_exists(XBT_NULL, xendev->otherend, "")) {
+ !xenbus_exists(XBT_NIL, xendev->otherend, "")) {
xenbus_dev_fatal(xendev, -ENOENT, "missing other end from %s",
xendev->nodename);
free_otherend_details(xendev);
devid = strrchr(nodename, '/') + 1;
- err = xenbus_gather(XBT_NULL, nodename, "frontend-id", "%i", &domid,
+ err = xenbus_gather(XBT_NIL, nodename, "frontend-id", "%i", &domid,
"frontend", NULL, &frontend,
NULL);
if (err)
return err;
if (strlen(frontend) == 0)
err = -ERANGE;
- if (!err && !xenbus_exists(XBT_NULL, frontend, ""))
+ if (!err && !xenbus_exists(XBT_NIL, frontend, ""))
err = -ENOENT;
kfree(frontend);
if (!nodename)
return -ENOMEM;
- dir = xenbus_directory(XBT_NULL, nodename, "", &dir_n);
+ dir = xenbus_directory(XBT_NIL, nodename, "", &dir_n);
if (IS_ERR(dir)) {
kfree(nodename);
return PTR_ERR(dir);
unsigned int dir_n = 0;
int i;
- dir = xenbus_directory(XBT_NULL, bus->root, type, &dir_n);
+ dir = xenbus_directory(XBT_NIL, bus->root, type, &dir_n);
if (IS_ERR(dir))
return PTR_ERR(dir);
char **dir;
unsigned int i, dir_n;
- dir = xenbus_directory(XBT_NULL, bus->root, "", &dir_n);
+ dir = xenbus_directory(XBT_NIL, bus->root, "", &dir_n);
if (IS_ERR(dir))
return PTR_ERR(dir);
if (char_count(node, '/') < 2)
return;
- exists = xenbus_exists(XBT_NULL, node, "");
+ exists = xenbus_exists(XBT_NIL, node, "");
if (!exists) {
xenbus_cleanup_devices(node, &bus->bus);
return;
}
/* Send message to xs, get kmalloc'ed reply. ERR_PTR() on error. */
-static void *xs_talkv(xenbus_transaction_t t,
+static void *xs_talkv(struct xenbus_transaction t,
enum xsd_sockmsg_type type,
const struct kvec *iovec,
unsigned int num_vecs,
unsigned int i;
int err;
- msg.tx_id = t;
+ msg.tx_id = t.id;
msg.req_id = 0;
msg.type = type;
msg.len = 0;
}
/* Simplified version of xs_talkv: single message. */
-static void *xs_single(xenbus_transaction_t t,
+static void *xs_single(struct xenbus_transaction t,
enum xsd_sockmsg_type type,
const char *string,
unsigned int *len)
return ret;
}
-char **xenbus_directory(xenbus_transaction_t t,
+char **xenbus_directory(struct xenbus_transaction t,
const char *dir, const char *node, unsigned int *num)
{
char *strings, *path;
EXPORT_SYMBOL_GPL(xenbus_directory);
/* Check if a path exists. Return 1 if it does. */
-int xenbus_exists(xenbus_transaction_t t,
+int xenbus_exists(struct xenbus_transaction t,
const char *dir, const char *node)
{
char **d;
* Returns a kmalloced value: call free() on it after use.
* len indicates length in bytes.
*/
-void *xenbus_read(xenbus_transaction_t t,
+void *xenbus_read(struct xenbus_transaction t,
const char *dir, const char *node, unsigned int *len)
{
char *path;
/* Write the value of a single file.
* Returns -err on failure.
*/
-int xenbus_write(xenbus_transaction_t t,
+int xenbus_write(struct xenbus_transaction t,
const char *dir, const char *node, const char *string)
{
const char *path;
EXPORT_SYMBOL_GPL(xenbus_write);
/* Create a new directory. */
-int xenbus_mkdir(xenbus_transaction_t t,
+int xenbus_mkdir(struct xenbus_transaction t,
const char *dir, const char *node)
{
char *path;
EXPORT_SYMBOL_GPL(xenbus_mkdir);
/* Destroy a file or directory (directories must be empty). */
-int xenbus_rm(xenbus_transaction_t t, const char *dir, const char *node)
+int xenbus_rm(struct xenbus_transaction t, const char *dir, const char *node)
{
char *path;
int ret;
/* Start a transaction: changes by others will not be seen during this
* transaction, and changes will not be visible to others until end.
*/
-int xenbus_transaction_start(xenbus_transaction_t *t)
+int xenbus_transaction_start(struct xenbus_transaction *t)
{
char *id_str;
down_read(&xs_state.suspend_mutex);
- id_str = xs_single(XBT_NULL, XS_TRANSACTION_START, "", NULL);
+ id_str = xs_single(XBT_NIL, XS_TRANSACTION_START, "", NULL);
if (IS_ERR(id_str)) {
up_read(&xs_state.suspend_mutex);
return PTR_ERR(id_str);
}
- *t = simple_strtoul(id_str, NULL, 0);
+ t->id = simple_strtoul(id_str, NULL, 0);
kfree(id_str);
return 0;
}
/* End a transaction.
* If abandon is true, transaction is discarded instead of committed.
*/
-int xenbus_transaction_end(xenbus_transaction_t t, int abort)
+int xenbus_transaction_end(struct xenbus_transaction t, int abort)
{
char abortstr[2];
int err;
EXPORT_SYMBOL_GPL(xenbus_transaction_end);
/* Single read and scanf: returns -errno or num scanned. */
-int xenbus_scanf(xenbus_transaction_t t,
+int xenbus_scanf(struct xenbus_transaction t,
const char *dir, const char *node, const char *fmt, ...)
{
va_list ap;
EXPORT_SYMBOL_GPL(xenbus_scanf);
/* Single printf and write: returns -errno or 0. */
-int xenbus_printf(xenbus_transaction_t t,
+int xenbus_printf(struct xenbus_transaction t,
const char *dir, const char *node, const char *fmt, ...)
{
va_list ap;
EXPORT_SYMBOL_GPL(xenbus_printf);
/* Takes tuples of names, scanf-style args, and void **, NULL terminated. */
-int xenbus_gather(xenbus_transaction_t t, const char *dir, ...)
+int xenbus_gather(struct xenbus_transaction t, const char *dir, ...)
{
va_list ap;
const char *name;
iov[1].iov_base = (void *)token;
iov[1].iov_len = strlen(token) + 1;
- return xs_error(xs_talkv(XBT_NULL, XS_WATCH, iov,
+ return xs_error(xs_talkv(XBT_NIL, XS_WATCH, iov,
ARRAY_SIZE(iov), NULL));
}
iov[1].iov_base = (char *)token;
iov[1].iov_len = strlen(token) + 1;
- return xs_error(xs_talkv(XBT_NULL, XS_UNWATCH, iov,
+ return xs_error(xs_talkv(XBT_NIL, XS_UNWATCH, iov,
ARRAY_SIZE(iov), NULL));
}
#include <xen/interface/io/xenbus.h>
#include <xen/interface/io/xs_wire.h>
-#define XBT_NULL 0
-
/* Register callback to watch this node. */
struct xenbus_watch
{
int xenbus_register_backend(struct xenbus_driver *drv);
void xenbus_unregister_driver(struct xenbus_driver *drv);
-typedef u32 xenbus_transaction_t;
+struct xenbus_transaction
+{
+ u32 id;
+};
+
+/* Nil transaction ID. */
+#define XBT_NIL ((struct xenbus_transaction) { 0 })
-char **xenbus_directory(xenbus_transaction_t t,
+char **xenbus_directory(struct xenbus_transaction t,
const char *dir, const char *node, unsigned int *num);
-void *xenbus_read(xenbus_transaction_t t,
+void *xenbus_read(struct xenbus_transaction t,
const char *dir, const char *node, unsigned int *len);
-int xenbus_write(xenbus_transaction_t t,
+int xenbus_write(struct xenbus_transaction t,
const char *dir, const char *node, const char *string);
-int xenbus_mkdir(xenbus_transaction_t t,
+int xenbus_mkdir(struct xenbus_transaction t,
const char *dir, const char *node);
-int xenbus_exists(xenbus_transaction_t t,
+int xenbus_exists(struct xenbus_transaction t,
const char *dir, const char *node);
-int xenbus_rm(xenbus_transaction_t t, const char *dir, const char *node);
-int xenbus_transaction_start(xenbus_transaction_t *t);
-int xenbus_transaction_end(xenbus_transaction_t t, int abort);
+int xenbus_rm(struct xenbus_transaction t, const char *dir, const char *node);
+int xenbus_transaction_start(struct xenbus_transaction *t);
+int xenbus_transaction_end(struct xenbus_transaction t, int abort);
/* Single read and scanf: returns -errno or num scanned if > 0. */
-int xenbus_scanf(xenbus_transaction_t t,
+int xenbus_scanf(struct xenbus_transaction t,
const char *dir, const char *node, const char *fmt, ...)
__attribute__((format(scanf, 4, 5)));
/* Single printf and write: returns -errno or 0. */
-int xenbus_printf(xenbus_transaction_t t,
+int xenbus_printf(struct xenbus_transaction t,
const char *dir, const char *node, const char *fmt, ...)
__attribute__((format(printf, 4, 5)));
/* Generic read function: NULL-terminated triples of name,
* sprintf-style type string, and pointer. Returns 0 or errno.*/
-int xenbus_gather(xenbus_transaction_t t, const char *dir, ...);
+int xenbus_gather(struct xenbus_transaction t, const char *dir, ...);
/* notifer routines for when the xenstore comes up */
int register_xenstore_notifier(struct notifier_block *nb);