1
2
3
4
5
6
7#ifndef __QLA_FW_H
8#define __QLA_FW_H
9
10#include <linux/nvme.h>
11#include <linux/nvme-fc.h>
12
13#define MBS_CHECKSUM_ERROR 0x4010
14#define MBS_INVALID_PRODUCT_KEY 0x4020
15
16
17
18
19#define FO1_ENABLE_PUREX BIT_10
20#define FO1_DISABLE_LED_CTRL BIT_6
21#define FO1_ENABLE_8016 BIT_0
22#define FO2_ENABLE_SEL_CLASS2 BIT_5
23#define FO3_NO_ABTS_ON_LINKDOWN BIT_14
24#define FO3_HOLD_STS_IOCB BIT_12
25
26
27
28
29#define PDO_FORCE_ADISC BIT_1
30#define PDO_FORCE_PLOGI BIT_0
31
32
33#define PORT_DATABASE_24XX_SIZE 64
34struct port_database_24xx {
35 uint16_t flags;
36#define PDF_TASK_RETRY_ID BIT_14
37#define PDF_FC_TAPE BIT_7
38#define PDF_ACK0_CAPABLE BIT_6
39#define PDF_FCP2_CONF BIT_5
40#define PDF_CLASS_2 BIT_4
41#define PDF_HARD_ADDR BIT_1
42
43
44
45
46
47
48
49 uint8_t current_login_state;
50 uint8_t last_login_state;
51#define PDS_PLOGI_PENDING 0x03
52#define PDS_PLOGI_COMPLETE 0x04
53#define PDS_PRLI_PENDING 0x05
54#define PDS_PRLI_COMPLETE 0x06
55#define PDS_PORT_UNAVAILABLE 0x07
56#define PDS_PRLO_PENDING 0x09
57#define PDS_LOGO_PENDING 0x11
58#define PDS_PRLI2_PENDING 0x12
59
60 uint8_t hard_address[3];
61 uint8_t reserved_1;
62
63 uint8_t port_id[3];
64 uint8_t sequence_id;
65
66 uint16_t port_timer;
67
68 uint16_t nport_handle;
69
70 uint16_t receive_data_size;
71 uint16_t reserved_2;
72
73 uint8_t prli_svc_param_word_0[2];
74
75 uint8_t prli_svc_param_word_3[2];
76
77
78 uint8_t port_name[WWN_SIZE];
79 uint8_t node_name[WWN_SIZE];
80
81 uint8_t reserved_3[4];
82 uint16_t prli_nvme_svc_param_word_0;
83 uint16_t prli_nvme_svc_param_word_3;
84 uint16_t nvme_first_burst_size;
85 uint8_t reserved_4[14];
86};
87
88
89
90
91
92struct get_name_list_extended {
93 __le16 flags;
94 u8 current_login_state;
95 u8 last_login_state;
96 u8 hard_address[3];
97 u8 reserved_1;
98 u8 port_id[3];
99 u8 sequence_id;
100 __le16 port_timer;
101 __le16 nport_handle;
102 __le16 receive_data_size;
103 __le16 reserved_2;
104
105
106 u8 prli_svc_param_word_0[2];
107 u8 prli_svc_param_word_3[2];
108 u8 port_name[WWN_SIZE];
109 u8 node_name[WWN_SIZE];
110};
111
112
113struct get_name_list {
114 u8 port_node_name[WWN_SIZE];
115 __le16 nport_handle;
116 u8 reserved;
117};
118
119struct vp_database_24xx {
120 uint16_t vp_status;
121 uint8_t options;
122 uint8_t id;
123 uint8_t port_name[WWN_SIZE];
124 uint8_t node_name[WWN_SIZE];
125 uint16_t port_id_low;
126 uint16_t port_id_high;
127};
128
129struct nvram_24xx {
130
131 uint8_t id[4];
132 uint16_t nvram_version;
133 uint16_t reserved_0;
134
135
136 uint16_t version;
137 uint16_t reserved_1;
138 __le16 frame_payload_size;
139 uint16_t execution_throttle;
140 uint16_t exchange_count;
141 uint16_t hard_address;
142
143 uint8_t port_name[WWN_SIZE];
144 uint8_t node_name[WWN_SIZE];
145
146 uint16_t login_retry_count;
147 uint16_t link_down_on_nos;
148 uint16_t interrupt_delay_timer;
149 uint16_t login_timeout;
150
151 uint32_t firmware_options_1;
152 uint32_t firmware_options_2;
153 uint32_t firmware_options_3;
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176 uint16_t seriallink_options[4];
177
178 uint16_t reserved_2[16];
179
180
181 uint16_t reserved_3[16];
182
183
184 uint16_t reserved_4[16];
185
186
187 uint16_t reserved_5[16];
188
189
190 uint16_t reserved_6[16];
191
192
193 uint16_t reserved_7[16];
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216 uint32_t host_p;
217
218 uint8_t alternate_port_name[WWN_SIZE];
219 uint8_t alternate_node_name[WWN_SIZE];
220
221 uint8_t boot_port_name[WWN_SIZE];
222 uint16_t boot_lun_number;
223 uint16_t reserved_8;
224
225 uint8_t alt1_boot_port_name[WWN_SIZE];
226 uint16_t alt1_boot_lun_number;
227 uint16_t reserved_9;
228
229 uint8_t alt2_boot_port_name[WWN_SIZE];
230 uint16_t alt2_boot_lun_number;
231 uint16_t reserved_10;
232
233 uint8_t alt3_boot_port_name[WWN_SIZE];
234 uint16_t alt3_boot_lun_number;
235 uint16_t reserved_11;
236
237
238
239
240
241
242
243
244
245
246
247 uint32_t efi_parameters;
248
249 uint8_t reset_delay;
250 uint8_t reserved_12;
251 uint16_t reserved_13;
252
253 uint16_t boot_id_number;
254 uint16_t reserved_14;
255
256 uint16_t max_luns_per_target;
257 uint16_t reserved_15;
258
259 uint16_t port_down_retry_count;
260 uint16_t link_down_timeout;
261
262
263 uint16_t fcode_parameter;
264
265 uint16_t reserved_16[3];
266
267
268 uint8_t prev_drv_ver_major;
269 uint8_t prev_drv_ver_submajob;
270 uint8_t prev_drv_ver_minor;
271 uint8_t prev_drv_ver_subminor;
272
273 uint16_t prev_bios_ver_major;
274 uint16_t prev_bios_ver_minor;
275
276 uint16_t prev_efi_ver_major;
277 uint16_t prev_efi_ver_minor;
278
279 uint16_t prev_fw_ver_major;
280 uint8_t prev_fw_ver_minor;
281 uint8_t prev_fw_ver_subminor;
282
283 uint16_t reserved_17[8];
284
285
286 uint16_t reserved_18[16];
287
288
289 uint16_t reserved_19[16];
290
291
292 uint16_t reserved_20[16];
293
294
295 uint8_t model_name[16];
296
297 uint16_t reserved_21[2];
298
299
300
301 uint16_t pcie_table_sig;
302 uint16_t pcie_table_offset;
303
304 uint16_t subsystem_vendor_id;
305 uint16_t subsystem_device_id;
306
307 uint32_t checksum;
308};
309
310
311
312
313
314#define ICB_VERSION 1
315struct init_cb_24xx {
316 uint16_t version;
317 uint16_t reserved_1;
318
319 uint16_t frame_payload_size;
320 uint16_t execution_throttle;
321 uint16_t exchange_count;
322
323 uint16_t hard_address;
324
325 uint8_t port_name[WWN_SIZE];
326 uint8_t node_name[WWN_SIZE];
327
328 uint16_t response_q_inpointer;
329 uint16_t request_q_outpointer;
330
331 uint16_t login_retry_count;
332
333 uint16_t prio_request_q_outpointer;
334
335 uint16_t response_q_length;
336 uint16_t request_q_length;
337
338 uint16_t link_down_on_nos;
339
340 uint16_t prio_request_q_length;
341
342 uint32_t request_q_address[2];
343 uint32_t response_q_address[2];
344 uint32_t prio_request_q_address[2];
345
346 uint16_t msix;
347 uint16_t msix_atio;
348 uint8_t reserved_2[4];
349
350 uint16_t atio_q_inpointer;
351 uint16_t atio_q_length;
352 uint32_t atio_q_address[2];
353
354 uint16_t interrupt_delay_timer;
355 uint16_t login_timeout;
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376 uint32_t firmware_options_1;
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397 uint32_t firmware_options_2;
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423 uint32_t firmware_options_3;
424 uint16_t qos;
425 uint16_t rid;
426 uint8_t reserved_3[20];
427};
428
429
430
431
432#define COMMAND_BIDIRECTIONAL 0x75
433struct cmd_bidir {
434 uint8_t entry_type;
435 uint8_t entry_count;
436 uint8_t sys_define;
437 uint8_t entry_status;
438
439 uint32_t handle;
440
441 uint16_t nport_handle;
442
443 uint16_t timeout;
444
445 uint16_t wr_dseg_count;
446 uint16_t rd_dseg_count;
447
448 struct scsi_lun lun;
449
450 uint16_t control_flags;
451#define BD_WRAP_BACK BIT_3
452#define BD_READ_DATA BIT_1
453#define BD_WRITE_DATA BIT_0
454
455 uint16_t fcp_cmnd_dseg_len;
456 uint32_t fcp_cmnd_dseg_address[2];
457
458 uint16_t reserved[2];
459
460 uint32_t rd_byte_count;
461 uint32_t wr_byte_count;
462
463 uint8_t port_id[3];
464 uint8_t vp_index;
465
466 uint32_t fcp_data_dseg_address[2];
467 uint16_t fcp_data_dseg_len;
468};
469
470#define COMMAND_TYPE_6 0x48
471struct cmd_type_6 {
472 uint8_t entry_type;
473 uint8_t entry_count;
474 uint8_t sys_define;
475 uint8_t entry_status;
476
477 uint32_t handle;
478
479 uint16_t nport_handle;
480 uint16_t timeout;
481
482 uint16_t dseg_count;
483
484 uint16_t fcp_rsp_dsd_len;
485
486 struct scsi_lun lun;
487
488 uint16_t control_flags;
489#define CF_DIF_SEG_DESCR_ENABLE BIT_3
490#define CF_DATA_SEG_DESCR_ENABLE BIT_2
491#define CF_READ_DATA BIT_1
492#define CF_WRITE_DATA BIT_0
493
494 uint16_t fcp_cmnd_dseg_len;
495 uint32_t fcp_cmnd_dseg_address[2];
496
497 uint32_t fcp_rsp_dseg_address[2];
498
499 uint32_t byte_count;
500
501 uint8_t port_id[3];
502 uint8_t vp_index;
503
504 uint32_t fcp_data_dseg_address[2];
505 uint32_t fcp_data_dseg_len;
506};
507
508#define COMMAND_TYPE_7 0x18
509struct cmd_type_7 {
510 uint8_t entry_type;
511 uint8_t entry_count;
512 uint8_t sys_define;
513 uint8_t entry_status;
514
515 uint32_t handle;
516
517 uint16_t nport_handle;
518 uint16_t timeout;
519#define FW_MAX_TIMEOUT 0x1999
520
521 uint16_t dseg_count;
522 uint16_t reserved_1;
523
524 struct scsi_lun lun;
525
526 uint16_t task_mgmt_flags;
527#define TMF_CLEAR_ACA BIT_14
528#define TMF_TARGET_RESET BIT_13
529#define TMF_LUN_RESET BIT_12
530#define TMF_CLEAR_TASK_SET BIT_10
531#define TMF_ABORT_TASK_SET BIT_9
532#define TMF_DSD_LIST_ENABLE BIT_2
533#define TMF_READ_DATA BIT_1
534#define TMF_WRITE_DATA BIT_0
535
536 uint8_t task;
537#define TSK_SIMPLE 0
538#define TSK_HEAD_OF_QUEUE 1
539#define TSK_ORDERED 2
540#define TSK_ACA 4
541#define TSK_UNTAGGED 5
542
543 uint8_t crn;
544
545 uint8_t fcp_cdb[MAX_CMDSZ];
546 uint32_t byte_count;
547
548 uint8_t port_id[3];
549 uint8_t vp_index;
550
551 uint32_t dseg_0_address[2];
552 uint32_t dseg_0_len;
553};
554
555#define COMMAND_TYPE_CRC_2 0x6A
556
557struct cmd_type_crc_2 {
558 uint8_t entry_type;
559 uint8_t entry_count;
560 uint8_t sys_define;
561 uint8_t entry_status;
562
563 uint32_t handle;
564
565 uint16_t nport_handle;
566 uint16_t timeout;
567
568 uint16_t dseg_count;
569
570 uint16_t fcp_rsp_dseg_len;
571
572 struct scsi_lun lun;
573
574 uint16_t control_flags;
575
576 uint16_t fcp_cmnd_dseg_len;
577 uint32_t fcp_cmnd_dseg_address[2];
578
579 uint32_t fcp_rsp_dseg_address[2];
580
581 uint32_t byte_count;
582
583 uint8_t port_id[3];
584 uint8_t vp_index;
585
586 uint32_t crc_context_address[2];
587 uint16_t crc_context_len;
588 uint16_t reserved_1;
589};
590
591
592
593
594
595#define STATUS_TYPE 0x03
596struct sts_entry_24xx {
597 uint8_t entry_type;
598 uint8_t entry_count;
599 uint8_t sys_define;
600 uint8_t entry_status;
601
602 uint32_t handle;
603
604 uint16_t comp_status;
605 uint16_t ox_id;
606
607 uint32_t residual_len;
608
609 union {
610 uint16_t reserved_1;
611 uint16_t nvme_rsp_pyld_len;
612 };
613
614 uint16_t state_flags;
615#define SF_TRANSFERRED_DATA BIT_11
616#define SF_NVME_ERSP BIT_6
617#define SF_FCP_RSP_DMA BIT_0
618
619 uint16_t retry_delay;
620 uint16_t scsi_status;
621#define SS_CONFIRMATION_REQ BIT_12
622
623 uint32_t rsp_residual_count;
624
625 uint32_t sense_len;
626
627 union {
628 struct {
629 uint32_t rsp_data_len;
630 uint8_t data[28];
631 };
632 struct nvme_fc_ersp_iu nvme_ersp;
633 uint8_t nvme_ersp_data[32];
634 };
635
636
637
638
639
640
641
642
643
644
645
646
647
648};
649
650
651
652
653
654#define CS_DATA_REASSEMBLY_ERROR 0x11
655#define CS_ABTS_BY_TARGET 0x13
656#define CS_FW_RESOURCE 0x2C
657#define CS_TASK_MGMT_OVERRUN 0x30
658#define CS_ABORT_BY_TARGET 0x47
659
660
661
662
663#define MARKER_TYPE 0x04
664struct mrk_entry_24xx {
665 uint8_t entry_type;
666 uint8_t entry_count;
667 uint8_t handle_count;
668 uint8_t entry_status;
669
670 uint32_t handle;
671
672 uint16_t nport_handle;
673
674 uint8_t modifier;
675#define MK_SYNC_ID_LUN 0
676#define MK_SYNC_ID 1
677#define MK_SYNC_ALL 2
678 uint8_t reserved_1;
679
680 uint8_t reserved_2;
681 uint8_t vp_index;
682
683 uint16_t reserved_3;
684
685 uint8_t lun[8];
686 uint8_t reserved_4[40];
687};
688
689
690
691
692#define CT_IOCB_TYPE 0x29
693struct ct_entry_24xx {
694 uint8_t entry_type;
695 uint8_t entry_count;
696 uint8_t sys_define;
697 uint8_t entry_status;
698
699 uint32_t handle;
700
701 uint16_t comp_status;
702
703 uint16_t nport_handle;
704
705 uint16_t cmd_dsd_count;
706
707 uint8_t vp_index;
708 uint8_t reserved_1;
709
710 uint16_t timeout;
711 uint16_t reserved_2;
712
713 uint16_t rsp_dsd_count;
714
715 uint8_t reserved_3[10];
716
717 uint32_t rsp_byte_count;
718 uint32_t cmd_byte_count;
719
720 uint32_t dseg_0_address[2];
721 uint32_t dseg_0_len;
722 uint32_t dseg_1_address[2];
723 uint32_t dseg_1_len;
724};
725
726
727
728
729#define ELS_IOCB_TYPE 0x53
730struct els_entry_24xx {
731 uint8_t entry_type;
732 uint8_t entry_count;
733 uint8_t sys_define;
734 uint8_t entry_status;
735
736 uint32_t handle;
737
738 uint16_t reserved_1;
739
740 uint16_t nport_handle;
741
742 uint16_t tx_dsd_count;
743
744 uint8_t vp_index;
745 uint8_t sof_type;
746#define EST_SOFI3 (1 << 4)
747#define EST_SOFI2 (3 << 4)
748
749 uint32_t rx_xchg_address;
750 uint16_t rx_dsd_count;
751
752 uint8_t opcode;
753 uint8_t reserved_2;
754
755 uint8_t port_id[3];
756 uint8_t s_id[3];
757
758 uint16_t control_flags;
759#define ECF_PAYLOAD_DESCR_MASK (BIT_15|BIT_14|BIT_13)
760#define EPD_ELS_COMMAND (0 << 13)
761#define EPD_ELS_ACC (1 << 13)
762#define EPD_ELS_RJT (2 << 13)
763#define EPD_RX_XCHG (3 << 13)
764#define ECF_CLR_PASSTHRU_PEND BIT_12
765#define ECF_INCL_FRAME_HDR BIT_11
766
767 uint32_t rx_byte_count;
768 uint32_t tx_byte_count;
769
770 uint32_t tx_address[2];
771 uint32_t tx_len;
772 uint32_t rx_address[2];
773 uint32_t rx_len;
774};
775
776struct els_sts_entry_24xx {
777 uint8_t entry_type;
778 uint8_t entry_count;
779 uint8_t sys_define;
780 uint8_t entry_status;
781
782 uint32_t handle;
783
784 uint16_t comp_status;
785
786 uint16_t nport_handle;
787
788 uint16_t reserved_1;
789
790 uint8_t vp_index;
791 uint8_t sof_type;
792
793 uint32_t rx_xchg_address;
794 uint16_t reserved_2;
795
796 uint8_t opcode;
797 uint8_t reserved_3;
798
799 uint8_t port_id[3];
800 uint8_t reserved_4;
801
802 uint16_t reserved_5;
803
804 uint16_t control_flags;
805 uint32_t total_byte_count;
806 uint32_t error_subcode_1;
807 uint32_t error_subcode_2;
808};
809
810
811
812#define MBX_IOCB_TYPE 0x39
813struct mbx_entry_24xx {
814 uint8_t entry_type;
815 uint8_t entry_count;
816 uint8_t handle_count;
817 uint8_t entry_status;
818
819 uint32_t handle;
820
821 uint16_t mbx[28];
822};
823
824
825#define LOGINOUT_PORT_IOCB_TYPE 0x52
826struct logio_entry_24xx {
827 uint8_t entry_type;
828 uint8_t entry_count;
829 uint8_t sys_define;
830 uint8_t entry_status;
831
832 uint32_t handle;
833
834 uint16_t comp_status;
835#define CS_LOGIO_ERROR 0x31
836
837 uint16_t nport_handle;
838
839 uint16_t control_flags;
840
841#define LCF_INCLUDE_SNS BIT_10
842#define LCF_FCP2_OVERRIDE BIT_9
843#define LCF_CLASS_2 BIT_8
844#define LCF_FREE_NPORT BIT_7
845#define LCF_EXPL_LOGO BIT_6
846#define LCF_NVME_PRLI BIT_6
847#define LCF_SKIP_PRLI BIT_5
848#define LCF_IMPL_LOGO_ALL BIT_5
849#define LCF_COND_PLOGI BIT_4
850#define LCF_IMPL_LOGO BIT_4
851#define LCF_IMPL_PRLO BIT_4
852
853#define LCF_COMMAND_PLOGI 0x00
854#define LCF_COMMAND_PRLI 0x01
855#define LCF_COMMAND_PDISC 0x02
856#define LCF_COMMAND_ADISC 0x03
857#define LCF_COMMAND_LOGO 0x08
858#define LCF_COMMAND_PRLO 0x09
859#define LCF_COMMAND_TPRLO 0x0A
860
861 uint8_t vp_index;
862 uint8_t reserved_1;
863
864 uint8_t port_id[3];
865
866 uint8_t rsp_size;
867
868 uint32_t io_parameter[11];
869#define LSC_SCODE_NOLINK 0x01
870#define LSC_SCODE_NOIOCB 0x02
871#define LSC_SCODE_NOXCB 0x03
872#define LSC_SCODE_CMD_FAILED 0x04
873#define LSC_SCODE_NOFABRIC 0x05
874#define LSC_SCODE_FW_NOT_READY 0x07
875#define LSC_SCODE_NOT_LOGGED_IN 0x09
876#define LSC_SCODE_NOPCB 0x0A
877
878#define LSC_SCODE_ELS_REJECT 0x18
879#define LSC_SCODE_CMD_PARAM_ERR 0x19
880#define LSC_SCODE_PORTID_USED 0x1A
881#define LSC_SCODE_NPORT_USED 0x1B
882#define LSC_SCODE_NONPORT 0x1C
883#define LSC_SCODE_LOGGED_IN 0x1D
884#define LSC_SCODE_NOFLOGI_ACC 0x1F
885};
886
887#define TSK_MGMT_IOCB_TYPE 0x14
888struct tsk_mgmt_entry {
889 uint8_t entry_type;
890 uint8_t entry_count;
891 uint8_t handle_count;
892 uint8_t entry_status;
893
894 uint32_t handle;
895
896 uint16_t nport_handle;
897
898 uint16_t reserved_1;
899
900 uint16_t delay;
901
902 uint16_t timeout;
903
904 struct scsi_lun lun;
905
906 uint32_t control_flags;
907#define TCF_NOTMCMD_TO_TARGET BIT_31
908#define TCF_LUN_RESET BIT_4
909#define TCF_ABORT_TASK_SET BIT_3
910#define TCF_CLEAR_TASK_SET BIT_2
911#define TCF_TARGET_RESET BIT_1
912#define TCF_CLEAR_ACA BIT_0
913
914 uint8_t reserved_2[20];
915
916 uint8_t port_id[3];
917 uint8_t vp_index;
918
919 uint8_t reserved_3[12];
920};
921
922#define ABORT_IOCB_TYPE 0x33
923struct abort_entry_24xx {
924 uint8_t entry_type;
925 uint8_t entry_count;
926 uint8_t handle_count;
927 uint8_t entry_status;
928
929 uint32_t handle;
930
931 uint16_t nport_handle;
932
933
934 uint16_t options;
935#define AOF_NO_ABTS BIT_0
936
937 uint32_t handle_to_abort;
938
939 uint16_t req_que_no;
940 uint8_t reserved_1[30];
941
942 uint8_t port_id[3];
943 uint8_t vp_index;
944
945 uint8_t reserved_2[12];
946};
947
948
949
950
951struct device_reg_24xx {
952 uint32_t flash_addr;
953#define FARX_DATA_FLAG BIT_31
954#define FARX_ACCESS_FLASH_CONF 0x7FFD0000
955#define FARX_ACCESS_FLASH_DATA 0x7FF00000
956#define FARX_ACCESS_NVRAM_CONF 0x7FFF0000
957#define FARX_ACCESS_NVRAM_DATA 0x7FFE0000
958
959#define FA_NVRAM_FUNC0_ADDR 0x80
960#define FA_NVRAM_FUNC1_ADDR 0x180
961
962#define FA_NVRAM_VPD_SIZE 0x200
963#define FA_NVRAM_VPD0_ADDR 0x00
964#define FA_NVRAM_VPD1_ADDR 0x100
965
966#define FA_BOOT_CODE_ADDR 0x00000
967
968
969
970
971
972#define FA_RISC_CODE_ADDR 0x20000
973#define FA_RISC_CODE_SEGMENTS 2
974
975#define FA_FLASH_DESCR_ADDR_24 0x11000
976#define FA_FLASH_LAYOUT_ADDR_24 0x11400
977#define FA_NPIV_CONF0_ADDR_24 0x16000
978#define FA_NPIV_CONF1_ADDR_24 0x17000
979
980#define FA_FW_AREA_ADDR 0x40000
981#define FA_VPD_NVRAM_ADDR 0x48000
982#define FA_FEATURE_ADDR 0x4C000
983#define FA_FLASH_DESCR_ADDR 0x50000
984#define FA_FLASH_LAYOUT_ADDR 0x50400
985#define FA_HW_EVENT0_ADDR 0x54000
986#define FA_HW_EVENT1_ADDR 0x54400
987#define FA_HW_EVENT_SIZE 0x200
988#define FA_HW_EVENT_ENTRY_SIZE 4
989#define FA_NPIV_CONF0_ADDR 0x5C000
990#define FA_NPIV_CONF1_ADDR 0x5D000
991#define FA_FCP_PRIO0_ADDR 0x10000
992#define FA_FCP_PRIO1_ADDR 0x12000
993
994
995
996
997#define HW_EVENT_RESET_ERR 0xF00B
998#define HW_EVENT_ISP_ERR 0xF020
999#define HW_EVENT_PARITY_ERR 0xF022
1000#define HW_EVENT_NVRAM_CHKSUM_ERR 0xF023
1001#define HW_EVENT_FLASH_FW_ERR 0xF024
1002
1003 uint32_t flash_data;
1004
1005 uint32_t ctrl_status;
1006#define CSRX_FLASH_ACCESS_ERROR BIT_18
1007#define CSRX_DMA_ACTIVE BIT_17
1008#define CSRX_DMA_SHUTDOWN BIT_16
1009#define CSRX_FUNCTION BIT_15
1010
1011#define CSRX_PCIX_BUS_MODE_MASK (BIT_11|BIT_10|BIT_9|BIT_8)
1012#define PBM_PCI_33MHZ (0 << 8)
1013#define PBM_PCIX_M1_66MHZ (1 << 8)
1014#define PBM_PCIX_M1_100MHZ (2 << 8)
1015#define PBM_PCIX_M1_133MHZ (3 << 8)
1016#define PBM_PCIX_M2_66MHZ (5 << 8)
1017#define PBM_PCIX_M2_100MHZ (6 << 8)
1018#define PBM_PCIX_M2_133MHZ (7 << 8)
1019#define PBM_PCI_66MHZ (8 << 8)
1020
1021#define CSRX_MAX_WRT_BURST_MASK (BIT_5|BIT_4)
1022#define MWB_512_BYTES (0 << 4)
1023#define MWB_1024_BYTES (1 << 4)
1024#define MWB_2048_BYTES (2 << 4)
1025#define MWB_4096_BYTES (3 << 4)
1026
1027#define CSRX_64BIT_SLOT BIT_2
1028#define CSRX_FLASH_ENABLE BIT_1
1029#define CSRX_ISP_SOFT_RESET BIT_0
1030
1031 uint32_t ictrl;
1032#define ICRX_EN_RISC_INT BIT_3
1033
1034 uint32_t istatus;
1035#define ISRX_RISC_INT BIT_3
1036
1037 uint32_t unused_1[2];
1038
1039
1040 uint32_t req_q_in;
1041 uint32_t req_q_out;
1042
1043 uint32_t rsp_q_in;
1044 uint32_t rsp_q_out;
1045
1046 uint32_t preq_q_in;
1047 uint32_t preq_q_out;
1048
1049 uint32_t unused_2[2];
1050
1051
1052 uint32_t atio_q_in;
1053 uint32_t atio_q_out;
1054
1055 uint32_t host_status;
1056#define HSRX_RISC_INT BIT_15
1057#define HSRX_RISC_PAUSED BIT_8
1058
1059 uint32_t hccr;
1060
1061#define HCCRX_HOST_INT BIT_6
1062#define HCCRX_RISC_RESET BIT_5
1063
1064
1065#define HCCRX_NOOP 0x00000000
1066
1067#define HCCRX_SET_RISC_RESET 0x10000000
1068
1069#define HCCRX_CLR_RISC_RESET 0x20000000
1070
1071#define HCCRX_SET_RISC_PAUSE 0x30000000
1072
1073#define HCCRX_REL_RISC_PAUSE 0x40000000
1074
1075#define HCCRX_SET_HOST_INT 0x50000000
1076
1077#define HCCRX_CLR_HOST_INT 0x60000000
1078
1079#define HCCRX_CLR_RISC_INT 0xA0000000
1080
1081 uint32_t gpiod;
1082
1083
1084#define GPDX_LED_UPDATE_MASK (BIT_20|BIT_19|BIT_18)
1085
1086#define GPDX_DATA_UPDATE_MASK (BIT_17|BIT_16)
1087
1088#define GPDX_DATA_UPDATE_2_MASK (BIT_28|BIT_27|BIT_26|BIT_17|BIT_16)
1089
1090#define GPDX_LED_COLOR_MASK (BIT_4|BIT_3|BIT_2)
1091
1092
1093
1094#define GPDX_LED_YELLOW_ON BIT_2
1095#define GPDX_LED_GREEN_ON BIT_3
1096#define GPDX_LED_AMBER_ON BIT_4
1097
1098#define GPDX_DATA_INOUT (BIT_1|BIT_0)
1099
1100 uint32_t gpioe;
1101
1102#define GPEX_ENABLE_UPDATE_MASK (BIT_17|BIT_16)
1103
1104#define GPEX_ENABLE_UPDATE_2_MASK (BIT_28|BIT_27|BIT_26|BIT_17|BIT_16)
1105
1106#define GPEX_ENABLE (BIT_1|BIT_0)
1107
1108 uint32_t iobase_addr;
1109
1110 uint32_t unused_3[10];
1111
1112 uint16_t mailbox0;
1113 uint16_t mailbox1;
1114 uint16_t mailbox2;
1115 uint16_t mailbox3;
1116 uint16_t mailbox4;
1117 uint16_t mailbox5;
1118 uint16_t mailbox6;
1119 uint16_t mailbox7;
1120 uint16_t mailbox8;
1121 uint16_t mailbox9;
1122 uint16_t mailbox10;
1123 uint16_t mailbox11;
1124 uint16_t mailbox12;
1125 uint16_t mailbox13;
1126 uint16_t mailbox14;
1127 uint16_t mailbox15;
1128 uint16_t mailbox16;
1129 uint16_t mailbox17;
1130 uint16_t mailbox18;
1131 uint16_t mailbox19;
1132 uint16_t mailbox20;
1133 uint16_t mailbox21;
1134 uint16_t mailbox22;
1135 uint16_t mailbox23;
1136 uint16_t mailbox24;
1137 uint16_t mailbox25;
1138 uint16_t mailbox26;
1139 uint16_t mailbox27;
1140 uint16_t mailbox28;
1141 uint16_t mailbox29;
1142 uint16_t mailbox30;
1143 uint16_t mailbox31;
1144
1145 uint32_t iobase_window;
1146 uint32_t iobase_c4;
1147 uint32_t iobase_c8;
1148 uint32_t unused_4_1[6];
1149 uint32_t iobase_q;
1150 uint32_t unused_5[2];
1151 uint32_t iobase_select;
1152 uint32_t unused_6[2];
1153 uint32_t iobase_sdata;
1154};
1155
1156#define RISC_REGISTER_BASE_OFFSET 0x7010
1157#define RISC_REGISTER_WINDOW_OFFET 0x6
1158
1159
1160
1161#define RISC_SEMAPHORE 0x1UL
1162#define RISC_SEMAPHORE_WE (RISC_SEMAPHORE << 16)
1163#define RISC_SEMAPHORE_CLR (RISC_SEMAPHORE_WE | 0x0UL)
1164#define RISC_SEMAPHORE_SET (RISC_SEMAPHORE_WE | RISC_SEMAPHORE)
1165
1166#define RISC_SEMAPHORE_FORCE 0x8000UL
1167#define RISC_SEMAPHORE_FORCE_WE (RISC_SEMAPHORE_FORCE << 16)
1168#define RISC_SEMAPHORE_FORCE_CLR (RISC_SEMAPHORE_FORCE_WE | 0x0UL)
1169#define RISC_SEMAPHORE_FORCE_SET \
1170 (RISC_SEMAPHORE_FORCE_WE | RISC_SEMAPHORE_FORCE)
1171
1172
1173#define TIMEOUT_SEMAPHORE 2500
1174#define TIMEOUT_SEMAPHORE_FORCE 2000
1175#define TIMEOUT_TOTAL_ELAPSED 4500
1176
1177
1178
1179#define TC_AEN_DISABLE 0
1180
1181#define TC_EFT_ENABLE 4
1182#define TC_EFT_DISABLE 5
1183
1184#define TC_FCE_ENABLE 8
1185#define TC_FCE_OPTIONS 0
1186#define TC_FCE_DEFAULT_RX_SIZE 2112
1187#define TC_FCE_DEFAULT_TX_SIZE 2112
1188#define TC_FCE_DISABLE 9
1189#define TC_FCE_DISABLE_TRACE BIT_0
1190
1191
1192
1193#define MIN_MULTI_ID_FABRIC 64
1194#define MAX_MULTI_ID_FABRIC 256
1195
1196struct mid_conf_entry_24xx {
1197 uint16_t reserved_1;
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208 uint8_t options;
1209
1210 uint8_t hard_address;
1211
1212 uint8_t port_name[WWN_SIZE];
1213 uint8_t node_name[WWN_SIZE];
1214};
1215
1216struct mid_init_cb_24xx {
1217 struct init_cb_24xx init_cb;
1218
1219 uint16_t count;
1220 uint16_t options;
1221
1222 struct mid_conf_entry_24xx entries[MAX_MULTI_ID_FABRIC];
1223};
1224
1225
1226struct mid_db_entry_24xx {
1227 uint16_t status;
1228#define MDBS_NON_PARTIC BIT_3
1229#define MDBS_ID_ACQUIRED BIT_1
1230#define MDBS_ENABLED BIT_0
1231
1232 uint8_t options;
1233 uint8_t hard_address;
1234
1235 uint8_t port_name[WWN_SIZE];
1236 uint8_t node_name[WWN_SIZE];
1237
1238 uint8_t port_id[3];
1239 uint8_t reserved_1;
1240};
1241
1242
1243
1244
1245#define VP_CTRL_IOCB_TYPE 0x30
1246struct vp_ctrl_entry_24xx {
1247 uint8_t entry_type;
1248 uint8_t entry_count;
1249 uint8_t sys_define;
1250 uint8_t entry_status;
1251
1252 uint32_t handle;
1253
1254 uint16_t vp_idx_failed;
1255
1256 uint16_t comp_status;
1257#define CS_VCE_IOCB_ERROR 0x01
1258#define CS_VCE_ACQ_ID_ERROR 0x02
1259#define CS_VCE_BUSY 0x05
1260
1261 uint16_t command;
1262#define VCE_COMMAND_ENABLE_VPS 0x00
1263#define VCE_COMMAND_DISABLE_VPS 0x08
1264#define VCE_COMMAND_DISABLE_VPS_REINIT 0x09
1265#define VCE_COMMAND_DISABLE_VPS_LOGO 0x0a
1266#define VCE_COMMAND_DISABLE_VPS_LOGO_ALL 0x0b
1267
1268 uint16_t vp_count;
1269
1270 uint8_t vp_idx_map[16];
1271 uint16_t flags;
1272 uint16_t id;
1273 uint16_t reserved_4;
1274 uint16_t hopct;
1275 uint8_t reserved_5[24];
1276};
1277
1278
1279
1280
1281#define VP_CONFIG_IOCB_TYPE 0x31
1282struct vp_config_entry_24xx {
1283 uint8_t entry_type;
1284 uint8_t entry_count;
1285 uint8_t handle_count;
1286 uint8_t entry_status;
1287
1288 uint32_t handle;
1289
1290 uint16_t flags;
1291#define CS_VF_BIND_VPORTS_TO_VF BIT_0
1292#define CS_VF_SET_QOS_OF_VPORTS BIT_1
1293#define CS_VF_SET_HOPS_OF_VPORTS BIT_2
1294
1295 uint16_t comp_status;
1296#define CS_VCT_STS_ERROR 0x01
1297#define CS_VCT_CNT_ERROR 0x02
1298#define CS_VCT_ERROR 0x03
1299#define CS_VCT_IDX_ERROR 0x02
1300#define CS_VCT_BUSY 0x05
1301
1302 uint8_t command;
1303#define VCT_COMMAND_MOD_VPS 0x00
1304#define VCT_COMMAND_MOD_ENABLE_VPS 0x01
1305
1306 uint8_t vp_count;
1307
1308 uint8_t vp_index1;
1309 uint8_t vp_index2;
1310
1311 uint8_t options_idx1;
1312 uint8_t hard_address_idx1;
1313 uint16_t reserved_vp1;
1314 uint8_t port_name_idx1[WWN_SIZE];
1315 uint8_t node_name_idx1[WWN_SIZE];
1316
1317 uint8_t options_idx2;
1318 uint8_t hard_address_idx2;
1319 uint16_t reserved_vp2;
1320 uint8_t port_name_idx2[WWN_SIZE];
1321 uint8_t node_name_idx2[WWN_SIZE];
1322 uint16_t id;
1323 uint16_t reserved_4;
1324 uint16_t hopct;
1325 uint8_t reserved_5[2];
1326};
1327
1328#define VP_RPT_ID_IOCB_TYPE 0x32
1329enum VP_STATUS {
1330 VP_STAT_COMPL,
1331 VP_STAT_FAIL,
1332 VP_STAT_ID_CHG,
1333 VP_STAT_SNS_TO,
1334 VP_STAT_SNS_RJT,
1335 VP_STAT_SCR_TO,
1336 VP_STAT_SCR_RJT,
1337};
1338
1339enum VP_FLAGS {
1340 VP_FLAGS_CON_FLOOP = 1,
1341 VP_FLAGS_CON_P2P = 2,
1342 VP_FLAGS_CON_FABRIC = 3,
1343 VP_FLAGS_NAME_VALID = BIT_5,
1344};
1345
1346struct vp_rpt_id_entry_24xx {
1347 uint8_t entry_type;
1348 uint8_t entry_count;
1349 uint8_t sys_define;
1350 uint8_t entry_status;
1351 uint32_t resv1;
1352 uint8_t vp_acquired;
1353 uint8_t vp_setup;
1354 uint8_t vp_idx;
1355 uint8_t vp_status;
1356
1357 uint8_t port_id[3];
1358 uint8_t format;
1359 union {
1360 struct {
1361
1362 uint8_t vp_idx_map[16];
1363 uint8_t reserved_4[32];
1364 } f0;
1365 struct {
1366
1367 uint8_t vpstat1_subcode;
1368 uint8_t flags;
1369 uint16_t fip_flags;
1370 uint8_t rsv2[12];
1371
1372 uint8_t ls_rjt_vendor;
1373 uint8_t ls_rjt_explanation;
1374 uint8_t ls_rjt_reason;
1375 uint8_t rsv3[5];
1376
1377 uint8_t port_name[8];
1378 uint8_t node_name[8];
1379 uint16_t bbcr;
1380 uint8_t reserved_5[6];
1381 } f1;
1382 struct {
1383 uint8_t vpstat1_subcode;
1384 uint8_t flags;
1385 uint16_t rsv6;
1386 uint8_t rsv2[12];
1387
1388 uint8_t ls_rjt_vendor;
1389 uint8_t ls_rjt_explanation;
1390 uint8_t ls_rjt_reason;
1391 uint8_t rsv3[5];
1392
1393 uint8_t port_name[8];
1394 uint8_t node_name[8];
1395 uint8_t remote_nport_id[4];
1396 uint32_t reserved_5;
1397 } f2;
1398 } u;
1399};
1400
1401#define VF_EVFP_IOCB_TYPE 0x26
1402struct vf_evfp_entry_24xx {
1403 uint8_t entry_type;
1404 uint8_t entry_count;
1405 uint8_t sys_define;
1406 uint8_t entry_status;
1407
1408 uint32_t handle;
1409 uint16_t comp_status;
1410 uint16_t timeout;
1411 uint16_t adim_tagging_mode;
1412
1413 uint16_t vfport_id;
1414 uint32_t exch_addr;
1415
1416 uint16_t nport_handle;
1417 uint16_t control_flags;
1418 uint32_t io_parameter_0;
1419 uint32_t io_parameter_1;
1420 uint32_t tx_address[2];
1421 uint32_t tx_len;
1422 uint32_t rx_address[2];
1423 uint32_t rx_len;
1424};
1425
1426
1427
1428
1429
1430struct qla_fdt_layout {
1431 uint8_t sig[4];
1432 uint16_t version;
1433 uint16_t len;
1434 uint16_t checksum;
1435 uint8_t unused1[2];
1436 uint8_t model[16];
1437 uint16_t man_id;
1438 uint16_t id;
1439 uint8_t flags;
1440 uint8_t erase_cmd;
1441 uint8_t alt_erase_cmd;
1442 uint8_t wrt_enable_cmd;
1443 uint8_t wrt_enable_bits;
1444 uint8_t wrt_sts_reg_cmd;
1445 uint8_t unprotect_sec_cmd;
1446 uint8_t read_man_id_cmd;
1447 uint32_t block_size;
1448 uint32_t alt_block_size;
1449 uint32_t flash_size;
1450 uint32_t wrt_enable_data;
1451 uint8_t read_id_addr_len;
1452 uint8_t wrt_disable_bits;
1453 uint8_t read_dev_id_len;
1454 uint8_t chip_erase_cmd;
1455 uint16_t read_timeout;
1456 uint8_t protect_sec_cmd;
1457 uint8_t unused2[65];
1458};
1459
1460
1461
1462struct qla_flt_location {
1463 uint8_t sig[4];
1464 uint16_t start_lo;
1465 uint16_t start_hi;
1466 uint8_t version;
1467 uint8_t unused[5];
1468 uint16_t checksum;
1469};
1470
1471struct qla_flt_header {
1472 uint16_t version;
1473 uint16_t length;
1474 uint16_t checksum;
1475 uint16_t unused;
1476};
1477
1478#define FLT_REG_FW 0x01
1479#define FLT_REG_BOOT_CODE 0x07
1480#define FLT_REG_VPD_0 0x14
1481#define FLT_REG_NVRAM_0 0x15
1482#define FLT_REG_VPD_1 0x16
1483#define FLT_REG_NVRAM_1 0x17
1484#define FLT_REG_VPD_2 0xD4
1485#define FLT_REG_NVRAM_2 0xD5
1486#define FLT_REG_VPD_3 0xD6
1487#define FLT_REG_NVRAM_3 0xD7
1488#define FLT_REG_FDT 0x1a
1489#define FLT_REG_FLT 0x1c
1490#define FLT_REG_HW_EVENT_0 0x1d
1491#define FLT_REG_HW_EVENT_1 0x1f
1492#define FLT_REG_NPIV_CONF_0 0x29
1493#define FLT_REG_NPIV_CONF_1 0x2a
1494#define FLT_REG_GOLD_FW 0x2f
1495#define FLT_REG_FCP_PRIO_0 0x87
1496#define FLT_REG_FCP_PRIO_1 0x88
1497#define FLT_REG_CNA_FW 0x97
1498#define FLT_REG_BOOT_CODE_8044 0xA2
1499#define FLT_REG_FCOE_FW 0xA4
1500#define FLT_REG_FCOE_NVRAM_0 0xAA
1501#define FLT_REG_FCOE_NVRAM_1 0xAC
1502
1503
1504#define FLT_REG_IMG_PRI_27XX 0x95
1505#define FLT_REG_IMG_SEC_27XX 0x96
1506#define FLT_REG_FW_SEC_27XX 0x02
1507#define FLT_REG_BOOTLOAD_SEC_27XX 0x9
1508#define FLT_REG_VPD_SEC_27XX_0 0x50
1509#define FLT_REG_VPD_SEC_27XX_1 0x52
1510#define FLT_REG_VPD_SEC_27XX_2 0xD8
1511#define FLT_REG_VPD_SEC_27XX_3 0xDA
1512
1513struct qla_flt_region {
1514 uint32_t code;
1515 uint32_t size;
1516 uint32_t start;
1517 uint32_t end;
1518};
1519
1520
1521
1522struct qla_npiv_header {
1523 uint8_t sig[2];
1524 uint16_t version;
1525 uint16_t entries;
1526 uint16_t unused[4];
1527 uint16_t checksum;
1528};
1529
1530struct qla_npiv_entry {
1531 uint16_t flags;
1532 uint16_t vf_id;
1533 uint8_t q_qos;
1534 uint8_t f_qos;
1535 uint16_t unused1;
1536 uint8_t port_name[WWN_SIZE];
1537 uint8_t node_name[WWN_SIZE];
1538};
1539
1540
1541
1542#define MBA_ISP84XX_ALERT 0x800f
1543#define A84_PANIC_RECOVERY 0x1
1544#define A84_OP_LOGIN_COMPLETE 0x2
1545#define A84_DIAG_LOGIN_COMPLETE 0x3
1546#define A84_GOLD_LOGIN_COMPLETE 0x4
1547
1548#define MBC_ISP84XX_RESET 0x3a
1549
1550#define FSTATE_REMOTE_FC_DOWN BIT_0
1551#define FSTATE_NSL_LINK_DOWN BIT_1
1552#define FSTATE_IS_DIAG_FW BIT_2
1553#define FSTATE_LOGGED_IN BIT_3
1554#define FSTATE_WAITING_FOR_VERIFY BIT_4
1555
1556#define VERIFY_CHIP_IOCB_TYPE 0x1B
1557struct verify_chip_entry_84xx {
1558 uint8_t entry_type;
1559 uint8_t entry_count;
1560 uint8_t sys_defined;
1561 uint8_t entry_status;
1562
1563 uint32_t handle;
1564
1565 uint16_t options;
1566#define VCO_DONT_UPDATE_FW BIT_0
1567#define VCO_FORCE_UPDATE BIT_1
1568#define VCO_DONT_RESET_UPDATE BIT_2
1569#define VCO_DIAG_FW BIT_3
1570#define VCO_END_OF_DATA BIT_14
1571#define VCO_ENABLE_DSD BIT_15
1572
1573 uint16_t reserved_1;
1574
1575 uint16_t data_seg_cnt;
1576 uint16_t reserved_2[3];
1577
1578 uint32_t fw_ver;
1579 uint32_t exchange_address;
1580
1581 uint32_t reserved_3[3];
1582 uint32_t fw_size;
1583 uint32_t fw_seq_size;
1584 uint32_t relative_offset;
1585
1586 uint32_t dseg_address[2];
1587 uint32_t dseg_length;
1588};
1589
1590struct verify_chip_rsp_84xx {
1591 uint8_t entry_type;
1592 uint8_t entry_count;
1593 uint8_t sys_defined;
1594 uint8_t entry_status;
1595
1596 uint32_t handle;
1597
1598 uint16_t comp_status;
1599#define CS_VCS_CHIP_FAILURE 0x3
1600#define CS_VCS_BAD_EXCHANGE 0x8
1601#define CS_VCS_SEQ_COMPLETEi 0x40
1602
1603 uint16_t failure_code;
1604#define VFC_CHECKSUM_ERROR 0x1
1605#define VFC_INVALID_LEN 0x2
1606#define VFC_ALREADY_IN_PROGRESS 0x8
1607
1608 uint16_t reserved_1[4];
1609
1610 uint32_t fw_ver;
1611 uint32_t exchange_address;
1612
1613 uint32_t reserved_2[6];
1614};
1615
1616#define ACCESS_CHIP_IOCB_TYPE 0x2B
1617struct access_chip_84xx {
1618 uint8_t entry_type;
1619 uint8_t entry_count;
1620 uint8_t sys_defined;
1621 uint8_t entry_status;
1622
1623 uint32_t handle;
1624
1625 uint16_t options;
1626#define ACO_DUMP_MEMORY 0x0
1627#define ACO_LOAD_MEMORY 0x1
1628#define ACO_CHANGE_CONFIG_PARAM 0x2
1629#define ACO_REQUEST_INFO 0x3
1630
1631 uint16_t reserved1;
1632
1633 uint16_t dseg_count;
1634 uint16_t reserved2[3];
1635
1636 uint32_t parameter1;
1637 uint32_t parameter2;
1638 uint32_t parameter3;
1639
1640 uint32_t reserved3[3];
1641 uint32_t total_byte_cnt;
1642 uint32_t reserved4;
1643
1644 uint32_t dseg_address[2];
1645 uint32_t dseg_length;
1646};
1647
1648struct access_chip_rsp_84xx {
1649 uint8_t entry_type;
1650 uint8_t entry_count;
1651 uint8_t sys_defined;
1652 uint8_t entry_status;
1653
1654 uint32_t handle;
1655
1656 uint16_t comp_status;
1657 uint16_t failure_code;
1658 uint32_t residual_count;
1659
1660 uint32_t reserved[12];
1661};
1662
1663
1664
1665#define MBA_DCBX_START 0x8016
1666#define MBA_DCBX_COMPLETE 0x8030
1667#define MBA_FCF_CONF_ERR 0x8031
1668#define MBA_DCBX_PARAM_UPDATE 0x8032
1669#define MBA_IDC_COMPLETE 0x8100
1670#define MBA_IDC_NOTIFY 0x8101
1671#define MBA_IDC_TIME_EXT 0x8102
1672
1673#define MBC_IDC_ACK 0x101
1674#define MBC_RESTART_MPI_FW 0x3d
1675#define MBC_FLASH_ACCESS_CTRL 0x3e
1676#define MBC_GET_XGMAC_STATS 0x7a
1677#define MBC_GET_DCBX_PARAMS 0x51
1678
1679
1680
1681
1682#define MBC_WRITE_REMOTE_REG 0x0001
1683#define MBC_READ_REMOTE_REG 0x0009
1684#define MBC_RESTART_NIC_FIRMWARE 0x003d
1685#define MBC_SET_ACCESS_CONTROL 0x003e
1686
1687
1688#define FAC_OPT_FORCE_SEMAPHORE BIT_15
1689#define FAC_OPT_REQUESTOR_ID BIT_14
1690#define FAC_OPT_CMD_SUBCODE 0xff
1691
1692
1693#define FAC_OPT_CMD_WRITE_PROTECT 0x00
1694#define FAC_OPT_CMD_WRITE_ENABLE 0x01
1695#define FAC_OPT_CMD_ERASE_SECTOR 0x02
1696#define FAC_OPT_CMD_LOCK_SEMAPHORE 0x03
1697#define FAC_OPT_CMD_UNLOCK_SEMAPHORE 0x04
1698#define FAC_OPT_CMD_GET_SECTOR_SIZE 0x05
1699
1700
1701#define NEF_LR_DIST_ENABLE BIT_0
1702
1703
1704#define LR_DIST_NV_POS 2
1705#define LR_DIST_FW_POS 12
1706#define LR_DIST_FW_SHIFT (LR_DIST_FW_POS - LR_DIST_NV_POS)
1707#define LR_DIST_FW_FIELD(x) ((x) << LR_DIST_FW_SHIFT & 0xf000)
1708
1709struct nvram_81xx {
1710
1711 uint8_t id[4];
1712 uint16_t nvram_version;
1713 uint16_t reserved_0;
1714
1715
1716 uint16_t version;
1717 uint16_t reserved_1;
1718 uint16_t frame_payload_size;
1719 uint16_t execution_throttle;
1720 uint16_t exchange_count;
1721 uint16_t reserved_2;
1722
1723 uint8_t port_name[WWN_SIZE];
1724 uint8_t node_name[WWN_SIZE];
1725
1726 uint16_t login_retry_count;
1727 uint16_t reserved_3;
1728 uint16_t interrupt_delay_timer;
1729 uint16_t login_timeout;
1730
1731 uint32_t firmware_options_1;
1732 uint32_t firmware_options_2;
1733 uint32_t firmware_options_3;
1734
1735 uint16_t reserved_4[4];
1736
1737
1738 uint8_t enode_mac[6];
1739 uint16_t reserved_5[5];
1740
1741
1742 uint16_t reserved_6[24];
1743
1744
1745 uint16_t ex_version;
1746 uint8_t prio_fcf_matching_flags;
1747 uint8_t reserved_6_1[3];
1748 uint16_t pri_fcf_vlan_id;
1749 uint8_t pri_fcf_fabric_name[8];
1750 uint16_t reserved_6_2[7];
1751 uint8_t spma_mac_addr[6];
1752 uint16_t reserved_6_3[14];
1753
1754
1755 uint8_t min_link_speed;
1756 uint8_t reserved_7_0;
1757 uint16_t reserved_7[31];
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790 uint32_t host_p;
1791
1792 uint8_t alternate_port_name[WWN_SIZE];
1793 uint8_t alternate_node_name[WWN_SIZE];
1794
1795 uint8_t boot_port_name[WWN_SIZE];
1796 uint16_t boot_lun_number;
1797 uint16_t reserved_8;
1798
1799 uint8_t alt1_boot_port_name[WWN_SIZE];
1800 uint16_t alt1_boot_lun_number;
1801 uint16_t reserved_9;
1802
1803 uint8_t alt2_boot_port_name[WWN_SIZE];
1804 uint16_t alt2_boot_lun_number;
1805 uint16_t reserved_10;
1806
1807 uint8_t alt3_boot_port_name[WWN_SIZE];
1808 uint16_t alt3_boot_lun_number;
1809 uint16_t reserved_11;
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821 uint32_t efi_parameters;
1822
1823 uint8_t reset_delay;
1824 uint8_t reserved_12;
1825 uint16_t reserved_13;
1826
1827 uint16_t boot_id_number;
1828 uint16_t reserved_14;
1829
1830 uint16_t max_luns_per_target;
1831 uint16_t reserved_15;
1832
1833 uint16_t port_down_retry_count;
1834 uint16_t link_down_timeout;
1835
1836
1837 uint16_t fcode_parameter;
1838
1839 uint16_t reserved_16[3];
1840
1841
1842 uint8_t reserved_17[4];
1843 uint16_t reserved_18[5];
1844 uint8_t reserved_19[2];
1845 uint16_t reserved_20[8];
1846
1847
1848 uint8_t reserved_21[16];
1849 uint16_t reserved_22[3];
1850
1851
1852
1853
1854
1855
1856
1857 uint16_t enhanced_features;
1858 uint16_t reserved_24[4];
1859
1860
1861 uint16_t reserved_25[32];
1862
1863
1864 uint8_t model_name[16];
1865
1866
1867 uint16_t feature_mask_l;
1868 uint16_t feature_mask_h;
1869 uint16_t reserved_26[2];
1870
1871 uint16_t subsystem_vendor_id;
1872 uint16_t subsystem_device_id;
1873
1874 uint32_t checksum;
1875};
1876
1877
1878
1879
1880
1881#define ICB_VERSION 1
1882struct init_cb_81xx {
1883 uint16_t version;
1884 uint16_t reserved_1;
1885
1886 uint16_t frame_payload_size;
1887 uint16_t execution_throttle;
1888 uint16_t exchange_count;
1889
1890 uint16_t reserved_2;
1891
1892 uint8_t port_name[WWN_SIZE];
1893 uint8_t node_name[WWN_SIZE];
1894
1895 uint16_t response_q_inpointer;
1896 uint16_t request_q_outpointer;
1897
1898 uint16_t login_retry_count;
1899
1900 uint16_t prio_request_q_outpointer;
1901
1902 uint16_t response_q_length;
1903 uint16_t request_q_length;
1904
1905 uint16_t reserved_3;
1906
1907 uint16_t prio_request_q_length;
1908
1909 uint32_t request_q_address[2];
1910 uint32_t response_q_address[2];
1911 uint32_t prio_request_q_address[2];
1912
1913 uint8_t reserved_4[8];
1914
1915 uint16_t atio_q_inpointer;
1916 uint16_t atio_q_length;
1917 uint32_t atio_q_address[2];
1918
1919 uint16_t interrupt_delay_timer;
1920 uint16_t login_timeout;
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933 uint32_t firmware_options_1;
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951 uint32_t firmware_options_2;
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972 uint32_t firmware_options_3;
1973
1974 uint8_t reserved_5[8];
1975
1976 uint8_t enode_mac[6];
1977
1978 uint8_t reserved_6[10];
1979};
1980
1981struct mid_init_cb_81xx {
1982 struct init_cb_81xx init_cb;
1983
1984 uint16_t count;
1985 uint16_t options;
1986
1987 struct mid_conf_entry_24xx entries[MAX_MULTI_ID_FABRIC];
1988};
1989
1990struct ex_init_cb_81xx {
1991 uint16_t ex_version;
1992 uint8_t prio_fcf_matching_flags;
1993 uint8_t reserved_1[3];
1994 uint16_t pri_fcf_vlan_id;
1995 uint8_t pri_fcf_fabric_name[8];
1996 uint16_t reserved_2[7];
1997 uint8_t spma_mac_addr[6];
1998 uint16_t reserved_3[14];
1999};
2000
2001#define FARX_ACCESS_FLASH_CONF_81XX 0x7FFD0000
2002#define FARX_ACCESS_FLASH_DATA_81XX 0x7F800000
2003
2004
2005
2006#define QLFC_FCP_PRIO_DISABLE 0x0
2007#define QLFC_FCP_PRIO_ENABLE 0x1
2008#define QLFC_FCP_PRIO_GET_CONFIG 0x2
2009#define QLFC_FCP_PRIO_SET_CONFIG 0x3
2010
2011struct qla_fcp_prio_entry {
2012 uint16_t flags;
2013
2014#define FCP_PRIO_ENTRY_VALID 0x1
2015#define FCP_PRIO_ENTRY_TAG_VALID 0x2
2016#define FCP_PRIO_ENTRY_SPID_VALID 0x4
2017#define FCP_PRIO_ENTRY_DPID_VALID 0x8
2018#define FCP_PRIO_ENTRY_LUNB_VALID 0x10
2019#define FCP_PRIO_ENTRY_LUNE_VALID 0x20
2020#define FCP_PRIO_ENTRY_SWWN_VALID 0x40
2021#define FCP_PRIO_ENTRY_DWWN_VALID 0x80
2022 uint8_t tag;
2023 uint8_t reserved;
2024 uint32_t src_pid;
2025
2026 uint32_t dst_pid;
2027
2028 uint16_t lun_beg;
2029
2030 uint16_t lun_end;
2031
2032 uint8_t src_wwpn[8];
2033 uint8_t dst_wwpn[8];
2034};
2035
2036struct qla_fcp_prio_cfg {
2037 uint8_t signature[4];
2038 uint16_t version;
2039 uint16_t length;
2040 uint16_t checksum;
2041 uint16_t num_entries;
2042 uint16_t size_of_entry;
2043 uint8_t attributes;
2044#define FCP_PRIO_ATTR_DISABLE 0x0
2045#define FCP_PRIO_ATTR_ENABLE 0x1
2046#define FCP_PRIO_ATTR_PERSIST 0x2
2047 uint8_t reserved;
2048#define FCP_PRIO_CFG_HDR_SIZE 0x10
2049 struct qla_fcp_prio_entry entry[1];
2050#define FCP_PRIO_CFG_ENTRY_SIZE 0x20
2051};
2052
2053#define FCP_PRIO_CFG_SIZE (32*1024)
2054
2055
2056#define FA_FCP_PRIO0_ADDR_25 0x3C000
2057#define FA_FCP_PRIO1_ADDR_25 0x3E000
2058
2059
2060#define FA_BOOT_CODE_ADDR_81 0x80000
2061#define FA_RISC_CODE_ADDR_81 0xA0000
2062#define FA_FW_AREA_ADDR_81 0xC0000
2063#define FA_VPD_NVRAM_ADDR_81 0xD0000
2064#define FA_VPD0_ADDR_81 0xD0000
2065#define FA_VPD1_ADDR_81 0xD0400
2066#define FA_NVRAM0_ADDR_81 0xD0080
2067#define FA_NVRAM1_ADDR_81 0xD0180
2068#define FA_FEATURE_ADDR_81 0xD4000
2069#define FA_FLASH_DESCR_ADDR_81 0xD8000
2070#define FA_FLASH_LAYOUT_ADDR_81 0xD8400
2071#define FA_HW_EVENT0_ADDR_81 0xDC000
2072#define FA_HW_EVENT1_ADDR_81 0xDC400
2073#define FA_NPIV_CONF0_ADDR_81 0xD1000
2074#define FA_NPIV_CONF1_ADDR_81 0xD2000
2075
2076
2077#define FA_FLASH_LAYOUT_ADDR_83 0xFC400
2078
2079#endif
2080