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

Cache object: 2c3c505e404f999ab421f13dc60a64ce


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