Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    1) /*******************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    2)  * This file is part of the Emulex Linux Device Driver for         *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    3)  * Fibre Channel Host Bus Adapters.                                *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    4)  * Copyright (C) 2017-2020 Broadcom. All Rights Reserved. The term *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    5)  * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.     *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    6)  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    7)  * EMULEX and SLI are trademarks of Emulex.                        *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    8)  * www.broadcom.com                                                *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    9)  *                                                                 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   10)  * This program is free software; you can redistribute it and/or   *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   11)  * modify it under the terms of version 2 of the GNU General       *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   12)  * Public License as published by the Free Software Foundation.    *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   13)  * This program is distributed in the hope that it will be useful. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   14)  * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND          *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   15)  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   16)  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE      *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   17)  * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   18)  * TO BE LEGALLY INVALID.  See the GNU General Public License for  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   19)  * more details, a copy of which can be found in the file COPYING  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   20)  * included with this package.                                     *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   21)  *******************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   23) #define FDMI_DID        0xfffffaU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   24) #define NameServer_DID  0xfffffcU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   25) #define Fabric_Cntl_DID 0xfffffdU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   26) #define Fabric_DID      0xfffffeU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   27) #define Bcast_DID       0xffffffU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   28) #define Mask_DID        0xffffffU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   29) #define CT_DID_MASK     0xffff00U
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   30) #define Fabric_DID_MASK 0xfff000U
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   31) #define WELL_KNOWN_DID_MASK 0xfffff0U
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   33) #define PT2PT_LocalID	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   34) #define PT2PT_RemoteID	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   36) #define FF_DEF_EDTOV          2000	/* Default E_D_TOV (2000ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   37) #define FF_DEF_ALTOV            15	/* Default AL_TIME (15ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   38) #define FF_DEF_RATOV            10	/* Default RA_TOV (10s) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   39) #define FF_DEF_ARBTOV         1900	/* Default ARB_TOV (1900ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   41) #define LPFC_BUF_RING0        64	/* Number of buffers to post to RING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   42) 					   0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   44) #define FCELSSIZE             1024	/* maximum ELS transfer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   46) #define LPFC_FCP_RING            0	/* ring 0 for FCP initiator commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   47) #define LPFC_EXTRA_RING          1	/* ring 1 for other protocols */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   48) #define LPFC_ELS_RING            2	/* ring 2 for ELS commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   50) #define SLI2_IOCB_CMD_R0_ENTRIES    172	/* SLI-2 FCP command ring entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   51) #define SLI2_IOCB_RSP_R0_ENTRIES    134	/* SLI-2 FCP response ring entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   52) #define SLI2_IOCB_CMD_R1_ENTRIES      4	/* SLI-2 extra command ring entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   53) #define SLI2_IOCB_RSP_R1_ENTRIES      4	/* SLI-2 extra response ring entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   54) #define SLI2_IOCB_CMD_R1XTRA_ENTRIES 36	/* SLI-2 extra FCP cmd ring entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   55) #define SLI2_IOCB_RSP_R1XTRA_ENTRIES 52	/* SLI-2 extra FCP rsp ring entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   56) #define SLI2_IOCB_CMD_R2_ENTRIES     20	/* SLI-2 ELS command ring entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   57) #define SLI2_IOCB_RSP_R2_ENTRIES     20	/* SLI-2 ELS response ring entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   58) #define SLI2_IOCB_CMD_R3_ENTRIES      0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   59) #define SLI2_IOCB_RSP_R3_ENTRIES      0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   60) #define SLI2_IOCB_CMD_R3XTRA_ENTRIES 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   61) #define SLI2_IOCB_RSP_R3XTRA_ENTRIES 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   63) #define SLI2_IOCB_CMD_SIZE	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   64) #define SLI2_IOCB_RSP_SIZE	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   65) #define SLI3_IOCB_CMD_SIZE	128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   66) #define SLI3_IOCB_RSP_SIZE	64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   68) #define LPFC_UNREG_ALL_RPIS_VPORT	0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   69) #define LPFC_UNREG_ALL_DFLT_RPIS	0xffffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   71) /* vendor ID used in SCSI netlink calls */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   72) #define LPFC_NL_VENDOR_ID (SCSI_NL_VID_TYPE_PCI | PCI_VENDOR_ID_EMULEX)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   74) #define FW_REV_STR_SIZE	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   75) /* Common Transport structures and definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   77) union CtRevisionId {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   78) 	/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   79) 	struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   80) 		uint32_t Revision:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   81) 		uint32_t InId:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   82) 	} bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   83) 	uint32_t word;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   84) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   86) union CtCommandResponse {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   87) 	/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   88) 	struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   89) 		uint32_t CmdRsp:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   90) 		uint32_t Size:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   91) 	} bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   92) 	uint32_t word;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   93) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   95) /* FC4 Feature bits for RFF_ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   96) #define FC4_FEATURE_TARGET	0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   97) #define FC4_FEATURE_INIT	0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   98) #define FC4_FEATURE_NVME_DISC	0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   99) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  100) struct lpfc_sli_ct_request {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  101) 	/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  102) 	union CtRevisionId RevisionId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  103) 	uint8_t FsType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  104) 	uint8_t FsSubType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  105) 	uint8_t Options;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  106) 	uint8_t Rsrvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  107) 	union CtCommandResponse CommandResponse;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  108) 	uint8_t Rsrvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  109) 	uint8_t ReasonCode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  110) 	uint8_t Explanation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  111) 	uint8_t VendorUnique;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  112) #define LPFC_CT_PREAMBLE	20	/* Size of CTReq + 4 up to here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  114) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  115) 		uint32_t PortID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  116) 		struct gid {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  117) 			uint8_t PortType;	/* for GID_PT requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  118) #define GID_PT_N_PORT	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  119) 			uint8_t DomainScope;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  120) 			uint8_t AreaScope;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  121) 			uint8_t Fc4Type;	/* for GID_FT requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  122) 		} gid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  123) 		struct gid_ff {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  124) 			uint8_t Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  125) 			uint8_t DomainScope;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  126) 			uint8_t AreaScope;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  127) 			uint8_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  128) 			uint8_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  129) 			uint8_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  130) 			uint8_t Fc4FBits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  131) 			uint8_t Fc4Type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  132) 		} gid_ff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  133) 		struct rft {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  134) 			uint32_t PortId;	/* For RFT_ID requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  136) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  137) 			uint32_t rsvd0:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  138) 			uint32_t rsvd1:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  139) 			uint32_t fcpReg:1;	/* Type 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  140) 			uint32_t rsvd2:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  141) 			uint32_t ipReg:1;	/* Type 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  142) 			uint32_t rsvd3:5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  143) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  144) 			uint32_t rsvd0:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  145) 			uint32_t fcpReg:1;	/* Type 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  146) 			uint32_t rsvd1:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  147) 			uint32_t rsvd3:5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  148) 			uint32_t ipReg:1;	/* Type 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  149) 			uint32_t rsvd2:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  150) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  152) 			uint32_t rsvd[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  153) 		} rft;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  154) 		struct rnn {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  155) 			uint32_t PortId;	/* For RNN_ID requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  156) 			uint8_t wwnn[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  157) 		} rnn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  158) 		struct rsnn {	/* For RSNN_ID requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  159) 			uint8_t wwnn[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  160) 			uint8_t len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  161) 			uint8_t symbname[255];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  162) 		} rsnn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  163) 		struct da_id { /* For DA_ID requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  164) 			uint32_t port_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  165) 		} da_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  166) 		struct rspn {	/* For RSPN_ID requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  167) 			uint32_t PortId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  168) 			uint8_t len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  169) 			uint8_t symbname[255];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  170) 		} rspn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  171) 		struct gff {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  172) 			uint32_t PortId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  173) 		} gff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  174) 		struct gff_acc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  175) 			uint8_t fbits[128];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  176) 		} gff_acc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  177) 		struct gft {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  178) 			uint32_t PortId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  179) 		} gft;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  180) 		struct gft_acc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  181) 			uint32_t fc4_types[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  182) 		} gft_acc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  183) #define FCP_TYPE_FEATURE_OFFSET 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  184) 		struct rff {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  185) 			uint32_t PortId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  186) 			uint8_t reserved[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  187) 			uint8_t fbits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  188) 			uint8_t type_code;     /* type=8 for FCP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  189) 		} rff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  190) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  191) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  193) #define LPFC_MAX_CT_SIZE	(60 * 4096)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  195) #define  SLI_CT_REVISION        1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  196) #define  GID_REQUEST_SZ   (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  197) 			   sizeof(struct gid))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  198) #define  GIDFF_REQUEST_SZ (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  199) 			   sizeof(struct gid_ff))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  200) #define  GFF_REQUEST_SZ   (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  201) 			   sizeof(struct gff))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  202) #define  GFT_REQUEST_SZ   (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  203) 			   sizeof(struct gft))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  204) #define  RFT_REQUEST_SZ   (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  205) 			   sizeof(struct rft))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  206) #define  RFF_REQUEST_SZ   (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  207) 			   sizeof(struct rff))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  208) #define  RNN_REQUEST_SZ   (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  209) 			   sizeof(struct rnn))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  210) #define  RSNN_REQUEST_SZ  (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  211) 			   sizeof(struct rsnn))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  212) #define DA_ID_REQUEST_SZ (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  213) 			  sizeof(struct da_id))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  214) #define  RSPN_REQUEST_SZ  (offsetof(struct lpfc_sli_ct_request, un) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  215) 			   sizeof(struct rspn))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  217) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  218)  * FsType Definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  219)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  220) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  221) #define  SLI_CT_MANAGEMENT_SERVICE        0xFA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  222) #define  SLI_CT_TIME_SERVICE              0xFB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  223) #define  SLI_CT_DIRECTORY_SERVICE         0xFC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  224) #define  SLI_CT_FABRIC_CONTROLLER_SERVICE 0xFD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  225) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  226) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  227)  * Directory Service Subtypes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  228)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  230) #define  SLI_CT_DIRECTORY_NAME_SERVER     0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  231) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  232) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  233)  * Response Codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  234)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  236) #define  SLI_CT_RESPONSE_FS_RJT           0x8001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  237) #define  SLI_CT_RESPONSE_FS_ACC           0x8002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  238) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  239) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  240)  * Reason Codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  241)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  242) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  243) #define  SLI_CT_NO_ADDITIONAL_EXPL	  0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  244) #define  SLI_CT_INVALID_COMMAND           0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  245) #define  SLI_CT_INVALID_VERSION           0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  246) #define  SLI_CT_LOGICAL_ERROR             0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  247) #define  SLI_CT_INVALID_IU_SIZE           0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  248) #define  SLI_CT_LOGICAL_BUSY              0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  249) #define  SLI_CT_PROTOCOL_ERROR            0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  250) #define  SLI_CT_UNABLE_TO_PERFORM_REQ     0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  251) #define  SLI_CT_REQ_NOT_SUPPORTED         0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  252) #define  SLI_CT_HBA_INFO_NOT_REGISTERED	  0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  253) #define  SLI_CT_MULTIPLE_HBA_ATTR_OF_SAME_TYPE  0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  254) #define  SLI_CT_INVALID_HBA_ATTR_BLOCK_LEN      0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  255) #define  SLI_CT_HBA_ATTR_NOT_PRESENT	  0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  256) #define  SLI_CT_PORT_INFO_NOT_REGISTERED  0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  257) #define  SLI_CT_MULTIPLE_PORT_ATTR_OF_SAME_TYPE 0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  258) #define  SLI_CT_INVALID_PORT_ATTR_BLOCK_LEN     0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  259) #define  SLI_CT_VENDOR_UNIQUE             0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  261) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  262)  * Name Server SLI_CT_UNABLE_TO_PERFORM_REQ Explanations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  263)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  264) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  265) #define  SLI_CT_NO_PORT_ID                0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  266) #define  SLI_CT_NO_PORT_NAME              0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  267) #define  SLI_CT_NO_NODE_NAME              0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  268) #define  SLI_CT_NO_CLASS_OF_SERVICE       0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  269) #define  SLI_CT_NO_IP_ADDRESS             0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  270) #define  SLI_CT_NO_IPA                    0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  271) #define  SLI_CT_NO_FC4_TYPES              0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  272) #define  SLI_CT_NO_SYMBOLIC_PORT_NAME     0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  273) #define  SLI_CT_NO_SYMBOLIC_NODE_NAME     0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  274) #define  SLI_CT_NO_PORT_TYPE              0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  275) #define  SLI_CT_ACCESS_DENIED             0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  276) #define  SLI_CT_INVALID_PORT_ID           0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  277) #define  SLI_CT_DATABASE_EMPTY            0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  278) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  279) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  280)  * Name Server Command Codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  281)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  283) #define  SLI_CTNS_GA_NXT      0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  284) #define  SLI_CTNS_GPN_ID      0x0112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  285) #define  SLI_CTNS_GNN_ID      0x0113
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  286) #define  SLI_CTNS_GCS_ID      0x0114
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  287) #define  SLI_CTNS_GFT_ID      0x0117
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  288) #define  SLI_CTNS_GSPN_ID     0x0118
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  289) #define  SLI_CTNS_GPT_ID      0x011A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  290) #define  SLI_CTNS_GFF_ID      0x011F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  291) #define  SLI_CTNS_GID_PN      0x0121
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  292) #define  SLI_CTNS_GID_NN      0x0131
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  293) #define  SLI_CTNS_GIP_NN      0x0135
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  294) #define  SLI_CTNS_GIPA_NN     0x0136
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  295) #define  SLI_CTNS_GSNN_NN     0x0139
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  296) #define  SLI_CTNS_GNN_IP      0x0153
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  297) #define  SLI_CTNS_GIPA_IP     0x0156
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  298) #define  SLI_CTNS_GID_FT      0x0171
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  299) #define  SLI_CTNS_GID_FF      0x01F1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  300) #define  SLI_CTNS_GID_PT      0x01A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  301) #define  SLI_CTNS_RPN_ID      0x0212
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  302) #define  SLI_CTNS_RNN_ID      0x0213
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  303) #define  SLI_CTNS_RCS_ID      0x0214
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  304) #define  SLI_CTNS_RFT_ID      0x0217
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  305) #define  SLI_CTNS_RSPN_ID     0x0218
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  306) #define  SLI_CTNS_RPT_ID      0x021A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  307) #define  SLI_CTNS_RFF_ID      0x021F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  308) #define  SLI_CTNS_RIP_NN      0x0235
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  309) #define  SLI_CTNS_RIPA_NN     0x0236
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  310) #define  SLI_CTNS_RSNN_NN     0x0239
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  311) #define  SLI_CTNS_DA_ID       0x0300
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  312) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  313) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  314)  * Port Types
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  315)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  316) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  317) #define SLI_CTPT_N_PORT		0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  318) #define SLI_CTPT_NL_PORT	0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  319) #define SLI_CTPT_FNL_PORT	0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  320) #define SLI_CTPT_IP		0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  321) #define SLI_CTPT_FCP		0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  322) #define SLI_CTPT_NVME		0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  323) #define SLI_CTPT_NX_PORT	0x7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  324) #define SLI_CTPT_F_PORT		0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  325) #define SLI_CTPT_FL_PORT	0x82
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  326) #define SLI_CTPT_E_PORT		0x84
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  327) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  328) #define SLI_CT_LAST_ENTRY     0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  329) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  330) /* Fibre Channel Service Parameter definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  331) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  332) #define FC_PH_4_0   6		/* FC-PH version 4.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  333) #define FC_PH_4_1   7		/* FC-PH version 4.1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  334) #define FC_PH_4_2   8		/* FC-PH version 4.2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  335) #define FC_PH_4_3   9		/* FC-PH version 4.3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  336) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  337) #define FC_PH_LOW   8		/* Lowest supported FC-PH version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  338) #define FC_PH_HIGH  9		/* Highest supported FC-PH version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  339) #define FC_PH3   0x20		/* FC-PH-3 version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  340) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  341) #define FF_FRAME_SIZE     2048
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  342) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  343) struct lpfc_name {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  344) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  345) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  346) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  347) 			uint8_t nameType:4;	/* FC Word 0, bit 28:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  348) 			uint8_t IEEEextMsn:4;	/* FC Word 0, bit 24:27, bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  349) 						   8:11 of IEEE ext */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  350) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  351) 			uint8_t IEEEextMsn:4;	/* FC Word 0, bit 24:27, bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  352) 						   8:11 of IEEE ext */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  353) 			uint8_t nameType:4;	/* FC Word 0, bit 28:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  354) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  355) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  356) #define NAME_IEEE           0x1	/* IEEE name - nameType */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  357) #define NAME_IEEE_EXT       0x2	/* IEEE extended name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  358) #define NAME_FC_TYPE        0x3	/* FC native name type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  359) #define NAME_IP_TYPE        0x4	/* IP address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  360) #define NAME_CCITT_TYPE     0xC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  361) #define NAME_CCITT_GR_TYPE  0xE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  362) 			uint8_t IEEEextLsb;	/* FC Word 0, bit 16:23, IEEE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  363) 						   extended Lsb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  364) 			uint8_t IEEE[6];	/* FC IEEE address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  365) 		} s;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  366) 		uint8_t wwn[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  367) 		uint64_t name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  368) 	} u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  369) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  370) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  371) struct csp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  372) 	uint8_t fcphHigh;	/* FC Word 0, byte 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  373) 	uint8_t fcphLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  374) 	uint8_t bbCreditMsb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  375) 	uint8_t bbCreditLsb;	/* FC Word 0, byte 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  376) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  377) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  378)  * Word 1 Bit 31 in common service parameter is overloaded.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  379)  * Word 1 Bit 31 in FLOGI request is multiple NPort request
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  380)  * Word 1 Bit 31 in FLOGI response is clean address bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  381)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  382) #define clean_address_bit request_multiple_Nport /* Word 1, bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  383) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  384)  * Word 1 Bit 30 in common service parameter is overloaded.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  385)  * Word 1 Bit 30 in FLOGI request is Virtual Fabrics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  386)  * Word 1 Bit 30 in PLOGI request is random offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  387)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  388) #define virtual_fabric_support randomOffset /* Word 1, bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  389) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  390)  * Word 1 Bit 29 in common service parameter is overloaded.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  391)  * Word 1 Bit 29 in FLOGI response is multiple NPort assignment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  392)  * Word 1 Bit 29 in FLOGI/PLOGI request is Valid Vendor Version Level
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  393)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  394) #define valid_vendor_ver_level response_multiple_NPort /* Word 1, bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  395) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  396) 	uint16_t request_multiple_Nport:1;	/* FC Word 1, bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  397) 	uint16_t randomOffset:1;	/* FC Word 1, bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  398) 	uint16_t response_multiple_NPort:1;	/* FC Word 1, bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  399) 	uint16_t fPort:1;	/* FC Word 1, bit 28 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  400) 	uint16_t altBbCredit:1;	/* FC Word 1, bit 27 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  401) 	uint16_t edtovResolution:1;	/* FC Word 1, bit 26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  402) 	uint16_t multicast:1;	/* FC Word 1, bit 25 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  403) 	uint16_t broadcast:1;	/* FC Word 1, bit 24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  404) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  405) 	uint16_t huntgroup:1;	/* FC Word 1, bit 23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  406) 	uint16_t simplex:1;	/* FC Word 1, bit 22 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  407) 	uint16_t word1Reserved1:3;	/* FC Word 1, bit 21:19 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  408) 	uint16_t dhd:1;		/* FC Word 1, bit 18 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  409) 	uint16_t contIncSeqCnt:1;	/* FC Word 1, bit 17 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  410) 	uint16_t payloadlength:1;	/* FC Word 1, bit 16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  411) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  412) 	uint16_t broadcast:1;	/* FC Word 1, bit 24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  413) 	uint16_t multicast:1;	/* FC Word 1, bit 25 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  414) 	uint16_t edtovResolution:1;	/* FC Word 1, bit 26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  415) 	uint16_t altBbCredit:1;	/* FC Word 1, bit 27 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  416) 	uint16_t fPort:1;	/* FC Word 1, bit 28 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  417) 	uint16_t response_multiple_NPort:1;	/* FC Word 1, bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  418) 	uint16_t randomOffset:1;	/* FC Word 1, bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  419) 	uint16_t request_multiple_Nport:1;	/* FC Word 1, bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  420) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  421) 	uint16_t payloadlength:1;	/* FC Word 1, bit 16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  422) 	uint16_t contIncSeqCnt:1;	/* FC Word 1, bit 17 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  423) 	uint16_t dhd:1;		/* FC Word 1, bit 18 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  424) 	uint16_t word1Reserved1:3;	/* FC Word 1, bit 21:19 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  425) 	uint16_t simplex:1;	/* FC Word 1, bit 22 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  426) 	uint16_t huntgroup:1;	/* FC Word 1, bit 23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  427) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  428) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  429) 	uint8_t bbRcvSizeMsb;	/* Upper nibble is reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  430) 	uint8_t bbRcvSizeLsb;	/* FC Word 1, byte 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  431) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  432) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  433) 			uint8_t word2Reserved1;	/* FC Word 2 byte 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  434) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  435) 			uint8_t totalConcurrSeq;	/* FC Word 2 byte 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  436) 			uint8_t roByCategoryMsb;	/* FC Word 2 byte 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  437) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  438) 			uint8_t roByCategoryLsb;	/* FC Word 2 byte 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  439) 		} nPort;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  440) 		uint32_t r_a_tov;	/* R_A_TOV must be in B.E. format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  441) 	} w2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  442) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  443) 	uint32_t e_d_tov;	/* E_D_TOV must be in B.E. format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  444) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  445) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  446) struct class_parms {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  447) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  448) 	uint8_t classValid:1;	/* FC Word 0, bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  449) 	uint8_t intermix:1;	/* FC Word 0, bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  450) 	uint8_t stackedXparent:1;	/* FC Word 0, bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  451) 	uint8_t stackedLockDown:1;	/* FC Word 0, bit 28 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  452) 	uint8_t seqDelivery:1;	/* FC Word 0, bit 27 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  453) 	uint8_t word0Reserved1:3;	/* FC Word 0, bit 24:26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  454) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  455) 	uint8_t word0Reserved1:3;	/* FC Word 0, bit 24:26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  456) 	uint8_t seqDelivery:1;	/* FC Word 0, bit 27 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  457) 	uint8_t stackedLockDown:1;	/* FC Word 0, bit 28 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  458) 	uint8_t stackedXparent:1;	/* FC Word 0, bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  459) 	uint8_t intermix:1;	/* FC Word 0, bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  460) 	uint8_t classValid:1;	/* FC Word 0, bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  461) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  462) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  463) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  464) 	uint8_t word0Reserved2;	/* FC Word 0, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  465) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  466) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  467) 	uint8_t iCtlXidReAssgn:2;	/* FC Word 0, Bit 14:15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  468) 	uint8_t iCtlInitialPa:2;	/* FC Word 0, bit 12:13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  469) 	uint8_t iCtlAck0capable:1;	/* FC Word 0, bit 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  470) 	uint8_t iCtlAckNcapable:1;	/* FC Word 0, bit 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  471) 	uint8_t word0Reserved3:2;	/* FC Word 0, bit  8: 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  472) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  473) 	uint8_t word0Reserved3:2;	/* FC Word 0, bit  8: 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  474) 	uint8_t iCtlAckNcapable:1;	/* FC Word 0, bit 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  475) 	uint8_t iCtlAck0capable:1;	/* FC Word 0, bit 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  476) 	uint8_t iCtlInitialPa:2;	/* FC Word 0, bit 12:13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  477) 	uint8_t iCtlXidReAssgn:2;	/* FC Word 0, Bit 14:15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  478) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  479) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  480) 	uint8_t word0Reserved4;	/* FC Word 0, bit  0: 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  481) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  482) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  483) 	uint8_t rCtlAck0capable:1;	/* FC Word 1, bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  484) 	uint8_t rCtlAckNcapable:1;	/* FC Word 1, bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  485) 	uint8_t rCtlXidInterlck:1;	/* FC Word 1, bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  486) 	uint8_t rCtlErrorPolicy:2;	/* FC Word 1, bit 27:28 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  487) 	uint8_t word1Reserved1:1;	/* FC Word 1, bit 26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  488) 	uint8_t rCtlCatPerSeq:2;	/* FC Word 1, bit 24:25 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  489) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  490) 	uint8_t rCtlCatPerSeq:2;	/* FC Word 1, bit 24:25 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  491) 	uint8_t word1Reserved1:1;	/* FC Word 1, bit 26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  492) 	uint8_t rCtlErrorPolicy:2;	/* FC Word 1, bit 27:28 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  493) 	uint8_t rCtlXidInterlck:1;	/* FC Word 1, bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  494) 	uint8_t rCtlAckNcapable:1;	/* FC Word 1, bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  495) 	uint8_t rCtlAck0capable:1;	/* FC Word 1, bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  496) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  498) 	uint8_t word1Reserved2;	/* FC Word 1, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  499) 	uint8_t rcvDataSizeMsb;	/* FC Word 1, bit  8:15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  500) 	uint8_t rcvDataSizeLsb;	/* FC Word 1, bit  0: 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  501) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  502) 	uint8_t concurrentSeqMsb;	/* FC Word 2, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  503) 	uint8_t concurrentSeqLsb;	/* FC Word 2, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  504) 	uint8_t EeCreditSeqMsb;	/* FC Word 2, bit  8:15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  505) 	uint8_t EeCreditSeqLsb;	/* FC Word 2, bit  0: 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  506) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  507) 	uint8_t openSeqPerXchgMsb;	/* FC Word 3, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  508) 	uint8_t openSeqPerXchgLsb;	/* FC Word 3, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  509) 	uint8_t word3Reserved1;	/* Fc Word 3, bit  8:15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  510) 	uint8_t word3Reserved2;	/* Fc Word 3, bit  0: 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  511) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  512) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  513) #define FAPWWN_KEY_VENDOR	0x42524344 /*valid vendor version fawwpn key*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  514) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  515) struct serv_parm {	/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  516) 	struct csp cmn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  517) 	struct lpfc_name portName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  518) 	struct lpfc_name nodeName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  519) 	struct class_parms cls1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  520) 	struct class_parms cls2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  521) 	struct class_parms cls3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  522) 	struct class_parms cls4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  523) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  524) 		uint8_t vendorVersion[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  525) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  526) 			uint32_t vid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  527) #define LPFC_VV_EMLX_ID	0x454d4c58	/* EMLX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  528) 			uint32_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  529) #define LPFC_VV_SUPPRESS_RSP	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  530) 		} vv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  531) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  532) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  533) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  534) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  535)  * Virtual Fabric Tagging Header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  536)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  537) struct fc_vft_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  538) 	 uint32_t word0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  539) #define fc_vft_hdr_r_ctl_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  540) #define fc_vft_hdr_r_ctl_MASK		0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  541) #define fc_vft_hdr_r_ctl_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  542) #define fc_vft_hdr_ver_SHIFT		22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  543) #define fc_vft_hdr_ver_MASK		0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  544) #define fc_vft_hdr_ver_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  545) #define fc_vft_hdr_type_SHIFT		18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  546) #define fc_vft_hdr_type_MASK		0xF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  547) #define fc_vft_hdr_type_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  548) #define fc_vft_hdr_e_SHIFT		16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  549) #define fc_vft_hdr_e_MASK		0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  550) #define fc_vft_hdr_e_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  551) #define fc_vft_hdr_priority_SHIFT	13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  552) #define fc_vft_hdr_priority_MASK	0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  553) #define fc_vft_hdr_priority_WORD	word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  554) #define fc_vft_hdr_vf_id_SHIFT		1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  555) #define fc_vft_hdr_vf_id_MASK		0xFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  556) #define fc_vft_hdr_vf_id_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  557) 	uint32_t word1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  558) #define fc_vft_hdr_hopct_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  559) #define fc_vft_hdr_hopct_MASK		0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  560) #define fc_vft_hdr_hopct_WORD		word1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  561) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  562) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  563) #include <uapi/scsi/fc/fc_els.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  564) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  565) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  566)  *  Extended Link Service LS_COMMAND codes (Payload Word 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  567)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  568) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  569) #define ELS_CMD_MASK      0xffff0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  570) #define ELS_RSP_MASK      0xff000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  571) #define ELS_CMD_LS_RJT    0x01000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  572) #define ELS_CMD_ACC       0x02000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  573) #define ELS_CMD_PLOGI     0x03000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  574) #define ELS_CMD_FLOGI     0x04000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  575) #define ELS_CMD_LOGO      0x05000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  576) #define ELS_CMD_ABTX      0x06000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  577) #define ELS_CMD_RCS       0x07000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  578) #define ELS_CMD_RES       0x08000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  579) #define ELS_CMD_RSS       0x09000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  580) #define ELS_CMD_RSI       0x0A000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  581) #define ELS_CMD_ESTS      0x0B000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  582) #define ELS_CMD_ESTC      0x0C000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  583) #define ELS_CMD_ADVC      0x0D000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  584) #define ELS_CMD_RTV       0x0E000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  585) #define ELS_CMD_RLS       0x0F000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  586) #define ELS_CMD_ECHO      0x10000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  587) #define ELS_CMD_TEST      0x11000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  588) #define ELS_CMD_RRQ       0x12000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  589) #define ELS_CMD_REC       0x13000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  590) #define ELS_CMD_RDP       0x18000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  591) #define ELS_CMD_RDF       0x19000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  592) #define ELS_CMD_PRLI      0x20100014
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  593) #define ELS_CMD_NVMEPRLI  0x20140018
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  594) #define ELS_CMD_PRLO      0x21100014
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  595) #define ELS_CMD_PRLO_ACC  0x02100014
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  596) #define ELS_CMD_PDISC     0x50000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  597) #define ELS_CMD_FDISC     0x51000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  598) #define ELS_CMD_ADISC     0x52000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  599) #define ELS_CMD_FARP      0x54000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  600) #define ELS_CMD_FARPR     0x55000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  601) #define ELS_CMD_RPL       0x57000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  602) #define ELS_CMD_FAN       0x60000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  603) #define ELS_CMD_RSCN      0x61040000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  604) #define ELS_CMD_RSCN_XMT  0x61040008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  605) #define ELS_CMD_SCR       0x62000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  606) #define ELS_CMD_RNID      0x78000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  607) #define ELS_CMD_LIRR      0x7A000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  608) #define ELS_CMD_LCB	  0x81000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  609) #define ELS_CMD_FPIN	  0x16000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  610) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  611) #define ELS_CMD_MASK      0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  612) #define ELS_RSP_MASK      0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  613) #define ELS_CMD_LS_RJT    0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  614) #define ELS_CMD_ACC       0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  615) #define ELS_CMD_PLOGI     0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  616) #define ELS_CMD_FLOGI     0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  617) #define ELS_CMD_LOGO      0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  618) #define ELS_CMD_ABTX      0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  619) #define ELS_CMD_RCS       0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  620) #define ELS_CMD_RES       0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  621) #define ELS_CMD_RSS       0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  622) #define ELS_CMD_RSI       0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  623) #define ELS_CMD_ESTS      0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  624) #define ELS_CMD_ESTC      0x0C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  625) #define ELS_CMD_ADVC      0x0D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  626) #define ELS_CMD_RTV       0x0E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  627) #define ELS_CMD_RLS       0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  628) #define ELS_CMD_ECHO      0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  629) #define ELS_CMD_TEST      0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  630) #define ELS_CMD_RRQ       0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  631) #define ELS_CMD_REC       0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  632) #define ELS_CMD_RDP	  0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  633) #define ELS_CMD_RDF	  0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  634) #define ELS_CMD_PRLI      0x14001020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  635) #define ELS_CMD_NVMEPRLI  0x18001420
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  636) #define ELS_CMD_PRLO      0x14001021
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  637) #define ELS_CMD_PRLO_ACC  0x14001002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  638) #define ELS_CMD_PDISC     0x50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  639) #define ELS_CMD_FDISC     0x51
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  640) #define ELS_CMD_ADISC     0x52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  641) #define ELS_CMD_FARP      0x54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  642) #define ELS_CMD_FARPR     0x55
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  643) #define ELS_CMD_RPL       0x57
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  644) #define ELS_CMD_FAN       0x60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  645) #define ELS_CMD_RSCN      0x0461
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  646) #define ELS_CMD_RSCN_XMT  0x08000461
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  647) #define ELS_CMD_SCR       0x62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  648) #define ELS_CMD_RNID      0x78
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  649) #define ELS_CMD_LIRR      0x7A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  650) #define ELS_CMD_LCB	  0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  651) #define ELS_CMD_FPIN	  ELS_FPIN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  652) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  653) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  654) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  655)  *  LS_RJT Payload Definition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  656)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  657) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  658) struct ls_rjt {	/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  659) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  660) 		uint32_t lsRjtError;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  661) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  662) 			uint8_t lsRjtRsvd0;	/* FC Word 0, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  663) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  664) 			uint8_t lsRjtRsnCode;	/* FC Word 0, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  665) 			/* LS_RJT reason codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  666) #define LSRJT_INVALID_CMD     0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  667) #define LSRJT_LOGICAL_ERR     0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  668) #define LSRJT_LOGICAL_BSY     0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  669) #define LSRJT_PROTOCOL_ERR    0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  670) #define LSRJT_UNABLE_TPC      0x09	/* Unable to perform command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  671) #define LSRJT_CMD_UNSUPPORTED 0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  672) #define LSRJT_VENDOR_UNIQUE   0xFF	/* See Byte 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  673) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  674) 			uint8_t lsRjtRsnCodeExp; /* FC Word 0, bit 8:15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  675) 			/* LS_RJT reason explanation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  676) #define LSEXP_NOTHING_MORE      0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  677) #define LSEXP_SPARM_OPTIONS     0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  678) #define LSEXP_SPARM_ICTL        0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  679) #define LSEXP_SPARM_RCTL        0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  680) #define LSEXP_SPARM_RCV_SIZE    0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  681) #define LSEXP_SPARM_CONCUR_SEQ  0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  682) #define LSEXP_SPARM_CREDIT      0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  683) #define LSEXP_INVALID_PNAME     0x0D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  684) #define LSEXP_INVALID_NNAME     0x0E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  685) #define LSEXP_INVALID_CSP       0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  686) #define LSEXP_INVALID_ASSOC_HDR 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  687) #define LSEXP_ASSOC_HDR_REQ     0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  688) #define LSEXP_INVALID_O_SID     0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  689) #define LSEXP_INVALID_OX_RX     0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  690) #define LSEXP_CMD_IN_PROGRESS   0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  691) #define LSEXP_PORT_LOGIN_REQ    0x1E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  692) #define LSEXP_INVALID_NPORT_ID  0x1F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  693) #define LSEXP_INVALID_SEQ_ID    0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  694) #define LSEXP_INVALID_XCHG      0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  695) #define LSEXP_INACTIVE_XCHG     0x25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  696) #define LSEXP_RQ_REQUIRED       0x27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  697) #define LSEXP_OUT_OF_RESOURCE   0x29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  698) #define LSEXP_CANT_GIVE_DATA    0x2A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  699) #define LSEXP_REQ_UNSUPPORTED   0x2C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  700) 			uint8_t vendorUnique;	/* FC Word 0, bit  0: 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  701) 		} b;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  702) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  703) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  704) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  705) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  706)  *  N_Port Login (FLOGO/PLOGO Request) Payload Definition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  707)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  708) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  709) typedef struct _LOGO {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  710) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  711) 		uint32_t nPortId32;	/* Access nPortId as a word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  712) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  713) 			uint8_t word1Reserved1;	/* FC Word 1, bit 31:24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  714) 			uint8_t nPortIdByte0;	/* N_port  ID bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  715) 			uint8_t nPortIdByte1;	/* N_port  ID bit  8:15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  716) 			uint8_t nPortIdByte2;	/* N_port  ID bit  0: 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  717) 		} b;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  718) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  719) 	struct lpfc_name portName;	/* N_port name field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  720) } LOGO;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  721) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  722) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  723)  *  FCP Login (PRLI Request / ACC) Payload Definition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  724)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  725) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  726) #define PRLX_PAGE_LEN   0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  727) #define TPRLO_PAGE_LEN  0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  728) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  729) typedef struct _PRLI {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  730) 	uint8_t prliType;	/* FC Parm Word 0, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  731) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  732) #define PRLI_FCP_TYPE 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  733) #define PRLI_NVME_TYPE 0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  734) 	uint8_t word0Reserved1;	/* FC Parm Word 0, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  735) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  736) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  737) 	uint8_t origProcAssocV:1;	/* FC Parm Word 0, bit 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  738) 	uint8_t respProcAssocV:1;	/* FC Parm Word 0, bit 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  739) 	uint8_t estabImagePair:1;	/* FC Parm Word 0, bit 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  740) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  741) 	/*    ACC = imagePairEstablished */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  742) 	uint8_t word0Reserved2:1;	/* FC Parm Word 0, bit 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  743) 	uint8_t acceptRspCode:4;	/* FC Parm Word 0, bit 8:11, ACC ONLY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  744) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  745) 	uint8_t acceptRspCode:4;	/* FC Parm Word 0, bit 8:11, ACC ONLY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  746) 	uint8_t word0Reserved2:1;	/* FC Parm Word 0, bit 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  747) 	uint8_t estabImagePair:1;	/* FC Parm Word 0, bit 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  748) 	uint8_t respProcAssocV:1;	/* FC Parm Word 0, bit 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  749) 	uint8_t origProcAssocV:1;	/* FC Parm Word 0, bit 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  750) 	/*    ACC = imagePairEstablished */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  751) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  752) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  753) #define PRLI_REQ_EXECUTED     0x1	/* acceptRspCode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  754) #define PRLI_NO_RESOURCES     0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  755) #define PRLI_INIT_INCOMPLETE  0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  756) #define PRLI_NO_SUCH_PA       0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  757) #define PRLI_PREDEF_CONFIG    0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  758) #define PRLI_PARTIAL_SUCCESS  0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  759) #define PRLI_INVALID_PAGE_CNT 0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  760) 	uint8_t word0Reserved3;	/* FC Parm Word 0, bit 0:7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  761) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  762) 	uint32_t origProcAssoc;	/* FC Parm Word 1, bit 0:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  763) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  764) 	uint32_t respProcAssoc;	/* FC Parm Word 2, bit 0:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  765) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  766) 	uint8_t word3Reserved1;	/* FC Parm Word 3, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  767) 	uint8_t word3Reserved2;	/* FC Parm Word 3, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  768) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  769) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  770) 	uint16_t Word3bit15Resved:1;	/* FC Parm Word 3, bit 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  771) 	uint16_t Word3bit14Resved:1;	/* FC Parm Word 3, bit 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  772) 	uint16_t Word3bit13Resved:1;	/* FC Parm Word 3, bit 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  773) 	uint16_t Word3bit12Resved:1;	/* FC Parm Word 3, bit 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  774) 	uint16_t Word3bit11Resved:1;	/* FC Parm Word 3, bit 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  775) 	uint16_t Word3bit10Resved:1;	/* FC Parm Word 3, bit 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  776) 	uint16_t TaskRetryIdReq:1;	/* FC Parm Word 3, bit  9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  777) 	uint16_t Retry:1;	/* FC Parm Word 3, bit  8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  778) 	uint16_t ConfmComplAllowed:1;	/* FC Parm Word 3, bit  7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  779) 	uint16_t dataOverLay:1;	/* FC Parm Word 3, bit  6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  780) 	uint16_t initiatorFunc:1;	/* FC Parm Word 3, bit  5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  781) 	uint16_t targetFunc:1;	/* FC Parm Word 3, bit  4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  782) 	uint16_t cmdDataMixEna:1;	/* FC Parm Word 3, bit  3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  783) 	uint16_t dataRspMixEna:1;	/* FC Parm Word 3, bit  2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  784) 	uint16_t readXferRdyDis:1;	/* FC Parm Word 3, bit  1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  785) 	uint16_t writeXferRdyDis:1;	/* FC Parm Word 3, bit  0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  786) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  787) 	uint16_t Retry:1;	/* FC Parm Word 3, bit  8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  788) 	uint16_t TaskRetryIdReq:1;	/* FC Parm Word 3, bit  9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  789) 	uint16_t Word3bit10Resved:1;	/* FC Parm Word 3, bit 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  790) 	uint16_t Word3bit11Resved:1;	/* FC Parm Word 3, bit 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  791) 	uint16_t Word3bit12Resved:1;	/* FC Parm Word 3, bit 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  792) 	uint16_t Word3bit13Resved:1;	/* FC Parm Word 3, bit 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  793) 	uint16_t Word3bit14Resved:1;	/* FC Parm Word 3, bit 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  794) 	uint16_t Word3bit15Resved:1;	/* FC Parm Word 3, bit 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  795) 	uint16_t writeXferRdyDis:1;	/* FC Parm Word 3, bit  0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  796) 	uint16_t readXferRdyDis:1;	/* FC Parm Word 3, bit  1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  797) 	uint16_t dataRspMixEna:1;	/* FC Parm Word 3, bit  2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  798) 	uint16_t cmdDataMixEna:1;	/* FC Parm Word 3, bit  3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  799) 	uint16_t targetFunc:1;	/* FC Parm Word 3, bit  4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  800) 	uint16_t initiatorFunc:1;	/* FC Parm Word 3, bit  5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  801) 	uint16_t dataOverLay:1;	/* FC Parm Word 3, bit  6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  802) 	uint16_t ConfmComplAllowed:1;	/* FC Parm Word 3, bit  7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  803) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  804) } PRLI;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  805) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  806) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  807)  *  FCP Logout (PRLO Request / ACC) Payload Definition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  808)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  809) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  810) typedef struct _PRLO {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  811) 	uint8_t prloType;	/* FC Parm Word 0, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  812) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  813) #define PRLO_FCP_TYPE  0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  814) 	uint8_t word0Reserved1;	/* FC Parm Word 0, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  815) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  816) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  817) 	uint8_t origProcAssocV:1;	/* FC Parm Word 0, bit 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  818) 	uint8_t respProcAssocV:1;	/* FC Parm Word 0, bit 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  819) 	uint8_t word0Reserved2:2;	/* FC Parm Word 0, bit 12:13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  820) 	uint8_t acceptRspCode:4;	/* FC Parm Word 0, bit 8:11, ACC ONLY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  821) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  822) 	uint8_t acceptRspCode:4;	/* FC Parm Word 0, bit 8:11, ACC ONLY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  823) 	uint8_t word0Reserved2:2;	/* FC Parm Word 0, bit 12:13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  824) 	uint8_t respProcAssocV:1;	/* FC Parm Word 0, bit 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  825) 	uint8_t origProcAssocV:1;	/* FC Parm Word 0, bit 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  826) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  827) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  828) #define PRLO_REQ_EXECUTED     0x1	/* acceptRspCode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  829) #define PRLO_NO_SUCH_IMAGE    0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  830) #define PRLO_INVALID_PAGE_CNT 0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  831) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  832) 	uint8_t word0Reserved3;	/* FC Parm Word 0, bit 0:7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  833) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  834) 	uint32_t origProcAssoc;	/* FC Parm Word 1, bit 0:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  835) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  836) 	uint32_t respProcAssoc;	/* FC Parm Word 2, bit 0:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  837) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  838) 	uint32_t word3Reserved1;	/* FC Parm Word 3, bit 0:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  839) } PRLO;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  840) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  841) typedef struct _ADISC {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  842) 	uint32_t hardAL_PA;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  843) 	struct lpfc_name portName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  844) 	struct lpfc_name nodeName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  845) 	uint32_t DID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  846) } __packed ADISC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  847) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  848) typedef struct _FARP {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  849) 	uint32_t Mflags:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  850) 	uint32_t Odid:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  851) #define FARP_NO_ACTION          0	/* FARP information enclosed, no
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  852) 					   action */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  853) #define FARP_MATCH_PORT         0x1	/* Match on Responder Port Name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  854) #define FARP_MATCH_NODE         0x2	/* Match on Responder Node Name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  855) #define FARP_MATCH_IP           0x4	/* Match on IP address, not supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  856) #define FARP_MATCH_IPV4         0x5	/* Match on IPV4 address, not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  857) 					   supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  858) #define FARP_MATCH_IPV6         0x6	/* Match on IPV6 address, not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  859) 					   supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  860) 	uint32_t Rflags:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  861) 	uint32_t Rdid:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  862) #define FARP_REQUEST_PLOGI      0x1	/* Request for PLOGI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  863) #define FARP_REQUEST_FARPR      0x2	/* Request for FARP Response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  864) 	struct lpfc_name OportName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  865) 	struct lpfc_name OnodeName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  866) 	struct lpfc_name RportName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  867) 	struct lpfc_name RnodeName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  868) 	uint8_t Oipaddr[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  869) 	uint8_t Ripaddr[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  870) } FARP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  871) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  872) typedef struct _FAN {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  873) 	uint32_t Fdid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  874) 	struct lpfc_name FportName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  875) 	struct lpfc_name FnodeName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  876) } __packed FAN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  877) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  878) typedef struct _SCR {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  879) 	uint8_t resvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  880) 	uint8_t resvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  881) 	uint8_t resvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  882) 	uint8_t Function;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  883) #define  SCR_FUNC_FABRIC     0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  884) #define  SCR_FUNC_NPORT      0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  885) #define  SCR_FUNC_FULL       0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  886) #define  SCR_CLEAR           0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  887) } SCR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  888) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  889) typedef struct _RNID_TOP_DISC {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  890) 	struct lpfc_name portName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  891) 	uint8_t resvd[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  892) 	uint32_t unitType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  893) #define RNID_HBA            0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  894) #define RNID_HOST           0xa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  895) #define RNID_DRIVER         0xd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  896) 	uint32_t physPort;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  897) 	uint32_t attachedNodes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  898) 	uint16_t ipVersion;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  899) #define RNID_IPV4           0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  900) #define RNID_IPV6           0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  901) 	uint16_t UDPport;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  902) 	uint8_t ipAddr[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  903) 	uint16_t resvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  904) 	uint16_t flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  905) #define RNID_TD_SUPPORT     0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  906) #define RNID_LP_VALID       0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  907) } RNID_TOP_DISC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  908) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  909) typedef struct _RNID {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  910) 	uint8_t Format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  911) #define RNID_TOPOLOGY_DISC  0xdf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  912) 	uint8_t CommonLen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  913) 	uint8_t resvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  914) 	uint8_t SpecificLen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  915) 	struct lpfc_name portName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  916) 	struct lpfc_name nodeName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  917) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  918) 		RNID_TOP_DISC topologyDisc;	/* topology disc (0xdf) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  919) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  920) } __packed RNID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  921) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  922) struct RLS {			/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  923) 	uint32_t rls;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  924) #define rls_rsvd_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  925) #define rls_rsvd_MASK		0x000000ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  926) #define rls_rsvd_WORD		rls
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  927) #define rls_did_SHIFT		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  928) #define rls_did_MASK		0x00ffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  929) #define rls_did_WORD		rls
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  930) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  931) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  932) struct  RLS_RSP {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  933) 	uint32_t linkFailureCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  934) 	uint32_t lossSyncCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  935) 	uint32_t lossSignalCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  936) 	uint32_t primSeqErrCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  937) 	uint32_t invalidXmitWord;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  938) 	uint32_t crcCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  939) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  940) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  941) struct RRQ {			/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  942) 	uint32_t rrq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  943) #define rrq_rsvd_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  944) #define rrq_rsvd_MASK		0x000000ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  945) #define rrq_rsvd_WORD		rrq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  946) #define rrq_did_SHIFT		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  947) #define rrq_did_MASK		0x00ffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  948) #define rrq_did_WORD		rrq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  949) 	uint32_t rrq_exchg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  950) #define rrq_oxid_SHIFT		16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  951) #define rrq_oxid_MASK		0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  952) #define rrq_oxid_WORD		rrq_exchg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  953) #define rrq_rxid_SHIFT		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  954) #define rrq_rxid_MASK		0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  955) #define rrq_rxid_WORD		rrq_exchg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  956) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  957) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  958) #define LPFC_MAX_VFN_PER_PFN	255 /* Maximum VFs allowed per ARI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  959) #define LPFC_DEF_VFN_PER_PFN	0   /* Default VFs due to platform limitation*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  960) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  961) struct RTV_RSP {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  962) 	uint32_t ratov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  963) 	uint32_t edtov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  964) 	uint32_t qtov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  965) #define qtov_rsvd0_SHIFT	28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  966) #define qtov_rsvd0_MASK		0x0000000f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  967) #define qtov_rsvd0_WORD		qtov		/* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  968) #define qtov_edtovres_SHIFT	27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  969) #define qtov_edtovres_MASK	0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  970) #define qtov_edtovres_WORD	qtov		/* E_D_TOV Resolution */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  971) #define qtov__rsvd1_SHIFT	19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  972) #define qtov_rsvd1_MASK		0x0000003f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  973) #define qtov_rsvd1_WORD		qtov		/* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  974) #define qtov_rttov_SHIFT	18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  975) #define qtov_rttov_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  976) #define qtov_rttov_WORD		qtov		/* R_T_TOV value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  977) #define qtov_rsvd2_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  978) #define qtov_rsvd2_MASK		0x0003ffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  979) #define qtov_rsvd2_WORD		qtov		/* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  980) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  981) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  982) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  983) typedef struct  _RPL {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  984) 	uint32_t maxsize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  985) 	uint32_t index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  986) } RPL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  987) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  988) typedef struct  _PORT_NUM_BLK {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  989) 	uint32_t portNum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  990) 	uint32_t portID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  991) 	struct lpfc_name portName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  992) } PORT_NUM_BLK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  993) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  994) typedef struct  _RPL_RSP {	/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  995) 	uint32_t listLen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  996) 	uint32_t index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  997) 	PORT_NUM_BLK port_num_blk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  998) } RPL_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  999) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) /* This is used for RSCN command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) typedef struct _D_ID {		/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) 		uint32_t word;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) 			uint8_t resv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) 			uint8_t domain;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) 			uint8_t area;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) 			uint8_t id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) 			uint8_t id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) 			uint8_t area;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) 			uint8_t domain;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) 			uint8_t resv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) 		} b;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) } D_ID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) #define RSCN_ADDRESS_FORMAT_PORT	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) #define RSCN_ADDRESS_FORMAT_AREA	0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) #define RSCN_ADDRESS_FORMAT_DOMAIN	0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) #define RSCN_ADDRESS_FORMAT_FABRIC	0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) #define RSCN_ADDRESS_FORMAT_MASK	0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027)  *  Structure to define all ELS Payload types
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) typedef struct _ELS_PKT {	/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) 	uint8_t elsCode;	/* FC Word 0, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) 	uint8_t elsByte1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) 	uint8_t elsByte2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) 	uint8_t elsByte3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) 		struct ls_rjt lsRjt;	/* Payload for LS_RJT ELS response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) 		struct serv_parm logi;	/* Payload for PLOGI/FLOGI/PDISC/ACC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) 		LOGO logo;	/* Payload for PLOGO/FLOGO/ACC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) 		PRLI prli;	/* Payload for PRLI/ACC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) 		PRLO prlo;	/* Payload for PRLO/ACC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) 		ADISC adisc;	/* Payload for ADISC/ACC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) 		FARP farp;	/* Payload for FARP/ACC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) 		FAN fan;	/* Payload for FAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) 		SCR scr;	/* Payload for SCR/ACC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) 		RNID rnid;	/* Payload for RNID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) 		uint8_t pad[128 - 4];	/* Pad out to payload of 128 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) } ELS_PKT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051)  * Link Cable Beacon (LCB) ELS Frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) struct fc_lcb_request_frame {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) 	uint32_t      lcb_command;      /* ELS command opcode (0x81)     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) 	uint8_t       lcb_sub_command;/* LCB Payload Word 1, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) #define LPFC_LCB_ON		0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) #define LPFC_LCB_OFF		0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) 	uint8_t       reserved[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) 	uint8_t	      capability;	/* LCB Payload Word 1, bit 0:7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) 	uint8_t       lcb_type; /* LCB Payload Word 2, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) #define LPFC_LCB_GREEN		0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) #define LPFC_LCB_AMBER		0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) 	uint8_t       lcb_frequency;    /* LCB Payload Word 2, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) #define LCB_CAPABILITY_DURATION	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) #define BEACON_VERSION_V1	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) #define BEACON_VERSION_V0	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) 	uint16_t      lcb_duration;     /* LCB Payload Word 2, bit 15:0  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072)  * Link Cable Beacon (LCB) ELS Response Frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) struct fc_lcb_res_frame {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) 	uint32_t      lcb_ls_acc;       /* Acceptance of LCB request (0x02) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) 	uint8_t       lcb_sub_command;/* LCB Payload Word 1, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) 	uint8_t       reserved[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) 	uint8_t	      capability;	/* LCB Payload Word 1, bit 0:7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) 	uint8_t       lcb_type; /* LCB Payload Word 2, bit 24:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) 	uint8_t       lcb_frequency;    /* LCB Payload Word 2, bit 16:23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) 	uint16_t      lcb_duration;     /* LCB Payload Word 2, bit 15:0  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085)  * Read Diagnostic Parameters (RDP) ELS frame.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) #define SFF_PG0_IDENT_SFP              0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) #define SFP_FLAG_PT_OPTICAL            0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) #define SFP_FLAG_PT_SWLASER            0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) #define SFP_FLAG_PT_LWLASER_LC1310     0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) #define SFP_FLAG_PT_LWLASER_LL1550     0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) #define SFP_FLAG_PT_MASK               0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) #define SFP_FLAG_PT_SHIFT              0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) #define SFP_FLAG_IS_OPTICAL_PORT       0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) #define SFP_FLAG_IS_OPTICAL_MASK       0x010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) #define SFP_FLAG_IS_OPTICAL_SHIFT      4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) #define SFP_FLAG_IS_DESC_VALID         0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) #define SFP_FLAG_IS_DESC_VALID_MASK    0x020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) #define SFP_FLAG_IS_DESC_VALID_SHIFT   5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) #define SFP_FLAG_CT_UNKNOWN            0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) #define SFP_FLAG_CT_SFP_PLUS           0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) #define SFP_FLAG_CT_MASK               0x3C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) #define SFP_FLAG_CT_SHIFT              6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) struct fc_rdp_port_name_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) 	uint8_t wwnn[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) 	uint8_t wwpn[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116)  * Link Error Status Block Structure (FC-FS-3) for RDP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117)  * This similar to RPS ELS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) struct fc_link_status {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) 	uint32_t      link_failure_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) 	uint32_t      loss_of_synch_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) 	uint32_t      loss_of_signal_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) 	uint32_t      primitive_seq_proto_err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) 	uint32_t      invalid_trans_word;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) 	uint32_t      invalid_crc_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) #define RDP_PORT_NAMES_DESC_TAG  0x00010003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) struct fc_rdp_port_name_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) 	uint32_t	tag;     /* 0001 0003h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) 	uint32_t	length;  /* set to size of payload struct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) 	struct fc_rdp_port_name_info  port_names;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) struct fc_rdp_fec_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) 	uint32_t CorrectedBlocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) 	uint32_t UncorrectableBlocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) #define RDP_FEC_DESC_TAG  0x00010005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) struct fc_fec_rdp_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) 	uint32_t tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) 	uint32_t length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) 	struct fc_rdp_fec_info info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) struct fc_rdp_link_error_status_payload_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) 	struct fc_link_status link_status; /* 24 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) 	uint32_t  port_type;             /* bits 31-30 only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) #define RDP_LINK_ERROR_STATUS_DESC_TAG  0x00010002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) struct fc_rdp_link_error_status_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) 	uint32_t         tag;     /* 0001 0002h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) 	uint32_t         length;  /* set to size of payload struct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) 	struct fc_rdp_link_error_status_payload_info info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) #define VN_PT_PHY_UNKNOWN      0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) #define VN_PT_PHY_PF_PORT      0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) #define VN_PT_PHY_ETH_MAC      0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) #define VN_PT_PHY_SHIFT                30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) #define RDP_PS_1GB             0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) #define RDP_PS_2GB             0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) #define RDP_PS_4GB             0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) #define RDP_PS_10GB            0x1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) #define RDP_PS_8GB             0x0800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) #define RDP_PS_16GB            0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) #define RDP_PS_32GB            0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) #define RDP_PS_64GB            0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) #define RDP_PS_128GB           0x0080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) #define RDP_PS_256GB           0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) #define RDP_CAP_USER_CONFIGURED 0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) #define RDP_CAP_UNKNOWN         0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) #define RDP_PS_UNKNOWN          0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) #define RDP_PS_NOT_ESTABLISHED  0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) struct fc_rdp_port_speed {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) 	uint16_t   capabilities;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) 	uint16_t   speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) struct fc_rdp_port_speed_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) 	struct fc_rdp_port_speed   port_speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) #define RDP_PORT_SPEED_DESC_TAG  0x00010001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) struct fc_rdp_port_speed_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) 	uint32_t         tag;            /* 00010001h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) 	uint32_t         length;         /* set to size of payload struct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) 	struct fc_rdp_port_speed_info info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) #define RDP_NPORT_ID_SIZE      4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) #define RDP_N_PORT_DESC_TAG    0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) struct fc_rdp_nport_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) 	uint32_t         tag;          /* 0000 0003h, big endian */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) 	uint32_t         length;       /* size of RDP_N_PORT_ID struct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) 	uint32_t         nport_id : 12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) 	uint32_t         reserved : 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) struct fc_rdp_link_service_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) 	uint32_t         els_req;    /* Request payload word 0 value.*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) #define RDP_LINK_SERVICE_DESC_TAG  0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) struct fc_rdp_link_service_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) 	uint32_t         tag;     /* Descriptor tag  1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) 	uint32_t         length;  /* set to size of payload struct. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) 	struct fc_rdp_link_service_info  payload;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) 				  /* must be ELS req Word 0(0x18) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) struct fc_rdp_sfp_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) 	uint16_t	temperature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) 	uint16_t	vcc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) 	uint16_t	tx_bias;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) 	uint16_t	tx_power;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) 	uint16_t	rx_power;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) 	uint16_t	flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) #define RDP_SFP_DESC_TAG  0x00010000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) struct fc_rdp_sfp_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) 	uint32_t         tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) 	uint32_t         length;  /* set to size of sfp_info struct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) 	struct fc_rdp_sfp_info sfp_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) /* Buffer Credit Descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) struct fc_rdp_bbc_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) 	uint32_t              port_bbc; /* FC_Port buffer-to-buffer credit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) 	uint32_t              attached_port_bbc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) 	uint32_t              rtt;      /* Round trip time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) #define RDP_BBC_DESC_TAG  0x00010006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) struct fc_rdp_bbc_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) 	uint32_t              tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) 	uint32_t              length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) 	struct fc_rdp_bbc_info  bbc_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) /* Optical Element Type Transgression Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) #define RDP_OET_LOW_WARNING  0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) #define RDP_OET_HIGH_WARNING 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) #define RDP_OET_LOW_ALARM    0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) #define RDP_OET_HIGH_ALARM   0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) #define RDP_OED_TEMPERATURE  0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) #define RDP_OED_VOLTAGE      0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) #define RDP_OED_TXBIAS       0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) #define RDP_OED_TXPOWER      0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) #define RDP_OED_RXPOWER      0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) #define RDP_OED_TYPE_SHIFT   28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) /* Optical Element Data descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) struct fc_rdp_oed_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) 	uint16_t            hi_alarm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) 	uint16_t            lo_alarm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) 	uint16_t            hi_warning;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) 	uint16_t            lo_warning;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) 	uint32_t            function_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) #define RDP_OED_DESC_TAG  0x00010007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) struct fc_rdp_oed_sfp_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) 	uint32_t             tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) 	uint32_t             length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) 	struct fc_rdp_oed_info oed_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) /* Optical Product Data descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) struct fc_rdp_opd_sfp_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) 	uint8_t            vendor_name[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) 	uint8_t            model_number[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) 	uint8_t            serial_number[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) 	uint8_t            revision[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) 	uint8_t            date[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) #define RDP_OPD_DESC_TAG  0x00010008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) struct fc_rdp_opd_sfp_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) 	uint32_t             tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) 	uint32_t             length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) 	struct fc_rdp_opd_sfp_info opd_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) struct fc_rdp_req_frame {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) 	uint32_t         rdp_command;           /* ELS command opcode (0x18)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) 	uint32_t         rdp_des_length;        /* RDP Payload Word 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) 	struct fc_rdp_nport_desc nport_id_desc; /* RDP Payload Word 2 - 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) struct fc_rdp_res_frame {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) 	uint32_t    reply_sequence;		/* FC word0 LS_ACC or LS_RJT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) 	uint32_t   length;			/* FC Word 1      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) 	struct fc_rdp_link_service_desc link_service_desc;    /* Word 2 -4   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) 	struct fc_rdp_sfp_desc sfp_desc;                      /* Word 5 -9   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) 	struct fc_rdp_port_speed_desc portspeed_desc;         /* Word 10 -12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) 	struct fc_rdp_link_error_status_desc link_error_desc; /* Word 13 -21 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) 	struct fc_rdp_port_name_desc diag_port_names_desc;    /* Word 22 -27 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) 	struct fc_rdp_port_name_desc attached_port_names_desc;/* Word 28 -33 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) 	struct fc_fec_rdp_desc fec_desc;                      /* FC word 34-37*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) 	struct fc_rdp_bbc_desc bbc_desc;                      /* FC Word 38-42*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) 	struct fc_rdp_oed_sfp_desc oed_temp_desc;             /* FC Word 43-47*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) 	struct fc_rdp_oed_sfp_desc oed_voltage_desc;          /* FC word 48-52*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) 	struct fc_rdp_oed_sfp_desc oed_txbias_desc;           /* FC word 53-57*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) 	struct fc_rdp_oed_sfp_desc oed_txpower_desc;          /* FC word 58-62*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) 	struct fc_rdp_oed_sfp_desc oed_rxpower_desc;          /* FC word 63-67*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) 	struct fc_rdp_opd_sfp_desc opd_desc;                  /* FC word 68-84*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) /******** FDMI ********/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) /* lpfc_sli_ct_request defines the CT_IU preamble for FDMI commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) #define  SLI_CT_FDMI_Subtypes     0x10	/* Management Service Subtype */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) /* Definitions for HBA / Port attribute entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) /* Attribute Entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) struct lpfc_fdmi_attr_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) 		uint32_t AttrInt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) 		uint8_t  AttrTypes[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) 		uint8_t  AttrString[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) 		struct lpfc_name AttrWWN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) struct lpfc_fdmi_attr_def { /* Defined in TLV format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) 	/* Structure is in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) 	uint32_t AttrType:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) 	uint32_t AttrLen:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) 	/* Marks start of Value (ATTRIBUTE_ENTRY) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) 	struct lpfc_fdmi_attr_entry AttrValue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346)  * HBA Attribute Block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) struct lpfc_fdmi_attr_block {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) 	uint32_t EntryCnt;		/* Number of HBA attribute entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) 	struct lpfc_fdmi_attr_entry Entry;	/* Variable-length array */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354)  * Port Entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) struct lpfc_fdmi_port_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357) 	struct lpfc_name PortName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361)  * HBA Identifier
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) struct lpfc_fdmi_hba_ident {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) 	struct lpfc_name PortName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368)  * Registered Port List Format
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) struct lpfc_fdmi_reg_port_list {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) 	uint32_t EntryCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) 	struct lpfc_fdmi_port_entry pe;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376)  * Register HBA(RHBA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) struct lpfc_fdmi_reg_hba {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) 	struct lpfc_fdmi_hba_ident hi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) 	struct lpfc_fdmi_reg_port_list rpl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384)  * Register HBA Attributes (RHAT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) struct lpfc_fdmi_reg_hbaattr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) 	struct lpfc_name HBA_PortName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) 	struct lpfc_fdmi_attr_block ab;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392)  * Register Port Attributes (RPA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) struct lpfc_fdmi_reg_portattr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) 	struct lpfc_name PortName;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) 	struct lpfc_fdmi_attr_block ab;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400)  * HBA MAnagement Operations Command Codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) #define  SLI_MGMT_GRHL     0x100	/* Get registered HBA list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) #define  SLI_MGMT_GHAT     0x101	/* Get HBA attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) #define  SLI_MGMT_GRPL     0x102	/* Get registered Port list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) #define  SLI_MGMT_GPAT     0x110	/* Get Port attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) #define  SLI_MGMT_GPAS     0x120	/* Get Port Statistics */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) #define  SLI_MGMT_RHBA     0x200	/* Register HBA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) #define  SLI_MGMT_RHAT     0x201	/* Register HBA attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) #define  SLI_MGMT_RPRT     0x210	/* Register Port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) #define  SLI_MGMT_RPA      0x211	/* Register Port attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) #define  SLI_MGMT_DHBA     0x300	/* De-register HBA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) #define  SLI_MGMT_DHAT     0x301	/* De-register HBA attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) #define  SLI_MGMT_DPRT     0x310	/* De-register Port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) #define  SLI_MGMT_DPA      0x311	/* De-register Port attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) #define LPFC_FDMI_MAX_RETRY     3  /* Max retries for a FDMI command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419)  * HBA Attribute Types
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) #define  RHBA_NODENAME           0x1 /* 8 byte WWNN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) #define  RHBA_MANUFACTURER       0x2 /* 4 to 64 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) #define  RHBA_SERIAL_NUMBER      0x3 /* 4 to 64 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) #define  RHBA_MODEL              0x4 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) #define  RHBA_MODEL_DESCRIPTION  0x5 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) #define  RHBA_HARDWARE_VERSION   0x6 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) #define  RHBA_DRIVER_VERSION     0x7 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) #define  RHBA_OPTION_ROM_VERSION 0x8 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) #define  RHBA_FIRMWARE_VERSION   0x9 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) #define  RHBA_OS_NAME_VERSION	 0xa /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) #define  RHBA_MAX_CT_PAYLOAD_LEN 0xb /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) #define  RHBA_SYM_NODENAME       0xc /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) #define  RHBA_VENDOR_INFO        0xd  /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) #define  RHBA_NUM_PORTS          0xe  /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) #define  RHBA_FABRIC_WWNN        0xf  /* 8 byte WWNN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) #define  RHBA_BIOS_VERSION       0x10 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) #define  RHBA_BIOS_STATE         0x11 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) #define  RHBA_VENDOR_ID          0xe0 /* 8 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) /* Bit mask for all individual HBA attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) #define LPFC_FDMI_HBA_ATTR_wwnn			0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) #define LPFC_FDMI_HBA_ATTR_manufacturer		0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) #define LPFC_FDMI_HBA_ATTR_sn			0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) #define LPFC_FDMI_HBA_ATTR_model		0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) #define LPFC_FDMI_HBA_ATTR_description		0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) #define LPFC_FDMI_HBA_ATTR_hdw_ver		0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) #define LPFC_FDMI_HBA_ATTR_drvr_ver		0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) #define LPFC_FDMI_HBA_ATTR_rom_ver		0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) #define LPFC_FDMI_HBA_ATTR_fmw_ver		0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450) #define LPFC_FDMI_HBA_ATTR_os_ver		0x00000200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) #define LPFC_FDMI_HBA_ATTR_ct_len		0x00000400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) #define LPFC_FDMI_HBA_ATTR_symbolic_name	0x00000800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) #define LPFC_FDMI_HBA_ATTR_vendor_info		0x00001000 /* Not used */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) #define LPFC_FDMI_HBA_ATTR_num_ports		0x00002000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) #define LPFC_FDMI_HBA_ATTR_fabric_wwnn		0x00004000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) #define LPFC_FDMI_HBA_ATTR_bios_ver		0x00008000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) #define LPFC_FDMI_HBA_ATTR_bios_state		0x00010000 /* Not used */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) #define LPFC_FDMI_HBA_ATTR_vendor_id		0x00020000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) /* Bit mask for FDMI-1 defined HBA attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) #define LPFC_FDMI1_HBA_ATTR			0x000007ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) /* Bit mask for FDMI-2 defined HBA attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) /* Skip vendor_info and bios_state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) #define LPFC_FDMI2_HBA_ATTR			0x0002efff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468)  * Port Attrubute Types
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) #define  RPRT_SUPPORTED_FC4_TYPES     0x1 /* 32 byte binary array */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) #define  RPRT_SUPPORTED_SPEED         0x2 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) #define  RPRT_PORT_SPEED              0x3 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) #define  RPRT_MAX_FRAME_SIZE          0x4 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) #define  RPRT_OS_DEVICE_NAME          0x5 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) #define  RPRT_HOST_NAME               0x6 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) #define  RPRT_NODENAME                0x7 /* 8 byte WWNN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) #define  RPRT_PORTNAME                0x8 /* 8 byte WWPN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) #define  RPRT_SYM_PORTNAME            0x9 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) #define  RPRT_PORT_TYPE               0xa /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480) #define  RPRT_SUPPORTED_CLASS         0xb /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) #define  RPRT_FABRICNAME              0xc /* 8 byte Fabric WWPN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) #define  RPRT_ACTIVE_FC4_TYPES        0xd /* 32 byte binary array */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) #define  RPRT_PORT_STATE              0x101 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) #define  RPRT_DISC_PORT               0x102 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) #define  RPRT_PORT_ID                 0x103 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486) #define  RPRT_SMART_SERVICE           0xf100 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) #define  RPRT_SMART_GUID              0xf101 /* 8 byte WWNN + 8 byte WWPN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) #define  RPRT_SMART_VERSION           0xf102 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) #define  RPRT_SMART_MODEL             0xf103 /* 4 to 256 byte ASCII string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) #define  RPRT_SMART_PORT_INFO         0xf104 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) #define  RPRT_SMART_QOS               0xf105 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) #define  RPRT_SMART_SECURITY          0xf106 /* 32-bit unsigned int */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) /* Bit mask for all individual PORT attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) #define LPFC_FDMI_PORT_ATTR_fc4type		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) #define LPFC_FDMI_PORT_ATTR_support_speed	0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) #define LPFC_FDMI_PORT_ATTR_speed		0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) #define LPFC_FDMI_PORT_ATTR_max_frame		0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) #define LPFC_FDMI_PORT_ATTR_os_devname		0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) #define LPFC_FDMI_PORT_ATTR_host_name		0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) #define LPFC_FDMI_PORT_ATTR_wwnn		0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) #define LPFC_FDMI_PORT_ATTR_wwpn		0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) #define LPFC_FDMI_PORT_ATTR_symbolic_name	0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) #define LPFC_FDMI_PORT_ATTR_port_type		0x00000200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) #define LPFC_FDMI_PORT_ATTR_class		0x00000400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) #define LPFC_FDMI_PORT_ATTR_fabric_wwpn		0x00000800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) #define LPFC_FDMI_PORT_ATTR_port_state		0x00001000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) #define LPFC_FDMI_PORT_ATTR_active_fc4type	0x00002000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) #define LPFC_FDMI_PORT_ATTR_num_disc		0x00004000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) #define LPFC_FDMI_PORT_ATTR_nportid		0x00008000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) #define LPFC_FDMI_SMART_ATTR_service		0x00010000 /* Vendor specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) #define LPFC_FDMI_SMART_ATTR_guid		0x00020000 /* Vendor specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) #define LPFC_FDMI_SMART_ATTR_version		0x00040000 /* Vendor specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) #define LPFC_FDMI_SMART_ATTR_model		0x00080000 /* Vendor specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) #define LPFC_FDMI_SMART_ATTR_port_info		0x00100000 /* Vendor specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) #define LPFC_FDMI_SMART_ATTR_qos		0x00200000 /* Vendor specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) #define LPFC_FDMI_SMART_ATTR_security		0x00400000 /* Vendor specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) /* Bit mask for FDMI-1 defined PORT attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) #define LPFC_FDMI1_PORT_ATTR			0x0000003f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) /* Bit mask for FDMI-2 defined PORT attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) #define LPFC_FDMI2_PORT_ATTR			0x0000ffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) /* Bit mask for Smart SAN defined PORT attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) #define LPFC_FDMI2_SMART_ATTR			0x007fffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) /* Defines for PORT port state attribute */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) #define LPFC_FDMI_PORTSTATE_UNKNOWN	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) #define LPFC_FDMI_PORTSTATE_ONLINE	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532) /* Defines for PORT port type attribute */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) #define LPFC_FDMI_PORTTYPE_UNKNOWN	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) #define LPFC_FDMI_PORTTYPE_NPORT	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) #define LPFC_FDMI_PORTTYPE_NLPORT	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538)  *  Begin HBA configuration parameters.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539)  *  The PCI configuration register BAR assignments are:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540)  *  BAR0, offset 0x10 - SLIM base memory address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541)  *  BAR1, offset 0x14 - SLIM base memory high address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542)  *  BAR2, offset 0x18 - REGISTER base memory address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543)  *  BAR3, offset 0x1c - REGISTER base memory high address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544)  *  BAR4, offset 0x20 - BIU I/O registers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1545)  *  BAR5, offset 0x24 - REGISTER base io high address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1546)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1547) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1548) /* Number of rings currently used and available. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1549) #define MAX_SLI3_CONFIGURED_RINGS     3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1550) #define MAX_SLI3_RINGS                4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1551) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1552) /* IOCB / Mailbox is owned by FireFly */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1553) #define OWN_CHIP        1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1554) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1555) /* IOCB / Mailbox is owned by Host */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1556) #define OWN_HOST        0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1557) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1558) /* Number of 4-byte words in an IOCB. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1559) #define IOCB_WORD_SZ    8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1560) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1561) /* network headers for Dfctl field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1562) #define FC_NET_HDR      0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1563) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1564) /* Start FireFly Register definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1565) #define PCI_VENDOR_ID_EMULEX        0x10df
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1566) #define PCI_DEVICE_ID_FIREFLY       0x1ae5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1567) #define PCI_DEVICE_ID_PROTEUS_VF    0xe100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1568) #define PCI_DEVICE_ID_BALIUS        0xe131
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1569) #define PCI_DEVICE_ID_PROTEUS_PF    0xe180
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1570) #define PCI_DEVICE_ID_LANCER_FC     0xe200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1571) #define PCI_DEVICE_ID_LANCER_FC_VF  0xe208
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1572) #define PCI_DEVICE_ID_LANCER_FCOE   0xe260
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1573) #define PCI_DEVICE_ID_LANCER_FCOE_VF 0xe268
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1574) #define PCI_DEVICE_ID_LANCER_G6_FC  0xe300
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1575) #define PCI_DEVICE_ID_LANCER_G7_FC  0xf400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1576) #define PCI_DEVICE_ID_SAT_SMB       0xf011
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1577) #define PCI_DEVICE_ID_SAT_MID       0xf015
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1578) #define PCI_DEVICE_ID_RFLY          0xf095
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1579) #define PCI_DEVICE_ID_PFLY          0xf098
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1580) #define PCI_DEVICE_ID_LP101         0xf0a1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1581) #define PCI_DEVICE_ID_TFLY          0xf0a5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1582) #define PCI_DEVICE_ID_BSMB          0xf0d1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1583) #define PCI_DEVICE_ID_BMID          0xf0d5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1584) #define PCI_DEVICE_ID_ZSMB          0xf0e1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1585) #define PCI_DEVICE_ID_ZMID          0xf0e5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1586) #define PCI_DEVICE_ID_NEPTUNE       0xf0f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1587) #define PCI_DEVICE_ID_NEPTUNE_SCSP  0xf0f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1588) #define PCI_DEVICE_ID_NEPTUNE_DCSP  0xf0f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1589) #define PCI_DEVICE_ID_SAT           0xf100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1590) #define PCI_DEVICE_ID_SAT_SCSP      0xf111
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1591) #define PCI_DEVICE_ID_SAT_DCSP      0xf112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1592) #define PCI_DEVICE_ID_FALCON        0xf180
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1593) #define PCI_DEVICE_ID_SUPERFLY      0xf700
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1594) #define PCI_DEVICE_ID_DRAGONFLY     0xf800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1595) #define PCI_DEVICE_ID_CENTAUR       0xf900
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1596) #define PCI_DEVICE_ID_PEGASUS       0xf980
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1597) #define PCI_DEVICE_ID_THOR          0xfa00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1598) #define PCI_DEVICE_ID_VIPER         0xfb00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1599) #define PCI_DEVICE_ID_LP10000S      0xfc00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1600) #define PCI_DEVICE_ID_LP11000S      0xfc10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1601) #define PCI_DEVICE_ID_LPE11000S     0xfc20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1602) #define PCI_DEVICE_ID_SAT_S         0xfc40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1603) #define PCI_DEVICE_ID_PROTEUS_S     0xfc50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1604) #define PCI_DEVICE_ID_HELIOS        0xfd00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1605) #define PCI_DEVICE_ID_HELIOS_SCSP   0xfd11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1606) #define PCI_DEVICE_ID_HELIOS_DCSP   0xfd12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1607) #define PCI_DEVICE_ID_ZEPHYR        0xfe00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1608) #define PCI_DEVICE_ID_HORNET        0xfe05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1609) #define PCI_DEVICE_ID_ZEPHYR_SCSP   0xfe11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1610) #define PCI_DEVICE_ID_ZEPHYR_DCSP   0xfe12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1611) #define PCI_VENDOR_ID_SERVERENGINE  0x19a2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1612) #define PCI_DEVICE_ID_TIGERSHARK    0x0704
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1613) #define PCI_DEVICE_ID_TOMCAT        0x0714
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1614) #define PCI_DEVICE_ID_SKYHAWK       0x0724
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1615) #define PCI_DEVICE_ID_SKYHAWK_VF    0x072c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1616) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1617) #define JEDEC_ID_ADDRESS            0x0080001c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1618) #define FIREFLY_JEDEC_ID            0x1ACC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1619) #define SUPERFLY_JEDEC_ID           0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1620) #define DRAGONFLY_JEDEC_ID          0x0021
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1621) #define DRAGONFLY_V2_JEDEC_ID       0x0025
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1622) #define CENTAUR_2G_JEDEC_ID         0x0026
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1623) #define CENTAUR_1G_JEDEC_ID         0x0028
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1624) #define PEGASUS_ORION_JEDEC_ID      0x0036
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1625) #define PEGASUS_JEDEC_ID            0x0038
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1626) #define THOR_JEDEC_ID               0x0012
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1627) #define HELIOS_JEDEC_ID             0x0364
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1628) #define ZEPHYR_JEDEC_ID             0x0577
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1629) #define VIPER_JEDEC_ID              0x4838
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1630) #define SATURN_JEDEC_ID             0x1004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1631) #define HORNET_JDEC_ID              0x2057706D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1632) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1633) #define JEDEC_ID_MASK               0x0FFFF000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1634) #define JEDEC_ID_SHIFT              12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1635) #define FC_JEDEC_ID(id)             ((id & JEDEC_ID_MASK) >> JEDEC_ID_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1636) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1637) typedef struct {		/* FireFly BIU registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1638) 	uint32_t hostAtt;	/* See definitions for Host Attention
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1639) 				   register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1640) 	uint32_t chipAtt;	/* See definitions for Chip Attention
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1641) 				   register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1642) 	uint32_t hostStatus;	/* See definitions for Host Status register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1643) 	uint32_t hostControl;	/* See definitions for Host Control register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1644) 	uint32_t buiConfig;	/* See definitions for BIU configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1645) 				   register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1646) } FF_REGS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1647) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1648) /* IO Register size in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1649) #define FF_REG_AREA_SIZE       256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1650) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1651) /* Host Attention Register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1652) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1653) #define HA_REG_OFFSET  0	/* Byte offset from register base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1654) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1655) #define HA_R0RE_REQ    0x00000001	/* Bit  0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1656) #define HA_R0CE_RSP    0x00000002	/* Bit  1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1657) #define HA_R0ATT       0x00000008	/* Bit  3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1658) #define HA_R1RE_REQ    0x00000010	/* Bit  4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1659) #define HA_R1CE_RSP    0x00000020	/* Bit  5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1660) #define HA_R1ATT       0x00000080	/* Bit  7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1661) #define HA_R2RE_REQ    0x00000100	/* Bit  8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1662) #define HA_R2CE_RSP    0x00000200	/* Bit  9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1663) #define HA_R2ATT       0x00000800	/* Bit 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1664) #define HA_R3RE_REQ    0x00001000	/* Bit 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1665) #define HA_R3CE_RSP    0x00002000	/* Bit 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1666) #define HA_R3ATT       0x00008000	/* Bit 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1667) #define HA_LATT        0x20000000	/* Bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1668) #define HA_MBATT       0x40000000	/* Bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1669) #define HA_ERATT       0x80000000	/* Bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1670) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1671) #define HA_RXRE_REQ    0x00000001	/* Bit  0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1672) #define HA_RXCE_RSP    0x00000002	/* Bit  1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1673) #define HA_RXATT       0x00000008	/* Bit  3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1674) #define HA_RXMASK      0x0000000f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1676) #define HA_R0_CLR_MSK	(HA_R0RE_REQ | HA_R0CE_RSP | HA_R0ATT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1677) #define HA_R1_CLR_MSK	(HA_R1RE_REQ | HA_R1CE_RSP | HA_R1ATT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1678) #define HA_R2_CLR_MSK	(HA_R2RE_REQ | HA_R2CE_RSP | HA_R2ATT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1679) #define HA_R3_CLR_MSK	(HA_R3RE_REQ | HA_R3CE_RSP | HA_R3ATT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1680) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1681) #define HA_R0_POS	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1682) #define HA_R1_POS	7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1683) #define HA_R2_POS	11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1684) #define HA_R3_POS	15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1685) #define HA_LE_POS	29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1686) #define HA_MB_POS	30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1687) #define HA_ER_POS	31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1688) /* Chip Attention Register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1689) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1690) #define CA_REG_OFFSET  4	/* Byte offset from register base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1691) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1692) #define CA_R0CE_REQ    0x00000001	/* Bit  0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1693) #define CA_R0RE_RSP    0x00000002	/* Bit  1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1694) #define CA_R0ATT       0x00000008	/* Bit  3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1695) #define CA_R1CE_REQ    0x00000010	/* Bit  4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1696) #define CA_R1RE_RSP    0x00000020	/* Bit  5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1697) #define CA_R1ATT       0x00000080	/* Bit  7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1698) #define CA_R2CE_REQ    0x00000100	/* Bit  8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1699) #define CA_R2RE_RSP    0x00000200	/* Bit  9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1700) #define CA_R2ATT       0x00000800	/* Bit 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1701) #define CA_R3CE_REQ    0x00001000	/* Bit 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1702) #define CA_R3RE_RSP    0x00002000	/* Bit 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1703) #define CA_R3ATT       0x00008000	/* Bit 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1704) #define CA_MBATT       0x40000000	/* Bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1705) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1706) /* Host Status Register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1707) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1708) #define HS_REG_OFFSET  8	/* Byte offset from register base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1709) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1710) #define HS_MBRDY       0x00400000	/* Bit 22 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1711) #define HS_FFRDY       0x00800000	/* Bit 23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1712) #define HS_FFER8       0x01000000	/* Bit 24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1713) #define HS_FFER7       0x02000000	/* Bit 25 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1714) #define HS_FFER6       0x04000000	/* Bit 26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1715) #define HS_FFER5       0x08000000	/* Bit 27 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1716) #define HS_FFER4       0x10000000	/* Bit 28 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1717) #define HS_FFER3       0x20000000	/* Bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1718) #define HS_FFER2       0x40000000	/* Bit 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1719) #define HS_FFER1       0x80000000	/* Bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1720) #define HS_CRIT_TEMP   0x00000100	/* Bit 8  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1721) #define HS_FFERM       0xFF000100	/* Mask for error bits 31:24 and 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1722) #define UNPLUG_ERR     0x00000001	/* Indicate pci hot unplug */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1723) /* Host Control Register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1724) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1725) #define HC_REG_OFFSET  12	/* Byte offset from register base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1726) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1727) #define HC_MBINT_ENA   0x00000001	/* Bit  0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1728) #define HC_R0INT_ENA   0x00000002	/* Bit  1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1729) #define HC_R1INT_ENA   0x00000004	/* Bit  2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1730) #define HC_R2INT_ENA   0x00000008	/* Bit  3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1731) #define HC_R3INT_ENA   0x00000010	/* Bit  4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1732) #define HC_INITHBI     0x02000000	/* Bit 25 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1733) #define HC_INITMB      0x04000000	/* Bit 26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1734) #define HC_INITFF      0x08000000	/* Bit 27 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1735) #define HC_LAINT_ENA   0x20000000	/* Bit 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1736) #define HC_ERINT_ENA   0x80000000	/* Bit 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1737) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1738) /* Message Signaled Interrupt eXtension (MSI-X) message identifiers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1739) #define MSIX_DFLT_ID	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1740) #define MSIX_RNG0_ID	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1741) #define MSIX_RNG1_ID	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1742) #define MSIX_RNG2_ID	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1743) #define MSIX_RNG3_ID	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1744) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1745) #define MSIX_LINK_ID	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1746) #define MSIX_MBOX_ID	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1747) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1748) #define MSIX_SPARE0_ID	6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1749) #define MSIX_SPARE1_ID	7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1750) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1751) /* Mailbox Commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1752) #define MBX_SHUTDOWN        0x00	/* terminate testing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1753) #define MBX_LOAD_SM         0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1754) #define MBX_READ_NV         0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1755) #define MBX_WRITE_NV        0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1756) #define MBX_RUN_BIU_DIAG    0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1757) #define MBX_INIT_LINK       0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1758) #define MBX_DOWN_LINK       0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1759) #define MBX_CONFIG_LINK     0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1760) #define MBX_CONFIG_RING     0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1761) #define MBX_RESET_RING      0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1762) #define MBX_READ_CONFIG     0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1763) #define MBX_READ_RCONFIG    0x0C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1764) #define MBX_READ_SPARM      0x0D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1765) #define MBX_READ_STATUS     0x0E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1766) #define MBX_READ_RPI        0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1767) #define MBX_READ_XRI        0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1768) #define MBX_READ_REV        0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1769) #define MBX_READ_LNK_STAT   0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1770) #define MBX_REG_LOGIN       0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1771) #define MBX_UNREG_LOGIN     0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1772) #define MBX_CLEAR_LA        0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1773) #define MBX_DUMP_MEMORY     0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1774) #define MBX_DUMP_CONTEXT    0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1775) #define MBX_RUN_DIAGS       0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1776) #define MBX_RESTART         0x1A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1777) #define MBX_UPDATE_CFG      0x1B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1778) #define MBX_DOWN_LOAD       0x1C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1779) #define MBX_DEL_LD_ENTRY    0x1D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1780) #define MBX_RUN_PROGRAM     0x1E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1781) #define MBX_SET_MASK        0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1782) #define MBX_SET_VARIABLE    0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1783) #define MBX_UNREG_D_ID      0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1784) #define MBX_KILL_BOARD      0x24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1785) #define MBX_CONFIG_FARP     0x25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1786) #define MBX_BEACON          0x2A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1787) #define MBX_CONFIG_MSI      0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1788) #define MBX_HEARTBEAT       0x31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1789) #define MBX_WRITE_VPARMS    0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1790) #define MBX_ASYNCEVT_ENABLE 0x33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1791) #define MBX_READ_EVENT_LOG_STATUS 0x37
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1792) #define MBX_READ_EVENT_LOG  0x38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1793) #define MBX_WRITE_EVENT_LOG 0x39
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1794) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1795) #define MBX_PORT_CAPABILITIES 0x3B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1796) #define MBX_PORT_IOV_CONTROL 0x3C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1797) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1798) #define MBX_CONFIG_HBQ	    0x7C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1799) #define MBX_LOAD_AREA       0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1800) #define MBX_RUN_BIU_DIAG64  0x84
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1801) #define MBX_CONFIG_PORT     0x88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1802) #define MBX_READ_SPARM64    0x8D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1803) #define MBX_READ_RPI64      0x8F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1804) #define MBX_REG_LOGIN64     0x93
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1805) #define MBX_READ_TOPOLOGY   0x95
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1806) #define MBX_REG_VPI	    0x96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1807) #define MBX_UNREG_VPI	    0x97
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1808) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1809) #define MBX_WRITE_WWN       0x98
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1810) #define MBX_SET_DEBUG       0x99
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1811) #define MBX_LOAD_EXP_ROM    0x9C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1812) #define MBX_SLI4_CONFIG	    0x9B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1813) #define MBX_SLI4_REQ_FTRS   0x9D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1814) #define MBX_MAX_CMDS        0x9E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1815) #define MBX_RESUME_RPI      0x9E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1816) #define MBX_SLI2_CMD_MASK   0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1817) #define MBX_REG_VFI         0x9F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1818) #define MBX_REG_FCFI        0xA0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1819) #define MBX_UNREG_VFI       0xA1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1820) #define MBX_UNREG_FCFI	    0xA2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1821) #define MBX_INIT_VFI        0xA3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1822) #define MBX_INIT_VPI        0xA4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1823) #define MBX_ACCESS_VDATA    0xA5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1824) #define MBX_REG_FCFI_MRQ    0xAF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1825) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1826) #define MBX_AUTH_PORT       0xF8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1827) #define MBX_SECURITY_MGMT   0xF9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1828) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1829) /* IOCB Commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1830) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1831) #define CMD_RCV_SEQUENCE_CX     0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1832) #define CMD_XMIT_SEQUENCE_CR    0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1833) #define CMD_XMIT_SEQUENCE_CX    0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1834) #define CMD_XMIT_BCAST_CN       0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1835) #define CMD_XMIT_BCAST_CX       0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1836) #define CMD_QUE_RING_BUF_CN     0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1837) #define CMD_QUE_XRI_BUF_CX      0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1838) #define CMD_IOCB_CONTINUE_CN    0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1839) #define CMD_RET_XRI_BUF_CX      0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1840) #define CMD_ELS_REQUEST_CR      0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1841) #define CMD_ELS_REQUEST_CX      0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1842) #define CMD_RCV_ELS_REQ_CX      0x0D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1843) #define CMD_ABORT_XRI_CN        0x0E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1844) #define CMD_ABORT_XRI_CX        0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1845) #define CMD_CLOSE_XRI_CN        0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1846) #define CMD_CLOSE_XRI_CX        0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1847) #define CMD_CREATE_XRI_CR       0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1848) #define CMD_CREATE_XRI_CX       0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1849) #define CMD_GET_RPI_CN          0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1850) #define CMD_XMIT_ELS_RSP_CX     0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1851) #define CMD_GET_RPI_CR          0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1852) #define CMD_XRI_ABORTED_CX      0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1853) #define CMD_FCP_IWRITE_CR       0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1854) #define CMD_FCP_IWRITE_CX       0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1855) #define CMD_FCP_IREAD_CR        0x1A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1856) #define CMD_FCP_IREAD_CX        0x1B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1857) #define CMD_FCP_ICMND_CR        0x1C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1858) #define CMD_FCP_ICMND_CX        0x1D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1859) #define CMD_FCP_TSEND_CX        0x1F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1860) #define CMD_FCP_TRECEIVE_CX     0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1861) #define CMD_FCP_TRSP_CX	        0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1862) #define CMD_FCP_AUTO_TRSP_CX    0x29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1863) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1864) #define CMD_ADAPTER_MSG         0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1865) #define CMD_ADAPTER_DUMP        0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1866) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1867) /*  SLI_2 IOCB Command Set */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1868) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1869) #define CMD_ASYNC_STATUS        0x7C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1870) #define CMD_RCV_SEQUENCE64_CX   0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1871) #define CMD_XMIT_SEQUENCE64_CR  0x82
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1872) #define CMD_XMIT_SEQUENCE64_CX  0x83
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1873) #define CMD_XMIT_BCAST64_CN     0x84
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1874) #define CMD_XMIT_BCAST64_CX     0x85
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1875) #define CMD_QUE_RING_BUF64_CN   0x86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1876) #define CMD_QUE_XRI_BUF64_CX    0x87
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1877) #define CMD_IOCB_CONTINUE64_CN  0x88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1878) #define CMD_RET_XRI_BUF64_CX    0x89
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1879) #define CMD_ELS_REQUEST64_CR    0x8A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1880) #define CMD_ELS_REQUEST64_CX    0x8B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1881) #define CMD_ABORT_MXRI64_CN     0x8C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1882) #define CMD_RCV_ELS_REQ64_CX    0x8D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1883) #define CMD_XMIT_ELS_RSP64_CX   0x95
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1884) #define CMD_XMIT_BLS_RSP64_CX   0x97
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1885) #define CMD_FCP_IWRITE64_CR     0x98
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1886) #define CMD_FCP_IWRITE64_CX     0x99
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1887) #define CMD_FCP_IREAD64_CR      0x9A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1888) #define CMD_FCP_IREAD64_CX      0x9B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1889) #define CMD_FCP_ICMND64_CR      0x9C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1890) #define CMD_FCP_ICMND64_CX      0x9D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1891) #define CMD_FCP_TSEND64_CX      0x9F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1892) #define CMD_FCP_TRECEIVE64_CX   0xA1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1893) #define CMD_FCP_TRSP64_CX       0xA3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1894) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1895) #define CMD_QUE_XRI64_CX	0xB3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1896) #define CMD_IOCB_RCV_SEQ64_CX	0xB5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1897) #define CMD_IOCB_RCV_ELS64_CX	0xB7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1898) #define CMD_IOCB_RET_XRI64_CX	0xB9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1899) #define CMD_IOCB_RCV_CONT64_CX	0xBB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1900) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1901) #define CMD_GEN_REQUEST64_CR    0xC2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1902) #define CMD_GEN_REQUEST64_CX    0xC3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1903) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1904) /* Unhandled SLI-3 Commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1905) #define CMD_IOCB_XMIT_MSEQ64_CR		0xB0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1906) #define CMD_IOCB_XMIT_MSEQ64_CX		0xB1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1907) #define CMD_IOCB_RCV_SEQ_LIST64_CX	0xC1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1908) #define CMD_IOCB_RCV_ELS_LIST64_CX	0xCD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1909) #define CMD_IOCB_CLOSE_EXTENDED_CN	0xB6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1910) #define CMD_IOCB_ABORT_EXTENDED_CN	0xBA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1911) #define CMD_IOCB_RET_HBQE64_CN		0xCA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1912) #define CMD_IOCB_FCP_IBIDIR64_CR	0xAC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1913) #define CMD_IOCB_FCP_IBIDIR64_CX	0xAD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1914) #define CMD_IOCB_FCP_ITASKMGT64_CX	0xAF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1915) #define CMD_IOCB_LOGENTRY_CN		0x94
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1916) #define CMD_IOCB_LOGENTRY_ASYNC_CN	0x96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1917) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1918) /* Data Security SLI Commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1919) #define DSSCMD_IWRITE64_CR		0xF8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1920) #define DSSCMD_IWRITE64_CX		0xF9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1921) #define DSSCMD_IREAD64_CR		0xFA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1922) #define DSSCMD_IREAD64_CX		0xFB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1923) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1924) #define CMD_MAX_IOCB_CMD        0xFB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1925) #define CMD_IOCB_MASK           0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1926) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1927) #define MAX_MSG_DATA            28	/* max msg data in CMD_ADAPTER_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1928) 					   iocb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1929) #define LPFC_MAX_ADPTMSG         32	/* max msg data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1930) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1931)  *  Define Status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1932)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1933) #define MBX_SUCCESS                 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1934) #define MBXERR_NUM_RINGS            1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1935) #define MBXERR_NUM_IOCBS            2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1936) #define MBXERR_IOCBS_EXCEEDED       3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1937) #define MBXERR_BAD_RING_NUMBER      4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1938) #define MBXERR_MASK_ENTRIES_RANGE   5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1939) #define MBXERR_MASKS_EXCEEDED       6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1940) #define MBXERR_BAD_PROFILE          7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1941) #define MBXERR_BAD_DEF_CLASS        8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1942) #define MBXERR_BAD_MAX_RESPONDER    9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1943) #define MBXERR_BAD_MAX_ORIGINATOR   10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1944) #define MBXERR_RPI_REGISTERED       11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1945) #define MBXERR_RPI_FULL             12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1946) #define MBXERR_NO_RESOURCES         13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1947) #define MBXERR_BAD_RCV_LENGTH       14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1948) #define MBXERR_DMA_ERROR            15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1949) #define MBXERR_ERROR                16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1950) #define MBXERR_LINK_DOWN            0x33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1951) #define MBXERR_SEC_NO_PERMISSION    0xF02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1952) #define MBX_NOT_FINISHED            255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1953) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1954) #define MBX_BUSY                   0xffffff /* Attempted cmd to busy Mailbox */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1955) #define MBX_TIMEOUT                0xfffffe /* time-out expired waiting for */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1956) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1957) #define TEMPERATURE_OFFSET 0xB0	/* Slim offset for critical temperature event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1958) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1959) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1960)  * return code Fail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1961)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1962) #define FAILURE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1963) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1964) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1965)  *    Begin Structure Definitions for Mailbox Commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1966)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1967) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1968) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1969) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1970) 	uint8_t tval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1971) 	uint8_t tmask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1972) 	uint8_t rval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1973) 	uint8_t rmask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1974) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1975) 	uint8_t rmask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1976) 	uint8_t rval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1977) 	uint8_t tmask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1978) 	uint8_t tval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1979) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1980) } RR_REG;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1981) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1982) struct ulp_bde {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1983) 	uint32_t bdeAddress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1984) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1985) 	uint32_t bdeReserved:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1986) 	uint32_t bdeAddrHigh:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1987) 	uint32_t bdeSize:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1988) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1989) 	uint32_t bdeSize:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1990) 	uint32_t bdeAddrHigh:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1991) 	uint32_t bdeReserved:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1992) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1993) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1994) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1995) typedef struct ULP_BDL {	/* SLI-2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1996) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1997) 	uint32_t bdeFlags:8;	/* BDL Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1998) 	uint32_t bdeSize:24;	/* Size of BDL array in host memory (bytes) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1999) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2000) 	uint32_t bdeSize:24;	/* Size of BDL array in host memory (bytes) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2001) 	uint32_t bdeFlags:8;	/* BDL Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2002) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2003) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2004) 	uint32_t addrLow;	/* Address 0:31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2005) 	uint32_t addrHigh;	/* Address 32:63 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2006) 	uint32_t ulpIoTag32;	/* Can be used for 32 bit I/O Tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2007) } ULP_BDL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2008) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2009) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2010)  * BlockGuard Definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2011)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2012) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2013) enum lpfc_protgrp_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2014) 	LPFC_PG_TYPE_INVALID = 0, /* used to indicate errors                  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2015) 	LPFC_PG_TYPE_NO_DIF,	  /* no DIF data pointed to by prot grp       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2016) 	LPFC_PG_TYPE_EMBD_DIF,	  /* DIF is embedded (inline) with data       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2017) 	LPFC_PG_TYPE_DIF_BUF	  /* DIF has its own scatter/gather list      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2018) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2019) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2020) /* PDE Descriptors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2021) #define LPFC_PDE5_DESCRIPTOR		0x85
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2022) #define LPFC_PDE6_DESCRIPTOR		0x86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2023) #define LPFC_PDE7_DESCRIPTOR		0x87
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2024) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2025) /* BlockGuard Opcodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2026) #define BG_OP_IN_NODIF_OUT_CRC		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2027) #define	BG_OP_IN_CRC_OUT_NODIF		0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2028) #define	BG_OP_IN_NODIF_OUT_CSUM		0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2029) #define	BG_OP_IN_CSUM_OUT_NODIF		0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2030) #define	BG_OP_IN_CRC_OUT_CRC		0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2031) #define	BG_OP_IN_CSUM_OUT_CSUM		0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2032) #define	BG_OP_IN_CRC_OUT_CSUM		0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2033) #define	BG_OP_IN_CSUM_OUT_CRC		0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2034) #define	BG_OP_RAW_MODE			0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2035) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2036) struct lpfc_pde5 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2037) 	uint32_t word0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2038) #define pde5_type_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2039) #define pde5_type_MASK		0x000000ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2040) #define pde5_type_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2041) #define pde5_rsvd0_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2042) #define pde5_rsvd0_MASK		0x00ffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2043) #define pde5_rsvd0_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2044) 	uint32_t reftag;	/* Reference Tag Value			*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2045) 	uint32_t reftagtr;	/* Reference Tag Translation Value 	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2046) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2047) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2048) struct lpfc_pde6 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2049) 	uint32_t word0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2050) #define pde6_type_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2051) #define pde6_type_MASK		0x000000ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2052) #define pde6_type_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2053) #define pde6_rsvd0_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2054) #define pde6_rsvd0_MASK		0x00ffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2055) #define pde6_rsvd0_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2056) 	uint32_t word1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2057) #define pde6_rsvd1_SHIFT	26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2058) #define pde6_rsvd1_MASK		0x0000003f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2059) #define pde6_rsvd1_WORD		word1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2060) #define pde6_na_SHIFT		25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2061) #define pde6_na_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2062) #define pde6_na_WORD		word1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2063) #define pde6_rsvd2_SHIFT	16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2064) #define pde6_rsvd2_MASK		0x000001FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2065) #define pde6_rsvd2_WORD		word1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2066) #define pde6_apptagtr_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2067) #define pde6_apptagtr_MASK	0x0000ffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2068) #define pde6_apptagtr_WORD	word1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2069) 	uint32_t word2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2070) #define pde6_optx_SHIFT		28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2071) #define pde6_optx_MASK		0x0000000f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2072) #define pde6_optx_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2073) #define pde6_oprx_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2074) #define pde6_oprx_MASK		0x0000000f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2075) #define pde6_oprx_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2076) #define pde6_nr_SHIFT		23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2077) #define pde6_nr_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2078) #define pde6_nr_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2079) #define pde6_ce_SHIFT		22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2080) #define pde6_ce_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2081) #define pde6_ce_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2082) #define pde6_re_SHIFT		21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2083) #define pde6_re_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2084) #define pde6_re_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2085) #define pde6_ae_SHIFT		20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2086) #define pde6_ae_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2087) #define pde6_ae_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2088) #define pde6_ai_SHIFT		19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2089) #define pde6_ai_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2090) #define pde6_ai_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2091) #define pde6_bs_SHIFT		16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2092) #define pde6_bs_MASK		0x00000007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2093) #define pde6_bs_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2094) #define pde6_apptagval_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2095) #define pde6_apptagval_MASK	0x0000ffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2096) #define pde6_apptagval_WORD	word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2097) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2098) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2099) struct lpfc_pde7 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2100) 	uint32_t word0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2101) #define pde7_type_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2102) #define pde7_type_MASK		0x000000ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2103) #define pde7_type_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2104) #define pde7_rsvd0_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2105) #define pde7_rsvd0_MASK		0x00ffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2106) #define pde7_rsvd0_WORD		word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2107) 	uint32_t addrHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2108) 	uint32_t addrLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2109) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2111) /* Structure for MB Command LOAD_SM and DOWN_LOAD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2113) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2114) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2115) 	uint32_t rsvd2:25;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2116) 	uint32_t acknowledgment:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2117) 	uint32_t version:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2118) 	uint32_t erase_or_prog:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2119) 	uint32_t update_flash:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2120) 	uint32_t update_ram:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2121) 	uint32_t method:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2122) 	uint32_t load_cmplt:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2123) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2124) 	uint32_t load_cmplt:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2125) 	uint32_t method:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2126) 	uint32_t update_ram:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2127) 	uint32_t update_flash:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2128) 	uint32_t erase_or_prog:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2129) 	uint32_t version:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2130) 	uint32_t acknowledgment:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2131) 	uint32_t rsvd2:25;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2132) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2134) 	uint32_t dl_to_adr_low;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2135) 	uint32_t dl_to_adr_high;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2136) 	uint32_t dl_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2137) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2138) 		uint32_t dl_from_mbx_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2139) 		struct ulp_bde dl_from_bde;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2140) 		struct ulp_bde64 dl_from_bde64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2141) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2143) } LOAD_SM_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2145) /* Structure for MB Command READ_NVPARM (02) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2147) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2148) 	uint32_t rsvd1[3];	/* Read as all one's */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2149) 	uint32_t rsvd2;		/* Read as all zero's */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2150) 	uint32_t portname[2];	/* N_PORT name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2151) 	uint32_t nodename[2];	/* NODE name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2153) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2154) 	uint32_t pref_DID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2155) 	uint32_t hardAL_PA:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2156) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2157) 	uint32_t hardAL_PA:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2158) 	uint32_t pref_DID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2159) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2161) 	uint32_t rsvd3[21];	/* Read as all one's */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2162) } READ_NV_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2164) /* Structure for MB Command WRITE_NVPARMS (03) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2166) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2167) 	uint32_t rsvd1[3];	/* Must be all one's */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2168) 	uint32_t rsvd2;		/* Must be all zero's */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2169) 	uint32_t portname[2];	/* N_PORT name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2170) 	uint32_t nodename[2];	/* NODE name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2172) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2173) 	uint32_t pref_DID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2174) 	uint32_t hardAL_PA:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2175) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2176) 	uint32_t hardAL_PA:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2177) 	uint32_t pref_DID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2178) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2180) 	uint32_t rsvd3[21];	/* Must be all one's */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2181) } WRITE_NV_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2183) /* Structure for MB Command RUN_BIU_DIAG (04) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2184) /* Structure for MB Command RUN_BIU_DIAG64 (0x84) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2186) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2187) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2188) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2189) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2190) 			struct ulp_bde xmit_bde;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2191) 			struct ulp_bde rcv_bde;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2192) 		} s1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2193) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2194) 			struct ulp_bde64 xmit_bde64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2195) 			struct ulp_bde64 rcv_bde64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2196) 		} s2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2197) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2198) } BIU_DIAG_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2200) /* Structure for MB command READ_EVENT_LOG (0x38) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2201) struct READ_EVENT_LOG_VAR {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2202) 	uint32_t word1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2203) #define lpfc_event_log_SHIFT	29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2204) #define lpfc_event_log_MASK	0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2205) #define lpfc_event_log_WORD	word1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2206) #define USE_MAILBOX_RESPONSE	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2207) 	uint32_t offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2208) 	struct ulp_bde64 rcv_bde64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2209) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2211) /* Structure for MB Command INIT_LINK (05) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2213) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2214) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2215) 	uint32_t rsvd1:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2216) 	uint32_t lipsr_AL_PA:8;	/* AL_PA to issue Lip Selective Reset to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2217) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2218) 	uint32_t lipsr_AL_PA:8;	/* AL_PA to issue Lip Selective Reset to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2219) 	uint32_t rsvd1:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2220) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2222) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2223) 	uint8_t fabric_AL_PA;	/* If using a Fabric Assigned AL_PA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2224) 	uint8_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2225) 	uint16_t link_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2226) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2227) 	uint16_t link_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2228) 	uint8_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2229) 	uint8_t fabric_AL_PA;	/* If using a Fabric Assigned AL_PA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2230) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2231) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2232) #define FLAGS_TOPOLOGY_MODE_LOOP_PT  0x00 /* Attempt loop then pt-pt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2233) #define FLAGS_LOCAL_LB               0x01 /* link_flags (=1) ENDEC loopback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2234) #define FLAGS_TOPOLOGY_MODE_PT_PT    0x02 /* Attempt pt-pt only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2235) #define FLAGS_TOPOLOGY_MODE_LOOP     0x04 /* Attempt loop only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2236) #define FLAGS_TOPOLOGY_MODE_PT_LOOP  0x06 /* Attempt pt-pt then loop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2237) #define	FLAGS_UNREG_LOGIN_ALL	     0x08 /* UNREG_LOGIN all on link down */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2238) #define FLAGS_LIRP_LILP              0x80 /* LIRP / LILP is disabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2240) #define FLAGS_TOPOLOGY_FAILOVER      0x0400	/* Bit 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2241) #define FLAGS_LINK_SPEED             0x0800	/* Bit 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2242) #define FLAGS_IMED_ABORT             0x04000	/* Bit 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2244) 	uint32_t link_speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2245) #define LINK_SPEED_AUTO 0x0     /* Auto selection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2246) #define LINK_SPEED_1G   0x1     /* 1 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2247) #define LINK_SPEED_2G   0x2     /* 2 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2248) #define LINK_SPEED_4G   0x4     /* 4 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2249) #define LINK_SPEED_8G   0x8     /* 8 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2250) #define LINK_SPEED_10G  0x10    /* 10 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2251) #define LINK_SPEED_16G  0x11    /* 16 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2252) #define LINK_SPEED_32G  0x14    /* 32 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2253) #define LINK_SPEED_64G  0x17    /* 64 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2254) #define LINK_SPEED_128G 0x1A    /* 128 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2255) #define LINK_SPEED_256G 0x1D    /* 256 Gigabaud */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2256) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2257) } INIT_LINK_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2258) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2259) /* Structure for MB Command DOWN_LINK (06) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2261) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2262) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2263) } DOWN_LINK_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2264) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2265) /* Structure for MB Command CONFIG_LINK (07) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2266) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2267) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2268) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2269) 	uint32_t cr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2270) 	uint32_t ci:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2271) 	uint32_t cr_delay:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2272) 	uint32_t cr_count:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2273) 	uint32_t rsvd1:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2274) 	uint32_t MaxBBC:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2275) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2276) 	uint32_t MaxBBC:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2277) 	uint32_t rsvd1:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2278) 	uint32_t cr_count:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2279) 	uint32_t cr_delay:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2280) 	uint32_t ci:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2281) 	uint32_t cr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2282) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2283) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2284) 	uint32_t myId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2285) 	uint32_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2286) 	uint32_t edtov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2287) 	uint32_t arbtov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2288) 	uint32_t ratov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2289) 	uint32_t rttov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2290) 	uint32_t altov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2291) 	uint32_t crtov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2292) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2293) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2294) 	uint32_t rsvd4:19;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2295) 	uint32_t cscn:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2296) 	uint32_t bbscn:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2297) 	uint32_t rsvd3:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2298) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2299) 	uint32_t rsvd3:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2300) 	uint32_t bbscn:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2301) 	uint32_t cscn:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2302) 	uint32_t rsvd4:19;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2303) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2304) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2305) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2306) 	uint32_t rrq_enable:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2307) 	uint32_t rrq_immed:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2308) 	uint32_t rsvd5:29;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2309) 	uint32_t ack0_enable:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2310) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2311) 	uint32_t ack0_enable:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2312) 	uint32_t rsvd5:29;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2313) 	uint32_t rrq_immed:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2314) 	uint32_t rrq_enable:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2315) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2316) } CONFIG_LINK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2317) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2318) /* Structure for MB Command PART_SLIM (08)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2319)  * will be removed since SLI1 is no longer supported!
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2320)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2321) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2322) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2323) 	uint16_t offCiocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2324) 	uint16_t numCiocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2325) 	uint16_t offRiocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2326) 	uint16_t numRiocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2327) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2328) 	uint16_t numCiocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2329) 	uint16_t offCiocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2330) 	uint16_t numRiocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2331) 	uint16_t offRiocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2332) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2333) } RING_DEF;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2334) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2335) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2336) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2337) 	uint32_t unused1:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2338) 	uint32_t numRing:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2339) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2340) 	uint32_t numRing:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2341) 	uint32_t unused1:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2342) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2343) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2344) 	RING_DEF ringdef[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2345) 	uint32_t hbainit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2346) } PART_SLIM_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2348) /* Structure for MB Command CONFIG_RING (09) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2349) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2350) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2351) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2352) 	uint32_t unused2:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2353) 	uint32_t recvSeq:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2354) 	uint32_t recvNotify:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2355) 	uint32_t numMask:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2356) 	uint32_t profile:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2357) 	uint32_t unused1:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2358) 	uint32_t ring:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2359) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2360) 	uint32_t ring:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2361) 	uint32_t unused1:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2362) 	uint32_t profile:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2363) 	uint32_t numMask:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2364) 	uint32_t recvNotify:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2365) 	uint32_t recvSeq:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2366) 	uint32_t unused2:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2367) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2368) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2369) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2370) 	uint16_t maxRespXchg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2371) 	uint16_t maxOrigXchg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2372) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2373) 	uint16_t maxOrigXchg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2374) 	uint16_t maxRespXchg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2375) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2376) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2377) 	RR_REG rrRegs[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2378) } CONFIG_RING_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2379) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2380) /* Structure for MB Command RESET_RING (10) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2381) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2382) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2383) 	uint32_t ring_no;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2384) } RESET_RING_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2385) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2386) /* Structure for MB Command READ_CONFIG (11) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2387) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2388) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2389) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2390) 	uint32_t cr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2391) 	uint32_t ci:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2392) 	uint32_t cr_delay:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2393) 	uint32_t cr_count:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2394) 	uint32_t InitBBC:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2395) 	uint32_t MaxBBC:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2396) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2397) 	uint32_t MaxBBC:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2398) 	uint32_t InitBBC:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2399) 	uint32_t cr_count:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2400) 	uint32_t cr_delay:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2401) 	uint32_t ci:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2402) 	uint32_t cr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2403) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2404) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2405) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2406) 	uint32_t topology:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2407) 	uint32_t myDid:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2408) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2409) 	uint32_t myDid:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2410) 	uint32_t topology:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2411) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2412) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2413) 	/* Defines for topology (defined previously) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2414) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2415) 	uint32_t AR:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2416) 	uint32_t IR:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2417) 	uint32_t rsvd1:29;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2418) 	uint32_t ack0:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2419) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2420) 	uint32_t ack0:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2421) 	uint32_t rsvd1:29;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2422) 	uint32_t IR:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2423) 	uint32_t AR:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2424) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2425) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2426) 	uint32_t edtov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2427) 	uint32_t arbtov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2428) 	uint32_t ratov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2429) 	uint32_t rttov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2430) 	uint32_t altov;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2431) 	uint32_t lmt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2432) #define LMT_RESERVED  0x000    /* Not used */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2433) #define LMT_1Gb       0x004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2434) #define LMT_2Gb       0x008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2435) #define LMT_4Gb       0x040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2436) #define LMT_8Gb       0x080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2437) #define LMT_10Gb      0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2438) #define LMT_16Gb      0x200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2439) #define LMT_32Gb      0x400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2440) #define LMT_64Gb      0x800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2441) #define LMT_128Gb     0x1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2442) #define LMT_256Gb     0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2443) 	uint32_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2444) 	uint32_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2445) 	uint32_t max_xri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2446) 	uint32_t max_iocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2447) 	uint32_t max_rpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2448) 	uint32_t avail_xri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2449) 	uint32_t avail_iocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2450) 	uint32_t avail_rpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2451) 	uint32_t max_vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2452) 	uint32_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2453) 	uint32_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2454) 	uint32_t avail_vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2455) } READ_CONFIG_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2456) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2457) /* Structure for MB Command READ_RCONFIG (12) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2458) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2459) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2460) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2461) 	uint32_t rsvd2:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2462) 	uint32_t recvNotify:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2463) 	uint32_t numMask:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2464) 	uint32_t profile:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2465) 	uint32_t rsvd1:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2466) 	uint32_t ring:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2467) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2468) 	uint32_t ring:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2469) 	uint32_t rsvd1:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2470) 	uint32_t profile:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2471) 	uint32_t numMask:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2472) 	uint32_t recvNotify:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2473) 	uint32_t rsvd2:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2474) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2475) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2476) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2477) 	uint16_t maxResp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2478) 	uint16_t maxOrig;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2479) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2480) 	uint16_t maxOrig;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2481) 	uint16_t maxResp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2482) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2483) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2484) 	RR_REG rrRegs[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2485) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2486) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2487) 	uint16_t cmdRingOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2488) 	uint16_t cmdEntryCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2489) 	uint16_t rspRingOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2490) 	uint16_t rspEntryCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2491) 	uint16_t nextCmdOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2492) 	uint16_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2493) 	uint16_t nextRspOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2494) 	uint16_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2495) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2496) 	uint16_t cmdEntryCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2497) 	uint16_t cmdRingOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2498) 	uint16_t rspEntryCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2499) 	uint16_t rspRingOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2500) 	uint16_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2501) 	uint16_t nextCmdOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2502) 	uint16_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2503) 	uint16_t nextRspOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2504) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2505) } READ_RCONF_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2506) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2507) /* Structure for MB Command READ_SPARM (13) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2508) /* Structure for MB Command READ_SPARM64 (0x8D) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2509) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2510) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2511) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2512) 	uint32_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2513) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2514) 		struct ulp_bde sp; /* This BDE points to struct serv_parm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2515) 				      structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2516) 		struct ulp_bde64 sp64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2517) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2518) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2519) 	uint16_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2520) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2521) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2522) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2523) 	uint16_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2524) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2525) } READ_SPARM_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2526) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2527) /* Structure for MB Command READ_STATUS (14) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2529) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2530) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2531) 	uint32_t rsvd1:31;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2532) 	uint32_t clrCounters:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2533) 	uint16_t activeXriCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2534) 	uint16_t activeRpiCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2535) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2536) 	uint32_t clrCounters:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2537) 	uint32_t rsvd1:31;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2538) 	uint16_t activeRpiCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2539) 	uint16_t activeXriCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2540) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2541) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2542) 	uint32_t xmitByteCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2543) 	uint32_t rcvByteCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2544) 	uint32_t xmitFrameCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2545) 	uint32_t rcvFrameCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2546) 	uint32_t xmitSeqCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2547) 	uint32_t rcvSeqCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2548) 	uint32_t totalOrigExchanges;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2549) 	uint32_t totalRespExchanges;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2550) 	uint32_t rcvPbsyCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2551) 	uint32_t rcvFbsyCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2552) } READ_STATUS_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2553) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2554) /* Structure for MB Command READ_RPI (15) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2555) /* Structure for MB Command READ_RPI64 (0x8F) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2556) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2557) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2558) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2559) 	uint16_t nextRpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2560) 	uint16_t reqRpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2561) 	uint32_t rsvd2:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2562) 	uint32_t DID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2563) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2564) 	uint16_t reqRpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2565) 	uint16_t nextRpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2566) 	uint32_t DID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2567) 	uint32_t rsvd2:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2568) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2569) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2570) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2571) 		struct ulp_bde sp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2572) 		struct ulp_bde64 sp64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2573) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2574) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2575) } READ_RPI_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2576) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2577) /* Structure for MB Command READ_XRI (16) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2578) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2579) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2580) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2581) 	uint16_t nextXri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2582) 	uint16_t reqXri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2583) 	uint16_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2584) 	uint16_t rpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2585) 	uint32_t rsvd2:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2586) 	uint32_t DID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2587) 	uint32_t rsvd3:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2588) 	uint32_t SID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2589) 	uint32_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2590) 	uint8_t seqId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2591) 	uint8_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2592) 	uint16_t seqCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2593) 	uint16_t oxId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2594) 	uint16_t rxId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2595) 	uint32_t rsvd6:30;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2596) 	uint32_t si:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2597) 	uint32_t exchOrig:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2598) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2599) 	uint16_t reqXri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2600) 	uint16_t nextXri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2601) 	uint16_t rpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2602) 	uint16_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2603) 	uint32_t DID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2604) 	uint32_t rsvd2:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2605) 	uint32_t SID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2606) 	uint32_t rsvd3:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2607) 	uint32_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2608) 	uint16_t seqCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2609) 	uint8_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2610) 	uint8_t seqId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2611) 	uint16_t rxId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2612) 	uint16_t oxId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2613) 	uint32_t exchOrig:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2614) 	uint32_t si:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2615) 	uint32_t rsvd6:30;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2616) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2617) } READ_XRI_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2618) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2619) /* Structure for MB Command READ_REV (17) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2620) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2621) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2622) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2623) 	uint32_t cv:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2624) 	uint32_t rr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2625) 	uint32_t rsvd2:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2626) 	uint32_t v3req:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2627) 	uint32_t v3rsp:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2628) 	uint32_t rsvd1:25;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2629) 	uint32_t rv:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2630) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2631) 	uint32_t rv:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2632) 	uint32_t rsvd1:25;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2633) 	uint32_t v3rsp:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2634) 	uint32_t v3req:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2635) 	uint32_t rsvd2:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2636) 	uint32_t rr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2637) 	uint32_t cv:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2638) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2639) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2640) 	uint32_t biuRev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2641) 	uint32_t smRev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2642) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2643) 		uint32_t smFwRev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2644) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2645) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2646) 			uint8_t ProgType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2647) 			uint8_t ProgId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2648) 			uint16_t ProgVer:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2649) 			uint16_t ProgRev:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2650) 			uint16_t ProgFixLvl:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2651) 			uint16_t ProgDistType:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2652) 			uint16_t DistCnt:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2653) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2654) 			uint16_t DistCnt:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2655) 			uint16_t ProgDistType:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2656) 			uint16_t ProgFixLvl:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2657) 			uint16_t ProgRev:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2658) 			uint16_t ProgVer:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2659) 			uint8_t ProgId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2660) 			uint8_t ProgType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2661) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2662) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2663) 		} b;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2664) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2665) 	uint32_t endecRev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2666) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2667) 	uint8_t feaLevelHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2668) 	uint8_t feaLevelLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2669) 	uint8_t fcphHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2670) 	uint8_t fcphLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2671) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2672) 	uint8_t fcphLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2673) 	uint8_t fcphHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2674) 	uint8_t feaLevelLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2675) 	uint8_t feaLevelHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2676) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2677) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2678) 	uint32_t postKernRev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2679) 	uint32_t opFwRev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2680) 	uint8_t opFwName[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2681) 	uint32_t sli1FwRev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2682) 	uint8_t sli1FwName[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2683) 	uint32_t sli2FwRev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2684) 	uint8_t sli2FwName[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2685) 	uint32_t sli3Feat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2686) 	uint32_t RandomData[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2687) } READ_REV_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2688) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2689) /* Structure for MB Command READ_LINK_STAT (18) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2690) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2691) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2692) 	uint32_t word0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2693) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2694) #define lpfc_read_link_stat_rec_SHIFT   0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2695) #define lpfc_read_link_stat_rec_MASK   0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2696) #define lpfc_read_link_stat_rec_WORD   word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2697) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2698) #define lpfc_read_link_stat_gec_SHIFT	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2699) #define lpfc_read_link_stat_gec_MASK   0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2700) #define lpfc_read_link_stat_gec_WORD   word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2701) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2702) #define lpfc_read_link_stat_w02oftow23of_SHIFT	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2703) #define lpfc_read_link_stat_w02oftow23of_MASK   0x3FFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2704) #define lpfc_read_link_stat_w02oftow23of_WORD   word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2705) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2706) #define lpfc_read_link_stat_rsvd_SHIFT	24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2707) #define lpfc_read_link_stat_rsvd_MASK   0x1F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2708) #define lpfc_read_link_stat_rsvd_WORD   word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2709) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2710) #define lpfc_read_link_stat_gec2_SHIFT  29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2711) #define lpfc_read_link_stat_gec2_MASK   0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2712) #define lpfc_read_link_stat_gec2_WORD   word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2713) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2714) #define lpfc_read_link_stat_clrc_SHIFT  30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2715) #define lpfc_read_link_stat_clrc_MASK   0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2716) #define lpfc_read_link_stat_clrc_WORD   word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2717) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2718) #define lpfc_read_link_stat_clof_SHIFT  31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2719) #define lpfc_read_link_stat_clof_MASK   0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2720) #define lpfc_read_link_stat_clof_WORD   word0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2721) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2722) 	uint32_t linkFailureCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2723) 	uint32_t lossSyncCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2724) 	uint32_t lossSignalCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2725) 	uint32_t primSeqErrCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2726) 	uint32_t invalidXmitWord;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2727) 	uint32_t crcCnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2728) 	uint32_t primSeqTimeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2729) 	uint32_t elasticOverrun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2730) 	uint32_t arbTimeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2731) 	uint32_t advRecBufCredit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2732) 	uint32_t curRecBufCredit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2733) 	uint32_t advTransBufCredit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2734) 	uint32_t curTransBufCredit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2735) 	uint32_t recEofCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2736) 	uint32_t recEofdtiCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2737) 	uint32_t recEofniCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2738) 	uint32_t recSofcount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2739) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2740) 	uint32_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2741) 	uint32_t recDrpXriCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2742) 	uint32_t fecCorrBlkCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2743) 	uint32_t fecUncorrBlkCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2744) } READ_LNK_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2745) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2746) /* Structure for MB Command REG_LOGIN (19) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2747) /* Structure for MB Command REG_LOGIN64 (0x93) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2748) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2749) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2750) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2751) 	uint16_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2752) 	uint16_t rpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2753) 	uint32_t rsvd2:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2754) 	uint32_t did:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2755) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2756) 	uint16_t rpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2757) 	uint16_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2758) 	uint32_t did:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2759) 	uint32_t rsvd2:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2760) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2761) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2762) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2763) 		struct ulp_bde sp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2764) 		struct ulp_bde64 sp64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2765) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2766) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2767) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2768) 	uint16_t rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2769) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2770) #else /* __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2771) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2772) 	uint16_t rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2773) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2774) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2775) } REG_LOGIN_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2776) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2777) /* Word 30 contents for REG_LOGIN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2778) typedef union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2779) 	struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2780) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2781) 		uint16_t rsvd1:12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2782) 		uint16_t wd30_class:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2783) 		uint16_t xri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2784) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2785) 		uint16_t xri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2786) 		uint16_t wd30_class:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2787) 		uint16_t rsvd1:12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2788) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2789) 	} f;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2790) 	uint32_t word;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2791) } REG_WD30;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2792) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2793) /* Structure for MB Command UNREG_LOGIN (20) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2794) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2795) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2796) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2797) 	uint16_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2798) 	uint16_t rpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2799) 	uint32_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2800) 	uint32_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2801) 	uint32_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2802) 	uint32_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2803) 	uint16_t rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2804) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2805) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2806) 	uint16_t rpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2807) 	uint16_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2808) 	uint32_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2809) 	uint32_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2810) 	uint32_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2811) 	uint32_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2812) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2813) 	uint16_t rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2814) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2815) } UNREG_LOGIN_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2816) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2817) /* Structure for MB Command REG_VPI (0x96) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2818) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2819) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2820) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2821) 	uint32_t rsvd2:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2822) 	uint32_t upd:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2823) 	uint32_t sid:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2824) 	uint32_t wwn[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2825) 	uint32_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2826) 	uint16_t vfi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2827) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2828) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2829) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2830) 	uint32_t sid:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2831) 	uint32_t upd:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2832) 	uint32_t rsvd2:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2833) 	uint32_t wwn[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2834) 	uint32_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2835) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2836) 	uint16_t vfi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2837) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2838) } REG_VPI_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2839) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2840) /* Structure for MB Command UNREG_VPI (0x97) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2841) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2842) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2843) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2844) 	uint16_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2845) 	uint16_t sli4_vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2846) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2847) 	uint16_t sli4_vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2848) 	uint16_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2849) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2850) 	uint32_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2851) 	uint32_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2852) 	uint32_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2853) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2854) 	uint16_t rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2855) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2856) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2857) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2858) 	uint16_t rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2859) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2860) } UNREG_VPI_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2861) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2862) /* Structure for MB Command UNREG_D_ID (0x23) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2863) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2864) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2865) 	uint32_t did;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2866) 	uint32_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2867) 	uint32_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2868) 	uint32_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2869) 	uint32_t rsvd5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2870) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2871) 	uint16_t rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2872) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2873) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2874) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2875) 	uint16_t rsvd6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2876) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2877) } UNREG_D_ID_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2878) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2879) /* Structure for MB Command READ_TOPOLOGY (0x95) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2880) struct lpfc_mbx_read_top {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2881) 	uint32_t eventTag;	/* Event tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2882) 	uint32_t word2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2883) #define lpfc_mbx_read_top_fa_SHIFT		12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2884) #define lpfc_mbx_read_top_fa_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2885) #define lpfc_mbx_read_top_fa_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2886) #define lpfc_mbx_read_top_mm_SHIFT		11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2887) #define lpfc_mbx_read_top_mm_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2888) #define lpfc_mbx_read_top_mm_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2889) #define lpfc_mbx_read_top_pb_SHIFT		9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2890) #define lpfc_mbx_read_top_pb_MASK		0X00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2891) #define lpfc_mbx_read_top_pb_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2892) #define lpfc_mbx_read_top_il_SHIFT		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2893) #define lpfc_mbx_read_top_il_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2894) #define lpfc_mbx_read_top_il_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2895) #define lpfc_mbx_read_top_att_type_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2896) #define lpfc_mbx_read_top_att_type_MASK		0x000000FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2897) #define lpfc_mbx_read_top_att_type_WORD		word2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2898) #define LPFC_ATT_RESERVED    0x00	/* Reserved - attType */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2899) #define LPFC_ATT_LINK_UP     0x01	/* Link is up */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2900) #define LPFC_ATT_LINK_DOWN   0x02	/* Link is down */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2901) #define LPFC_ATT_UNEXP_WWPN  0x06	/* Link is down Unexpected WWWPN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2902) 	uint32_t word3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2903) #define lpfc_mbx_read_top_alpa_granted_SHIFT	24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2904) #define lpfc_mbx_read_top_alpa_granted_MASK	0x000000FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2905) #define lpfc_mbx_read_top_alpa_granted_WORD	word3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2906) #define lpfc_mbx_read_top_lip_alps_SHIFT	16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2907) #define lpfc_mbx_read_top_lip_alps_MASK		0x000000FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2908) #define lpfc_mbx_read_top_lip_alps_WORD		word3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2909) #define lpfc_mbx_read_top_lip_type_SHIFT	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2910) #define lpfc_mbx_read_top_lip_type_MASK		0x000000FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2911) #define lpfc_mbx_read_top_lip_type_WORD		word3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2912) #define lpfc_mbx_read_top_topology_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2913) #define lpfc_mbx_read_top_topology_MASK		0x000000FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2914) #define lpfc_mbx_read_top_topology_WORD		word3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2915) #define LPFC_TOPOLOGY_PT_PT 0x01	/* Topology is pt-pt / pt-fabric */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2916) #define LPFC_TOPOLOGY_LOOP  0x02	/* Topology is FC-AL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2917) #define LPFC_TOPOLOGY_MM    0x05	/* maint mode zephtr to menlo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2918) 	/* store the LILP AL_PA position map into */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2919) 	struct ulp_bde64 lilpBde64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2920) #define LPFC_ALPA_MAP_SIZE	128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2921) 	uint32_t word7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2922) #define lpfc_mbx_read_top_ld_lu_SHIFT		31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2923) #define lpfc_mbx_read_top_ld_lu_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2924) #define lpfc_mbx_read_top_ld_lu_WORD		word7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2925) #define lpfc_mbx_read_top_ld_tf_SHIFT		30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2926) #define lpfc_mbx_read_top_ld_tf_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2927) #define lpfc_mbx_read_top_ld_tf_WORD		word7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2928) #define lpfc_mbx_read_top_ld_link_spd_SHIFT	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2929) #define lpfc_mbx_read_top_ld_link_spd_MASK	0x000000FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2930) #define lpfc_mbx_read_top_ld_link_spd_WORD	word7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2931) #define lpfc_mbx_read_top_ld_nl_port_SHIFT	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2932) #define lpfc_mbx_read_top_ld_nl_port_MASK	0x0000000F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2933) #define lpfc_mbx_read_top_ld_nl_port_WORD	word7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2934) #define lpfc_mbx_read_top_ld_tx_SHIFT		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2935) #define lpfc_mbx_read_top_ld_tx_MASK		0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2936) #define lpfc_mbx_read_top_ld_tx_WORD		word7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2937) #define lpfc_mbx_read_top_ld_rx_SHIFT		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2938) #define lpfc_mbx_read_top_ld_rx_MASK		0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2939) #define lpfc_mbx_read_top_ld_rx_WORD		word7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2940) 	uint32_t word8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2941) #define lpfc_mbx_read_top_lu_SHIFT		31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2942) #define lpfc_mbx_read_top_lu_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2943) #define lpfc_mbx_read_top_lu_WORD		word8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2944) #define lpfc_mbx_read_top_tf_SHIFT		30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2945) #define lpfc_mbx_read_top_tf_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2946) #define lpfc_mbx_read_top_tf_WORD		word8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2947) #define lpfc_mbx_read_top_link_spd_SHIFT	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2948) #define lpfc_mbx_read_top_link_spd_MASK		0x000000FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2949) #define lpfc_mbx_read_top_link_spd_WORD		word8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2950) #define lpfc_mbx_read_top_nl_port_SHIFT		4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2951) #define lpfc_mbx_read_top_nl_port_MASK		0x0000000F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2952) #define lpfc_mbx_read_top_nl_port_WORD		word8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2953) #define lpfc_mbx_read_top_tx_SHIFT		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2954) #define lpfc_mbx_read_top_tx_MASK		0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2955) #define lpfc_mbx_read_top_tx_WORD		word8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2956) #define lpfc_mbx_read_top_rx_SHIFT		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2957) #define lpfc_mbx_read_top_rx_MASK		0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2958) #define lpfc_mbx_read_top_rx_WORD		word8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2959) #define LPFC_LINK_SPEED_UNKNOWN	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2960) #define LPFC_LINK_SPEED_1GHZ	0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2961) #define LPFC_LINK_SPEED_2GHZ	0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2962) #define LPFC_LINK_SPEED_4GHZ	0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2963) #define LPFC_LINK_SPEED_8GHZ	0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2964) #define LPFC_LINK_SPEED_10GHZ	0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2965) #define LPFC_LINK_SPEED_16GHZ	0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2966) #define LPFC_LINK_SPEED_32GHZ	0x90
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2967) #define LPFC_LINK_SPEED_64GHZ	0xA0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2968) #define LPFC_LINK_SPEED_128GHZ	0xB0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2969) #define LPFC_LINK_SPEED_256GHZ	0xC0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2970) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2971) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2972) /* Structure for MB Command CLEAR_LA (22) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2973) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2974) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2975) 	uint32_t eventTag;	/* Event tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2976) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2977) } CLEAR_LA_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2978) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2979) /* Structure for MB Command DUMP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2980) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2981) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2982) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2983) 	uint32_t rsvd:25;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2984) 	uint32_t ra:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2985) 	uint32_t co:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2986) 	uint32_t cv:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2987) 	uint32_t type:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2988) 	uint32_t entry_index:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2989) 	uint32_t region_id:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2990) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2991) 	uint32_t type:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2992) 	uint32_t cv:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2993) 	uint32_t co:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2994) 	uint32_t ra:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2995) 	uint32_t rsvd:25;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2996) 	uint32_t region_id:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2997) 	uint32_t entry_index:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2998) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2999) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3000) 	uint32_t sli4_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3001) 	uint32_t word_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3002) 	uint32_t resp_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3003) } DUMP_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3004) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3005) #define  DMP_MEM_REG             0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3006) #define  DMP_NV_PARAMS           0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3007) #define  DMP_LMSD                0x3 /* Link Module Serial Data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3008) #define  DMP_WELL_KNOWN          0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3009) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3010) #define  DMP_REGION_VPD          0xe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3011) #define  DMP_VPD_SIZE            0x400  /* maximum amount of VPD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3012) #define  DMP_RSP_OFFSET          0x14   /* word 5 contains first word of rsp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3013) #define  DMP_RSP_SIZE            0x6C   /* maximum of 27 words of rsp data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3014) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3015) #define  DMP_REGION_VPORT	 0x16   /* VPort info region */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3016) #define  DMP_VPORT_REGION_SIZE	 0x200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3017) #define  DMP_MBOX_OFFSET_WORD	 0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3018) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3019) #define  DMP_REGION_23		 0x17   /* fcoe param  and port state region */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3020) #define  DMP_RGN23_SIZE		 0x400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3021) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3022) #define  WAKE_UP_PARMS_REGION_ID    4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3023) #define  WAKE_UP_PARMS_WORD_SIZE   15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3024) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3025) struct vport_rec {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3026) 	uint8_t wwpn[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3027) 	uint8_t wwnn[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3028) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3029) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3030) #define VPORT_INFO_SIG 0x32324752
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3031) #define VPORT_INFO_REV_MASK 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3032) #define VPORT_INFO_REV 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3033) #define MAX_STATIC_VPORT_COUNT 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3034) struct static_vport_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3035) 	uint32_t		signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3036) 	uint32_t		rev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3037) 	struct vport_rec	vport_list[MAX_STATIC_VPORT_COUNT];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3038) 	uint32_t		resvd[66];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3039) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3040) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3041) /* Option rom version structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3042) struct prog_id {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3043) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3044) 	uint8_t  type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3045) 	uint8_t  id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3046) 	uint32_t ver:4;  /* Major Version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3047) 	uint32_t rev:4;  /* Revision */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3048) 	uint32_t lev:2;  /* Level */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3049) 	uint32_t dist:2; /* Dist Type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3050) 	uint32_t num:4;  /* number after dist type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3051) #else /*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3052) 	uint32_t num:4;  /* number after dist type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3053) 	uint32_t dist:2; /* Dist Type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3054) 	uint32_t lev:2;  /* Level */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3055) 	uint32_t rev:4;  /* Revision */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3056) 	uint32_t ver:4;  /* Major Version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3057) 	uint8_t  id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3058) 	uint8_t  type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3059) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3060) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3061) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3062) /* Structure for MB Command UPDATE_CFG (0x1B) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3063) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3064) struct update_cfg_var {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3065) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3066) 	uint32_t rsvd2:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3067) 	uint32_t type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3068) 	uint32_t rsvd:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3069) 	uint32_t ra:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3070) 	uint32_t co:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3071) 	uint32_t cv:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3072) 	uint32_t req:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3073) 	uint32_t entry_length:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3074) 	uint32_t region_id:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3075) #else  /*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3076) 	uint32_t req:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3077) 	uint32_t cv:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3078) 	uint32_t co:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3079) 	uint32_t ra:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3080) 	uint32_t rsvd:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3081) 	uint32_t type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3082) 	uint32_t rsvd2:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3083) 	uint32_t region_id:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3084) 	uint32_t entry_length:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3085) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3086) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3087) 	uint32_t resp_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3088) 	uint32_t byte_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3089) 	uint32_t data_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3090) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3091) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3092) struct hbq_mask {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3093) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3094) 	uint8_t tmatch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3095) 	uint8_t tmask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3096) 	uint8_t rctlmatch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3097) 	uint8_t rctlmask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3098) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3099) 	uint8_t rctlmask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3100) 	uint8_t rctlmatch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3101) 	uint8_t tmask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3102) 	uint8_t tmatch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3103) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3104) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3107) /* Structure for MB Command CONFIG_HBQ (7c) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3109) struct config_hbq_var {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3110) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3111) 	uint32_t rsvd1      :7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3112) 	uint32_t recvNotify :1;     /* Receive Notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3113) 	uint32_t numMask    :8;     /* # Mask Entries       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3114) 	uint32_t profile    :8;     /* Selection Profile    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3115) 	uint32_t rsvd2      :8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3116) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3117) 	uint32_t rsvd2      :8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3118) 	uint32_t profile    :8;     /* Selection Profile    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3119) 	uint32_t numMask    :8;     /* # Mask Entries       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3120) 	uint32_t recvNotify :1;     /* Receive Notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3121) 	uint32_t rsvd1      :7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3122) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3124) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3125) 	uint32_t hbqId      :16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3126) 	uint32_t rsvd3      :12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3127) 	uint32_t ringMask   :4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3128) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3129) 	uint32_t ringMask   :4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3130) 	uint32_t rsvd3      :12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3131) 	uint32_t hbqId      :16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3132) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3134) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3135) 	uint32_t entry_count :16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3136) 	uint32_t rsvd4        :8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3137) 	uint32_t headerLen    :8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3138) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3139) 	uint32_t headerLen    :8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3140) 	uint32_t rsvd4        :8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3141) 	uint32_t entry_count :16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3142) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3144) 	uint32_t hbqaddrLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3145) 	uint32_t hbqaddrHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3147) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3148) 	uint32_t rsvd5      :31;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3149) 	uint32_t logEntry   :1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3150) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3151) 	uint32_t logEntry   :1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3152) 	uint32_t rsvd5      :31;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3153) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3155) 	uint32_t rsvd6;    /* w7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3156) 	uint32_t rsvd7;    /* w8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3157) 	uint32_t rsvd8;    /* w9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3159) 	struct hbq_mask hbqMasks[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3162) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3163) 		uint32_t allprofiles[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3165) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3166) 			#ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3167) 				uint32_t	seqlenoff	:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3168) 				uint32_t	maxlen		:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3169) 			#else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3170) 				uint32_t	maxlen		:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3171) 				uint32_t	seqlenoff	:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3172) 			#endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3173) 			#ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3174) 				uint32_t	rsvd1		:28;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3175) 				uint32_t	seqlenbcnt	:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3176) 			#else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3177) 				uint32_t	seqlenbcnt	:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3178) 				uint32_t	rsvd1		:28;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3179) 			#endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3180) 			uint32_t rsvd[10];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3181) 		} profile2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3183) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3184) 			#ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3185) 				uint32_t	seqlenoff	:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3186) 				uint32_t	maxlen		:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3187) 			#else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3188) 				uint32_t	maxlen		:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3189) 				uint32_t	seqlenoff	:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3190) 			#endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3191) 			#ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3192) 				uint32_t	cmdcodeoff	:28;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3193) 				uint32_t	rsvd1		:12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3194) 				uint32_t	seqlenbcnt	:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3195) 			#else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3196) 				uint32_t	seqlenbcnt	:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3197) 				uint32_t	rsvd1		:12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3198) 				uint32_t	cmdcodeoff	:28;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3199) 			#endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3200) 			uint32_t cmdmatch[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3201) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3202) 			uint32_t rsvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3203) 		} profile3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3204) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3205) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3206) 			#ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3207) 				uint32_t	seqlenoff	:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3208) 				uint32_t	maxlen		:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3209) 			#else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3210) 				uint32_t	maxlen		:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3211) 				uint32_t	seqlenoff	:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3212) 			#endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3213) 			#ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3214) 				uint32_t	cmdcodeoff	:28;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3215) 				uint32_t	rsvd1		:12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3216) 				uint32_t	seqlenbcnt	:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3217) 			#else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3218) 				uint32_t	seqlenbcnt	:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3219) 				uint32_t	rsvd1		:12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3220) 				uint32_t	cmdcodeoff	:28;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3221) 			#endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3222) 			uint32_t cmdmatch[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3224) 			uint32_t rsvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3225) 		} profile5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3227) 	} profiles;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3229) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3230) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3231) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3233) /* Structure for MB Command CONFIG_PORT (0x88) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3234) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3235) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3236) 	uint32_t cBE       :  1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3237) 	uint32_t cET       :  1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3238) 	uint32_t cHpcb     :  1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3239) 	uint32_t cMA       :  1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3240) 	uint32_t sli_mode  :  4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3241) 	uint32_t pcbLen    : 24;       /* bit 23:0  of memory based port
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3242) 					* config block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3243) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3244) 	uint32_t pcbLen    : 24;       /* bit 23:0  of memory based port
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3245) 					* config block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3246) 	uint32_t sli_mode  :  4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3247) 	uint32_t cMA       :  1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3248) 	uint32_t cHpcb     :  1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3249) 	uint32_t cET       :  1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3250) 	uint32_t cBE       :  1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3251) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3252) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3253) 	uint32_t pcbLow;       /* bit 31:0  of memory based port config block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3254) 	uint32_t pcbHigh;      /* bit 63:32 of memory based port config block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3255) 	uint32_t hbainit[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3256) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3257) 	uint32_t hps	   :  1; /* bit 31 word9 Host Pointer in slim */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3258) 	uint32_t rsvd	   : 31; /* least significant 31 bits of word 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3259) #else   /*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3260) 	uint32_t rsvd      : 31; /* least significant 31 bits of word 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3261) 	uint32_t hps	   :  1; /* bit 31 word9 Host Pointer in slim */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3262) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3263) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3264) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3265) 	uint32_t rsvd1     : 20;  /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3266) 	uint32_t casabt    :  1;  /* Configure async abts status notice   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3267) 	uint32_t rsvd2     :  2;  /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3268) 	uint32_t cbg       :  1;  /* Configure BlockGuard                 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3269) 	uint32_t cmv       :  1;  /* Configure Max VPIs                   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3270) 	uint32_t ccrp      :  1;  /* Config Command Ring Polling          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3271) 	uint32_t csah      :  1;  /* Configure Synchronous Abort Handling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3272) 	uint32_t chbs      :  1;  /* Cofigure Host Backing store          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3273) 	uint32_t cinb      :  1;  /* Enable Interrupt Notification Block  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3274) 	uint32_t cerbm	   :  1;  /* Configure Enhanced Receive Buf Mgmt  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3275) 	uint32_t cmx	   :  1;  /* Configure Max XRIs                   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3276) 	uint32_t cmr	   :  1;  /* Configure Max RPIs                   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3277) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3278) 	uint32_t cmr	   :  1;  /* Configure Max RPIs                   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3279) 	uint32_t cmx	   :  1;  /* Configure Max XRIs                   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3280) 	uint32_t cerbm	   :  1;  /* Configure Enhanced Receive Buf Mgmt  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3281) 	uint32_t cinb      :  1;  /* Enable Interrupt Notification Block  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3282) 	uint32_t chbs      :  1;  /* Cofigure Host Backing store          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3283) 	uint32_t csah      :  1;  /* Configure Synchronous Abort Handling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3284) 	uint32_t ccrp      :  1;  /* Config Command Ring Polling          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3285) 	uint32_t cmv	   :  1;  /* Configure Max VPIs                   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3286) 	uint32_t cbg       :  1;  /* Configure BlockGuard                 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3287) 	uint32_t rsvd2     :  2;  /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3288) 	uint32_t casabt    :  1;  /* Configure async abts status notice   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3289) 	uint32_t rsvd1     : 20;  /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3290) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3291) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3292) 	uint32_t rsvd3     : 20;  /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3293) 	uint32_t gasabt    :  1;  /* Grant async abts status notice       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3294) 	uint32_t rsvd4     :  2;  /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3295) 	uint32_t gbg       :  1;  /* Grant BlockGuard                     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3296) 	uint32_t gmv	   :  1;  /* Grant Max VPIs                       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3297) 	uint32_t gcrp	   :  1;  /* Grant Command Ring Polling           */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3298) 	uint32_t gsah	   :  1;  /* Grant Synchronous Abort Handling     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3299) 	uint32_t ghbs	   :  1;  /* Grant Host Backing Store             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3300) 	uint32_t ginb	   :  1;  /* Grant Interrupt Notification Block   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3301) 	uint32_t gerbm	   :  1;  /* Grant ERBM Request                   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3302) 	uint32_t gmx	   :  1;  /* Grant Max XRIs                       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3303) 	uint32_t gmr	   :  1;  /* Grant Max RPIs                       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3304) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3305) 	uint32_t gmr	   :  1;  /* Grant Max RPIs                       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3306) 	uint32_t gmx	   :  1;  /* Grant Max XRIs                       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3307) 	uint32_t gerbm	   :  1;  /* Grant ERBM Request                   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3308) 	uint32_t ginb	   :  1;  /* Grant Interrupt Notification Block   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3309) 	uint32_t ghbs	   :  1;  /* Grant Host Backing Store             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3310) 	uint32_t gsah	   :  1;  /* Grant Synchronous Abort Handling     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3311) 	uint32_t gcrp	   :  1;  /* Grant Command Ring Polling           */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3312) 	uint32_t gmv	   :  1;  /* Grant Max VPIs                       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3313) 	uint32_t gbg       :  1;  /* Grant BlockGuard                     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3314) 	uint32_t rsvd4     :  2;  /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3315) 	uint32_t gasabt    :  1;  /* Grant async abts status notice       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3316) 	uint32_t rsvd3     : 20;  /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3317) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3319) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3320) 	uint32_t max_rpi   : 16;  /* Max RPIs Port should configure       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3321) 	uint32_t max_xri   : 16;  /* Max XRIs Port should configure       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3322) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3323) 	uint32_t max_xri   : 16;  /* Max XRIs Port should configure       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3324) 	uint32_t max_rpi   : 16;  /* Max RPIs Port should configure       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3325) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3326) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3327) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3328) 	uint32_t max_hbq   : 16;  /* Max HBQs Host expect to configure    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3329) 	uint32_t rsvd5     : 16;  /* Max HBQs Host expect to configure    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3330) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3331) 	uint32_t rsvd5     : 16;  /* Max HBQs Host expect to configure    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3332) 	uint32_t max_hbq   : 16;  /* Max HBQs Host expect to configure    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3333) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3334) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3335) 	uint32_t rsvd6;           /* Reserved                             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3336) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3337) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3338) 	uint32_t rsvd7      : 16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3339) 	uint32_t max_vpi    : 16;  /* Max number of virt N-Ports           */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3340) #else	/*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3341) 	uint32_t max_vpi    : 16;  /* Max number of virt N-Ports           */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3342) 	uint32_t rsvd7      : 16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3343) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3344) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3345) } CONFIG_PORT_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3346) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3347) /* Structure for MB Command CONFIG_MSI (0x30) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3348) struct config_msi_var {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3349) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3350) 	uint32_t dfltMsgNum:8;	/* Default message number            */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3351) 	uint32_t rsvd1:11;	/* Reserved                          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3352) 	uint32_t NID:5;		/* Number of secondary attention IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3353) 	uint32_t rsvd2:5;	/* Reserved                          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3354) 	uint32_t dfltPresent:1;	/* Default message number present    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3355) 	uint32_t addFlag:1;	/* Add association flag              */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3356) 	uint32_t reportFlag:1;	/* Report association flag           */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3357) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3358) 	uint32_t reportFlag:1;	/* Report association flag           */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3359) 	uint32_t addFlag:1;	/* Add association flag              */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3360) 	uint32_t dfltPresent:1;	/* Default message number present    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3361) 	uint32_t rsvd2:5;	/* Reserved                          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3362) 	uint32_t NID:5;		/* Number of secondary attention IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3363) 	uint32_t rsvd1:11;	/* Reserved                          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3364) 	uint32_t dfltMsgNum:8;	/* Default message number            */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3365) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3366) 	uint32_t attentionConditions[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3367) 	uint8_t  attentionId[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3368) 	uint8_t  messageNumberByHA[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3369) 	uint8_t  messageNumberByID[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3370) 	uint32_t autoClearHA[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3371) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3372) 	uint32_t rsvd3:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3373) 	uint32_t autoClearID:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3374) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3375) 	uint32_t autoClearID:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3376) 	uint32_t rsvd3:16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3377) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3378) 	uint32_t rsvd4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3379) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3380) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3381) /* SLI-2 Port Control Block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3383) /* SLIM POINTER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3384) #define SLIMOFF 0x30		/* WORD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3385) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3386) typedef struct _SLI2_RDSC {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3387) 	uint32_t cmdEntries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3388) 	uint32_t cmdAddrLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3389) 	uint32_t cmdAddrHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3390) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3391) 	uint32_t rspEntries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3392) 	uint32_t rspAddrLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3393) 	uint32_t rspAddrHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3394) } SLI2_RDSC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3395) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3396) typedef struct _PCB {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3397) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3398) 	uint32_t type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3399) #define TYPE_NATIVE_SLI2       0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3400) 	uint32_t feature:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3401) #define FEATURE_INITIAL_SLI2   0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3402) 	uint32_t rsvd:12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3403) 	uint32_t maxRing:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3404) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3405) 	uint32_t maxRing:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3406) 	uint32_t rsvd:12;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3407) 	uint32_t feature:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3408) #define FEATURE_INITIAL_SLI2   0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3409) 	uint32_t type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3410) #define TYPE_NATIVE_SLI2       0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3411) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3412) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3413) 	uint32_t mailBoxSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3414) 	uint32_t mbAddrLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3415) 	uint32_t mbAddrHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3416) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3417) 	uint32_t hgpAddrLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3418) 	uint32_t hgpAddrHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3419) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3420) 	uint32_t pgpAddrLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3421) 	uint32_t pgpAddrHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3422) 	SLI2_RDSC rdsc[MAX_SLI3_RINGS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3423) } PCB_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3424) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3425) /* NEW_FEATURE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3426) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3427) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3428) 	uint32_t rsvd0:27;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3429) 	uint32_t discardFarp:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3430) 	uint32_t IPEnable:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3431) 	uint32_t nodeName:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3432) 	uint32_t portName:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3433) 	uint32_t filterEnable:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3434) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3435) 	uint32_t filterEnable:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3436) 	uint32_t portName:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3437) 	uint32_t nodeName:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3438) 	uint32_t IPEnable:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3439) 	uint32_t discardFarp:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3440) 	uint32_t rsvd:27;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3441) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3442) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3443) 	uint8_t portname[8];	/* Used to be struct lpfc_name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3444) 	uint8_t nodename[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3445) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3446) 	uint32_t rsvd2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3447) 	uint32_t rsvd3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3448) 	uint32_t IPAddress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3449) } CONFIG_FARP_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3450) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3451) /* Structure for MB Command MBX_ASYNCEVT_ENABLE (0x33) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3452) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3453) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3454) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3455) 	uint32_t rsvd:30;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3456) 	uint32_t ring:2;	/* Ring for ASYNC_EVENT iocb Bits 0-1*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3457) #else /*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3458) 	uint32_t ring:2;	/* Ring for ASYNC_EVENT iocb Bits 0-1*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3459) 	uint32_t rsvd:30;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3460) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3461) } ASYNCEVT_ENABLE_VAR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3462) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3463) /* Union of all Mailbox Command types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3464) #define MAILBOX_CMD_WSIZE	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3465) #define MAILBOX_CMD_SIZE	(MAILBOX_CMD_WSIZE * sizeof(uint32_t))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3466) /* ext_wsize times 4 bytes should not be greater than max xmit size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3467) #define MAILBOX_EXT_WSIZE	512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3468) #define MAILBOX_EXT_SIZE	(MAILBOX_EXT_WSIZE * sizeof(uint32_t))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3469) #define MAILBOX_HBA_EXT_OFFSET  0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3470) /* max mbox xmit size is a page size for sysfs IO operations */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3471) #define MAILBOX_SYSFS_MAX	4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3472) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3473) typedef union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3474) 	uint32_t varWords[MAILBOX_CMD_WSIZE - 1]; /* first word is type/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3475) 						    * feature/max ring number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3476) 						    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3477) 	LOAD_SM_VAR varLdSM;		/* cmd =  1 (LOAD_SM)        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3478) 	READ_NV_VAR varRDnvp;		/* cmd =  2 (READ_NVPARMS)   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3479) 	WRITE_NV_VAR varWTnvp;		/* cmd =  3 (WRITE_NVPARMS)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3480) 	BIU_DIAG_VAR varBIUdiag;	/* cmd =  4 (RUN_BIU_DIAG)   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3481) 	INIT_LINK_VAR varInitLnk;	/* cmd =  5 (INIT_LINK)      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3482) 	DOWN_LINK_VAR varDwnLnk;	/* cmd =  6 (DOWN_LINK)      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3483) 	CONFIG_LINK varCfgLnk;		/* cmd =  7 (CONFIG_LINK)    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3484) 	PART_SLIM_VAR varSlim;		/* cmd =  8 (PART_SLIM)      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3485) 	CONFIG_RING_VAR varCfgRing;	/* cmd =  9 (CONFIG_RING)    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3486) 	RESET_RING_VAR varRstRing;	/* cmd = 10 (RESET_RING)     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3487) 	READ_CONFIG_VAR varRdConfig;	/* cmd = 11 (READ_CONFIG)    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3488) 	READ_RCONF_VAR varRdRConfig;	/* cmd = 12 (READ_RCONFIG)   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3489) 	READ_SPARM_VAR varRdSparm;	/* cmd = 13 (READ_SPARM(64)) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3490) 	READ_STATUS_VAR varRdStatus;	/* cmd = 14 (READ_STATUS)    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3491) 	READ_RPI_VAR varRdRPI;		/* cmd = 15 (READ_RPI(64))   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3492) 	READ_XRI_VAR varRdXRI;		/* cmd = 16 (READ_XRI)       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3493) 	READ_REV_VAR varRdRev;		/* cmd = 17 (READ_REV)       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3494) 	READ_LNK_VAR varRdLnk;		/* cmd = 18 (READ_LNK_STAT)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3495) 	REG_LOGIN_VAR varRegLogin;	/* cmd = 19 (REG_LOGIN(64))  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3496) 	UNREG_LOGIN_VAR varUnregLogin;	/* cmd = 20 (UNREG_LOGIN)    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3497) 	CLEAR_LA_VAR varClearLA;	/* cmd = 22 (CLEAR_LA)       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3498) 	DUMP_VAR varDmp;		/* Warm Start DUMP mbx cmd   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3499) 	UNREG_D_ID_VAR varUnregDID;	/* cmd = 0x23 (UNREG_D_ID)   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3500) 	CONFIG_FARP_VAR varCfgFarp;	/* cmd = 0x25 (CONFIG_FARP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3501) 					 * NEW_FEATURE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3502) 					 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3503) 	struct config_hbq_var varCfgHbq;/* cmd = 0x7c (CONFIG_HBQ)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3504) 	struct update_cfg_var varUpdateCfg; /* cmd = 0x1B (UPDATE_CFG)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3505) 	CONFIG_PORT_VAR varCfgPort;	/* cmd = 0x88 (CONFIG_PORT)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3506) 	struct lpfc_mbx_read_top varReadTop; /* cmd = 0x95 (READ_TOPOLOGY) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3507) 	REG_VPI_VAR varRegVpi;		/* cmd = 0x96 (REG_VPI) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3508) 	UNREG_VPI_VAR varUnregVpi;	/* cmd = 0x97 (UNREG_VPI) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3509) 	ASYNCEVT_ENABLE_VAR varCfgAsyncEvent; /*cmd = x33 (CONFIG_ASYNC) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3510) 	struct READ_EVENT_LOG_VAR varRdEventLog;	/* cmd = 0x38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3511) 							 * (READ_EVENT_LOG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3512) 							 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3513) 	struct config_msi_var varCfgMSI;/* cmd = x30 (CONFIG_MSI)     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3514) } MAILVARIANTS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3515) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3516) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3517)  * SLI-2 specific structures
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3518)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3519) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3520) struct lpfc_hgp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3521) 	__le32 cmdPutInx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3522) 	__le32 rspGetInx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3523) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3524) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3525) struct lpfc_pgp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3526) 	__le32 cmdGetInx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3527) 	__le32 rspPutInx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3528) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3529) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3530) struct sli2_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3531) 	uint32_t unused1[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3532) 	struct lpfc_hgp host[MAX_SLI3_RINGS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3533) 	struct lpfc_pgp port[MAX_SLI3_RINGS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3534) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3535) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3536) struct sli3_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3537) 	struct lpfc_hgp host[MAX_SLI3_RINGS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3538) 	uint32_t reserved[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3539) 	uint32_t hbq_put[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3540) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3541) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3542) struct sli3_pgp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3543) 	struct lpfc_pgp port[MAX_SLI3_RINGS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3544) 	uint32_t hbq_get[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3545) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3546) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3547) union sli_var {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3548) 	struct sli2_desc	s2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3549) 	struct sli3_desc	s3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3550) 	struct sli3_pgp		s3_pgp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3551) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3552) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3553) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3554) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3555) 	uint16_t mbxStatus;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3556) 	uint8_t mbxCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3557) 	uint8_t mbxReserved:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3558) 	uint8_t mbxHc:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3559) 	uint8_t mbxOwner:1;	/* Low order bit first word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3560) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3561) 	uint8_t mbxOwner:1;	/* Low order bit first word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3562) 	uint8_t mbxHc:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3563) 	uint8_t mbxReserved:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3564) 	uint8_t mbxCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3565) 	uint16_t mbxStatus;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3566) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3567) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3568) 	MAILVARIANTS un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3569) 	union sli_var us;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3570) } MAILBOX_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3571) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3572) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3573)  *    Begin Structure Definitions for IOCB Commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3574)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3575) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3576) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3577) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3578) 	uint8_t statAction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3579) 	uint8_t statRsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3580) 	uint8_t statBaExp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3581) 	uint8_t statLocalError;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3582) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3583) 	uint8_t statLocalError;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3584) 	uint8_t statBaExp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3585) 	uint8_t statRsn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3586) 	uint8_t statAction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3587) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3588) 	/* statRsn  P/F_RJT reason codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3589) #define RJT_BAD_D_ID       0x01	/* Invalid D_ID field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3590) #define RJT_BAD_S_ID       0x02	/* Invalid S_ID field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3591) #define RJT_UNAVAIL_TEMP   0x03	/* N_Port unavailable temp. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3592) #define RJT_UNAVAIL_PERM   0x04	/* N_Port unavailable perm. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3593) #define RJT_UNSUP_CLASS    0x05	/* Class not supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3594) #define RJT_DELIM_ERR      0x06	/* Delimiter usage error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3595) #define RJT_UNSUP_TYPE     0x07	/* Type not supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3596) #define RJT_BAD_CONTROL    0x08	/* Invalid link conrtol */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3597) #define RJT_BAD_RCTL       0x09	/* R_CTL invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3598) #define RJT_BAD_FCTL       0x0A	/* F_CTL invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3599) #define RJT_BAD_OXID       0x0B	/* OX_ID invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3600) #define RJT_BAD_RXID       0x0C	/* RX_ID invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3601) #define RJT_BAD_SEQID      0x0D	/* SEQ_ID invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3602) #define RJT_BAD_DFCTL      0x0E	/* DF_CTL invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3603) #define RJT_BAD_SEQCNT     0x0F	/* SEQ_CNT invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3604) #define RJT_BAD_PARM       0x10	/* Param. field invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3605) #define RJT_XCHG_ERR       0x11	/* Exchange error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3606) #define RJT_PROT_ERR       0x12	/* Protocol error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3607) #define RJT_BAD_LENGTH     0x13	/* Invalid Length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3608) #define RJT_UNEXPECTED_ACK 0x14	/* Unexpected ACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3609) #define RJT_LOGIN_REQUIRED 0x16	/* Login required */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3610) #define RJT_TOO_MANY_SEQ   0x17	/* Excessive sequences */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3611) #define RJT_XCHG_NOT_STRT  0x18	/* Exchange not started */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3612) #define RJT_UNSUP_SEC_HDR  0x19	/* Security hdr not supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3613) #define RJT_UNAVAIL_PATH   0x1A	/* Fabric Path not available */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3614) #define RJT_VENDOR_UNIQUE  0xFF	/* Vendor unique error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3615) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3616) #define IOERR_SUCCESS                 0x00	/* statLocalError */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3617) #define IOERR_MISSING_CONTINUE        0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3618) #define IOERR_SEQUENCE_TIMEOUT        0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3619) #define IOERR_INTERNAL_ERROR          0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3620) #define IOERR_INVALID_RPI             0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3621) #define IOERR_NO_XRI                  0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3622) #define IOERR_ILLEGAL_COMMAND         0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3623) #define IOERR_XCHG_DROPPED            0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3624) #define IOERR_ILLEGAL_FIELD           0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3625) #define IOERR_BAD_CONTINUE            0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3626) #define IOERR_TOO_MANY_BUFFERS        0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3627) #define IOERR_RCV_BUFFER_WAITING      0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3628) #define IOERR_NO_CONNECTION           0x0C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3629) #define IOERR_TX_DMA_FAILED           0x0D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3630) #define IOERR_RX_DMA_FAILED           0x0E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3631) #define IOERR_ILLEGAL_FRAME           0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3632) #define IOERR_EXTRA_DATA              0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3633) #define IOERR_NO_RESOURCES            0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3634) #define IOERR_RESERVED                0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3635) #define IOERR_ILLEGAL_LENGTH          0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3636) #define IOERR_UNSUPPORTED_FEATURE     0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3637) #define IOERR_ABORT_IN_PROGRESS       0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3638) #define IOERR_ABORT_REQUESTED         0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3639) #define IOERR_RECEIVE_BUFFER_TIMEOUT  0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3640) #define IOERR_LOOP_OPEN_FAILURE       0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3641) #define IOERR_RING_RESET              0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3642) #define IOERR_LINK_DOWN               0x1A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3643) #define IOERR_CORRUPTED_DATA          0x1B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3644) #define IOERR_CORRUPTED_RPI           0x1C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3645) #define IOERR_OUT_OF_ORDER_DATA       0x1D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3646) #define IOERR_OUT_OF_ORDER_ACK        0x1E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3647) #define IOERR_DUP_FRAME               0x1F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3648) #define IOERR_LINK_CONTROL_FRAME      0x20	/* ACK_N received */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3649) #define IOERR_BAD_HOST_ADDRESS        0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3650) #define IOERR_RCV_HDRBUF_WAITING      0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3651) #define IOERR_MISSING_HDR_BUFFER      0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3652) #define IOERR_MSEQ_CHAIN_CORRUPTED    0x24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3653) #define IOERR_ABORTMULT_REQUESTED     0x25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3654) #define IOERR_BUFFER_SHORTAGE         0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3655) #define IOERR_DEFAULT                 0x29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3656) #define IOERR_CNT                     0x2A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3657) #define IOERR_SLER_FAILURE            0x46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3658) #define IOERR_SLER_CMD_RCV_FAILURE    0x47
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3659) #define IOERR_SLER_REC_RJT_ERR        0x48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3660) #define IOERR_SLER_REC_SRR_RETRY_ERR  0x49
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3661) #define IOERR_SLER_SRR_RJT_ERR        0x4A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3662) #define IOERR_SLER_RRQ_RJT_ERR        0x4C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3663) #define IOERR_SLER_RRQ_RETRY_ERR      0x4D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3664) #define IOERR_SLER_ABTS_ERR           0x4E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3665) #define IOERR_ELXSEC_KEY_UNWRAP_ERROR		0xF0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3666) #define IOERR_ELXSEC_KEY_UNWRAP_COMPARE_ERROR	0xF1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3667) #define IOERR_ELXSEC_CRYPTO_ERROR		0xF2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3668) #define IOERR_ELXSEC_CRYPTO_COMPARE_ERROR	0xF3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3669) #define IOERR_DRVR_MASK               0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3670) #define IOERR_SLI_DOWN                0x101  /* ulpStatus  - Driver defined */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3671) #define IOERR_SLI_BRESET              0x102
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3672) #define IOERR_SLI_ABORTED             0x103
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3673) #define IOERR_PARAM_MASK              0x1ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3674) } PARM_ERR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3676) typedef union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3677) 	struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3678) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3679) 		uint8_t Rctl;	/* R_CTL field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3680) 		uint8_t Type;	/* TYPE field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3681) 		uint8_t Dfctl;	/* DF_CTL field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3682) 		uint8_t Fctl;	/* Bits 0-7 of IOCB word 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3683) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3684) 		uint8_t Fctl;	/* Bits 0-7 of IOCB word 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3685) 		uint8_t Dfctl;	/* DF_CTL field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3686) 		uint8_t Type;	/* TYPE field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3687) 		uint8_t Rctl;	/* R_CTL field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3688) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3689) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3690) #define BC      0x02		/* Broadcast Received  - Fctl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3691) #define SI      0x04		/* Sequence Initiative */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3692) #define LA      0x08		/* Ignore Link Attention state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3693) #define LS      0x80		/* Last Sequence */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3694) 	} hcsw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3695) 	uint32_t reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3696) } WORD5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3697) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3698) /* IOCB Command template for a generic response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3699) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3700) 	uint32_t reserved[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3701) 	PARM_ERR perr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3702) } GENERIC_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3703) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3704) /* IOCB Command template for XMIT / XMIT_BCAST / RCV_SEQUENCE / XMIT_ELS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3705) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3706) 	struct ulp_bde xrsqbde[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3707) 	uint32_t xrsqRo;	/* Starting Relative Offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3708) 	WORD5 w5;		/* Header control/status word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3709) } XR_SEQ_FIELDS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3710) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3711) /* IOCB Command template for ELS_REQUEST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3712) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3713) 	struct ulp_bde elsReq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3714) 	struct ulp_bde elsRsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3715) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3716) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3717) 	uint32_t word4Rsvd:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3718) 	uint32_t fl:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3719) 	uint32_t myID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3720) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3721) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3722) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3723) 	uint32_t myID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3724) 	uint32_t fl:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3725) 	uint32_t word4Rsvd:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3726) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3727) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3728) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3729) } ELS_REQUEST;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3730) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3731) /* IOCB Command template for RCV_ELS_REQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3732) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3733) 	struct ulp_bde elsReq[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3734) 	uint32_t parmRo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3735) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3736) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3737) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3738) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3739) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3740) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3741) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3742) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3743) } RCV_ELS_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3744) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3745) /* IOCB Command template for ABORT / CLOSE_XRI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3746) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3747) 	uint32_t rsvd[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3748) 	uint32_t abortType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3749) #define ABORT_TYPE_ABTX  0x00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3750) #define ABORT_TYPE_ABTS  0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3751) 	uint32_t parm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3752) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3753) 	uint16_t abortContextTag; /* ulpContext from command to abort/close */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3754) 	uint16_t abortIoTag;	/* ulpIoTag from command to abort/close */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3755) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3756) 	uint16_t abortIoTag;	/* ulpIoTag from command to abort/close */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3757) 	uint16_t abortContextTag; /* ulpContext from command to abort/close */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3758) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3759) } AC_XRI;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3760) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3761) /* IOCB Command template for ABORT_MXRI64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3762) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3763) 	uint32_t rsvd[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3764) 	uint32_t abortType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3765) 	uint32_t parm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3766) 	uint32_t iotag32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3767) } A_MXRI64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3768) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3769) /* IOCB Command template for GET_RPI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3770) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3771) 	uint32_t rsvd[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3772) 	uint32_t parmRo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3773) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3774) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3775) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3776) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3777) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3778) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3779) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3780) } GET_RPI;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3781) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3782) /* IOCB Command template for all FCP Initiator commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3783) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3784) 	struct ulp_bde fcpi_cmnd;	/* FCP_CMND payload descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3785) 	struct ulp_bde fcpi_rsp;	/* Rcv buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3786) 	uint32_t fcpi_parm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3787) 	uint32_t fcpi_XRdy;	/* transfer ready for IWRITE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3788) } FCPI_FIELDS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3789) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3790) /* IOCB Command template for all FCP Target commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3791) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3792) 	struct ulp_bde fcpt_Buffer[2];	/* FCP_CMND payload descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3793) 	uint32_t fcpt_Offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3794) 	uint32_t fcpt_Length;	/* transfer ready for IWRITE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3795) } FCPT_FIELDS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3796) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3797) /* SLI-2 IOCB structure definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3798) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3799) /* IOCB Command template for 64 bit XMIT / XMIT_BCAST / XMIT_ELS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3800) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3801) 	ULP_BDL bdl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3802) 	uint32_t xrsqRo;	/* Starting Relative Offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3803) 	WORD5 w5;		/* Header control/status word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3804) } XMT_SEQ_FIELDS64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3805) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3806) /* This word is remote ports D_ID for XMIT_ELS_RSP64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3807) #define xmit_els_remoteID xrsqRo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3808) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3809) /* IOCB Command template for 64 bit RCV_SEQUENCE64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3810) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3811) 	struct ulp_bde64 rcvBde;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3812) 	uint32_t rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3813) 	uint32_t xrsqRo;	/* Starting Relative Offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3814) 	WORD5 w5;		/* Header control/status word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3815) } RCV_SEQ_FIELDS64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3816) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3817) /* IOCB Command template for ELS_REQUEST64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3818) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3819) 	ULP_BDL bdl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3820) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3821) 	uint32_t word4Rsvd:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3822) 	uint32_t fl:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3823) 	uint32_t myID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3824) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3825) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3826) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3827) 	uint32_t myID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3828) 	uint32_t fl:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3829) 	uint32_t word4Rsvd:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3830) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3831) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3832) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3833) } ELS_REQUEST64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3834) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3835) /* IOCB Command template for GEN_REQUEST64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3836) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3837) 	ULP_BDL bdl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3838) 	uint32_t xrsqRo;	/* Starting Relative Offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3839) 	WORD5 w5;		/* Header control/status word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3840) } GEN_REQUEST64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3841) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3842) /* IOCB Command template for RCV_ELS_REQ64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3843) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3844) 	struct ulp_bde64 elsReq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3845) 	uint32_t rcvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3846) 	uint32_t parmRo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3847) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3848) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3849) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3850) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3851) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3852) 	uint32_t remoteID:24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3853) 	uint32_t word5Rsvd:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3854) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3855) } RCV_ELS_REQ64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3856) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3857) /* IOCB Command template for RCV_SEQ64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3858) struct rcv_seq64 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3859) 	struct ulp_bde64 elsReq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3860) 	uint32_t hbq_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3861) 	uint32_t parmRo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3862) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3863) 	uint32_t rctl:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3864) 	uint32_t type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3865) 	uint32_t dfctl:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3866) 	uint32_t ls:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3867) 	uint32_t fs:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3868) 	uint32_t rsvd2:3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3869) 	uint32_t si:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3870) 	uint32_t bc:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3871) 	uint32_t rsvd3:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3872) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3873) 	uint32_t rsvd3:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3874) 	uint32_t bc:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3875) 	uint32_t si:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3876) 	uint32_t rsvd2:3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3877) 	uint32_t fs:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3878) 	uint32_t ls:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3879) 	uint32_t dfctl:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3880) 	uint32_t type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3881) 	uint32_t rctl:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3882) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3883) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3884) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3885) /* IOCB Command template for all 64 bit FCP Initiator commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3886) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3887) 	ULP_BDL bdl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3888) 	uint32_t fcpi_parm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3889) 	uint32_t fcpi_XRdy;	/* transfer ready for IWRITE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3890) } FCPI_FIELDS64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3891) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3892) /* IOCB Command template for all 64 bit FCP Target commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3893) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3894) 	ULP_BDL bdl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3895) 	uint32_t fcpt_Offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3896) 	uint32_t fcpt_Length;	/* transfer ready for IWRITE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3897) } FCPT_FIELDS64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3898) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3899) /* IOCB Command template for Async Status iocb commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3900) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3901) 	uint32_t rsvd[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3902) 	uint32_t param;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3903) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3904) 	uint16_t evt_code;		/* High order bits word 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3905) 	uint16_t sub_ctxt_tag;		/* Low  order bits word 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3906) #else   /*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3907) 	uint16_t sub_ctxt_tag;		/* High order bits word 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3908) 	uint16_t evt_code;		/* Low  order bits word 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3909) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3910) } ASYNCSTAT_FIELDS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3911) #define ASYNC_TEMP_WARN		0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3912) #define ASYNC_TEMP_SAFE		0x101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3913) #define ASYNC_STATUS_CN		0x102
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3914) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3915) /* IOCB Command template for CMD_IOCB_RCV_ELS64_CX (0xB7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3916)    or CMD_IOCB_RCV_SEQ64_CX (0xB5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3917) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3918) struct rcv_sli3 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3919) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3920) 	uint16_t ox_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3921) 	uint16_t seq_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3922) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3923) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3924) 	uint16_t word9Rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3925) #else  /*  __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3926) 	uint16_t seq_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3927) 	uint16_t ox_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3928) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3929) 	uint16_t word9Rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3930) 	uint16_t vpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3931) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3932) 	uint32_t word10Rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3933) 	uint32_t acc_len;      /* accumulated length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3934) 	struct ulp_bde64 bde2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3935) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3936) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3937) /* Structure used for a single HBQ entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3938) struct lpfc_hbq_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3939) 	struct ulp_bde64 bde;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3940) 	uint32_t buffer_tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3941) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3942) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3943) /* IOCB Command template for QUE_XRI64_CX (0xB3) command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3944) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3945) 	struct lpfc_hbq_entry   buff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3946) 	uint32_t                rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3947) 	uint32_t		rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3948) } QUE_XRI64_CX_FIELDS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3949) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3950) struct que_xri64cx_ext_fields {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3951) 	uint32_t	iotag64_low;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3952) 	uint32_t	iotag64_high;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3953) 	uint32_t	ebde_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3954) 	uint32_t	rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3955) 	struct lpfc_hbq_entry	buff[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3956) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3957) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3958) struct sli3_bg_fields {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3959) 	uint32_t filler[6];	/* word 8-13 in IOCB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3960) 	uint32_t bghm;		/* word 14 - BlockGuard High Water Mark */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3961) /* Bitfields for bgstat (BlockGuard Status - word 15 of IOCB) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3962) #define BGS_BIDIR_BG_PROF_MASK		0xff000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3963) #define BGS_BIDIR_BG_PROF_SHIFT		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3964) #define BGS_BIDIR_ERR_COND_FLAGS_MASK	0x003f0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3965) #define BGS_BIDIR_ERR_COND_SHIFT	16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3966) #define BGS_BG_PROFILE_MASK		0x0000ff00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3967) #define BGS_BG_PROFILE_SHIFT		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3968) #define BGS_INVALID_PROF_MASK		0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3969) #define BGS_INVALID_PROF_SHIFT		5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3970) #define BGS_UNINIT_DIF_BLOCK_MASK	0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3971) #define BGS_UNINIT_DIF_BLOCK_SHIFT	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3972) #define BGS_HI_WATER_MARK_PRESENT_MASK	0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3973) #define BGS_HI_WATER_MARK_PRESENT_SHIFT	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3974) #define BGS_REFTAG_ERR_MASK		0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3975) #define BGS_REFTAG_ERR_SHIFT		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3976) #define BGS_APPTAG_ERR_MASK		0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3977) #define BGS_APPTAG_ERR_SHIFT		1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3978) #define BGS_GUARD_ERR_MASK		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3979) #define BGS_GUARD_ERR_SHIFT		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3980) 	uint32_t bgstat;	/* word 15 - BlockGuard Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3981) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3982) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3983) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3984) lpfc_bgs_get_bidir_bg_prof(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3985) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3986) 	return (bgstat & BGS_BIDIR_BG_PROF_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3987) 				BGS_BIDIR_BG_PROF_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3988) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3989) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3990) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3991) lpfc_bgs_get_bidir_err_cond(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3992) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3993) 	return (bgstat & BGS_BIDIR_ERR_COND_FLAGS_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3994) 				BGS_BIDIR_ERR_COND_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3995) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3996) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3997) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3998) lpfc_bgs_get_bg_prof(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3999) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4000) 	return (bgstat & BGS_BG_PROFILE_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4001) 				BGS_BG_PROFILE_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4002) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4003) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4004) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4005) lpfc_bgs_get_invalid_prof(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4006) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4007) 	return (bgstat & BGS_INVALID_PROF_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4008) 				BGS_INVALID_PROF_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4009) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4010) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4011) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4012) lpfc_bgs_get_uninit_dif_block(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4013) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4014) 	return (bgstat & BGS_UNINIT_DIF_BLOCK_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4015) 				BGS_UNINIT_DIF_BLOCK_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4016) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4017) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4018) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4019) lpfc_bgs_get_hi_water_mark_present(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4020) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4021) 	return (bgstat & BGS_HI_WATER_MARK_PRESENT_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4022) 				BGS_HI_WATER_MARK_PRESENT_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4023) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4024) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4025) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4026) lpfc_bgs_get_reftag_err(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4027) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4028) 	return (bgstat & BGS_REFTAG_ERR_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4029) 				BGS_REFTAG_ERR_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4030) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4031) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4032) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4033) lpfc_bgs_get_apptag_err(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4034) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4035) 	return (bgstat & BGS_APPTAG_ERR_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4036) 				BGS_APPTAG_ERR_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4037) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4038) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4039) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4040) lpfc_bgs_get_guard_err(uint32_t bgstat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4041) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4042) 	return (bgstat & BGS_GUARD_ERR_MASK) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4043) 				BGS_GUARD_ERR_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4044) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4045) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4046) #define LPFC_EXT_DATA_BDE_COUNT 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4047) struct fcp_irw_ext {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4048) 	uint32_t	io_tag64_low;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4049) 	uint32_t	io_tag64_high;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4050) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4051) 	uint8_t		reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4052) 	uint8_t		reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4053) 	uint8_t		reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4054) 	uint8_t		ebde_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4055) #else  /* __LITTLE_ENDIAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4056) 	uint8_t		ebde_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4057) 	uint8_t		reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4058) 	uint8_t		reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4059) 	uint8_t		reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4060) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4061) 	uint32_t	reserved4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4062) 	struct ulp_bde64 rbde;		/* response bde */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4063) 	struct ulp_bde64 dbde[LPFC_EXT_DATA_BDE_COUNT];	/* data BDE or BPL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4064) 	uint8_t icd[32];		/* immediate command data (32 bytes) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4065) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4066) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4067) typedef struct _IOCB {	/* IOCB structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4068) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4069) 		GENERIC_RSP grsp;	/* Generic response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4070) 		XR_SEQ_FIELDS xrseq;	/* XMIT / BCAST / RCV_SEQUENCE cmd */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4071) 		struct ulp_bde cont[3];	/* up to 3 continuation bdes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4072) 		RCV_ELS_REQ rcvels;	/* RCV_ELS_REQ template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4073) 		AC_XRI acxri;	/* ABORT / CLOSE_XRI template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4074) 		A_MXRI64 amxri;	/* abort multiple xri command overlay */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4075) 		GET_RPI getrpi;	/* GET_RPI template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4076) 		FCPI_FIELDS fcpi;	/* FCP Initiator template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4077) 		FCPT_FIELDS fcpt;	/* FCP target template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4078) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4079) 		/* SLI-2 structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4080) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4081) 		struct ulp_bde64 cont64[2];  /* up to 2 64 bit continuation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4082) 					      * bde_64s */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4083) 		ELS_REQUEST64 elsreq64;	/* ELS_REQUEST template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4084) 		GEN_REQUEST64 genreq64;	/* GEN_REQUEST template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4085) 		RCV_ELS_REQ64 rcvels64;	/* RCV_ELS_REQ template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4086) 		XMT_SEQ_FIELDS64 xseq64;	/* XMIT / BCAST cmd */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4087) 		FCPI_FIELDS64 fcpi64;	/* FCP 64 bit Initiator template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4088) 		FCPT_FIELDS64 fcpt64;	/* FCP 64 bit target template */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4089) 		ASYNCSTAT_FIELDS asyncstat; /* async_status iocb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4090) 		QUE_XRI64_CX_FIELDS quexri64cx; /* que_xri64_cx fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4091) 		struct rcv_seq64 rcvseq64;	/* RCV_SEQ64 and RCV_CONT64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4092) 		struct sli4_bls_rsp bls_rsp; /* UNSOL ABTS BLS_RSP params */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4093) 		uint32_t ulpWord[IOCB_WORD_SZ - 2];	/* generic 6 'words' */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4094) 	} un;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4095) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4096) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4097) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4098) 			uint16_t ulpContext;	/* High order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4099) 			uint16_t ulpIoTag;	/* Low  order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4100) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4101) 			uint16_t ulpIoTag;	/* Low  order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4102) 			uint16_t ulpContext;	/* High order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4103) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4104) 		} t1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4105) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4106) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4107) 			uint16_t ulpContext;	/* High order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4108) 			uint16_t ulpIoTag1:2;	/* Low  order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4109) 			uint16_t ulpIoTag0:14;	/* Low  order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4110) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4111) 			uint16_t ulpIoTag0:14;	/* Low  order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4112) 			uint16_t ulpIoTag1:2;	/* Low  order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4113) 			uint16_t ulpContext;	/* High order bits word 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4114) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4115) 		} t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4116) 	} un1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4117) #define ulpContext un1.t1.ulpContext
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4118) #define ulpIoTag   un1.t1.ulpIoTag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4119) #define ulpIoTag0  un1.t2.ulpIoTag0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4121) #ifdef __BIG_ENDIAN_BITFIELD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4122) 	uint32_t ulpTimeout:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4123) 	uint32_t ulpXS:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4124) 	uint32_t ulpFCP2Rcvy:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4125) 	uint32_t ulpPU:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4126) 	uint32_t ulpIr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4127) 	uint32_t ulpClass:3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4128) 	uint32_t ulpCommand:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4129) 	uint32_t ulpStatus:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4130) 	uint32_t ulpBdeCount:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4131) 	uint32_t ulpLe:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4132) 	uint32_t ulpOwner:1;	/* Low order bit word 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4133) #else	/*  __LITTLE_ENDIAN_BITFIELD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4134) 	uint32_t ulpOwner:1;	/* Low order bit word 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4135) 	uint32_t ulpLe:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4136) 	uint32_t ulpBdeCount:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4137) 	uint32_t ulpStatus:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4138) 	uint32_t ulpCommand:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4139) 	uint32_t ulpClass:3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4140) 	uint32_t ulpIr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4141) 	uint32_t ulpPU:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4142) 	uint32_t ulpFCP2Rcvy:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4143) 	uint32_t ulpXS:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4144) 	uint32_t ulpTimeout:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4145) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4147) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4148) 		struct rcv_sli3 rcvsli3; /* words 8 - 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4150) 		/* words 8-31 used for que_xri_cx iocb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4151) 		struct que_xri64cx_ext_fields que_xri64cx_ext_words;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4152) 		struct fcp_irw_ext fcp_ext;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4153) 		uint32_t sli3Words[24]; /* 96 extra bytes for SLI-3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4155) 		/* words 8-15 for BlockGuard */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4156) 		struct sli3_bg_fields sli3_bg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4157) 	} unsli3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4159) #define ulpCt_h ulpXS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4160) #define ulpCt_l ulpFCP2Rcvy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4162) #define IOCB_FCP	   1	/* IOCB is used for FCP ELS cmds-ulpRsvByte */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4163) #define IOCB_IP		   2	/* IOCB is used for IP ELS cmds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4164) #define PARM_UNUSED        0	/* PU field (Word 4) not used */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4165) #define PARM_REL_OFF       1	/* PU field (Word 4) = R. O. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4166) #define PARM_READ_CHECK    2	/* PU field (Word 4) = Data Transfer Length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4167) #define PARM_NPIV_DID	   3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4168) #define CLASS1             0	/* Class 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4169) #define CLASS2             1	/* Class 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4170) #define CLASS3             2	/* Class 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4171) #define CLASS_FCP_INTERMIX 7	/* FCP Data->Cls 1, all else->Cls 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4172) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4173) #define IOSTAT_SUCCESS         0x0	/* ulpStatus  - HBA defined */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4174) #define IOSTAT_FCP_RSP_ERROR   0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4175) #define IOSTAT_REMOTE_STOP     0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4176) #define IOSTAT_LOCAL_REJECT    0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4177) #define IOSTAT_NPORT_RJT       0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4178) #define IOSTAT_FABRIC_RJT      0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4179) #define IOSTAT_NPORT_BSY       0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4180) #define IOSTAT_FABRIC_BSY      0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4181) #define IOSTAT_INTERMED_RSP    0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4182) #define IOSTAT_LS_RJT          0x9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4183) #define IOSTAT_BA_RJT          0xA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4184) #define IOSTAT_RSVD1           0xB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4185) #define IOSTAT_RSVD2           0xC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4186) #define IOSTAT_RSVD3           0xD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4187) #define IOSTAT_RSVD4           0xE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4188) #define IOSTAT_NEED_BUFFER     0xF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4189) #define IOSTAT_DRIVER_REJECT   0x10   /* ulpStatus  - Driver defined */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4190) #define IOSTAT_DEFAULT         0xF    /* Same as rsvd5 for now */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4191) #define IOSTAT_CNT             0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4193) } IOCB_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4196) #define SLI1_SLIM_SIZE   (4 * 1024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4198) /* Up to 498 IOCBs will fit into 16k
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4199)  * 256 (MAILBOX_t) + 140 (PCB_t) + ( 32 (IOCB_t) * 498 ) = < 16384
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4200)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4201) #define SLI2_SLIM_SIZE   (64 * 1024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4202) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4203) /* Maximum IOCBs that will fit in SLI2 slim */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4204) #define MAX_SLI2_IOCB    498
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4205) #define MAX_SLIM_IOCB_SIZE (SLI2_SLIM_SIZE - \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4206) 			    (sizeof(MAILBOX_t) + sizeof(PCB_t) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4207) 			    sizeof(uint32_t) * MAILBOX_EXT_WSIZE))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4208) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4209) /* HBQ entries are 4 words each = 4k */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4210) #define LPFC_TOTAL_HBQ_SIZE (sizeof(struct lpfc_hbq_entry) *  \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4211) 			     lpfc_sli_hbq_count())
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4213) struct lpfc_sli2_slim {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4214) 	MAILBOX_t mbx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4215) 	uint32_t  mbx_ext_words[MAILBOX_EXT_WSIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4216) 	PCB_t pcb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4217) 	IOCB_t IOCBs[MAX_SLIM_IOCB_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4218) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4220) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4221)  * This function checks PCI device to allow special handling for LC HBAs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4222)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4223)  * Parameters:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4224)  * device : struct pci_dev 's device field
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4225)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4226)  * return 1 => TRUE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4227)  *        0 => FALSE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4228)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4229) static inline int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4230) lpfc_is_LC_HBA(unsigned short device)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4231) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4232) 	if ((device == PCI_DEVICE_ID_TFLY) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4233) 	    (device == PCI_DEVICE_ID_PFLY) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4234) 	    (device == PCI_DEVICE_ID_LP101) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4235) 	    (device == PCI_DEVICE_ID_BMID) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4236) 	    (device == PCI_DEVICE_ID_BSMB) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4237) 	    (device == PCI_DEVICE_ID_ZMID) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4238) 	    (device == PCI_DEVICE_ID_ZSMB) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4239) 	    (device == PCI_DEVICE_ID_SAT_MID) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4240) 	    (device == PCI_DEVICE_ID_SAT_SMB) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4241) 	    (device == PCI_DEVICE_ID_RFLY))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4242) 		return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4243) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4244) 		return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4245) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4246) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4247) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4248)  * Determine if an IOCB failed because of a link event or firmware reset.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4249)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4250) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4251) static inline int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4252) lpfc_error_lost_link(IOCB_t *iocbp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4253) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4254) 	return (iocbp->ulpStatus == IOSTAT_LOCAL_REJECT &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4255) 		(iocbp->un.ulpWord[4] == IOERR_SLI_ABORTED ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4256) 		 iocbp->un.ulpWord[4] == IOERR_LINK_DOWN ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4257) 		 iocbp->un.ulpWord[4] == IOERR_SLI_DOWN));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4258) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4259) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4260) #define MENLO_TRANSPORT_TYPE 0xfe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4261) #define MENLO_CONTEXT 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4262) #define MENLO_PU 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4263) #define MENLO_TIMEOUT 30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4264) #define SETVAR_MLOMNT 0x103107
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4265) #define SETVAR_MLORST 0x103007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4266) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4267) #define BPL_ALIGN_SZ 8 /* 8 byte alignment for bpl and mbufs */