140 lines · c
1/*2 * Private include for xenbus communications.3 *4 * Copyright (C) 2005 Rusty Russell, IBM Corporation5 * Copyright (C) 2005 XenSource Ltd.6 *7 * This program is free software; you can redistribute it and/or8 * modify it under the terms of the GNU General Public License version 29 * as published by the Free Software Foundation; or, when distributed10 * separately from the Linux kernel or incorporated into other11 * software packages, subject to the following license:12 *13 * Permission is hereby granted, free of charge, to any person obtaining a copy14 * of this source file (the "Software"), to deal in the Software without15 * 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 to18 * the following conditions:19 *20 * The above copyright notice and this permission notice shall be included in21 * all copies or substantial portions of the Software.22 *23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS29 * IN THE SOFTWARE.30 */31 32#ifndef _XENBUS_XENBUS_H33#define _XENBUS_XENBUS_H34 35#include <linux/mutex.h>36#include <linux/uio.h>37#include <xen/xenbus.h>38 39#define XEN_BUS_ID_SIZE 2040 41struct xen_bus_type {42 char *root;43 unsigned int levels;44 int (*get_bus_id)(char bus_id[XEN_BUS_ID_SIZE], const char *nodename);45 int (*probe)(struct xen_bus_type *bus, const char *type,46 const char *dir);47 bool (*otherend_will_handle)(struct xenbus_watch *watch,48 const char *path, const char *token);49 void (*otherend_changed)(struct xenbus_watch *watch, const char *path,50 const char *token);51 struct bus_type bus;52};53 54enum xenstore_init {55 XS_UNKNOWN,56 XS_PV,57 XS_HVM,58 XS_LOCAL,59};60 61struct xs_watch_event {62 struct list_head list;63 unsigned int len;64 struct xenbus_watch *handle;65 const char *path;66 const char *token;67 char body[];68};69 70enum xb_req_state {71 xb_req_state_queued,72 xb_req_state_wait_reply,73 xb_req_state_got_reply,74 xb_req_state_aborted75};76 77struct xb_req_data {78 struct list_head list;79 wait_queue_head_t wq;80 struct xsd_sockmsg msg;81 uint32_t caller_req_id;82 enum xsd_sockmsg_type type;83 char *body;84 const struct kvec *vec;85 int num_vecs;86 int err;87 enum xb_req_state state;88 bool user_req;89 void (*cb)(struct xb_req_data *);90 void *par;91};92 93extern enum xenstore_init xen_store_domain_type;94extern const struct attribute_group *xenbus_dev_groups[];95extern struct mutex xs_response_mutex;96extern struct list_head xs_reply_list;97extern struct list_head xb_write_list;98extern wait_queue_head_t xb_waitq;99extern struct mutex xb_write_mutex;100 101int xs_init(void);102int xb_init_comms(void);103void xb_deinit_comms(void);104int xs_watch_msg(struct xs_watch_event *event);105void xs_request_exit(struct xb_req_data *req);106 107int xenbus_match(struct device *_dev, const struct device_driver *_drv);108int xenbus_dev_probe(struct device *_dev);109void xenbus_dev_remove(struct device *_dev);110int xenbus_register_driver_common(struct xenbus_driver *drv,111 struct xen_bus_type *bus,112 struct module *owner,113 const char *mod_name);114int xenbus_probe_node(struct xen_bus_type *bus,115 const char *type,116 const char *nodename);117int xenbus_probe_devices(struct xen_bus_type *bus);118 119void xenbus_dev_changed(const char *node, struct xen_bus_type *bus);120 121int xenbus_dev_suspend(struct device *dev);122int xenbus_dev_resume(struct device *dev);123int xenbus_dev_cancel(struct device *dev);124 125void xenbus_otherend_changed(struct xenbus_watch *watch,126 const char *path, const char *token,127 int ignore_on_shutdown);128 129int xenbus_read_otherend_details(struct xenbus_device *xendev,130 char *id_node, char *path_node);131 132void xenbus_ring_ops_init(void);133 134int xenbus_dev_request_and_reply(struct xsd_sockmsg *msg, void *par);135void xenbus_dev_queue_reply(struct xb_req_data *req);136 137extern unsigned int xb_dev_generation_id;138 139#endif140