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/chio.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: chio.h,v 1.13 2015/09/06 06:01:02 dholland Exp $       */
    2 
    3 /*-
    4  * Copyright (c) 1996, 1999 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
    9  * NASA Ames Research Center.
   10  *
   11  * Redistribution and use in source and binary forms, with or without
   12  * modification, are permitted provided that the following conditions
   13  * are met:
   14  * 1. Redistributions of source code must retain the above copyright
   15  *    notice, this list of conditions and the following disclaimer.
   16  * 2. Redistributions in binary form must reproduce the above copyright
   17  *    notice, this list of conditions and the following disclaimer in the
   18  *    documentation and/or other materials provided with the distribution.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   24  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   30  * POSSIBILITY OF SUCH DAMAGE.
   31  */
   32 
   33 #ifndef _SYS_CHIO_H_
   34 #define _SYS_CHIO_H_
   35 
   36 #include <sys/ioccom.h>
   37 
   38 /*
   39  * Element types.  Used as "to" and "from" type indicators in move
   40  * and exchange operations.
   41  *
   42  * Note that code in sys/dev/scsipi/ch.c relies on these values (uses
   43  * them as offsets in an array, and other evil), so don't muck with them
   44  * unless you know what you're doing.
   45  */
   46 #define CHET_MT         0       /* medium transport (picker) */
   47 #define CHET_ST         1       /* storage transport (slot) */
   48 #define CHET_IE         2       /* import/export (portal) */
   49 #define CHET_DT         3       /* data transfer (drive) */
   50 
   51 /*
   52  * Structure used to execute a MOVE MEDIUM command.
   53  */
   54 struct changer_move_request {
   55         int     cm_fromtype;    /* element type to move from */
   56         int     cm_fromunit;    /* logical unit of from element */
   57         int     cm_totype;      /* element type to move to */
   58         int     cm_tounit;      /* logical unit of to element */
   59         int     cm_flags;       /* misc. flags */
   60 };
   61 
   62 /* cm_flags */
   63 #define CM_INVERT       0x01    /* invert media */
   64 
   65 /*
   66  * Structure used to execute an EXCHANGE MEDIUM command.  In an
   67  * exchange operation, the following steps occur:
   68  *
   69  *      - media from source is moved to first destination.
   70  *
   71  *      - media previously occupying first destination is moved
   72  *        to the second destination.
   73  *
   74  * The second destination may or may not be the same as the source.
   75  * In the case of a simple exchange, the source and second destination
   76  * are the same.
   77  */
   78 struct changer_exchange_request {
   79         int     ce_srctype;     /* element type of source */
   80         int     ce_srcunit;     /* logical unit of source */
   81         int     ce_fdsttype;    /* element type of first destination */
   82         int     ce_fdstunit;    /* logical unit of first destination */
   83         int     ce_sdsttype;    /* element type of second destination */
   84         int     ce_sdstunit;    /* logical unit of second destination */
   85         int     ce_flags;       /* misc. flags */
   86 };
   87 
   88 /* ce_flags */
   89 #define CE_INVERT1      0x01    /* invert media 1 */
   90 #define CE_INVERT2      0x02    /* invert media 2 */
   91 
   92 /*
   93  * Structure used to execute a POSITION TO ELEMENT command.  This
   94  * moves the current picker in front of the specified element.
   95  */
   96 struct changer_position_request {
   97         int     cp_type;        /* element type */
   98         int     cp_unit;        /* logical unit of element */
   99         int     cp_flags;       /* misc. flags */
  100 };
  101 
  102 /* cp_flags */
  103 #define CP_INVERT       0x01    /* invert picker */
  104 
  105 /*
  106  * Data returned by CHIOGPARAMS.
  107  */
  108 struct changer_params {
  109         int     cp_curpicker;   /* current picker */
  110         int     cp_npickers;    /* number of pickers */
  111         int     cp_nslots;      /* number of slots */
  112         int     cp_nportals;    /* number of import/export portals */
  113         int     cp_ndrives;     /* number of drives */
  114 };
  115 
  116 /*
  117  * Old-style command used to get element status.
  118  */
  119 struct ochanger_element_status_request {
  120         int     cesr_type;      /* element type */
  121         uint8_t *cesr_data;     /* pre-allocated data storage */
  122 };
  123 
  124 /*
  125  * Structure of a changer volume tag.
  126  */
  127 #define CHANGER_VOLTAG_SIZE     32      /* same as SCSI voltag size */
  128 struct changer_voltag {
  129         char    cv_tag[CHANGER_VOLTAG_SIZE + 1];        /* ASCII tag */
  130         uint16_t cv_serial;                             /* serial number */
  131 };
  132 
  133 /*
  134  * Data returned by CHIOGSTATUS.
  135  */
  136 struct changer_element_status {
  137         int     ces_flags;      /* CESTATUS_* flags; see below */
  138 
  139         /*
  140          * The following is only valid on Data Transport elements (drives).
  141          */
  142         char    ces_xname[16];  /* external name of drive device */
  143 
  144         /*
  145          * The following fieds indicate the element the medium was
  146          * moved from in order to arrive in this element.
  147          */
  148         int     ces_from_type;  /* type of element */
  149         int     ces_from_unit;  /* logical unit of element */
  150 
  151         /*
  152          * Volume tag information.
  153          */
  154         struct changer_voltag ces_pvoltag;      /* primary volume tag */
  155         struct changer_voltag ces_avoltag;      /* alternate volume tag */
  156 
  157         size_t  ces_vendor_len; /* length of any vendor-specific data */
  158 
  159         /*
  160          * These two fields are only valid if CESTATUS_EXCEPT is
  161          * set in ces_flags, and are only valid on SCSI changers.
  162          */
  163         uint8_t ces_asc;        /* Additional Sense Code */
  164         uint8_t ces_ascq;       /* Additional Sense Code Qualifier */
  165 
  166         /*
  167          * These two fields may be useful if ces_xname is not valid.
  168          * They indicate the target and lun of a drive element.  These
  169          * are only valid on SCSI changers.
  170          */
  171         uint8_t ces_target;     /* SCSI target of drive */
  172         uint8_t ces_lun;        /* SCSI LUN of drive */
  173 };
  174 
  175 /*
  176  * Flags for changer_element_status.  These are flags that are returned
  177  * by hardware.  Not all flags have meaning for all element types.
  178  */
  179 #define CESTATUS_FULL           0x0001  /* element is full */
  180 #define CESTATUS_IMPEXP         0x0002  /* media deposited by operator */
  181 #define CESTATUS_EXCEPT         0x0004  /* element in abnormal state */
  182 #define CESTATUS_ACCESS         0x0008  /* media accessible by picker */
  183 #define CESTATUS_EXENAB         0x0010  /* element supports exporting */
  184 #define CESTATUS_INENAB         0x0020  /* element supports importing */
  185 
  186 #define CESTATUS_PICKER_MASK    0x0005  /* flags valid for pickers */
  187 #define CESTATUS_SLOT_MASK      0x000c  /* flags valid for slots */
  188 #define CESTATUS_PORTAL_MASK    0x003f  /* flags valid for portals */
  189 #define CESTATUS_DRIVE_MASK     0x000c  /* flags valid for drives */
  190 
  191 #define CESTATUS_INVERTED       0x0040  /* medium inverted from storage */
  192 #define CESTATUS_NOTBUS         0x0080  /* drive not on same bus as changer */
  193 
  194 /*
  195  * These changer_element_status flags indicate the validity of fields
  196  * in the returned data.
  197  */
  198 #define CESTATUS_STATUS_VALID   0x0100  /* entire structure valid */
  199 #define CESTATUS_XNAME_VALID    0x0200  /* ces_xname valid */
  200 #define CESTATUS_FROM_VALID     0x0400  /* ces_from_* valid */
  201 #define CESTATUS_PVOL_VALID     0x0800  /* ces_pvoltag valid */
  202 #define CESTATUS_AVOL_VALID     0x1000  /* ces_avoltag valid */
  203 #define CESTATUS_TARGET_VALID   0x2000  /* ces_target valid */
  204 #define CESTATUS_LUN_VALID      0x4000  /* ces_lun valid */
  205 
  206 #define CESTATUS_BITS   \
  207         "\2\6INEAB\5EXENAB\4ACCESS\3EXCEPT\2IMPEXP\1FULL"
  208 
  209 /*
  210  * Command used to get element status.
  211  */
  212 struct changer_element_status_request {
  213         int     cesr_type;      /* element type */
  214         int     cesr_unit;      /* start at this unit */
  215         int     cesr_count;     /* for this many units */
  216         int     cesr_flags;     /* flags; see below */
  217                                 /* pre-allocated data storage */
  218         /*
  219          * These fields point to the data to be returned to the
  220          * user:
  221          *
  222          *      cesr_deta: pointer to array of cesr_count status descriptors
  223          *
  224          *      cesr_vendor_data: pointer to array of void *'s which point
  225          *      to pre-allocated areas for vendor-specific data.  Optional.
  226          */
  227         struct changer_element_status *cesr_data;
  228         void    **cesr_vendor_data;
  229 };
  230 
  231 #define CESR_VOLTAGS            0x01    /* request volume tags */
  232 
  233 /*
  234  * Command used to modify a media element's volume tag.
  235  */
  236 struct changer_set_voltag_request {
  237         int     csvr_type;      /* element type */
  238         int     csvr_unit;      /* unit to modify */
  239         int     csvr_flags;     /* flags; see below */
  240                                 /* the actual volume tag; ignored if clearing
  241                                    the tag */
  242         struct changer_voltag csvr_voltag;
  243 };
  244 
  245 #define CSVR_MODE_SET           0x00    /* set volume tag if not set */
  246 #define CSVR_MODE_REPLACE       0x01    /* unconditionally replace volume tag */
  247 #define CSVR_MODE_CLEAR         0x02    /* clear volume tag */
  248 #define CSVR_MODE_MASK          0x0f
  249 #define CSVR_ALTERNATE          0x10    /* modify alternate volume tag */
  250 
  251 /*
  252  * Changer events.
  253  *
  254  * When certain events occur, the kernel can indicate this by setting
  255  * a bit in a bitmask.
  256  *
  257  * When a read is issued to the changer, the kernel returns this event
  258  * bitmask.  The read never blocks; if no events are pending, the bitmask
  259  * will be all-clear.
  260  *
  261  * A process may select for read to wait for an event to occur.
  262  *
  263  * The event mask is cleared when the changer is closed.
  264  */
  265 #define CHANGER_EVENT_SIZE              sizeof(u_int)
  266 #define CHEV_ELEMENT_STATUS_CHANGED     0x00000001
  267 
  268 /*
  269  * ioctls applicable to changers.
  270  */
  271 #define CHIOMOVE        _IOW('c', 0x01, struct changer_move_request)
  272 #define CHIOEXCHANGE    _IOW('c', 0x02, struct changer_exchange_request)
  273 #define CHIOPOSITION    _IOW('c', 0x03, struct changer_position_request)
  274 #define CHIOGPICKER     _IOR('c', 0x04, int)
  275 #define CHIOSPICKER     _IOW('c', 0x05, int)
  276 #define CHIOGPARAMS     _IOR('c', 0x06, struct changer_params)
  277 #define CHIOIELEM        _IO('c', 0x07)
  278 #define OCHIOGSTATUS    _IOW('c', 0x08, struct ochanger_element_status_request)
  279 #define CHIOGSTATUS     _IOW('c', 0x09, struct changer_element_status_request)
  280 #define CHIOSVOLTAG     _IOW('c', 0x0a, struct changer_set_voltag_request)
  281 
  282 #endif /* _SYS_CHIO_H_ */

Cache object: e1e2f106fced8587723f19a974ffdb40


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