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/dev/cardbus/rbus.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 /*      $NetBSD: rbus.h,v 1.6 2003/07/08 10:06:30 itojun Exp $  */
    2 /*
    3  * Copyright (c) 1999
    4  *     HAYAKAWA Koichi.  All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  * 3. All advertising materials mentioning features or use of this software
   15  *    must display the following acknowledgement:
   16  *      This product includes software developed by the author.
   17  * 4. The name of the author may not be used to endorse or promote products
   18  *    derived from this software without specific prior written permission.
   19  *
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   24  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
   25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   27  * 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 IN
   30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   31  * POSSIBILITY OF SUCH DAMAGE.
   32  */
   33 
   34 #ifndef _DEV_CARDBUS_RBUS_H_
   35 #define _DEV_CARDBUS_RBUS_H_
   36 
   37 /*
   38  * This file defines the rbus (pseudo) class
   39  *
   40  * What is rbus?
   41  * 
   42  *  The rbus is a recursive bus-space administrator.  This means a
   43  *  parent bus-space administrator, which usually belongs to a bus
   44  *  bridge, makes some child bus-space administrators and gives
   45  *  (restricted) bus-space to the children.  There is a root bus-space
   46  *  administrator which maintains the whole bus-space.
   47  *
   48  * Why recursive?
   49  *
   50  *  The recursive bus-space administration has two virtues.  The
   51  *  former is this modelling matches the actual memory and io space
   52  *  management of bridge devices well.  The latter is that the rbus is a
   53  *  distributed management system, so it matches well with a
   54  *  multi-thread kernel.
   55  *
   56  * Abstraction
   57  *
   58  *  The rbus models bus-to-bus bridges into three types: dedicated, shared,
   59  *  and slave.  Dedicated means that the bridge has dedicated bus space.
   60  *  Shared means that the bridge has bus space, but this bus space is
   61  *  shared with other bus bridges.  Slave means a bus bridge which
   62  *  does not have it own bus space and asks a parent bus bridge for bus
   63  *  space when a client requests bus space from the bridge.
   64  */
   65 
   66 
   67 /* require sys/extent.h */
   68 /* require machine/bus.h */
   69 
   70 #define rbus 1
   71 
   72 
   73 struct extent;
   74 
   75 
   76 /*
   77  *     General rule
   78  *
   79  * 1) When a rbustag has no space for child (it means rb_extent is
   80  *    NULL), ask bus-space for parent through rb_parent.
   81  *
   82  * 2) When a rbustag has its own space (whether shared or dedicated),
   83  *    allocate from rb_ext.
   84  */
   85 struct rbustag {
   86   bus_space_tag_t rb_bt;
   87   struct rbustag *rb_parent;
   88   struct extent *rb_ext;
   89   bus_addr_t rb_start;
   90   bus_addr_t rb_end;
   91   bus_addr_t rb_offset;
   92 #if notyet
   93   int (*rb_space_alloc) __P((struct rbustag *, bus_addr_t, bus_addr_t,
   94                              bus_addr_t, bus_size_t, bus_addr_t, bus_addr_t,
   95                              int, bus_addr_t *, bus_space_handle_t *));
   96   int (*rbus_space_free) __P((struct rbustag *, bus_space_handle_t,
   97                               bus_size_t, bus_addr_t *));
   98 #endif
   99   int rb_flags;
  100 #define RBUS_SPACE_INVALID   0x00
  101 #define RBUS_SPACE_SHARE     0x01
  102 #define RBUS_SPACE_DEDICATE  0x02
  103 #define RBUS_SPACE_MASK      0x03
  104 #define RBUS_SPACE_ASK_PARENT 0x04
  105   /* your own data below */
  106   void *rb_md;
  107 };
  108 
  109 typedef struct rbustag *rbus_tag_t;
  110 
  111 
  112 
  113 
  114 /*
  115  * These functions sugarcoat rbus interface to make rbus being used
  116  * easier.  These functions should be member functions of rbus
  117  * `class'.
  118  */
  119 int rbus_space_alloc __P((rbus_tag_t, bus_addr_t, bus_size_t, bus_addr_t,
  120     bus_addr_t, int, bus_addr_t *, bus_space_handle_t *));
  121 
  122 int rbus_space_alloc_subregion __P((rbus_tag_t, bus_addr_t, bus_addr_t,
  123     bus_addr_t, bus_size_t, bus_addr_t, bus_addr_t, int,
  124     bus_addr_t *, bus_space_handle_t *));
  125 
  126 int rbus_space_free __P((rbus_tag_t, bus_space_handle_t, bus_size_t,
  127     bus_addr_t *));
  128 
  129 
  130 /*
  131  * These functions create rbus instance.  These functions are
  132  * so-called-as a constructor of rbus.
  133  *
  134  * rbus_new is a constructor which make an rbus instance from a parent
  135  * rbus.
  136  */
  137 rbus_tag_t rbus_new __P((rbus_tag_t, bus_addr_t, bus_size_t, bus_addr_t, int));
  138 
  139 rbus_tag_t rbus_new_root_delegate __P((bus_space_tag_t, bus_addr_t, bus_size_t,
  140     bus_addr_t));
  141 rbus_tag_t rbus_new_root_share __P((bus_space_tag_t, struct extent *,
  142     bus_addr_t, bus_size_t, bus_addr_t));
  143 
  144 /*
  145  * This function release bus-space used by the argument.  This
  146  * function is so-called-as a destructor.
  147  */
  148 int rbus_delete __P((rbus_tag_t));
  149 
  150 
  151 /*
  152  * Machine-dependent definitions.
  153  */
  154 #include <machine/rbus_machdep.h>
  155 
  156 #endif /* !_DEV_CARDBUS_RBUS_H_ */

Cache object: eadb57501c1a46186f0ff9d3fd025fcf


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