1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 /* 27 * A5X00 Library definitions 28 */ 29 30 /* 31 * I18N message number ranges 32 * This file: 16000 - 16499 33 * Shared common messages: 1 - 1999 34 */ 35 36 #ifndef _A5K_H 37 #define _A5K_H 38 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 45 /* Defines */ 46 #define ENCLOSURE_PROD_ID "SENA" 47 #define ENCLOSURE_PROD_NAME "Network Array" 48 #define MAX_DRIVES_PER_BOX 22 49 #define MAX_DRIVES_DAK 12 50 #define L_WWN_LENGTH 16 51 #define BOX_ID_MASK 0x60 52 #define BOX_ID 0x0d 53 #define ALT_BOX_ID 0x10 54 55 #define MAX_IB_ELEMENTS 50 56 #define MAX_VEND_SPECIFIC_ENC 216 57 #define MAX_POSSIBLE_ELEMENTS 255 58 59 #define SET_RQST_INSRT 0 60 #define SET_RQST_RMV 1 61 #define OVERALL_STATUS 2 62 #define SET_FAULT 3 63 #define SET_DRV_ON 4 64 #define INSERT_DEVICE 106 65 #define REMOVE_DEVICE 114 66 /* device specific identification for display, etc */ 67 #define DAK_OFF_NAME "Daktari official" /* inq response, prod ident */ 68 #define DAK_PROD_STR "SUNWGS INT FCBPL" 69 #define UNDEF_ENC_TYPE 2 70 #define DAK_ENC_TYPE 1 71 #define SENA_ENC_TYPE 0 72 73 74 /* Page defines */ 75 #define L_PAGE_PAGE_LIST 0x00 /* Supported pages page */ 76 #define L_PAGE_CONFIG 0x01 /* Configuration page */ 77 #define L_PAGE_1 L_PAGE_CONFIG 78 #define L_PAGE_ENCL_CTL 0x02 /* Enclosure Control page */ 79 #define L_PAGE_ENCL_STATUS 0x02 /* Enclosure status page */ 80 #define L_PAGE_2 L_PAGE_ENCL_STATUS 81 #define L_PAGE_STRING 0x04 82 #define L_PAGE_4 L_PAGE_STRING 83 #define L_PAGE_7 0x07 /* Element Descriptor Page */ 84 85 #define L_MAX_POSSIBLE_PAGES 255 86 #define L_MAX_SENAIB_PAGES 8 87 88 /* 89 * FRU types internal and external (host SES type) 90 */ 91 #define ELM_TYP_NONE 0x0 /* Unspecified */ 92 #define ELM_TYP_DD 0x01 /* Disk Drive - device */ 93 #define ELM_TYP_PS 0x02 /* Power Supply */ 94 #define ELM_TYP_FT 0x03 /* Fan Tray - cooling element */ 95 #define ELM_TYP_TS 0x04 /* Temperature Sensors */ 96 #define ELM_TYP_FP 0x0c /* FPM screen - display */ 97 #define ELM_TYP_KP 0x0d /* keypad on FPM - keypad device */ 98 #define ELM_TYP_FL 0x0f /* Fibre Link module - SCSI port/trancvr */ 99 #define ELM_TYP_LN 0x10 /* Language */ 100 #define ELM_TYP_SP 0x11 /* Serial Port - communicaion port */ 101 #define ELM_TYP_MB 0x80 /* Motherboard/Centerplane */ 102 #define ELM_TYP_IB 0x81 /* IB(ESI) - controller electronics */ 103 #define ELM_TYP_BP 0x82 /* BackPlane */ 104 #define ELM_TYP_LO 0xa0 /* Loop Configuration */ 105 #define ELM_TYP_OR 0xa2 /* Orientation */ 106 107 #define S_HI_SPEED 0x5 108 109 /* code (status code) definitions */ 110 #define S_OK 0x01 111 #define S_CRITICAL 0x02 112 #define S_NONCRITICAL 0x03 113 #define S_NOT_INSTALLED 0x05 114 #define S_NOT_AVAILABLE 0x07 115 116 /* String codes. */ 117 #define L_WWN 0x01 118 #define L_PASSWORD 0x02 119 #define L_ENCL_NAME 0x03 120 #define L_BOX_ID 0x04 121 #define L_AUTO_LIP 0x05 122 123 /* Loop states */ 124 #define L_NO_LOOP 0x80 /* drive not accessable */ 125 #define L_INVALID_WWN 0x100 126 #define L_INVALID_MAP 0x200 127 #define L_NO_PATH_FOUND 0x400 128 129 /* d_state_flags definitions */ 130 #define L_OK 0x00 /* NOTE: Must be zero. */ 131 #define L_NOT_READY 0x01 132 #define L_NOT_READABLE 0x02 133 #define L_SPUN_DWN_D 0x04 134 #define L_RESERVED 0x08 135 #define L_OPEN_FAIL 0x10 136 #define L_NO_LABEL 0x20 137 #define L_SCSI_ERR 0x40 138 139 /* Values used by the l_led function */ 140 #define L_LED_STATUS 0x00 141 #define L_LED_RQST_IDENTIFY 0x01 142 #define L_LED_ON 0x02 143 #define L_LED_OFF 0x04 144 145 /* Structure definitions */ 146 typedef struct box_list_struct { 147 uchar_t prod_id_s[17]; /* NULL terminated string */ 148 uchar_t b_name[33]; /* NULL terminated string */ 149 char logical_path[MAXNAMELEN]; 150 char b_physical_path[MAXNAMELEN]; 151 char b_node_wwn_s[17]; /* NULL terminated string */ 152 uchar_t b_node_wwn[8]; 153 char b_port_wwn_s[17]; /* NULL terminated string */ 154 uchar_t b_port_wwn[8]; 155 struct box_list_struct *box_prev; 156 struct box_list_struct *box_next; 157 } Box_list; 158 159 160 typedef struct path_struct { 161 char *p_physical_path; 162 char *argv; 163 int slot_valid; /* Slot valid flag. */ 164 int slot; 165 int f_flag; /* Front/rear flag. 1 = front */ 166 int ib_path_flag; 167 } Path_struct; 168 169 170 /* 171 * Page 0 172 */ 173 typedef struct ib_page_0 { 174 uchar_t page_code; 175 uchar_t sub_enclosures; 176 ushort_t page_len; 177 uchar_t sup_page_codes[0x100]; 178 } IB_page_0; 179 180 /* 181 * Page 1 182 * Configuration page 183 */ 184 typedef struct type_desc_hdr { 185 uchar_t type; 186 uchar_t num; 187 uchar_t sub_id; 188 uchar_t text_len; 189 } Type_desc_hdr; 190 191 typedef struct type_desc_text { 192 uchar_t text_element[256]; 193 } Type_desc_text; 194 195 typedef struct ib_page_config { 196 uchar_t page_code; 197 uchar_t sub_enclosures; 198 ushort_t page_len; 199 uint_t gen_code; 200 /* Enclosure descriptor header */ 201 uchar_t enc_res; 202 uchar_t enc_sub_id; 203 uchar_t enc_num_elem; 204 uchar_t enc_len; 205 /* Enclosure descriptor */ 206 uchar_t enc_node_wwn[8]; 207 uchar_t vend_id[8]; 208 uchar_t prod_id[16]; 209 uchar_t prod_revision[4]; 210 uchar_t res[MAX_VEND_SPECIFIC_ENC]; 211 Type_desc_hdr type_hdr[MAX_IB_ELEMENTS]; 212 Type_desc_text text[MAX_IB_ELEMENTS]; 213 } IB_page_config; 214 215 216 /* 217 * Page 2 218 * Enclosure status/control page 219 */ 220 /* 221 * Loop Configuration. 222 */ 223 typedef struct loop_element_status { 224 uchar_t : 1, /* reserved */ 225 prd_fail : 1, 226 : 2, /* reserved */ 227 code : 4; 228 uchar_t : 8; /* reserved */ 229 uchar_t : 8; /* reserved */ 230 uchar_t : 7, /* reserved */ 231 split : 1; 232 } Loop_elem_st; 233 234 /* 235 * Language 236 */ 237 typedef struct language_element_status { 238 uchar_t : 1, /* reserved */ 239 prd_fail : 1, 240 : 2, /* reserved */ 241 code : 4; 242 uchar_t : 8; /* reserved */ 243 ushort_t language_code; 244 } Lang_elem_st; 245 246 /* 247 * Tranceiver status 248 */ 249 typedef struct trans_element_status { 250 uchar_t : 1, /* reserved */ 251 prd_fail : 1, 252 : 2, /* reserved */ 253 code : 4; 254 uchar_t : 8; /* reserved */ 255 uchar_t : 7, 256 report : 1; 257 uchar_t : 3, /* reserved */ 258 disabled : 1, 259 : 2, 260 lol : 1, 261 lsr_fail : 1; 262 } Trans_elem_st; 263 264 /* 265 * ESI Controller status 266 */ 267 typedef struct ctlr_element_status { 268 uchar_t : 1, /* reserved */ 269 prd_fail : 1, 270 : 2, /* reserved */ 271 code : 4; 272 uchar_t : 8; /* reserved */ 273 uchar_t : 7, /* reserved */ 274 report : 1; 275 uchar_t : 4, /* reserved */ 276 overtemp_alart : 1, 277 : 1, /* reserved */ 278 ib_loop_1_fail : 1, 279 ib_loop_0_fail : 1; 280 } Ctlr_elem_st; 281 282 /* 283 * Backplane status 284 */ 285 typedef struct bp_element_status { 286 uchar_t select : 1, 287 prd_fail : 1, 288 : 2, /* reserved */ 289 code : 4; 290 uchar_t : 8; /* reserved */ 291 uchar_t : 8; /* reserved */ 292 uchar_t : 3, /* reserved */ 293 disabled : 1, 294 en_bypass_a : 1, /* Not in Spec. */ 295 en_bypass_b : 1, /* Not in Spec. */ 296 byp_a_enabled : 1, 297 byp_b_enabled : 1; 298 299 } Bp_elem_st; 300 301 /* 302 * Temperature sensor status 303 */ 304 typedef struct temp_element_status { 305 uchar_t : 1, /* reserved */ 306 prd_fail : 1, 307 : 2, /* reserved */ 308 code : 4; 309 uchar_t : 8; /* reserved */ 310 char degrees; 311 uchar_t : 4, /* reserved */ 312 ot_fail : 1, 313 ot_warn : 1, 314 ut_fail : 1, 315 ut_warn : 1; 316 } Temp_elem_st; 317 318 typedef struct fan_element_status { 319 uchar_t : 1, /* reserved */ 320 prd_fail : 1, 321 : 2, /* reserved */ 322 code : 4; 323 uchar_t : 8; /* reserved */ 324 uchar_t : 8; /* reserved */ 325 uchar_t : 1, /* reserved */ 326 fail : 1, 327 rqsted_on : 1, 328 : 2, 329 speed : 3; 330 } Fan_elem_st; 331 332 333 typedef struct ps_element_status { 334 uchar_t : 1, /* reserved */ 335 prd_fail : 1, 336 : 1, /* reserved */ 337 swap : 1, 338 code : 4; 339 uchar_t : 8; /* reserved */ 340 uchar_t : 4, /* reserved */ 341 dc_over : 1, 342 dc_under : 1, 343 dc_over_i : 1, 344 : 1; /* reserved */ 345 uchar_t : 1, /* reserved */ 346 fail : 1, 347 rqsted_on : 1, 348 : 1, 349 ovrtmp_fail : 1, 350 temp_warn : 1, 351 ac_fail : 1, 352 dc_fail : 1; 353 } Ps_elem_st; 354 355 356 typedef struct device_element { 357 uchar_t select : 1, 358 prd_fail : 1, 359 disable : 1, 360 swap : 1, 361 code : 4; 362 uchar_t sel_id; /* Hard address */ 363 uchar_t : 1, 364 dont_remove : 1, 365 : 2, 366 rdy_to_ins : 1, 367 rmv : 1, 368 ident : 1, 369 report : 1; 370 uchar_t : 1, /* reserved */ 371 fault : 1, 372 fault_req : 1, 373 dev_off : 1, 374 en_bypass_a : 1, 375 en_bypass_b : 1, 376 bypass_a_en : 1, 377 bypass_b_en : 1; 378 } Dev_elem_st; 379 380 381 typedef struct interconnect_assem_status { 382 uchar_t : 4, /* reserved */ 383 code : 4; 384 uchar_t : 8; /* reserved */ 385 uchar_t : 8; /* reserved */ 386 uchar_t : 7, /* reserved */ 387 eprom_fail : 1; 388 } Interconnect_st; 389 390 391 typedef struct ib_page_2 { 392 uchar_t page_code; 393 union { 394 uchar_t res : 3, /* Reserved */ 395 invop : 1, 396 info : 1, 397 non_crit : 1, 398 crit : 1, 399 unrec : 1; 400 uchar_t ab_cond; 401 } ui; 402 ushort_t page_len; 403 uint_t gen_code; 404 uint_t element[MAX_POSSIBLE_ELEMENTS]; 405 } IB_page_2; 406 407 /* 408 * Page 4 409 * 410 * String page. 411 */ 412 typedef struct page4_name { 413 uchar_t page_code; 414 uchar_t : 8; /* reserved */ 415 ushort_t page_len; 416 uchar_t string_code; 417 uchar_t : 7, 418 enable : 1; 419 uchar_t : 8; /* reserved */ 420 uchar_t : 8; /* reserved */ 421 uchar_t name[32]; 422 } Page4_name; 423 424 425 typedef struct element_descriptor { 426 uchar_t : 8; /* reserved */ 427 uchar_t : 8; /* reserved */ 428 ushort_t desc_len; 429 uchar_t desc_string[0xff]; 430 } Elem_desc; 431 432 433 typedef struct ib_page_7 { 434 uchar_t page_code; 435 uchar_t : 8; /* reserved */ 436 ushort_t page_len; 437 uint_t gen_code; 438 Elem_desc element_desc[MAX_POSSIBLE_ELEMENTS]; 439 } IB_page_7; 440 441 442 /* structure for IB */ 443 typedef struct ib_state_struct { 444 uchar_t enclosure_name[33]; /* extra character is NULL */ 445 IB_page_0 p0; 446 IB_page_config config; /* Enclosure configuration page */ 447 IB_page_2 p2_s; /* Enclosure status page */ 448 IB_page_7 p7_s; /* Element descriptor page */ 449 int res; 450 int box_id; 451 struct dlist *ib_multipath_list; 452 } Ib_state; 453 454 455 /* Individual SENA drive state */ 456 typedef struct l_disk_state_struct { 457 Dev_elem_st ib_status; 458 int l_state_flag; /* Loop State */ 459 struct g_disk_state_struct g_disk_state; 460 } L_disk_state; 461 462 /* 463 * State of the Photon 464 */ 465 typedef struct l_state_struct { 466 Ib_state ib_tbl; /* state of controller */ 467 468 int total_num_drv; 469 struct l_disk_state_struct drv_front[MAX_DRIVES_PER_BOX/2]; 470 struct l_disk_state_struct drv_rear[MAX_DRIVES_PER_BOX/2]; 471 } L_state; 472 473 474 /* 475 * Function Prototypes for the functions defined in libg_fc 476 * These are the functions that will be visible to an end user 477 * They are all CONTRACT PRIVATE 478 */ 479 480 #if defined(__STDC__) 481 482 extern int l_chk_null_wwn(Path_struct *, char *, L_state *, int); 483 extern int l_convert_name(char *, char **, struct path_struct **, int); 484 extern int l_dev_pwr_up_down(char *, struct path_struct *, int, int, int); 485 extern int l_device_present(char *, int, gfc_map_t *, int, char **); 486 extern int l_download(char *, char *, int, int); 487 extern int l_duplicate_names(Box_list *, char *, char *, int); 488 extern int l_encl_status_page_funcs(int, char *, int, char *, 489 struct l_state_struct *, int, int, int); 490 extern int l_format_ifp_status_msg(char *, int, int); 491 extern int l_format_fc_status_msg(char *, int, int); 492 extern void l_free_box_list(struct box_list_struct **); 493 extern int l_free_lstate(L_state **); 494 extern int l_get_allses(char *, struct box_list_struct *, struct dlist **, 495 int); 496 extern int l_get_box_list(struct box_list_struct **, int); 497 extern int l_get_disk_element_index(struct l_state_struct *, int *, int *); 498 extern int l_get_disk_port_status(char *, struct l_disk_state_struct *, 499 int, int); 500 extern int l_get_disk_status(char *, struct l_disk_state_struct *, 501 WWN_list *, int); 502 extern void l_get_drive_name(char *, int, int, char *); 503 extern int l_get_envsen(char *, uchar_t *, int, int); 504 extern int l_get_envsen_page(int, uchar_t *, int, uchar_t, int); 505 extern int l_get_ib_status(char *, struct l_state_struct *, int); 506 extern int l_get_individual_state(char *, struct l_disk_state_struct *, 507 Ib_state *, int, struct box_list_struct *, 508 struct wwn_list_struct *, int); 509 extern int l_get_port(char *, int *, int); 510 extern int l_get_ses_path(char *, char *, gfc_map_t *, int); 511 extern int l_get_slot(struct path_struct *, L_state *, int); 512 extern int l_get_status(char *, struct l_state_struct *, int); 513 extern int l_led(struct path_struct *, int, struct device_element *, int); 514 extern int l_make_node(char *, int, char *, gfc_map_t *, int); 515 extern int l_new_name(char *, char *); 516 extern int l_offline_photon(struct hotplug_disk_list *, 517 struct wwn_list_struct *, int, int); 518 extern int l_get_enc_type(L_inquiry inq); 519 extern int l_pho_pwr_up_down(char *, char *, int, int, int); 520 521 #else /* __STDC__ */ 522 523 524 extern int l_chk_null_wwn(); 525 extern int l_convert_name(); 526 extern int l_dev_pwr_up_down(); 527 extern int l_device_present(); 528 extern int l_download(); 529 extern int l_duplicate_names(); 530 extern int l_encl_status_page_funcs(); 531 extern int l_format_fc_status_msg(); 532 extern int l_format_ifp_status_msg(); 533 extern void l_free_box_list(); 534 extern int l_free_lstate(); 535 extern int l_get_allses(); 536 extern int l_get_box_list(); 537 extern int l_get_disk_element_index(); 538 extern int l_get_disk_port_status(); 539 extern int l_get_disk_status(); 540 extern void l_get_drive_name(); 541 extern int l_get_envsen(); 542 extern int l_get_envsen_page(); 543 extern int l_get_ib_status(); 544 extern int l_get_individual_state(); 545 extern int l_get_port(); 546 extern int l_get_ses_path(); 547 extern int l_get_slot(); 548 extern int l_get_status(); 549 extern int l_led(); 550 extern int l_make_node(); 551 extern int l_new_name(); 552 extern int l_offline_photon(); 553 extern int l_pho_pwr_up_down(); 554 extern int l_get_enc_type(); 555 556 #endif /* __STDC__ */ 557 558 #ifdef __cplusplus 559 } 560 #endif 561 562 #endif /* _A5K_H */ 563