156027Smjacob/* $FreeBSD: stable/10/sys/cam/scsi/scsi_ses.h 309042 2016-11-23 09:10:45Z mav $ */ 2139743Simp/*- 356027Smjacob * Copyright (c) 2000 by Matthew Jacob 456027Smjacob * All rights reserved. 556027Smjacob * 656027Smjacob * Redistribution and use in source and binary forms, with or without 756027Smjacob * modification, are permitted provided that the following conditions 856027Smjacob * are met: 956027Smjacob * 1. Redistributions of source code must retain the above copyright 1056027Smjacob * notice, this list of conditions, and the following disclaimer, 1156027Smjacob * without modification, immediately at the beginning of the file. 1256027Smjacob * 2. The name of the author may not be used to endorse or promote products 1356027Smjacob * derived from this software without specific prior written permission. 1456027Smjacob * 1556027Smjacob * Alternatively, this software may be distributed under the terms of the 1656027Smjacob * the GNU Public License ("GPL"). 1756027Smjacob * 1856027Smjacob * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1956027Smjacob * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2056027Smjacob * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2156027Smjacob * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 2256027Smjacob * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2356027Smjacob * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2456027Smjacob * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2556027Smjacob * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2656027Smjacob * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2756027Smjacob * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2856027Smjacob * SUCH DAMAGE. 2956027Smjacob * 3056027Smjacob */ 3156027Smjacob 32235911Smav#ifndef _SCSI_SES_H_ 33235911Smav#define _SCSI_SES_H_ 3456027Smjacob 35235911Smav#include <cam/scsi/scsi_all.h> 3656027Smjacob 37235911Smav/*========================== Field Extraction Macros =========================*/ 38235911Smav#define MK_ENUM(S, F, SUFFIX) S ## _ ## F ## SUFFIX 3956027Smjacob 40235911Smav#define GEN_GETTER(LS, US, LF, UF) \ 41235911Smavstatic inline int \ 42235911SmavLS ## _get_ ## LF(struct LS *elem) { \ 43235911Smav return ((elem->bytes[MK_ENUM(US,UF,_BYTE)] & MK_ENUM(US,UF,_MASK)) \ 44235911Smav >> MK_ENUM(US,UF,_SHIFT)); \ 45235911Smav} 4656027Smjacob 47235911Smav#define GEN_SETTER(LS, US, LF, UF) \ 48235911Smavstatic inline void \ 49235911SmavLS ## _set_ ## LF(struct LS *elem, int val) { \ 50235911Smav elem->bytes[MK_ENUM(US,UF,_BYTE)] &= ~MK_ENUM(US,UF,_MASK); \ 51235911Smav elem->bytes[MK_ENUM(US,UF,_BYTE)] |= \ 52235911Smav (val << MK_ENUM(US,UF,_SHIFT)) & MK_ENUM(US,UF,_MASK); \ 53235911Smav} 5456027Smjacob 55235911Smav#define GEN_HDR_GETTER(LS, US, LF, UF) \ 56235911Smavstatic inline int \ 57235911SmavLS ## _get_ ## LF(struct LS *page) { \ 58235911Smav return ((page->hdr.page_specific_flags & MK_ENUM(US,UF,_MASK)) \ 59235911Smav >> MK_ENUM(US,UF,_SHIFT)); \ 60235911Smav} 61235911Smav 62235911Smav#define GEN_HDR_SETTER(LS, US, LF, UF) \ 63235911Smavstatic inline void \ 64235911SmavLS ## _set_ ## LF(struct LS *page, int val) { \ 65235911Smav page->hdr.page_specific_flags &= ~MK_ENUM(US,UF,_MASK); \ 66235911Smav page->hdr.page_specific_flags |= \ 67235911Smav (val << MK_ENUM(US,UF,_SHIFT)) & MK_ENUM(US,UF,_MASK); \ 68235911Smav} 69235911Smav 70235911Smav#define GEN_ACCESSORS(LS, US, LF, UF) \ 71235911SmavGEN_GETTER(LS, US, LF, UF) \ 72235911SmavGEN_SETTER(LS, US, LF, UF) 73235911Smav 74235911Smav#define GEN_HDR_ACCESSORS(LS, US, LF, UF) \ 75235911SmavGEN_HDR_GETTER(LS, US, LF, UF) \ 76235911SmavGEN_HDR_SETTER(LS, US, LF, UF) 77235911Smav 78235911Smav/*=============== Common SCSI ENC Diagnostic Page Structures ===============*/ 79235911Smavstruct ses_page_hdr { 80235911Smav uint8_t page_code; 81235911Smav uint8_t page_specific_flags; 82235911Smav uint8_t length[2]; 83235911Smav uint8_t gen_code[4]; 84235911Smav}; 85235911Smav 86235911Smavstatic inline size_t 87235911Smavses_page_length(const struct ses_page_hdr *hdr) 88235911Smav{ 89235911Smav /* 90235911Smav * The page length as received only accounts for bytes that 91235911Smav * follow the length field, namely starting with the generation 92235911Smav * code field. 93235911Smav */ 94235911Smav return (scsi_2btoul(hdr->length) 95235911Smav + offsetof(struct ses_page_hdr, gen_code)); 96235911Smav} 97235911Smav 98235911Smav/*============= SCSI ENC Configuration Diagnostic Page Structures ============*/ 99235911Smavstruct ses_enc_desc { 100235911Smav uint8_t byte0; 101235911Smav /* 102235911Smav * reserved0 : 1, 103235911Smav * rel_id : 3, relative enclosure process id 104235911Smav * reserved1 : 1, 105235911Smav * num_procs : 3; number of enclosure procesenc 106235911Smav */ 107235911Smav uint8_t subenc_id; /* Sub-enclosure Identifier */ 108235911Smav uint8_t num_types; /* # of supported types */ 109235911Smav uint8_t length; /* Enclosure Descriptor Length */ 110235911Smav uint8_t logical_id[8]; /* formerly wwn */ 111235911Smav uint8_t vendor_id[8]; 112235911Smav uint8_t product_id[16]; 113235911Smav uint8_t product_rev[4]; 114235911Smav uint8_t vendor_bytes[]; 115235911Smav}; 116235911Smav 117235911Smavstatic inline uint8_t * 118235911Smavses_enc_desc_last_byte(struct ses_enc_desc *encdesc) 119235911Smav{ 120238740Smav return (&encdesc->length + encdesc->length); 121235911Smav} 122235911Smav 123235911Smavstatic inline struct ses_enc_desc * 124235911Smavses_enc_desc_next(struct ses_enc_desc *encdesc) 125235911Smav{ 126235911Smav return ((struct ses_enc_desc *)(ses_enc_desc_last_byte(encdesc) + 1)); 127235911Smav} 128235911Smav 129235911Smavstatic inline int 130235911Smavses_enc_desc_is_complete(struct ses_enc_desc *encdesc, uint8_t *last_buf_byte) 131235911Smav{ 132235911Smav return (&encdesc->length <= last_buf_byte 133235911Smav && ses_enc_desc_last_byte(encdesc) <= last_buf_byte); 134235911Smav} 135235911Smav 136235911Smavstruct ses_elm_type_desc { 137235911Smav uint8_t etype_elm_type; /* type of element */ 138235911Smav uint8_t etype_maxelt; /* maximum supported */ 139235911Smav uint8_t etype_subenc; /* in sub-enclosure #n */ 140235911Smav uint8_t etype_txt_len; /* Type Descriptor Text Length */ 141235911Smav}; 142235911Smav 143235911Smavstruct ses_cfg_page { 144235911Smav struct ses_page_hdr hdr; 145235911Smav struct ses_enc_desc subencs[]; 146235911Smav /* type descriptors */ 147235911Smav /* type text */ 148235911Smav}; 149235911Smav 150235911Smavstatic inline int 151235911Smavses_cfg_page_get_num_subenc(struct ses_cfg_page *page) 152235911Smav{ 153235911Smav return (page->hdr.page_specific_flags + 1); 154235911Smav} 155235911Smav 156235911Smav 157235911Smav/*================ SCSI SES Control Diagnostic Page Structures ==============*/ 158235911Smavstruct ses_ctrl_common { 159235911Smav uint8_t bytes[1]; 160235911Smav}; 161235911Smav 162235911Smavenum ses_ctrl_common_field_data { 163235911Smav SES_CTRL_COMMON_SELECT_BYTE = 0, 164235911Smav SES_CTRL_COMMON_SELECT_MASK = 0x80, 165235911Smav SES_CTRL_COMMON_SELECT_SHIFT = 7, 166235911Smav 167235911Smav SES_CTRL_COMMON_PRDFAIL_BYTE = 0, 168235911Smav SES_CTRL_COMMON_PRDFAIL_MASK = 0x40, 169235911Smav SES_CTRL_COMMON_PRDFAIL_SHIFT = 6, 170235911Smav 171235911Smav SES_CTRL_COMMON_DISABLE_BYTE = 0, 172235911Smav SES_CTRL_COMMON_DISABLE_MASK = 0x20, 173235911Smav SES_CTRL_COMMON_DISABLE_SHIFT = 5, 174235911Smav 175235911Smav SES_CTRL_COMMON_RST_SWAP_BYTE = 0, 176235911Smav SES_CTRL_COMMON_RST_SWAP_MASK = 0x10, 177235911Smav SES_CTRL_COMMON_RST_SWAP_SHIFT = 4 178235911Smav}; 179235911Smav 180235911Smav#define GEN_SES_CTRL_COMMON_ACCESSORS(LCASE, UCASE) \ 181235911Smav GEN_ACCESSORS(ses_ctrl_common, SES_CTRL_COMMON, LCASE, UCASE) 182235911SmavGEN_SES_CTRL_COMMON_ACCESSORS(select, SELECT) 183235911SmavGEN_SES_CTRL_COMMON_ACCESSORS(prdfail, PRDFAIL) 184235911SmavGEN_SES_CTRL_COMMON_ACCESSORS(disable, DISABLE) 185235911SmavGEN_SES_CTRL_COMMON_ACCESSORS(rst_swap, RST_SWAP) 186235911Smav#undef GEN_SES_CTRL_COMMON_ACCESSORS 187235911Smav 188235911Smav/*------------------------ Device Slot Control Element ----------------------*/ 189235911Smavstruct ses_ctrl_dev_slot { 190235911Smav struct ses_ctrl_common common; 191235911Smav uint8_t bytes[3]; 192235911Smav}; 193235911Smav 194235911Smavenum ses_ctrl_dev_slot_field_data { 195235911Smav SES_CTRL_DEV_SLOT_RQST_ACTIVE_BYTE = 1, 196235911Smav SES_CTRL_DEV_SLOT_RQST_ACTIVE_MASK = 0x80, 197235911Smav SES_CTRL_DEV_SLOT_RQST_ACTIVE_SHIFT = 7, 198235911Smav 199235911Smav SES_CTRL_DEV_SLOT_DO_NOT_REMOVE_BYTE = 1, 200235911Smav SES_CTRL_DEV_SLOT_DO_NOT_REMOVE_MASK = 0x40, 201235911Smav SES_CTRL_DEV_SLOT_DO_NOT_REMOVE_SHIFT = 6, 202235911Smav 203235911Smav SES_CTRL_DEV_SLOT_RQST_MISSING_BYTE = 1, 204235911Smav SES_CTRL_DEV_SLOT_RQST_MISSING_MASK = 0x10, 205235911Smav SES_CTRL_DEV_SLOT_RQST_MISSING_SHIFT = 4, 206235911Smav 207235911Smav SES_CTRL_DEV_SLOT_RQST_INSERT_BYTE = 1, 208235911Smav SES_CTRL_DEV_SLOT_RQST_INSERT_MASK = 0x08, 209235911Smav SES_CTRL_DEV_SLOT_RQST_INSERT_SHIFT = 3, 210235911Smav 211235911Smav SES_CTRL_DEV_SLOT_RQST_REMOVE_BYTE = 1, 212235911Smav SES_CTRL_DEV_SLOT_RQST_REMOVE_MASK = 0x04, 213235911Smav SES_CTRL_DEV_SLOT_RQST_REMOVE_SHIFT = 2, 214235911Smav 215235911Smav SES_CTRL_DEV_SLOT_RQST_IDENT_BYTE = 1, 216235911Smav SES_CTRL_DEV_SLOT_RQST_IDENT_MASK = 0x02, 217235911Smav SES_CTRL_DEV_SLOT_RQST_IDENT_SHIFT = 1, 218235911Smav 219235911Smav SES_CTRL_DEV_SLOT_RQST_FAULT_BYTE = 2, 220235911Smav SES_CTRL_DEV_SLOT_RQST_FAULT_MASK = 0x20, 221235911Smav SES_CTRL_DEV_SLOT_RQST_FAULT_SHIFT = 5, 222235911Smav 223235911Smav SES_CTRL_DEV_SLOT_DEVICE_OFF_BYTE = 2, 224235911Smav SES_CTRL_DEV_SLOT_DEVICE_OFF_MASK = 0x10, 225235911Smav SES_CTRL_DEV_SLOT_DEVICE_OFF_SHIFT = 4, 226235911Smav 227235911Smav SES_CTRL_DEV_SLOT_ENABLE_BYP_A_BYTE = 2, 228235911Smav SES_CTRL_DEV_SLOT_ENABLE_BYP_A_MASK = 0x08, 229235911Smav SES_CTRL_DEV_SLOT_ENABLE_BYP_A_SHIFT = 3, 230235911Smav 231235911Smav SES_CTRL_DEV_SLOT_ENABLE_BYP_B_BYTE = 2, 232235911Smav SES_CTRL_DEV_SLOT_ENABLE_BYP_B_MASK = 0x04, 233235911Smav SES_CTRL_DEV_SLOT_ENABLE_BYP_B_SHIFT = 2 234235911Smav}; 235235911Smav#define GEN_SES_CTRL_DEV_SLOT_ACCESSORS(LCASE, UCASE) \ 236235911Smav GEN_ACCESSORS(ses_ctrl_dev_slot, SES_CTRL_DEV_SLOT, LCASE, UCASE) 237235911Smav 238235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(rqst_active, RQST_ACTIVE) 239235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(do_not_remove, DO_NOT_REMOVE) 240235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(rqst_missing, RQST_MISSING) 241235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(rqst_insert, RQST_INSERT) 242235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(rqst_remove, RQST_REMOVE) 243235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(rqst_ident, RQST_IDENT) 244235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(rqst_fault, RQST_FAULT) 245235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(device_off, DEVICE_OFF) 246235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(enable_byp_a, ENABLE_BYP_A) 247235911SmavGEN_SES_CTRL_DEV_SLOT_ACCESSORS(enable_byp_b, ENABLE_BYP_B) 248235911Smav#undef GEN_SES_CTRL_DEV_SLOT_ACCESSORS 249235911Smav 250235911Smav/*--------------------- Array Device Slot Control Element --------------------*/ 251235911Smavstruct ses_ctrl_array_dev_slot { 252235911Smav struct ses_ctrl_common common; 253235911Smav uint8_t bytes[3]; 254235911Smav}; 255235911Smav 256235911Smavenum ses_ctrl_array_dev_slot_field_data { 257235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_OK_BYTE = 0, 258235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_OK_MASK = 0x80, 259235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_OK_SHIFT = 7, 260235911Smav 261235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_RSVD_DEVICE_BYTE = 0, 262235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_RSVD_DEVICE_MASK = 0x40, 263235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_RSVD_DEVICE_SHIFT = 6, 264235911Smav 265235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_HOT_SPARE_BYTE = 0, 266235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_HOT_SPARE_MASK = 0x20, 267235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_HOT_SPARE_SHIFT = 5, 268235911Smav 269235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_CONS_CHECK_BYTE = 0, 270235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_CONS_CHECK_MASK = 0x10, 271235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_CONS_CHECK_SHIFT = 4, 272235911Smav 273235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_IN_CRIT_ARRAY_BYTE = 0, 274235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_IN_CRIT_ARRAY_MASK = 0x08, 275235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_IN_CRIT_ARRAY_SHIFT = 3, 276235911Smav 277235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_IN_FAILED_ARRAY_BYTE = 0, 278235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_IN_FAILED_ARRAY_MASK = 0x04, 279235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_IN_FAILED_ARRAY_SHIFT = 2, 280235911Smav 281235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_REBUILD_REMAP_BYTE = 0, 282235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_REBUILD_REMAP_MASK = 0x02, 283235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_REBUILD_REMAP_SHIFT = 1, 284235911Smav 285235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_REBUILD_REMAP_ABORT_BYTE = 0, 286235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_REBUILD_REMAP_ABORT_MASK = 0x01, 287235911Smav SES_CTRL_ARRAY_DEV_SLOT_RQST_REBUILD_REMAP_ABORT_SHIFT = 0 288235911Smav 289235911Smav /* 290235911Smav * The remaining fields are identical to the device 291235911Smav * slot element type. Access them through the device slot 292235911Smav * element type and its accessors. 293235911Smav */ 294235911Smav}; 295235911Smav#define GEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(LCASE, UCASE) \ 296235911Smav GEN_ACCESSORS(ses_ctrl_array_dev_slot, SES_CTRL_ARRAY_DEV_SLOT, \ 297235911Smav LCASE, UCASE) 298235911SmavGEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(rqst_ok, RQST_OK) 299235911SmavGEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(rqst_rsvd_device, RQST_RSVD_DEVICE) 300235911SmavGEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(rqst_hot_spare, RQST_HOT_SPARE) 301235911SmavGEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(rqst_cons_check, RQST_CONS_CHECK) 302235911SmavGEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(rqst_in_crit_array, RQST_IN_CRIT_ARRAY) 303235911SmavGEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(rqst_in_failed_array, 304235911Smav RQST_IN_FAILED_ARRAY) 305235911SmavGEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(rqst_rebuild_remap, RQST_REBUILD_REMAP) 306235911SmavGEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS(rqst_rebuild_remap_abort, 307235911Smav RQST_REBUILD_REMAP_ABORT) 308235911Smav#undef GEN_SES_CTRL_ARRAY_DEV_SLOT_ACCESSORS 309235911Smav 310235911Smav/*----------------------- Power Supply Control Element -----------------------*/ 311235911Smavstruct ses_ctrl_power_supply { 312235911Smav struct ses_ctrl_common common; 313235911Smav uint8_t bytes[3]; 314235911Smav}; 315235911Smav 316235911Smavenum ses_ctrl_power_supply_field_data { 317235911Smav SES_CTRL_POWER_SUPPLY_RQST_IDENT_BYTE = 0, 318235911Smav SES_CTRL_POWER_SUPPLY_RQST_IDENT_MASK = 0x80, 319235911Smav SES_CTRL_POWER_SUPPLY_RQST_IDENT_SHIFT = 7, 320235911Smav 321235911Smav SES_CTRL_POWER_SUPPLY_RQST_FAIL_BYTE = 2, 322235911Smav SES_CTRL_POWER_SUPPLY_RQST_FAIL_MASK = 0x40, 323235911Smav SES_CTRL_POWER_SUPPLY_RQST_FAIL_SHIFT = 6, 324235911Smav 325235911Smav SES_CTRL_POWER_SUPPLY_RQST_ON_BYTE = 2, 326235911Smav SES_CTRL_POWER_SUPPLY_RQST_ON_MASK = 0x20, 327235911Smav SES_CTRL_POWER_SUPPLY_RQST_ON_SHIFT = 5 328235911Smav}; 329235911Smav 330235911Smav#define GEN_SES_CTRL_POWER_SUPPLY_ACCESSORS(LCASE, UCASE) \ 331235911Smav GEN_ACCESSORS(ses_ctrl_power_supply, SES_CTRL_POWER_SUPPLY, LCASE, UCASE) 332235911SmavGEN_SES_CTRL_POWER_SUPPLY_ACCESSORS(rqst_ident, RQST_IDENT) 333235911SmavGEN_SES_CTRL_POWER_SUPPLY_ACCESSORS(rqst_fail, RQST_FAIL) 334235911SmavGEN_SES_CTRL_POWER_SUPPLY_ACCESSORS(rqst_on, RQST_ON) 335235911Smav#undef GEN_SES_CTRL_POWER_SUPPLY_ACCESSORS 336235911Smav 337235911Smav/*-------------------------- Cooling Control Element -------------------------*/ 338235911Smavstruct ses_ctrl_cooling { 339235911Smav struct ses_ctrl_common common; 340235911Smav uint8_t bytes[3]; 341235911Smav}; 342235911Smav 343235911Smavenum ses_ctrl_cooling_field_data { 344235911Smav SES_CTRL_COOLING_RQST_IDENT_BYTE = 0, 345235911Smav SES_CTRL_COOLING_RQST_IDENT_MASK = 0x80, 346235911Smav SES_CTRL_COOLING_RQST_IDENT_SHIFT = 7, 347235911Smav 348235911Smav SES_CTRL_COOLING_RQST_FAIL_BYTE = 2, 349235911Smav SES_CTRL_COOLING_RQST_FAIL_MASK = 0x40, 350235911Smav SES_CTRL_COOLING_RQST_FAIL_SHIFT = 6, 351235911Smav 352235911Smav SES_CTRL_COOLING_RQST_ON_BYTE = 2, 353235911Smav SES_CTRL_COOLING_RQST_ON_MASK = 0x20, 354235911Smav SES_CTRL_COOLING_RQST_ON_SHIFT = 5, 355235911Smav 356235911Smav SES_CTRL_COOLING_RQSTED_SPEED_CODE_BYTE = 2, 357235911Smav SES_CTRL_COOLING_RQSTED_SPEED_CODE_MASK = 0x07, 358235911Smav SES_CTRL_COOLING_RQSTED_SPEED_CODE_SHIFT = 2, 359235911Smav SES_CTRL_COOLING_RQSTED_SPEED_CODE_UNCHANGED = 0x00, 360235911Smav SES_CTRL_COOLING_RQSTED_SPEED_CODE_LOWEST = 0x01, 361235911Smav SES_CTRL_COOLING_RQSTED_SPEED_CODE_HIGHEST = 0x07 362235911Smav}; 363235911Smav 364235911Smav#define GEN_SES_CTRL_COOLING_ACCESSORS(LCASE, UCASE) \ 365235911Smav GEN_ACCESSORS(ses_ctrl_cooling, SES_CTRL_COOLING, LCASE, UCASE) 366235911SmavGEN_SES_CTRL_COOLING_ACCESSORS(rqst_ident, RQST_IDENT) 367235911SmavGEN_SES_CTRL_COOLING_ACCESSORS(rqst_fail, RQST_FAIL) 368235911SmavGEN_SES_CTRL_COOLING_ACCESSORS(rqst_on, RQST_ON) 369235911SmavGEN_SES_CTRL_COOLING_ACCESSORS(rqsted_speed_code, RQSTED_SPEED_CODE) 370235911Smav#undef GEN_SES_CTRL_COOLING_ACCESSORS 371235911Smav 372235911Smav/*-------------------- Temperature Sensor Control Element --------------------*/ 373235911Smavstruct ses_ctrl_temp_sensor { 374235911Smav struct ses_ctrl_common common; 375235911Smav uint8_t bytes[3]; 376235911Smav}; 377235911Smav 378235911Smavenum ses_ctrl_temp_sensor_field_data { 379235911Smav SES_CTRL_TEMP_SENSOR_RQST_IDENT_BYTE = 0, 380235911Smav SES_CTRL_TEMP_SENSOR_RQST_IDENT_MASK = 0x80, 381235911Smav SES_CTRL_TEMP_SENSOR_RQST_IDENT_SHIFT = 7, 382235911Smav 383235911Smav SES_CTRL_TEMP_SENSOR_RQST_FAIL_BYTE = 0, 384235911Smav SES_CTRL_TEMP_SENSOR_RQST_FAIL_MASK = 0x40, 385235911Smav SES_CTRL_TEMP_SENSOR_RQST_FAIL_SHIFT = 6 386235911Smav}; 387235911Smav 388235911Smav#define GEN_SES_CTRL_TEMP_SENSOR_ACCESSORS(LCASE, UCASE) \ 389235911Smav GEN_ACCESSORS(ses_ctrl_temp_sensor, SES_CTRL_TEMP_SENSOR, LCASE, UCASE) 390235911SmavGEN_SES_CTRL_TEMP_SENSOR_ACCESSORS(rqst_ident, RQST_IDENT) 391235911SmavGEN_SES_CTRL_TEMP_SENSOR_ACCESSORS(rqst_fail, RQST_FAIL) 392235911Smav#undef GEN_SES_CTRL_TEMP_SENSOR_ACCESSORS 393235911Smav 394235911Smav/*------------------------- Door Lock Control Element ------------------------*/ 395235911Smavstruct ses_ctrl_door_lock { 396235911Smav struct ses_ctrl_common common; 397235911Smav uint8_t bytes[3]; 398235911Smav}; 399235911Smav 400235911Smavenum ses_ctrl_door_lock_field_data { 401235911Smav SES_CTRL_DOOR_LOCK_RQST_IDENT_BYTE = 0, 402235911Smav SES_CTRL_DOOR_LOCK_RQST_IDENT_MASK = 0x80, 403235911Smav SES_CTRL_DOOR_LOCK_RQST_IDENT_SHIFT = 7, 404235911Smav 405235911Smav SES_CTRL_DOOR_LOCK_RQST_FAIL_BYTE = 0, 406235911Smav SES_CTRL_DOOR_LOCK_RQST_FAIL_MASK = 0x40, 407235911Smav SES_CTRL_DOOR_LOCK_RQST_FAIL_SHIFT = 6, 408235911Smav 409235911Smav SES_CTRL_DOOR_LOCK_UNLOCK_BYTE = 2, 410235911Smav SES_CTRL_DOOR_LOCK_UNLOCK_MASK = 0x01, 411235911Smav SES_CTRL_DOOR_LOCK_UNLOCK_SHIFT = 0 412235911Smav}; 413235911Smav 414235911Smav#define GEN_SES_CTRL_DOOR_LOCK_ACCESSORS(LCASE, UCASE) \ 415235911Smav GEN_ACCESSORS(ses_ctrl_door_lock, SES_CTRL_DOOR_LOCK, LCASE, UCASE) 416235911SmavGEN_SES_CTRL_DOOR_LOCK_ACCESSORS(rqst_ident, RQST_IDENT) 417235911SmavGEN_SES_CTRL_DOOR_LOCK_ACCESSORS(rqst_fail, RQST_FAIL) 418235911SmavGEN_SES_CTRL_DOOR_LOCK_ACCESSORS(unlock, UNLOCK) 419235911Smav#undef GEN_SES_CTRL_DOOR_LOCK_ACCESSORS 420235911Smav 421235911Smav/*----------------------- Audible Alarm Control Element ----------------------*/ 422235911Smavstruct ses_ctrl_audible_alarm { 423235911Smav struct ses_ctrl_common common; 424235911Smav uint8_t bytes[3]; 425235911Smav}; 426235911Smav 427235911Smavenum ses_ctrl_audible_alarm_field_data { 428235911Smav SES_CTRL_AUDIBLE_ALARM_RQST_IDENT_BYTE = 0, 429235911Smav SES_CTRL_AUDIBLE_ALARM_RQST_IDENT_MASK = 0x80, 430235911Smav SES_CTRL_AUDIBLE_ALARM_RQST_IDENT_SHIFT = 7, 431235911Smav 432235911Smav SES_CTRL_AUDIBLE_ALARM_RQST_FAIL_BYTE = 0, 433235911Smav SES_CTRL_AUDIBLE_ALARM_RQST_FAIL_MASK = 0x40, 434235911Smav SES_CTRL_AUDIBLE_ALARM_RQST_FAIL_SHIFT = 6, 435235911Smav 436235911Smav SES_CTRL_AUDIBLE_ALARM_SET_MUTE_BYTE = 2, 437235911Smav SES_CTRL_AUDIBLE_ALARM_SET_MUTE_MASK = 0x40, 438235911Smav SES_CTRL_AUDIBLE_ALARM_SET_MUTE_SHIFT = 6, 439235911Smav 440235911Smav SES_CTRL_AUDIBLE_ALARM_SET_REMIND_BYTE = 2, 441235911Smav SES_CTRL_AUDIBLE_ALARM_SET_REMIND_MASK = 0x10, 442235911Smav SES_CTRL_AUDIBLE_ALARM_SET_REMIND_SHIFT = 4, 443235911Smav 444235911Smav SES_CTRL_AUDIBLE_ALARM_TONE_CONTROL_BYTE = 2, 445235911Smav SES_CTRL_AUDIBLE_ALARM_TONE_CONTROL_MASK = 0x0F, 446235911Smav SES_CTRL_AUDIBLE_ALARM_TONE_CONTROL_SHIFT = 0, 447235911Smav SES_CTRL_AUDIBLE_ALARM_TONE_CONTROL_INFO = 0x08, 448235911Smav SES_CTRL_AUDIBLE_ALARM_TONE_CONTROL_NON_CRIT = 0x04, 449235911Smav SES_CTRL_AUDIBLE_ALARM_TONE_CONTROL_CRIT = 0x02, 450235911Smav SES_CTRL_AUDIBLE_ALARM_TONE_CONTROL_UNRECOV = 0x01 451235911Smav}; 452235911Smav 453235911Smav#define GEN_SES_CTRL_AUDIBLE_ALARM_ACCESSORS(LCASE, UCASE) \ 454235911Smav GEN_ACCESSORS(ses_ctrl_audible_alarm, SES_CTRL_AUDIBLE_ALARM, LCASE, UCASE) 455235911SmavGEN_SES_CTRL_AUDIBLE_ALARM_ACCESSORS(rqst_ident, RQST_IDENT) 456235911SmavGEN_SES_CTRL_AUDIBLE_ALARM_ACCESSORS(rqst_fail, RQST_FAIL) 457235911SmavGEN_SES_CTRL_AUDIBLE_ALARM_ACCESSORS(set_mute, SET_MUTE) 458235911SmavGEN_SES_CTRL_AUDIBLE_ALARM_ACCESSORS(set_remind, SET_REMIND) 459235911SmavGEN_SES_CTRL_AUDIBLE_ALARM_ACCESSORS(tone_control, TONE_CONTROL) 460235911Smav#undef GEN_SES_CTRL_AUDIBLE_ALARM_ACCESSORS 461235911Smav 462235911Smav/*--------- Enclosure Services Controller Electronics Control Element --------*/ 463235911Smavstruct ses_ctrl_ecc_electronics { 464235911Smav struct ses_ctrl_common common; 465235911Smav uint8_t bytes[3]; 466235911Smav}; 467235911Smav 468235911Smavenum ses_ctrl_ecc_electronics_field_data { 469235911Smav SES_CTRL_ECC_ELECTRONICS_RQST_IDENT_BYTE = 0, 470235911Smav SES_CTRL_ECC_ELECTRONICS_RQST_IDENT_MASK = 0x80, 471235911Smav SES_CTRL_ECC_ELECTRONICS_RQST_IDENT_SHIFT = 7, 472235911Smav 473235911Smav SES_CTRL_ECC_ELECTRONICS_RQST_FAIL_BYTE = 0, 474235911Smav SES_CTRL_ECC_ELECTRONICS_RQST_FAIL_MASK = 0x40, 475235911Smav SES_CTRL_ECC_ELECTRONICS_RQST_FAIL_SHIFT = 6, 476235911Smav 477235911Smav SES_CTRL_ECC_ELECTRONICS_SELECT_ELEMENT_BYTE = 1, 478235911Smav SES_CTRL_ECC_ELECTRONICS_SELECT_ELEMENT_MASK = 0x01, 479235911Smav SES_CTRL_ECC_ELECTRONICS_SELECT_ELEMENT_SHIFT = 0 480235911Smav}; 481235911Smav 482235911Smav#define GEN_SES_CTRL_ECC_ELECTRONICS_ACCESSORS(LCASE, UCASE) \ 483235911Smav GEN_ACCESSORS(ses_ctrl_ecc_electronics, SES_CTRL_ECC_ELECTRONICS, \ 484235911Smav LCASE, UCASE) 485235911SmavGEN_SES_CTRL_ECC_ELECTRONICS_ACCESSORS(rqst_ident, RQST_IDENT) 486235911SmavGEN_SES_CTRL_ECC_ELECTRONICS_ACCESSORS(rqst_fail, RQST_FAIL) 487235911SmavGEN_SES_CTRL_ECC_ELECTRONICS_ACCESSORS(select_element, SELECT_ELEMENT) 488235911Smav#undef GEN_SES_CTRL_ECC_ELECTRONICS_ACCESSORS 489235911Smav 490235911Smav/*----------- SCSI Services Controller Electronics Control Element -----------*/ 491235911Smavstruct ses_ctrl_scc_electronics { 492235911Smav struct ses_ctrl_common common; 493235911Smav uint8_t bytes[3]; 494235911Smav}; 495235911Smav 496235911Smavenum ses_ctrl_scc_electronics_field_data { 497235911Smav SES_CTRL_SCC_ELECTRONICS_RQST_IDENT_BYTE = 0, 498235911Smav SES_CTRL_SCC_ELECTRONICS_RQST_IDENT_MASK = 0x80, 499235911Smav SES_CTRL_SCC_ELECTRONICS_RQST_IDENT_SHIFT = 7, 500235911Smav 501235911Smav SES_CTRL_SCC_ELECTRONICS_RQST_FAIL_BYTE = 0, 502235911Smav SES_CTRL_SCC_ELECTRONICS_RQST_FAIL_MASK = 0x40, 503235911Smav SES_CTRL_SCC_ELECTRONICS_RQST_FAIL_SHIFT = 6 504235911Smav}; 505235911Smav 506235911Smav#define GEN_SES_CTRL_SCC_ELECTRONICS_ACCESSORS(LCASE, UCASE) \ 507235911Smav GEN_ACCESSORS(ses_ctrl_scc_electronics, SES_CTRL_SCC_ELECTRONICS, \ 508235911Smav LCASE, UCASE) 509235911SmavGEN_SES_CTRL_SCC_ELECTRONICS_ACCESSORS(rqst_ident, RQST_IDENT) 510235911SmavGEN_SES_CTRL_SCC_ELECTRONICS_ACCESSORS(rqst_fail, RQST_FAIL) 511235911Smav#undef GEN_SES_CTRL_SCC_ELECTRONICS_ACCESSORS 512235911Smav 513235911Smav/*--------------------- Nonvolatile Cache Control Element --------------------*/ 514235911Smavstruct ses_ctrl_nv_cache { 515235911Smav struct ses_ctrl_common common; 516235911Smav uint8_t bytes[3]; 517235911Smav}; 518235911Smav 519235911Smavenum ses_ctrl_nv_cache_field_data { 520235911Smav SES_CTRL_NV_CACHE_RQST_IDENT_BYTE = 0, 521235911Smav SES_CTRL_NV_CACHE_RQST_IDENT_MASK = 0x80, 522235911Smav SES_CTRL_NV_CACHE_RQST_IDENT_SHIFT = 7, 523235911Smav 524235911Smav SES_CTRL_NV_CACHE_RQST_FAIL_BYTE = 0, 525235911Smav SES_CTRL_NV_CACHE_RQST_FAIL_MASK = 0x40, 526235911Smav SES_CTRL_NV_CACHE_RQST_FAIL_SHIFT = 6 527235911Smav}; 528235911Smav 529235911Smav#define GEN_SES_CTRL_NV_CACHE_ACCESSORS(LCASE, UCASE) \ 530235911Smav GEN_ACCESSORS(ses_ctrl_nv_cache, SES_CTRL_NV_CACHE, LCASE, UCASE) 531235911SmavGEN_SES_CTRL_NV_CACHE_ACCESSORS(rqst_ident, RQST_IDENT) 532235911SmavGEN_SES_CTRL_NV_CACHE_ACCESSORS(rqst_fail, RQST_FAIL) 533235911Smav#undef GEN_SES_CTRL_NV_CACHE_ACCESSORS 534235911Smav 535235911Smav/*----------------- Invalid Operation Reason Control Element -----------------*/ 536235911Smavstruct ses_ctrl_invalid_op_reason { 537235911Smav struct ses_ctrl_common common; 538235911Smav uint8_t bytes[3]; 539235911Smav}; 540235911Smav 541235911Smav/* There are no element specific fields currently defined in the spec. */ 542235911Smav 543235911Smav/*--------------- Uninterruptible Power Supply Control Element ---------------*/ 544235911Smavstruct ses_ctrl_ups { 545235911Smav struct ses_ctrl_common common; 546235911Smav uint8_t bytes[3]; 547235911Smav}; 548235911Smav 549235911Smavenum ses_ctrl_ups_field_data { 550235911Smav SES_CTRL_UPS_RQST_IDENT_BYTE = 2, 551235911Smav SES_CTRL_UPS_RQST_IDENT_MASK = 0x80, 552235911Smav SES_CTRL_UPS_RQST_IDENT_SHIFT = 7, 553235911Smav 554235911Smav SES_CTRL_UPS_RQST_FAIL_BYTE = 2, 555235911Smav SES_CTRL_UPS_RQST_FAIL_MASK = 0x40, 556235911Smav SES_CTRL_UPS_RQST_FAIL_SHIFT = 6 557235911Smav}; 558235911Smav 559235911Smav#define GEN_SES_CTRL_UPS_ACCESSORS(LCASE, UCASE) \ 560235911Smav GEN_ACCESSORS(ses_ctrl_ups, SES_CTRL_UPS, LCASE, UCASE) 561235911SmavGEN_SES_CTRL_UPS_ACCESSORS(rqst_ident, RQST_IDENT) 562235911SmavGEN_SES_CTRL_UPS_ACCESSORS(rqst_fail, RQST_FAIL) 563235911Smav#undef GEN_SES_CTRL_UPS_ACCESSORS 564235911Smav 565235911Smav/*-------------------------- Display Control Element -------------------------*/ 566235911Smavstruct ses_ctrl_display { 567235911Smav struct ses_ctrl_common common; 568235911Smav uint8_t bytes[1]; 569235911Smav uint8_t display_character[2]; 570235911Smav}; 571235911Smav 572235911Smavenum ses_ctrl_display_field_data { 573235911Smav SES_CTRL_DISPLAY_RQST_IDENT_BYTE = 0, 574235911Smav SES_CTRL_DISPLAY_RQST_IDENT_MASK = 0x80, 575235911Smav SES_CTRL_DISPLAY_RQST_IDENT_SHIFT = 7, 576235911Smav 577235911Smav SES_CTRL_DISPLAY_RQST_FAIL_BYTE = 0, 578235911Smav SES_CTRL_DISPLAY_RQST_FAIL_MASK = 0x40, 579235911Smav SES_CTRL_DISPLAY_RQST_FAIL_SHIFT = 6, 580235911Smav 581235911Smav SES_CTRL_DISPLAY_DISPLAY_MODE_BYTE = 0, 582235911Smav SES_CTRL_DISPLAY_DISPLAY_MODE_MASK = 0x03, 583235911Smav SES_CTRL_DISPLAY_DISPLAY_MODE_SHIFT = 6, 584235911Smav SES_CTRL_DISPLAY_DISPLAY_MODE_UNCHANGED = 0x0, 585235911Smav SES_CTRL_DISPLAY_DISPLAY_MODE_ESP = 0x1, 586235911Smav SES_CTRL_DISPLAY_DISPLAY_MODE_DC_FIELD = 0x2 587235911Smav}; 588235911Smav 589235911Smav#define GEN_SES_CTRL_DISPLAY_ACCESSORS(LCASE, UCASE) \ 590235911Smav GEN_ACCESSORS(ses_ctrl_display, SES_CTRL_DISPLAY, LCASE, UCASE) 591235911SmavGEN_SES_CTRL_DISPLAY_ACCESSORS(rqst_ident, RQST_IDENT) 592235911SmavGEN_SES_CTRL_DISPLAY_ACCESSORS(rqst_fail, RQST_FAIL) 593235911SmavGEN_SES_CTRL_DISPLAY_ACCESSORS(display_mode, DISPLAY_MODE) 594235911Smav#undef GEN_SES_CTRL_DISPLAY_ACCESSORS 595235911Smav 596235911Smav/*----------------------- Key Pad Entry Control Element ----------------------*/ 597235911Smavstruct ses_ctrl_key_pad_entry { 598235911Smav struct ses_ctrl_common common; 599235911Smav uint8_t bytes[3]; 600235911Smav}; 601235911Smav 602235911Smavenum ses_ctrl_key_pad_entry_field_data { 603235911Smav SES_CTRL_KEY_PAD_ENTRY_RQST_IDENT_BYTE = 0, 604235911Smav SES_CTRL_KEY_PAD_ENTRY_RQST_IDENT_MASK = 0x80, 605235911Smav SES_CTRL_KEY_PAD_ENTRY_RQST_IDENT_SHIFT = 7, 606235911Smav 607235911Smav SES_CTRL_KEY_PAD_ENTRY_RQST_FAIL_BYTE = 0, 608235911Smav SES_CTRL_KEY_PAD_ENTRY_RQST_FAIL_MASK = 0x40, 609235911Smav SES_CTRL_KEY_PAD_ENTRY_RQST_FAIL_SHIFT = 6 610235911Smav}; 611235911Smav 612235911Smav#define GEN_SES_CTRL_KEY_PAD_ENTRY_ACCESSORS(LCASE, UCASE) \ 613235911Smav GEN_ACCESSORS(ses_ctrl_key_pad_entry, SES_CTRL_KEY_PAD_ENTRY, LCASE, UCASE) 614235911SmavGEN_SES_CTRL_KEY_PAD_ENTRY_ACCESSORS(rqst_ident, RQST_IDENT) 615235911SmavGEN_SES_CTRL_KEY_PAD_ENTRY_ACCESSORS(rqst_fail, RQST_FAIL) 616235911Smav#undef GEN_SES_CTRL_KEY_PAD_ENTRY_ACCESSORS 617235911Smav 618235911Smav/*------------------------- Enclosure Control Element ------------------------*/ 619235911Smavstruct ses_ctrl_enclosure { 620235911Smav struct ses_ctrl_common common; 621235911Smav uint8_t bytes[3]; 622235911Smav}; 623235911Smav 624235911Smavenum ses_ctrl_enclosure_field_data { 625235911Smav SES_CTRL_ENCLOSURE_RQST_IDENT_BYTE = 0, 626235911Smav SES_CTRL_ENCLOSURE_RQST_IDENT_MASK = 0x80, 627235911Smav SES_CTRL_ENCLOSURE_RQST_IDENT_SHIFT = 7, 628235911Smav 629235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_RQST_BYTE = 1, 630235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_RQST_MASK = 0xC0, 631235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_RQST_SHIFT = 6, 632235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_RQST_NONE = 0x0, 633235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_RQST_AFTER_DELAY = 0x1, 634235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_RQST_CANCEL = 0x2, 635235911Smav 636235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_DELAY_BYTE = 1, 637235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_DELAY_MASK = 0x3F, 638235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_DELAY_SHIFT = 0, 639235911Smav SES_CTRL_ENCLOSURE_POWER_CYCLE_DELAY_MAX = 60,/*minutes*/ 640235911Smav 641235911Smav SES_CTRL_ENCLOSURE_POWER_OFF_DURATION_BYTE = 2, 642235911Smav SES_CTRL_ENCLOSURE_POWER_OFF_DURATION_MASK = 0xFC, 643235911Smav SES_CTRL_ENCLOSURE_POWER_OFF_DURATION_SHIFT = 2, 644235911Smav SES_CTRL_ENCLOSURE_POWER_OFF_DURATION_MAX_AUTO = 60, 645235911Smav SES_CTRL_ENCLOSURE_POWER_OFF_DURATION_MANUAL = 63, 646235911Smav 647235911Smav SES_CTRL_ENCLOSURE_RQST_FAIL_BYTE = 2, 648235911Smav SES_CTRL_ENCLOSURE_RQST_FAIL_MASK = 0x02, 649235911Smav SES_CTRL_ENCLOSURE_RQST_FAIL_SHIFT = 1, 650235911Smav 651235911Smav SES_CTRL_ENCLOSURE_RQST_WARN_BYTE = 2, 652235911Smav SES_CTRL_ENCLOSURE_RQST_WARN_MASK = 0x01, 653235911Smav SES_CTRL_ENCLOSURE_RQST_WARN_SHIFT = 0 654235911Smav}; 655235911Smav 656235911Smav#define GEN_SES_CTRL_ENCLOSURE_ACCESSORS(LCASE, UCASE) \ 657235911Smav GEN_ACCESSORS(ses_ctrl_enclosure, SES_CTRL_ENCLOSURE, LCASE, UCASE) 658235911SmavGEN_SES_CTRL_ENCLOSURE_ACCESSORS(rqst_ident, RQST_IDENT) 659235911SmavGEN_SES_CTRL_ENCLOSURE_ACCESSORS(power_cycle_rqst, POWER_CYCLE_RQST) 660235911SmavGEN_SES_CTRL_ENCLOSURE_ACCESSORS(power_cycle_delay, POWER_CYCLE_DELAY) 661235911SmavGEN_SES_CTRL_ENCLOSURE_ACCESSORS(power_off_duration, POWER_OFF_DURATION) 662235911SmavGEN_SES_CTRL_ENCLOSURE_ACCESSORS(rqst_fail, RQST_FAIL) 663235911SmavGEN_SES_CTRL_ENCLOSURE_ACCESSORS(rqst_warn, RQST_WARN) 664235911Smav#undef GEN_SES_CTRL_ENCLOSURE_ACCESSORS 665235911Smav 666235911Smav/*------------------- SCSI Port/Transceiver Control Element ------------------*/ 667235911Smavstruct ses_ctrl_scsi_port_or_xcvr { 668235911Smav struct ses_ctrl_common common; 669235911Smav uint8_t bytes[3]; 670235911Smav}; 671235911Smav 672235911Smavenum ses_ctrl_scsi_port_or_xcvr_field_data { 673235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_RQST_IDENT_BYTE = 0, 674235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_RQST_IDENT_MASK = 0x80, 675235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_RQST_IDENT_SHIFT = 7, 676235911Smav 677235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_RQST_FAIL_BYTE = 0, 678235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_RQST_FAIL_MASK = 0x40, 679235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_RQST_FAIL_SHIFT = 6, 680235911Smav 681235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_DISABLE_BYTE = 2, 682235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_DISABLE_MASK = 0x10, 683235911Smav SES_CTRL_SCSI_PORT_OR_XCVR_DISABLE_SHIFT = 4 684235911Smav}; 685235911Smav 686235911Smav#define GEN_SES_CTRL_SCSI_PORT_OR_XCVR_ACCESSORS(LCASE, UCASE) \ 687235911Smav GEN_ACCESSORS(ses_ctrl_scsi_port_or_xcvr, SES_CTRL_SCSI_PORT_OR_XCVR,\ 688235911Smav LCASE, UCASE) 689235911SmavGEN_SES_CTRL_SCSI_PORT_OR_XCVR_ACCESSORS(rqst_ident, RQST_IDENT) 690235911SmavGEN_SES_CTRL_SCSI_PORT_OR_XCVR_ACCESSORS(disable, DISABLE) 691235911SmavGEN_SES_CTRL_SCSI_PORT_OR_XCVR_ACCESSORS(rqst_fail, RQST_FAIL) 692235911Smav#undef GEN_SES_CTRL_SCSI_PORT_OR_XCVR_ACCESSORS 693235911Smav 694235911Smav/*------------------------- Language Control Element -------------------------*/ 695235911Smavstruct ses_ctrl_language { 696235911Smav struct ses_ctrl_common common; 697235911Smav uint8_t bytes[1]; 698235911Smav uint8_t language_code[2]; 699235911Smav}; 700235911Smav 701235911Smavenum ses_ctrl_language_field_data { 702235911Smav SES_CTRL_LANGUAGE_RQST_IDENT_BYTE = 0, 703235911Smav SES_CTRL_LANGUAGE_RQST_IDENT_MASK = 0x80, 704235911Smav SES_CTRL_LANGUAGE_RQST_IDENT_SHIFT = 7 705235911Smav}; 706235911Smav 707235911Smav#define GEN_SES_CTRL_LANGUAGE_ACCESSORS(LCASE, UCASE) \ 708235911Smav GEN_ACCESSORS(ses_ctrl_language, SES_CTRL_LANGUAGE, LCASE, UCASE) 709235911SmavGEN_SES_CTRL_LANGUAGE_ACCESSORS(rqst_ident, RQST_IDENT) 710235911Smav#undef GEN_SES_CTRL_LANGUAGE_ACCESSORS 711235911Smav 712235911Smav/*-------------------- Communication Port Control Element --------------------*/ 713235911Smavstruct ses_ctrl_comm_port { 714235911Smav struct ses_ctrl_common common; 715235911Smav uint8_t bytes[3]; 716235911Smav}; 717235911Smav 718235911Smavenum ses_ctrl_comm_port_field_data { 719235911Smav SES_CTRL_COMM_PORT_RQST_IDENT_BYTE = 0, 720235911Smav SES_CTRL_COMM_PORT_RQST_IDENT_MASK = 0x80, 721235911Smav SES_CTRL_COMM_PORT_RQST_IDENT_SHIFT = 7, 722235911Smav 723235911Smav SES_CTRL_COMM_PORT_RQST_FAIL_BYTE = 0, 724235911Smav SES_CTRL_COMM_PORT_RQST_FAIL_MASK = 0x40, 725235911Smav SES_CTRL_COMM_PORT_RQST_FAIL_SHIFT = 6, 726235911Smav 727235911Smav SES_CTRL_COMM_PORT_DISABLE_BYTE = 2, 728235911Smav SES_CTRL_COMM_PORT_DISABLE_MASK = 0x01, 729235911Smav SES_CTRL_COMM_PORT_DISABLE_SHIFT = 0 730235911Smav}; 731235911Smav 732235911Smav#define GEN_SES_CTRL_COMM_PORT_ACCESSORS(LCASE, UCASE) \ 733235911Smav GEN_ACCESSORS(ses_ctrl_comm_port, SES_CTRL_COMM_PORT, LCASE, UCASE) 734235911SmavGEN_SES_CTRL_COMM_PORT_ACCESSORS(rqst_ident, RQST_IDENT) 735235911SmavGEN_SES_CTRL_COMM_PORT_ACCESSORS(rqst_fail, RQST_FAIL) 736235911SmavGEN_SES_CTRL_COMM_PORT_ACCESSORS(disable, DISABLE) 737235911Smav#undef GEN_SES_CTRL_COMM_PORT_ACCESSORS 738235911Smav 739235911Smav/*---------------------- Voltage Sensor Control Element ----------------------*/ 740235911Smavstruct ses_ctrl_voltage_sensor { 741235911Smav struct ses_ctrl_common common; 742235911Smav uint8_t bytes[3]; 743235911Smav}; 744235911Smav 745235911Smavenum ses_ctrl_voltage_sensor_field_data { 746235911Smav SES_CTRL_VOLTAGE_SENSOR_RQST_IDENT_BYTE = 0, 747235911Smav SES_CTRL_VOLTAGE_SENSOR_RQST_IDENT_MASK = 0x80, 748235911Smav SES_CTRL_VOLTAGE_SENSOR_RQST_IDENT_SHIFT = 7, 749235911Smav 750235911Smav SES_CTRL_VOLTAGE_SENSOR_RQST_FAIL_BYTE = 0, 751235911Smav SES_CTRL_VOLTAGE_SENSOR_RQST_FAIL_MASK = 0x40, 752235911Smav SES_CTRL_VOLTAGE_SENSOR_RQST_FAIL_SHIFT = 6 753235911Smav}; 754235911Smav 755235911Smav#define GEN_SES_CTRL_VOLTAGE_SENSOR_ACCESSORS(LCASE, UCASE) \ 756235911Smav GEN_ACCESSORS(ses_ctrl_voltage_sensor, SES_CTRL_VOLTAGE_SENSOR, \ 757235911Smav LCASE, UCASE) 758235911SmavGEN_SES_CTRL_VOLTAGE_SENSOR_ACCESSORS(rqst_ident, RQST_IDENT) 759235911SmavGEN_SES_CTRL_VOLTAGE_SENSOR_ACCESSORS(rqst_fail, RQST_FAIL) 760235911Smav#undef GEN_SES_CTRL_VOLTAGE_SENSOR_ACCESSORS 761235911Smav 762235911Smav/*---------------------- Current Sensor Control Element ----------------------*/ 763235911Smavstruct ses_ctrl_current_sensor { 764235911Smav struct ses_ctrl_common common; 765235911Smav uint8_t bytes[3]; 766235911Smav}; 767235911Smav 768235911Smavenum ses_ctrl_current_sensor_field_data { 769235911Smav SES_CTRL_CURRENT_SENSOR_RQST_IDENT_BYTE = 0, 770235911Smav SES_CTRL_CURRENT_SENSOR_RQST_IDENT_MASK = 0x80, 771235911Smav SES_CTRL_CURRENT_SENSOR_RQST_IDENT_SHIFT = 7, 772235911Smav 773235911Smav SES_CTRL_CURRENT_SENSOR_RQST_FAIL_BYTE = 0, 774235911Smav SES_CTRL_CURRENT_SENSOR_RQST_FAIL_MASK = 0x40, 775235911Smav SES_CTRL_CURRENT_SENSOR_RQST_FAIL_SHIFT = 6 776235911Smav}; 777235911Smav 778235911Smav#define GEN_SES_CTRL_CURRENT_SENSOR_ACCESSORS(LCASE, UCASE) \ 779235911Smav GEN_ACCESSORS(ses_ctrl_current_sensor, SES_CTRL_CURRENT_SENSOR, \ 780235911Smav LCASE, UCASE) 781235911SmavGEN_SES_CTRL_CURRENT_SENSOR_ACCESSORS(rqst_ident, RQST_IDENT) 782235911SmavGEN_SES_CTRL_CURRENT_SENSOR_ACCESSORS(rqst_fail, RQST_FAIL) 783235911Smav#undef GEN_SES_CTRL_CURRENT_SENSOR_ACCESSORS 784235911Smav 785235911Smav/*--------------------- SCSI Target Port Control Element ---------------------*/ 786235911Smavstruct ses_ctrl_target_port { 787235911Smav struct ses_ctrl_common common; 788235911Smav uint8_t bytes[3]; 789235911Smav}; 790235911Smav 791235911Smavenum ses_ctrl_scsi_target_port_field_data { 792235911Smav SES_CTRL_TARGET_PORT_RQST_IDENT_BYTE = 0, 793235911Smav SES_CTRL_TARGET_PORT_RQST_IDENT_MASK = 0x80, 794235911Smav SES_CTRL_TARGET_PORT_RQST_IDENT_SHIFT = 7, 795235911Smav 796235911Smav SES_CTRL_TARGET_PORT_RQST_FAIL_BYTE = 0, 797235911Smav SES_CTRL_TARGET_PORT_RQST_FAIL_MASK = 0x40, 798235911Smav SES_CTRL_TARGET_PORT_RQST_FAIL_SHIFT = 6, 799235911Smav 800235911Smav SES_CTRL_TARGET_PORT_ENABLE_BYTE = 2, 801235911Smav SES_CTRL_TARGET_PORT_ENABLE_MASK = 0x01, 802235911Smav SES_CTRL_TARGET_PORT_ENABLE_SHIFT = 0 803235911Smav}; 804235911Smav 805235911Smav#define GEN_SES_CTRL_TARGET_PORT_ACCESSORS(LCASE, UCASE) \ 806235911Smav GEN_ACCESSORS(ses_ctrl_target_port, SES_CTRL_TARGET_PORT, LCASE, UCASE) 807235911SmavGEN_SES_CTRL_TARGET_PORT_ACCESSORS(rqst_ident, RQST_IDENT) 808235911SmavGEN_SES_CTRL_TARGET_PORT_ACCESSORS(rqst_fail, RQST_FAIL) 809235911SmavGEN_SES_CTRL_TARGET_PORT_ACCESSORS(enable, ENABLE) 810235911Smav#undef GEN_SES_CTRL_TARGET_PORT_ACCESSORS 811235911Smav 812235911Smav/*-------------------- SCSI Initiator Port Control Element -------------------*/ 813235911Smavstruct ses_ctrl_initiator_port { 814235911Smav struct ses_ctrl_common common; 815235911Smav uint8_t bytes[3]; 816235911Smav}; 817235911Smav 818235911Smavenum ses_ctrl_initiator_port_field_data { 819235911Smav SES_CTRL_INITIATOR_PORT_RQST_IDENT_BYTE = 0, 820235911Smav SES_CTRL_INITIATOR_PORT_RQST_IDENT_MASK = 0x80, 821235911Smav SES_CTRL_INITIATOR_PORT_RQST_IDENT_SHIFT = 7, 822235911Smav 823235911Smav SES_CTRL_INITIATOR_PORT_RQST_FAIL_BYTE = 0, 824235911Smav SES_CTRL_INITIATOR_PORT_RQST_FAIL_MASK = 0x40, 825235911Smav SES_CTRL_INITIATOR_PORT_RQST_FAIL_SHIFT = 6, 826235911Smav 827235911Smav SES_CTRL_INITIATOR_PORT_ENABLE_BYTE = 2, 828235911Smav SES_CTRL_INITIATOR_PORT_ENABLE_MASK = 0x01, 829235911Smav SES_CTRL_INITIATOR_PORT_ENABLE_SHIFT = 0 830235911Smav}; 831235911Smav 832235911Smav#define GEN_SES_CTRL_INITIATOR_PORT_ACCESSORS(LCASE, UCASE) \ 833235911Smav GEN_ACCESSORS(ses_ctrl_initiator_port, SES_CTRL_INITIATOR_PORT, \ 834235911Smav LCASE, UCASE) 835235911SmavGEN_SES_CTRL_INITIATOR_PORT_ACCESSORS(rqst_ident, RQST_IDENT) 836235911SmavGEN_SES_CTRL_INITIATOR_PORT_ACCESSORS(rqst_fail, RQST_FAIL) 837235911SmavGEN_SES_CTRL_INITIATOR_PORT_ACCESSORS(enable, ENABLE) 838235911Smav#undef GEN_SES_CTRL_INITIATOR_PORT_ACCESSORS 839235911Smav 840235911Smav/*-------------------- Simple Subenclosure Control Element -------------------*/ 841235911Smavstruct ses_ctrl_simple_subenc { 842235911Smav struct ses_ctrl_common common; 843235911Smav uint8_t bytes[3]; 844235911Smav}; 845235911Smav 846235911Smavenum ses_ctrl_simple_subenc_field_data { 847235911Smav SES_CTRL_SIMPlE_SUBSES_RQST_IDENT_BYTE = 0, 848235911Smav SES_CTRL_SIMPlE_SUBSES_RQST_IDENT_MASK = 0x80, 849235911Smav SES_CTRL_SIMPlE_SUBSES_RQST_IDENT_SHIFT = 7, 850235911Smav 851235911Smav SES_CTRL_SIMPlE_SUBSES_RQST_FAIL_BYTE = 0, 852235911Smav SES_CTRL_SIMPlE_SUBSES_RQST_FAIL_MASK = 0x40, 853235911Smav SES_CTRL_SIMPlE_SUBSES_RQST_FAIL_SHIFT = 6 854235911Smav}; 855235911Smav 856235911Smav#define GEN_SES_CTRL_SIMPlE_SUBSES_ACCESSORS(LCASE, UCASE) \ 857235911Smav GEN_ACCESSORS(ses_ctrl_simple_subenc, SES_CTRL_SIMPlE_SUBSES, \ 858235911Smav LCASE, UCASE) 859235911SmavGEN_SES_CTRL_SIMPlE_SUBSES_ACCESSORS(rqst_ident, RQST_IDENT) 860235911SmavGEN_SES_CTRL_SIMPlE_SUBSES_ACCESSORS(rqst_fail, RQST_FAIL) 861235911Smav#undef GEN_SES_CTRL_SIMPlE_SUBSES_ACCESSORS 862235911Smav 863235911Smav/*----------------------- SAS Expander Control Element -----------------------*/ 864235911Smavstruct ses_ctrl_sas_expander { 865235911Smav struct ses_ctrl_common common; 866235911Smav uint8_t bytes[3]; 867235911Smav}; 868235911Smav 869235911Smavenum ses_ctrl_sas_expander_field_data { 870235911Smav SES_CTRL_SAS_EXPANDER_RQST_IDENT_BYTE = 0, 871235911Smav SES_CTRL_SAS_EXPANDER_RQST_IDENT_MASK = 0x80, 872235911Smav SES_CTRL_SAS_EXPANDER_RQST_IDENT_SHIFT = 7, 873235911Smav 874235911Smav SES_CTRL_SAS_EXPANDER_RQST_FAIL_BYTE = 0, 875235911Smav SES_CTRL_SAS_EXPANDER_RQST_FAIL_MASK = 0x40, 876235911Smav SES_CTRL_SAS_EXPANDER_RQST_FAIL_SHIFT = 6 877235911Smav}; 878235911Smav 879235911Smav#define GEN_SES_CTRL_SAS_EXPANDER_ACCESSORS(LCASE, UCASE) \ 880235911Smav GEN_ACCESSORS(ses_ctrl_sas_expander, SES_CTRL_SAS_EXPANDER, LCASE, UCASE) 881235911SmavGEN_SES_CTRL_SAS_EXPANDER_ACCESSORS(rqst_ident, RQST_IDENT) 882235911SmavGEN_SES_CTRL_SAS_EXPANDER_ACCESSORS(rqst_fail, RQST_FAIL) 883235911Smav#undef GEN_SES_CTRL_SAS_EXPANDER_ACCESSORS 884235911Smav 885235911Smav/*----------------------- SAS Connector Control Element ----------------------*/ 886235911Smavstruct ses_ctrl_sas_connector { 887235911Smav struct ses_ctrl_common common; 888235911Smav uint8_t bytes[3]; 889235911Smav}; 890235911Smav 891235911Smavenum ses_ctrl_sas_connector_field_data { 892235911Smav SES_CTRL_SAS_CONNECTOR_RQST_IDENT_BYTE = 0, 893235911Smav SES_CTRL_SAS_CONNECTOR_RQST_IDENT_MASK = 0x80, 894235911Smav SES_CTRL_SAS_CONNECTOR_RQST_IDENT_SHIFT = 7, 895235911Smav 896235911Smav SES_CTRL_SAS_CONNECTOR_RQST_FAIL_BYTE = 2, 897235911Smav SES_CTRL_SAS_CONNECTOR_RQST_FAIL_MASK = 0x40, 898235911Smav SES_CTRL_SAS_CONNECTOR_RQST_FAIL_SHIFT = 6 899235911Smav}; 900235911Smav 901235911Smav#define GEN_SES_CTRL_SAS_CONNECTOR_ACCESSORS(LCASE, UCASE) \ 902235911Smav GEN_ACCESSORS(ses_ctrl_sas_connector, SES_CTRL_SAS_CONNECTOR, \ 903235911Smav LCASE, UCASE) 904235911SmavGEN_SES_CTRL_SAS_CONNECTOR_ACCESSORS(rqst_ident, RQST_IDENT) 905235911SmavGEN_SES_CTRL_SAS_CONNECTOR_ACCESSORS(rqst_fail, RQST_FAIL) 906235911Smav#undef GEN_SES_CTRL_SAS_CONNECTOR_ACCESSORS 907235911Smav 908235911Smav/*------------------------- Universal Control Element ------------------------*/ 909235911Smavunion ses_ctrl_element { 910235911Smav struct ses_ctrl_common common; 911235911Smav struct ses_ctrl_dev_slot dev_slot; 912235911Smav struct ses_ctrl_array_dev_slot array_dev_slot; 913235911Smav struct ses_ctrl_power_supply power_supply; 914235911Smav struct ses_ctrl_cooling cooling; 915235911Smav struct ses_ctrl_temp_sensor temp_sensor; 916235911Smav struct ses_ctrl_door_lock door_lock; 917235911Smav struct ses_ctrl_audible_alarm audible_alarm; 918235911Smav struct ses_ctrl_ecc_electronics ecc_electronics; 919235911Smav struct ses_ctrl_scc_electronics scc_electronics; 920235911Smav struct ses_ctrl_nv_cache nv_cache; 921235911Smav struct ses_ctrl_invalid_op_reason invalid_op_reason; 922235911Smav struct ses_ctrl_ups ups; 923235911Smav struct ses_ctrl_display display; 924235911Smav struct ses_ctrl_key_pad_entry key_pad_entry; 925235911Smav struct ses_ctrl_scsi_port_or_xcvr scsi_port_or_xcvr; 926235911Smav struct ses_ctrl_language language; 927235911Smav struct ses_ctrl_comm_port comm_port; 928235911Smav struct ses_ctrl_voltage_sensor voltage_sensor; 929235911Smav struct ses_ctrl_current_sensor current_sensor; 930235911Smav struct ses_ctrl_target_port target_port; 931235911Smav struct ses_ctrl_initiator_port initiator_port; 932235911Smav struct ses_ctrl_simple_subenc simple_subenc; 933235911Smav struct ses_ctrl_sas_expander sas_expander; 934235911Smav struct ses_ctrl_sas_connector sas_connector; 935235911Smav}; 936235911Smav 937235911Smav/*--------------------- SCSI SES Control Diagnostic Page ---------------------*/ 938235911Smavstruct ses_ctrl_page { 939235911Smav struct ses_page_hdr hdr; 940235911Smav union ses_ctrl_element elements[]; 941235911Smav}; 942235911Smav 943235911Smavenum ses_ctrl_page_field_data { 944235911Smav SES_CTRL_PAGE_INFO_MASK = 0x08, 945235911Smav SES_CTRL_PAGE_INFO_SHIFT = 3, 946235911Smav 947235911Smav SES_CTRL_PAGE_NON_CRIT_MASK = 0x04, 948235911Smav SES_CTRL_PAGE_NON_CRIT_SHIFT = 2, 949235911Smav 950235911Smav SES_CTRL_PAGE_CRIT_MASK = 0x02, 951235911Smav SES_CTRL_PAGE_CRIT_SHIFT = 1, 952235911Smav 953235911Smav SES_CTRL_PAGE_UNRECOV_MASK = 0x01, 954235911Smav SES_CTRL_PAGE_UNRECOV_SHIFT = 0 955235911Smav}; 956235911Smav 957235911Smav#define GEN_SES_CTRL_PAGE_ACCESSORS(LCASE, UCASE) \ 958235911Smav GEN_HDR_ACCESSORS(ses_ctrl_page, SES_CTRL_PAGE, LCASE, UCASE) 959235911Smav 960235911SmavGEN_SES_CTRL_PAGE_ACCESSORS(info, INFO) 961235911SmavGEN_SES_CTRL_PAGE_ACCESSORS(non_crit, NON_CRIT) 962235911SmavGEN_SES_CTRL_PAGE_ACCESSORS(crit, CRIT) 963235911SmavGEN_SES_CTRL_PAGE_ACCESSORS(unrecov, UNRECOV) 964235911Smav#undef GEN_SES_CTRL_PAGE_ACCESSORS 965235911Smav 966235911Smav/*================= SCSI SES Status Diagnostic Page Structures ===============*/ 967235911Smavstruct ses_status_common { 968235911Smav uint8_t bytes[1]; 969235911Smav}; 970235911Smav 971235911Smavenum ses_status_common_field_data { 972235911Smav SES_STATUS_COMMON_PRDFAIL_BYTE = 0, 973235911Smav SES_STATUS_COMMON_PRDFAIL_MASK = 0x40, 974235911Smav SES_STATUS_COMMON_PRDFAIL_SHIFT = 6, 975235911Smav 976235911Smav SES_STATUS_COMMON_DISABLED_BYTE = 0, 977235911Smav SES_STATUS_COMMON_DISABLED_MASK = 0x20, 978235911Smav SES_STATUS_COMMON_DISABLED_SHIFT = 5, 979235911Smav 980235911Smav SES_STATUS_COMMON_SWAP_BYTE = 0, 981235911Smav SES_STATUS_COMMON_SWAP_MASK = 0x10, 982235911Smav SES_STATUS_COMMON_SWAP_SHIFT = 4, 983235911Smav 984235911Smav SES_STATUS_COMMON_ELEMENT_STATUS_CODE_BYTE = 0, 985235911Smav SES_STATUS_COMMON_ELEMENT_STATUS_CODE_MASK = 0x0F, 986235911Smav SES_STATUS_COMMON_ELEMENT_STATUS_CODE_SHIFT = 0 987235911Smav}; 988235911Smav 989235911Smav#define GEN_SES_STATUS_COMMON_ACCESSORS(LCASE, UCASE) \ 990235911Smav GEN_GETTER(ses_status_common, SES_STATUS_COMMON, LCASE, UCASE) 991235911Smav 992235911SmavGEN_SES_STATUS_COMMON_ACCESSORS(prdfail, PRDFAIL) 993235911SmavGEN_SES_STATUS_COMMON_ACCESSORS(disabled, DISABLED) 994235911SmavGEN_SES_STATUS_COMMON_ACCESSORS(swap, SWAP) 995235911SmavGEN_SES_STATUS_COMMON_ACCESSORS(element_status_code, ELEMENT_STATUS_CODE) 996235911Smav#undef GEN_SES_STATUS_COMMON_ACCESSORS 997235911Smav 998235911Smav/*------------------------- Device Slot Status Element -----------------------*/ 999235911Smavstruct ses_status_dev_slot { 1000235911Smav struct ses_status_common common; 1001235911Smav uint8_t slot_address; 1002235911Smav uint8_t bytes[2]; 1003235911Smav}; 1004235911Smav 1005235911Smavenum ses_status_dev_slot_field_data { 1006235911Smav SES_STATUS_DEV_SLOT_APP_CLIENT_BYPED_A_BYTE = 0, 1007235911Smav SES_STATUS_DEV_SLOT_APP_CLIENT_BYPED_A_MASK = 0x80, 1008235911Smav SES_STATUS_DEV_SLOT_APP_CLIENT_BYPED_A_SHIFT = 7, 1009235911Smav 1010235911Smav SES_STATUS_DEV_SLOT_DO_NOT_REMOVE_BYTE = 0, 1011235911Smav SES_STATUS_DEV_SLOT_DO_NOT_REMOVE_MASK = 0x40, 1012235911Smav SES_STATUS_DEV_SLOT_DO_NOT_REMOVE_SHIFT = 6, 1013235911Smav 1014235911Smav SES_STATUS_DEV_SLOT_ENCLOSURE_BYPED_A_BYTE = 0, 1015235911Smav SES_STATUS_DEV_SLOT_ENCLOSURE_BYPED_A_MASK = 0x20, 1016235911Smav SES_STATUS_DEV_SLOT_ENCLOSURE_BYPED_A_SHIFT = 5, 1017235911Smav 1018235911Smav SES_STATUS_DEV_SLOT_ENCLOSURE_BYPED_B_BYTE = 0, 1019235911Smav SES_STATUS_DEV_SLOT_ENCLOSURE_BYPED_B_MASK = 0x10, 1020235911Smav SES_STATUS_DEV_SLOT_ENCLOSURE_BYPED_B_SHIFT = 4, 1021235911Smav 1022235911Smav SES_STATUS_DEV_SLOT_INSERT_READY_BYTE = 0, 1023235911Smav SES_STATUS_DEV_SLOT_INSERT_READY_MASK = 0x08, 1024235911Smav SES_STATUS_DEV_SLOT_INSERT_READY_SHIFT = 3, 1025235911Smav 1026235911Smav SES_STATUS_DEV_SLOT_REMOVE_BYTE = 0, 1027235911Smav SES_STATUS_DEV_SLOT_REMOVE_MASK = 0x04, 1028235911Smav SES_STATUS_DEV_SLOT_REMOVE_SHIFT = 2, 1029235911Smav 1030235911Smav SES_STATUS_DEV_SLOT_IDENT_BYTE = 0, 1031235911Smav SES_STATUS_DEV_SLOT_IDENT_MASK = 0x02, 1032235911Smav SES_STATUS_DEV_SLOT_IDENT_SHIFT = 1, 1033235911Smav 1034235911Smav SES_STATUS_DEV_SLOT_REPORT_BYTE = 0, 1035235911Smav SES_STATUS_DEV_SLOT_REPORT_MASK = 0x01, 1036235911Smav SES_STATUS_DEV_SLOT_REPORT_SHIFT = 0, 1037235911Smav 1038235911Smav SES_STATUS_DEV_SLOT_APP_CLIENT_BYPED_B_BYTE = 1, 1039235911Smav SES_STATUS_DEV_SLOT_APP_CLIENT_BYPED_B_MASK = 0x80, 1040235911Smav SES_STATUS_DEV_SLOT_APP_CLIENT_BYPED_B_SHIFT = 7, 1041235911Smav 1042235911Smav SES_STATUS_DEV_SLOT_FAULT_SENSED_BYTE = 1, 1043235911Smav SES_STATUS_DEV_SLOT_FAULT_SENSED_MASK = 0x40, 1044235911Smav SES_STATUS_DEV_SLOT_FAULT_SENSED_SHIFT = 6, 1045235911Smav 1046235911Smav SES_STATUS_DEV_SLOT_FAULT_REQUESTED_BYTE = 1, 1047235911Smav SES_STATUS_DEV_SLOT_FAULT_REQUESTED_MASK = 0x20, 1048235911Smav SES_STATUS_DEV_SLOT_FAULT_REQUESTED_SHIFT = 5, 1049235911Smav 1050235911Smav SES_STATUS_DEV_SLOT_DEVICE_OFF_BYTE = 1, 1051235911Smav SES_STATUS_DEV_SLOT_DEVICE_OFF_MASK = 0x10, 1052235911Smav SES_STATUS_DEV_SLOT_DEVICE_OFF_SHIFT = 4, 1053235911Smav 1054235911Smav SES_STATUS_DEV_SLOT_BYPED_A_BYTE = 1, 1055235911Smav SES_STATUS_DEV_SLOT_BYPED_A_MASK = 0x08, 1056235911Smav SES_STATUS_DEV_SLOT_BYPED_A_SHIFT = 3, 1057235911Smav 1058235911Smav SES_STATUS_DEV_SLOT_BYPED_B_BYTE = 1, 1059235911Smav SES_STATUS_DEV_SLOT_BYPED_B_MASK = 0x04, 1060235911Smav SES_STATUS_DEV_SLOT_BYPED_B_SHIFT = 2, 1061235911Smav 1062235911Smav SES_STATUS_DEV_SLOT_DEVICE_BYPED_A_BYTE = 1, 1063235911Smav SES_STATUS_DEV_SLOT_DEVICE_BYPED_A_MASK = 0x02, 1064235911Smav SES_STATUS_DEV_SLOT_DEVICE_BYPED_A_SHIFT = 1, 1065235911Smav 1066235911Smav SES_STATUS_DEV_SLOT_DEVICE_BYPED_B_BYTE = 1, 1067235911Smav SES_STATUS_DEV_SLOT_DEVICE_BYPED_B_MASK = 0x01, 1068235911Smav SES_STATUS_DEV_SLOT_DEVICE_BYPED_B_SHIFT = 0 1069235911Smav}; 1070235911Smav#define GEN_SES_STATUS_DEV_SLOT_ACCESSORS(LCASE, UCASE) \ 1071235911Smav GEN_GETTER(ses_status_dev_slot, SES_STATUS_DEV_SLOT, LCASE, UCASE) 1072235911Smav 1073235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(app_client_byped_a, APP_CLIENT_BYPED_A) 1074235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(do_not_remove, DO_NOT_REMOVE) 1075235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(enclosure_byped_a, ENCLOSURE_BYPED_A) 1076235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(enclosure_byped_b, ENCLOSURE_BYPED_B) 1077235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(insert_ready, INSERT_READY) 1078235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(remove, REMOVE) 1079235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(ident, IDENT) 1080235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(report, REPORT) 1081235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(app_client_byped_b, APP_CLIENT_BYPED_B) 1082235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(fault_sensed, FAULT_SENSED) 1083235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(fault_requested, FAULT_REQUESTED) 1084235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(device_off, DEVICE_OFF) 1085235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(byped_a, BYPED_A) 1086235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(byped_b, BYPED_B) 1087235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(device_byped_a, DEVICE_BYPED_A) 1088235911SmavGEN_SES_STATUS_DEV_SLOT_ACCESSORS(device_byped_b, DEVICE_BYPED_B) 1089235911Smav#undef GEN_SES_STATUS_DEV_SLOT_ACCESSORS 1090235911Smav 1091235911Smav/*---------------------- Array Device Slot Status Element --------------------*/ 1092235911Smavstruct ses_status_array_dev_slot { 1093235911Smav struct ses_status_common common; 1094235911Smav uint8_t bytes[3]; 1095235911Smav}; 1096235911Smav 1097235911Smavenum ses_status_array_dev_slot_field_data { 1098235911Smav SES_STATUS_ARRAY_DEV_SLOT_OK_BYTE = 0, 1099235911Smav SES_STATUS_ARRAY_DEV_SLOT_OK_MASK = 0x80, 1100235911Smav SES_STATUS_ARRAY_DEV_SLOT_OK_SHIFT = 7, 1101235911Smav 1102235911Smav SES_STATUS_ARRAY_DEV_SLOT_RSVD_DEVICE_BYTE = 0, 1103235911Smav SES_STATUS_ARRAY_DEV_SLOT_RSVD_DEVICE_MASK = 0x40, 1104235911Smav SES_STATUS_ARRAY_DEV_SLOT_RSVD_DEVICE_SHIFT = 6, 1105235911Smav 1106235911Smav SES_STATUS_ARRAY_DEV_SLOT_HOT_SPARE_BYTE = 0, 1107235911Smav SES_STATUS_ARRAY_DEV_SLOT_HOT_SPARE_MASK = 0x20, 1108235911Smav SES_STATUS_ARRAY_DEV_SLOT_HOT_SPARE_SHIFT = 5, 1109235911Smav 1110235911Smav SES_STATUS_ARRAY_DEV_SLOT_CONS_CHECK_BYTE = 0, 1111235911Smav SES_STATUS_ARRAY_DEV_SLOT_CONS_CHECK_MASK = 0x10, 1112235911Smav SES_STATUS_ARRAY_DEV_SLOT_CONS_CHECK_SHIFT = 4, 1113235911Smav 1114235911Smav SES_STATUS_ARRAY_DEV_SLOT_IN_CRIT_ARRAY_BYTE = 0, 1115235911Smav SES_STATUS_ARRAY_DEV_SLOT_IN_CRIT_ARRAY_MASK = 0x08, 1116235911Smav SES_STATUS_ARRAY_DEV_SLOT_IN_CRIT_ARRAY_SHIFT = 3, 1117235911Smav 1118235911Smav SES_STATUS_ARRAY_DEV_SLOT_IN_FAILED_ARRAY_BYTE = 0, 1119235911Smav SES_STATUS_ARRAY_DEV_SLOT_IN_FAILED_ARRAY_MASK = 0x04, 1120235911Smav SES_STATUS_ARRAY_DEV_SLOT_IN_FAILED_ARRAY_SHIFT = 2, 1121235911Smav 1122235911Smav SES_STATUS_ARRAY_DEV_SLOT_REBUILD_REMAP_BYTE = 0, 1123235911Smav SES_STATUS_ARRAY_DEV_SLOT_REBUILD_REMAP_MASK = 0x02, 1124235911Smav SES_STATUS_ARRAY_DEV_SLOT_REBUILD_REMAP_SHIFT = 1, 1125235911Smav 1126235911Smav SES_STATUS_ARRAY_DEV_SLOT_REBUILD_REMAP_ABORT_BYTE = 0, 1127235911Smav SES_STATUS_ARRAY_DEV_SLOT_REBUILD_REMAP_ABORT_MASK = 0x01, 1128235911Smav SES_STATUS_ARRAY_DEV_SLOT_REBUILD_REMAP_ABORT_SHIFT = 0 1129235911Smav 1130235911Smav /* 1131235911Smav * The remaining fields are identical to the device 1132235911Smav * slot element type. Access them through the device slot 1133235911Smav * element type and its accessors. 1134235911Smav */ 1135235911Smav}; 1136235911Smav#define GEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(LCASE, UCASE) \ 1137235911Smav GEN_GETTER(ses_status_array_dev_slot, SES_STATUS_ARRAY_DEV_SLOT, \ 1138235911Smav LCASE, UCASE) 1139235911SmavGEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(ok, OK) 1140235911SmavGEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(rsvd_device, RSVD_DEVICE) 1141235911SmavGEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(hot_spare, HOT_SPARE) 1142235911SmavGEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(cons_check, CONS_CHECK) 1143235911SmavGEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(in_crit_array, IN_CRIT_ARRAY) 1144235911SmavGEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(in_failed_array, IN_FAILED_ARRAY) 1145235911SmavGEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(rebuild_remap, REBUILD_REMAP) 1146235911SmavGEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS(rebuild_remap_abort, 1147235911Smav REBUILD_REMAP_ABORT) 1148235911Smav#undef GEN_SES_STATUS_ARRAY_DEV_SLOT_ACCESSORS 1149235911Smav 1150235911Smav/*----------------------- Power Supply Status Element ------------------------*/ 1151235911Smavstruct ses_status_power_supply { 1152235911Smav struct ses_status_common common; 1153235911Smav uint8_t bytes[3]; 1154235911Smav}; 1155235911Smav 1156235911Smavenum ses_status_power_supply_field_data { 1157235911Smav SES_STATUS_POWER_SUPPLY_IDENT_BYTE = 0, 1158235911Smav SES_STATUS_POWER_SUPPLY_IDENT_MASK = 0x80, 1159235911Smav SES_STATUS_POWER_SUPPLY_IDENT_SHIFT = 7, 1160235911Smav 1161235911Smav SES_STATUS_POWER_SUPPLY_DC_OVER_VOLTAGE_BYTE = 1, 1162235911Smav SES_STATUS_POWER_SUPPLY_DC_OVER_VOLTAGE_MASK = 0x08, 1163235911Smav SES_STATUS_POWER_SUPPLY_DC_OVER_VOLTAGE_SHIFT = 3, 1164235911Smav 1165235911Smav SES_STATUS_POWER_SUPPLY_DC_UNDER_VOLTAGE_BYTE = 1, 1166235911Smav SES_STATUS_POWER_SUPPLY_DC_UNDER_VOLTAGE_MASK = 0x04, 1167235911Smav SES_STATUS_POWER_SUPPLY_DC_UNDER_VOLTAGE_SHIFT = 2, 1168235911Smav 1169235911Smav SES_STATUS_POWER_SUPPLY_DC_OVER_CURRENT_BYTE = 1, 1170235911Smav SES_STATUS_POWER_SUPPLY_DC_OVER_CURRENT_MASK = 0x02, 1171235911Smav SES_STATUS_POWER_SUPPLY_DC_OVER_CURRENT_SHIFT = 1, 1172235911Smav 1173235911Smav SES_STATUS_POWER_SUPPLY_HOT_SWAP_BYTE = 2, 1174235911Smav SES_STATUS_POWER_SUPPLY_HOT_SWAP_MASK = 0x80, 1175235911Smav SES_STATUS_POWER_SUPPLY_HOT_SWAP_SHIFT = 7, 1176235911Smav 1177235911Smav SES_STATUS_POWER_SUPPLY_FAIL_BYTE = 2, 1178235911Smav SES_STATUS_POWER_SUPPLY_FAIL_MASK = 0x40, 1179235911Smav SES_STATUS_POWER_SUPPLY_FAIL_SHIFT = 6, 1180235911Smav 1181235911Smav SES_STATUS_POWER_SUPPLY_REQUESTED_ON_BYTE = 2, 1182235911Smav SES_STATUS_POWER_SUPPLY_REQUESTED_ON_MASK = 0x20, 1183235911Smav SES_STATUS_POWER_SUPPLY_REQUESTED_ON_SHIFT = 5, 1184235911Smav 1185235911Smav SES_STATUS_POWER_SUPPLY_OFF_BYTE = 2, 1186235911Smav SES_STATUS_POWER_SUPPLY_OFF_MASK = 0x10, 1187235911Smav SES_STATUS_POWER_SUPPLY_OFF_SHIFT = 4, 1188235911Smav 1189235911Smav SES_STATUS_POWER_SUPPLY_OVERTMP_FAIL_BYTE = 2, 1190235911Smav SES_STATUS_POWER_SUPPLY_OVERTMP_FAIL_MASK = 0x08, 1191235911Smav SES_STATUS_POWER_SUPPLY_OVERTMP_FAIL_SHIFT = 3, 1192235911Smav 1193235911Smav SES_STATUS_POWER_SUPPLY_TEMP_WARN_BYTE = 2, 1194235911Smav SES_STATUS_POWER_SUPPLY_TEMP_WARN_MASK = 0x04, 1195235911Smav SES_STATUS_POWER_SUPPLY_TEMP_WARN_SHIFT = 2, 1196235911Smav 1197235911Smav SES_STATUS_POWER_SUPPLY_AC_FAIL_BYTE = 2, 1198235911Smav SES_STATUS_POWER_SUPPLY_AC_FAIL_MASK = 0x02, 1199235911Smav SES_STATUS_POWER_SUPPLY_AC_FAIL_SHIFT = 1, 1200235911Smav 1201235911Smav SES_STATUS_POWER_SUPPLY_DC_FAIL_BYTE = 2, 1202235911Smav SES_STATUS_POWER_SUPPLY_DC_FAIL_MASK = 0x01, 1203235911Smav SES_STATUS_POWER_SUPPLY_DC_FAIL_SHIFT = 0 1204235911Smav}; 1205235911Smav 1206235911Smav#define GEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(LCASE, UCASE) \ 1207235911Smav GEN_GETTER(ses_status_power_supply, SES_STATUS_POWER_SUPPLY, LCASE, UCASE) 1208235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(ident, IDENT) 1209235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(dc_over_voltage, DC_OVER_VOLTAGE) 1210235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(dc_under_voltage, DC_UNDER_VOLTAGE) 1211235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(dc_over_current, DC_OVER_CURRENT) 1212235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(hot_swap, HOT_SWAP) 1213235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(fail, FAIL) 1214235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(requested_on, REQUESTED_ON) 1215235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(off, OFF) 1216235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(overtmp_fail, OVERTMP_FAIL) 1217235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(temp_warn, TEMP_WARN) 1218235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(ac_fail, AC_FAIL) 1219235911SmavGEN_SES_STATUS_POWER_SUPPLY_ACCESSORS(dc_fail, DC_FAIL) 1220235911Smav#undef GEN_SES_STATUS_POWER_SUPPLY_ACCESSORS 1221235911Smav 1222235911Smav/*-------------------------- Cooling Status Element --------------------------*/ 1223235911Smavstruct ses_status_cooling { 1224235911Smav struct ses_status_common common; 1225235911Smav uint8_t bytes[3]; 1226235911Smav}; 1227235911Smav 1228235911Smavenum ses_status_cooling_field_data { 1229235911Smav SES_STATUS_COOLING_IDENT_BYTE = 0, 1230235911Smav SES_STATUS_COOLING_IDENT_MASK = 0x80, 1231235911Smav SES_STATUS_COOLING_IDENT_SHIFT = 7, 1232235911Smav 1233235911Smav SES_STATUS_COOLING_ACTUAL_FAN_SPEED_MSB_BYTE = 0, 1234235911Smav SES_STATUS_COOLING_ACTUAL_FAN_SPEED_MSB_MASK = 0x07, 1235235911Smav SES_STATUS_COOLING_ACTUAL_FAN_SPEED_MSB_SHIFT = 0, 1236235911Smav 1237235911Smav SES_STATUS_COOLING_ACTUAL_FAN_SPEED_LSB_BYTE = 1, 1238235911Smav SES_STATUS_COOLING_ACTUAL_FAN_SPEED_LSB_MASK = 0xFF, 1239235911Smav SES_STATUS_COOLING_ACTUAL_FAN_SPEED_LSB_SHIFT = 0, 1240235911Smav 1241235911Smav SES_STATUS_COOLING_HOT_SWAP_BYTE = 2, 1242235911Smav SES_STATUS_COOLING_HOT_SWAP_MASK = 0x40, 1243235911Smav SES_STATUS_COOLING_HOT_SWAP_SHIFT = 6, 1244235911Smav 1245235911Smav SES_STATUS_COOLING_FAIL_BYTE = 2, 1246235911Smav SES_STATUS_COOLING_FAIL_MASK = 0x40, 1247235911Smav SES_STATUS_COOLING_FAIL_SHIFT = 6, 1248235911Smav 1249235911Smav SES_STATUS_COOLING_REQUESTED_ON_BYTE = 2, 1250235911Smav SES_STATUS_COOLING_REQUESTED_ON_MASK = 0x20, 1251235911Smav SES_STATUS_COOLING_REQUESTED_ON_SHIFT = 5, 1252235911Smav 1253235911Smav SES_STATUS_COOLING_OFF_BYTE = 2, 1254235911Smav SES_STATUS_COOLING_OFF_MASK = 0x20, 1255235911Smav SES_STATUS_COOLING_OFF_SHIFT = 5, 1256235911Smav 1257235911Smav SES_STATUS_COOLING_ACTUAL_SPEED_CODE_BYTE = 2, 1258235911Smav SES_STATUS_COOLING_ACTUAL_SPEED_CODE_MASK = 0x07, 1259235911Smav SES_STATUS_COOLING_ACTUAL_SPEED_CODE_SHIFT = 2, 1260235911Smav SES_STATUS_COOLING_ACTUAL_SPEED_CODE_STOPPED = 0x00, 1261235911Smav SES_STATUS_COOLING_ACTUAL_SPEED_CODE_LOWEST = 0x01, 1262235911Smav SES_STATUS_COOLING_ACTUAL_SPEED_CODE_HIGHEST = 0x07 1263235911Smav}; 1264235911Smav 1265235911Smav#define GEN_SES_STATUS_COOLING_ACCESSORS(LCASE, UCASE) \ 1266235911Smav GEN_GETTER(ses_status_cooling, SES_STATUS_COOLING, LCASE, UCASE) 1267235911SmavGEN_SES_STATUS_COOLING_ACCESSORS(ident, IDENT) 1268235911SmavGEN_SES_STATUS_COOLING_ACCESSORS(actual_fan_speed_msb, ACTUAL_FAN_SPEED_MSB) 1269235911SmavGEN_SES_STATUS_COOLING_ACCESSORS(actual_fan_speed_lsb, ACTUAL_FAN_SPEED_LSB) 1270235911SmavGEN_SES_STATUS_COOLING_ACCESSORS(hot_swap, HOT_SWAP) 1271235911SmavGEN_SES_STATUS_COOLING_ACCESSORS(fail, FAIL) 1272235911SmavGEN_SES_STATUS_COOLING_ACCESSORS(requested_on, REQUESTED_ON) 1273235911SmavGEN_SES_STATUS_COOLING_ACCESSORS(off, OFF) 1274235911SmavGEN_SES_STATUS_COOLING_ACCESSORS(actual_speed_code, ACTUAL_SPEED_CODE) 1275235911Smav#undef GEN_SES_STATUS_COOLING_ACCESSORS 1276235911Smav 1277235911Smavstatic inline int 1278235911Smavses_status_cooling_get_actual_fan_speed(struct ses_status_cooling *elem) 1279235911Smav{ 1280235911Smav return (ses_status_cooling_get_actual_fan_speed_msb(elem) << 8 1281235911Smav | ses_status_cooling_get_actual_fan_speed_lsb(elem)); 1282235911Smav} 1283235911Smav 1284235911Smav/*-------------------- Temperature Sensor Status Element ---------------------*/ 1285235911Smavstruct ses_status_temp_sensor { 1286235911Smav struct ses_status_common common; 1287235911Smav uint8_t bytes[3]; 1288235911Smav}; 1289235911Smav 1290235911Smavenum ses_status_temp_sensor_field_data { 1291235911Smav SES_STATUS_TEMP_SENSOR_IDENT_BYTE = 0, 1292235911Smav SES_STATUS_TEMP_SENSOR_IDENT_MASK = 0x80, 1293235911Smav SES_STATUS_TEMP_SENSOR_IDENT_SHIFT = 7, 1294235911Smav 1295235911Smav SES_STATUS_TEMP_SENSOR_FAIL_BYTE = 0, 1296235911Smav SES_STATUS_TEMP_SENSOR_FAIL_MASK = 0x40, 1297235911Smav SES_STATUS_TEMP_SENSOR_FAIL_SHIFT = 6, 1298235911Smav 1299235911Smav SES_STATUS_TEMP_SENSOR_TEMPERATURE_BYTE = 1, 1300235911Smav SES_STATUS_TEMP_SENSOR_TEMPERATURE_MASK = 0xFF, 1301235911Smav SES_STATUS_TEMP_SENSOR_TEMPERATURE_SHIFT = 0, 1302235911Smav 1303235911Smav SES_STATUS_TEMP_SENSOR_OT_FAILURE_BYTE = 2, 1304235911Smav SES_STATUS_TEMP_SENSOR_OT_FAILURE_MASK = 0x08, 1305235911Smav SES_STATUS_TEMP_SENSOR_OT_FAILURE_SHIFT = 3, 1306235911Smav 1307235911Smav SES_STATUS_TEMP_SENSOR_OT_WARNING_BYTE = 2, 1308235911Smav SES_STATUS_TEMP_SENSOR_OT_WARNING_MASK = 0x04, 1309235911Smav SES_STATUS_TEMP_SENSOR_OT_WARNING_SHIFT = 2, 1310235911Smav 1311235911Smav SES_STATUS_TEMP_SENSOR_UT_FAILURE_BYTE = 2, 1312235911Smav SES_STATUS_TEMP_SENSOR_UT_FAILURE_MASK = 0x02, 1313235911Smav SES_STATUS_TEMP_SENSOR_UT_FAILURE_SHIFT = 1, 1314235911Smav 1315235911Smav SES_STATUS_TEMP_SENSOR_UT_WARNING_BYTE = 2, 1316235911Smav SES_STATUS_TEMP_SENSOR_UT_WARNING_MASK = 0x01, 1317235911Smav SES_STATUS_TEMP_SENSOR_UT_WARNING_SHIFT = 0 1318235911Smav}; 1319235911Smav 1320235911Smav#define GEN_SES_STATUS_TEMP_SENSOR_ACCESSORS(LCASE, UCASE) \ 1321235911Smav GEN_GETTER(ses_status_temp_sensor, SES_STATUS_TEMP_SENSOR, LCASE, UCASE) 1322235911SmavGEN_SES_STATUS_TEMP_SENSOR_ACCESSORS(ident, IDENT) 1323235911SmavGEN_SES_STATUS_TEMP_SENSOR_ACCESSORS(fail, FAIL) 1324235911SmavGEN_SES_STATUS_TEMP_SENSOR_ACCESSORS(temperature, TEMPERATURE) 1325235911SmavGEN_SES_STATUS_TEMP_SENSOR_ACCESSORS(ot_failure, OT_FAILURE) 1326235911SmavGEN_SES_STATUS_TEMP_SENSOR_ACCESSORS(ot_warning, OT_WARNING) 1327235911SmavGEN_SES_STATUS_TEMP_SENSOR_ACCESSORS(ut_failure, UT_FAILURE) 1328235911SmavGEN_SES_STATUS_TEMP_SENSOR_ACCESSORS(ut_warning, UT_WARNING) 1329235911Smav#undef GEN_SES_STATUS_TEMP_SENSOR_ACCESSORS 1330235911Smav 1331235911Smav/*------------------------- Door Lock Status Element -------------------------*/ 1332235911Smavstruct ses_status_door_lock { 1333235911Smav struct ses_status_common common; 1334235911Smav uint8_t bytes[3]; 1335235911Smav}; 1336235911Smav 1337235911Smavenum ses_status_door_lock_field_data { 1338235911Smav SES_STATUS_DOOR_LOCK_IDENT_BYTE = 0, 1339235911Smav SES_STATUS_DOOR_LOCK_IDENT_MASK = 0x80, 1340235911Smav SES_STATUS_DOOR_LOCK_IDENT_SHIFT = 7, 1341235911Smav 1342235911Smav SES_STATUS_DOOR_LOCK_FAIL_BYTE = 0, 1343235911Smav SES_STATUS_DOOR_LOCK_FAIL_MASK = 0x40, 1344235911Smav SES_STATUS_DOOR_LOCK_FAIL_SHIFT = 6, 1345235911Smav 1346235911Smav SES_STATUS_DOOR_LOCK_UNLOCKED_BYTE = 2, 1347235911Smav SES_STATUS_DOOR_LOCK_UNLOCKED_MASK = 0x01, 1348235911Smav SES_STATUS_DOOR_LOCK_UNLOCKED_SHIFT = 0 1349235911Smav}; 1350235911Smav 1351235911Smav#define GEN_SES_STATUS_DOOR_LOCK_ACCESSORS(LCASE, UCASE) \ 1352235911Smav GEN_GETTER(ses_status_door_lock, SES_STATUS_DOOR_LOCK, LCASE, UCASE) 1353235911SmavGEN_SES_STATUS_DOOR_LOCK_ACCESSORS(ident, IDENT) 1354235911SmavGEN_SES_STATUS_DOOR_LOCK_ACCESSORS(fail, FAIL) 1355235911SmavGEN_SES_STATUS_DOOR_LOCK_ACCESSORS(unlocked, UNLOCKED) 1356235911Smav#undef GEN_SES_STATUS_DOOR_LOCK_ACCESSORS 1357235911Smav 1358235911Smav/*----------------------- Audible Alarm Status Element -----------------------*/ 1359235911Smavstruct ses_status_audible_alarm { 1360235911Smav struct ses_status_common common; 1361235911Smav uint8_t bytes[3]; 1362235911Smav}; 1363235911Smav 1364235911Smavenum ses_status_audible_alarm_field_data { 1365235911Smav SES_STATUS_AUDIBLE_ALARM_IDENT_BYTE = 0, 1366235911Smav SES_STATUS_AUDIBLE_ALARM_IDENT_MASK = 0x80, 1367235911Smav SES_STATUS_AUDIBLE_ALARM_IDENT_SHIFT = 7, 1368235911Smav 1369235911Smav SES_STATUS_AUDIBLE_ALARM_FAIL_BYTE = 0, 1370235911Smav SES_STATUS_AUDIBLE_ALARM_FAIL_MASK = 0x40, 1371235911Smav SES_STATUS_AUDIBLE_ALARM_FAIL_SHIFT = 6, 1372235911Smav 1373235911Smav SES_STATUS_AUDIBLE_ALARM_RQST_MUTE_BYTE = 2, 1374235911Smav SES_STATUS_AUDIBLE_ALARM_RQST_MUTE_MASK = 0x80, 1375235911Smav SES_STATUS_AUDIBLE_ALARM_RQST_MUTE_SHIFT = 7, 1376235911Smav 1377235911Smav SES_STATUS_AUDIBLE_ALARM_MUTED_BYTE = 2, 1378235911Smav SES_STATUS_AUDIBLE_ALARM_MUTED_MASK = 0x40, 1379235911Smav SES_STATUS_AUDIBLE_ALARM_MUTED_SHIFT = 6, 1380235911Smav 1381235911Smav SES_STATUS_AUDIBLE_ALARM_REMIND_BYTE = 2, 1382235911Smav SES_STATUS_AUDIBLE_ALARM_REMIND_MASK = 0x10, 1383235911Smav SES_STATUS_AUDIBLE_ALARM_REMIND_SHIFT = 4, 1384235911Smav 1385235911Smav SES_STATUS_AUDIBLE_ALARM_TONE_INDICATOR_BYTE = 2, 1386235911Smav SES_STATUS_AUDIBLE_ALARM_TONE_INDICATOR_MASK = 0x0F, 1387235911Smav SES_STATUS_AUDIBLE_ALARM_TONE_INDICATOR_SHIFT = 0, 1388235911Smav SES_STATUS_AUDIBLE_ALARM_TONE_INDICATOR_INFO = 0x08, 1389235911Smav SES_STATUS_AUDIBLE_ALARM_TONE_INDICATOR_NON_CRIT = 0x04, 1390235911Smav SES_STATUS_AUDIBLE_ALARM_TONE_INDICATOR_CRIT = 0x02, 1391235911Smav SES_STATUS_AUDIBLE_ALARM_TONE_INDICATOR_UNRECOV = 0x01 1392235911Smav}; 1393235911Smav 1394235911Smav#define GEN_SES_STATUS_AUDIBLE_ALARM_ACCESSORS(LCASE, UCASE) \ 1395235911Smav GEN_GETTER(ses_status_audible_alarm, SES_STATUS_AUDIBLE_ALARM, LCASE, UCASE) 1396235911SmavGEN_SES_STATUS_AUDIBLE_ALARM_ACCESSORS(ident, IDENT) 1397235911SmavGEN_SES_STATUS_AUDIBLE_ALARM_ACCESSORS(fail, FAIL) 1398235911SmavGEN_SES_STATUS_AUDIBLE_ALARM_ACCESSORS(rqst_mute, RQST_MUTE) 1399235911SmavGEN_SES_STATUS_AUDIBLE_ALARM_ACCESSORS(muted, MUTED) 1400235911SmavGEN_SES_STATUS_AUDIBLE_ALARM_ACCESSORS(remind, REMIND) 1401235911SmavGEN_SES_STATUS_AUDIBLE_ALARM_ACCESSORS(tone_indicator, TONE_INDICATOR) 1402235911Smav#undef GEN_SES_STATUS_AUDIBLE_ALARM_ACCESSORS 1403235911Smav 1404235911Smav/*---------- Enclosure Services Statusler Electronics Status Element ---------*/ 1405235911Smavstruct ses_status_ecc_electronics { 1406235911Smav struct ses_status_common common; 1407235911Smav uint8_t bytes[3]; 1408235911Smav}; 1409235911Smav 1410235911Smavenum ses_status_ecc_electronics_field_data { 1411235911Smav SES_STATUS_ECC_ELECTRONICS_IDENT_BYTE = 0, 1412235911Smav SES_STATUS_ECC_ELECTRONICS_IDENT_MASK = 0x80, 1413235911Smav SES_STATUS_ECC_ELECTRONICS_IDENT_SHIFT = 7, 1414235911Smav 1415235911Smav SES_STATUS_ECC_ELECTRONICS_FAIL_BYTE = 0, 1416235911Smav SES_STATUS_ECC_ELECTRONICS_FAIL_MASK = 0x40, 1417235911Smav SES_STATUS_ECC_ELECTRONICS_FAIL_SHIFT = 6, 1418235911Smav 1419235911Smav SES_STATUS_ECC_ELECTRONICS_REPORT_BYTE = 1, 1420235911Smav SES_STATUS_ECC_ELECTRONICS_REPORT_MASK = 0x01, 1421235911Smav SES_STATUS_ECC_ELECTRONICS_REPORT_SHIFT = 0, 1422235911Smav 1423235911Smav SES_STATUS_ECC_ELECTRONICS_HOT_SWAP_BYTE = 2, 1424235911Smav SES_STATUS_ECC_ELECTRONICS_HOT_SWAP_MASK = 0x80, 1425235911Smav SES_STATUS_ECC_ELECTRONICS_HOT_SWAP_SHIFT = 7 1426235911Smav}; 1427235911Smav 1428235911Smav#define GEN_SES_STATUS_ECC_ELECTRONICS_ACCESSORS(LCASE, UCASE) \ 1429235911Smav GEN_GETTER(ses_status_ecc_electronics, SES_STATUS_ECC_ELECTRONICS, \ 1430235911Smav LCASE, UCASE) 1431235911SmavGEN_SES_STATUS_ECC_ELECTRONICS_ACCESSORS(ident, IDENT) 1432235911SmavGEN_SES_STATUS_ECC_ELECTRONICS_ACCESSORS(fail, FAIL) 1433235911SmavGEN_SES_STATUS_ECC_ELECTRONICS_ACCESSORS(report, REPORT) 1434235911SmavGEN_SES_STATUS_ECC_ELECTRONICS_ACCESSORS(hot_swap, HOT_SWAP) 1435235911Smav#undef GEN_SES_STATUS_ECC_ELECTRONICS_ACCESSORS 1436235911Smav 1437235911Smav/*------------ SCSI Services Statusler Electronics Status Element ------------*/ 1438235911Smavstruct ses_status_scc_electronics { 1439235911Smav struct ses_status_common common; 1440235911Smav uint8_t bytes[3]; 1441235911Smav}; 1442235911Smav 1443235911Smavenum ses_status_scc_electronics_field_data { 1444235911Smav SES_STATUS_SCC_ELECTRONICS_IDENT_BYTE = 0, 1445235911Smav SES_STATUS_SCC_ELECTRONICS_IDENT_MASK = 0x80, 1446235911Smav SES_STATUS_SCC_ELECTRONICS_IDENT_SHIFT = 7, 1447235911Smav 1448235911Smav SES_STATUS_SCC_ELECTRONICS_FAIL_BYTE = 0, 1449235911Smav SES_STATUS_SCC_ELECTRONICS_FAIL_MASK = 0x40, 1450235911Smav SES_STATUS_SCC_ELECTRONICS_FAIL_SHIFT = 6, 1451235911Smav 1452235911Smav SES_STATUS_SCC_ELECTRONICS_REPORT_BYTE = 1, 1453235911Smav SES_STATUS_SCC_ELECTRONICS_REPORT_MASK = 0x01, 1454235911Smav SES_STATUS_SCC_ELECTRONICS_REPORT_SHIFT = 0 1455235911Smav}; 1456235911Smav 1457235911Smav#define GEN_SES_STATUS_SCC_ELECTRONICS_ACCESSORS(LCASE, UCASE) \ 1458235911Smav GEN_GETTER(ses_status_scc_electronics, SES_STATUS_SCC_ELECTRONICS, \ 1459235911Smav LCASE, UCASE) 1460235911SmavGEN_SES_STATUS_SCC_ELECTRONICS_ACCESSORS(ident, IDENT) 1461235911SmavGEN_SES_STATUS_SCC_ELECTRONICS_ACCESSORS(fail, FAIL) 1462235911SmavGEN_SES_STATUS_SCC_ELECTRONICS_ACCESSORS(report, REPORT) 1463235911Smav#undef GEN_SES_STATUS_SCC_ELECTRONICS_ACCESSORS 1464235911Smav 1465235911Smav/*--------------------- Nonvolatile Cache Status Element ---------------------*/ 1466235911Smavstruct ses_status_nv_cache { 1467235911Smav struct ses_status_common common; 1468235911Smav uint8_t bytes[1]; 1469235911Smav uint8_t cache_size[2]; 1470235911Smav}; 1471235911Smav 1472235911Smavenum ses_status_nv_cache_field_data { 1473235911Smav SES_STATUS_NV_CACHE_IDENT_BYTE = 0, 1474235911Smav SES_STATUS_NV_CACHE_IDENT_MASK = 0x80, 1475235911Smav SES_STATUS_NV_CACHE_IDENT_SHIFT = 7, 1476235911Smav 1477235911Smav SES_STATUS_NV_CACHE_FAIL_BYTE = 0, 1478235911Smav SES_STATUS_NV_CACHE_FAIL_MASK = 0x40, 1479235911Smav SES_STATUS_NV_CACHE_FAIL_SHIFT = 6, 1480235911Smav 1481235911Smav SES_STATUS_NV_CACHE_SIZE_MULTIPLIER_BYTE = 0, 1482235911Smav SES_STATUS_NV_CACHE_SIZE_MULTIPLIER_MASK = 0x03, 1483235911Smav SES_STATUS_NV_CACHE_SIZE_MULTIPLIER_SHIFT = 0, 1484235911Smav SES_STATUS_NV_CACHE_SIZE_MULTIPLIER_BYTES = 0x0, 1485235911Smav SES_STATUS_NV_CACHE_SIZE_MULTIPLIER_KBYTES = 0x1, 1486235911Smav SES_STATUS_NV_CACHE_SIZE_MULTIPLIER_MBYTES = 0x2, 1487235911Smav SES_STATUS_NV_CACHE_SIZE_MULTIPLIER_GBYTES = 0x3 1488235911Smav}; 1489235911Smav 1490235911Smav#define GEN_SES_STATUS_NV_CACHE_ACCESSORS(LCASE, UCASE) \ 1491235911Smav GEN_GETTER(ses_status_nv_cache, SES_STATUS_NV_CACHE, LCASE, UCASE) 1492235911SmavGEN_SES_STATUS_NV_CACHE_ACCESSORS(ident, IDENT) 1493235911SmavGEN_SES_STATUS_NV_CACHE_ACCESSORS(fail, FAIL) 1494235911SmavGEN_SES_STATUS_NV_CACHE_ACCESSORS(size_multiplier, SIZE_MULTIPLIER) 1495235911Smav#undef GEN_SES_STATUS_NV_CACHE_ACCESSORS 1496235911Smav 1497235911Smavstatic inline uintmax_t 1498235911Smavses_status_nv_cache_get_cache_size(struct ses_status_nv_cache *elem) 1499235911Smav{ 1500235911Smav uintmax_t cache_size; 1501235911Smav int multiplier; 1502235911Smav 1503235911Smav /* Multiplier is in units of 2^10 */ 1504235911Smav cache_size = scsi_2btoul(elem->cache_size); 1505235911Smav multiplier = 10 * ses_status_nv_cache_get_size_multiplier(elem); 1506235911Smav return (cache_size << multiplier); 1507235911Smav} 1508235911Smav 1509235911Smav/*----------------- Invalid Operation Reason Status Element ------------------*/ 1510235911Smavstruct ses_status_invalid_op_reason { 1511235911Smav struct ses_status_common common; 1512235911Smav uint8_t bytes[3]; 1513235911Smav}; 1514235911Smav 1515235911Smavenum ses_status_invalid_op_field_data { 1516235911Smav SES_STATUS_INVALID_OP_REASON_TYPE_BYTE = 0, 1517235911Smav SES_STATUS_INVALID_OP_REASON_TYPE_MASK = 0xC0, 1518235911Smav SES_STATUS_INVALID_OP_REASON_TYPE_SHIFT = 6, 1519235911Smav SES_STATUS_INVALID_OP_REASON_TYPE_PC_ERROR = 0x00, 1520235911Smav SES_STATUS_INVALID_OP_REASON_TYPE_PF_ERROR = 0x01, 1521235911Smav SES_STATUS_INVALID_OP_REASON_TYPE_VS_ERROR = 0x03, 1522235911Smav 1523235911Smav SES_STATUS_INVALID_OP_REASON_PC_ERROR_PC_NOT_SUPPORTED_BYTE = 0, 1524235911Smav SES_STATUS_INVALID_OP_REASON_PC_ERROR_PC_NOT_SUPPORTED_MASK = 0x01, 1525235911Smav SES_STATUS_INVALID_OP_REASON_PC_ERROR_PC_NOT_SUPPORTED_SHIFT = 0, 1526235911Smav 1527235911Smav SES_STATUS_INVALID_OP_REASON_PF_ERROR_BIT_NUMBER_BYTE = 0, 1528235911Smav SES_STATUS_INVALID_OP_REASON_PF_ERROR_BIT_NUMBER_MASK = 0x03, 1529235911Smav SES_STATUS_INVALID_OP_REASON_PF_ERROR_BIT_NUMBER_SHIFT = 0 1530235911Smav}; 1531235911Smav 1532235911Smav#define GEN_SES_STATUS_INVALID_OP_REASON_ACCESSORS(LCASE, UCASE) \ 1533235911Smav GEN_GETTER(ses_status_invalid_op_reason, SES_STATUS_INVALID_OP_REASON, \ 1534235911Smav LCASE, UCASE) 1535235911SmavGEN_SES_STATUS_INVALID_OP_REASON_ACCESSORS(type, TYPE) 1536235911SmavGEN_SES_STATUS_INVALID_OP_REASON_ACCESSORS(pc_error_pc_not_supported, 1537235911Smav PC_ERROR_PC_NOT_SUPPORTED) 1538235911SmavGEN_SES_STATUS_INVALID_OP_REASON_ACCESSORS(pf_error_bit_number, 1539235911Smav PF_ERROR_BIT_NUMBER) 1540235911Smav#undef GEN_SES_STATUS_INVALID_OP_ACCESSORS 1541235911Smav 1542235911Smav/*--------------- Uninterruptible Power Supply Status Element ----------------*/ 1543235911Smavstruct ses_status_ups { 1544235911Smav struct ses_status_common common; 1545235911Smav /* Minutes of remaining capacity. */ 1546235911Smav uint8_t battery_status; 1547235911Smav uint8_t bytes[2]; 1548235911Smav}; 1549235911Smav 1550235911Smavenum ses_status_ups_field_data { 1551235911Smav SES_STATUS_UPS_AC_LO_BYTE = 0, 1552235911Smav SES_STATUS_UPS_AC_LO_MASK = 0x80, 1553235911Smav SES_STATUS_UPS_AC_LO_SHIFT = 7, 1554235911Smav 1555235911Smav SES_STATUS_UPS_AC_HI_BYTE = 0, 1556235911Smav SES_STATUS_UPS_AC_HI_MASK = 0x40, 1557235911Smav SES_STATUS_UPS_AC_HI_SHIFT = 6, 1558235911Smav 1559235911Smav SES_STATUS_UPS_AC_QUAL_BYTE = 0, 1560235911Smav SES_STATUS_UPS_AC_QUAL_MASK = 0x20, 1561235911Smav SES_STATUS_UPS_AC_QUAL_SHIFT = 5, 1562235911Smav 1563235911Smav SES_STATUS_UPS_AC_FAIL_BYTE = 0, 1564235911Smav SES_STATUS_UPS_AC_FAIL_MASK = 0x10, 1565235911Smav SES_STATUS_UPS_AC_FAIL_SHIFT = 4, 1566235911Smav 1567235911Smav SES_STATUS_UPS_DC_FAIL_BYTE = 0, 1568235911Smav SES_STATUS_UPS_DC_FAIL_MASK = 0x08, 1569235911Smav SES_STATUS_UPS_DC_FAIL_SHIFT = 3, 1570235911Smav 1571235911Smav SES_STATUS_UPS_UPS_FAIL_BYTE = 0, 1572235911Smav SES_STATUS_UPS_UPS_FAIL_MASK = 0x04, 1573235911Smav SES_STATUS_UPS_UPS_FAIL_SHIFT = 2, 1574235911Smav 1575235911Smav SES_STATUS_UPS_WARN_BYTE = 0, 1576235911Smav SES_STATUS_UPS_WARN_MASK = 0x02, 1577235911Smav SES_STATUS_UPS_WARN_SHIFT = 1, 1578235911Smav 1579235911Smav SES_STATUS_UPS_INTF_FAIL_BYTE = 0, 1580235911Smav SES_STATUS_UPS_INTF_FAIL_MASK = 0x01, 1581235911Smav SES_STATUS_UPS_INTF_FAIL_SHIFT = 0, 1582235911Smav 1583235911Smav SES_STATUS_UPS_IDENT_BYTE = 0, 1584235911Smav SES_STATUS_UPS_IDENT_MASK = 0x80, 1585235911Smav SES_STATUS_UPS_IDENT_SHIFT = 7, 1586235911Smav 1587235911Smav SES_STATUS_UPS_FAIL_BYTE = 1, 1588235911Smav SES_STATUS_UPS_FAIL_MASK = 0x40, 1589235911Smav SES_STATUS_UPS_FAIL_SHIFT = 6, 1590235911Smav 1591235911Smav SES_STATUS_UPS_BATT_FAIL_BYTE = 1, 1592235911Smav SES_STATUS_UPS_BATT_FAIL_MASK = 0x02, 1593235911Smav SES_STATUS_UPS_BATT_FAIL_SHIFT = 1, 1594235911Smav 1595235911Smav SES_STATUS_UPS_BPF_BYTE = 1, 1596235911Smav SES_STATUS_UPS_BPF_MASK = 0x01, 1597235911Smav SES_STATUS_UPS_BPF_SHIFT = 0 1598235911Smav}; 1599235911Smav 1600235911Smav#define GEN_SES_STATUS_UPS_ACCESSORS(LCASE, UCASE) \ 1601235911Smav GEN_GETTER(ses_status_ups, SES_STATUS_UPS, LCASE, UCASE) 1602235911SmavGEN_SES_STATUS_UPS_ACCESSORS(ac_lo, AC_LO) 1603235911SmavGEN_SES_STATUS_UPS_ACCESSORS(ac_hi, AC_HI) 1604235911SmavGEN_SES_STATUS_UPS_ACCESSORS(ac_qual, AC_QUAL) 1605235911SmavGEN_SES_STATUS_UPS_ACCESSORS(ac_fail, AC_FAIL) 1606235911SmavGEN_SES_STATUS_UPS_ACCESSORS(dc_fail, DC_FAIL) 1607235911SmavGEN_SES_STATUS_UPS_ACCESSORS(ups_fail, UPS_FAIL) 1608235911SmavGEN_SES_STATUS_UPS_ACCESSORS(warn, WARN) 1609235911SmavGEN_SES_STATUS_UPS_ACCESSORS(intf_fail, INTF_FAIL) 1610235911SmavGEN_SES_STATUS_UPS_ACCESSORS(ident, IDENT) 1611235911SmavGEN_SES_STATUS_UPS_ACCESSORS(fail, FAIL) 1612235911SmavGEN_SES_STATUS_UPS_ACCESSORS(batt_fail, BATT_FAIL) 1613235911SmavGEN_SES_STATUS_UPS_ACCESSORS(bpf, BPF) 1614235911Smav#undef GEN_SES_STATUS_UPS_ACCESSORS 1615235911Smav 1616235911Smav/*-------------------------- Display Status Element --------------------------*/ 1617235911Smavstruct ses_status_display { 1618235911Smav struct ses_status_common common; 1619235911Smav uint8_t bytes[1]; 1620235911Smav uint8_t display_character[2]; 1621235911Smav}; 1622235911Smav 1623235911Smavenum ses_status_display_field_data { 1624235911Smav SES_STATUS_DISPLAY_IDENT_BYTE = 0, 1625235911Smav SES_STATUS_DISPLAY_IDENT_MASK = 0x80, 1626235911Smav SES_STATUS_DISPLAY_IDENT_SHIFT = 7, 1627235911Smav 1628235911Smav SES_STATUS_DISPLAY_FAIL_BYTE = 0, 1629235911Smav SES_STATUS_DISPLAY_FAIL_MASK = 0x40, 1630235911Smav SES_STATUS_DISPLAY_FAIL_SHIFT = 6, 1631235911Smav 1632235911Smav SES_STATUS_DISPLAY_DISPLAY_MODE_BYTE = 0, 1633235911Smav SES_STATUS_DISPLAY_DISPLAY_MODE_MASK = 0x03, 1634235911Smav SES_STATUS_DISPLAY_DISPLAY_MODE_SHIFT = 6, 1635235911Smav SES_STATUS_DISPLAY_DISPLAY_MODE_DC_FIELD_UNSUPP = 0x0, 1636235911Smav SES_STATUS_DISPLAY_DISPLAY_MODE_DC_FIELD_SUPP = 0x1, 1637235911Smav SES_STATUS_DISPLAY_DISPLAY_MODE_DC_FIELD = 0x2 1638235911Smav}; 1639235911Smav 1640235911Smav#define GEN_SES_STATUS_DISPLAY_ACCESSORS(LCASE, UCASE) \ 1641235911Smav GEN_GETTER(ses_status_display, SES_STATUS_DISPLAY, LCASE, UCASE) 1642235911SmavGEN_SES_STATUS_DISPLAY_ACCESSORS(ident, IDENT) 1643235911SmavGEN_SES_STATUS_DISPLAY_ACCESSORS(fail, FAIL) 1644235911SmavGEN_SES_STATUS_DISPLAY_ACCESSORS(display_mode, DISPLAY_MODE) 1645235911Smav#undef GEN_SES_STATUS_DISPLAY_ACCESSORS 1646235911Smav 1647235911Smav/*----------------------- Key Pad Entry Status Element -----------------------*/ 1648235911Smavstruct ses_status_key_pad_entry { 1649235911Smav struct ses_status_common common; 1650235911Smav uint8_t bytes[3]; 1651235911Smav}; 1652235911Smav 1653235911Smavenum ses_status_key_pad_entry_field_data { 1654235911Smav SES_STATUS_KEY_PAD_ENTRY_IDENT_BYTE = 0, 1655235911Smav SES_STATUS_KEY_PAD_ENTRY_IDENT_MASK = 0x80, 1656235911Smav SES_STATUS_KEY_PAD_ENTRY_IDENT_SHIFT = 7, 1657235911Smav 1658235911Smav SES_STATUS_KEY_PAD_ENTRY_FAIL_BYTE = 0, 1659235911Smav SES_STATUS_KEY_PAD_ENTRY_FAIL_MASK = 0x40, 1660235911Smav SES_STATUS_KEY_PAD_ENTRY_FAIL_SHIFT = 6 1661235911Smav}; 1662235911Smav 1663235911Smav#define GEN_SES_STATUS_KEY_PAD_ENTRY_ACCESSORS(LCASE, UCASE) \ 1664235911Smav GEN_GETTER(ses_status_key_pad_entry, SES_STATUS_KEY_PAD_ENTRY, LCASE, UCASE) 1665235911SmavGEN_SES_STATUS_KEY_PAD_ENTRY_ACCESSORS(ident, IDENT) 1666235911SmavGEN_SES_STATUS_KEY_PAD_ENTRY_ACCESSORS(fail, FAIL) 1667235911Smav#undef GEN_SES_STATUS_KEY_PAD_ENTRY_ACCESSORS 1668235911Smav 1669235911Smav/*------------------------- Enclosure Status Element -------------------------*/ 1670235911Smavstruct ses_status_enclosure { 1671235911Smav struct ses_status_common common; 1672235911Smav uint8_t bytes[3]; 1673235911Smav}; 1674235911Smav 1675235911Smavenum ses_status_enclosure_field_data { 1676235911Smav SES_STATUS_ENCLOSURE_IDENT_BYTE = 0, 1677235911Smav SES_STATUS_ENCLOSURE_IDENT_MASK = 0x80, 1678235911Smav SES_STATUS_ENCLOSURE_IDENT_SHIFT = 7, 1679235911Smav 1680235911Smav SES_STATUS_ENCLOSURE_TIME_UNTIL_POWER_CYCLE_BYTE = 1, 1681235911Smav SES_STATUS_ENCLOSURE_TIME_UNTIL_POWER_CYCLE_MASK = 0xFC, 1682235911Smav SES_STATUS_ENCLOSURE_TIME_UNTIL_POWER_CYCLE_SHIFT = 2, 1683235911Smav 1684235911Smav SES_STATUS_ENCLOSURE_FAIL_BYTE = 1, 1685235911Smav SES_STATUS_ENCLOSURE_FAIL_MASK = 0x02, 1686235911Smav SES_STATUS_ENCLOSURE_FAIL_SHIFT = 1, 1687235911Smav 1688235911Smav SES_STATUS_ENCLOSURE_WARN_BYTE = 1, 1689235911Smav SES_STATUS_ENCLOSURE_WARN_MASK = 0x01, 1690235911Smav SES_STATUS_ENCLOSURE_WARN_SHIFT = 0, 1691235911Smav 1692235911Smav SES_STATUS_ENCLOSURE_REQUESTED_POWER_OFF_DURATION_BYTE = 2, 1693235911Smav SES_STATUS_ENCLOSURE_REQUESTED_POWER_OFF_DURATION_MASK = 0xFC, 1694235911Smav SES_STATUS_ENCLOSURE_REQUESTED_POWER_OFF_DURATION_SHIFT = 2, 1695235911Smav SES_STATUS_ENCLOSURE_REQUESTED_POWER_OFF_DURATION_MAX_AUTO = 60, 1696235911Smav SES_STATUS_ENCLOSURE_REQUESTED_POWER_OFF_DURATION_MANUAL = 63, 1697235911Smav 1698235911Smav SES_STATUS_ENCLOSURE_REQUESTED_FAIL_BYTE = 2, 1699235911Smav SES_STATUS_ENCLOSURE_REQUESTED_FAIL_MASK = 0x02, 1700235911Smav SES_STATUS_ENCLOSURE_REQUESTED_FAIL_SHIFT = 1, 1701235911Smav 1702235911Smav SES_STATUS_ENCLOSURE_REQUESTED_WARN_BYTE = 2, 1703235911Smav SES_STATUS_ENCLOSURE_REQUESTED_WARN_MASK = 0x01, 1704235911Smav SES_STATUS_ENCLOSURE_REQUESTED_WARN_SHIFT = 0 1705235911Smav}; 1706235911Smav 1707235911Smav#define GEN_SES_STATUS_ENCLOSURE_ACCESSORS(LCASE, UCASE) \ 1708235911Smav GEN_GETTER(ses_status_enclosure, SES_STATUS_ENCLOSURE, LCASE, UCASE) 1709235911SmavGEN_SES_STATUS_ENCLOSURE_ACCESSORS(ident, IDENT) 1710235911SmavGEN_SES_STATUS_ENCLOSURE_ACCESSORS(time_until_power_cycle, 1711235911Smav TIME_UNTIL_POWER_CYCLE) 1712235911SmavGEN_SES_STATUS_ENCLOSURE_ACCESSORS(fail, FAIL) 1713235911SmavGEN_SES_STATUS_ENCLOSURE_ACCESSORS(warn, WARN) 1714235911SmavGEN_SES_STATUS_ENCLOSURE_ACCESSORS(requested_power_off_duration, 1715235911Smav REQUESTED_POWER_OFF_DURATION) 1716235911SmavGEN_SES_STATUS_ENCLOSURE_ACCESSORS(requested_fail, REQUESTED_FAIL) 1717235911SmavGEN_SES_STATUS_ENCLOSURE_ACCESSORS(requested_warn, REQUESTED_WARN) 1718235911Smav#undef GEN_SES_STATUS_ENCLOSURE_ACCESSORS 1719235911Smav 1720235911Smav/*------------------- SCSI Port/Transceiver Status Element -------------------*/ 1721235911Smavstruct ses_status_scsi_port_or_xcvr { 1722235911Smav struct ses_status_common common; 1723235911Smav uint8_t bytes[3]; 1724235911Smav}; 1725235911Smav 1726235911Smavenum ses_status_scsi_port_or_xcvr_field_data { 1727235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_IDENT_BYTE = 0, 1728235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_IDENT_MASK = 0x80, 1729235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_IDENT_SHIFT = 7, 1730235911Smav 1731235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_FAIL_BYTE = 0, 1732235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_FAIL_MASK = 0x40, 1733235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_FAIL_SHIFT = 6, 1734235911Smav 1735235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_REPORT_BYTE = 1, 1736235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_REPORT_MASK = 0x01, 1737235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_REPORT_SHIFT = 0, 1738235911Smav 1739235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_DISABLED_BYTE = 2, 1740235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_DISABLED_MASK = 0x10, 1741235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_DISABLED_SHIFT = 4, 1742235911Smav 1743235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_LOL_BYTE = 2, 1744235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_LOL_MASK = 0x02, 1745235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_LOL_SHIFT = 1, 1746235911Smav 1747235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_XMIT_FAIL_BYTE = 2, 1748235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_XMIT_FAIL_MASK = 0x01, 1749235911Smav SES_STATUS_SCSI_PORT_OR_XCVR_XMIT_FAIL_SHIFT = 0 1750235911Smav}; 1751235911Smav 1752235911Smav#define GEN_SES_STATUS_SCSI_PORT_OR_XCVR_ACCESSORS(LCASE, UCASE) \ 1753235911Smav GEN_GETTER(ses_status_scsi_port_or_xcvr, SES_STATUS_SCSI_PORT_OR_XCVR,\ 1754235911Smav LCASE, UCASE) 1755235911SmavGEN_SES_STATUS_SCSI_PORT_OR_XCVR_ACCESSORS(ident, IDENT) 1756235911SmavGEN_SES_STATUS_SCSI_PORT_OR_XCVR_ACCESSORS(fail, FAIL) 1757235911SmavGEN_SES_STATUS_SCSI_PORT_OR_XCVR_ACCESSORS(report, REPORT) 1758235911SmavGEN_SES_STATUS_SCSI_PORT_OR_XCVR_ACCESSORS(disable, DISABLED) 1759235911SmavGEN_SES_STATUS_SCSI_PORT_OR_XCVR_ACCESSORS(lol, LOL) 1760235911SmavGEN_SES_STATUS_SCSI_PORT_OR_XCVR_ACCESSORS(xmit_fail, XMIT_FAIL) 1761235911Smav#undef GEN_SES_STATUS_SCSI_PORT_OR_XCVR_ACCESSORS 1762235911Smav 1763235911Smav/*------------------------- Language Status Element --------------------------*/ 1764235911Smavstruct ses_status_language { 1765235911Smav struct ses_status_common common; 1766235911Smav uint8_t bytes[1]; 1767235911Smav uint8_t language_code[2]; 1768235911Smav}; 1769235911Smav 1770235911Smavenum ses_status_language_field_data { 1771235911Smav SES_STATUS_LANGUAGE_IDENT_BYTE = 0, 1772235911Smav SES_STATUS_LANGUAGE_IDENT_MASK = 0x80, 1773235911Smav SES_STATUS_LANGUAGE_IDENT_SHIFT = 7 1774235911Smav}; 1775235911Smav 1776235911Smav#define GEN_SES_STATUS_LANGUAGE_ACCESSORS(LCASE, UCASE) \ 1777235911Smav GEN_GETTER(ses_status_language, SES_STATUS_LANGUAGE, LCASE, UCASE) 1778235911SmavGEN_SES_STATUS_LANGUAGE_ACCESSORS(ident, IDENT) 1779235911Smav#undef GEN_SES_STATUS_LANGUAGE_ACCESSORS 1780235911Smav 1781235911Smav/*-------------------- Communication Port Status Element ---------------------*/ 1782235911Smavstruct ses_status_comm_port { 1783235911Smav struct ses_status_common common; 1784235911Smav uint8_t bytes[3]; 1785235911Smav}; 1786235911Smav 1787235911Smavenum ses_status_comm_port_field_data { 1788235911Smav SES_STATUS_COMM_PORT_IDENT_BYTE = 0, 1789235911Smav SES_STATUS_COMM_PORT_IDENT_MASK = 0x80, 1790235911Smav SES_STATUS_COMM_PORT_IDENT_SHIFT = 7, 1791235911Smav 1792235911Smav SES_STATUS_COMM_PORT_FAIL_BYTE = 0, 1793235911Smav SES_STATUS_COMM_PORT_FAIL_MASK = 0x40, 1794235911Smav SES_STATUS_COMM_PORT_FAIL_SHIFT = 6, 1795235911Smav 1796235911Smav SES_STATUS_COMM_PORT_DISABLED_BYTE = 2, 1797235911Smav SES_STATUS_COMM_PORT_DISABLED_MASK = 0x01, 1798235911Smav SES_STATUS_COMM_PORT_DISABLED_SHIFT = 0 1799235911Smav}; 1800235911Smav 1801235911Smav#define GEN_SES_STATUS_COMM_PORT_ACCESSORS(LCASE, UCASE) \ 1802235911Smav GEN_GETTER(ses_status_comm_port, SES_STATUS_COMM_PORT, LCASE, UCASE) 1803235911SmavGEN_SES_STATUS_COMM_PORT_ACCESSORS(ident, IDENT) 1804235911SmavGEN_SES_STATUS_COMM_PORT_ACCESSORS(fail, FAIL) 1805235911SmavGEN_SES_STATUS_COMM_PORT_ACCESSORS(disabled, DISABLED) 1806235911Smav#undef GEN_SES_STATUS_COMM_PORT_ACCESSORS 1807235911Smav 1808235911Smav/*---------------------- Voltage Sensor Status Element -----------------------*/ 1809235911Smavstruct ses_status_voltage_sensor { 1810235911Smav struct ses_status_common common; 1811235911Smav uint8_t bytes[1]; 1812235911Smav uint8_t voltage[2]; 1813235911Smav}; 1814235911Smav 1815235911Smavenum ses_status_voltage_sensor_field_data { 1816235911Smav SES_STATUS_VOLTAGE_SENSOR_IDENT_BYTE = 0, 1817235911Smav SES_STATUS_VOLTAGE_SENSOR_IDENT_MASK = 0x80, 1818235911Smav SES_STATUS_VOLTAGE_SENSOR_IDENT_SHIFT = 7, 1819235911Smav 1820235911Smav SES_STATUS_VOLTAGE_SENSOR_FAIL_BYTE = 0, 1821235911Smav SES_STATUS_VOLTAGE_SENSOR_FAIL_MASK = 0x40, 1822235911Smav SES_STATUS_VOLTAGE_SENSOR_FAIL_SHIFT = 6, 1823235911Smav 1824235911Smav SES_STATUS_VOLTAGE_SENSOR_WARN_OVER_BYTE = 0, 1825235911Smav SES_STATUS_VOLTAGE_SENSOR_WARN_OVER_MASK = 0x08, 1826235911Smav SES_STATUS_VOLTAGE_SENSOR_WARN_OVER_SHIFT = 3, 1827235911Smav 1828235911Smav SES_STATUS_VOLTAGE_SENSOR_WARN_UNDER_BYTE = 0, 1829235911Smav SES_STATUS_VOLTAGE_SENSOR_WARN_UNDER_MASK = 0x04, 1830235911Smav SES_STATUS_VOLTAGE_SENSOR_WARN_UNDER_SHIFT = 2, 1831235911Smav 1832235911Smav SES_STATUS_VOLTAGE_SENSOR_CRIT_OVER_BYTE = 0, 1833235911Smav SES_STATUS_VOLTAGE_SENSOR_CRIT_OVER_MASK = 0x02, 1834235911Smav SES_STATUS_VOLTAGE_SENSOR_CRIT_OVER_SHIFT = 1, 1835235911Smav 1836235911Smav SES_STATUS_VOLTAGE_SENSOR_CRIT_UNDER_BYTE = 0, 1837235911Smav SES_STATUS_VOLTAGE_SENSOR_CRIT_UNDER_MASK = 0x01, 1838235911Smav SES_STATUS_VOLTAGE_SENSOR_CRIT_UNDER_SHIFT = 0 1839235911Smav}; 1840235911Smav 1841235911Smav#define GEN_SES_STATUS_VOLTAGE_SENSOR_ACCESSORS(LCASE, UCASE) \ 1842235911Smav GEN_GETTER(ses_status_voltage_sensor, SES_STATUS_VOLTAGE_SENSOR, \ 1843235911Smav LCASE, UCASE) 1844235911SmavGEN_SES_STATUS_VOLTAGE_SENSOR_ACCESSORS(ident, IDENT) 1845235911SmavGEN_SES_STATUS_VOLTAGE_SENSOR_ACCESSORS(fail, FAIL) 1846235911SmavGEN_SES_STATUS_VOLTAGE_SENSOR_ACCESSORS(warn_over, WARN_OVER) 1847235911SmavGEN_SES_STATUS_VOLTAGE_SENSOR_ACCESSORS(warn_under, WARN_UNDER) 1848235911SmavGEN_SES_STATUS_VOLTAGE_SENSOR_ACCESSORS(crit_over, CRIT_OVER) 1849235911SmavGEN_SES_STATUS_VOLTAGE_SENSOR_ACCESSORS(crit_under, CRIT_UNDER) 1850235911Smav#undef GEN_SES_STATUS_VOLTAGE_SENSOR_ACCESSORS 1851235911Smav 1852235911Smav/*---------------------- Current Sensor Status Element -----------------------*/ 1853235911Smavstruct ses_status_current_sensor { 1854235911Smav struct ses_status_common common; 1855235911Smav uint8_t bytes[3]; 1856235911Smav}; 1857235911Smav 1858235911Smavenum ses_status_current_sensor_field_data { 1859235911Smav SES_STATUS_CURRENT_SENSOR_IDENT_BYTE = 0, 1860235911Smav SES_STATUS_CURRENT_SENSOR_IDENT_MASK = 0x80, 1861235911Smav SES_STATUS_CURRENT_SENSOR_IDENT_SHIFT = 7, 1862235911Smav 1863235911Smav SES_STATUS_CURRENT_SENSOR_FAIL_BYTE = 0, 1864235911Smav SES_STATUS_CURRENT_SENSOR_FAIL_MASK = 0x40, 1865235911Smav SES_STATUS_CURRENT_SENSOR_FAIL_SHIFT = 6, 1866235911Smav 1867235911Smav SES_STATUS_CURRENT_SENSOR_WARN_OVER_BYTE = 0, 1868235911Smav SES_STATUS_CURRENT_SENSOR_WARN_OVER_MASK = 0x08, 1869235911Smav SES_STATUS_CURRENT_SENSOR_WARN_OVER_SHIFT = 3, 1870235911Smav 1871235911Smav SES_STATUS_CURRENT_SENSOR_CRIT_OVER_BYTE = 0, 1872235911Smav SES_STATUS_CURRENT_SENSOR_CRIT_OVER_MASK = 0x02, 1873235911Smav SES_STATUS_CURRENT_SENSOR_CRIT_OVER_SHIFT = 1 1874235911Smav}; 1875235911Smav 1876235911Smav#define GEN_SES_STATUS_CURRENT_SENSOR_ACCESSORS(LCASE, UCASE) \ 1877235911Smav GEN_GETTER(ses_status_current_sensor, SES_STATUS_CURRENT_SENSOR, \ 1878235911Smav LCASE, UCASE) 1879235911SmavGEN_SES_STATUS_CURRENT_SENSOR_ACCESSORS(ident, IDENT) 1880235911SmavGEN_SES_STATUS_CURRENT_SENSOR_ACCESSORS(fail, FAIL) 1881235911SmavGEN_SES_STATUS_CURRENT_SENSOR_ACCESSORS(warn_over, WARN_OVER) 1882235911SmavGEN_SES_STATUS_CURRENT_SENSOR_ACCESSORS(crit_over, CRIT_OVER) 1883235911Smav#undef GEN_SES_STATUS_CURRENT_SENSOR_ACCESSORS 1884235911Smav 1885235911Smav/*--------------------- SCSI Target Port Status Element ----------------------*/ 1886235911Smavstruct ses_status_target_port { 1887235911Smav struct ses_status_common common; 1888235911Smav uint8_t bytes[3]; 1889235911Smav}; 1890235911Smav 1891235911Smavenum ses_status_scsi_target_port_field_data { 1892235911Smav SES_STATUS_TARGET_PORT_IDENT_BYTE = 0, 1893235911Smav SES_STATUS_TARGET_PORT_IDENT_MASK = 0x80, 1894235911Smav SES_STATUS_TARGET_PORT_IDENT_SHIFT = 7, 1895235911Smav 1896235911Smav SES_STATUS_TARGET_PORT_FAIL_BYTE = 0, 1897235911Smav SES_STATUS_TARGET_PORT_FAIL_MASK = 0x40, 1898235911Smav SES_STATUS_TARGET_PORT_FAIL_SHIFT = 6, 1899235911Smav 1900235911Smav SES_STATUS_TARGET_PORT_REPORT_BYTE = 1, 1901235911Smav SES_STATUS_TARGET_PORT_REPORT_MASK = 0x01, 1902235911Smav SES_STATUS_TARGET_PORT_REPORT_SHIFT = 0, 1903235911Smav 1904235911Smav SES_STATUS_TARGET_PORT_ENABLED_BYTE = 2, 1905235911Smav SES_STATUS_TARGET_PORT_ENABLED_MASK = 0x01, 1906235911Smav SES_STATUS_TARGET_PORT_ENABLED_SHIFT = 0 1907235911Smav}; 1908235911Smav 1909235911Smav#define GEN_SES_STATUS_TARGET_PORT_ACCESSORS(LCASE, UCASE) \ 1910235911Smav GEN_GETTER(ses_status_target_port, SES_STATUS_TARGET_PORT, LCASE, UCASE) 1911235911SmavGEN_SES_STATUS_TARGET_PORT_ACCESSORS(ident, IDENT) 1912235911SmavGEN_SES_STATUS_TARGET_PORT_ACCESSORS(fail, FAIL) 1913235911SmavGEN_SES_STATUS_TARGET_PORT_ACCESSORS(report, REPORT) 1914235911SmavGEN_SES_STATUS_TARGET_PORT_ACCESSORS(enabled, ENABLED) 1915235911Smav#undef GEN_SES_STATUS_TARGET_PORT_ACCESSORS 1916235911Smav 1917235911Smav/*-------------------- SCSI Initiator Port Status Element --------------------*/ 1918235911Smavstruct ses_status_initiator_port { 1919235911Smav struct ses_status_common common; 1920235911Smav uint8_t bytes[3]; 1921235911Smav}; 1922235911Smav 1923235911Smavenum ses_status_scsi_initiator_port_field_data { 1924235911Smav SES_STATUS_INITIATOR_PORT_IDENT_BYTE = 0, 1925235911Smav SES_STATUS_INITIATOR_PORT_IDENT_MASK = 0x80, 1926235911Smav SES_STATUS_INITIATOR_PORT_IDENT_SHIFT = 7, 1927235911Smav 1928235911Smav SES_STATUS_INITIATOR_PORT_FAIL_BYTE = 0, 1929235911Smav SES_STATUS_INITIATOR_PORT_FAIL_MASK = 0x40, 1930235911Smav SES_STATUS_INITIATOR_PORT_FAIL_SHIFT = 6, 1931235911Smav 1932235911Smav SES_STATUS_INITIATOR_PORT_REPORT_BYTE = 1, 1933235911Smav SES_STATUS_INITIATOR_PORT_REPORT_MASK = 0x01, 1934235911Smav SES_STATUS_INITIATOR_PORT_REPORT_SHIFT = 0, 1935235911Smav 1936235911Smav SES_STATUS_INITIATOR_PORT_ENABLED_BYTE = 2, 1937235911Smav SES_STATUS_INITIATOR_PORT_ENABLED_MASK = 0x01, 1938235911Smav SES_STATUS_INITIATOR_PORT_ENABLED_SHIFT = 0 1939235911Smav}; 1940235911Smav 1941235911Smav#define GEN_SES_STATUS_INITIATOR_PORT_ACCESSORS(LCASE, UCASE) \ 1942235911Smav GEN_GETTER(ses_status_initiator_port, SES_STATUS_INITIATOR_PORT, \ 1943235911Smav LCASE, UCASE) 1944235911SmavGEN_SES_STATUS_INITIATOR_PORT_ACCESSORS(ident, IDENT) 1945235911SmavGEN_SES_STATUS_INITIATOR_PORT_ACCESSORS(fail, FAIL) 1946235911SmavGEN_SES_STATUS_INITIATOR_PORT_ACCESSORS(report, REPORT) 1947235911SmavGEN_SES_STATUS_INITIATOR_PORT_ACCESSORS(enabled, ENABLED) 1948235911Smav#undef GEN_SES_STATUS_INITIATOR_PORT_ACCESSORS 1949235911Smav 1950235911Smav/*-------------------- Simple Subenclosure Status Element --------------------*/ 1951235911Smavstruct ses_status_simple_subses { 1952235911Smav struct ses_status_common common; 1953235911Smav uint8_t bytes[2]; 1954235911Smav uint8_t short_enclosure_status; 1955235911Smav}; 1956235911Smav 1957235911Smavenum ses_status_simple_subses_field_data { 1958235911Smav SES_STATUS_SIMPlE_SUBSES_IDENT_BYTE = 0, 1959235911Smav SES_STATUS_SIMPlE_SUBSES_IDENT_MASK = 0x80, 1960235911Smav SES_STATUS_SIMPlE_SUBSES_IDENT_SHIFT = 7, 1961235911Smav 1962235911Smav SES_STATUS_SIMPlE_SUBSES_FAIL_BYTE = 0, 1963235911Smav SES_STATUS_SIMPlE_SUBSES_FAIL_MASK = 0x40, 1964235911Smav SES_STATUS_SIMPlE_SUBSES_FAIL_SHIFT = 6 1965235911Smav}; 1966235911Smav 1967235911Smav#define GEN_SES_STATUS_SIMPlE_SUBSES_ACCESSORS(LCASE, UCASE) \ 1968235911Smav GEN_GETTER(ses_status_simple_subses, SES_STATUS_SIMPlE_SUBSES, \ 1969235911Smav LCASE, UCASE) 1970235911SmavGEN_SES_STATUS_SIMPlE_SUBSES_ACCESSORS(ident, IDENT) 1971235911SmavGEN_SES_STATUS_SIMPlE_SUBSES_ACCESSORS(fail, FAIL) 1972235911Smav#undef GEN_SES_STATUS_SIMPlE_SUBSES_ACCESSORS 1973235911Smav 1974235911Smav/*----------------------- SAS Expander Status Element ------------------------*/ 1975235911Smavstruct ses_status_sas_expander { 1976235911Smav struct ses_status_common common; 1977235911Smav uint8_t bytes[3]; 1978235911Smav}; 1979235911Smav 1980235911Smavenum ses_status_sas_expander_field_data { 1981235911Smav SES_STATUS_SAS_EXPANDER_IDENT_BYTE = 0, 1982235911Smav SES_STATUS_SAS_EXPANDER_IDENT_MASK = 0x80, 1983235911Smav SES_STATUS_SAS_EXPANDER_IDENT_SHIFT = 7, 1984235911Smav 1985235911Smav SES_STATUS_SAS_EXPANDER_FAIL_BYTE = 0, 1986235911Smav SES_STATUS_SAS_EXPANDER_FAIL_MASK = 0x40, 1987235911Smav SES_STATUS_SAS_EXPANDER_FAIL_SHIFT = 6 1988235911Smav}; 1989235911Smav 1990235911Smav#define GEN_SES_STATUS_SAS_EXPANDER_ACCESSORS(LCASE, UCASE) \ 1991235911Smav GEN_GETTER(ses_status_sas_expander, SES_STATUS_SAS_EXPANDER, LCASE, UCASE) 1992235911SmavGEN_SES_STATUS_SAS_EXPANDER_ACCESSORS(ident, IDENT) 1993235911SmavGEN_SES_STATUS_SAS_EXPANDER_ACCESSORS(fail, FAIL) 1994235911Smav#undef GEN_SES_STATUS_SAS_EXPANDER_ACCESSORS 1995235911Smav 1996235911Smav/*----------------------- SAS Connector Status Element -----------------------*/ 1997235911Smavstruct ses_status_sas_connector { 1998235911Smav struct ses_status_common common; 1999235911Smav uint8_t bytes[3]; 2000235911Smav}; 2001235911Smav 2002235911Smavenum ses_status_sas_connector_field_data { 2003235911Smav SES_STATUS_SAS_CONNECTOR_IDENT_BYTE = 0, 2004235911Smav SES_STATUS_SAS_CONNECTOR_IDENT_MASK = 0x80, 2005235911Smav SES_STATUS_SAS_CONNECTOR_IDENT_SHIFT = 7, 2006235911Smav 2007235911Smav SES_STATUS_SAS_CONNECTOR_TYPE_BYTE = 0, 2008235911Smav SES_STATUS_SAS_CONNECTOR_TYPE_MASK = 0x7F, 2009235911Smav SES_STATUS_SAS_CONNECTOR_TYPE_SHIFT = 0, 2010235911Smav 2011235911Smav SES_STATUS_SAS_CONNECTOR_PHYS_LINK_BYTE = 1, 2012235911Smav SES_STATUS_SAS_CONNECTOR_PHYS_LINK_MASK = 0xFF, 2013235911Smav SES_STATUS_SAS_CONNECTOR_PHYS_LINK_SHIFT = 0, 2014235911Smav SES_STATUS_SAS_CONNECTOR_PHYS_LINK_ALL = 0xFF, 2015235911Smav 2016235911Smav SES_STATUS_SAS_CONNECTOR_FAIL_BYTE = 2, 2017235911Smav SES_STATUS_SAS_CONNECTOR_FAIL_MASK = 0x40, 2018235911Smav SES_STATUS_SAS_CONNECTOR_FAIL_SHIFT = 6, 2019235911Smav}; 2020235911Smav 2021235911Smav#define GEN_SES_STATUS_SAS_CONNECTOR_ACCESSORS(LCASE, UCASE) \ 2022235911Smav GEN_GETTER(ses_status_sas_connector, SES_STATUS_SAS_CONNECTOR, \ 2023235911Smav LCASE, UCASE) 2024235911SmavGEN_SES_STATUS_SAS_CONNECTOR_ACCESSORS(ident, IDENT) 2025235911SmavGEN_SES_STATUS_SAS_CONNECTOR_ACCESSORS(type, TYPE) 2026235911SmavGEN_SES_STATUS_SAS_CONNECTOR_ACCESSORS(phys_link, PHYS_LINK) 2027235911SmavGEN_SES_STATUS_SAS_CONNECTOR_ACCESSORS(fail, FAIL) 2028235911Smav#undef GEN_SES_STATUS_SAS_CONNECTOR_ACCESSORS 2029235911Smav 2030235911Smav/*------------------------- Universal Status Element -------------------------*/ 2031235911Smavunion ses_status_element { 2032235911Smav struct ses_status_common common; 2033235911Smav struct ses_status_dev_slot dev_slot; 2034235911Smav struct ses_status_array_dev_slot array_dev_slot; 2035235911Smav struct ses_status_power_supply power_supply; 2036235911Smav struct ses_status_cooling cooling; 2037235911Smav struct ses_status_temp_sensor temp_sensor; 2038235911Smav struct ses_status_door_lock door_lock; 2039235911Smav struct ses_status_audible_alarm audible_alarm; 2040235911Smav struct ses_status_ecc_electronics ecc_electronics; 2041235911Smav struct ses_status_scc_electronics scc_electronics; 2042235911Smav struct ses_status_nv_cache nv_cache; 2043235911Smav struct ses_status_invalid_op_reason invalid_op_reason; 2044235911Smav struct ses_status_ups ups; 2045235911Smav struct ses_status_display display; 2046235911Smav struct ses_status_key_pad_entry key_pad_entry; 2047235911Smav struct ses_status_scsi_port_or_xcvr scsi_port_or_xcvr; 2048235911Smav struct ses_status_language language; 2049235911Smav struct ses_status_comm_port comm_port; 2050235911Smav struct ses_status_voltage_sensor voltage_sensor; 2051235911Smav struct ses_status_current_sensor current_sensor; 2052235911Smav struct ses_status_target_port target_port; 2053235911Smav struct ses_status_initiator_port initiator_port; 2054235911Smav struct ses_status_simple_subses simple_subses; 2055235911Smav struct ses_status_sas_expander sas_expander; 2056235911Smav struct ses_status_sas_connector sas_connector; 2057235911Smav uint8_t bytes[4]; 2058235911Smav}; 2059235911Smav 2060235911Smav/*===================== SCSI SES Status Diagnostic Page =====================*/ 2061235911Smavstruct ses_status_page { 2062235911Smav struct ses_page_hdr hdr; 2063235911Smav union ses_status_element elements[]; 2064235911Smav}; 2065235911Smav 2066235911Smavenum ses_status_page_field_data { 2067235911Smav SES_STATUS_PAGE_INVOP_MASK = 0x10, 2068235911Smav SES_STATUS_PAGE_INVOP_SHIFT = 4, 2069235911Smav 2070235911Smav SES_STATUS_PAGE_INFO_MASK = 0x08, 2071235911Smav SES_STATUS_PAGE_INFO_SHIFT = 3, 2072235911Smav 2073235911Smav SES_STATUS_PAGE_NON_CRIT_MASK = 0x04, 2074235911Smav SES_STATUS_PAGE_NON_CRIT_SHIFT = 2, 2075235911Smav 2076235911Smav SES_STATUS_PAGE_CRIT_MASK = 0x02, 2077235911Smav SES_STATUS_PAGE_CRIT_SHIFT = 1, 2078235911Smav 2079235911Smav SES_STATUS_PAGE_UNRECOV_MASK = 0x01, 2080235911Smav SES_STATUS_PAGE_UNRECOV_SHIFT = 0, 2081235911Smav 2082235911Smav SES_STATUS_PAGE_CHANGED_MASK = SES_STATUS_PAGE_INVOP_MASK 2083235911Smav | SES_STATUS_PAGE_INFO_MASK 2084235911Smav | SES_STATUS_PAGE_NON_CRIT_MASK 2085235911Smav | SES_STATUS_PAGE_CRIT_MASK 2086235911Smav | SES_STATUS_PAGE_UNRECOV_MASK, 2087235911Smav SES_STATUS_PAGE_CHANGED_SHIFT = 0, 2088235911Smav}; 2089235911Smav 2090235911Smav#define GEN_SES_STATUS_PAGE_ACCESSORS(LCASE, UCASE) \ 2091235911Smav GEN_HDR_ACCESSORS(ses_status_page, SES_STATUS_PAGE, LCASE, UCASE) 2092235911Smav 2093235911SmavGEN_SES_STATUS_PAGE_ACCESSORS(invop, INVOP) 2094235911SmavGEN_SES_STATUS_PAGE_ACCESSORS(info, INFO) 2095235911SmavGEN_SES_STATUS_PAGE_ACCESSORS(non_crit, NON_CRIT) 2096235911SmavGEN_SES_STATUS_PAGE_ACCESSORS(crit, CRIT) 2097235911SmavGEN_SES_STATUS_PAGE_ACCESSORS(unrecov, UNRECOV) 2098235911SmavGEN_SES_STATUS_PAGE_ACCESSORS(changed, CHANGED) 2099235911Smav#undef GEN_SES_STATUS_PAGE_ACCESSORS 2100235911Smav 2101235911Smav/*================ SCSI SES Element Descriptor Diagnostic Page ===============*/ 2102235911Smavstruct ses_elem_descr { 2103235911Smav uint8_t reserved[2]; 2104235911Smav uint8_t length[2]; 2105235911Smav char description[]; 2106235911Smav}; 2107235911Smav 2108235911Smavstruct ses_elem_descr_page { 2109235911Smav struct ses_page_hdr hdr; 2110235911Smav struct ses_elem_descr descrs[]; 2111235911Smav}; 2112235911Smav 2113235911Smav/*============ SCSI SES Additional Element Status Diagnostic Page ============*/ 2114235911Smavstruct ses_addl_elem_status_page { 2115235911Smav struct ses_page_hdr hdr; 2116235911Smav}; 2117235911Smav 2118235911Smav/*====================== Legacy (Deprecated) Structures ======================*/ 2119235911Smavstruct ses_control_page_hdr { 2120235911Smav uint8_t page_code; 2121235911Smav uint8_t control_flags; 2122235911Smav uint8_t length[2]; 2123235911Smav uint8_t gen_code[4]; 2124235911Smav/* Followed by variable length array of descriptors. */ 2125235911Smav}; 2126235911Smav 2127235911Smavstruct ses_status_page_hdr { 2128235911Smav uint8_t page_code; 2129235911Smav uint8_t status_flags; 2130235911Smav uint8_t length[2]; 2131235911Smav uint8_t gen_code[4]; 2132235911Smav/* Followed by variable length array of descriptors. */ 2133235911Smav}; 2134235911Smav 2135235911Smav/* ses_page_hdr.reserved values */ 213656027Smjacob/* 2137235911Smav * Enclosure Status Diagnostic Page: 2138235911Smav * uint8_t reserved : 3, 2139235911Smav * invop : 1, 2140235911Smav * info : 1, 2141235911Smav * noncritical : 1, 2142235911Smav * critical : 1, 2143235911Smav * unrecov : 1; 214456027Smjacob */ 2145235911Smav#define SES_ENCSTAT_UNRECOV 0x01 2146235911Smav#define SES_ENCSTAT_CRITICAL 0x02 2147235911Smav#define SES_ENCSTAT_NONCRITICAL 0x04 2148235911Smav#define SES_ENCSTAT_INFO 0x08 2149235911Smav#define SES_ENCSTAT_INVOP 0x10 2150235911Smav/* Status mask: All of the above OR'd together */ 2151235911Smav#define SES_STATUS_MASK 0x1f 2152235911Smav#define SES_SET_STATUS_MASK 0xf 2153235911Smav/* Element Descriptor Diagnostic Page: unused */ 2154235911Smav/* Additional Element Status Diagnostic Page: unused */ 215556027Smjacob 2156235911Smav 2157235911Smav 215856027Smjacob/* Summary SES Status Defines, Common Status Codes */ 215956027Smjacob#define SES_OBJSTAT_UNSUPPORTED 0 216056027Smjacob#define SES_OBJSTAT_OK 1 216156027Smjacob#define SES_OBJSTAT_CRIT 2 216256027Smjacob#define SES_OBJSTAT_NONCRIT 3 216356027Smjacob#define SES_OBJSTAT_UNRECOV 4 216456027Smjacob#define SES_OBJSTAT_NOTINSTALLED 5 216556027Smjacob#define SES_OBJSTAT_UNKNOWN 6 216656027Smjacob#define SES_OBJSTAT_NOTAVAIL 7 2167235911Smav#define SES_OBJSTAT_NOACCESS 8 216856027Smjacob 216956027Smjacob/* 217056027Smjacob * For control pages, cstat[0] is the same for the 217156027Smjacob * enclosure and is common across all device types. 217256027Smjacob * 217356027Smjacob * If SESCTL_CSEL is set, then PRDFAIL, DISABLE and RSTSWAP 217456027Smjacob * are checked, otherwise bits that are specific to the device 217556027Smjacob * type in the other 3 bytes of cstat or checked. 217656027Smjacob */ 217756027Smjacob#define SESCTL_CSEL 0x80 217856027Smjacob#define SESCTL_PRDFAIL 0x40 217956027Smjacob#define SESCTL_DISABLE 0x20 218056027Smjacob#define SESCTL_RSTSWAP 0x10 218156027Smjacob 218256027Smjacob 218356027Smjacob/* Control bits, Device Elements, byte 2 */ 218456027Smjacob#define SESCTL_DRVLCK 0x40 /* "DO NOT REMOVE" */ 218556027Smjacob#define SESCTL_RQSINS 0x08 /* RQST INSERT */ 218656027Smjacob#define SESCTL_RQSRMV 0x04 /* RQST REMOVE */ 218756027Smjacob#define SESCTL_RQSID 0x02 /* RQST IDENT */ 218856027Smjacob/* Control bits, Device Elements, byte 3 */ 218956027Smjacob#define SESCTL_RQSFLT 0x20 /* RQST FAULT */ 219056027Smjacob#define SESCTL_DEVOFF 0x10 /* DEVICE OFF */ 219156027Smjacob 219256027Smjacob/* Control bits, Generic, byte 3 */ 219356027Smjacob#define SESCTL_RQSTFAIL 0x40 219456027Smjacob#define SESCTL_RQSTON 0x20 219556069Smjacob 219656027Smjacob/* 219756069Smjacob * Getting text for an object type is a little 219856069Smjacob * trickier because it's string data that can 219956069Smjacob * go up to 64 KBytes. Build this union and 220056069Smjacob * fill the obj_id with the id of the object who's 220156069Smjacob * help text you want, and if text is available, 220256069Smjacob * obj_text will be filled in, null terminated. 220356027Smjacob */ 220456027Smjacob 220556069Smjacobtypedef union { 220656069Smjacob unsigned int obj_id; 220756069Smjacob char obj_text[1]; 220856069Smjacob} ses_hlptxt; 2209235911Smav 2210235911Smav/*============================================================================*/ 2211235911Smavstruct ses_elm_desc_hdr { 2212235911Smav uint8_t reserved[2]; 2213235911Smav uint8_t length[2]; 2214235911Smav}; 2215235911Smav 2216235911Smav/* 2217235911Smav * SES v2 r20 6.1.13 - Element Additional Status diagnostic page 2218235911Smav * Tables 26-28 (general), 29-32 (FC), 33-41 (SAS) 2219235911Smav * 2220235911Smav * Protocol identifier uses definitions in scsi_all.h; 2221235911Smav * SPSP_PROTO_FC, SPSP_PROTO_SAS are the only ones used here. 2222235911Smav */ 2223235911Smav 2224235911Smavstruct ses_elm_fc_eip_hdr { 2225235911Smav uint8_t num_phys; 2226235911Smav uint8_t reserved[2]; 2227235911Smav uint8_t dev_slot_num; 2228235911Smav uint8_t node_name[8]; 2229235911Smav}; 2230235911Smav 2231235911Smavstruct ses_elm_fc_noneip_hdr { 2232235911Smav uint8_t num_phys; 2233235911Smav uint8_t reserved; 2234235911Smav uint8_t node_name[8]; 2235235911Smav}; 2236235911Smav 2237235911Smavstruct ses_elm_fc_base_hdr { 2238235911Smav uint8_t num_phys; 2239235911Smav}; 2240235911Smav 2241235911Smavunion ses_elm_fc_hdr { 2242235911Smav struct ses_elm_fc_base_hdr base_hdr; 2243235911Smav struct ses_elm_fc_eip_hdr eip_hdr; 2244235911Smav struct ses_elm_fc_noneip_hdr noneip_hdr; 2245235911Smav}; 2246235911Smav 2247235911Smavstruct ses_elm_fc_port { 2248235911Smav uint8_t port_loop_position; 2249235911Smav uint8_t bypass_reason; 2250235911Smav#define SES_FC_PORT_BYPASS_UNBYPASSED 0x00 2251235911Smav 2252235911Smav#define SES_FC_PORT_BYPASS_LINKFAIL_RATE_TOO_HIGH 0x10 2253235911Smav#define SES_FC_PORT_BYPASS_SYNC_LOSS_RATE_TOO_HIGH 0x11 2254235911Smav#define SES_FC_PORT_BYPASS_SIGNAL_LOSS_RATE_TOO_HIGH 0x12 2255235911Smav#define SES_FC_PORT_BYPASS_SEQPROTO_ERR_RATE_TOO_HIGH 0x13 2256235911Smav#define SES_FC_PORT_BYPASS_INVAL_XMIT_RATE_TOO_HIGH 0x14 2257235911Smav#define SES_FC_PORT_BYPASS_CRC_ERR_RATE_TOO_HIGH 0x15 2258235911Smav 2259235911Smav#define SES_FC_PORT_BYPASS_ERR_RATE_RESERVED_BEGIN 0x16 2260235911Smav#define SES_FC_PORT_BYPASS_ERR_RATE_RESERVED_END 0x1F 2261235911Smav 2262235911Smav#define SES_FC_PORT_BYPASS_LINKFAIL_COUNT_TOO_HIGH 0x20 2263235911Smav#define SES_FC_PORT_BYPASS_SYNC_LOSS_COUNT_TOO_HIGH 0x21 2264235911Smav#define SES_FC_PORT_BYPASS_SIGNAL_LOSS_COUNT_TOO_HIGH 0x22 2265235911Smav#define SES_FC_PORT_BYPASS_SEQPROTO_ERR_COUNT_TOO_HIGH 0x23 2266235911Smav#define SES_FC_PORT_BYPASS_INVAL_XMIT_COUNT_TOO_HIGH 0x24 2267235911Smav#define SES_FC_PORT_BYPASS_CRC_ERR_COUNT_TOO_HIGH 0x25 2268235911Smav 2269235911Smav#define SES_FC_PORT_BYPASS_ERR_COUNT_RESERVED_BEGIN 0x26 2270235911Smav#define SES_FC_PORT_BYPASS_ERR_COUNT_RESERVED_END 0x2F 2271235911Smav 2272235911Smav#define SES_FC_PORT_BYPASS_RESERVED_BEGIN 0x30 2273235911Smav#define SES_FC_PORT_BYPASS_RESERVED_END 0xBF 2274235911Smav 2275235911Smav#define SES_FC_PORT_BYPASS_VENDOR_SPECIFIC_BEGIN 0xC0 2276235911Smav#define SES_FC_PORT_BYPASS_VENDOR_SPECIFIC_END 0xFF 2277235911Smav uint8_t port_req_hard_addr; 2278235911Smav uint8_t n_port_id[3]; 2279235911Smav uint8_t n_port_name[8]; 2280235911Smav}; 2281235911Smav 2282235911Smavstruct ses_elm_sas_device_phy { 2283235911Smav uint8_t byte0; 2284235911Smav /* 2285235911Smav * uint8_t reserved0 : 1, 2286235911Smav * uint8_t device_type : 3, 2287235911Smav * uint8_t reserved1 : 4; 2288235911Smav */ 2289235911Smav 2290235911Smav uint8_t reserved0; 2291235911Smav 2292235911Smav /* Bit positions for initiator and target port protocols */ 2293235911Smav#define SES_SASOBJ_DEV_PHY_SMP 0x2 2294235911Smav#define SES_SASOBJ_DEV_PHY_STP 0x4 2295235911Smav#define SES_SASOBJ_DEV_PHY_SSP 0x8 2296235911Smav /* Select all of the above protocols */ 2297235911Smav#define SES_SASOBJ_DEV_PHY_PROTOMASK 0xe 2298235911Smav uint8_t initiator_ports; 2299235911Smav /* 2300235911Smav * uint8_t reserved0 : 4, 2301235911Smav * uint8_t ssp : 1, 2302235911Smav * uint8_t stp : 1, 2303235911Smav * uint8_t smp : 1, 2304235911Smav * uint8_t reserved1 : 3; 2305235911Smav */ 2306235911Smav uint8_t target_ports; 2307235911Smav /* 2308235911Smav * uint8_t sata_port_selector : 1, 2309235911Smav * uint8_t reserved : 3, 2310235911Smav * uint8_t ssp : 1, 2311235911Smav * uint8_t stp : 1, 2312235911Smav * uint8_t smp : 1, 2313235911Smav * uint8_t sata_device : 1; 2314235911Smav */ 2315235911Smav uint8_t parent_addr[8]; /* SAS address of parent */ 2316235911Smav uint8_t phy_addr[8]; /* SAS address of this phy */ 2317235911Smav uint8_t phy_id; 2318235911Smav uint8_t reserved1[7]; 2319235911Smav}; 2320235911Smav#ifdef _KERNEL 2321235911Smavint ses_elm_sas_dev_phy_sata_dev(struct ses_elm_sas_device_phy *); 2322235911Smavint ses_elm_sas_dev_phy_sata_port(struct ses_elm_sas_device_phy *); 2323235911Smavint ses_elm_sas_dev_phy_dev_type(struct ses_elm_sas_device_phy *); 2324235911Smav#endif /* _KERNEL */ 2325235911Smav 2326235911Smavstruct ses_elm_sas_expander_phy { 2327235911Smav uint8_t connector_index; 2328235911Smav uint8_t other_index; 2329235911Smav}; 2330235911Smav 2331235911Smavstruct ses_elm_sas_port_phy { 2332235911Smav uint8_t phy_id; 2333235911Smav uint8_t reserved; 2334235911Smav uint8_t connector_index; 2335235911Smav uint8_t other_index; 2336235911Smav uint8_t phy_addr[8]; 2337235911Smav}; 2338235911Smav 2339235911Smavstruct ses_elm_sas_type0_base_hdr { 2340235911Smav uint8_t num_phys; 2341235911Smav uint8_t byte1; 2342235911Smav /* 2343235911Smav * uint8_t descriptor_type : 2, 2344235911Smav * uint8_t reserved : 5, 2345235911Smav * uint8_t not_all_phys : 1; 2346235911Smav */ 2347235911Smav#define SES_SASOBJ_TYPE0_NOT_ALL_PHYS(obj) \ 2348235911Smav ((obj)->byte1 & 0x1) 2349235911Smav}; 2350235911Smav 2351235911Smavstruct ses_elm_sas_type0_eip_hdr { 2352235911Smav struct ses_elm_sas_type0_base_hdr base; 2353235911Smav uint8_t reserved; 2354235911Smav uint8_t dev_slot_num; 2355235911Smav}; 2356235911Smav 2357235911Smavstruct ses_elm_sas_type1_expander_hdr { 2358235911Smav uint8_t num_phys; 2359235911Smav uint8_t byte1; 2360235911Smav /* 2361235911Smav * uint8_t descriptor_type : 2, 2362235911Smav * uint8_t reserved : 6; 2363235911Smav */ 2364235911Smav uint8_t reserved[2]; 2365235911Smav uint8_t sas_addr[8]; 2366235911Smav}; 2367235911Smav 2368235911Smavstruct ses_elm_sas_type1_nonexpander_hdr { 2369235911Smav uint8_t num_phys; 2370235911Smav uint8_t byte1; 2371235911Smav /* 2372235911Smav * uint8_t descriptor_type : 2, 2373235911Smav * uint8_t reserved : 6; 2374235911Smav */ 2375235911Smav uint8_t reserved[2]; 2376235911Smav}; 2377235911Smav 2378235911Smav/* NB: This is only usable for as long as the headers happen to match */ 2379235911Smavstruct ses_elm_sas_base_hdr { 2380235911Smav uint8_t num_phys; 2381235911Smav uint8_t byte1; 2382235911Smav /* 2383235911Smav * uint8_t descriptor_type : 2, 2384235911Smav * uint8_t descr_specific : 6; 2385235911Smav */ 2386235911Smav#define SES_SASOBJ_TYPE_SLOT 0 2387235911Smav#define SES_SASOBJ_TYPE_OTHER 1 2388235911Smav}; 2389235911Smav 2390235911Smavunion ses_elm_sas_hdr { 2391235911Smav struct ses_elm_sas_base_hdr base_hdr; 2392235911Smav struct ses_elm_sas_type0_base_hdr type0_noneip; 2393235911Smav struct ses_elm_sas_type0_eip_hdr type0_eip; 2394235911Smav struct ses_elm_sas_type1_expander_hdr type1_exp; 2395235911Smav struct ses_elm_sas_type1_nonexpander_hdr type1_nonexp; 2396235911Smav}; 2397235911Smavint ses_elm_sas_type0_not_all_phys(union ses_elm_sas_hdr *); 2398235911Smavint ses_elm_sas_descr_type(union ses_elm_sas_hdr *); 2399235911Smav 2400235911Smavstruct ses_elm_addlstatus_base_hdr { 2401235911Smav uint8_t byte0; 2402235911Smav /* 2403235911Smav * uint8_t invalid : 1, 2404235911Smav * uint8_t reserved : 2, 2405235911Smav * uint8_t eip : 1, 2406235911Smav * uint8_t proto_id : 4; 2407235911Smav */ 2408235911Smav uint8_t length; 2409235911Smav}; 2410235911Smavint ses_elm_addlstatus_proto(struct ses_elm_addlstatus_base_hdr *); 2411235911Smavint ses_elm_addlstatus_eip(struct ses_elm_addlstatus_base_hdr *); 2412235911Smavint ses_elm_addlstatus_invalid(struct ses_elm_addlstatus_base_hdr *); 2413235911Smav 2414235911Smavstruct ses_elm_addlstatus_eip_hdr { 2415235911Smav struct ses_elm_addlstatus_base_hdr base; 2416309042Smav uint8_t byte2; 2417309042Smav#define SES_ADDL_EIP_EIIOE 1 2418235911Smav uint8_t element_index; 2419235911Smav /* NB: This define (currently) applies to all eip=1 headers */ 2420235911Smav#define SES_EIP_HDR_EXTRA_LEN 2 2421235911Smav}; 2422235911Smav 2423235911Smavunion ses_elm_addlstatus_descr_hdr { 2424235911Smav struct ses_elm_addlstatus_base_hdr base; 2425235911Smav struct ses_elm_addlstatus_eip_hdr eip; 2426235911Smav}; 2427235911Smav 2428235911Smavunion ses_elm_addlstatus_proto_hdr { 2429235911Smav union ses_elm_fc_hdr fc; 2430235911Smav union ses_elm_sas_hdr sas; 2431235911Smav}; 2432235911Smav 2433235911Smav/*============================= Namespace Cleanup ============================*/ 2434235911Smav#undef GEN_HDR_ACCESSORS 2435235911Smav#undef GEN_ACCESSORS 2436235911Smav#undef GEN_HDR_SETTER 2437235911Smav#undef GEN_HDR_GETTER 2438235911Smav#undef GEN_SETTER 2439235911Smav#undef GEN_GETTER 2440235911Smav#undef MK_ENUM 2441235911Smav 2442235911Smav#endif /* _SCSI_SES_H_ */ 2443