The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/xen/xenbus/xenbusb.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Core definitions and data structures shareable across OS platforms.
    3  *
    4  * Copyright (c) 2010 Spectra Logic Corporation
    5  * Copyright (C) 2008 Doug Rabson
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions, and the following disclaimer,
   13  *    without modification.
   14  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
   15  *    substantially similar to the "NO WARRANTY" disclaimer below
   16  *    ("Disclaimer") and any redistribution must be conditioned upon
   17  *    including a substantially similar Disclaimer requirement for further
   18  *    binary redistribution.
   19  *
   20  * NO WARRANTY
   21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
   24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   25  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
   30  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   31  * POSSIBILITY OF SUCH DAMAGES.
   32  *
   33  * $FreeBSD: releng/8.2/sys/xen/xenbus/xenbusb.h 215788 2010-11-24 01:03:03Z gibbs $
   34  */
   35 #ifndef _XEN_XENBUS_XENBUSB_H
   36 #define _XEN_XENBUS_XENBUSB_H
   37 
   38 /**
   39  * \file xenbusb.h
   40  *
   41  * Datastructures and function declarations for use in implementing
   42  * bus attachements (e.g. frontend and backend device busses) for XenBus.
   43  */
   44 #include "xenbusb_if.h"
   45 
   46 /**
   47  * Enumeration of state flag values for the xbs_flags field of
   48  * the xenbusb_softc structure.
   49  */
   50 typedef enum {
   51         /** */
   52         XBS_ATTACH_CH_ACTIVE = 0x01
   53 } xenbusb_softc_flag;
   54 
   55 /**
   56  * \brief Container for all state needed to manage a Xenbus Bus
   57  *        attachment.
   58  */
   59 struct xenbusb_softc {
   60         /**
   61          * XenStore watch used to monitor the subtree of the
   62          * XenStore where devices for this bus attachment arrive        
   63          * and depart.
   64          *
   65          * \note This field must be the first in the softc structure
   66          *       so that a simple cast can be used to retrieve the
   67          *       softc from within a XenStore watch event callback.
   68          */
   69         struct xs_watch         xbs_device_watch;
   70 
   71         /** Mutex used to protect fields of the xenbusb_softc. */
   72         struct mtx              xbs_lock;
   73 
   74         /** State flags. */
   75         xenbusb_softc_flag      xbs_flags;
   76 
   77         /**
   78          * A dedicated task for processing child arrival and
   79          * departure events.
   80          */
   81         struct task             xbs_probe_children;
   82 
   83         /**
   84          * Config Hook used to block boot processing until
   85          * XenBus devices complete their connection processing
   86          * with other VMs.
   87          */
   88         struct intr_config_hook xbs_attach_ch;
   89 
   90         /**
   91          * The number of children for this bus that are still
   92          * in the connecting (to other VMs) state.  This variable
   93          * is used to determine when to release xbs_attach_ch.
   94          */
   95         u_int                   xbs_connecting_children;
   96 
   97         /** The NewBus device_t for this bus attachment. */
   98         device_t                xbs_dev;
   99 
  100         /**
  101          * The VM relative path to the XenStore subtree this
  102          * bus attachment manages.
  103          */
  104         const char             *xbs_node;
  105 
  106         /**
  107          * The number of path components (strings separated by the '/'
  108          * character) that make up the device ID on this bus.
  109          */
  110         u_int                   xbs_id_components;      
  111 };
  112 
  113 /**
  114  * Enumeration of state flag values for the xbs_flags field of
  115  * the xenbusb_softc structure.
  116  */
  117 typedef enum {
  118 
  119         /**
  120          * This device is contributing to the xbs_connecting_children
  121          * count of its parent bus.
  122          */
  123         XDF_CONNECTING = 0x01
  124 } xenbus_dev_flag;
  125 
  126 /** Instance variables for devices on a XenBus bus. */
  127 struct xenbus_device_ivars {
  128         /**
  129          * XenStore watch used to monitor the subtree of the
  130          * XenStore where information about the otherend of
  131          * the split Xen device this device instance represents.
  132          *
  133          * \note This field must be the first in the instance
  134          *       variable structure so that a simple cast can be
  135          *       used to retrieve ivar data from within a XenStore
  136          *       watch event callback.
  137          */
  138         struct xs_watch         xd_otherend_watch;
  139 
  140         /** Sleepable lock used to protect instance data. */
  141         struct sx               xd_lock;
  142 
  143         /** State flags. */
  144         xenbus_dev_flag         xd_flags;
  145 
  146         /** The NewBus device_t for this XenBus device instance. */
  147         device_t                xd_dev;
  148 
  149         /**
  150          * The VM relative path to the XenStore subtree representing
  151          * this VMs half of this device.
  152          */
  153         char                   *xd_node;
  154 
  155         /** XenBus device type ("vbd", "vif", etc.). */
  156         char                   *xd_type;
  157 
  158         /**
  159          * Cached version of <xd_node>/state node in the XenStore.
  160          */
  161         enum xenbus_state       xd_state;
  162 
  163         /** The VM identifier of the other end of this split device. */
  164         int                     xd_otherend_id;
  165 
  166         /**
  167          * The path to the subtree of the XenStore where information
  168          * about the otherend of this split device instance.
  169          */
  170         char                   *xd_otherend_path;
  171 };
  172 
  173 /**
  174  * \brief Identify instances of this device type in the system.
  175  *
  176  * \param driver  The driver performing this identify action.
  177  * \param parent  The NewBus parent device for any devices this method adds.
  178  */
  179 void xenbusb_identify(driver_t *driver __unused, device_t parent);
  180 
  181 /**
  182  * \brief Perform common XenBus bus attach processing.
  183  *
  184  * \param dev            The NewBus device representing this XenBus bus.
  185  * \param bus_node       The XenStore path to the XenStore subtree for
  186  *                       this XenBus bus.
  187  * \param id_components  The number of '/' separated path components that
  188  *                       make up a unique device ID on this XenBus bus.
  189  *
  190  * \return  On success, 0. Otherwise an errno value indicating the
  191  *          type of failure.
  192  *
  193  * Intiailizes the softc for this bus, installs an interrupt driven
  194  * configuration hook to block boot processing until XenBus devices fully
  195  * configure, performs an initial probe/attach of the bus, and registers
  196  * a XenStore watch so we are notified when the bus topology changes.
  197  */
  198 int xenbusb_attach(device_t dev, char *bus_node, u_int id_components);
  199 
  200 /**
  201  * \brief Perform common XenBus bus resume handling.
  202  *
  203  * \param dev  The NewBus device representing this XenBus bus.
  204  *
  205  * \return  On success, 0. Otherwise an errno value indicating the
  206  *          type of failure.
  207  */
  208 int xenbusb_resume(device_t dev);
  209 
  210 /**
  211  * \brief Pretty-prints information about a child of a XenBus bus.
  212  *
  213  * \param dev    The NewBus device representing this XenBus bus.
  214  * \param child  The NewBus device representing a child of dev%'s XenBus bus.
  215  *
  216  * \return  On success, 0. Otherwise an errno value indicating the
  217  *          type of failure.
  218  */
  219 int xenbusb_print_child(device_t dev, device_t child);
  220 
  221 /**
  222  * \brief Common XenBus child instance variable read access method.
  223  *
  224  * \param dev     The NewBus device representing this XenBus bus.
  225  * \param child   The NewBus device representing a child of dev%'s XenBus bus.
  226  * \param index   The index of the instance variable to access.
  227  * \param result  The value of the instance variable accessed.
  228  *
  229  * \return  On success, 0. Otherwise an errno value indicating the
  230  *          type of failure.
  231  */
  232 int xenbusb_read_ivar(device_t dev, device_t child, int index,
  233                       uintptr_t *result);
  234 
  235 /**
  236  * \brief Common XenBus child instance variable write access method.
  237  *
  238  * \param dev    The NewBus device representing this XenBus bus.
  239  * \param child  The NewBus device representing a child of dev%'s XenBus bus.
  240  * \param index  The index of the instance variable to access.
  241  * \param value  The new value to set in the instance variable accessed.
  242  *
  243  * \return  On success, 0. Otherwise an errno value indicating the
  244  *          type of failure.
  245  */
  246 int xenbusb_write_ivar(device_t dev, device_t child, int index,
  247                        uintptr_t value);
  248 
  249 /**
  250  * \brief Attempt to add a XenBus device instance to this XenBus bus.
  251  *
  252  * \param dev   The NewBus device representing this XenBus bus.
  253  * \param type  The device type being added (e.g. "vbd", "vif").
  254  * \param id    The device ID for this device.
  255  *
  256  * \return  On success, 0. Otherwise an errno value indicating the
  257  *          type of failure.  Failure indicates that either the
  258  *          path to this device no longer exists or insufficient
  259  *          information exists in the XenStore to create a new
  260  *          device.
  261  *
  262  * If successful, this routine will add a device_t with instance
  263  * variable storage to the NewBus device topology.  Probe/Attach
  264  * processing is not performed by this routine, but must be scheduled
  265  * via the xbs_probe_children task.  This separation of responsibilities
  266  * is required to avoid hanging up the XenStore event delivery thread
  267  * with our probe/attach work in the event a device is added via
  268  * a callback from the XenStore.
  269  */
  270 int xenbusb_add_device(device_t dev, const char *type, const char *id);
  271 
  272 #endif /* _XEN_XENBUS_XENBUSB_H */

Cache object: 962a7802bfb5732af2278809226ad2ae


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.