1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __FC_H__
19#define __FC_H__
20
21#include <protocol/types.h>
22
23#pragma pack(1)
24
25
26
27
28struct fchs_s {
29#ifdef __BIGENDIAN
30 u32 routing:4;
31 u32 cat_info:4;
32#else
33 u32 cat_info:4;
34 u32 routing:4;
35#endif
36 u32 d_id:24;
37
38 u32 cs_ctl:8;
39 u32 s_id:24;
40
41 u32 type:8;
42 u32 f_ctl:24;
43
44 u8 seq_id;
45 u8 df_ctl;
46 u16 seq_cnt;
47
48 u16 ox_id;
49 u16 rx_id;
50
51 u32 ro;
52};
53
54
55
56struct fcbbehs_s {
57 u16 ver_rsvd;
58 u32 rsvd[2];
59 u32 rsvd__sof;
60};
61
62#define FC_SEQ_ID_MAX 256
63
64
65
66
67enum {
68 FC_RTG_FC4_DEV_DATA = 0x0,
69 FC_RTG_EXT_LINK = 0x2,
70 FC_RTG_FC4_LINK_DATA = 0x3,
71 FC_RTG_VIDEO_DATA = 0x4,
72 FC_RTG_EXT_HDR = 0x5,
73 FC_RTG_BASIC_LINK = 0x8,
74 FC_RTG_LINK_CTRL = 0xC,
75};
76
77
78
79
80enum {
81 FC_CAT_LD_REQUEST = 0x2,
82 FC_CAT_LD_REPLY = 0x3,
83 FC_CAT_LD_DIAG = 0xF,
84};
85
86
87
88
89enum {
90 FC_CAT_VFT_HDR = 0x0,
91 FC_CAT_IFR_HDR = 0x1,
92 FC_CAT_ENC_HDR = 0x2,
93};
94
95
96
97
98enum {
99 FC_CAT_UNCATEG_INFO = 0x0,
100 FC_CAT_SOLICIT_DATA = 0x1,
101 FC_CAT_UNSOLICIT_CTRL = 0x2,
102 FC_CAT_SOLICIT_CTRL = 0x3,
103 FC_CAT_UNSOLICIT_DATA = 0x4,
104 FC_CAT_DATA_DESC = 0x5,
105 FC_CAT_UNSOLICIT_CMD = 0x6,
106 FC_CAT_CMD_STATUS = 0x7,
107};
108
109
110
111
112enum {
113 FC_CAT_ACK_1 = 0x00,
114 FC_CAT_ACK_0_N = 0x01,
115 FC_CAT_P_RJT = 0x02,
116 FC_CAT_F_RJT = 0x03,
117 FC_CAT_P_BSY = 0x04,
118 FC_CAT_F_BSY_DATA = 0x05,
119 FC_CAT_F_BSY_LINK_CTL = 0x06,
120 FC_CAT_F_LCR = 0x07,
121 FC_CAT_NTY = 0x08,
122 FC_CAT_END = 0x09,
123};
124
125
126
127
128enum {
129 FC_TYPE_BLS = 0x0,
130 FC_TYPE_ELS = 0x1,
131 FC_TYPE_IP = 0x5,
132 FC_TYPE_FCP = 0x8,
133 FC_TYPE_GPP = 0x9,
134 FC_TYPE_SERVICES = 0x20,
135 FC_TYPE_FC_FSS = 0x22,
136 FC_TYPE_FC_AL = 0x23,
137 FC_TYPE_FC_SNMP = 0x24,
138 FC_TYPE_MAX = 256,
139};
140
141struct fc_fc4types_s{
142 u8 bits[FC_TYPE_MAX / 8];
143};
144
145
146
147
148enum {
149 FCTL_EC_ORIG = 0x000000,
150 FCTL_EC_RESP = 0x800000,
151 FCTL_SEQ_INI = 0x000000,
152 FCTL_SEQ_REC = 0x400000,
153 FCTL_FS_EXCH = 0x200000,
154 FCTL_LS_EXCH = 0x100000,
155 FCTL_END_SEQ = 0x080000,
156 FCTL_SI_XFER = 0x010000,
157 FCTL_RO_PRESENT = 0x000008,
158 FCTL_FILLBYTE_MASK = 0x000003
159};
160
161
162
163
164enum {
165 FC_MIN_WELL_KNOWN_ADDR = 0xFFFFF0,
166 FC_DOMAIN_CONTROLLER_MASK = 0xFFFC00,
167 FC_ALIAS_SERVER = 0xFFFFF8,
168 FC_MGMT_SERVER = 0xFFFFFA,
169 FC_TIME_SERVER = 0xFFFFFB,
170 FC_NAME_SERVER = 0xFFFFFC,
171 FC_FABRIC_CONTROLLER = 0xFFFFFD,
172 FC_FABRIC_PORT = 0xFFFFFE,
173 FC_BROADCAST_SERVER = 0xFFFFFF
174};
175
176
177
178
179#define FC_DOMAIN_MASK 0xFF0000
180#define FC_DOMAIN_SHIFT 16
181#define FC_AREA_MASK 0x00FF00
182#define FC_AREA_SHIFT 8
183#define FC_PORT_MASK 0x0000FF
184#define FC_PORT_SHIFT 0
185
186#define FC_GET_DOMAIN(p) (((p) & FC_DOMAIN_MASK) >> FC_DOMAIN_SHIFT)
187#define FC_GET_AREA(p) (((p) & FC_AREA_MASK) >> FC_AREA_SHIFT)
188#define FC_GET_PORT(p) (((p) & FC_PORT_MASK) >> FC_PORT_SHIFT)
189
190#define FC_DOMAIN_CTRLR(p) (FC_DOMAIN_CONTROLLER_MASK | (FC_GET_DOMAIN(p)))
191
192enum {
193 FC_RXID_ANY = 0xFFFFU,
194};
195
196
197
198
199struct fc_els_cmd_s{
200 u32 els_code:8;
201 u32 reserved:24;
202};
203
204
205
206
207enum {
208 FC_ELS_LS_RJT = 0x1,
209 FC_ELS_ACC = 0x02,
210 FC_ELS_PLOGI = 0x03,
211 FC_ELS_FLOGI = 0x04,
212 FC_ELS_LOGO = 0x05,
213 FC_ELS_ABTX = 0x06,
214 FC_ELS_RES = 0x08,
215 FC_ELS_RSS = 0x09,
216 FC_ELS_RSI = 0x0A,
217 FC_ELS_ESTC = 0x0C,
218 FC_ELS_RTV = 0x0E,
219 FC_ELS_RLS = 0x0F,
220 FC_ELS_ECHO = 0x10,
221 FC_ELS_TEST = 0x11,
222 FC_ELS_RRQ = 0x12,
223 FC_ELS_REC = 0x13,
224 FC_ELS_PRLI = 0x20,
225 FC_ELS_PRLO = 0x21,
226 FC_ELS_SCN = 0x22,
227 FC_ELS_TPRLO = 0x24,
228 FC_ELS_PDISC = 0x50,
229 FC_ELS_FDISC = 0x51,
230 FC_ELS_ADISC = 0x52,
231 FC_ELS_FAN = 0x60,
232 FC_ELS_RSCN = 0x61,
233 FC_ELS_SCR = 0x62,
234 FC_ELS_RTIN = 0x77,
235 FC_ELS_RNID = 0x78,
236 FC_ELS_RLIR = 0x79,
237
238 FC_ELS_RPSC = 0x7D,
239 FC_ELS_QSA = 0x7E,
240 FC_ELS_E2E_LBEACON = 0x81,
241
242 FC_ELS_AUTH = 0x90,
243 FC_ELS_RFCN = 0x97,
244
245
246};
247
248
249
250
251
252
253enum {
254 FC_PH_VER_4_3 = 0x09,
255 FC_PH_VER_PH_3 = 0x20,
256};
257
258
259
260
261enum {
262 FC_MIN_PDUSZ = 512,
263 FC_MAX_PDUSZ = 2112,
264};
265
266
267
268
269
270struct fc_plogi_csp_s{
271 u8 verhi;
272 u8 verlo;
273 u16 bbcred;
274
275#ifdef __BIGENDIAN
276 u8 ciro:1,
277 rro:1,
278 npiv_supp:1,
279 port_type:1,
280 altbbcred:1,
281 resolution:1,
282 vvl_info:1,
283 reserved1:1;
284
285 u8 hg_supp:1,
286 query_dbc:1,
287 security:1,
288 sync_cap:1,
289 r_t_tov:1,
290 dh_dup_supp:1,
291 cisc:1,
292 payload:1;
293#else
294 u8 reserved2:2,
295 resolution:1,
296 altbbcred:1,
297 port_type:1,
298 npiv_supp:1,
299 rro:1,
300 ciro:1;
301
302 u8 payload:1,
303 cisc:1,
304 dh_dup_supp:1,
305 r_t_tov:1,
306 sync_cap:1,
307 security:1,
308 query_dbc:1,
309 hg_supp:1;
310#endif
311
312 u16 rxsz;
313
314 u16 conseq;
315 u16 ro_bitmap;
316
317 u32 e_d_tov;
318};
319
320
321
322
323
324struct fc_plogi_clp_s{
325#ifdef __BIGENDIAN
326 u32 class_valid:1;
327 u32 intermix:1;
328
329
330
331 u32 reserved1:2;
332 u32 sequential:1;
333 u32 reserved2:3;
334#else
335 u32 reserved2:3;
336 u32 sequential:1;
337 u32 reserved1:2;
338 u32 intermix:1;
339
340
341
342 u32 class_valid:1;
343#endif
344
345 u32 reserved3:24;
346
347 u32 reserved4:16;
348 u32 rxsz:16;
349
350 u32 reserved5:8;
351 u32 conseq:8;
352 u32 e2e_credit:16;
353
354 u32 reserved7:8;
355 u32 ospx:8;
356 u32 reserved8:16;
357};
358
359#define FLOGI_VVL_BRCD 0x42524344
360
361
362
363
364
365struct fc_logi_s{
366 struct fc_els_cmd_s els_cmd;
367 struct fc_plogi_csp_s csp;
368 wwn_t port_name;
369 wwn_t node_name;
370 struct fc_plogi_clp_s class1;
371 struct fc_plogi_clp_s class2;
372 struct fc_plogi_clp_s class3;
373 struct fc_plogi_clp_s class4;
374 u8 vvl[16];
375};
376
377
378
379
380struct fc_logo_s{
381 struct fc_els_cmd_s els_cmd;
382 u32 res1:8;
383 u32 nport_id:24;
384 wwn_t orig_port_name;
385};
386
387
388
389
390struct fc_adisc_s {
391 struct fc_els_cmd_s els_cmd;
392 u32 res1:8;
393 u32 orig_HA:24;
394 wwn_t orig_port_name;
395 wwn_t orig_node_name;
396 u32 res2:8;
397 u32 nport_id:24;
398};
399
400
401
402
403struct fc_exch_status_blk_s{
404 u32 oxid:16;
405 u32 rxid:16;
406 u32 res1:8;
407 u32 orig_np:24;
408 u32 res2:8;
409 u32 resp_np:24;
410 u32 es_bits;
411 u32 res3;
412
413
414
415};
416
417
418
419
420struct fc_res_s {
421 struct fc_els_cmd_s els_cmd;
422 u32 res1:8;
423 u32 nport_id:24;
424 u32 oxid:16;
425 u32 rxid:16;
426 u8 assoc_hdr[32];
427};
428
429
430
431
432struct fc_res_acc_s{
433 struct fc_els_cmd_s els_cmd;
434 struct fc_exch_status_blk_s fc_exch_blk;
435};
436
437
438
439
440struct fc_rec_s {
441 struct fc_els_cmd_s els_cmd;
442 u32 res1:8;
443 u32 nport_id:24;
444 u32 oxid:16;
445 u32 rxid:16;
446};
447
448#define FC_REC_ESB_OWN_RSP 0x80000000
449#define FC_REC_ESB_SI 0x40000000
450#define FC_REC_ESB_COMP 0x20000000
451#define FC_REC_ESB_ENDCOND_ABN 0x10000000
452#define FC_REC_ESB_RQACT 0x04000000
453#define FC_REC_ESB_ERRP_MSK 0x03000000
454#define FC_REC_ESB_OXID_INV 0x00800000
455#define FC_REC_ESB_RXID_INV 0x00400000
456#define FC_REC_ESB_PRIO_INUSE 0x00200000
457
458
459
460
461struct fc_rec_acc_s {
462 struct fc_els_cmd_s els_cmd;
463 u32 oxid:16;
464 u32 rxid:16;
465 u32 res1:8;
466 u32 orig_id:24;
467 u32 res2:8;
468 u32 resp_id:24;
469 u32 count;
470 u32 e_stat;
471};
472
473
474
475
476struct fc_rsi_s {
477 struct fc_els_cmd_s els_cmd;
478 u32 res1:8;
479 u32 orig_sid:24;
480 u32 oxid:16;
481 u32 rxid:16;
482};
483
484
485
486
487
488struct fc_prli_params_s{
489 u32 reserved: 16;
490#ifdef __BIGENDIAN
491 u32 reserved1: 5;
492 u32 rec_support : 1;
493 u32 task_retry_id : 1;
494 u32 retry : 1;
495
496 u32 confirm : 1;
497 u32 doverlay:1;
498 u32 initiator:1;
499 u32 target:1;
500 u32 cdmix:1;
501 u32 drmix:1;
502 u32 rxrdisab:1;
503 u32 wxrdisab:1;
504#else
505 u32 retry : 1;
506 u32 task_retry_id : 1;
507 u32 rec_support : 1;
508 u32 reserved1: 5;
509
510 u32 wxrdisab:1;
511 u32 rxrdisab:1;
512 u32 drmix:1;
513 u32 cdmix:1;
514 u32 target:1;
515 u32 initiator:1;
516 u32 doverlay:1;
517 u32 confirm : 1;
518#endif
519};
520
521
522
523
524enum {
525 FC_PRLI_ACC_XQTD = 0x1,
526 FC_PRLI_ACC_PREDEF_IMG = 0x5,
527};
528
529struct fc_prli_params_page_s{
530 u32 type:8;
531 u32 codext:8;
532#ifdef __BIGENDIAN
533 u32 origprocasv:1;
534 u32 rsppav:1;
535 u32 imagepair:1;
536 u32 reserved1:1;
537 u32 rspcode:4;
538#else
539 u32 rspcode:4;
540 u32 reserved1:1;
541 u32 imagepair:1;
542 u32 rsppav:1;
543 u32 origprocasv:1;
544#endif
545 u32 reserved2:8;
546
547 u32 origprocas;
548 u32 rspprocas;
549 struct fc_prli_params_s servparams;
550};
551
552
553
554
555struct fc_prli_s{
556 u32 command:8;
557 u32 pglen:8;
558 u32 pagebytes:16;
559 struct fc_prli_params_page_s parampage;
560};
561
562
563
564
565struct fc_prlo_params_page_s{
566 u32 type:8;
567 u32 type_ext:8;
568#ifdef __BIGENDIAN
569 u32 opa_valid:1;
570
571
572 u32 rpa_valid:1;
573 u32 res1:14;
574#else
575 u32 res1:14;
576 u32 rpa_valid:1;
577 u32 opa_valid:1;
578
579
580#endif
581 u32 orig_process_assc;
582 u32 resp_process_assc;
583
584 u32 res2;
585};
586
587
588
589
590struct fc_prlo_s{
591 u32 command:8;
592 u32 page_len:8;
593 u32 payload_len:16;
594 struct fc_prlo_params_page_s prlo_params[1];
595};
596
597
598
599
600struct fc_prlo_acc_params_page_s{
601 u32 type:8;
602 u32 type_ext:8;
603
604#ifdef __BIGENDIAN
605 u32 opa_valid:1;
606
607
608 u32 rpa_valid:1;
609 u32 res1:14;
610#else
611 u32 res1:14;
612 u32 rpa_valid:1;
613 u32 opa_valid:1;
614
615
616#endif
617 u32 orig_process_assc;
618 u32 resp_process_assc;
619
620 u32 fc4type_csp;
621};
622
623
624
625
626struct fc_prlo_acc_s{
627 u32 command:8;
628 u32 page_len:8;
629 u32 payload_len:16;
630 struct fc_prlo_acc_params_page_s prlo_acc_params[1];
631};
632
633
634
635
636enum {
637 FC_SCR_REG_FUNC_FABRIC_DETECTED = 0x01,
638 FC_SCR_REG_FUNC_N_PORT_DETECTED = 0x02,
639 FC_SCR_REG_FUNC_FULL = 0x03,
640 FC_SCR_REG_FUNC_CLEAR_REG = 0xFF,
641};
642
643
644enum {
645 FC_VU_SCR_REG_FUNC_FABRIC_NAME_CHANGE = 0x01
646};
647
648struct fc_scr_s{
649 u32 command:8;
650 u32 res:24;
651 u32 vu_reg_func:8;
652 u32 res1:16;
653 u32 reg_func:8;
654};
655
656
657
658
659enum {
660 FC_CAT_NOP = 0x0,
661 FC_CAT_ABTS = 0x1,
662 FC_CAT_RMC = 0x2,
663 FC_CAT_BA_ACC = 0x4,
664 FC_CAT_BA_RJT = 0x5,
665 FC_CAT_PRMT = 0x6,
666};
667
668
669
670
671struct fc_ls_rjt_s {
672 struct fc_els_cmd_s els_cmd;
673 u32 res1:8;
674 u32 reason_code:8;
675 u32 reason_code_expl:8;
676 u32 vendor_unique:8;
677};
678
679
680
681
682enum {
683 FC_LS_RJT_RSN_INV_CMD_CODE = 0x01,
684 FC_LS_RJT_RSN_LOGICAL_ERROR = 0x03,
685 FC_LS_RJT_RSN_LOGICAL_BUSY = 0x05,
686 FC_LS_RJT_RSN_PROTOCOL_ERROR = 0x07,
687 FC_LS_RJT_RSN_UNABLE_TO_PERF_CMD = 0x09,
688 FC_LS_RJT_RSN_CMD_NOT_SUPP = 0x0B,
689};
690
691
692
693
694enum {
695 FC_LS_RJT_EXP_NO_ADDL_INFO = 0x00,
696 FC_LS_RJT_EXP_SPARMS_ERR_OPTIONS = 0x01,
697 FC_LS_RJT_EXP_SPARMS_ERR_INI_CTL = 0x03,
698 FC_LS_RJT_EXP_SPARMS_ERR_REC_CTL = 0x05,
699 FC_LS_RJT_EXP_SPARMS_ERR_RXSZ = 0x07,
700 FC_LS_RJT_EXP_SPARMS_ERR_CONSEQ = 0x09,
701 FC_LS_RJT_EXP_SPARMS_ERR_CREDIT = 0x0B,
702 FC_LS_RJT_EXP_INV_PORT_NAME = 0x0D,
703 FC_LS_RJT_EXP_INV_NODE_FABRIC_NAME = 0x0E,
704 FC_LS_RJT_EXP_INV_CSP = 0x0F,
705 FC_LS_RJT_EXP_INV_ASSOC_HDR = 0x11,
706 FC_LS_RJT_EXP_ASSOC_HDR_REQD = 0x13,
707 FC_LS_RJT_EXP_INV_ORIG_S_ID = 0x15,
708 FC_LS_RJT_EXP_INV_OXID_RXID_COMB = 0x17,
709 FC_LS_RJT_EXP_CMD_ALREADY_IN_PROG = 0x19,
710 FC_LS_RJT_EXP_LOGIN_REQUIRED = 0x1E,
711 FC_LS_RJT_EXP_INVALID_NPORT_ID = 0x1F,
712 FC_LS_RJT_EXP_INSUFF_RES = 0x29,
713 FC_LS_RJT_EXP_CMD_NOT_SUPP = 0x2C,
714 FC_LS_RJT_EXP_INV_PAYLOAD_LEN = 0x2D,
715};
716
717
718
719
720struct fc_rrq_s{
721 struct fc_els_cmd_s els_cmd;
722 u32 res1:8;
723 u32 s_id:24;
724
725 u32 ox_id:16;
726 u32 rx_id:16;
727
728 u32 res2[8];
729};
730
731
732
733
734struct fc_ba_acc_s{
735 u32 seq_id_valid:8;
736 u32 seq_id:8;
737 u32 res2:16;
738 u32 ox_id:16;
739 u32 rx_id:16;
740 u32 low_seq_cnt:16;
741 u32 high_seq_cnt:16;
742};
743
744
745
746
747struct fc_ba_rjt_s{
748 u32 res1:8;
749 u32 reason_code:8;
750 u32 reason_expl:8;
751 u32 vendor_unique:8;
752};
753
754
755
756
757struct fc_tprlo_params_page_s{
758 u32 type:8;
759 u32 type_ext:8;
760
761#ifdef __BIGENDIAN
762 u32 opa_valid:1;
763 u32 rpa_valid:1;
764 u32 tpo_nport_valid:1;
765 u32 global_process_logout:1;
766 u32 res1:12;
767#else
768 u32 res1:12;
769 u32 global_process_logout:1;
770 u32 tpo_nport_valid:1;
771 u32 rpa_valid:1;
772 u32 opa_valid:1;
773#endif
774
775 u32 orig_process_assc;
776 u32 resp_process_assc;
777
778 u32 res2:8;
779 u32 tpo_nport_id;
780};
781
782
783
784
785struct fc_tprlo_s{
786 u32 command:8;
787 u32 page_len:8;
788 u32 payload_len:16;
789
790 struct fc_tprlo_params_page_s tprlo_params[1];
791};
792
793enum fc_tprlo_type{
794 FC_GLOBAL_LOGO = 1,
795 FC_TPR_LOGO
796};
797
798
799
800
801struct fc_tprlo_acc_s{
802 u32 command:8;
803 u32 page_len:8;
804 u32 payload_len:16;
805 struct fc_prlo_acc_params_page_s tprlo_acc_params[1];
806};
807
808
809
810
811#define FC_RSCN_PGLEN 0x4
812
813enum fc_rscn_format{
814 FC_RSCN_FORMAT_PORTID = 0x0,
815 FC_RSCN_FORMAT_AREA = 0x1,
816 FC_RSCN_FORMAT_DOMAIN = 0x2,
817 FC_RSCN_FORMAT_FABRIC = 0x3,
818};
819
820struct fc_rscn_event_s{
821 u32 format:2;
822 u32 qualifier:4;
823 u32 resvd:2;
824 u32 portid:24;
825};
826
827struct fc_rscn_pl_s{
828 u8 command;
829 u8 pagelen;
830 u16 payldlen;
831 struct fc_rscn_event_s event[1];
832};
833
834
835
836
837struct fc_echo_s {
838 struct fc_els_cmd_s els_cmd;
839};
840
841
842
843
844
845#define RNID_NODEID_DATA_FORMAT_COMMON 0x00
846#define RNID_NODEID_DATA_FORMAT_FCP3 0x08
847#define RNID_NODEID_DATA_FORMAT_DISCOVERY 0xDF
848
849#define RNID_ASSOCIATED_TYPE_UNKNOWN 0x00000001
850#define RNID_ASSOCIATED_TYPE_OTHER 0x00000002
851#define RNID_ASSOCIATED_TYPE_HUB 0x00000003
852#define RNID_ASSOCIATED_TYPE_SWITCH 0x00000004
853#define RNID_ASSOCIATED_TYPE_GATEWAY 0x00000005
854#define RNID_ASSOCIATED_TYPE_STORAGE_DEVICE 0x00000009
855#define RNID_ASSOCIATED_TYPE_HOST 0x0000000A
856#define RNID_ASSOCIATED_TYPE_STORAGE_SUBSYSTEM 0x0000000B
857#define RNID_ASSOCIATED_TYPE_STORAGE_ACCESS_DEVICE 0x0000000E
858#define RNID_ASSOCIATED_TYPE_NAS_SERVER 0x00000011
859#define RNID_ASSOCIATED_TYPE_BRIDGE 0x00000002
860#define RNID_ASSOCIATED_TYPE_VIRTUALIZATION_DEVICE 0x00000003
861#define RNID_ASSOCIATED_TYPE_MULTI_FUNCTION_DEVICE 0x000000FF
862
863
864
865
866struct fc_rnid_cmd_s{
867 struct fc_els_cmd_s els_cmd;
868 u32 node_id_data_format:8;
869 u32 reserved:24;
870};
871
872
873
874
875
876struct fc_rnid_common_id_data_s{
877 wwn_t port_name;
878 wwn_t node_name;
879};
880
881struct fc_rnid_general_topology_data_s{
882 u32 vendor_unique[4];
883 u32 asso_type;
884 u32 phy_port_num;
885 u32 num_attached_nodes;
886 u32 node_mgmt:8;
887 u32 ip_version:8;
888 u32 udp_tcp_port_num:16;
889 u32 ip_address[4];
890 u32 reserved:16;
891 u32 vendor_specific:16;
892};
893
894struct fc_rnid_acc_s{
895 struct fc_els_cmd_s els_cmd;
896 u32 node_id_data_format:8;
897 u32 common_id_data_length:8;
898 u32 reserved:8;
899 u32 specific_id_data_length:8;
900 struct fc_rnid_common_id_data_s common_id_data;
901 struct fc_rnid_general_topology_data_s gen_topology_data;
902};
903
904#define RNID_ASSOCIATED_TYPE_UNKNOWN 0x00000001
905#define RNID_ASSOCIATED_TYPE_OTHER 0x00000002
906#define RNID_ASSOCIATED_TYPE_HUB 0x00000003
907#define RNID_ASSOCIATED_TYPE_SWITCH 0x00000004
908#define RNID_ASSOCIATED_TYPE_GATEWAY 0x00000005
909#define RNID_ASSOCIATED_TYPE_STORAGE_DEVICE 0x00000009
910#define RNID_ASSOCIATED_TYPE_HOST 0x0000000A
911#define RNID_ASSOCIATED_TYPE_STORAGE_SUBSYSTEM 0x0000000B
912#define RNID_ASSOCIATED_TYPE_STORAGE_ACCESS_DEVICE 0x0000000E
913#define RNID_ASSOCIATED_TYPE_NAS_SERVER 0x00000011
914#define RNID_ASSOCIATED_TYPE_BRIDGE 0x00000002
915#define RNID_ASSOCIATED_TYPE_VIRTUALIZATION_DEVICE 0x00000003
916#define RNID_ASSOCIATED_TYPE_MULTI_FUNCTION_DEVICE 0x000000FF
917
918enum fc_rpsc_speed_cap{
919 RPSC_SPEED_CAP_1G = 0x8000,
920 RPSC_SPEED_CAP_2G = 0x4000,
921 RPSC_SPEED_CAP_4G = 0x2000,
922 RPSC_SPEED_CAP_10G = 0x1000,
923 RPSC_SPEED_CAP_8G = 0x0800,
924 RPSC_SPEED_CAP_16G = 0x0400,
925
926 RPSC_SPEED_CAP_UNKNOWN = 0x0001,
927};
928
929enum fc_rpsc_op_speed_s{
930 RPSC_OP_SPEED_1G = 0x8000,
931 RPSC_OP_SPEED_2G = 0x4000,
932 RPSC_OP_SPEED_4G = 0x2000,
933 RPSC_OP_SPEED_10G = 0x1000,
934 RPSC_OP_SPEED_8G = 0x0800,
935 RPSC_OP_SPEED_16G = 0x0400,
936
937 RPSC_OP_SPEED_NOT_EST = 0x0001,
938};
939
940struct fc_rpsc_speed_info_s{
941 u16 port_speed_cap;
942 u16 port_op_speed;
943};
944
945enum link_e2e_beacon_subcmd{
946 LINK_E2E_BEACON_ON = 1,
947 LINK_E2E_BEACON_OFF = 2
948};
949
950enum beacon_type{
951 BEACON_TYPE_NORMAL = 1,
952 BEACON_TYPE_WARN = 2,
953 BEACON_TYPE_CRITICAL = 3
954};
955
956struct link_e2e_beacon_param_s {
957 u8 beacon_type;
958 u8 beacon_frequency;
959
960
961
962 u16 beacon_duration;
963
964
965
966
967
968
969
970
971
972
973};
974
975
976
977
978struct link_e2e_beacon_req_s{
979 u32 ls_code;
980
981 u32 ls_sub_cmd;
982 struct link_e2e_beacon_param_s beacon_parm;
983};
984
985
986
987
988
989
990struct fc_rpsc_cmd_s{
991 struct fc_els_cmd_s els_cmd;
992};
993
994
995
996
997struct fc_rpsc_acc_s{
998 u32 command:8;
999 u32 rsvd:8;
1000 u32 num_entries:16;
1001
1002 struct fc_rpsc_speed_info_s speed_info[1];
1003};
1004
1005
1006
1007
1008#define FC_BRCD_TOKEN 0x42524344
1009
1010struct fc_rpsc2_cmd_s{
1011 struct fc_els_cmd_s els_cmd;
1012 u32 token;
1013 u16 resvd;
1014 u16 num_pids;
1015 struct {
1016 u32 rsvd1:8;
1017 u32 pid:24;
1018 } pid_list[1];
1019};
1020
1021enum fc_rpsc2_port_type{
1022 RPSC2_PORT_TYPE_UNKNOWN = 0,
1023 RPSC2_PORT_TYPE_NPORT = 1,
1024 RPSC2_PORT_TYPE_NLPORT = 2,
1025 RPSC2_PORT_TYPE_NPIV_PORT = 0x5f,
1026 RPSC2_PORT_TYPE_NPORT_TRUNK = 0x6f,
1027};
1028
1029
1030
1031
1032struct fc_rpsc2_port_info_s{
1033 u32 pid;
1034 u16 resvd1;
1035 u16 index;
1036 u8 resvd2;
1037 u8 type;
1038 u16 speed;
1039};
1040
1041
1042
1043
1044struct fc_rpsc2_acc_s{
1045 u8 els_cmd;
1046 u8 resvd;
1047 u16 num_pids;
1048 struct fc_rpsc2_port_info_s port_info[1];
1049};
1050
1051
1052
1053
1054enum fc_cos{
1055 FC_CLASS_2 = 0x04,
1056 FC_CLASS_3 = 0x08,
1057 FC_CLASS_2_3 = 0x0C,
1058};
1059
1060
1061
1062
1063struct fc_symname_s{
1064 u8 symname[FC_SYMNAME_MAX];
1065};
1066
1067struct fc_alpabm_s{
1068 u8 alpa_bm[FC_ALPA_MAX / 8];
1069};
1070
1071
1072
1073
1074#define FC_ED_TOV 2
1075#define FC_REC_TOV (FC_ED_TOV + 1)
1076#define FC_RA_TOV 10
1077#define FC_ELS_TOV (2 * FC_RA_TOV)
1078
1079
1080
1081
1082#define FC_VF_ID_NULL 0
1083#define FC_VF_ID_MIN 1
1084#define FC_VF_ID_MAX 0xEFF
1085#define FC_VF_ID_CTL 0xFEF
1086
1087
1088
1089
1090
1091struct fc_vft_s{
1092 u32 r_ctl:8;
1093 u32 ver:2;
1094 u32 type:4;
1095 u32 res_a:2;
1096 u32 priority:3;
1097 u32 vf_id:12;
1098 u32 res_b:1;
1099 u32 hopct:8;
1100 u32 res_c:24;
1101};
1102
1103#pragma pack()
1104
1105#endif
1106