[BACK]Return to safte.h CVS log [TXT][DIR] Up to [local] / sys / scsi

Annotation of sys/scsi/safte.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: safte.h,v 1.6 2006/01/08 06:28:42 dlg Exp $ */
                      2:
                      3: /*
                      4:  * Copyright (c) 2005 David Gwynne <dlg@openbsd.org>
                      5:  *
                      6:  * Permission to use, copy, modify, and distribute this software for any
                      7:  * purpose with or without fee is hereby granted, provided that the above
                      8:  * copyright notice and this permission notice appear in all copies.
                      9:  *
                     10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     11:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     12:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     13:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     14:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     15:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     16:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     17:  */
                     18:
                     19: #ifndef _SCSI_SAFTE_H_
                     20: #define _SCSI_SAFTE_H_
                     21:
                     22: #define SAFTE_EXTRA_OFFSET     0x05
                     23: /* scsi_inquiry_data.extra */
                     24: struct safte_inq {
                     25:        u_int8_t        uniqueid[7];
                     26:        u_int8_t        chanid;
                     27:        u_int8_t        ident[6];
                     28: #define SAFTE_IDENT            "SAF-TE"
                     29:        u_int8_t        revision[4];
                     30: #ifdef notyet
                     31:        u_int8_t        reserved[2];
                     32: #endif
                     33: } __packed;
                     34: #define SAFTE_INQ_LEN          54
                     35:
                     36: struct safte_readbuf_cmd {
                     37:        u_int8_t        opcode;         /* READ_BUFFER */
                     38:        u_int8_t        flags;
                     39: #define SAFTE_RD_LUNMASK       0xe0    /* the lun should always be 0 */
                     40: #define SAFTE_RD_MODEMASK      0x07
                     41: #define SAFTE_RD_MODE          0x01    /* 0x01 is the SAF-TE command mode */
                     42:        u_int8_t        bufferid;
                     43: #define SAFTE_RD_CONFIG                0x00    /* enclosure configuration */
                     44: #define SAFTE_RD_ENCSTAT       0x01    /* enclosure status */
                     45: #define SAFTE_RD_USAGE         0x02    /* usage statistics */
                     46: #define SAFTE_RD_INSERTS       0x03    /* device insertions */
                     47: #define SAFTE_RD_SLOTSTAT      0x04    /* slot status */
                     48: #define SAFTE_RD_GLOBALS       0x05    /* global flags */
                     49:        u_int32_t       reserved1;
                     50:        u_int16_t       length;         /* transfer length (big endian) */
                     51:        u_int8_t        reserved2;
                     52: } __packed;
                     53:
                     54: struct safte_writebuf_cmd {
                     55:        u_int8_t        opcode;         /* WRITE_BUFFER */
                     56:        u_int8_t        flags;
                     57: #define SAFTE_WR_LUNMASK       0xe0    /* the lun should always be 0 */
                     58: #define SAFTE_WR_MODEMASK      0x07
                     59: #define SAFTE_WR_MODE          0x01    /* 0x01 is the SAF-TE command mode */
                     60:        u_int8_t        reserved1[5];
                     61:        u_int16_t       length;         /* transfer length (big endian) */
                     62:        u_int8_t        reserved2;
                     63: } __packed;
                     64:
                     65: #define        SAFTE_WRITE_SLOTSTAT    0x10    /* write device slot status */
                     66: #define SAFTE_WRITE_SETID      0x11    /* set scsi id */
                     67: #define        SAFTE_WRITE_SLOTOP      0x12    /* perform slot operation */
                     68: #define        SAFTE_WRITE_FANSPEED    0x13    /* set fan speed */
                     69: #define        SAFTE_WRITE_PWRSUP      0x14    /* activate power supply */
                     70: #define        SAFTE_WRITE_GLOBALS     0x15    /* global flags */
                     71:
                     72:
                     73: /* enclosure configuration */
                     74: struct safte_config {
                     75:        u_int8_t        nfans;          /* number of fans */
                     76:        u_int8_t        npwrsup;        /* number of power supplies */
                     77:        u_int8_t        nslots;         /* number of device slots */
                     78:        u_int8_t        doorlock;       /* door lock installed */
                     79:        u_int8_t        ntemps;         /* number of temp sensors */
                     80:        u_int8_t        alarm;          /* audible alarm installed */
                     81:        u_int8_t        therm;          /* temps in C and num of thermostats */
                     82: #define SAFTE_CFG_CELSIUSMASK  0x80
                     83: #define SAFTE_CFG_CELSIUS(a)   ((a) & SAFTE_CFG_CELSIUSMASK ? 1 : 0)
                     84: #define SAFTE_CFG_NTHERMMASK   0x0f
                     85: #define SAFTE_CFG_NTHERM(a)    ((a) & SAFTE_CFG_NTHERMMASK)
                     86:        u_int8_t        reserved[56]; /* 7 to 62 */
                     87:        u_int8_t        vendor_bytes;   /* number of vendor specific bytes */
                     88: } __packed;
                     89: #define SAFTE_CONFIG_LEN       sizeof(struct safte_config)
                     90:
                     91: /* enclosure status fields */
                     92: /* fan status field */
                     93: #define SAFTE_FAN_OP           0x00    /* operational */
                     94: #define SAFTE_FAN_MF           0x01    /* malfunctioning */
                     95: #define SAFTE_FAN_NOTINST      0x02    /* not installed */
                     96: #define SAFTE_FAN_UNKNOWN      0x80    /* unknown status or unreportable */
                     97:
                     98: /* power supply status field */
                     99: #define SAFTE_PWR_OP_ON                0x00    /* operational and on */
                    100: #define SAFTE_PWR_OP_OFF       0x01    /* operational and off */
                    101: #define SAFTE_PWR_MF_ON                0x10    /* malfunctioning and on */
                    102: #define SAFTE_PWR_MF_OFF       0x11    /* malfunctioning and off */
                    103: #define SAFTE_PWR_NOTINST      0x20    /* not present */
                    104: #define SAFTE_PWR_PRESENT      0x21    /* present */
                    105: #define SAFTE_PWR_UNKNOWN      0x80    /* unknown status or unreportable */
                    106:
                    107: /* scsi id fields */
                    108: /* are integers, not bitfields */
                    109:
                    110: /* door lock status */
                    111: #define SAFTE_DOOR_LOCKED      0x00    /* locked */
                    112: #define SAFTE_DOOR_UNLOCKED    0x01    /* unlocked or uncontrollable */
                    113: #define SAFTE_DOOR_UNKNOWN     0x80    /* unknown status or unreportable */
                    114:
                    115: /* speaker status */
                    116: #define SAFTE_SPKR_OFF         0x00    /* off or not installed */
                    117: #define SAFTE_SPKR_ON          0x01    /* speaker is currently on */
                    118:
                    119: /* temperature */
                    120: #define SAFTE_TEMP_OFFSET      -10     /* -10 to 245 degrees */
                    121:
                    122: /* temp out of range */
                    123: #define SAFTE_TEMP_ETA         0x8000  /* any temp alert */
                    124:
                    125:
                    126: /* usage statistics */
                    127: struct safte_usage {
                    128:        u_int32_t       minutes;        /* total number of minutes on */
                    129:        u_int32_t       cycles;         /* total number of power cycles */
                    130:        u_int8_t        reserved[7];
                    131:        u_int8_t        vendor_bytes;   /* number of vendor specific bytes */
                    132: };
                    133:
                    134:
                    135: /* device insertions */
                    136: /* u_int16_t * nslots */
                    137:
                    138:
                    139: /* device slot status */
                    140: #define SAFTE_SLOTSTAT_INSERT  (1<<0)  /* inserted */
                    141: #define SAFTE_SLOTSTAT_SWAP    (1<<1)  /* ready to be inserted/removed */
                    142: #define SAFTE_SLOTSTAT_OPER    (1<<2)  /* ready for operation */
                    143:
                    144:
                    145: /* global flags */
                    146: struct safte_globals {
                    147:        u_int8_t        flags1;
                    148: #define SAFTE_GLOBAL_ALARM     (1<<0)  /* audible alarm */
                    149: #define SAFTE_GLOBAL_FAILURE   (1<<1)  /* global failure indication */
                    150: #define SAFTE_GLOBAL_WARNING   (1<<2)  /* global warning indication */
                    151: #define SAFTE_GLOBAL_POWER     (1<<3)  /* enclosure power */
                    152: #define        SAFTE_GLOBAL_COOLING    (1<<4)  /* cooling failure */
                    153: #define SAFTE_GLOBAL_PWRFAIL   (1<<5)  /* power failure */
                    154: #define SAFTE_GLOBAL_DRVFAIL   (1<<6)  /* drive failure */
                    155: #define SAFTE_GLOBAL_DRVWARN   (1<<6)  /* drive warning */
                    156:        u_int8_t        flags2;
                    157: #define SAFTE_GLOBAL_ARRAYFAIL (1<<0)  /* array failure */
                    158: #define SAFTE_GLOBAL_ARRAYWARN (1<<1)  /* array warning */
                    159: #define SAFTE_GLOBAL_LOCK      (1<<2)  /* enclosure lock */
                    160: #define SAFTE_GLOBAL_IDENTIFY  (1<<3)  /* identify enclosure */
                    161:        u_int8_t        flags3;
                    162:        u_int8_t        reserved[13];
                    163: };
                    164:
                    165:
                    166: /*  perform slot operation */
                    167: struct safte_slotop {
                    168:        u_int8_t        opcode;         /* SAFTE_WRITE_SLOTOP */
                    169:        u_int8_t        slot;
                    170:        u_int8_t        flags;
                    171: #define SAFTE_SLOTOP_OPERATE   (1<<0)  /* prepare for operation */
                    172: #define SAFTE_SLOTOP_INSREM    (1<<1)  /* prepare for insert/removal */
                    173: #define SAFTE_SLOTOP_IDENTIFY  (1<<2)  /* identify */
                    174:        u_int8_t        reserved[61];   /* zero these */
                    175: } __packed;
                    176:
                    177: #endif /* _SCSI_SAFTE_H_ */

CVSweb