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