ses2_impl.h revision 275c9da86e89f8abf71135cf63d9fc23671b2e60
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _PLUGIN_SES_IMPL_H
#define _PLUGIN_SES_IMPL_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/sysmacros.h>
#include <sys/ccompile.h>
#include <stdarg.h>
#include <libnvpair.h>
#include <scsi/libses_plugin.h>
#pragma pack(1)
/*
*/
#define SES2_TIMEOUT 60
/*
* SES-2 Enclosure Descriptor Header (Table 8, 6.1.2.2)
*/
typedef struct ses2_ed_hdr_impl {
sehi_n_esps :3,
_reserved1 :1,
sehi_rel_esp_id :3,
_reserved2 :1);
/*
* SES-2 Enclosure Descriptor (Table 8, 6.1.2.2)
*/
typedef struct ses2_ed_impl {
char st_vendor_id[8];
char st_product_id[16];
char st_product_revision[4];
/*
* SES-2 Type Descriptor Header (Table 9, 6.1.2.3)
*/
typedef struct ses2_td_hdr_impl {
/*
* SES-2 Configuration diagnostic page (Table 7, 6.1.2.1)
*/
typedef struct ses2_config_page_impl {
/*
* Logically we should be able to use 4 or 8 bytes for a minimum allocation;
* however, it seems at least some devices will fail the request in that case.
*/
#define SES2_MIN_DIAGPAGE_ALLOC 512
/*
* SES-2 Element Control and Overall Control fields (Table 59, 7.2.2)
*/
typedef struct ses2_cmn_elem_ctl_impl {
_reserved1 :4,
seci_rst_swap :1,
seci_disable :1,
seci_prdfail :1,
seci_select :1);
typedef struct ses2_elem_ctl_impl {
/*
* SES-2 Element Status and Overall Status fields (Table 60, 7.2.3)
*/
typedef struct ses2_cmn_elem_status_impl {
sesi_status_code :4,
sesi_swap :1,
sesi_disabled :1,
sesi_prdfail :1,
_reserved1 :1);
typedef struct ses2_elem_status_impl {
/*
* SES-2 Device element for the Enclosure Control diagnostic page.
*/
typedef struct ses2_device_ctl_impl {
_reserved2 :1,
sdci_rqst_ident :1,
sdci_rqst_remove :1,
sdci_rqst_insert :1,
_reserved3 :1,
sdci_rqst_active :1);
_reserved4 :2,
sdci_device_off :1,
sdci_rqst_fault :1,
_reserved5 :2);
/*
* SES-2 Device element for the Enclosure Status diagnostic page
* (Table 64, 7.3.2).
*/
typedef struct ses2_device_status_impl {
sdsi_report :1,
sdsi_ident :1,
sdsi_rmv :1,
sdsi_bypassed_b :1,
sdsi_bypassed_a :1,
sdsi_device_off :1,
typedef struct ses2_array_device_ctl_impl {
sadci_rqst_ok :1);
_reserved1 :1,
sadci_rqst_ident :1,
_reserved2 :1,
sadci_rqst_active :1);
_reserved3 :2,
sadci_device_off :1,
sadci_rqst_fault :1,
_reserved4 :2);
/*
* SES-2 Array Device element for the Enclosure Status diagnostic page
* (Table 66, 7.3.3)
*/
typedef struct ses2_array_device_status_impl {
sadsi_rr_abort :1,
sadsi_rebuild :1,
sadsi_cons_chk :1,
sadsi_hot_spare :1,
sadsi_ok :1);
sadsi_report :1,
sadsi_ident :1,
sadsi_rmv :1,
sadsi_bypassed_b :1,
sadsi_bypassed_a :1,
sadsi_device_off :1,
/*
* SES-2 Power Supply element for control-type diagnostic pages (T68).
*/
typedef struct ses2_psu_ctl_impl {
_reserved1 :7,
spci_rqst_ident :1);
_reserved3 :5,
spci_rqst_on :1,
spci_rqst_fail :1,
_reserved4 :1);
/*
* SES-2 Power Supply element for status-type diagnostic pages (Table 69, 7.3.4)
*/
typedef struct ses2_psu_status_impl {
_reserved1 :7,
spsi_ident :1);
_reserved2 :1,
_reserved3 :4);
spsi_dc_fail :1,
spsi_ac_fail :1,
spsi_temp_warn :1,
spsi_off :1,
spsi_rqsted_on :1,
spsi_fail :1,
spsi_hot_swap :1);
/*
* SES-2 Cooling element for control-type diagnostic pages (Table 70).
*/
typedef struct ses2_cooling_ctl_impl {
_reserved1 :7,
scci_rqst_ident :1);
_reserved3 :2,
scci_rqst_on :1,
scci_rqst_fail :1,
_reserved4 :1);
/*
* SES-2 Cooling element for status-type diagnostic pages (Table 71, 7.3.5)
*/
typedef struct ses2_cooling_status_impl {
_reserved1 :4,
scsi_ident :1);
_reserved2 :1,
scsi_off :1,
scsi_fail :1,
_reserved3 :1);
/*
* The fan_speed fields are multiplied by this factor to obtain the actual
* number of RPMs.
*/
#define SES2_ES_COOLING_SPEED_FACTOR 10
#define SES2_ES_COOLING_ST_FAN_SPEED(csip) \
/*
* SES-2 Temperature Sensor element for control-type diagnostic pages (T74).
*/
typedef struct ses2_temp_ctl_impl {
_reserved1 :6,
stci_rqst_fail :1,
stci_rqst_ident :1);
/*
* SES-2 Temperature Sensor element for status-type diagnostic pages
* (Table 74, 7.3.6)
*/
typedef struct ses2_temp_status_impl {
_reserved1 :6,
stsi_fail :1,
stsi_ident :1);
stsi_ut_warn :1,
stsi_ut_fail :1,
stsi_ot_warn :1,
stsi_ot_fail :1);
#define SES2_ES_TEMP_OFFSET (-20)
#define SES2_ES_TEMP_ST_TEMPERATURE(tsip) \
/*
* SES-2 Door Lock element for control-type diagnostic pages (T76).
*/
typedef struct ses2_lock_ctl_impl {
_reserved1 :6,
slci_rqst_fail :1,
slci_rqst_ident :1);
slci_unlock :1,
_reserved3 :7);
/*
* SES-2 Door Lock element for status-type diagnostic pages (Table 77, 7.3.7)
*/
typedef struct ses2_lock_status_impl {
_reserved1 :6,
slsi_fail :1,
slsi_ident :1);
slsi_unlocked :1,
_reserved3 :7);
/*
* SES-2 Audible Alarm element for control-type diagnostic pages (T78).
*/
typedef struct ses2_alarm_ctl_impl {
_reserved1 :6,
saci_rqst_fail :1,
saci_rqst_ident :1);
saci_unrecov :1,
saci_crit :1,
saci_noncrit :1,
saci_info :1,
saci_set_remind :1,
_reserved3 :1,
saci_set_mute :1,
_reserved4 :1);
/*
* SES-2 Audible Alarm element for status-type diagnostic pages
* (Table 79, 7.3.8)
*/
typedef struct ses2_alarm_status_impl {
_reserved1 :6,
sasi_fail :1,
sasi_ident :1);
sasi_unrecov :1,
sasi_crit :1,
sasi_noncrit :1,
sasi_info :1,
sasi_remind :1,
_reserved3 :1,
sasi_muted :1,
sasi_rqst_mute :1);
/*
* SES-2 Enclosure Services Controller Electronics element for control-type
* diagnostic pages (Table 80, 7.3.9).
*/
typedef struct ses2_controller_ctl_impl {
_reserved1 :6,
scci_rqst_fail :1,
scci_rqst_ident :1);
_reserved2 :7);
/*
* SES-2 Enclosure Services Controller Electronics element for status-type
* diagnostic pages (Table 81, 7.3.9),
*/
typedef struct ses2_controller_status_impl {
_reserved1 :6,
scsi_fail :1,
scsi_ident :1);
scsi_report :1,
_reserved2 :7);
_reserved3 :7,
scsi_hot_swap :1);
/*
* SES-2 SCC Controller Electronics element for control-type diagnostic pages
* (Table 82, 7.3.10).
*/
typedef struct ses2_scc_ctl_impl {
_reserved1 :6,
ssci_rqst_fail :1,
ssci_rqst_ident :1);
/*
* SES-2 SCC Controller Electronics element for status-type diagnostic pages
* (Table 83, 7.3.10)
*/
typedef struct ses2_scc_status_impl {
_reserved1 :6,
sss_fail :1,
sss_ident :1);
sss_report :1,
_reserved2 :7);
/*
* SES-2 Nonvolatile Cache element for control-type diagnostic pages
* (Table 84, 7.3.11).
*/
typedef struct ses2_nvcache_ctl_impl {
_reserved1 :6,
snci_rqst_fail :1,
snci_rqst_ident :1);
/*
* SES-2 Nonvolatile Cache element for status-type diagnostic pages (Table 85,
* 7.3.11)
*/
typedef struct ses2_nvcache_status_impl {
_reserved1 :4,
snsi_fail :1,
snsi_ident :1);
/*
* Ibid., Table 86 defines the size multipliers as follows:
*
* 00b - bytes
* 01b - 1<<10 bytes
* 10b - 1<<20 bytes
* 11b - 1<<30 bytes
*
* We will calculate the actual size in bytes by doing
*
* nvcache_size << (SES2_NVCACHE_SHIFT * multiplier)
*/
#define SES2_NVCACHE_SHIFT 10
#define SES2_NVCACHE_SIZE(nsip) \
/*
* SES-2 Invalid Operation Reason element for status-type diagnostic pages
* (Table 88, 7.3.12)
*/
typedef struct ses2_invop_reason_status_impl {
sirsi_priv_ms6 :6,
sirsi_invop_type :2);
/*
* Ibid., Invop Type values (Table 89)
*/
typedef enum ses2_invop_type {
SES2_INVOP_SEND_PAGE_CODE = 0x0,
SES2_INVOP_SEND_PAGE_FORMAT = 0x1,
/*
* Ibid., Invalid Operation Reason element for status-type diagnostic pages
* with Invop Type of 00b (Table 90)
*/
typedef struct ses2_invop_code_status_impl {
_reserved1 :5,
sicsi_invop_type :2);
/*
* Ibid., Invalid Operation Reason element for status-type diagnostic pages
* with Invop Type of 01b (Table 91)
*/
typedef struct ses2_invop_format_status_impl {
sifsi_bit_number :3,
_reserved1 :3,
sifsi_invop_type :2);
/*
* SES-2 Uninterruptible Power Supply element for control-type diagnostic
* pages (Table 93, 7.3.13)
*/
typedef struct ses2_ups_ctl_impl {
_reserved2 :6,
suci_rqst_fail :1,
suci_rqst_ident :1);
/*
* SES-2 Uninterruptible Power Supply element for status-type diagnostic pages
* (Table 94, 7.3.13)
*/
typedef struct ses2_ups_status_impl {
susi_intf_fail :1,
susi_warn :1,
susi_ups_fail :1,
susi_dc_fail :1,
susi_ac_fail :1,
susi_ac_qual :1,
susi_ac_hi :1,
susi_ac_lo :1);
susi_bpf :1,
susi_batt_fail :1,
_reserved1 :4,
susi_fail :1,
susi_ident :1);
/*
* SES-2 Display element for control-type diagnostic pages (Table 95, 7.3.14)
*/
typedef struct ses2_display_ctl_impl {
_reserved1 :4,
sdci_rqst_fail :1,
sdci_rqst_ident :1);
/*
* SES-2 Display element for status-type diagnostic pages (Table 97, 7.3.14)
*/
typedef struct ses2_display_status_impl {
_reserved1 :3,
sdsi_fail :1,
sdsi_ident :1);
/*
* SES-2 Key Pad Entry element for control-type diagnostic pages (Table 99).
*/
typedef struct ses2_keypad_ctl_impl {
_reserved1 :6,
skci_rqst_fail :1,
skci_rqst_ident :1);
/*
* SES-2 Key Pad Entry element for status-type diagnostic pages (Table 100,
* 7.3.15)
*/
typedef struct ses2_keypad_status_impl {
_reserved1 :6,
sksi_fail :1,
sksi_ident :1);
/*
* SES-2 Enclosure element for control-type diagnostic pages (Table 101).
*/
typedef struct ses2_enclosure_ctl_impl {
_reserved1 :7,
seci_rqst_ident :1);
/*
* SES-2 Enclosure element for status-type diagnostic pages (Table 101, 7.3.16)
*/
typedef struct ses2_enclosure_status_impl {
_reserved1 :7,
sesi_ident :1);
sesi_power_delay :6);
sesi_power_duration :6);
/*
* SES-2 SCSI Port/Transceiver element for control-type diagnostic pages (T103)
*/
typedef struct ses2_port_ctl_impl {
_reserved1 :6,
spci_rqst_fail :1,
spci_rqst_ident :1);
_reserved3 :4,
spci_disable :1,
_reserved4 :3);
/*
* SES-2 SCSI Port/Transceiver element for status-type diagnostic pages
* (Table 104, 7.3.17)
*/
typedef struct ses2_port_status_impl {
_reserved1 :6,
spsi_fail :1,
spsi_ident :1);
spsi_report :1,
_reserved2 :7);
spsi_xmit_fail :1,
spsi_lol :1,
_reserved3 :2,
spsi_disabled :1,
_reserved4 :3);
/*
* SES-2 Language element for control-type diagnostic pages (T105)
*/
typedef struct ses2_lang_ctl_impl {
_reserved1 :7,
slci_rqst_ident :1);
/*
* SES-2 Language element for status-type diagnostic pages (Table 105, 7.3.18)
*/
typedef struct ses2_lang_status_impl {
_reserved1 :7,
slsi_ident :1);
/*
* SES-2 Communication Port element for control-type diagnostic pages
* (Table 107, 7.3.19).
*/
typedef struct ses2_comm_ctl_impl {
_reserved1 :6,
scci_rqst_fail :1,
scci_rqst_ident :1);
scci_disable :1,
_reserved3 :7);
/*
* SES-2 Communication Port element for status-type diagnostic pages
* (Table 108, 7.3.19)
*/
typedef struct ses2_comm_status_impl {
_reserved1 :6,
scsi_fail :1,
scsi_ident :1);
scsi_disabled :1,
_reserved3 :7);
/*
* SES-2 Voltage Sensor element for control-type diagnostic pages
* (Table 109, 7.3.20).
*/
typedef struct ses2_voltage_ctl_impl {
_reserved1 :6,
svci_rqst_fail :1,
svci_rqst_ident :1);
/*
* SES-2 Voltage Sensor element for status-type diagnostic pages
* (Table 110, 7.3.20).
*/
typedef struct ses2_voltage_status_impl {
svsi_crit_under :1,
svsi_crit_over :1,
svsi_warn_under :1,
svsi_warn_over :1,
_reserved1 :2,
svsi_fail :1,
svsi_ident :1);
/*
* Ibid. defines the svsi_voltage field as a 16-bit signed 2's complement
* integer, represented in units of 10 mV. AC voltages are RMS.
*/
#define SES2_VOLTAGE_MULTIPLIER (0.01)
#define SES2_VOLTAGE(vsip) \
/*
* SES-2 Current Sensor element for control-type diagnostic pages
* (Table 111, 7.3.21).
*/
typedef struct ses2_current_ctl_impl {
_reserved1 :6,
scci_rqst_fail :1,
scci_rqst_ident :1);
/*
* SES-2 Current Sensor element for status-type diagnostic pages
* (Table 112, 7.3.21)
*/
typedef struct ses2_current_status_impl {
_reserved1 :1,
scsi_crit_over :1,
_reserved2 :1,
scsi_warn_over :1,
_reserved3 :2,
scsi_fail :1,
scsi_ident :1);
/*
* Ibid. defines the scsi_voltage field in the same way as for voltage above.
* Units here are 10 mA. AC amperages are RMS.
*/
#define SES2_CURRENT_MULTIPLIER (0.01)
#define SES2_CURRENT(csip) \
/*
* SES-2 SCSI Target Port element for control-type diagnostic pages
* (Table 113, 7.3.22), SCSI Initiator Port element for control-type
* diagnostic pages (Table 115, 7.3.23).
*/
typedef struct ses2_itp_ctl_impl {
_reserved1 :6,
sici_rqst_fail :1,
sici_rqst_ident :1);
sici_enable :1,
_reserved3 :7);
/*
* SES-2 SCSI Target Port element for status-type diagnostic pages (Table 114,
* 7.3.22), SCSI Initiator Port element for status-type diagnostic pages
* (Table 116, 7.3.23)
*/
typedef struct ses2_itp_status_impl {
_reserved1 :6,
sisi_fail :1,
sisi_ident :1);
sisi_report :1,
_reserved2 :7);
sisi_enabled :1,
_reserved3 :7);
/*
* SES-2 Simple Subenclosure element for control-type diagnostic pages
* (Table 117, 7.3.24).
*/
typedef struct ses2_ss_ctl_impl {
_reserved1 :6,
ssci_rqst_fail :1,
ssci_rqst_ident :1);
/*
* SES-2 Simple Subenclosure element for status-type diagnostic pages
* (Table 117, 7.3.24)
*/
typedef struct ses2_ss_status_impl {
_reserved1 :6,
sss_fail :1,
sss_ident :1);
/*
* SES-2 SAS Expander element for control-type diagnostic pages
* (Table 119, 7.3.25).
*/
typedef struct ses2_expander_ctl_impl {
_reserved1 :6,
seci_rqst_fail :1,
seci_rqst_ident :1);
/*
* SES-2 SAS Expander element for status-type diagnostic pages (Table 120,
* 7.3.25)
*/
typedef struct ses2_expander_status_impl {
_reserved1 :6,
sesi_fail :1,
sesi_ident :1);
/*
* SES-2 SAS Connector element for control-type diagnostic pages (Table 121,
* 7.3.26).
*/
typedef struct ses2_sasconn_ctl_impl {
_reserved1 :7,
ssci_rqst_ident :1);
_reserved3 :6,
ssci_rqst_fail :1,
_reserved4 :1);
/*
* SES-2 SAS Connector element for status-type diagnostic pages (Table 122,
* 7.3.26)
*/
typedef struct ses2_sasconn_status_impl {
sss_ident :1);
_reserved1 :6,
sss_fail :1,
_reserved2 :1);
/*
* SES-2 Enclosure Control diagnostic page (Table 10, 6.1.3)
*/
typedef struct ses2_control_page_impl {
scpi_unrecov :1,
scpi_crit :1,
scpi_noncrit :1,
scpi_info :1,
_reserved1 :4);
/*
* SES-2 Enclosure Status (Table 11, 6.1.4)
*/
typedef struct ses2_status_page_impl {
sspi_unrecov :1,
sspi_crit :1,
sspi_noncrit :1,
sspi_info :1,
sspi_invop :1,
_reserved1 :3);
/*
* SES-2 Help Text diagnostic page (Table 13, 6.1.5).
*/
typedef struct ses2_help_page_impl {
char shpi_help_text[1];
/*
* SES-2 String Out diagnostic page (Table 14, 6.1.6).
*/
typedef struct ses2_string_out_page_impl {
/*
* SES-2 String In diagnostic page (Table 15, 6.1.7).
*/
typedef struct ses2_string_in_page_impl {
/*
* SES-2 Threshold fields - (Table 17, 6.1.8), (Table 19, 6.1.9).
*/
typedef struct ses2_threshold_impl {
/*
* SES-2 Threshold Out diagnostic page (Table 16, 6.1.8).
*/
typedef struct ses2_threshold_out_page_impl {
/*
* SES-2 Threshold In diagnostic page (Table 18, 6.1.9).
*/
typedef struct ses2_threshold_in_page_impl {
_reserved1 :4,
stipi_invop :1,
_reserved2 :3);
/*
* SES-2 Element Descriptor diagnostic page (Table 20, 6.1.10).
*/
typedef struct ses2_elem_desc_page_impl {
/*
*/
typedef struct ses2_elem_descriptor_impl {
char sedi_descriptor[1];
/*
* SES-2 Short Enclosure Status diagnostic page (Table 23, 6.1.11).
*/
typedef struct ses2_short_status_page_impl {
/*
* SES-2 Enclosure Busy diagnostic page (Table 24, 6.1.12).
*/
typedef struct ses2_enclosure_busy_page_impl {
sebpi_busy :1,
sebpi_vs_1_1 :7);
/*
* SES-2 Additional Element Status diagnostic page (Table 25, 6.1.13).
*/
typedef struct ses2_aes_page_impl {
/*
* SES-2 Additional Element Status descriptor (EIP == 1) (Table 26, 6.1.13).
*/
typedef struct ses2_aes_descr_eip_impl {
sadei_eip :1,
_reserved1 :2,
sadei_invalid :1);
/*
* SES-2 Additional Element Status descriptor (EIP == 0) (Table 27, 6.1.13).
*/
typedef struct ses2_aes_descr_impl {
sadei_eip :1,
_reserved1 :2,
sadei_invalid :1);
/*
* SES-2 Port descriptor (Table 30, 6.1.13.2).
*/
typedef struct ses2_aes_port_descr_impl {
/*
* SES-2 Additional Element Status descriptor for FC (Table 28, 6.1.13.2).
*/
typedef struct ses2_aes_descr_fc_eip_impl {
/*
* SES-2 Additional Element Status descriptor for FC (EIP == 0)
* (Table 29, 6.1.13.2).
*/
typedef struct ses2_aes_descr_fc_impl {
/*
* SES-2 Additional Element Status descriptor for SAS (Table 31, 6.1.13.3).
*/
typedef struct ses2_aes_descr_sas_impl {
_specific2 :6,
typedef enum ses2_aes_descr_sas_type {
SES2_AESD_SAS_DEVICE = 0,
typedef struct ses2_aes_phy0_descr_impl {
_reserved1 :4,
_reserved2 :1);
_reserved4 :1,
_reserved5 :4);
_reserved6 :3,
typedef struct ses2_aes_descr_sas0_eip_impl {
_reserved1 :5,
typedef struct ses2_aes_descr_sas0_impl {
_reserved1 :5,
/*
* SES-2 Additional Element Status for SAS Expander elements
* (Table 36, 6.1.13.3.3).
*/
typedef struct ses2_aes_exp_phy_descr_impl {
typedef struct ses2_aes_descr_exp_impl {
_reserved1 :6,
/*
* Enclosure Services Controller Electronics elements (Table 38, 6.1.13.3.4).
*/
typedef struct ses2_aes_phy1_descr_impl {
typedef struct ses2_aes_descr_sas1_impl {
_reserved1 :6,
/*
* SES-2 Subenclosure Help Text diagnostic page (Table 40, 6.1.14).
*/
typedef struct ses2_subhelp_page_impl {
/*
* SES-2 Subenclosure help text format (Table 41, 6.1.14).
*/
typedef struct ses2_subhelp_text_impl {
char ssti_subenclosure_help_text[1];
#define SES2_SUBHELP_LEN(stip) \
/*
* SES-2 Subenclosure String Out diagnostic page (Table 42, 6.1.15).
*/
typedef struct ses2_substring_out_page_impl {
/*
* SES-2 Subenclosure String In diagnostic page (Table 43, 6.1.16).
*/
typedef struct ses2_substring_in_page_impl {
/*
* SES-2 Subenclosure string in data format (Table 44, 6.1.16).
*/
typedef struct ses2_substring_in_data_impl {
#define SES2_SUBSTR_LEN(sdip) \
((sdip)->ssidi_substring_data_length + \
/*
* SES-2 Supported SES Diagnostic Pages diagnostic page (Table 45, 6.1.17).
*/
typedef struct ses2_supported_ses_diag_page_impl {
/*
* SES-2 Download Microcode Control diagnostic page (Table 46, 6.1.18).
*/
typedef struct ses2_ucode_ctl_page_impl {
/*
* SES-2 Download Microcode Status diagnostic page (Table 48-49, 6.1.19).
*/
typedef struct ses2_ucode_status_descr_impl {
typedef struct ses2_ucode_status_page_impl {
/*
* SES-2 Subenclosure Nickname Control diagnostic page (Table 51, 6.1.20).
*/
typedef struct ses2_subnick_ctl_page_impl {
char sspci_subenclosure_nickname[32];
/*
* SES-2 Subenclosure Nickname Status diagnostic page (Table 52-53, 6.1.21).
*/
typedef struct ses2_subnick_descr_impl {
char ssdi_subenclosure_nickname[32];
typedef struct ses2_subnick_status_page_impl {
/*
* SES-2 Mode page code for enclosure services devices (Table 57, 6.3.2).
*/
typedef struct ses2_esm_mode_page_impl {
sempi_page_code :6,
_reserved1 :1,
sempi_ps :1);
sempi_enbltc :1,
_reserved3 :7);
#pragma pack()
extern ses_pagedesc_t ses2_pages[];
nvpair_t *);
typedef struct ses2_ctl_prop {
const char *scp_name;
ses2_diag_page_t, nvpair_t *);
#define SES_COMMON_CTL_PROPS \
{ \
.scp_name = SES_PROP_SWAP, \
}, \
{ \
.scp_name = SES_PROP_DISABLED, \
}, \
{ \
.scp_name = SES_PROP_PRDFAIL, \
}
typedef struct ses2_ctl_desc {
const ses2_ctl_prop_t *scd_props;
nvlist_t *);
nvlist_t *);
nvlist_t *);
#ifdef __cplusplus
}
#endif
#endif /* _PLUGIN_SES_IMPL_H */