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/sys/devicestat.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  * Copyright (c) 1997, 1998, 1999 Kenneth D. Merry.
    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  * 3. The name of the author may not be used to endorse or promote products
   14  *    derived from this software without specific prior written permission.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  *
   28  * $FreeBSD: src/sys/sys/devicestat.h,v 1.25.4.1 2005/01/31 23:26:56 imp Exp $
   29  */
   30 
   31 #ifndef _DEVICESTAT_H
   32 #define _DEVICESTAT_H
   33 
   34 #include <sys/queue.h>
   35 #include <sys/time.h>
   36 
   37 /*
   38  * XXX: Should really be SPECNAMELEN
   39  */
   40 #define DEVSTAT_NAME_LEN  16
   41 
   42 /*
   43  * device name for the mmap device
   44  */
   45 #define DEVSTAT_DEVICE_NAME "devstat"
   46 
   47 /*
   48  * ATTENTION:  The devstat version below should be incremented any time a
   49  * change is made in struct devstat, or any time a change is made in the
   50  * enumerated types that struct devstat uses.  (Only if those changes
   51  * would require a recompile -- i.e. re-arranging the order of an
   52  * enumerated type or something like that.)  This version number is used by
   53  * userland utilities to determine whether or not they are in sync with the
   54  * kernel.
   55  */
   56 #define DEVSTAT_VERSION    6
   57 
   58 /*
   59  * These flags specify which statistics features are supported or not
   60  * supported by a particular device.  The default is all statistics are
   61  * supported.
   62  */
   63 typedef enum {
   64         DEVSTAT_ALL_SUPPORTED   = 0x00,
   65         DEVSTAT_NO_BLOCKSIZE    = 0x01,
   66         DEVSTAT_NO_ORDERED_TAGS = 0x02,
   67         DEVSTAT_BS_UNAVAILABLE  = 0x04
   68 } devstat_support_flags;
   69 
   70 typedef enum {
   71         DEVSTAT_NO_DATA = 0x00,
   72         DEVSTAT_READ    = 0x01,
   73         DEVSTAT_WRITE   = 0x02,
   74         DEVSTAT_FREE    = 0x03
   75 } devstat_trans_flags;
   76 #define DEVSTAT_N_TRANS_FLAGS   4
   77 
   78 typedef enum {
   79         DEVSTAT_TAG_SIMPLE      = 0x00,
   80         DEVSTAT_TAG_HEAD        = 0x01,
   81         DEVSTAT_TAG_ORDERED     = 0x02,
   82         DEVSTAT_TAG_NONE        = 0x03
   83 } devstat_tag_type;
   84 
   85 typedef enum {
   86         DEVSTAT_PRIORITY_MIN    = 0x000,
   87         DEVSTAT_PRIORITY_OTHER  = 0x020,
   88         DEVSTAT_PRIORITY_PASS   = 0x030,
   89         DEVSTAT_PRIORITY_FD     = 0x040,
   90         DEVSTAT_PRIORITY_WFD    = 0x050,
   91         DEVSTAT_PRIORITY_TAPE   = 0x060,
   92         DEVSTAT_PRIORITY_CD     = 0x090,
   93         DEVSTAT_PRIORITY_DISK   = 0x110,
   94         DEVSTAT_PRIORITY_ARRAY  = 0x120,
   95         DEVSTAT_PRIORITY_MAX    = 0xfff
   96 } devstat_priority;
   97 
   98 /*
   99  * These types are intended to aid statistics gathering/display programs.
  100  * The first 13 types (up to the 'target' flag) are identical numerically
  101  * to the SCSI device type numbers.  The next 3 types designate the device
  102  * interface.  Currently the choices are IDE, SCSI, and 'other'.  The last
  103  * flag specifies whether or not the given device is a passthrough device
  104  * or not.  If it is a passthrough device, the lower 4 bits specify which
  105  * type of physical device lies under the passthrough device, and the next
  106  * 4 bits specify the interface.
  107  */
  108 typedef enum {
  109         DEVSTAT_TYPE_DIRECT     = 0x000,
  110         DEVSTAT_TYPE_SEQUENTIAL = 0x001,
  111         DEVSTAT_TYPE_PRINTER    = 0x002,
  112         DEVSTAT_TYPE_PROCESSOR  = 0x003,
  113         DEVSTAT_TYPE_WORM       = 0x004,
  114         DEVSTAT_TYPE_CDROM      = 0x005,
  115         DEVSTAT_TYPE_SCANNER    = 0x006,
  116         DEVSTAT_TYPE_OPTICAL    = 0x007,
  117         DEVSTAT_TYPE_CHANGER    = 0x008,
  118         DEVSTAT_TYPE_COMM       = 0x009,
  119         DEVSTAT_TYPE_ASC0       = 0x00a,
  120         DEVSTAT_TYPE_ASC1       = 0x00b,
  121         DEVSTAT_TYPE_STORARRAY  = 0x00c,
  122         DEVSTAT_TYPE_ENCLOSURE  = 0x00d,
  123         DEVSTAT_TYPE_FLOPPY     = 0x00e,
  124         DEVSTAT_TYPE_MASK       = 0x00f,
  125         DEVSTAT_TYPE_IF_SCSI    = 0x010,
  126         DEVSTAT_TYPE_IF_IDE     = 0x020,
  127         DEVSTAT_TYPE_IF_OTHER   = 0x030,
  128         DEVSTAT_TYPE_IF_MASK    = 0x0f0,
  129         DEVSTAT_TYPE_PASS       = 0x100
  130 } devstat_type_flags;
  131 
  132 /*
  133  * XXX: Next revision should add
  134  *      off_t           offset[DEVSTAT_N_TRANS_FLAGS];
  135  * XXX: which should contain the offset of the last completed transfer.
  136  */
  137 struct devstat {
  138         /* Internal house-keeping fields */
  139         u_int                   sequence0;           /* Update sequence# */
  140         int                     allocated;           /* Allocated entry */
  141         u_int                   start_count;         /* started ops */
  142         u_int                   end_count;           /* completed ops */
  143         struct bintime          busy_from;           /*
  144                                                       * busy time unaccounted
  145                                                       * for since this time
  146                                                       */
  147         STAILQ_ENTRY(devstat)   dev_links;
  148         u_int32_t               device_number;       /*
  149                                                       * Devstat device
  150                                                       * number.
  151                                                       */
  152         char                    device_name[DEVSTAT_NAME_LEN];
  153         int                     unit_number;
  154         u_int64_t               bytes[DEVSTAT_N_TRANS_FLAGS];
  155         u_int64_t               operations[DEVSTAT_N_TRANS_FLAGS];
  156         struct bintime          duration[DEVSTAT_N_TRANS_FLAGS];
  157         struct bintime          busy_time;
  158         struct bintime          creation_time;       /* 
  159                                                       * Time the device was
  160                                                       * created.
  161                                                       */
  162         u_int32_t               block_size;          /* Block size, bytes */
  163         u_int64_t               tag_types[3];        /*
  164                                                       * The number of
  165                                                       * simple, ordered, 
  166                                                       * and head of queue 
  167                                                       * tags sent.
  168                                                       */
  169         devstat_support_flags   flags;               /*
  170                                                       * Which statistics
  171                                                       * are supported by a 
  172                                                       * given device.
  173                                                       */
  174         devstat_type_flags      device_type;         /* Device type */
  175         devstat_priority        priority;            /* Controls list pos. */
  176         const void              *id;                 /*
  177                                                       * Identification for
  178                                                       * GEOM nodes
  179                                                       */
  180         u_int                   sequence1;           /* Update sequence# */
  181 };
  182 
  183 STAILQ_HEAD(devstatlist, devstat);
  184 
  185 #ifdef _KERNEL
  186 struct bio;
  187 
  188 struct devstat *devstat_new_entry(const void *dev_name, int unit_number,
  189                                   u_int32_t block_size,
  190                                   devstat_support_flags flags,
  191                                   devstat_type_flags device_type,
  192                                   devstat_priority priority);
  193 
  194 void devstat_remove_entry(struct devstat *ds);
  195 void devstat_start_transaction(struct devstat *ds, struct bintime *now);
  196 void devstat_start_transaction_bio(struct devstat *ds, struct bio *bp);
  197 void devstat_end_transaction(struct devstat *ds, u_int32_t bytes, 
  198                              devstat_tag_type tag_type,
  199                              devstat_trans_flags flags,
  200                              struct bintime *now, struct bintime *then);
  201 void devstat_end_transaction_bio(struct devstat *ds, struct bio *bp);
  202 #endif
  203 
  204 #endif /* _DEVICESTAT_H */

Cache object: 97a01f594211f8b5726f4532f44e6dd9


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