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/kern/bus_if.m

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 # Copyright (c) 1998 Doug Rabson
    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 # 2. Redistributions in binary form must reproduce the above copyright
   11 #    notice, this list of conditions and the following disclaimer in the
   12 #    documentation and/or other materials provided with the distribution.
   13 #
   14 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   15 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   17 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   18 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   19 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   20 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   21 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   22 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   23 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   24 # SUCH DAMAGE.
   25 #
   26 # $FreeBSD: releng/5.2/sys/kern/bus_if.m 119967 2003-09-10 21:37:10Z marcel $
   27 #
   28 
   29 #include <sys/bus.h>
   30 
   31 INTERFACE bus;
   32 
   33 #
   34 # Default implementations of some methods.
   35 #
   36 CODE {
   37         static struct resource *
   38         null_alloc_resource(device_t dev, device_t child,
   39             int type, int *rid, u_long start, u_long end,
   40             u_long count, u_int flags)
   41         {
   42             return (0);
   43         }
   44 };
   45 
   46 #
   47 # This is called from system code which prints out a description of a
   48 # device.  It should describe the attachment that the child has with
   49 # the parent.  For instance the TurboLaser bus prints which node the
   50 # device is attached to.  See bus_generic_print_child.9 for more 
   51 # information.
   52 # This method returns the number of characters output.
   53 #
   54 METHOD int print_child {
   55         device_t dev;
   56         device_t child;
   57 } DEFAULT bus_generic_print_child;
   58 
   59 # 
   60 # Called for each child device that 
   61 # did not succeed in probing for a
   62 # driver.
   63 #    
   64 METHOD void probe_nomatch {
   65         device_t dev;
   66         device_t child;
   67 };
   68 
   69 #
   70 # These two methods manage a bus specific set of instance variables of
   71 # a child device.  The intention is that each different type of bus
   72 # defines a set of appropriate instance variables (such as ports and
   73 # irqs for ISA bus etc.)
   74 #
   75 # This information could be given to the child device as a struct but
   76 # that makes it hard for a bus to add or remove variables without
   77 # forcing an edit and recompile for all drivers which may not be
   78 # possible for vendor supplied binary drivers.
   79 
   80 #
   81 # Read an instance variable.  Return 0 on success.
   82 #
   83 METHOD int read_ivar {
   84         device_t _dev;
   85         device_t _child;
   86         int _indx;
   87         uintptr_t *_result;
   88 };
   89 
   90 #
   91 # Write an instance variable.  Return 0 on success.
   92 #
   93 METHOD int write_ivar {
   94         device_t _dev;
   95         device_t _child;
   96         int _indx;
   97         uintptr_t _value;
   98 };
   99 
  100 #
  101 # Called after the child's DEVICE_DETACH method to allow the parent
  102 # to reclaim any resources allocated on behalf of the child.
  103 #
  104 METHOD void child_detached {
  105         device_t _dev;
  106         device_t _child;
  107 };
  108 
  109 #
  110 # Called when a new driver is added to the devclass which owns this
  111 # bus. The generic implementation of this method attempts to probe and
  112 # attach any un-matched children of the bus.
  113 #
  114 METHOD void driver_added {
  115         device_t _dev;
  116         driver_t *_driver;
  117 } DEFAULT bus_generic_driver_added;
  118 
  119 #
  120 # For busses which use use drivers supporting DEVICE_IDENTIFY to
  121 # enumerate their devices, these methods are used to create new
  122 # device instances. If place is non-NULL, the new device will be
  123 # added after the last existing child with the same order.
  124 #
  125 METHOD device_t add_child {
  126         device_t _dev;
  127         int _order;
  128         const char *_name;
  129         int _unit;
  130 };
  131 
  132 #
  133 # Allocate a system resource attached to `dev' on behalf of `child'.
  134 # The types are defined in <machine/resource.h>; the meaning of the
  135 # resource-ID field varies from bus to bus (but *rid == 0 is always
  136 # valid if the resource type is).  start and end reflect the allowable
  137 # range, and should be passed as `0UL' and `~0UL', respectively, if
  138 # the client has no range restriction.  count is the number of consecutive
  139 # indices in the resource required.  flags is a set of sharing flags
  140 # as defined in <sys/rman.h>.
  141 #
  142 # Returns a resource or a null pointer on failure.  The caller is
  143 # responsible for calling rman_activate_resource() when it actually
  144 # uses the resource.
  145 #
  146 METHOD struct resource * alloc_resource {
  147         device_t        _dev;
  148         device_t        _child;
  149         int             _type;
  150         int            *_rid;
  151         u_long          _start;
  152         u_long          _end;
  153         u_long          _count;
  154         u_int           _flags;
  155 } DEFAULT null_alloc_resource;
  156 
  157 METHOD int activate_resource {
  158         device_t        _dev;
  159         device_t        _child;
  160         int             _type;
  161         int             _rid;
  162         struct resource *_r;
  163 };
  164 
  165 METHOD int deactivate_resource {
  166         device_t        _dev;
  167         device_t        _child;
  168         int             _type;
  169         int             _rid;
  170         struct resource *_r;
  171 };
  172 
  173 #
  174 # Free a resource allocated by the preceding method.  The `rid' value
  175 # must be the same as the one returned by BUS_ALLOC_RESOURCE (which
  176 # is not necessarily the same as the one the client passed).
  177 #
  178 METHOD int release_resource {
  179         device_t        _dev;
  180         device_t        _child;
  181         int             _type;
  182         int             _rid;
  183         struct resource *_res;
  184 };
  185 
  186 METHOD int setup_intr {
  187         device_t        _dev;
  188         device_t        _child;
  189         struct resource *_irq;
  190         int             _flags;
  191         driver_intr_t   *_intr;
  192         void            *_arg;
  193         void            **_cookiep;
  194 };
  195 
  196 METHOD int teardown_intr {
  197         device_t        _dev;
  198         device_t        _child;
  199         struct resource *_irq;
  200         void            *_cookie;
  201 };
  202 
  203 #
  204 # Set the range used for a particular resource. Return EINVAL if
  205 # the type or rid are out of range.
  206 #
  207 METHOD int set_resource {
  208         device_t        _dev;
  209         device_t        _child;
  210         int             _type;
  211         int             _rid;
  212         u_long          _start;
  213         u_long          _count;
  214 };
  215 
  216 #
  217 # Get the range for a resource. Return ENOENT if the type or rid are
  218 # out of range or have not been set.
  219 #
  220 METHOD int get_resource {
  221         device_t        _dev;
  222         device_t        _child;
  223         int             _type;
  224         int             _rid;
  225         u_long          *_startp;
  226         u_long          *_countp;
  227 };
  228 
  229 #
  230 # Delete a resource.
  231 #
  232 METHOD void delete_resource {
  233         device_t        _dev;
  234         device_t        _child;
  235         int             _type;
  236         int             _rid;
  237 };
  238 
  239 #
  240 # Return a struct resource_list.
  241 #
  242 METHOD struct resource_list * get_resource_list {
  243         device_t        _dev;
  244         device_t        _child;
  245 } DEFAULT bus_generic_get_resource_list;
  246 
  247 #
  248 # Is the hardware described by _child still attached to the system?
  249 #
  250 # This method should return 0 if the device is not present.  It should
  251 # return -1 if it is present.  Any errors in determining should be
  252 # returned as a normal errno value.  Client drivers are to assume that
  253 # the device is present, even if there is an error determining if it is
  254 # there.  Busses are to try to avoid returning errors, but newcard will return
  255 # an error if the device fails to implement this method.
  256 #
  257 METHOD int child_present {
  258         device_t        _dev;
  259         device_t        _child;
  260 } DEFAULT bus_generic_child_present;
  261 
  262 #
  263 # Returns the pnp info for this device.  Return it as a string.  If the
  264 # string is insufficient for the storage, then return EOVERFLOW.
  265 #
  266 METHOD int child_pnpinfo_str {
  267         device_t        _dev;
  268         device_t        _child;
  269         char            *_buf;
  270         size_t          _buflen;
  271 };
  272 
  273 #
  274 # Returns the location for this device.  Return it as a string.  If the
  275 # string is insufficient for the storage, then return EOVERFLOW.
  276 #
  277 METHOD int child_location_str {
  278         device_t        _dev;
  279         device_t        _child;
  280         char            *_buf;
  281         size_t          _buflen;
  282 };
  283 
  284 #
  285 # Allow (bus) drivers to specify the trigger mode and polarity of the
  286 # specified interrupt.
  287 #
  288 METHOD int config_intr {
  289         device_t        _dev;
  290         int             _irq;
  291         enum intr_trigger _trig;
  292         enum intr_polarity _pol;
  293 } DEFAULT bus_generic_config_intr;

Cache object: 3809860c2e5fe59fa097650be832069d


[ 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.