#ifndef _A5K_H
#define _A5K_H
#ifdef __cplusplus
extern "C" {
#endif
#define ENCLOSURE_PROD_ID "SENA"
#define ENCLOSURE_PROD_NAME "Network Array"
#define MAX_DRIVES_PER_BOX 22
#define MAX_DRIVES_DAK 12
#define L_WWN_LENGTH 16
#define BOX_ID_MASK 0x60
#define BOX_ID 0x0d
#define ALT_BOX_ID 0x10
#define MAX_IB_ELEMENTS 50
#define MAX_VEND_SPECIFIC_ENC 216
#define MAX_POSSIBLE_ELEMENTS 255
#define SET_RQST_INSRT 0
#define SET_RQST_RMV 1
#define OVERALL_STATUS 2
#define SET_FAULT 3
#define SET_DRV_ON 4
#define INSERT_DEVICE 106
#define REMOVE_DEVICE 114
#define DAK_OFF_NAME "Daktari official"
#define DAK_PROD_STR "SUNWGS INT FCBPL"
#define UNDEF_ENC_TYPE 2
#define DAK_ENC_TYPE 1
#define SENA_ENC_TYPE 0
#define L_PAGE_PAGE_LIST 0x00
#define L_PAGE_CONFIG 0x01
#define L_PAGE_1 L_PAGE_CONFIG
#define L_PAGE_ENCL_CTL 0x02
#define L_PAGE_ENCL_STATUS 0x02
#define L_PAGE_2 L_PAGE_ENCL_STATUS
#define L_PAGE_STRING 0x04
#define L_PAGE_4 L_PAGE_STRING
#define L_PAGE_7 0x07
#define L_MAX_POSSIBLE_PAGES 255
#define L_MAX_SENAIB_PAGES 8
#define ELM_TYP_NONE 0x0
#define ELM_TYP_DD 0x01
#define ELM_TYP_PS 0x02
#define ELM_TYP_FT 0x03
#define ELM_TYP_TS 0x04
#define ELM_TYP_FP 0x0c
#define ELM_TYP_KP 0x0d
#define ELM_TYP_FL 0x0f
#define ELM_TYP_LN 0x10
#define ELM_TYP_SP 0x11
#define ELM_TYP_MB 0x80
#define ELM_TYP_IB 0x81
#define ELM_TYP_BP 0x82
#define ELM_TYP_LO 0xa0
#define ELM_TYP_OR 0xa2
#define S_HI_SPEED 0x5
#define S_OK 0x01
#define S_CRITICAL 0x02
#define S_NONCRITICAL 0x03
#define S_NOT_INSTALLED 0x05
#define S_NOT_AVAILABLE 0x07
#define L_WWN 0x01
#define L_PASSWORD 0x02
#define L_ENCL_NAME 0x03
#define L_BOX_ID 0x04
#define L_AUTO_LIP 0x05
#define L_NO_LOOP 0x80
#define L_INVALID_WWN 0x100
#define L_INVALID_MAP 0x200
#define L_NO_PATH_FOUND 0x400
#define L_OK 0x00
#define L_NOT_READY 0x01
#define L_NOT_READABLE 0x02
#define L_SPUN_DWN_D 0x04
#define L_RESERVED 0x08
#define L_OPEN_FAIL 0x10
#define L_NO_LABEL 0x20
#define L_SCSI_ERR 0x40
#define L_LED_STATUS 0x00
#define L_LED_RQST_IDENTIFY 0x01
#define L_LED_ON 0x02
#define L_LED_OFF 0x04
typedef struct box_list_struct {
uchar_t prod_id_s[17];
uchar_t b_name[33];
char logical_path[MAXNAMELEN];
char b_physical_path[MAXNAMELEN];
char b_node_wwn_s[17];
uchar_t b_node_wwn[8];
char b_port_wwn_s[17];
uchar_t b_port_wwn[8];
struct box_list_struct *box_prev;
struct box_list_struct *box_next;
} Box_list;
typedef struct path_struct {
char *p_physical_path;
char *argv;
int slot_valid;
int slot;
int f_flag;
int ib_path_flag;
} Path_struct;
typedef struct ib_page_0 {
uchar_t page_code;
uchar_t sub_enclosures;
ushort_t page_len;
uchar_t sup_page_codes[0x100];
} IB_page_0;
typedef struct type_desc_hdr {
uchar_t type;
uchar_t num;
uchar_t sub_id;
uchar_t text_len;
} Type_desc_hdr;
typedef struct type_desc_text {
uchar_t text_element[256];
} Type_desc_text;
typedef struct ib_page_config {
uchar_t page_code;
uchar_t sub_enclosures;
ushort_t page_len;
uint_t gen_code;
uchar_t enc_res;
uchar_t enc_sub_id;
uchar_t enc_num_elem;
uchar_t enc_len;
uchar_t enc_node_wwn[8];
uchar_t vend_id[8];
uchar_t prod_id[16];
uchar_t prod_revision[4];
uchar_t res[MAX_VEND_SPECIFIC_ENC];
Type_desc_hdr type_hdr[MAX_IB_ELEMENTS];
Type_desc_text text[MAX_IB_ELEMENTS];
} IB_page_config;
typedef struct loop_element_status {
uchar_t : 1,
prd_fail : 1,
: 2,
code : 4;
uchar_t : 8;
uchar_t : 8;
uchar_t : 7,
split : 1;
} Loop_elem_st;
typedef struct language_element_status {
uchar_t : 1,
prd_fail : 1,
: 2,
code : 4;
uchar_t : 8;
ushort_t language_code;
} Lang_elem_st;
typedef struct trans_element_status {
uchar_t : 1,
prd_fail : 1,
: 2,
code : 4;
uchar_t : 8;
uchar_t : 7,
report : 1;
uchar_t : 3,
disabled : 1,
: 2,
lol : 1,
lsr_fail : 1;
} Trans_elem_st;
typedef struct ctlr_element_status {
uchar_t : 1,
prd_fail : 1,
: 2,
code : 4;
uchar_t : 8;
uchar_t : 7,
report : 1;
uchar_t : 4,
overtemp_alart : 1,
: 1,
ib_loop_1_fail : 1,
ib_loop_0_fail : 1;
} Ctlr_elem_st;
typedef struct bp_element_status {
uchar_t select : 1,
prd_fail : 1,
: 2,
code : 4;
uchar_t : 8;
uchar_t : 8;
uchar_t : 3,
disabled : 1,
en_bypass_a : 1,
en_bypass_b : 1,
byp_a_enabled : 1,
byp_b_enabled : 1;
} Bp_elem_st;
typedef struct temp_element_status {
uchar_t : 1,
prd_fail : 1,
: 2,
code : 4;
uchar_t : 8;
char degrees;
uchar_t : 4,
ot_fail : 1,
ot_warn : 1,
ut_fail : 1,
ut_warn : 1;
} Temp_elem_st;
typedef struct fan_element_status {
uchar_t : 1,
prd_fail : 1,
: 2,
code : 4;
uchar_t : 8;
uchar_t : 8;
uchar_t : 1,
fail : 1,
rqsted_on : 1,
: 2,
speed : 3;
} Fan_elem_st;
typedef struct ps_element_status {
uchar_t : 1,
prd_fail : 1,
: 1,
swap : 1,
code : 4;
uchar_t : 8;
uchar_t : 4,
dc_over : 1,
dc_under : 1,
dc_over_i : 1,
: 1;
uchar_t : 1,
fail : 1,
rqsted_on : 1,
: 1,
ovrtmp_fail : 1,
temp_warn : 1,
ac_fail : 1,
dc_fail : 1;
} Ps_elem_st;
typedef struct device_element {
uchar_t select : 1,
prd_fail : 1,
disable : 1,
swap : 1,
code : 4;
uchar_t sel_id;
uchar_t : 1,
dont_remove : 1,
: 2,
rdy_to_ins : 1,
rmv : 1,
ident : 1,
report : 1;
uchar_t : 1,
fault : 1,
fault_req : 1,
dev_off : 1,
en_bypass_a : 1,
en_bypass_b : 1,
bypass_a_en : 1,
bypass_b_en : 1;
} Dev_elem_st;
typedef struct interconnect_assem_status {
uchar_t : 4,
code : 4;
uchar_t : 8;
uchar_t : 8;
uchar_t : 7,
eprom_fail : 1;
} Interconnect_st;
typedef struct ib_page_2 {
uchar_t page_code;
union {
uchar_t res : 3,
invop : 1,
info : 1,
non_crit : 1,
crit : 1,
unrec : 1;
uchar_t ab_cond;
} ui;
ushort_t page_len;
uint_t gen_code;
uint_t element[MAX_POSSIBLE_ELEMENTS];
} IB_page_2;
typedef struct page4_name {
uchar_t page_code;
uchar_t : 8;
ushort_t page_len;
uchar_t string_code;
uchar_t : 7,
enable : 1;
uchar_t : 8;
uchar_t : 8;
uchar_t name[32];
} Page4_name;
typedef struct element_descriptor {
uchar_t : 8;
uchar_t : 8;
ushort_t desc_len;
uchar_t desc_string[0xff];
} Elem_desc;
typedef struct ib_page_7 {
uchar_t page_code;
uchar_t : 8;
ushort_t page_len;
uint_t gen_code;
Elem_desc element_desc[MAX_POSSIBLE_ELEMENTS];
} IB_page_7;
typedef struct ib_state_struct {
uchar_t enclosure_name[33];
IB_page_0 p0;
IB_page_config config;
IB_page_2 p2_s;
IB_page_7 p7_s;
int res;
int box_id;
struct dlist *ib_multipath_list;
} Ib_state;
typedef struct l_disk_state_struct {
Dev_elem_st ib_status;
int l_state_flag;
struct g_disk_state_struct g_disk_state;
} L_disk_state;
typedef struct l_state_struct {
Ib_state ib_tbl;
int total_num_drv;
struct l_disk_state_struct drv_front[MAX_DRIVES_PER_BOX/2];
struct l_disk_state_struct drv_rear[MAX_DRIVES_PER_BOX/2];
} L_state;
#if defined(__STDC__)
extern int l_chk_null_wwn(Path_struct *, char *, L_state *, int);
extern int l_convert_name(char *, char **, struct path_struct **, int);
extern int l_dev_pwr_up_down(char *, struct path_struct *, int, int, int);
extern int l_device_present(char *, int, gfc_map_t *, int, char **);
extern int l_download(char *, char *, int, int);
extern int l_duplicate_names(Box_list *, char *, char *, int);
extern int l_encl_status_page_funcs(int, char *, int, char *,
struct l_state_struct *, int, int, int);
extern int l_format_ifp_status_msg(char *, int, int);
extern int l_format_fc_status_msg(char *, int, int);
extern void l_free_box_list(struct box_list_struct **);
extern int l_free_lstate(L_state **);
extern int l_get_allses(char *, struct box_list_struct *, struct dlist **,
int);
extern int l_get_box_list(struct box_list_struct **, int);
extern int l_get_disk_element_index(struct l_state_struct *, int *, int *);
extern int l_get_disk_port_status(char *, struct l_disk_state_struct *,
int, int);
extern int l_get_disk_status(char *, struct l_disk_state_struct *,
WWN_list *, int);
extern void l_get_drive_name(char *, int, int, char *);
extern int l_get_envsen(char *, uchar_t *, int, int);
extern int l_get_envsen_page(int, uchar_t *, int, uchar_t, int);
extern int l_get_ib_status(char *, struct l_state_struct *, int);
extern int l_get_individual_state(char *, struct l_disk_state_struct *,
Ib_state *, int, struct box_list_struct *,
struct wwn_list_struct *, int);
extern int l_get_port(char *, int *, int);
extern int l_get_ses_path(char *, char *, gfc_map_t *, int);
extern int l_get_slot(struct path_struct *, L_state *, int);
extern int l_get_status(char *, struct l_state_struct *, int);
extern int l_led(struct path_struct *, int, struct device_element *, int);
extern int l_make_node(char *, int, char *, gfc_map_t *, int);
extern int l_new_name(char *, char *);
extern int l_offline_photon(struct hotplug_disk_list *,
struct wwn_list_struct *, int, int);
extern int l_get_enc_type(L_inquiry inq);
extern int l_pho_pwr_up_down(char *, char *, int, int, int);
#else
extern int l_chk_null_wwn();
extern int l_convert_name();
extern int l_dev_pwr_up_down();
extern int l_device_present();
extern int l_download();
extern int l_duplicate_names();
extern int l_encl_status_page_funcs();
extern int l_format_fc_status_msg();
extern int l_format_ifp_status_msg();
extern void l_free_box_list();
extern int l_free_lstate();
extern int l_get_allses();
extern int l_get_box_list();
extern int l_get_disk_element_index();
extern int l_get_disk_port_status();
extern int l_get_disk_status();
extern void l_get_drive_name();
extern int l_get_envsen();
extern int l_get_envsen_page();
extern int l_get_ib_status();
extern int l_get_individual_state();
extern int l_get_port();
extern int l_get_ses_path();
extern int l_get_slot();
extern int l_get_status();
extern int l_led();
extern int l_make_node();
extern int l_new_name();
extern int l_offline_photon();
extern int l_pho_pwr_up_down();
extern int l_get_enc_type();
#endif
#ifdef __cplusplus
}
#endif
#endif