40#ifndef _SCSI_SMP_ALL_H
41#define _SCSI_SMP_ALL_H 1
43#define SMP_FRAME_TYPE_REQUEST 0x40
44#define SMP_FRAME_TYPE_RESPONSE 0x41
53#define SMP_FUNC_REPORT_GENERAL 0x00
54#define SMP_FUNC_REPORT_MANUF_INFO 0x01
55#define SMP_FUNC_REPORT_SC_STATUS 0x03
56#define SMP_FUNC_REPORT_ZONE_PERM_TBL 0x04
57#define SMP_FUNC_REPORT_ZONE_MAN_PWD 0x05
58#define SMP_FUNC_REPORT_BROADCAST 0x06
61#define SMP_FUNC_DISCOVER 0x10
62#define SMP_FUNC_REPORT_PHY_ERR_LOG 0x11
63#define SMP_FUNC_REPORT_PHY_SATA 0x12
64#define SMP_FUNC_REPORT_ROUTE_INFO 0x13
65#define SMP_FUNC_REPORT_PHY_EVENT 0x14
68#define SMP_FUNC_DISCOVER_LIST 0x20
69#define SMP_FUNC_REPORT_PHY_EVENT_LIST 0x21
70#define SMP_FUNC_REPORT_EXP_RTL 0x22
77#define SMP_FUNC_CONFIG_GENERAL 0x80
78#define SMP_FUNC_ENABLE_DISABLE_ZONING 0x81
79#define SMP_FUNC_ZONED_BROADCAST 0x85
80#define SMP_FUNC_ZONE_LOCK 0x86
81#define SMP_FUNC_ZONE_ACTIVATE 0x87
82#define SMP_FUNC_ZONE_UNLOCK 0x88
83#define SMP_FUNC_CONFIG_ZM_PWD 0x89
84#define SMP_FUNC_CONFIG_ZONE_PHY_INFO 0x8a
85#define SMP_FUNC_CONFIG_ZONE_PERM_TBL 0x8b
88#define SMP_FUNC_CONFIG_ROUTE_INFO 0x90
89#define SMP_FUNC_PHY_CONTROL 0x91
90#define SMP_FUNC_PHY_TEST_FUNC 0x92
91#define SMP_FUNC_CONFIG_PHY_EVENT 0x93
99#define SMP_FR_ACCEPTED 0x00
100#define SMP_FR_UNKNOWN_FUNC 0x01
101#define SMP_FR_FUNCTION_FAILED 0x02
102#define SMP_FR_INVALID_REQ_FRAME_LEN 0x03
103#define SMP_FR_INVALID_EXP_CHG_CNT 0x04
104#define SMP_FR_BUSY 0x05
105#define SMP_FR_INCOMPLETE_DESC_LIST 0x06
106#define SMP_FR_PHY_DOES_NOT_EXIST 0x10
107#define SMP_FR_INDEX_DOES_NOT_EXIST 0x11
108#define SMP_FR_PHY_DOES_NOT_SUP_SATA 0x12
109#define SMP_FR_UNKNOWN_PHY_OP 0x13
110#define SMP_FR_UNKNOWN_PHY_TEST_FUNC 0x14
111#define SMP_FR_PHY_TEST_FUNC_INPROG 0x15
112#define SMP_FR_PHY_VACANT 0x16
113#define SMP_FR_UNKNOWN_PHY_EVENT_SRC 0x17
114#define SMP_FR_UNKNOWN_DESC_TYPE 0x18
115#define SMP_FR_UNKNOWN_PHY_FILTER 0x19
116#define SMP_FR_AFFILIATION_VIOLATION 0x1a
117#define SMP_FR_SMP_ZONE_VIOLATION 0x20
118#define SMP_FR_NO_MGMT_ACCESS_RIGHTS 0x21
119#define SMP_FR_UNKNOWN_ED_ZONING_VAL 0x22
120#define SMP_FR_ZONE_LOCK_VIOLATION 0x23
121#define SMP_FR_NOT_ACTIVATED 0x24
122#define SMP_FR_ZG_OUT_OF_RANGE 0x25
123#define SMP_FR_NO_PHYS_PRESENCE 0x26
124#define SMP_FR_SAVING_NOT_SUP 0x27
125#define SMP_FR_SRC_ZONE_DNE 0x28
126#define SMP_FR_DISABLED_PWD_NOT_SUP 0x29
146#define SMP_RG_RESPONSE_LEN 0x11
150#define SMP_RG_LONG_RESPONSE 0x80
153#define SMP_RG_TABLE_TO_TABLE_SUP 0x80
154#define SMP_RG_ZONE_CONFIGURING 0x40
155#define SMP_RG_SELF_CONFIGURING 0x20
156#define SMP_RG_STP_CONTINUE_AWT 0x10
157#define SMP_RG_OPEN_REJECT_RETRY_SUP 0x08
158#define SMP_RG_CONFIGURES_OTHERS 0x04
159#define SMP_RG_CONFIGURING 0x02
160#define SMP_RG_EXT_CONFIG_ROUTE_TABLE 0x01
169#define SMP_RG_NUM_ZONE_GROUPS_MASK 0xc0
170#define SMP_RG_NUM_ZONE_GROUPS_SHIFT 6
171#define SMP_RG_ZONE_LOCKED 0x10
172#define SMP_RG_PP_SUPPORTED 0x08
173#define SMP_RG_PP_ASSERTED 0x04
174#define SMP_RG_ZONING_SUPPORTED 0x02
175#define SMP_RG_ZONING_ENABLED 0x01
177#define SMP_RG_SAVING 0x10
178#define SMP_RG_SAVING_ZM_PWD_SUP 0x08
179#define SMP_RG_SAVING_PHY_INFO_SUP 0x04
180#define SMP_RG_SAVING_ZPERM_TAB_SUP 0x02
181#define SMP_RG_SAVING_ZENABLED_SUP 0x01
191#define SMP_RG_REDUCED_FUNCTIONALITY 0x80
214#define SMP_RMI_REQUEST_LEN 0x00
224#define SMP_RMI_RESPONSE_LEN 0x0e
228#define SMP_RMI_SAS11_FORMAT 0x01
250#define SMP_DIS_REQUEST_LEN 0x02
253#define SMP_DIS_IGNORE_ZONE_GROUP 0x01
265#define SMP_DIS_RESPONSE_LEN 0x20
271#define SMP_DIS_AD_TYPE_MASK 0x70
272#define SMP_DIS_AD_TYPE_NONE 0x00
273#define SMP_DIS_AD_TYPE_SAS_SATA 0x10
274#define SMP_DIS_AD_TYPE_EXP 0x20
275#define SMP_DIS_AD_TYPE_EXP_OLD 0x30
276#define SMP_DIS_ATTACH_REASON_MASK 0x0f
278#define SMP_DIS_LR_MASK 0x0f
279#define SMP_DIS_LR_DISABLED 0x01
280#define SMP_DIS_LR_PHY_RES_PROB 0x02
281#define SMP_DIS_LR_SPINUP_HOLD 0x03
282#define SMP_DIS_LR_PORT_SEL 0x04
283#define SMP_DIS_LR_RESET_IN_PROG 0x05
284#define SMP_DIS_LR_UNSUP_PHY_ATTACHED 0x06
285#define SMP_DIS_LR_G1_15GBPS 0x08
286#define SMP_DIS_LR_G2_30GBPS 0x09
287#define SMP_DIS_LR_G3_60GBPS 0x0a
289#define SMP_DIS_ATTACHED_SSP_INIT 0x08
290#define SMP_DIS_ATTACHED_STP_INIT 0x04
291#define SMP_DIS_ATTACHED_SMP_INIT 0x02
292#define SMP_DIS_ATTACHED_SATA_HOST 0x01
294#define SMP_DIS_ATTACHED_SATA_PORTSEL 0x80
295#define SMP_DIS_STP_BUFFER_TOO_SMALL 0x10
296#define SMP_DIS_ATTACHED_SSP_TARG 0x08
297#define SMP_DIS_ATTACHED_STP_TARG 0x04
298#define SMP_DIS_ATTACHED_SMP_TARG 0x02
299#define SMP_DIS_ATTACHED_SATA_DEV 0x01
304#define SMP_DIS_ATT_SLUMB_CAP 0x10
305#define SMP_DIS_ATT_PAR_CAP 0x08
306#define SMP_DIS_ATT_IN_ZPSDS_PER 0x04
307#define SMP_DIS_ATT_REQ_IN_ZPSDS 0x02
308#define SMP_DIS_ATT_BREAK_RPL_CAP 0x01
311#define SMP_DIS_PROG_MIN_LR_MASK 0xf0
312#define SMP_DIS_PROG_MIN_LR_SHIFT 4
313#define SMP_DIS_HARD_MIN_LR_MASK 0x0f
315#define SMP_DIS_PROG_MAX_LR_MAX 0xf0
316#define SMP_DIS_PROG_MAX_LR_SHIFT 4
317#define SMP_DIS_HARD_MAX_LR_MASK 0x0f
320#define SMP_DIS_VIRTUAL_PHY 0x80
321#define SMP_DIS_PP_TIMEOUT_MASK 0x0f
327#define SMP_DIS_PHY_POW_COND_MASK 0xc0
328#define SMP_DIS_PHY_POW_COND_SHIFT 6
329#define SMP_DIS_SAS_SLUMB_CAP 0x08
330#define SMP_DIS_SAS_PART_CAP 0x04
331#define SMP_DIS_SATA_SLUMB_CAP 0x02
332#define SMP_DIS_SATA_PART_CAP 0x01
334#define SMP_DIS_SAS_SLUMB_ENB 0x08
335#define SMP_DIS_SAS_PART_ENB 0x04
336#define SMP_DIS_SATA_SLUMB_ENB 0x02
337#define SMP_DIS_SATA_PART_ENB 0x01
341#define SMP_DIS_REQ_IN_ZPSDS_CHG 0x40
342#define SMP_DIS_IN_ZPSDS_PER 0x20
343#define SMP_DIS_REQ_IN_ZPSDS 0x10
344#define SMP_DIS_ZG_PER 0x04
345#define SMP_DIS_IN_ZPSDS 0x02
346#define SMP_DIS_ZONING_ENB 0x01
358#define SMP_DIS_REASON_MASK 0xf0
359#define SMP_DIS_REASON_SHIFT 4
360#define SMP_DIS_PHYS_LR_MASK 0x0f
362#define SMP_DIS_OPTICAL_MODE_ENB 0x04
363#define SMP_DIS_NEG_SSC 0x02
364#define SMP_DIS_HW_MUX_SUP 0x01
366#define SMP_DIS_DEF_IN_ZPSDS_PER 0x20
367#define SMP_DIS_DEF_REQ_IN_ZPSDS 0x10
368#define SMP_DIS_DEF_ZG_PER 0x04
369#define SMP_DIS_DEF_ZONING_ENB 0x01
374#define SMP_DIS_SAVED_IN_ZPSDS_PER 0x20
375#define SMP_DIS_SAVED_REQ_IN_SPSDS 0x10
376#define SMP_DIS_SAVED_ZG_PER 0x04
377#define SMP_DIS_SAVED_ZONING_ENB 0x01
382#define SMP_DIS_SHADOW_IN_ZPSDS_PER 0x20
383#define SMP_DIS_SHADOW_IN_REQ_IN_ZPSDS 0x10
384#define SMP_DIS_SHADOW_ZG_PER 0x04
405#define SMP_PC_RESPONSE_LEN 0x00
407#define SMP_PC_REQUEST_LEN 0x09
412#define SMP_PC_PHY_OP_NOP 0x00
413#define SMP_PC_PHY_OP_LINK_RESET 0x01
414#define SMP_PC_PHY_OP_HARD_RESET 0x02
415#define SMP_PC_PHY_OP_DISABLE 0x03
416#define SMP_PC_PHY_OP_CLEAR_ERR_LOG 0x05
417#define SMP_PC_PHY_OP_CLEAR_AFFILIATON 0x06
418#define SMP_PC_PHY_OP_TRANS_SATA_PSS 0x07
419#define SMP_PC_PHY_OP_CLEAR_STP_ITN_LS 0x08
420#define SMP_PC_PHY_OP_SET_ATT_DEV_NAME 0x09
422#define SMP_PC_UPDATE_PP_TIMEOUT 0x01
426#define SMP_PC_PROG_MIN_PL_RATE_MASK 0xf0
427#define SMP_PC_PROG_MIN_PL_RATE_SHIFT 4
429#define SMP_PC_PROG_MAX_PL_RATE_MASK 0xf0
430#define SMP_PC_PROG_MAX_PL_RATE_SHIFT 4
432#define SMP_PC_SP_NC 0x00
433#define SMP_PC_SP_DISABLE 0x02
434#define SMP_PC_SP_ENABLE 0x01
435#define SMP_PC_SAS_SLUMBER_NC 0x00
436#define SMP_PC_SAS_SLUMBER_DISABLE 0x80
437#define SMP_PC_SAS_SLUMBER_ENABLE 0x40
438#define SMP_PC_SAS_SLUMBER_MASK 0xc0
439#define SMP_PC_SAS_SLUMBER_SHIFT 6
440#define SMP_PC_SAS_PARTIAL_NC 0x00
441#define SMP_PC_SAS_PARTIAL_DISABLE 0x20
442#define SMP_PC_SAS_PARTIAL_ENABLE 0x10
443#define SMP_PC_SAS_PARTIAL_MASK 0x30
444#define SMP_PC_SAS_PARTIAL_SHIFT 4
445#define SMP_PC_SATA_SLUMBER_NC 0x00
446#define SMP_PC_SATA_SLUMBER_DISABLE 0x08
447#define SMP_PC_SATA_SLUMBER_ENABLE 0x04
448#define SMP_PC_SATA_SLUMBER_MASK 0x0c
449#define SMP_PC_SATA_SLUMBER_SHIFT 2
450#define SMP_PC_SATA_PARTIAL_NC 0x00
451#define SMP_PC_SATA_PARTIAL_DISABLE 0x02
452#define SMP_PC_SATA_PARTIAL_ENABLE 0x01
453#define SMP_PC_SATA_PARTIAL_MASK 0x03
454#define SMP_PC_SATA_PARTIAL_SHIFT 0
457#define SMP_PC_PP_TIMEOUT_MASK 0x0f
468#define SMP_PC_RESPONSE_LEN 0x00
477 char *line_prefix,
int first_line_len,
int line_len);
479 char *line_prefix,
int first_line_len,
int line_len);
489 int response_len,
struct sbuf *sb);
492 int response_len,
struct sbuf *sb);
497 int request_len, uint8_t *response,
int response_len,
498 int long_response, uint32_t timeout);
503 uint8_t *response,
int response_len,
int long_response,
504 int ignore_zone_group,
int phy, uint32_t timeout);
509 int request_len, uint8_t *response,
int response_len,
510 int long_response, uint32_t timeout);
515 uint8_t *response,
int response_len,
int long_response,
516 uint32_t expected_exp_change_count,
int phy,
int phy_op,
517 int update_pp_timeout_val, uint64_t attached_device_name,
518 int prog_min_prl,
int prog_max_prl,
int slumber_partial,
519 int pp_timeout_value, uint32_t timeout);
void smp_command_decode(uint8_t *smp_request, int request_len, struct sbuf *sb, char *line_prefix, int first_line_len, int line_len)
const char * smp_command_desc(uint8_t cmd_num)
void smp_report_manuf_info_sbuf(struct smp_report_manuf_info_response *response, int response_len, struct sbuf *sb)
void smp_discover(struct ccb_smpio *smpio, uint32_t retries, void(*cbfcnp)(struct cam_periph *, union ccb *), struct smp_discover_request *request, int request_len, uint8_t *response, int response_len, int long_response, int ignore_zone_group, int phy, uint32_t timeout)
void smp_report_general(struct ccb_smpio *smpio, uint32_t retries, void(*cbfcnp)(struct cam_periph *, union ccb *), struct smp_report_general_request *request, int request_len, uint8_t *response, int response_len, int long_response, uint32_t timeout)
__BEGIN_DECLS const char * smp_error_desc(int function_result)
void smp_report_manuf_info(struct ccb_smpio *smpio, uint32_t retries, void(*cbfcnp)(struct cam_periph *, union ccb *), struct smp_report_manuf_info_request *request, int request_len, uint8_t *response, int response_len, int long_response, uint32_t timeout)
void smp_phy_control(struct ccb_smpio *smpio, uint32_t retries, void(*cbfcnp)(struct cam_periph *, union ccb *), struct smp_phy_control_request *request, int request_len, uint8_t *response, int response_len, int long_response, uint32_t expected_exp_change_count, int phy, int phy_op, int update_pp_timeout_val, uint64_t attached_device_name, int prog_min_prl, int prog_max_prl, int slumber_partial, int pp_timeout_value, uint32_t timeout)
void smp_report_general_sbuf(struct smp_report_general_response *response, int response_len, struct sbuf *sb)
void smp_command_sbuf(struct ccb_smpio *smpio, struct sbuf *sb, char *line_prefix, int first_line_len, int line_len)
void smp_error_sbuf(struct ccb_smpio *smpio, struct sbuf *sb)
uint8_t ignore_zone_group
uint8_t neg_logical_link_rate
uint8_t device_slot_group_out_conn[6]
uint8_t attached_dev_name[8]
uint8_t device_slot_group_num
uint8_t stp_buffer_size[2]
uint8_t current_phy_cap[4]
uint8_t expander_change_count[2]
uint8_t shadow_zone_group
uint8_t self_config_status
uint8_t self_config_sas_addr[8]
uint8_t attached_phy_cap[4]
uint8_t attached_sas_address[8]
uint8_t neg_phys_link_rate
uint8_t default_zone_group
uint8_t self_config_levels_comp
uint8_t prog_max_phys_link_rate
uint8_t expected_exp_chg_cnt[2]
uint8_t prog_min_phys_link_rate
uint8_t update_pp_timeout
uint8_t attached_device_name[8]
uint8_t expander_change_count[2]
uint8_t last_phy_evl_desc_index[2]
uint8_t num_encl_conn_el_indexes
uint8_t zone_lock_inact_time_limit[2]
uint8_t stp_reject_to_open_limit[2]
uint8_t active_zm_address[8]
uint8_t initial_time_to_reduced_func
uint8_t expander_route_indexes[2]
uint8_t stp_max_conn_time_limit[2]
uint8_t stp_bus_inact_time_limit[2]
uint8_t time_to_reduced_func
uint8_t last_sc_stat_desc_index[2]
uint8_t max_num_routed_addrs[2]
uint8_t max_reduced_func_time
uint8_t stp_smp_it_nexus_loss_time[2]
uint8_t max_sc_stat_descs[2]
uint8_t encl_logical_id[8]
uint8_t first_encl_conn_el_index
uint8_t max_stored_pel_descs[2]
uint8_t reduced_functionality
uint8_t expander_change_count[2]
uint8_t vendor_specific[8]