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/scsi/ses.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 /* $OpenBSD: ses.h,v 1.10 2006/05/11 00:45:59 krw Exp $ */
    2 /*
    3  * Copyright (c) 2005 Marco Peereboom
    4  * 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  *
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
   16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
   19  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   25  * SUCH DAMAGE.
   26  *
   27  */
   28 
   29 #ifndef _SCSI_SES_H_
   30 #define _SCSI_SES_H_
   31 
   32 /* the scsi command */
   33 struct ses_scsi_diag {
   34         u_int8_t        opcode; /* SEND_DIAGNOSTIC or RECEIVE_DIAGNOSTIC */
   35         u_int8_t        flags;
   36 #define SES_DIAG_PCV            (1<<0)  /* page code valid */
   37 #define SES_DIAG_PF             (1<<4)  /* set this bit if page code is valid */
   38         u_int8_t        pgcode;
   39 #define SES_PAGE_CONFIG         0x01    /* Configuration */
   40 #define SES_PAGE_STATUS         0x02    /* Enclosure Status */
   41 #define SES_PAGE_EDESC          0x07    /* Element Descriptor */
   42         u_int16_t       length;
   43         u_int8_t        control;
   44 } __packed;
   45 
   46 
   47 /* all the different sensor types */
   48 #define SES_T_UNSPEC            0x00
   49 #define SES_T_DEVICE            0x01
   50 #define SES_T_POWERSUPPLY       0x02
   51 #define SES_T_COOLING           0x03
   52 #define SES_T_TEMP              0x04
   53 #define SES_T_DOORLOCK          0x05
   54 #define SES_T_ALARM             0x06
   55 #define SES_T_ENC_SRV_CTRL      0x07
   56 #define SES_T_SCC_CTRL          0x08
   57 #define SES_T_NONVOL_CACHE      0x09
   58 #define SES_T_INV_OP_REASON     0x0a
   59 #define SES_T_UPS               0x0b
   60 #define SES_T_DISPLAY           0x0c
   61 #define SES_T_KEYPAD            0x0d
   62 #define SES_T_ENCLOSURE         0x0e
   63 #define SES_T_SCSI_PORT_TRANS   0x0f
   64 #define SES_T_LANGUAGE          0x10
   65 #define SES_T_COMM_PORT         0x11
   66 #define SES_T_VOLTAGE           0x12
   67 #define SES_T_CURRENT           0x13
   68 #define SES_T_SCSI_TARGET_PORT  0x14
   69 #define SES_T_SCSI_INIT_PORT    0x15
   70 #define SES_T_SIMP_SUBENC       0x16
   71 #define SES_T_ARRAY_DEVICE      0x17
   72 
   73 #define SES_NUM_TYPES           256
   74 
   75 /* diagnostic page header */
   76 struct ses_config_hdr {
   77         u_int8_t        pgcode; /* SES_PAGE_CONFIG */
   78         u_int8_t        n_subenc;
   79         u_int16_t       length;
   80         u_int32_t       gencode;
   81 } __packed;
   82 #define SES_CFG_HDRLEN          sizeof(struct ses_config_hdr)
   83 
   84 /* enclosure descriptor header */
   85 struct ses_enc_hdr {
   86         u_int8_t        enc_id;
   87         u_int8_t        subenc_id;
   88         u_int8_t        n_types;
   89         u_int8_t        vendor_len;
   90 } __packed;
   91 #define SES_ENC_HDRLEN          sizeof(struct ses_enc_hdr)
   92 
   93 /* enclosure descriptor strings */
   94 struct ses_enc_desc {
   95         u_int8_t        logical_id[8]; /* this isnt a string */
   96         u_int8_t        vendor_id[8];
   97         u_int8_t        prod_id[16];
   98         u_int8_t        prod_rev[4];
   99         u_int8_t        vendor[0];
  100 } __packed;
  101 
  102 /* type descriptor header */
  103 struct ses_type_desc {
  104         u_int8_t        type;
  105         u_int8_t        n_elem;
  106         u_int8_t        subenc_id;
  107         u_int8_t        desc_len;
  108 } __packed;
  109 #define SES_TYPE_DESCLEN        sizeof(struct ses_type_desc)
  110 
  111 /* status page header */
  112 struct ses_status_hdr {
  113         u_int8_t        pgcode;         /* SES_PAGE_STATUS */
  114         u_int8_t        flags;
  115 #define SES_STAT_UNRECOV        (1<<0)  /* unrecoverable error */
  116 #define SES_STAT_CRIT           (1<<1)  /* critical error */
  117 #define SES_STAT_NONCRIT        (1<<2)  /* noncritical error */
  118 #define SES_STAT_INFO           (1<<3)  /* info available */
  119 #define SES_STAT_INVOP          (1<<4)  /* invalid operation */
  120         u_int16_t       length;
  121         u_int32_t       gencode;
  122 } __packed;
  123 #define SES_STAT_HDRLEN         sizeof(struct ses_status_hdr)
  124 
  125 struct ses_status {
  126         u_int8_t        com;
  127 #define SES_STAT_CODE_MASK      0x0f
  128 #define SES_STAT_CODE(x)        ((x) & SES_STAT_CODE_MASK)
  129 #define SES_STAT_CODE_UNSUP     0x00 /* unsupported */
  130 #define SES_STAT_CODE_OK        0x01 /* installed and ok */
  131 #define SES_STAT_CODE_CRIT      0x02 /* critical */
  132 #define SES_STAT_CODE_NONCRIT   0x03 /* warning */
  133 #define SES_STAT_CODE_UNREC     0x04 /* unrecoverable */
  134 #define SES_STAT_CODE_NOTINST   0x05 /* not installed */
  135 #define SES_STAT_CODE_UNKNOWN   0x06 /* unknown */
  136 #define SES_STAT_CODE_NOTAVAIL  0x07 /* not available */
  137 #define SES_STAT_SWAP           (1<<4)  /* element has been swapped */
  138 #define SES_STAT_DISABLED       (1<<5)  /* disabled */
  139 #define SES_STAT_PRDFAIL        (1<<6)  /* predicted failure */
  140 #define SES_STAT_SELECT         (1<<7)  /* set to modify element */
  141 
  142         u_int8_t        f1;     /* use of these flags depends on the SES_T */
  143         u_int8_t        f2;
  144         u_int8_t        f3;
  145 } __packed;
  146 #define SES_STAT_ELEMLEN        sizeof(struct ses_status)
  147 
  148 /* device status */
  149 /* f1 is the device address */
  150 /* f2 */
  151 #define SES_S_DEV_REPORT        (1<<0)  /* enc report in progress */
  152 #define SES_S_DEV_IDENT         (1<<1)  /* currently identifying */
  153 #define SES_S_DEV_REMOVE        (1<<2)  /* ready to remove */
  154 #define SES_S_DEV_INSERT        (1<<3)  /* ready to insert */
  155 #define SES_S_DEV_ENCBYPB       (1<<4)  /* port B bypassed by enc */
  156 #define SES_S_DEV_ENCBYPA       (1<<5)  /* port A bypassed by enc */
  157 #define SES_S_DEV_DONOTREM      (1<<6)  /* do not remove */
  158 #define SES_S_DEV_APPCLBYPA     (1<<7)  /* port A bypassed by app */
  159 /* f3 */
  160 #define SES_S_DEV_DEVBYPB       (1<<0)  /* port B bypassed by dev */
  161 #define SES_S_DEV_DEVBYPA       (1<<1)  /* port A bypassed by dev */
  162 #define SES_S_DEV_BYPB          (1<<2)
  163 #define SES_S_DEV_BYPA          (1<<3)
  164 #define SES_S_DEV_OFF           (1<<4)  /* device is off */
  165 #define SES_S_DEV_FAULTRQST     (1<<5)  /* fault indicator rqsted */
  166 #define SES_S_DEV_FAULTSENSE    (1<<6)  /* fault sensed */
  167 #define SES_S_DEV_APPCLBYPB     (1<<7)  /* port B bypassed by app */
  168 
  169 /* device configuration */
  170 /* f1 is reserved */
  171 /* f2 */
  172 #define SES_C_DEV_IDENT         (1<<1)  /* ident */
  173 #define SES_C_DEV_REMOVE        (1<<2)  /* remove */
  174 #define SES_C_DEV_INSERT        (1<<3)  /* insert */
  175 #define SES_C_DEV_DONOTREM      (1<<6)  /* do not remove */
  176 #define SES_C_DEV_ACTIVE        (1<<7)  /* active indicator */
  177 #define SES_C_DEV_F2MASK        (SES_C_DEV_IDENT | SES_C_DEV_REMOVE | \
  178     SES_C_DEV_INSERT | SES_C_DEV_DONOTREM | SES_C_DEV_ACTIVE )
  179 /* f3 */
  180 #define SES_C_DEV_BYPB          (1<<2)  /* port B bypass */
  181 #define SES_C_DEV_BYPA          (1<<3)  /* port A bypass */
  182 #define SES_C_DEV_OFF           (1<<4)  /* off */
  183 #define SES_C_DEV_FAULT         (1<<5)  /* fault indicator */
  184 #define SES_C_DEV_F3MASK        (SES_C_DEV_BYPB | SES_C_DEV_BYPA | \
  185     SES_C_DEV_OFF | SES_C_DEV_FAULT)
  186 
  187 /* power supply element */
  188 #define SES_S_PSU_IDENT(d)      ((d)->f1 & (1<<6)) /* identify */
  189 #define SES_S_PSU_DCOC(d)       ((d)->f2 & (1<<1)) /* DC over current */
  190 #define SES_S_PSU_DCUV(d)       ((d)->f2 & (1<<2)) /* DC under voltage */
  191 #define SES_S_PSU_DCOV(d)       ((d)->f2 & (1<<3)) /* DC over voltage */
  192 #define SES_S_PSU_DCFAIL(d)     ((d)->f3 & (1<<0)) /* DC fail */
  193 #define SES_S_PSU_ACFAIL(d)     ((d)->f3 & (1<<1)) /* AC fail */
  194 #define SES_S_PSU_TEMPWARN(d)   ((d)->f3 & (1<<2)) /* Temp warn */
  195 #define SES_S_PSU_OVERTEMP(d)   ((d)->f3 & (1<<3)) /* over temp fail */
  196 #define SES_S_PSU_OFF(d)        ((d)->f3 & (1<<4)) /* is the unit off */
  197 #define SES_S_PSU_RQSTON(d)     ((d)->f3 & (1<<5)) /* manually on */
  198 #define SES_S_PSU_FAIL(d)       ((d)->f3 & (1<<6)) /* fail is set on */
  199 
  200 /* cooling element */
  201 #define SES_S_COOL_IDENT(d)     ((d)->f1 & (1<<6)) /* identify */
  202 #define SES_S_COOL_SPEED_MASK   0x03
  203 #define SES_S_COOL_SPEED(d)     ((d)->f2 + \
  204     ((u_int16_t)((d)->f2 & SES_S_COOL_SPEED_MASK) << 8))
  205 #define SES_S_COOL_FACTOR       10
  206 #define SES_S_COOL_CODE(d)      ((d)->f3 & 0x7) /* actual speed code */
  207 #define SES_S_COOL_C_STOPPED    0x0 /* stopped */
  208 #define SES_S_COOL_C_LOW1       0x1 /* lowest speed */
  209 #define SES_S_COOL_C_LOW2       0x2 /* second lowest speed */
  210 #define SES_S_COOL_C_LOW3       0x3 /* third lowest speed */
  211 #define SES_S_COOL_C_INTER      0x4 /* intermediate speed */
  212 #define SES_S_COOL_C_HI3        0x5 /* third highest speed */
  213 #define SES_S_COOL_C_HI2        0x6 /* second highest speed */
  214 #define SES_S_COOL_C_HI1        0x7 /* highest speed */
  215 #define SES_S_COOL_OFF          ((d)->f3 & (1<<4)) /* not cooling */
  216 #define SES_S_COOL_RQSTON       ((d)->f3 & (1<<5)) /* manually on */
  217 #define SES_S_COOL_FAIL         ((d)->f3 & (1<<6)) /* fail indic is on */
  218 
  219 /* temperature sensor */
  220 #define SES_S_TEMP_IDENT(d)     ((d)->f1 & (1<<7)) /* identify */
  221 #define SES_S_TEMP(d)           ((d)->f2)
  222 #define SES_S_TEMP_OFFSET       (-20)
  223 #define SES_S_TEMP_UTWARN       ((d)->f3 & (1<<0)) /* under temp warning */
  224 #define SES_S_TEMP_UTFAIL       ((d)->f3 & (1<<1)) /* under temp failure */
  225 #define SES_S_TEMP_OTWARN       ((d)->f3 & (1<<2)) /* over temp warning */
  226 #define SES_S_TEMP_OTFAIL       ((d)->f3 & (1<<3)) /* over temp failure */
  227 
  228 /*
  229  * the length of the status page is the header and a status element for
  230  * each type plus the number of elements for each type
  231  */
  232 #define SES_STAT_LEN(t, e)      \
  233     (SES_STAT_HDRLEN + SES_STAT_ELEMLEN * ((t)+(e)))
  234 
  235 #endif /* _SCSI_SES_H_ */

Cache object: fe719260cc3aa182a1d6ef91633086de


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