1 /* 2 * This file is auto-generated. Modifications will be lost. 3 * 4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5 * for more information. 6 */ 7 #ifndef _FC_ELS_H_ 8 #define _FC_ELS_H_ 9 #include <linux/types.h> 10 #include <asm/byteorder.h> 11 enum fc_els_cmd { 12 ELS_LS_RJT = 0x01, 13 ELS_LS_ACC = 0x02, 14 ELS_PLOGI = 0x03, 15 ELS_FLOGI = 0x04, 16 ELS_LOGO = 0x05, 17 ELS_ABTX = 0x06, 18 ELS_RCS = 0x07, 19 ELS_RES = 0x08, 20 ELS_RSS = 0x09, 21 ELS_RSI = 0x0a, 22 ELS_ESTS = 0x0b, 23 ELS_ESTC = 0x0c, 24 ELS_ADVC = 0x0d, 25 ELS_RTV = 0x0e, 26 ELS_RLS = 0x0f, 27 ELS_ECHO = 0x10, 28 ELS_TEST = 0x11, 29 ELS_RRQ = 0x12, 30 ELS_REC = 0x13, 31 ELS_SRR = 0x14, 32 ELS_FPIN = 0x16, 33 ELS_EDC = 0x17, 34 ELS_RDP = 0x18, 35 ELS_RDF = 0x19, 36 ELS_PRLI = 0x20, 37 ELS_PRLO = 0x21, 38 ELS_SCN = 0x22, 39 ELS_TPLS = 0x23, 40 ELS_TPRLO = 0x24, 41 ELS_LCLM = 0x25, 42 ELS_GAID = 0x30, 43 ELS_FACT = 0x31, 44 ELS_FDACDT = 0x32, 45 ELS_NACT = 0x33, 46 ELS_NDACT = 0x34, 47 ELS_QOSR = 0x40, 48 ELS_RVCS = 0x41, 49 ELS_PDISC = 0x50, 50 ELS_FDISC = 0x51, 51 ELS_ADISC = 0x52, 52 ELS_RNC = 0x53, 53 ELS_FARP_REQ = 0x54, 54 ELS_FARP_REPL = 0x55, 55 ELS_RPS = 0x56, 56 ELS_RPL = 0x57, 57 ELS_RPBC = 0x58, 58 ELS_FAN = 0x60, 59 ELS_RSCN = 0x61, 60 ELS_SCR = 0x62, 61 ELS_RNFT = 0x63, 62 ELS_CSR = 0x68, 63 ELS_CSU = 0x69, 64 ELS_LINIT = 0x70, 65 ELS_LSTS = 0x72, 66 ELS_RNID = 0x78, 67 ELS_RLIR = 0x79, 68 ELS_LIRR = 0x7a, 69 ELS_SRL = 0x7b, 70 ELS_SBRP = 0x7c, 71 ELS_RPSC = 0x7d, 72 ELS_QSA = 0x7e, 73 ELS_EVFP = 0x7f, 74 ELS_LKA = 0x80, 75 ELS_AUTH_ELS = 0x90, 76 }; 77 #define FC_ELS_CMDS_INIT {[ELS_LS_RJT] = "LS_RJT",[ELS_LS_ACC] = "LS_ACC",[ELS_PLOGI] = "PLOGI",[ELS_FLOGI] = "FLOGI",[ELS_LOGO] = "LOGO",[ELS_ABTX] = "ABTX",[ELS_RCS] = "RCS",[ELS_RES] = "RES",[ELS_RSS] = "RSS",[ELS_RSI] = "RSI",[ELS_ESTS] = "ESTS",[ELS_ESTC] = "ESTC",[ELS_ADVC] = "ADVC",[ELS_RTV] = "RTV",[ELS_RLS] = "RLS",[ELS_ECHO] = "ECHO",[ELS_TEST] = "TEST",[ELS_RRQ] = "RRQ",[ELS_REC] = "REC",[ELS_SRR] = "SRR",[ELS_FPIN] = "FPIN",[ELS_EDC] = "EDC",[ELS_RDP] = "RDP",[ELS_RDF] = "RDF",[ELS_PRLI] = "PRLI",[ELS_PRLO] = "PRLO",[ELS_SCN] = "SCN",[ELS_TPLS] = "TPLS",[ELS_TPRLO] = "TPRLO",[ELS_LCLM] = "LCLM",[ELS_GAID] = "GAID",[ELS_FACT] = "FACT",[ELS_FDACDT] = "FDACDT",[ELS_NACT] = "NACT",[ELS_NDACT] = "NDACT",[ELS_QOSR] = "QOSR",[ELS_RVCS] = "RVCS",[ELS_PDISC] = "PDISC",[ELS_FDISC] = "FDISC",[ELS_ADISC] = "ADISC",[ELS_RNC] = "RNC",[ELS_FARP_REQ] = "FARP_REQ",[ELS_FARP_REPL] = "FARP_REPL",[ELS_RPS] = "RPS",[ELS_RPL] = "RPL",[ELS_RPBC] = "RPBC",[ELS_FAN] = "FAN",[ELS_RSCN] = "RSCN",[ELS_SCR] = "SCR",[ELS_RNFT] = "RNFT",[ELS_CSR] = "CSR",[ELS_CSU] = "CSU",[ELS_LINIT] = "LINIT",[ELS_LSTS] = "LSTS",[ELS_RNID] = "RNID",[ELS_RLIR] = "RLIR",[ELS_LIRR] = "LIRR",[ELS_SRL] = "SRL",[ELS_SBRP] = "SBRP",[ELS_RPSC] = "RPSC",[ELS_QSA] = "QSA",[ELS_EVFP] = "EVFP",[ELS_LKA] = "LKA",[ELS_AUTH_ELS] = "AUTH_ELS", \ 78 } 79 struct fc_els_ls_acc { 80 __u8 la_cmd; 81 __u8 la_resv[3]; 82 }; 83 struct fc_els_ls_rjt { 84 __u8 er_cmd; 85 __u8 er_resv[4]; 86 __u8 er_reason; 87 __u8 er_explan; 88 __u8 er_vendor; 89 }; 90 enum fc_els_rjt_reason { 91 ELS_RJT_NONE = 0, 92 ELS_RJT_INVAL = 0x01, 93 ELS_RJT_LOGIC = 0x03, 94 ELS_RJT_BUSY = 0x05, 95 ELS_RJT_PROT = 0x07, 96 ELS_RJT_UNAB = 0x09, 97 ELS_RJT_UNSUP = 0x0b, 98 ELS_RJT_INPROG = 0x0e, 99 ELS_RJT_FIP = 0x20, 100 ELS_RJT_VENDOR = 0xff, 101 }; 102 enum fc_els_rjt_explan { 103 ELS_EXPL_NONE = 0x00, 104 ELS_EXPL_SPP_OPT_ERR = 0x01, 105 ELS_EXPL_SPP_ICTL_ERR = 0x03, 106 ELS_EXPL_AH = 0x11, 107 ELS_EXPL_AH_REQ = 0x13, 108 ELS_EXPL_SID = 0x15, 109 ELS_EXPL_OXID_RXID = 0x17, 110 ELS_EXPL_INPROG = 0x19, 111 ELS_EXPL_PLOGI_REQD = 0x1e, 112 ELS_EXPL_INSUF_RES = 0x29, 113 ELS_EXPL_UNAB_DATA = 0x2a, 114 ELS_EXPL_UNSUPR = 0x2c, 115 ELS_EXPL_INV_LEN = 0x2d, 116 ELS_EXPL_NOT_NEIGHBOR = 0x62, 117 }; 118 enum fc_ls_tlv_dtag { 119 ELS_DTAG_LS_REQ_INFO = 0x00000001, 120 ELS_DTAG_LNK_FAULT_CAP = 0x0001000D, 121 ELS_DTAG_CG_SIGNAL_CAP = 0x0001000F, 122 ELS_DTAG_LNK_INTEGRITY = 0x00020001, 123 ELS_DTAG_DELIVERY = 0x00020002, 124 ELS_DTAG_PEER_CONGEST = 0x00020003, 125 ELS_DTAG_CONGESTION = 0x00020004, 126 ELS_DTAG_FPIN_REGISTER = 0x00030001, 127 }; 128 #define FC_LS_TLV_DTAG_INIT { { ELS_DTAG_LS_REQ_INFO, "Link Service Request Information" }, { ELS_DTAG_LNK_FAULT_CAP, "Link Fault Capability" }, { ELS_DTAG_CG_SIGNAL_CAP, "Congestion Signaling Capability" }, { ELS_DTAG_LNK_INTEGRITY, "Link Integrity Notification" }, { ELS_DTAG_DELIVERY, "Delivery Notification Present" }, { ELS_DTAG_PEER_CONGEST, "Peer Congestion Notification" }, { ELS_DTAG_CONGESTION, "Congestion Notification" }, { ELS_DTAG_FPIN_REGISTER, "FPIN Registration" }, \ 129 } 130 struct fc_tlv_desc { 131 __be32 desc_tag; 132 __be32 desc_len; 133 __u8 desc_value[]; 134 }; 135 #define FC_TLV_DESC_HDR_SZ sizeof(struct fc_tlv_desc) 136 #define FC_TLV_DESC_LENGTH_FROM_SZ(desc) (sizeof(desc) - FC_TLV_DESC_HDR_SZ) 137 #define FC_TLV_DESC_SZ_FROM_LENGTH(tlv) (__be32_to_cpu((tlv)->desc_len) + FC_TLV_DESC_HDR_SZ) 138 struct fc_els_lsri_desc { 139 __be32 desc_tag; 140 __be32 desc_len; 141 struct { 142 __u8 cmd; 143 __u8 bytes[3]; 144 } rqst_w0; 145 }; 146 struct fc_els_csp { 147 __u8 sp_hi_ver; 148 __u8 sp_lo_ver; 149 __be16 sp_bb_cred; 150 __be16 sp_features; 151 __be16 sp_bb_data; 152 union { 153 struct { 154 __be16 _sp_tot_seq; 155 __be16 _sp_rel_off; 156 } sp_plogi; 157 struct { 158 __be32 _sp_r_a_tov; 159 } sp_flogi_acc; 160 } sp_u; 161 __be32 sp_e_d_tov; 162 }; 163 #define sp_tot_seq sp_u.sp_plogi._sp_tot_seq 164 #define sp_rel_off sp_u.sp_plogi._sp_rel_off 165 #define sp_r_a_tov sp_u.sp_flogi_acc._sp_r_a_tov 166 #define FC_SP_BB_DATA_MASK 0xfff 167 #define FC_SP_MIN_MAX_PAYLOAD FC_MIN_MAX_PAYLOAD 168 #define FC_SP_MAX_MAX_PAYLOAD FC_MAX_PAYLOAD 169 #define FC_SP_FT_NPIV 0x8000 170 #define FC_SP_FT_CIRO 0x8000 171 #define FC_SP_FT_CLAD 0x8000 172 #define FC_SP_FT_RAND 0x4000 173 #define FC_SP_FT_VAL 0x2000 174 #define FC_SP_FT_NPIV_ACC 0x2000 175 #define FC_SP_FT_FPORT 0x1000 176 #define FC_SP_FT_ABB 0x0800 177 #define FC_SP_FT_EDTR 0x0400 178 #define FC_SP_FT_MCAST 0x0200 179 #define FC_SP_FT_BCAST 0x0100 180 #define FC_SP_FT_HUNT 0x0080 181 #define FC_SP_FT_SIMP 0x0040 182 #define FC_SP_FT_SEC 0x0020 183 #define FC_SP_FT_CSYN 0x0010 184 #define FC_SP_FT_RTTOV 0x0008 185 #define FC_SP_FT_HALF 0x0004 186 #define FC_SP_FT_SEQC 0x0002 187 #define FC_SP_FT_PAYL 0x0001 188 struct fc_els_cssp { 189 __be16 cp_class; 190 __be16 cp_init; 191 __be16 cp_recip; 192 __be16 cp_rdfs; 193 __be16 cp_con_seq; 194 __be16 cp_ee_cred; 195 __u8 cp_resv1; 196 __u8 cp_open_seq; 197 __u8 _cp_resv2[2]; 198 }; 199 #define FC_CPC_VALID 0x8000 200 #define FC_CPC_IMIX 0x4000 201 #define FC_CPC_SEQ 0x0800 202 #define FC_CPC_CAMP 0x0200 203 #define FC_CPC_PRI 0x0080 204 #define FC_CPI_CSYN 0x0010 205 #define FC_CPR_CSYN 0x0008 206 struct fc_els_flogi { 207 __u8 fl_cmd; 208 __u8 _fl_resvd[3]; 209 struct fc_els_csp fl_csp; 210 __be64 fl_wwpn; 211 __be64 fl_wwnn; 212 struct fc_els_cssp fl_cssp[4]; 213 __u8 fl_vend[16]; 214 } __attribute__((__packed__)); 215 struct fc_els_spp { 216 __u8 spp_type; 217 __u8 spp_type_ext; 218 __u8 spp_flags; 219 __u8 _spp_resvd; 220 __be32 spp_orig_pa; 221 __be32 spp_resp_pa; 222 __be32 spp_params; 223 }; 224 #define FC_SPP_OPA_VAL 0x80 225 #define FC_SPP_RPA_VAL 0x40 226 #define FC_SPP_EST_IMG_PAIR 0x20 227 #define FC_SPP_RESP_MASK 0x0f 228 enum fc_els_spp_resp { 229 FC_SPP_RESP_ACK = 1, 230 FC_SPP_RESP_RES = 2, 231 FC_SPP_RESP_INIT = 3, 232 FC_SPP_RESP_NO_PA = 4, 233 FC_SPP_RESP_CONF = 5, 234 FC_SPP_RESP_COND = 6, 235 FC_SPP_RESP_MULT = 7, 236 FC_SPP_RESP_INVL = 8, 237 }; 238 struct fc_els_rrq { 239 __u8 rrq_cmd; 240 __u8 rrq_zero[3]; 241 __u8 rrq_resvd; 242 __u8 rrq_s_id[3]; 243 __be16 rrq_ox_id; 244 __be16 rrq_rx_id; 245 }; 246 struct fc_els_rec { 247 __u8 rec_cmd; 248 __u8 rec_zero[3]; 249 __u8 rec_resvd; 250 __u8 rec_s_id[3]; 251 __be16 rec_ox_id; 252 __be16 rec_rx_id; 253 }; 254 struct fc_els_rec_acc { 255 __u8 reca_cmd; 256 __u8 reca_zero[3]; 257 __be16 reca_ox_id; 258 __be16 reca_rx_id; 259 __u8 reca_resvd1; 260 __u8 reca_ofid[3]; 261 __u8 reca_resvd2; 262 __u8 reca_rfid[3]; 263 __be32 reca_fc4value; 264 __be32 reca_e_stat; 265 }; 266 struct fc_els_prli { 267 __u8 prli_cmd; 268 __u8 prli_spp_len; 269 __be16 prli_len; 270 }; 271 struct fc_els_prlo { 272 __u8 prlo_cmd; 273 __u8 prlo_obs; 274 __be16 prlo_len; 275 }; 276 struct fc_els_adisc { 277 __u8 adisc_cmd; 278 __u8 adisc_resv[3]; 279 __u8 adisc_resv1; 280 __u8 adisc_hard_addr[3]; 281 __be64 adisc_wwpn; 282 __be64 adisc_wwnn; 283 __u8 adisc_resv2; 284 __u8 adisc_port_id[3]; 285 } __attribute__((__packed__)); 286 struct fc_els_logo { 287 __u8 fl_cmd; 288 __u8 fl_zero[3]; 289 __u8 fl_resvd; 290 __u8 fl_n_port_id[3]; 291 __be64 fl_n_port_wwn; 292 }; 293 struct fc_els_rtv { 294 __u8 rtv_cmd; 295 __u8 rtv_zero[3]; 296 }; 297 struct fc_els_rtv_acc { 298 __u8 rtv_cmd; 299 __u8 rtv_zero[3]; 300 __be32 rtv_r_a_tov; 301 __be32 rtv_e_d_tov; 302 __be32 rtv_toq; 303 }; 304 #define FC_ELS_RTV_EDRES (1 << 26) 305 #define FC_ELS_RTV_RTTOV (1 << 19) 306 struct fc_els_scr { 307 __u8 scr_cmd; 308 __u8 scr_resv[6]; 309 __u8 scr_reg_func; 310 }; 311 enum fc_els_scr_func { 312 ELS_SCRF_FAB = 1, 313 ELS_SCRF_NPORT = 2, 314 ELS_SCRF_FULL = 3, 315 ELS_SCRF_CLEAR = 255, 316 }; 317 struct fc_els_rscn { 318 __u8 rscn_cmd; 319 __u8 rscn_page_len; 320 __be16 rscn_plen; 321 }; 322 struct fc_els_rscn_page { 323 __u8 rscn_page_flags; 324 __u8 rscn_fid[3]; 325 }; 326 #define ELS_RSCN_EV_QUAL_BIT 2 327 #define ELS_RSCN_EV_QUAL_MASK 0xf 328 #define ELS_RSCN_ADDR_FMT_BIT 0 329 #define ELS_RSCN_ADDR_FMT_MASK 0x3 330 enum fc_els_rscn_ev_qual { 331 ELS_EV_QUAL_NONE = 0, 332 ELS_EV_QUAL_NS_OBJ = 1, 333 ELS_EV_QUAL_PORT_ATTR = 2, 334 ELS_EV_QUAL_SERV_OBJ = 3, 335 ELS_EV_QUAL_SW_CONFIG = 4, 336 ELS_EV_QUAL_REM_OBJ = 5, 337 }; 338 enum fc_els_rscn_addr_fmt { 339 ELS_ADDR_FMT_PORT = 0, 340 ELS_ADDR_FMT_AREA = 1, 341 ELS_ADDR_FMT_DOM = 2, 342 ELS_ADDR_FMT_FAB = 3, 343 }; 344 struct fc_els_rnid { 345 __u8 rnid_cmd; 346 __u8 rnid_resv[3]; 347 __u8 rnid_fmt; 348 __u8 rnid_resv2[3]; 349 }; 350 enum fc_els_rnid_fmt { 351 ELS_RNIDF_NONE = 0, 352 ELS_RNIDF_GEN = 0xdf, 353 }; 354 struct fc_els_rnid_resp { 355 __u8 rnid_cmd; 356 __u8 rnid_resv[3]; 357 __u8 rnid_fmt; 358 __u8 rnid_cid_len; 359 __u8 rnid_resv2; 360 __u8 rnid_sid_len; 361 }; 362 struct fc_els_rnid_cid { 363 __be64 rnid_wwpn; 364 __be64 rnid_wwnn; 365 }; 366 struct fc_els_rnid_gen { 367 __u8 rnid_vend_id[16]; 368 __be32 rnid_atype; 369 __be32 rnid_phys_port; 370 __be32 rnid_att_nodes; 371 __u8 rnid_node_mgmt; 372 __u8 rnid_ip_ver; 373 __be16 rnid_prot_port; 374 __be32 rnid_ip_addr[4]; 375 __u8 rnid_resvd[2]; 376 __be16 rnid_vend_spec; 377 }; 378 enum fc_els_rnid_atype { 379 ELS_RNIDA_UNK = 0x01, 380 ELS_RNIDA_OTHER = 0x02, 381 ELS_RNIDA_HUB = 0x03, 382 ELS_RNIDA_SWITCH = 0x04, 383 ELS_RNIDA_GATEWAY = 0x05, 384 ELS_RNIDA_CONV = 0x06, 385 ELS_RNIDA_HBA = 0x07, 386 ELS_RNIDA_PROXY = 0x08, 387 ELS_RNIDA_STORAGE = 0x09, 388 ELS_RNIDA_HOST = 0x0a, 389 ELS_RNIDA_SUBSYS = 0x0b, 390 ELS_RNIDA_ACCESS = 0x0e, 391 ELS_RNIDA_NAS = 0x11, 392 ELS_RNIDA_BRIDGE = 0x12, 393 ELS_RNIDA_VIRT = 0x13, 394 ELS_RNIDA_MF = 0xff, 395 ELS_RNIDA_MF_HUB = 1UL << 31, 396 ELS_RNIDA_MF_SW = 1UL << 30, 397 ELS_RNIDA_MF_GW = 1UL << 29, 398 ELS_RNIDA_MF_ST = 1UL << 28, 399 ELS_RNIDA_MF_HOST = 1UL << 27, 400 ELS_RNIDA_MF_SUB = 1UL << 26, 401 ELS_RNIDA_MF_ACC = 1UL << 25, 402 ELS_RNIDA_MF_WDM = 1UL << 24, 403 ELS_RNIDA_MF_NAS = 1UL << 23, 404 ELS_RNIDA_MF_BR = 1UL << 22, 405 ELS_RNIDA_MF_VIRT = 1UL << 21, 406 }; 407 enum fc_els_rnid_mgmt { 408 ELS_RNIDM_SNMP = 0, 409 ELS_RNIDM_TELNET = 1, 410 ELS_RNIDM_HTTP = 2, 411 ELS_RNIDM_HTTPS = 3, 412 ELS_RNIDM_XML = 4, 413 }; 414 enum fc_els_rnid_ipver { 415 ELS_RNIDIP_NONE = 0, 416 ELS_RNIDIP_V4 = 1, 417 ELS_RNIDIP_V6 = 2, 418 }; 419 struct fc_els_rpl { 420 __u8 rpl_cmd; 421 __u8 rpl_resv[5]; 422 __be16 rpl_max_size; 423 __u8 rpl_resv1; 424 __u8 rpl_index[3]; 425 }; 426 struct fc_els_pnb { 427 __be32 pnb_phys_pn; 428 __u8 pnb_resv; 429 __u8 pnb_port_id[3]; 430 __be64 pnb_wwpn; 431 }; 432 struct fc_els_rpl_resp { 433 __u8 rpl_cmd; 434 __u8 rpl_resv1; 435 __be16 rpl_plen; 436 __u8 rpl_resv2; 437 __u8 rpl_llen[3]; 438 __u8 rpl_resv3; 439 __u8 rpl_index[3]; 440 struct fc_els_pnb rpl_pnb[1]; 441 }; 442 struct fc_els_lesb { 443 __be32 lesb_link_fail; 444 __be32 lesb_sync_loss; 445 __be32 lesb_sig_loss; 446 __be32 lesb_prim_err; 447 __be32 lesb_inv_word; 448 __be32 lesb_inv_crc; 449 }; 450 struct fc_els_rps { 451 __u8 rps_cmd; 452 __u8 rps_resv[2]; 453 __u8 rps_flag; 454 __be64 rps_port_spec; 455 }; 456 enum fc_els_rps_flag { 457 FC_ELS_RPS_DID = 0x00, 458 FC_ELS_RPS_PPN = 0x01, 459 FC_ELS_RPS_WWPN = 0x02, 460 }; 461 struct fc_els_rps_resp { 462 __u8 rps_cmd; 463 __u8 rps_resv[2]; 464 __u8 rps_flag; 465 __u8 rps_resv2[2]; 466 __be16 rps_status; 467 struct fc_els_lesb rps_lesb; 468 }; 469 enum fc_els_rps_resp_flag { 470 FC_ELS_RPS_LPEV = 0x01, 471 }; 472 enum fc_els_rps_resp_status { 473 FC_ELS_RPS_PTP = 1 << 5, 474 FC_ELS_RPS_LOOP = 1 << 4, 475 FC_ELS_RPS_FAB = 1 << 3, 476 FC_ELS_RPS_NO_SIG = 1 << 2, 477 FC_ELS_RPS_NO_SYNC = 1 << 1, 478 FC_ELS_RPS_RESET = 1 << 0, 479 }; 480 struct fc_els_lirr { 481 __u8 lirr_cmd; 482 __u8 lirr_resv[3]; 483 __u8 lirr_func; 484 __u8 lirr_fmt; 485 __u8 lirr_resv2[2]; 486 }; 487 enum fc_els_lirr_func { 488 ELS_LIRR_SET_COND = 0x01, 489 ELS_LIRR_SET_UNCOND = 0x02, 490 ELS_LIRR_CLEAR = 0xff 491 }; 492 struct fc_els_srl { 493 __u8 srl_cmd; 494 __u8 srl_resv[3]; 495 __u8 srl_flag; 496 __u8 srl_flag_param[3]; 497 }; 498 enum fc_els_srl_flag { 499 FC_ELS_SRL_ALL = 0x00, 500 FC_ELS_SRL_ONE = 0x01, 501 FC_ELS_SRL_EN_PER = 0x02, 502 FC_ELS_SRL_DIS_PER = 0x03, 503 }; 504 struct fc_els_rls { 505 __u8 rls_cmd; 506 __u8 rls_resv[4]; 507 __u8 rls_port_id[3]; 508 }; 509 struct fc_els_rls_resp { 510 __u8 rls_cmd; 511 __u8 rls_resv[3]; 512 struct fc_els_lesb rls_lesb; 513 }; 514 struct fc_els_rlir { 515 __u8 rlir_cmd; 516 __u8 rlir_resv[3]; 517 __u8 rlir_fmt; 518 __u8 rlir_clr_len; 519 __u8 rlir_cld_len; 520 __u8 rlir_slr_len; 521 }; 522 struct fc_els_clir { 523 __be64 clir_wwpn; 524 __be64 clir_wwnn; 525 __u8 clir_port_type; 526 __u8 clir_port_id[3]; 527 __be64 clir_conn_wwpn; 528 __be64 clir_conn_wwnn; 529 __be64 clir_fab_name; 530 __be32 clir_phys_port; 531 __be32 clir_trans_id; 532 __u8 clir_resv[3]; 533 __u8 clir_ts_fmt; 534 __be64 clir_timestamp; 535 }; 536 enum fc_els_clir_ts_fmt { 537 ELS_CLIR_TS_UNKNOWN = 0, 538 ELS_CLIR_TS_SEC_FRAC = 1, 539 ELS_CLIR_TS_CSU = 2, 540 }; 541 struct fc_els_clid { 542 __u8 clid_iq; 543 __u8 clid_ic; 544 __be16 clid_epai; 545 }; 546 enum fc_els_clid_iq { 547 ELS_CLID_SWITCH = 0x20, 548 ELS_CLID_E_PORT = 0x10, 549 ELS_CLID_SEV_MASK = 0x0c, 550 ELS_CLID_SEV_INFO = 0x00, 551 ELS_CLID_SEV_INOP = 0x08, 552 ELS_CLID_SEV_DEG = 0x04, 553 ELS_CLID_LASER = 0x02, 554 ELS_CLID_FRU = 0x01, 555 }; 556 enum fc_els_clid_ic { 557 ELS_CLID_IC_IMPL = 1, 558 ELS_CLID_IC_BER = 2, 559 ELS_CLID_IC_LOS = 3, 560 ELS_CLID_IC_NOS = 4, 561 ELS_CLID_IC_PST = 5, 562 ELS_CLID_IC_INVAL = 6, 563 ELS_CLID_IC_LOOP_TO = 7, 564 ELS_CLID_IC_LIP = 8, 565 }; 566 enum fc_fpin_li_event_types { 567 FPIN_LI_UNKNOWN = 0x0, 568 FPIN_LI_LINK_FAILURE = 0x1, 569 FPIN_LI_LOSS_OF_SYNC = 0x2, 570 FPIN_LI_LOSS_OF_SIG = 0x3, 571 FPIN_LI_PRIM_SEQ_ERR = 0x4, 572 FPIN_LI_INVALID_TX_WD = 0x5, 573 FPIN_LI_INVALID_CRC = 0x6, 574 FPIN_LI_DEVICE_SPEC = 0xF, 575 }; 576 #define FC_FPIN_LI_EVT_TYPES_INIT { { FPIN_LI_UNKNOWN, "Unknown" }, { FPIN_LI_LINK_FAILURE, "Link Failure" }, { FPIN_LI_LOSS_OF_SYNC, "Loss of Synchronization" }, { FPIN_LI_LOSS_OF_SIG, "Loss of Signal" }, { FPIN_LI_PRIM_SEQ_ERR, "Primitive Sequence Protocol Error" }, { FPIN_LI_INVALID_TX_WD, "Invalid Transmission Word" }, { FPIN_LI_INVALID_CRC, "Invalid CRC" }, { FPIN_LI_DEVICE_SPEC, "Device Specific" }, \ 577 } 578 enum fc_fpin_deli_event_types { 579 FPIN_DELI_UNKNOWN = 0x0, 580 FPIN_DELI_TIMEOUT = 0x1, 581 FPIN_DELI_UNABLE_TO_ROUTE = 0x2, 582 FPIN_DELI_DEVICE_SPEC = 0xF, 583 }; 584 #define FC_FPIN_DELI_EVT_TYPES_INIT { { FPIN_DELI_UNKNOWN, "Unknown" }, { FPIN_DELI_TIMEOUT, "Timeout" }, { FPIN_DELI_UNABLE_TO_ROUTE, "Unable to Route" }, { FPIN_DELI_DEVICE_SPEC, "Device Specific" }, \ 585 } 586 enum fc_fpin_congn_event_types { 587 FPIN_CONGN_CLEAR = 0x0, 588 FPIN_CONGN_LOST_CREDIT = 0x1, 589 FPIN_CONGN_CREDIT_STALL = 0x2, 590 FPIN_CONGN_OVERSUBSCRIPTION = 0x3, 591 FPIN_CONGN_DEVICE_SPEC = 0xF, 592 }; 593 #define FC_FPIN_CONGN_EVT_TYPES_INIT { { FPIN_CONGN_CLEAR, "Clear" }, { FPIN_CONGN_LOST_CREDIT, "Lost Credit" }, { FPIN_CONGN_CREDIT_STALL, "Credit Stall" }, { FPIN_CONGN_OVERSUBSCRIPTION, "Oversubscription" }, { FPIN_CONGN_DEVICE_SPEC, "Device Specific" }, \ 594 } 595 enum fc_fpin_congn_severity_types { 596 FPIN_CONGN_SEVERITY_WARNING = 0xF1, 597 FPIN_CONGN_SEVERITY_ERROR = 0xF7, 598 }; 599 struct fc_fn_li_desc { 600 __be32 desc_tag; 601 __be32 desc_len; 602 __be64 detecting_wwpn; 603 __be64 attached_wwpn; 604 __be16 event_type; 605 __be16 event_modifier; 606 __be32 event_threshold; 607 __be32 event_count; 608 __be32 pname_count; 609 __be64 pname_list[]; 610 }; 611 struct fc_fn_deli_desc { 612 __be32 desc_tag; 613 __be32 desc_len; 614 __be64 detecting_wwpn; 615 __be64 attached_wwpn; 616 __be32 deli_reason_code; 617 }; 618 struct fc_fn_peer_congn_desc { 619 __be32 desc_tag; 620 __be32 desc_len; 621 __be64 detecting_wwpn; 622 __be64 attached_wwpn; 623 __be16 event_type; 624 __be16 event_modifier; 625 __be32 event_period; 626 __be32 pname_count; 627 __be64 pname_list[]; 628 }; 629 struct fc_fn_congn_desc { 630 __be32 desc_tag; 631 __be32 desc_len; 632 __be16 event_type; 633 __be16 event_modifier; 634 __be32 event_period; 635 __u8 severity; 636 __u8 resv[3]; 637 }; 638 struct fc_els_fpin { 639 __u8 fpin_cmd; 640 __u8 fpin_zero[3]; 641 __be32 desc_len; 642 struct fc_tlv_desc fpin_desc[]; 643 }; 644 struct fc_df_desc_fpin_reg { 645 __be32 desc_tag; 646 __be32 desc_len; 647 __be32 count; 648 __be32 desc_tags[]; 649 }; 650 struct fc_els_rdf { 651 __u8 fpin_cmd; 652 __u8 fpin_zero[3]; 653 __be32 desc_len; 654 struct fc_tlv_desc desc[]; 655 }; 656 struct fc_els_rdf_resp { 657 struct fc_els_ls_acc acc_hdr; 658 __be32 desc_list_len; 659 struct fc_els_lsri_desc lsri; 660 struct fc_tlv_desc desc[]; 661 }; 662 struct fc_diag_lnkflt_desc { 663 __be32 desc_tag; 664 __be32 desc_len; 665 __be32 degrade_activate_threshold; 666 __be32 degrade_deactivate_threshold; 667 __be32 fec_degrade_interval; 668 }; 669 enum fc_edc_cg_signal_cap_types { 670 EDC_CG_SIG_NOTSUPPORTED = 0x00, 671 EDC_CG_SIG_WARN_ONLY = 0x01, 672 EDC_CG_SIG_WARN_ALARM = 0x02, 673 }; 674 #define FC_EDC_CG_SIGNAL_CAP_TYPES_INIT { { EDC_CG_SIG_NOTSUPPORTED, "Signaling Not Supported" }, { EDC_CG_SIG_WARN_ONLY, "Warning Signal" }, { EDC_CG_SIG_WARN_ALARM, "Warning and Alarm Signals" }, \ 675 } 676 enum fc_diag_cg_sig_freq_types { 677 EDC_CG_SIGFREQ_CNT_MIN = 1, 678 EDC_CG_SIGFREQ_CNT_MAX = 999, 679 EDC_CG_SIGFREQ_SEC = 0x1, 680 EDC_CG_SIGFREQ_MSEC = 0x2, 681 }; 682 struct fc_diag_cg_sig_freq { 683 __be16 count; 684 __be16 units; 685 }; 686 struct fc_diag_cg_sig_desc { 687 __be32 desc_tag; 688 __be32 desc_len; 689 __be32 xmt_signal_capability; 690 struct fc_diag_cg_sig_freq xmt_signal_frequency; 691 __be32 rcv_signal_capability; 692 struct fc_diag_cg_sig_freq rcv_signal_frequency; 693 }; 694 struct fc_els_edc { 695 __u8 edc_cmd; 696 __u8 edc_zero[3]; 697 __be32 desc_len; 698 struct fc_tlv_desc desc[]; 699 }; 700 struct fc_els_edc_resp { 701 struct fc_els_ls_acc acc_hdr; 702 __be32 desc_list_len; 703 struct fc_els_lsri_desc lsri; 704 struct fc_tlv_desc desc[]; 705 }; 706 #endif 707