brintos

brintos / linux-shallow public Read only

0
0
Text · 4.2 KiB · 13821e7 Raw
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