4864 update emlxs from source provided by Emulex for 16G FC
[unleashed.git] / usr / src / uts / common / sys / fibre-channel / fca / emlxs / emlxs_fcf.h
blobc8c783482bd24c9c83793c34edae6208e4d8f4f9
1 /*
2 * CDDL HEADER START
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.
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.
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]
19 * CDDL HEADER END
23 * Copyright (c) 2004-2012 Emulex. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _EMLXS_FCF_H
28 #define _EMLXS_FCF_H
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
34 #define FCFTAB_MAX_FCFI_COUNT 1
35 #define FCFI_MAX_VFI_COUNT 1
37 /* Internal generic events */
38 #define FCF_EVENT_STATE_ENTER 0
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
50 /* Internal async events */
51 #define FCF_EVENT_FCFTAB_ONLINE 9
52 #define FCF_EVENT_FCFTAB_OFFLINE 10
54 #define FCF_EVENT_FCFI_ONLINE 11
55 #define FCF_EVENT_FCFI_OFFLINE 12
56 #define FCF_EVENT_FCFI_PAUSE 13
58 #define FCF_EVENT_VFI_ONLINE 14
59 #define FCF_EVENT_VFI_OFFLINE 15
60 #define FCF_EVENT_VFI_PAUSE 16
62 #define FCF_EVENT_VPI_ONLINE 17
63 #define FCF_EVENT_VPI_OFFLINE 18
64 #define FCF_EVENT_VPI_PAUSE 19
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
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
92 typedef struct XRIobj
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
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
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
122 } XRIobj_t;
125 typedef struct emlxs_deferred_cmpl
127 struct emlxs_port *port;
128 struct emlxs_node *node;
130 void *arg1;
131 void *arg2;
132 void *arg3;
134 } emlxs_deferred_cmpl_t;
137 #define FABRIC_RPI 0xffff
139 typedef struct RPIobj
141 uint16_t index;
142 uint16_t RPI;
144 uint16_t prev_reason;
145 uint16_t prev_state;
147 uint16_t reason;
148 uint16_t state;
149 #define RPI_STATE_FREE 0
151 #define RPI_STATE_RESERVED 1
152 #define RPI_STATE_OFFLINE 2
154 #define RPI_STATE_UNREG_CMPL 3
155 #define RPI_STATE_UNREG_FAILED 4
156 #define RPI_STATE_UNREG 5
158 #define RPI_STATE_REG 6
159 #define RPI_STATE_REG_FAILED 7
160 #define RPI_STATE_REG_CMPL 8
162 #define RPI_STATE_PAUSED 9
164 #define RPI_STATE_RESUME 10
165 #define RPI_STATE_RESUME_FAILED 11
166 #define RPI_STATE_RESUME_CMPL 12
168 #define RPI_STATE_ONLINE 13
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
176 #define EMLXS_RPI_FIRST 0x80000000
178 uint32_t attempts;
179 uint32_t xri_count; /* Managed by XRIobj_t */
181 uint32_t idle_timer;
183 struct VPIobj *vpip;
185 /* Node info */
186 struct emlxs_node *node;
187 uint32_t did;
188 SERV_PARM sparam;
190 emlxs_deferred_cmpl_t *cmpl;
192 } RPIobj_t;
195 typedef struct VPIobj
197 uint16_t index;
198 uint16_t VPI;
200 uint16_t prev_reason;
201 uint16_t prev_state;
203 uint16_t reason;
204 uint16_t state;
205 #define VPI_STATE_OFFLINE 0
207 #define VPI_STATE_INIT 1
208 #define VPI_STATE_INIT_FAILED 2
209 #define VPI_STATE_INIT_CMPL 3
211 #define VPI_STATE_UNREG_CMPL 4
212 #define VPI_STATE_UNREG_FAILED 5
213 #define VPI_STATE_UNREG 6
215 #define VPI_STATE_LOGO_CMPL 7
216 #define VPI_STATE_LOGO_FAILED 8
217 #define VPI_STATE_LOGO 9
219 #define VPI_STATE_PORT_OFFLINE 10
220 #define VPI_STATE_PORT_ONLINE 11
222 #define VPI_STATE_LOGI 12
223 #define VPI_STATE_LOGI_FAILED 13
224 #define VPI_STATE_LOGI_CMPL 14
226 #define VPI_STATE_REG 15
227 #define VPI_STATE_REG_FAILED 16
228 #define VPI_STATE_REG_CMPL 17
230 #define VPI_STATE_PAUSED 18
231 #define VPI_STATE_ONLINE 19
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
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
249 uint32_t attempts;
251 RPIobj_t fabric_rpi; /* Reserved Fabric RPI object */
252 RPIobj_t *fabric_rpip; /* Fabric RPI pointer (&fabric_rpi) */
253 RPIobj_t *p2p_rpip;
255 struct emlxs_port *port;
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 */
261 } VPIobj_t;
264 typedef struct VFIobj
266 uint16_t index;
267 uint16_t VFI;
269 uint16_t prev_reason;
270 uint16_t prev_state;
272 uint16_t reason;
273 uint16_t state;
274 #define VFI_STATE_OFFLINE 0
276 #define VFI_STATE_INIT 1
277 #define VFI_STATE_INIT_FAILED 2
278 #define VFI_STATE_INIT_CMPL 3
280 #define VFI_STATE_VPI_OFFLINE_CMPL 4
281 #define VFI_STATE_VPI_OFFLINE 5
283 #define VFI_STATE_VPI_ONLINE 6
284 #define VFI_STATE_VPI_ONLINE_CMPL 7
286 #define VFI_STATE_UNREG_CMPL 8
287 #define VFI_STATE_UNREG_FAILED 9
288 #define VFI_STATE_UNREG 10
290 #define VFI_STATE_REG 11
291 #define VFI_STATE_REG_FAILED 12
292 #define VFI_STATE_REG_CMPL 13
294 #define VFI_STATE_PAUSED 14
295 #define VFI_STATE_ONLINE 15
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
303 #define EMLXS_VFI_FCFI 0x00000010 /* vfi_online set */
304 #define EMLXS_VFI_INIT 0x00000020
305 #define EMLXS_VFI_REG 0x00000040
307 SERV_PARM sparam; /* Last registered sparams */
309 uint32_t attempts;
311 struct FCFIobj *fcfp; /* Managed by FCFIobj_t */
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 */
317 } VFIobj_t;
320 typedef struct FCFIobj
322 uint16_t index;
323 uint16_t FCFI;
325 uint16_t fcf_index;
326 uint16_t vlan_id;
328 uint16_t prev_reason;
329 uint16_t prev_state;
331 uint16_t reason;
332 uint16_t state;
333 #define FCFI_STATE_FREE 0
335 #define FCFI_STATE_OFFLINE 1
337 #define FCFI_STATE_UNREG_CMPL 2
338 #define FCFI_STATE_UNREG_FAILED 3
339 #define FCFI_STATE_UNREG 4
341 #define FCFI_STATE_REG 5
342 #define FCFI_STATE_REG_FAILED 6
343 #define FCFI_STATE_REG_CMPL 7
345 #define FCFI_STATE_VFI_OFFLINE_CMPL 8
346 #define FCFI_STATE_VFI_OFFLINE 9
348 #define FCFI_STATE_VFI_ONLINE 10
349 #define FCFI_STATE_VFI_ONLINE_CMPL 11
351 #define FCFI_STATE_PAUSED 12
352 #define FCFI_STATE_ONLINE 13
355 uint16_t pad;
356 uint16_t generation;
358 uint32_t offline_timer;
359 uint32_t attempts;
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
368 #define EMLXS_FCFI_FCFTAB 0x00000010 /* fcfi_online set */
369 #define EMLXS_FCFI_REG 0x00000020
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 */
378 #define EMLXS_FCFI_VLAN_ID 0x00010000
379 #define EMLXS_FCFI_BOOT 0x00020000
380 #define EMLXS_FCFI_PRIMARY 0x00040000
382 #define EMLXS_FCFI_TAGGED 0x80000000
384 /* struct VFTable vftab */
386 FCF_RECORD_t fcf_rec;
387 uint32_t priority;
389 uint32_t vfi_online; /* Managed by VFIobj_t */
391 } FCFIobj_t;
394 typedef struct VFTable
396 uint16_t prev_reason;
397 uint16_t prev_state;
399 uint16_t reason;
400 uint16_t state;
401 #define VFTAB_STATE_DISABLED 0
403 uint32_t vfi_active;
404 uint32_t vfi_count;
405 VFIobj_t *table;
407 } VFTable_t;
409 typedef struct FCFTable
412 uint16_t prev_reason;
413 uint16_t prev_state;
415 uint16_t reason;
416 uint16_t state;
417 /* Common states */
418 #define FCFTAB_STATE_SHUTDOWN 0
419 #define FCFTAB_STATE_OFFLINE 1
421 /* FCOE states */
422 #define FCOE_FCFTAB_STATE_SHUTDOWN FCFTAB_STATE_SHUTDOWN
423 #define FCOE_FCFTAB_STATE_OFFLINE FCFTAB_STATE_OFFLINE
425 #define FCOE_FCFTAB_STATE_SOLICIT 2
426 #define FCOE_FCFTAB_STATE_SOLICIT_FAILED 3
427 #define FCOE_FCFTAB_STATE_SOLICIT_CMPL 4
429 #define FCOE_FCFTAB_STATE_READ 5
430 #define FCOE_FCFTAB_STATE_READ_FAILED 6
431 #define FCOE_FCFTAB_STATE_READ_CMPL 7
433 #define FCOE_FCFTAB_STATE_FCFI_OFFLINE_CMPL 8
434 #define FCOE_FCFTAB_STATE_FCFI_OFFLINE 9
436 #define FCOE_FCFTAB_STATE_FCFI_ONLINE 10
437 #define FCOE_FCFTAB_STATE_FCFI_ONLINE_CMPL 11
439 #define FCOE_FCFTAB_STATE_ONLINE 12
442 /* FC states */
443 #define FC_FCFTAB_STATE_SHUTDOWN FCFTAB_STATE_SHUTDOWN
444 #define FC_FCFTAB_STATE_OFFLINE FCFTAB_STATE_OFFLINE
446 #define FC_FCFTAB_STATE_TOPO 2
447 #define FC_FCFTAB_STATE_TOPO_FAILED 3
448 #define FC_FCFTAB_STATE_TOPO_CMPL 4
450 #define FC_FCFTAB_STATE_CFGLINK 5
451 #define FC_FCFTAB_STATE_CFGLINK_FAILED 6
452 #define FC_FCFTAB_STATE_CFGLINK_CMPL 7
454 #define FC_FCFTAB_STATE_SPARM 8
455 #define FC_FCFTAB_STATE_SPARM_FAILED 9
456 #define FC_FCFTAB_STATE_SPARM_CMPL 10
458 #define FC_FCFTAB_STATE_FCFI_OFFLINE_CMPL 11
459 #define FC_FCFTAB_STATE_FCFI_OFFLINE 12
461 #define FC_FCFTAB_STATE_FCFI_ONLINE 13
462 #define FC_FCFTAB_STATE_FCFI_ONLINE_CMPL 14
464 #define FC_FCFTAB_STATE_ONLINE 15
467 uint16_t TID;
468 uint16_t generation;
470 uint32_t flag;
471 /* Common flags */
472 #define EMLXS_FCFTAB_REQ_MASK 0x0000000F
473 #define EMLXS_FCFTAB_SHUTDOWN 0x80000000
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
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
486 uint32_t attempts;
488 uint32_t fcfi_online; /* Managed by FCFIobj_t */
490 FCFIobj_t *fcfi[FCFTAB_MAX_FCFI_COUNT];
491 uint32_t fcfi_count;
493 FCFIobj_t *table;
494 uint16_t table_count;
496 uint32_t online_timer; /* FC */
498 uint32_t sol_timer; /* FCOE */
499 uint32_t read_timer; /* FCOE */
501 } FCFTable_t;
502 #define FCFTAB_READ_ALL (void*)0xffff
504 #ifdef __cplusplus
506 #endif
508 #endif /* _EMLXS_FCF_H */