1#- 2# Copyright (c) 2010 Spectra Logic Corporation 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions, and the following disclaimer, 10# without modification. 11# 2. Redistributions in binary form must reproduce at minimum a disclaimer 12# substantially similar to the "NO WARRANTY" disclaimer below 13# ("Disclaimer") and any redistribution must be conditioned upon 14# including a substantially similar Disclaimer requirement for further 15# binary redistribution. 16# 17# NO WARRANTY 18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 21# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22# HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 27# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28# POSSIBILITY OF SUCH DAMAGES. 29# 30# 31 32#include <sys/bus.h> 33#include <sys/lock.h> 34#include <sys/sx.h> 35#include <sys/taskqueue.h> 36 37#include <xen/xenstore/xenstorevar.h> 38#include <xen/xenbus/xenbusb.h> 39 40INTERFACE xenbusb; 41 42/** 43 * \brief Enumerate all devices of the given type on this bus. 44 * 45 * \param _dev NewBus device_t for this XenBus (front/back) bus instance. 46 * \param _type String indicating the device sub-tree (e.g. "vfb", "vif") 47 * to enumerate. 48 * 49 * \return On success, 0. Otherwise an errno value indicating the 50 * type of failure. 51 * 52 * Devices that are found should be entered into the NewBus hierarchy via 53 * xenbusb_add_device(). xenbusb_add_device() ignores duplicate detects 54 * and ignores duplicate devices, so it can be called unconditionally 55 * for any device found in the XenStore. 56 */ 57METHOD int enumerate_type { 58 device_t _dev; 59 const char *_type; 60}; 61 62/** 63 * \brief Determine and store the XenStore path for the other end of 64 * a split device whose local end is represented by ivars. 65 * 66 * If successful, the xd_otherend_path field of the child's instance 67 * variables must be updated. 68 * 69 * \param _dev NewBus device_t for this XenBus (front/back) bus instance. 70 * \param _ivars Instance variables from the XenBus child device for 71 * which to perform this function. 72 * 73 * \return On success, 0. Otherwise an errno value indicating the 74 * type of failure. 75 */ 76METHOD int get_otherend_node { 77 device_t _dev; 78 struct xenbus_device_ivars *_ivars; 79} 80 81/** 82 * \brief Handle a XenStore change detected in the peer tree of a child 83 * device of the bus. 84 * 85 * \param _bus NewBus device_t for this XenBus (front/back) bus instance. 86 * \param _child NewBus device_t for the child device whose peer XenStore 87 * tree has changed. 88 * \param _state The current state of the peer. 89 */ 90METHOD void otherend_changed { 91 device_t _bus; 92 device_t _child; 93 enum xenbus_state _state; 94} DEFAULT xenbusb_otherend_changed; 95 96/** 97 * \brief Handle a XenStore change detected in the local tree of a child 98 * device of the bus. 99 * 100 * \param _bus NewBus device_t for this XenBus (front/back) bus instance. 101 * \param _child NewBus device_t for the child device whose peer XenStore 102 * tree has changed. 103 * \param _path The tree relative sub-path to the modified node. The empty 104 * string indicates the root of the tree was destroyed. 105 */ 106METHOD void localend_changed { 107 device_t _bus; 108 device_t _child; 109 const char * _path; 110} DEFAULT xenbusb_localend_changed; 111