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 9 * http://www.opensource.org/licenses/cddl1.txt. 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 /* 23 * Copyright (c) 2004-2012 Emulex. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _EMLXS_FCF_H 28 #define _EMLXS_FCF_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #define FCFTAB_MAX_FCFI_COUNT 1 35 #define FCFI_MAX_VFI_COUNT 1 36 37 /* Internal generic events */ 38 #define FCF_EVENT_STATE_ENTER 0 39 40 /* External async fabric events */ 41 #define FCF_EVENT_SHUTDOWN 1 42 #define FCF_EVENT_LINKUP 2 43 #define FCF_EVENT_LINKDOWN 3 44 #define FCF_EVENT_CVL 4 45 #define FCF_EVENT_FCFTAB_FULL 5 46 #define FCF_EVENT_FCF_FOUND 6 47 #define FCF_EVENT_FCF_LOST 7 48 #define FCF_EVENT_FCF_CHANGED 8 49 50 /* Internal async events */ 51 #define FCF_EVENT_FCFTAB_ONLINE 9 52 #define FCF_EVENT_FCFTAB_OFFLINE 10 53 54 #define FCF_EVENT_FCFI_ONLINE 11 55 #define FCF_EVENT_FCFI_OFFLINE 12 56 #define FCF_EVENT_FCFI_PAUSE 13 57 58 #define FCF_EVENT_VFI_ONLINE 14 59 #define FCF_EVENT_VFI_OFFLINE 15 60 #define FCF_EVENT_VFI_PAUSE 16 61 62 #define FCF_EVENT_VPI_ONLINE 17 63 #define FCF_EVENT_VPI_OFFLINE 18 64 #define FCF_EVENT_VPI_PAUSE 19 65 66 #define FCF_EVENT_RPI_ONLINE 20 67 #define FCF_EVENT_RPI_OFFLINE 21 68 #define FCF_EVENT_RPI_PAUSE 22 69 #define FCF_EVENT_RPI_RESUME 23 70 71 /* State change reason codes */ /* explan */ 72 #define FCF_REASON_NONE 0 73 #define FCF_REASON_REENTER 1 74 #define FCF_REASON_EVENT 2 /* evt */ 75 #define FCF_REASON_REQUESTED 3 76 #define FCF_REASON_NO_MBOX 4 77 #define FCF_REASON_NO_BUFFER 5 78 #define FCF_REASON_SEND_FAILED 6 /* status */ 79 #define FCF_REASON_MBOX_FAILED 7 /* status */ 80 #define FCF_REASON_MBOX_BUSY 8 /* status */ 81 #define FCF_REASON_NO_FCFI 9 82 #define FCF_REASON_NO_VFI 10 83 #define FCF_REASON_ONLINE_FAILED 11 84 #define FCF_REASON_OFFLINE_FAILED 12 85 #define FCF_REASON_OP_FAILED 13 /* attempts */ 86 #define FCF_REASON_NO_PKT 14 87 #define FCF_REASON_NO_NODE 15 88 #define FCF_REASON_NOT_ALLOWED 16 89 #define FCF_REASON_UNUSED 17 90 #define FCF_REASON_INVALID 18 91 92 typedef struct XRIobj 93 { 94 struct XRIobj *_f; 95 struct XRIobj *_b; 96 uint16_t XRI; 97 uint16_t state; 98 #define XRI_STATE_FREE 0 99 #define XRI_STATE_ALLOCATED 1 100 101 uint16_t sge_count; 102 uint16_t iotag; 103 MBUF_INFO SGList; 104 struct RPIobj *rpip; 105 struct RPIobj *reserved_rpip; 106 emlxs_buf_t *sbp; 107 uint32_t rx_id; /* Used for unsol exchanges */ 108 uint32_t flag; 109 #define EMLXS_XRI_RESERVED 0x00000001 110 #define EMLXS_XRI_PENDING_IO 0x00000002 111 #define EMLXS_XRI_BUSY 0x00000004 112 113 uint32_t type; 114 #define EMLXS_XRI_SOL_FCP_TYPE 1 115 #define EMLXS_XRI_UNSOL_FCP_TYPE 2 116 #define EMLXS_XRI_SOL_CT_TYPE 3 117 #define EMLXS_XRI_UNSOL_CT_TYPE 4 118 #define EMLXS_XRI_SOL_ELS_TYPE 5 119 #define EMLXS_XRI_UNSOL_ELS_TYPE 6 120 #define EMLXS_XRI_SOL_BLS_TYPE 7 121 122 } XRIobj_t; 123 124 125 typedef struct emlxs_deferred_cmpl 126 { 127 struct emlxs_port *port; 128 struct emlxs_node *node; 129 130 void *arg1; 131 void *arg2; 132 void *arg3; 133 134 } emlxs_deferred_cmpl_t; 135 136 137 #define FABRIC_RPI 0xffff 138 139 typedef struct RPIobj 140 { 141 uint16_t index; 142 uint16_t RPI; 143 144 uint16_t prev_reason; 145 uint16_t prev_state; 146 147 uint16_t reason; 148 uint16_t state; 149 #define RPI_STATE_FREE 0 150 151 #define RPI_STATE_RESERVED 1 152 #define RPI_STATE_OFFLINE 2 153 154 #define RPI_STATE_UNREG_CMPL 3 155 #define RPI_STATE_UNREG_FAILED 4 156 #define RPI_STATE_UNREG 5 157 158 #define RPI_STATE_REG 6 159 #define RPI_STATE_REG_FAILED 7 160 #define RPI_STATE_REG_CMPL 8 161 162 #define RPI_STATE_PAUSED 9 163 164 #define RPI_STATE_RESUME 10 165 #define RPI_STATE_RESUME_FAILED 11 166 #define RPI_STATE_RESUME_CMPL 12 167 168 #define RPI_STATE_ONLINE 13 169 170 171 uint32_t flag; 172 #define EMLXS_RPI_VPI 0x00000010 /* rpi_online set */ 173 #define EMLXS_RPI_PAUSED 0x00000020 /* rpi_paused set */ 174 #define EMLXS_RPI_REG 0x00000040 175 176 #define EMLXS_RPI_FIRST 0x80000000 177 178 uint32_t attempts; 179 uint32_t xri_count; /* Managed by XRIobj_t */ 180 181 uint32_t idle_timer; 182 183 struct VPIobj *vpip; 184 185 /* Node info */ 186 struct emlxs_node *node; 187 uint32_t did; 188 SERV_PARM sparam; 189 190 emlxs_deferred_cmpl_t *cmpl; 191 192 } RPIobj_t; 193 194 195 typedef struct VPIobj 196 { 197 uint16_t index; 198 uint16_t VPI; 199 200 uint16_t prev_reason; 201 uint16_t prev_state; 202 203 uint16_t reason; 204 uint16_t state; 205 #define VPI_STATE_OFFLINE 0 206 207 #define VPI_STATE_INIT 1 208 #define VPI_STATE_INIT_FAILED 2 209 #define VPI_STATE_INIT_CMPL 3 210 211 #define VPI_STATE_UNREG_CMPL 4 212 #define VPI_STATE_UNREG_FAILED 5 213 #define VPI_STATE_UNREG 6 214 215 #define VPI_STATE_LOGO_CMPL 7 216 #define VPI_STATE_LOGO_FAILED 8 217 #define VPI_STATE_LOGO 9 218 219 #define VPI_STATE_PORT_OFFLINE 10 220 #define VPI_STATE_PORT_ONLINE 11 221 222 #define VPI_STATE_LOGI 12 223 #define VPI_STATE_LOGI_FAILED 13 224 #define VPI_STATE_LOGI_CMPL 14 225 226 #define VPI_STATE_REG 15 227 #define VPI_STATE_REG_FAILED 16 228 #define VPI_STATE_REG_CMPL 17 229 230 #define VPI_STATE_PAUSED 18 231 #define VPI_STATE_ONLINE 19 232 233 234 uint32_t flag; 235 #define EMLXS_VPI_ONLINE_REQ 0x00000001 236 #define EMLXS_VPI_OFFLINE_REQ 0x00000002 237 #define EMLXS_VPI_PAUSE_REQ 0x00000004 238 #define EMLXS_VPI_REQ_MASK 0x0000000F 239 240 #define EMLXS_VPI_VFI 0x00000010 /* vpi_online set */ 241 #define EMLXS_VPI_VFI_LOGI 0x00000020 /* logi_count set */ 242 #define EMLXS_VPI_INIT 0x00000040 243 #define EMLXS_VPI_REG 0x00000080 244 #define EMLXS_VPI_PORT_ONLINE 0x00000100 245 #define EMLXS_VPI_LOGI 0x00000200 246 #define EMLXS_VPI_PORT_UNBIND 0x40000000 247 #define EMLXS_VPI_PORT_ENABLED 0x80000000 248 249 uint32_t attempts; 250 251 RPIobj_t fabric_rpi; /* Reserved Fabric RPI object */ 252 RPIobj_t *fabric_rpip; /* Fabric RPI pointer (&fabric_rpi) */ 253 RPIobj_t *p2p_rpip; 254 255 struct emlxs_port *port; 256 257 struct VFIobj *vfip; /* Managed by VFIobj_t */ 258 uint32_t rpi_online; /* Managed by RPIobj_t */ 259 uint32_t rpi_paused; /* Managed by RPIobj_t */ 260 261 } VPIobj_t; 262 263 264 typedef struct VFIobj 265 { 266 uint16_t index; 267 uint16_t VFI; 268 269 uint16_t prev_reason; 270 uint16_t prev_state; 271 272 uint16_t reason; 273 uint16_t state; 274 #define VFI_STATE_OFFLINE 0 275 276 #define VFI_STATE_INIT 1 277 #define VFI_STATE_INIT_FAILED 2 278 #define VFI_STATE_INIT_CMPL 3 279 280 #define VFI_STATE_VPI_OFFLINE_CMPL 4 281 #define VFI_STATE_VPI_OFFLINE 5 282 283 #define VFI_STATE_VPI_ONLINE 6 284 #define VFI_STATE_VPI_ONLINE_CMPL 7 285 286 #define VFI_STATE_UNREG_CMPL 8 287 #define VFI_STATE_UNREG_FAILED 9 288 #define VFI_STATE_UNREG 10 289 290 #define VFI_STATE_REG 11 291 #define VFI_STATE_REG_FAILED 12 292 #define VFI_STATE_REG_CMPL 13 293 294 #define VFI_STATE_PAUSED 14 295 #define VFI_STATE_ONLINE 15 296 297 uint32_t flag; 298 #define EMLXS_VFI_ONLINE_REQ 0x00000001 299 #define EMLXS_VFI_OFFLINE_REQ 0x00000002 300 #define EMLXS_VFI_PAUSE_REQ 0x00000004 301 #define EMLXS_VFI_REQ_MASK 0x0000000F 302 303 #define EMLXS_VFI_FCFI 0x00000010 /* vfi_online set */ 304 #define EMLXS_VFI_INIT 0x00000020 305 #define EMLXS_VFI_REG 0x00000040 306 307 SERV_PARM sparam; /* Last registered sparams */ 308 309 uint32_t attempts; 310 311 struct FCFIobj *fcfp; /* Managed by FCFIobj_t */ 312 313 uint32_t vpi_online; /* Managed by VPIobj_t */ 314 uint32_t logi_count; /* Managed by VPIobj_t */ 315 struct VPIobj *flogi_vpip; /* Managed by VPIobj_t */ 316 317 } VFIobj_t; 318 319 320 typedef struct FCFIobj 321 { 322 uint16_t index; 323 uint16_t FCFI; 324 325 uint16_t fcf_index; 326 uint16_t vlan_id; 327 328 uint16_t prev_reason; 329 uint16_t prev_state; 330 331 uint16_t reason; 332 uint16_t state; 333 #define FCFI_STATE_FREE 0 334 335 #define FCFI_STATE_OFFLINE 1 336 337 #define FCFI_STATE_UNREG_CMPL 2 338 #define FCFI_STATE_UNREG_FAILED 3 339 #define FCFI_STATE_UNREG 4 340 341 #define FCFI_STATE_REG 5 342 #define FCFI_STATE_REG_FAILED 6 343 #define FCFI_STATE_REG_CMPL 7 344 345 #define FCFI_STATE_VFI_OFFLINE_CMPL 8 346 #define FCFI_STATE_VFI_OFFLINE 9 347 348 #define FCFI_STATE_VFI_ONLINE 10 349 #define FCFI_STATE_VFI_ONLINE_CMPL 11 350 351 #define FCFI_STATE_PAUSED 12 352 #define FCFI_STATE_ONLINE 13 353 354 355 uint16_t pad; 356 uint16_t generation; 357 358 uint32_t offline_timer; 359 uint32_t attempts; 360 361 uint32_t event_tag; 362 uint32_t flag; 363 #define EMLXS_FCFI_ONLINE_REQ 0x00000001 364 #define EMLXS_FCFI_OFFLINE_REQ 0x00000002 365 #define EMLXS_FCFI_PAUSE_REQ 0x00000004 366 #define EMLXS_FCFI_REQ_MASK 0x0000000F 367 368 #define EMLXS_FCFI_FCFTAB 0x00000010 /* fcfi_online set */ 369 #define EMLXS_FCFI_REG 0x00000020 370 371 #define EMLXS_FCFI_VALID 0x00000100 372 #define EMLXS_FCFI_AVAILABLE 0x00000200 373 #define EMLXS_FCFI_CONFIGURED 0x00000400 374 #define EMLXS_FCFI_FRESH 0x00000800 375 #define EMLXS_FCFI_FAILED 0x00001000 376 #define EMLXS_FCFI_SELECTED 0x00002000 /* in use */ 377 378 #define EMLXS_FCFI_VLAN_ID 0x00010000 379 #define EMLXS_FCFI_BOOT 0x00020000 380 #define EMLXS_FCFI_PRIMARY 0x00040000 381 382 #define EMLXS_FCFI_TAGGED 0x80000000 383 384 /* struct VFTable vftab */ 385 386 FCF_RECORD_t fcf_rec; 387 uint32_t priority; 388 389 uint32_t vfi_online; /* Managed by VFIobj_t */ 390 391 } FCFIobj_t; 392 393 394 typedef struct VFTable 395 { 396 uint16_t prev_reason; 397 uint16_t prev_state; 398 399 uint16_t reason; 400 uint16_t state; 401 #define VFTAB_STATE_DISABLED 0 402 403 uint32_t vfi_active; 404 uint32_t vfi_count; 405 VFIobj_t *table; 406 407 } VFTable_t; 408 409 typedef struct FCFTable 410 { 411 412 uint16_t prev_reason; 413 uint16_t prev_state; 414 415 uint16_t reason; 416 uint16_t state; 417 /* Common states */ 418 #define FCFTAB_STATE_SHUTDOWN 0 419 #define FCFTAB_STATE_OFFLINE 1 420 421 /* FCOE states */ 422 #define FCOE_FCFTAB_STATE_SHUTDOWN FCFTAB_STATE_SHUTDOWN 423 #define FCOE_FCFTAB_STATE_OFFLINE FCFTAB_STATE_OFFLINE 424 425 #define FCOE_FCFTAB_STATE_SOLICIT 2 426 #define FCOE_FCFTAB_STATE_SOLICIT_FAILED 3 427 #define FCOE_FCFTAB_STATE_SOLICIT_CMPL 4 428 429 #define FCOE_FCFTAB_STATE_READ 5 430 #define FCOE_FCFTAB_STATE_READ_FAILED 6 431 #define FCOE_FCFTAB_STATE_READ_CMPL 7 432 433 #define FCOE_FCFTAB_STATE_FCFI_OFFLINE_CMPL 8 434 #define FCOE_FCFTAB_STATE_FCFI_OFFLINE 9 435 436 #define FCOE_FCFTAB_STATE_FCFI_ONLINE 10 437 #define FCOE_FCFTAB_STATE_FCFI_ONLINE_CMPL 11 438 439 #define FCOE_FCFTAB_STATE_ONLINE 12 440 441 442 /* FC states */ 443 #define FC_FCFTAB_STATE_SHUTDOWN FCFTAB_STATE_SHUTDOWN 444 #define FC_FCFTAB_STATE_OFFLINE FCFTAB_STATE_OFFLINE 445 446 #define FC_FCFTAB_STATE_TOPO 2 447 #define FC_FCFTAB_STATE_TOPO_FAILED 3 448 #define FC_FCFTAB_STATE_TOPO_CMPL 4 449 450 #define FC_FCFTAB_STATE_CFGLINK 5 451 #define FC_FCFTAB_STATE_CFGLINK_FAILED 6 452 #define FC_FCFTAB_STATE_CFGLINK_CMPL 7 453 454 #define FC_FCFTAB_STATE_SPARM 8 455 #define FC_FCFTAB_STATE_SPARM_FAILED 9 456 #define FC_FCFTAB_STATE_SPARM_CMPL 10 457 458 #define FC_FCFTAB_STATE_FCFI_OFFLINE_CMPL 11 459 #define FC_FCFTAB_STATE_FCFI_OFFLINE 12 460 461 #define FC_FCFTAB_STATE_FCFI_ONLINE 13 462 #define FC_FCFTAB_STATE_FCFI_ONLINE_CMPL 14 463 464 #define FC_FCFTAB_STATE_ONLINE 15 465 466 467 uint16_t TID; 468 uint16_t generation; 469 470 uint32_t flag; 471 /* Common flags */ 472 #define EMLXS_FCFTAB_REQ_MASK 0x0000000F 473 #define EMLXS_FCFTAB_SHUTDOWN 0x80000000 474 475 /* FCOE flags */ 476 #define EMLXS_FCOE_FCFTAB_SOL_REQ 0x00000001 477 #define EMLXS_FCOE_FCFTAB_READ_REQ 0x00000002 478 #define EMLXS_FCOE_FCFTAB_OFFLINE_REQ 0x00000004 479 480 /* FC flags */ 481 #define EMLXS_FC_FCFTAB_TOPO_REQ 0x00000001 482 #define EMLXS_FC_FCFTAB_CFGLINK_REQ 0x00000002 483 #define EMLXS_FC_FCFTAB_SPARM_REQ 0x00000004 484 #define EMLXS_FC_FCFTAB_OFFLINE_REQ 0x00000008 485 486 uint32_t attempts; 487 488 uint32_t fcfi_online; /* Managed by FCFIobj_t */ 489 490 FCFIobj_t *fcfi[FCFTAB_MAX_FCFI_COUNT]; 491 uint32_t fcfi_count; 492 493 FCFIobj_t *table; 494 uint16_t table_count; 495 496 uint32_t online_timer; /* FC */ 497 498 uint32_t sol_timer; /* FCOE */ 499 uint32_t read_timer; /* FCOE */ 500 501 } FCFTable_t; 502 #define FCFTAB_READ_ALL (void*)0xffff 503 504 #ifdef __cplusplus 505 } 506 #endif 507 508 #endif /* _EMLXS_FCF_H */ 509