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