1*4882a593Smuzhiyun /******************************************************************* 2*4882a593Smuzhiyun * This file is part of the Emulex Linux Device Driver for * 3*4882a593Smuzhiyun * Fibre Channel Host Bus Adapters. * 4*4882a593Smuzhiyun * Copyright (C) 2017-2019 Broadcom. All Rights Reserved. The term * 5*4882a593Smuzhiyun * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6*4882a593Smuzhiyun * Copyright (C) 2009-2016 Emulex. All rights reserved. * 7*4882a593Smuzhiyun * EMULEX and SLI are trademarks of Emulex. * 8*4882a593Smuzhiyun * www.broadcom.com * 9*4882a593Smuzhiyun * * 10*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or * 11*4882a593Smuzhiyun * modify it under the terms of version 2 of the GNU General * 12*4882a593Smuzhiyun * Public License as published by the Free Software Foundation. * 13*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful. * 14*4882a593Smuzhiyun * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * 15*4882a593Smuzhiyun * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * 16*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE * 17*4882a593Smuzhiyun * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD * 18*4882a593Smuzhiyun * TO BE LEGALLY INVALID. See the GNU General Public License for * 19*4882a593Smuzhiyun * more details, a copy of which can be found in the file COPYING * 20*4882a593Smuzhiyun * included with this package. * 21*4882a593Smuzhiyun *******************************************************************/ 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #include <uapi/scsi/fc/fc_els.h> 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Macros to deal with bit fields. Each bit field must have 3 #defines 26*4882a593Smuzhiyun * associated with it (_SHIFT, _MASK, and _WORD). 27*4882a593Smuzhiyun * EG. For a bit field that is in the 7th bit of the "field4" field of a 28*4882a593Smuzhiyun * structure and is 2 bits in size the following #defines must exist: 29*4882a593Smuzhiyun * struct temp { 30*4882a593Smuzhiyun * uint32_t field1; 31*4882a593Smuzhiyun * uint32_t field2; 32*4882a593Smuzhiyun * uint32_t field3; 33*4882a593Smuzhiyun * uint32_t field4; 34*4882a593Smuzhiyun * #define example_bit_field_SHIFT 7 35*4882a593Smuzhiyun * #define example_bit_field_MASK 0x03 36*4882a593Smuzhiyun * #define example_bit_field_WORD field4 37*4882a593Smuzhiyun * uint32_t field5; 38*4882a593Smuzhiyun * }; 39*4882a593Smuzhiyun * Then the macros below may be used to get or set the value of that field. 40*4882a593Smuzhiyun * EG. To get the value of the bit field from the above example: 41*4882a593Smuzhiyun * struct temp t1; 42*4882a593Smuzhiyun * value = bf_get(example_bit_field, &t1); 43*4882a593Smuzhiyun * And then to set that bit field: 44*4882a593Smuzhiyun * bf_set(example_bit_field, &t1, 2); 45*4882a593Smuzhiyun * Or clear that bit field: 46*4882a593Smuzhiyun * bf_set(example_bit_field, &t1, 0); 47*4882a593Smuzhiyun */ 48*4882a593Smuzhiyun #define bf_get_be32(name, ptr) \ 49*4882a593Smuzhiyun ((be32_to_cpu((ptr)->name##_WORD) >> name##_SHIFT) & name##_MASK) 50*4882a593Smuzhiyun #define bf_get_le32(name, ptr) \ 51*4882a593Smuzhiyun ((le32_to_cpu((ptr)->name##_WORD) >> name##_SHIFT) & name##_MASK) 52*4882a593Smuzhiyun #define bf_get(name, ptr) \ 53*4882a593Smuzhiyun (((ptr)->name##_WORD >> name##_SHIFT) & name##_MASK) 54*4882a593Smuzhiyun #define bf_set_le32(name, ptr, value) \ 55*4882a593Smuzhiyun ((ptr)->name##_WORD = cpu_to_le32(((((value) & \ 56*4882a593Smuzhiyun name##_MASK) << name##_SHIFT) | (le32_to_cpu((ptr)->name##_WORD) & \ 57*4882a593Smuzhiyun ~(name##_MASK << name##_SHIFT))))) 58*4882a593Smuzhiyun #define bf_set(name, ptr, value) \ 59*4882a593Smuzhiyun ((ptr)->name##_WORD = ((((value) & name##_MASK) << name##_SHIFT) | \ 60*4882a593Smuzhiyun ((ptr)->name##_WORD & ~(name##_MASK << name##_SHIFT)))) 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun struct dma_address { 63*4882a593Smuzhiyun uint32_t addr_lo; 64*4882a593Smuzhiyun uint32_t addr_hi; 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun struct lpfc_sli_intf { 68*4882a593Smuzhiyun uint32_t word0; 69*4882a593Smuzhiyun #define lpfc_sli_intf_valid_SHIFT 29 70*4882a593Smuzhiyun #define lpfc_sli_intf_valid_MASK 0x00000007 71*4882a593Smuzhiyun #define lpfc_sli_intf_valid_WORD word0 72*4882a593Smuzhiyun #define LPFC_SLI_INTF_VALID 6 73*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint2_SHIFT 24 74*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint2_MASK 0x0000001F 75*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint2_WORD word0 76*4882a593Smuzhiyun #define LPFC_SLI_INTF_SLI_HINT2_NONE 0 77*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint1_SHIFT 16 78*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint1_MASK 0x000000FF 79*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint1_WORD word0 80*4882a593Smuzhiyun #define LPFC_SLI_INTF_SLI_HINT1_NONE 0 81*4882a593Smuzhiyun #define LPFC_SLI_INTF_SLI_HINT1_1 1 82*4882a593Smuzhiyun #define LPFC_SLI_INTF_SLI_HINT1_2 2 83*4882a593Smuzhiyun #define lpfc_sli_intf_if_type_SHIFT 12 84*4882a593Smuzhiyun #define lpfc_sli_intf_if_type_MASK 0x0000000F 85*4882a593Smuzhiyun #define lpfc_sli_intf_if_type_WORD word0 86*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_0 0 87*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_1 1 88*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_2 2 89*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_6 6 90*4882a593Smuzhiyun #define lpfc_sli_intf_sli_family_SHIFT 8 91*4882a593Smuzhiyun #define lpfc_sli_intf_sli_family_MASK 0x0000000F 92*4882a593Smuzhiyun #define lpfc_sli_intf_sli_family_WORD word0 93*4882a593Smuzhiyun #define LPFC_SLI_INTF_FAMILY_BE2 0x0 94*4882a593Smuzhiyun #define LPFC_SLI_INTF_FAMILY_BE3 0x1 95*4882a593Smuzhiyun #define LPFC_SLI_INTF_FAMILY_LNCR_A0 0xa 96*4882a593Smuzhiyun #define LPFC_SLI_INTF_FAMILY_LNCR_B0 0xb 97*4882a593Smuzhiyun #define lpfc_sli_intf_slirev_SHIFT 4 98*4882a593Smuzhiyun #define lpfc_sli_intf_slirev_MASK 0x0000000F 99*4882a593Smuzhiyun #define lpfc_sli_intf_slirev_WORD word0 100*4882a593Smuzhiyun #define LPFC_SLI_INTF_REV_SLI3 3 101*4882a593Smuzhiyun #define LPFC_SLI_INTF_REV_SLI4 4 102*4882a593Smuzhiyun #define lpfc_sli_intf_func_type_SHIFT 0 103*4882a593Smuzhiyun #define lpfc_sli_intf_func_type_MASK 0x00000001 104*4882a593Smuzhiyun #define lpfc_sli_intf_func_type_WORD word0 105*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_PHYS 0 106*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_VIRT 1 107*4882a593Smuzhiyun }; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun #define LPFC_SLI4_MBX_EMBED true 110*4882a593Smuzhiyun #define LPFC_SLI4_MBX_NEMBED false 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define LPFC_SLI4_MB_WORD_COUNT 64 113*4882a593Smuzhiyun #define LPFC_MAX_MQ_PAGE 8 114*4882a593Smuzhiyun #define LPFC_MAX_WQ_PAGE_V0 4 115*4882a593Smuzhiyun #define LPFC_MAX_WQ_PAGE 8 116*4882a593Smuzhiyun #define LPFC_MAX_RQ_PAGE 8 117*4882a593Smuzhiyun #define LPFC_MAX_CQ_PAGE 4 118*4882a593Smuzhiyun #define LPFC_MAX_EQ_PAGE 8 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun #define LPFC_VIR_FUNC_MAX 32 /* Maximum number of virtual functions */ 121*4882a593Smuzhiyun #define LPFC_PCI_FUNC_MAX 5 /* Maximum number of PCI functions */ 122*4882a593Smuzhiyun #define LPFC_VFR_PAGE_SIZE 0x1000 /* 4KB BAR2 per-VF register page size */ 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* Define SLI4 Alignment requirements. */ 125*4882a593Smuzhiyun #define LPFC_ALIGN_16_BYTE 16 126*4882a593Smuzhiyun #define LPFC_ALIGN_64_BYTE 64 127*4882a593Smuzhiyun #define SLI4_PAGE_SIZE 4096 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun /* Define SLI4 specific definitions. */ 130*4882a593Smuzhiyun #define LPFC_MQ_CQE_BYTE_OFFSET 256 131*4882a593Smuzhiyun #define LPFC_MBX_CMD_HDR_LENGTH 16 132*4882a593Smuzhiyun #define LPFC_MBX_ERROR_RANGE 0x4000 133*4882a593Smuzhiyun #define LPFC_BMBX_BIT1_ADDR_HI 0x2 134*4882a593Smuzhiyun #define LPFC_BMBX_BIT1_ADDR_LO 0 135*4882a593Smuzhiyun #define LPFC_RPI_HDR_COUNT 64 136*4882a593Smuzhiyun #define LPFC_HDR_TEMPLATE_SIZE 4096 137*4882a593Smuzhiyun #define LPFC_RPI_ALLOC_ERROR 0xFFFF 138*4882a593Smuzhiyun #define LPFC_FCF_RECORD_WD_CNT 132 139*4882a593Smuzhiyun #define LPFC_ENTIRE_FCF_DATABASE 0 140*4882a593Smuzhiyun #define LPFC_DFLT_FCF_INDEX 0 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* Virtual function numbers */ 143*4882a593Smuzhiyun #define LPFC_VF0 0 144*4882a593Smuzhiyun #define LPFC_VF1 1 145*4882a593Smuzhiyun #define LPFC_VF2 2 146*4882a593Smuzhiyun #define LPFC_VF3 3 147*4882a593Smuzhiyun #define LPFC_VF4 4 148*4882a593Smuzhiyun #define LPFC_VF5 5 149*4882a593Smuzhiyun #define LPFC_VF6 6 150*4882a593Smuzhiyun #define LPFC_VF7 7 151*4882a593Smuzhiyun #define LPFC_VF8 8 152*4882a593Smuzhiyun #define LPFC_VF9 9 153*4882a593Smuzhiyun #define LPFC_VF10 10 154*4882a593Smuzhiyun #define LPFC_VF11 11 155*4882a593Smuzhiyun #define LPFC_VF12 12 156*4882a593Smuzhiyun #define LPFC_VF13 13 157*4882a593Smuzhiyun #define LPFC_VF14 14 158*4882a593Smuzhiyun #define LPFC_VF15 15 159*4882a593Smuzhiyun #define LPFC_VF16 16 160*4882a593Smuzhiyun #define LPFC_VF17 17 161*4882a593Smuzhiyun #define LPFC_VF18 18 162*4882a593Smuzhiyun #define LPFC_VF19 19 163*4882a593Smuzhiyun #define LPFC_VF20 20 164*4882a593Smuzhiyun #define LPFC_VF21 21 165*4882a593Smuzhiyun #define LPFC_VF22 22 166*4882a593Smuzhiyun #define LPFC_VF23 23 167*4882a593Smuzhiyun #define LPFC_VF24 24 168*4882a593Smuzhiyun #define LPFC_VF25 25 169*4882a593Smuzhiyun #define LPFC_VF26 26 170*4882a593Smuzhiyun #define LPFC_VF27 27 171*4882a593Smuzhiyun #define LPFC_VF28 28 172*4882a593Smuzhiyun #define LPFC_VF29 29 173*4882a593Smuzhiyun #define LPFC_VF30 30 174*4882a593Smuzhiyun #define LPFC_VF31 31 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun /* PCI function numbers */ 177*4882a593Smuzhiyun #define LPFC_PCI_FUNC0 0 178*4882a593Smuzhiyun #define LPFC_PCI_FUNC1 1 179*4882a593Smuzhiyun #define LPFC_PCI_FUNC2 2 180*4882a593Smuzhiyun #define LPFC_PCI_FUNC3 3 181*4882a593Smuzhiyun #define LPFC_PCI_FUNC4 4 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun /* SLI4 interface type-2 PDEV_CTL register */ 184*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_OFFSET 0x414 185*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_DRST 0x00000001 186*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_FRST 0x00000002 187*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_DD 0x00000004 188*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_LC 0x00000008 189*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_FRL_ALL 0x00 190*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_FRL_FC_FCOE 0x10 191*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_FRL_NIC 0x20 192*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_DDL_RAS 0x1000000 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun #define LPFC_FW_DUMP_REQUEST (LPFC_CTL_PDEV_CTL_DD | LPFC_CTL_PDEV_CTL_FRST) 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun /* Active interrupt test count */ 197*4882a593Smuzhiyun #define LPFC_ACT_INTR_CNT 4 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun /* Algrithmns for scheduling FCP commands to WQs */ 200*4882a593Smuzhiyun #define LPFC_FCP_SCHED_BY_HDWQ 0 201*4882a593Smuzhiyun #define LPFC_FCP_SCHED_BY_CPU 1 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun /* Algrithmns for NameServer Query after RSCN */ 204*4882a593Smuzhiyun #define LPFC_NS_QUERY_GID_FT 0 205*4882a593Smuzhiyun #define LPFC_NS_QUERY_GID_PT 1 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun /* Delay Multiplier constant */ 208*4882a593Smuzhiyun #define LPFC_DMULT_CONST 651042 209*4882a593Smuzhiyun #define LPFC_DMULT_MAX 1023 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun /* Configuration of Interrupts / sec for entire HBA port */ 212*4882a593Smuzhiyun #define LPFC_MIN_IMAX 5000 213*4882a593Smuzhiyun #define LPFC_MAX_IMAX 5000000 214*4882a593Smuzhiyun #define LPFC_DEF_IMAX 0 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun #define LPFC_MAX_AUTO_EQ_DELAY 120 217*4882a593Smuzhiyun #define LPFC_EQ_DELAY_STEP 15 218*4882a593Smuzhiyun #define LPFC_EQD_ISR_TRIGGER 20000 219*4882a593Smuzhiyun /* 1s intervals */ 220*4882a593Smuzhiyun #define LPFC_EQ_DELAY_MSECS 1000 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun #define LPFC_MIN_CPU_MAP 0 223*4882a593Smuzhiyun #define LPFC_MAX_CPU_MAP 1 224*4882a593Smuzhiyun #define LPFC_HBA_CPU_MAP 1 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun /* PORT_CAPABILITIES constants. */ 227*4882a593Smuzhiyun #define LPFC_MAX_SUPPORTED_PAGES 8 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun struct ulp_bde64 { 230*4882a593Smuzhiyun union ULP_BDE_TUS { 231*4882a593Smuzhiyun uint32_t w; 232*4882a593Smuzhiyun struct { 233*4882a593Smuzhiyun #ifdef __BIG_ENDIAN_BITFIELD 234*4882a593Smuzhiyun uint32_t bdeFlags:8; /* BDE Flags 0 IS A SUPPORTED 235*4882a593Smuzhiyun VALUE !! */ 236*4882a593Smuzhiyun uint32_t bdeSize:24; /* Size of buffer (in bytes) */ 237*4882a593Smuzhiyun #else /* __LITTLE_ENDIAN_BITFIELD */ 238*4882a593Smuzhiyun uint32_t bdeSize:24; /* Size of buffer (in bytes) */ 239*4882a593Smuzhiyun uint32_t bdeFlags:8; /* BDE Flags 0 IS A SUPPORTED 240*4882a593Smuzhiyun VALUE !! */ 241*4882a593Smuzhiyun #endif 242*4882a593Smuzhiyun #define BUFF_TYPE_BDE_64 0x00 /* BDE (Host_resident) */ 243*4882a593Smuzhiyun #define BUFF_TYPE_BDE_IMMED 0x01 /* Immediate Data BDE */ 244*4882a593Smuzhiyun #define BUFF_TYPE_BDE_64P 0x02 /* BDE (Port-resident) */ 245*4882a593Smuzhiyun #define BUFF_TYPE_BDE_64I 0x08 /* Input BDE (Host-resident) */ 246*4882a593Smuzhiyun #define BUFF_TYPE_BDE_64IP 0x0A /* Input BDE (Port-resident) */ 247*4882a593Smuzhiyun #define BUFF_TYPE_BLP_64 0x40 /* BLP (Host-resident) */ 248*4882a593Smuzhiyun #define BUFF_TYPE_BLP_64P 0x42 /* BLP (Port-resident) */ 249*4882a593Smuzhiyun } f; 250*4882a593Smuzhiyun } tus; 251*4882a593Smuzhiyun uint32_t addrLow; 252*4882a593Smuzhiyun uint32_t addrHigh; 253*4882a593Smuzhiyun }; 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun /* Maximun size of immediate data that can fit into a 128 byte WQE */ 256*4882a593Smuzhiyun #define LPFC_MAX_BDE_IMM_SIZE 64 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun struct lpfc_sli4_flags { 259*4882a593Smuzhiyun uint32_t word0; 260*4882a593Smuzhiyun #define lpfc_idx_rsrc_rdy_SHIFT 0 261*4882a593Smuzhiyun #define lpfc_idx_rsrc_rdy_MASK 0x00000001 262*4882a593Smuzhiyun #define lpfc_idx_rsrc_rdy_WORD word0 263*4882a593Smuzhiyun #define LPFC_IDX_RSRC_RDY 1 264*4882a593Smuzhiyun #define lpfc_rpi_rsrc_rdy_SHIFT 1 265*4882a593Smuzhiyun #define lpfc_rpi_rsrc_rdy_MASK 0x00000001 266*4882a593Smuzhiyun #define lpfc_rpi_rsrc_rdy_WORD word0 267*4882a593Smuzhiyun #define LPFC_RPI_RSRC_RDY 1 268*4882a593Smuzhiyun #define lpfc_vpi_rsrc_rdy_SHIFT 2 269*4882a593Smuzhiyun #define lpfc_vpi_rsrc_rdy_MASK 0x00000001 270*4882a593Smuzhiyun #define lpfc_vpi_rsrc_rdy_WORD word0 271*4882a593Smuzhiyun #define LPFC_VPI_RSRC_RDY 1 272*4882a593Smuzhiyun #define lpfc_vfi_rsrc_rdy_SHIFT 3 273*4882a593Smuzhiyun #define lpfc_vfi_rsrc_rdy_MASK 0x00000001 274*4882a593Smuzhiyun #define lpfc_vfi_rsrc_rdy_WORD word0 275*4882a593Smuzhiyun #define LPFC_VFI_RSRC_RDY 1 276*4882a593Smuzhiyun }; 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun struct sli4_bls_rsp { 279*4882a593Smuzhiyun uint32_t word0_rsvd; /* Word0 must be reserved */ 280*4882a593Smuzhiyun uint32_t word1; 281*4882a593Smuzhiyun #define lpfc_abts_orig_SHIFT 0 282*4882a593Smuzhiyun #define lpfc_abts_orig_MASK 0x00000001 283*4882a593Smuzhiyun #define lpfc_abts_orig_WORD word1 284*4882a593Smuzhiyun #define LPFC_ABTS_UNSOL_RSP 1 285*4882a593Smuzhiyun #define LPFC_ABTS_UNSOL_INT 0 286*4882a593Smuzhiyun uint32_t word2; 287*4882a593Smuzhiyun #define lpfc_abts_rxid_SHIFT 0 288*4882a593Smuzhiyun #define lpfc_abts_rxid_MASK 0x0000FFFF 289*4882a593Smuzhiyun #define lpfc_abts_rxid_WORD word2 290*4882a593Smuzhiyun #define lpfc_abts_oxid_SHIFT 16 291*4882a593Smuzhiyun #define lpfc_abts_oxid_MASK 0x0000FFFF 292*4882a593Smuzhiyun #define lpfc_abts_oxid_WORD word2 293*4882a593Smuzhiyun uint32_t word3; 294*4882a593Smuzhiyun #define lpfc_vndr_code_SHIFT 0 295*4882a593Smuzhiyun #define lpfc_vndr_code_MASK 0x000000FF 296*4882a593Smuzhiyun #define lpfc_vndr_code_WORD word3 297*4882a593Smuzhiyun #define lpfc_rsn_expln_SHIFT 8 298*4882a593Smuzhiyun #define lpfc_rsn_expln_MASK 0x000000FF 299*4882a593Smuzhiyun #define lpfc_rsn_expln_WORD word3 300*4882a593Smuzhiyun #define lpfc_rsn_code_SHIFT 16 301*4882a593Smuzhiyun #define lpfc_rsn_code_MASK 0x000000FF 302*4882a593Smuzhiyun #define lpfc_rsn_code_WORD word3 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun uint32_t word4; 305*4882a593Smuzhiyun uint32_t word5_rsvd; /* Word5 must be reserved */ 306*4882a593Smuzhiyun }; 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun /* event queue entry structure */ 309*4882a593Smuzhiyun struct lpfc_eqe { 310*4882a593Smuzhiyun uint32_t word0; 311*4882a593Smuzhiyun #define lpfc_eqe_resource_id_SHIFT 16 312*4882a593Smuzhiyun #define lpfc_eqe_resource_id_MASK 0x0000FFFF 313*4882a593Smuzhiyun #define lpfc_eqe_resource_id_WORD word0 314*4882a593Smuzhiyun #define lpfc_eqe_minor_code_SHIFT 4 315*4882a593Smuzhiyun #define lpfc_eqe_minor_code_MASK 0x00000FFF 316*4882a593Smuzhiyun #define lpfc_eqe_minor_code_WORD word0 317*4882a593Smuzhiyun #define lpfc_eqe_major_code_SHIFT 1 318*4882a593Smuzhiyun #define lpfc_eqe_major_code_MASK 0x00000007 319*4882a593Smuzhiyun #define lpfc_eqe_major_code_WORD word0 320*4882a593Smuzhiyun #define lpfc_eqe_valid_SHIFT 0 321*4882a593Smuzhiyun #define lpfc_eqe_valid_MASK 0x00000001 322*4882a593Smuzhiyun #define lpfc_eqe_valid_WORD word0 323*4882a593Smuzhiyun }; 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun /* completion queue entry structure (common fields for all cqe types) */ 326*4882a593Smuzhiyun struct lpfc_cqe { 327*4882a593Smuzhiyun uint32_t reserved0; 328*4882a593Smuzhiyun uint32_t reserved1; 329*4882a593Smuzhiyun uint32_t reserved2; 330*4882a593Smuzhiyun uint32_t word3; 331*4882a593Smuzhiyun #define lpfc_cqe_valid_SHIFT 31 332*4882a593Smuzhiyun #define lpfc_cqe_valid_MASK 0x00000001 333*4882a593Smuzhiyun #define lpfc_cqe_valid_WORD word3 334*4882a593Smuzhiyun #define lpfc_cqe_code_SHIFT 16 335*4882a593Smuzhiyun #define lpfc_cqe_code_MASK 0x000000FF 336*4882a593Smuzhiyun #define lpfc_cqe_code_WORD word3 337*4882a593Smuzhiyun }; 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun /* Completion Queue Entry Status Codes */ 340*4882a593Smuzhiyun #define CQE_STATUS_SUCCESS 0x0 341*4882a593Smuzhiyun #define CQE_STATUS_FCP_RSP_FAILURE 0x1 342*4882a593Smuzhiyun #define CQE_STATUS_REMOTE_STOP 0x2 343*4882a593Smuzhiyun #define CQE_STATUS_LOCAL_REJECT 0x3 344*4882a593Smuzhiyun #define CQE_STATUS_NPORT_RJT 0x4 345*4882a593Smuzhiyun #define CQE_STATUS_FABRIC_RJT 0x5 346*4882a593Smuzhiyun #define CQE_STATUS_NPORT_BSY 0x6 347*4882a593Smuzhiyun #define CQE_STATUS_FABRIC_BSY 0x7 348*4882a593Smuzhiyun #define CQE_STATUS_INTERMED_RSP 0x8 349*4882a593Smuzhiyun #define CQE_STATUS_LS_RJT 0x9 350*4882a593Smuzhiyun #define CQE_STATUS_CMD_REJECT 0xb 351*4882a593Smuzhiyun #define CQE_STATUS_FCP_TGT_LENCHECK 0xc 352*4882a593Smuzhiyun #define CQE_STATUS_NEED_BUFF_ENTRY 0xf 353*4882a593Smuzhiyun #define CQE_STATUS_DI_ERROR 0x16 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun /* Used when mapping CQE status to IOCB */ 356*4882a593Smuzhiyun #define LPFC_IOCB_STATUS_MASK 0xf 357*4882a593Smuzhiyun 358*4882a593Smuzhiyun /* Status returned by hardware (valid only if status = CQE_STATUS_SUCCESS). */ 359*4882a593Smuzhiyun #define CQE_HW_STATUS_NO_ERR 0x0 360*4882a593Smuzhiyun #define CQE_HW_STATUS_UNDERRUN 0x1 361*4882a593Smuzhiyun #define CQE_HW_STATUS_OVERRUN 0x2 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun /* Completion Queue Entry Codes */ 364*4882a593Smuzhiyun #define CQE_CODE_COMPL_WQE 0x1 365*4882a593Smuzhiyun #define CQE_CODE_RELEASE_WQE 0x2 366*4882a593Smuzhiyun #define CQE_CODE_RECEIVE 0x4 367*4882a593Smuzhiyun #define CQE_CODE_XRI_ABORTED 0x5 368*4882a593Smuzhiyun #define CQE_CODE_RECEIVE_V1 0x9 369*4882a593Smuzhiyun #define CQE_CODE_NVME_ERSP 0xd 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun /* 372*4882a593Smuzhiyun * Define mask value for xri_aborted and wcqe completed CQE extended status. 373*4882a593Smuzhiyun * Currently, extended status is limited to 9 bits (0x0 -> 0x103) . 374*4882a593Smuzhiyun */ 375*4882a593Smuzhiyun #define WCQE_PARAM_MASK 0x1FF 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun /* completion queue entry for wqe completions */ 378*4882a593Smuzhiyun struct lpfc_wcqe_complete { 379*4882a593Smuzhiyun uint32_t word0; 380*4882a593Smuzhiyun #define lpfc_wcqe_c_request_tag_SHIFT 16 381*4882a593Smuzhiyun #define lpfc_wcqe_c_request_tag_MASK 0x0000FFFF 382*4882a593Smuzhiyun #define lpfc_wcqe_c_request_tag_WORD word0 383*4882a593Smuzhiyun #define lpfc_wcqe_c_status_SHIFT 8 384*4882a593Smuzhiyun #define lpfc_wcqe_c_status_MASK 0x000000FF 385*4882a593Smuzhiyun #define lpfc_wcqe_c_status_WORD word0 386*4882a593Smuzhiyun #define lpfc_wcqe_c_hw_status_SHIFT 0 387*4882a593Smuzhiyun #define lpfc_wcqe_c_hw_status_MASK 0x000000FF 388*4882a593Smuzhiyun #define lpfc_wcqe_c_hw_status_WORD word0 389*4882a593Smuzhiyun #define lpfc_wcqe_c_ersp0_SHIFT 0 390*4882a593Smuzhiyun #define lpfc_wcqe_c_ersp0_MASK 0x0000FFFF 391*4882a593Smuzhiyun #define lpfc_wcqe_c_ersp0_WORD word0 392*4882a593Smuzhiyun uint32_t total_data_placed; 393*4882a593Smuzhiyun uint32_t parameter; 394*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_edir_SHIFT 5 395*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_edir_MASK 0x00000001 396*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_edir_WORD parameter 397*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_tdpv_SHIFT 3 398*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_tdpv_MASK 0x00000001 399*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_tdpv_WORD parameter 400*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_re_SHIFT 2 401*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_re_MASK 0x00000001 402*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_re_WORD parameter 403*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ae_SHIFT 1 404*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ae_MASK 0x00000001 405*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ae_WORD parameter 406*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ge_SHIFT 0 407*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ge_MASK 0x00000001 408*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ge_WORD parameter 409*4882a593Smuzhiyun uint32_t word3; 410*4882a593Smuzhiyun #define lpfc_wcqe_c_valid_SHIFT lpfc_cqe_valid_SHIFT 411*4882a593Smuzhiyun #define lpfc_wcqe_c_valid_MASK lpfc_cqe_valid_MASK 412*4882a593Smuzhiyun #define lpfc_wcqe_c_valid_WORD lpfc_cqe_valid_WORD 413*4882a593Smuzhiyun #define lpfc_wcqe_c_xb_SHIFT 28 414*4882a593Smuzhiyun #define lpfc_wcqe_c_xb_MASK 0x00000001 415*4882a593Smuzhiyun #define lpfc_wcqe_c_xb_WORD word3 416*4882a593Smuzhiyun #define lpfc_wcqe_c_pv_SHIFT 27 417*4882a593Smuzhiyun #define lpfc_wcqe_c_pv_MASK 0x00000001 418*4882a593Smuzhiyun #define lpfc_wcqe_c_pv_WORD word3 419*4882a593Smuzhiyun #define lpfc_wcqe_c_priority_SHIFT 24 420*4882a593Smuzhiyun #define lpfc_wcqe_c_priority_MASK 0x00000007 421*4882a593Smuzhiyun #define lpfc_wcqe_c_priority_WORD word3 422*4882a593Smuzhiyun #define lpfc_wcqe_c_code_SHIFT lpfc_cqe_code_SHIFT 423*4882a593Smuzhiyun #define lpfc_wcqe_c_code_MASK lpfc_cqe_code_MASK 424*4882a593Smuzhiyun #define lpfc_wcqe_c_code_WORD lpfc_cqe_code_WORD 425*4882a593Smuzhiyun #define lpfc_wcqe_c_sqhead_SHIFT 0 426*4882a593Smuzhiyun #define lpfc_wcqe_c_sqhead_MASK 0x0000FFFF 427*4882a593Smuzhiyun #define lpfc_wcqe_c_sqhead_WORD word3 428*4882a593Smuzhiyun }; 429*4882a593Smuzhiyun 430*4882a593Smuzhiyun /* completion queue entry for wqe release */ 431*4882a593Smuzhiyun struct lpfc_wcqe_release { 432*4882a593Smuzhiyun uint32_t reserved0; 433*4882a593Smuzhiyun uint32_t reserved1; 434*4882a593Smuzhiyun uint32_t word2; 435*4882a593Smuzhiyun #define lpfc_wcqe_r_wq_id_SHIFT 16 436*4882a593Smuzhiyun #define lpfc_wcqe_r_wq_id_MASK 0x0000FFFF 437*4882a593Smuzhiyun #define lpfc_wcqe_r_wq_id_WORD word2 438*4882a593Smuzhiyun #define lpfc_wcqe_r_wqe_index_SHIFT 0 439*4882a593Smuzhiyun #define lpfc_wcqe_r_wqe_index_MASK 0x0000FFFF 440*4882a593Smuzhiyun #define lpfc_wcqe_r_wqe_index_WORD word2 441*4882a593Smuzhiyun uint32_t word3; 442*4882a593Smuzhiyun #define lpfc_wcqe_r_valid_SHIFT lpfc_cqe_valid_SHIFT 443*4882a593Smuzhiyun #define lpfc_wcqe_r_valid_MASK lpfc_cqe_valid_MASK 444*4882a593Smuzhiyun #define lpfc_wcqe_r_valid_WORD lpfc_cqe_valid_WORD 445*4882a593Smuzhiyun #define lpfc_wcqe_r_code_SHIFT lpfc_cqe_code_SHIFT 446*4882a593Smuzhiyun #define lpfc_wcqe_r_code_MASK lpfc_cqe_code_MASK 447*4882a593Smuzhiyun #define lpfc_wcqe_r_code_WORD lpfc_cqe_code_WORD 448*4882a593Smuzhiyun }; 449*4882a593Smuzhiyun 450*4882a593Smuzhiyun struct sli4_wcqe_xri_aborted { 451*4882a593Smuzhiyun uint32_t word0; 452*4882a593Smuzhiyun #define lpfc_wcqe_xa_status_SHIFT 8 453*4882a593Smuzhiyun #define lpfc_wcqe_xa_status_MASK 0x000000FF 454*4882a593Smuzhiyun #define lpfc_wcqe_xa_status_WORD word0 455*4882a593Smuzhiyun uint32_t parameter; 456*4882a593Smuzhiyun uint32_t word2; 457*4882a593Smuzhiyun #define lpfc_wcqe_xa_remote_xid_SHIFT 16 458*4882a593Smuzhiyun #define lpfc_wcqe_xa_remote_xid_MASK 0x0000FFFF 459*4882a593Smuzhiyun #define lpfc_wcqe_xa_remote_xid_WORD word2 460*4882a593Smuzhiyun #define lpfc_wcqe_xa_xri_SHIFT 0 461*4882a593Smuzhiyun #define lpfc_wcqe_xa_xri_MASK 0x0000FFFF 462*4882a593Smuzhiyun #define lpfc_wcqe_xa_xri_WORD word2 463*4882a593Smuzhiyun uint32_t word3; 464*4882a593Smuzhiyun #define lpfc_wcqe_xa_valid_SHIFT lpfc_cqe_valid_SHIFT 465*4882a593Smuzhiyun #define lpfc_wcqe_xa_valid_MASK lpfc_cqe_valid_MASK 466*4882a593Smuzhiyun #define lpfc_wcqe_xa_valid_WORD lpfc_cqe_valid_WORD 467*4882a593Smuzhiyun #define lpfc_wcqe_xa_ia_SHIFT 30 468*4882a593Smuzhiyun #define lpfc_wcqe_xa_ia_MASK 0x00000001 469*4882a593Smuzhiyun #define lpfc_wcqe_xa_ia_WORD word3 470*4882a593Smuzhiyun #define CQE_XRI_ABORTED_IA_REMOTE 0 471*4882a593Smuzhiyun #define CQE_XRI_ABORTED_IA_LOCAL 1 472*4882a593Smuzhiyun #define lpfc_wcqe_xa_br_SHIFT 29 473*4882a593Smuzhiyun #define lpfc_wcqe_xa_br_MASK 0x00000001 474*4882a593Smuzhiyun #define lpfc_wcqe_xa_br_WORD word3 475*4882a593Smuzhiyun #define CQE_XRI_ABORTED_BR_BA_ACC 0 476*4882a593Smuzhiyun #define CQE_XRI_ABORTED_BR_BA_RJT 1 477*4882a593Smuzhiyun #define lpfc_wcqe_xa_eo_SHIFT 28 478*4882a593Smuzhiyun #define lpfc_wcqe_xa_eo_MASK 0x00000001 479*4882a593Smuzhiyun #define lpfc_wcqe_xa_eo_WORD word3 480*4882a593Smuzhiyun #define CQE_XRI_ABORTED_EO_REMOTE 0 481*4882a593Smuzhiyun #define CQE_XRI_ABORTED_EO_LOCAL 1 482*4882a593Smuzhiyun #define lpfc_wcqe_xa_code_SHIFT lpfc_cqe_code_SHIFT 483*4882a593Smuzhiyun #define lpfc_wcqe_xa_code_MASK lpfc_cqe_code_MASK 484*4882a593Smuzhiyun #define lpfc_wcqe_xa_code_WORD lpfc_cqe_code_WORD 485*4882a593Smuzhiyun }; 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun /* completion queue entry structure for rqe completion */ 488*4882a593Smuzhiyun struct lpfc_rcqe { 489*4882a593Smuzhiyun uint32_t word0; 490*4882a593Smuzhiyun #define lpfc_rcqe_bindex_SHIFT 16 491*4882a593Smuzhiyun #define lpfc_rcqe_bindex_MASK 0x0000FFF 492*4882a593Smuzhiyun #define lpfc_rcqe_bindex_WORD word0 493*4882a593Smuzhiyun #define lpfc_rcqe_status_SHIFT 8 494*4882a593Smuzhiyun #define lpfc_rcqe_status_MASK 0x000000FF 495*4882a593Smuzhiyun #define lpfc_rcqe_status_WORD word0 496*4882a593Smuzhiyun #define FC_STATUS_RQ_SUCCESS 0x10 /* Async receive successful */ 497*4882a593Smuzhiyun #define FC_STATUS_RQ_BUF_LEN_EXCEEDED 0x11 /* payload truncated */ 498*4882a593Smuzhiyun #define FC_STATUS_INSUFF_BUF_NEED_BUF 0x12 /* Insufficient buffers */ 499*4882a593Smuzhiyun #define FC_STATUS_INSUFF_BUF_FRM_DISC 0x13 /* Frame Discard */ 500*4882a593Smuzhiyun uint32_t word1; 501*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_v1_SHIFT 0 502*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_v1_MASK 0x0000003F 503*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_v1_WORD word1 504*4882a593Smuzhiyun uint32_t word2; 505*4882a593Smuzhiyun #define lpfc_rcqe_length_SHIFT 16 506*4882a593Smuzhiyun #define lpfc_rcqe_length_MASK 0x0000FFFF 507*4882a593Smuzhiyun #define lpfc_rcqe_length_WORD word2 508*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_SHIFT 6 509*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_MASK 0x000003FF 510*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_WORD word2 511*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_SHIFT 0 512*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_MASK 0x0000003F 513*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_WORD word2 514*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_v1_SHIFT 0 515*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_v1_MASK 0x0000FFFF 516*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_v1_WORD word2 517*4882a593Smuzhiyun uint32_t word3; 518*4882a593Smuzhiyun #define lpfc_rcqe_valid_SHIFT lpfc_cqe_valid_SHIFT 519*4882a593Smuzhiyun #define lpfc_rcqe_valid_MASK lpfc_cqe_valid_MASK 520*4882a593Smuzhiyun #define lpfc_rcqe_valid_WORD lpfc_cqe_valid_WORD 521*4882a593Smuzhiyun #define lpfc_rcqe_port_SHIFT 30 522*4882a593Smuzhiyun #define lpfc_rcqe_port_MASK 0x00000001 523*4882a593Smuzhiyun #define lpfc_rcqe_port_WORD word3 524*4882a593Smuzhiyun #define lpfc_rcqe_hdr_length_SHIFT 24 525*4882a593Smuzhiyun #define lpfc_rcqe_hdr_length_MASK 0x0000001F 526*4882a593Smuzhiyun #define lpfc_rcqe_hdr_length_WORD word3 527*4882a593Smuzhiyun #define lpfc_rcqe_code_SHIFT lpfc_cqe_code_SHIFT 528*4882a593Smuzhiyun #define lpfc_rcqe_code_MASK lpfc_cqe_code_MASK 529*4882a593Smuzhiyun #define lpfc_rcqe_code_WORD lpfc_cqe_code_WORD 530*4882a593Smuzhiyun #define lpfc_rcqe_eof_SHIFT 8 531*4882a593Smuzhiyun #define lpfc_rcqe_eof_MASK 0x000000FF 532*4882a593Smuzhiyun #define lpfc_rcqe_eof_WORD word3 533*4882a593Smuzhiyun #define FCOE_EOFn 0x41 534*4882a593Smuzhiyun #define FCOE_EOFt 0x42 535*4882a593Smuzhiyun #define FCOE_EOFni 0x49 536*4882a593Smuzhiyun #define FCOE_EOFa 0x50 537*4882a593Smuzhiyun #define lpfc_rcqe_sof_SHIFT 0 538*4882a593Smuzhiyun #define lpfc_rcqe_sof_MASK 0x000000FF 539*4882a593Smuzhiyun #define lpfc_rcqe_sof_WORD word3 540*4882a593Smuzhiyun #define FCOE_SOFi2 0x2d 541*4882a593Smuzhiyun #define FCOE_SOFi3 0x2e 542*4882a593Smuzhiyun #define FCOE_SOFn2 0x35 543*4882a593Smuzhiyun #define FCOE_SOFn3 0x36 544*4882a593Smuzhiyun }; 545*4882a593Smuzhiyun 546*4882a593Smuzhiyun struct lpfc_rqe { 547*4882a593Smuzhiyun uint32_t address_hi; 548*4882a593Smuzhiyun uint32_t address_lo; 549*4882a593Smuzhiyun }; 550*4882a593Smuzhiyun 551*4882a593Smuzhiyun /* buffer descriptors */ 552*4882a593Smuzhiyun struct lpfc_bde4 { 553*4882a593Smuzhiyun uint32_t addr_hi; 554*4882a593Smuzhiyun uint32_t addr_lo; 555*4882a593Smuzhiyun uint32_t word2; 556*4882a593Smuzhiyun #define lpfc_bde4_last_SHIFT 31 557*4882a593Smuzhiyun #define lpfc_bde4_last_MASK 0x00000001 558*4882a593Smuzhiyun #define lpfc_bde4_last_WORD word2 559*4882a593Smuzhiyun #define lpfc_bde4_sge_offset_SHIFT 0 560*4882a593Smuzhiyun #define lpfc_bde4_sge_offset_MASK 0x000003FF 561*4882a593Smuzhiyun #define lpfc_bde4_sge_offset_WORD word2 562*4882a593Smuzhiyun uint32_t word3; 563*4882a593Smuzhiyun #define lpfc_bde4_length_SHIFT 0 564*4882a593Smuzhiyun #define lpfc_bde4_length_MASK 0x000000FF 565*4882a593Smuzhiyun #define lpfc_bde4_length_WORD word3 566*4882a593Smuzhiyun }; 567*4882a593Smuzhiyun 568*4882a593Smuzhiyun struct lpfc_register { 569*4882a593Smuzhiyun uint32_t word0; 570*4882a593Smuzhiyun }; 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun #define LPFC_PORT_SEM_UE_RECOVERABLE 0xE000 573*4882a593Smuzhiyun #define LPFC_PORT_SEM_MASK 0xF000 574*4882a593Smuzhiyun /* The following BAR0 Registers apply to SLI4 if_type 0 UCNAs. */ 575*4882a593Smuzhiyun #define LPFC_UERR_STATUS_HI 0x00A4 576*4882a593Smuzhiyun #define LPFC_UERR_STATUS_LO 0x00A0 577*4882a593Smuzhiyun #define LPFC_UE_MASK_HI 0x00AC 578*4882a593Smuzhiyun #define LPFC_UE_MASK_LO 0x00A8 579*4882a593Smuzhiyun 580*4882a593Smuzhiyun /* The following BAR0 register sets are defined for if_type 0 and 2 UCNAs. */ 581*4882a593Smuzhiyun #define LPFC_SLI_INTF 0x0058 582*4882a593Smuzhiyun #define LPFC_SLI_ASIC_VER 0x009C 583*4882a593Smuzhiyun 584*4882a593Smuzhiyun #define LPFC_CTL_PORT_SEM_OFFSET 0x400 585*4882a593Smuzhiyun #define lpfc_port_smphr_perr_SHIFT 31 586*4882a593Smuzhiyun #define lpfc_port_smphr_perr_MASK 0x1 587*4882a593Smuzhiyun #define lpfc_port_smphr_perr_WORD word0 588*4882a593Smuzhiyun #define lpfc_port_smphr_sfi_SHIFT 30 589*4882a593Smuzhiyun #define lpfc_port_smphr_sfi_MASK 0x1 590*4882a593Smuzhiyun #define lpfc_port_smphr_sfi_WORD word0 591*4882a593Smuzhiyun #define lpfc_port_smphr_nip_SHIFT 29 592*4882a593Smuzhiyun #define lpfc_port_smphr_nip_MASK 0x1 593*4882a593Smuzhiyun #define lpfc_port_smphr_nip_WORD word0 594*4882a593Smuzhiyun #define lpfc_port_smphr_ipc_SHIFT 28 595*4882a593Smuzhiyun #define lpfc_port_smphr_ipc_MASK 0x1 596*4882a593Smuzhiyun #define lpfc_port_smphr_ipc_WORD word0 597*4882a593Smuzhiyun #define lpfc_port_smphr_scr1_SHIFT 27 598*4882a593Smuzhiyun #define lpfc_port_smphr_scr1_MASK 0x1 599*4882a593Smuzhiyun #define lpfc_port_smphr_scr1_WORD word0 600*4882a593Smuzhiyun #define lpfc_port_smphr_scr2_SHIFT 26 601*4882a593Smuzhiyun #define lpfc_port_smphr_scr2_MASK 0x1 602*4882a593Smuzhiyun #define lpfc_port_smphr_scr2_WORD word0 603*4882a593Smuzhiyun #define lpfc_port_smphr_host_scratch_SHIFT 16 604*4882a593Smuzhiyun #define lpfc_port_smphr_host_scratch_MASK 0xFF 605*4882a593Smuzhiyun #define lpfc_port_smphr_host_scratch_WORD word0 606*4882a593Smuzhiyun #define lpfc_port_smphr_port_status_SHIFT 0 607*4882a593Smuzhiyun #define lpfc_port_smphr_port_status_MASK 0xFFFF 608*4882a593Smuzhiyun #define lpfc_port_smphr_port_status_WORD word0 609*4882a593Smuzhiyun 610*4882a593Smuzhiyun #define LPFC_POST_STAGE_POWER_ON_RESET 0x0000 611*4882a593Smuzhiyun #define LPFC_POST_STAGE_AWAITING_HOST_RDY 0x0001 612*4882a593Smuzhiyun #define LPFC_POST_STAGE_HOST_RDY 0x0002 613*4882a593Smuzhiyun #define LPFC_POST_STAGE_BE_RESET 0x0003 614*4882a593Smuzhiyun #define LPFC_POST_STAGE_SEEPROM_CS_START 0x0100 615*4882a593Smuzhiyun #define LPFC_POST_STAGE_SEEPROM_CS_DONE 0x0101 616*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_CONFIG_START 0x0200 617*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_CONFIG_DONE 0x0201 618*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_CALIBRATE_START 0x0300 619*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_CALIBRATE_DONE 0x0301 620*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_TEST_START 0x0400 621*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_TEST_DONE 0x0401 622*4882a593Smuzhiyun #define LPFC_POST_STAGE_REDBOOT_INIT_START 0x0600 623*4882a593Smuzhiyun #define LPFC_POST_STAGE_REDBOOT_INIT_DONE 0x0601 624*4882a593Smuzhiyun #define LPFC_POST_STAGE_FW_IMAGE_LOAD_START 0x0700 625*4882a593Smuzhiyun #define LPFC_POST_STAGE_FW_IMAGE_LOAD_DONE 0x0701 626*4882a593Smuzhiyun #define LPFC_POST_STAGE_ARMFW_START 0x0800 627*4882a593Smuzhiyun #define LPFC_POST_STAGE_DHCP_QUERY_START 0x0900 628*4882a593Smuzhiyun #define LPFC_POST_STAGE_DHCP_QUERY_DONE 0x0901 629*4882a593Smuzhiyun #define LPFC_POST_STAGE_BOOT_TARGET_DISCOVERY_START 0x0A00 630*4882a593Smuzhiyun #define LPFC_POST_STAGE_BOOT_TARGET_DISCOVERY_DONE 0x0A01 631*4882a593Smuzhiyun #define LPFC_POST_STAGE_RC_OPTION_SET 0x0B00 632*4882a593Smuzhiyun #define LPFC_POST_STAGE_SWITCH_LINK 0x0B01 633*4882a593Smuzhiyun #define LPFC_POST_STAGE_SEND_ICDS_MESSAGE 0x0B02 634*4882a593Smuzhiyun #define LPFC_POST_STAGE_PERFROM_TFTP 0x0B03 635*4882a593Smuzhiyun #define LPFC_POST_STAGE_PARSE_XML 0x0B04 636*4882a593Smuzhiyun #define LPFC_POST_STAGE_DOWNLOAD_IMAGE 0x0B05 637*4882a593Smuzhiyun #define LPFC_POST_STAGE_FLASH_IMAGE 0x0B06 638*4882a593Smuzhiyun #define LPFC_POST_STAGE_RC_DONE 0x0B07 639*4882a593Smuzhiyun #define LPFC_POST_STAGE_REBOOT_SYSTEM 0x0B08 640*4882a593Smuzhiyun #define LPFC_POST_STAGE_MAC_ADDRESS 0x0C00 641*4882a593Smuzhiyun #define LPFC_POST_STAGE_PORT_READY 0xC000 642*4882a593Smuzhiyun #define LPFC_POST_STAGE_PORT_UE 0xF000 643*4882a593Smuzhiyun 644*4882a593Smuzhiyun #define LPFC_CTL_PORT_STA_OFFSET 0x404 645*4882a593Smuzhiyun #define lpfc_sliport_status_err_SHIFT 31 646*4882a593Smuzhiyun #define lpfc_sliport_status_err_MASK 0x1 647*4882a593Smuzhiyun #define lpfc_sliport_status_err_WORD word0 648*4882a593Smuzhiyun #define lpfc_sliport_status_end_SHIFT 30 649*4882a593Smuzhiyun #define lpfc_sliport_status_end_MASK 0x1 650*4882a593Smuzhiyun #define lpfc_sliport_status_end_WORD word0 651*4882a593Smuzhiyun #define lpfc_sliport_status_oti_SHIFT 29 652*4882a593Smuzhiyun #define lpfc_sliport_status_oti_MASK 0x1 653*4882a593Smuzhiyun #define lpfc_sliport_status_oti_WORD word0 654*4882a593Smuzhiyun #define lpfc_sliport_status_dip_SHIFT 25 655*4882a593Smuzhiyun #define lpfc_sliport_status_dip_MASK 0x1 656*4882a593Smuzhiyun #define lpfc_sliport_status_dip_WORD word0 657*4882a593Smuzhiyun #define lpfc_sliport_status_rn_SHIFT 24 658*4882a593Smuzhiyun #define lpfc_sliport_status_rn_MASK 0x1 659*4882a593Smuzhiyun #define lpfc_sliport_status_rn_WORD word0 660*4882a593Smuzhiyun #define lpfc_sliport_status_rdy_SHIFT 23 661*4882a593Smuzhiyun #define lpfc_sliport_status_rdy_MASK 0x1 662*4882a593Smuzhiyun #define lpfc_sliport_status_rdy_WORD word0 663*4882a593Smuzhiyun #define MAX_IF_TYPE_2_RESETS 6 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun #define LPFC_CTL_PORT_CTL_OFFSET 0x408 666*4882a593Smuzhiyun #define lpfc_sliport_ctrl_end_SHIFT 30 667*4882a593Smuzhiyun #define lpfc_sliport_ctrl_end_MASK 0x1 668*4882a593Smuzhiyun #define lpfc_sliport_ctrl_end_WORD word0 669*4882a593Smuzhiyun #define LPFC_SLIPORT_LITTLE_ENDIAN 0 670*4882a593Smuzhiyun #define LPFC_SLIPORT_BIG_ENDIAN 1 671*4882a593Smuzhiyun #define lpfc_sliport_ctrl_ip_SHIFT 27 672*4882a593Smuzhiyun #define lpfc_sliport_ctrl_ip_MASK 0x1 673*4882a593Smuzhiyun #define lpfc_sliport_ctrl_ip_WORD word0 674*4882a593Smuzhiyun #define LPFC_SLIPORT_INIT_PORT 1 675*4882a593Smuzhiyun 676*4882a593Smuzhiyun #define LPFC_CTL_PORT_ER1_OFFSET 0x40C 677*4882a593Smuzhiyun #define LPFC_CTL_PORT_ER2_OFFSET 0x410 678*4882a593Smuzhiyun 679*4882a593Smuzhiyun #define LPFC_CTL_PORT_EQ_DELAY_OFFSET 0x418 680*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_delay_SHIFT 16 681*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_delay_MASK 0xffff 682*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_delay_WORD word0 683*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_id_SHIFT 0 684*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_id_MASK 0xfff 685*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_id_WORD word0 686*4882a593Smuzhiyun #define LPFC_SEC_TO_USEC 1000000 687*4882a593Smuzhiyun 688*4882a593Smuzhiyun /* The following Registers apply to SLI4 if_type 0 UCNAs. They typically 689*4882a593Smuzhiyun * reside in BAR 2. 690*4882a593Smuzhiyun */ 691*4882a593Smuzhiyun #define LPFC_SLIPORT_IF0_SMPHR 0x00AC 692*4882a593Smuzhiyun 693*4882a593Smuzhiyun #define LPFC_IMR_MASK_ALL 0xFFFFFFFF 694*4882a593Smuzhiyun #define LPFC_ISCR_CLEAR_ALL 0xFFFFFFFF 695*4882a593Smuzhiyun 696*4882a593Smuzhiyun #define LPFC_HST_ISR0 0x0C18 697*4882a593Smuzhiyun #define LPFC_HST_ISR1 0x0C1C 698*4882a593Smuzhiyun #define LPFC_HST_ISR2 0x0C20 699*4882a593Smuzhiyun #define LPFC_HST_ISR3 0x0C24 700*4882a593Smuzhiyun #define LPFC_HST_ISR4 0x0C28 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun #define LPFC_HST_IMR0 0x0C48 703*4882a593Smuzhiyun #define LPFC_HST_IMR1 0x0C4C 704*4882a593Smuzhiyun #define LPFC_HST_IMR2 0x0C50 705*4882a593Smuzhiyun #define LPFC_HST_IMR3 0x0C54 706*4882a593Smuzhiyun #define LPFC_HST_IMR4 0x0C58 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun #define LPFC_HST_ISCR0 0x0C78 709*4882a593Smuzhiyun #define LPFC_HST_ISCR1 0x0C7C 710*4882a593Smuzhiyun #define LPFC_HST_ISCR2 0x0C80 711*4882a593Smuzhiyun #define LPFC_HST_ISCR3 0x0C84 712*4882a593Smuzhiyun #define LPFC_HST_ISCR4 0x0C88 713*4882a593Smuzhiyun 714*4882a593Smuzhiyun #define LPFC_SLI4_INTR0 BIT0 715*4882a593Smuzhiyun #define LPFC_SLI4_INTR1 BIT1 716*4882a593Smuzhiyun #define LPFC_SLI4_INTR2 BIT2 717*4882a593Smuzhiyun #define LPFC_SLI4_INTR3 BIT3 718*4882a593Smuzhiyun #define LPFC_SLI4_INTR4 BIT4 719*4882a593Smuzhiyun #define LPFC_SLI4_INTR5 BIT5 720*4882a593Smuzhiyun #define LPFC_SLI4_INTR6 BIT6 721*4882a593Smuzhiyun #define LPFC_SLI4_INTR7 BIT7 722*4882a593Smuzhiyun #define LPFC_SLI4_INTR8 BIT8 723*4882a593Smuzhiyun #define LPFC_SLI4_INTR9 BIT9 724*4882a593Smuzhiyun #define LPFC_SLI4_INTR10 BIT10 725*4882a593Smuzhiyun #define LPFC_SLI4_INTR11 BIT11 726*4882a593Smuzhiyun #define LPFC_SLI4_INTR12 BIT12 727*4882a593Smuzhiyun #define LPFC_SLI4_INTR13 BIT13 728*4882a593Smuzhiyun #define LPFC_SLI4_INTR14 BIT14 729*4882a593Smuzhiyun #define LPFC_SLI4_INTR15 BIT15 730*4882a593Smuzhiyun #define LPFC_SLI4_INTR16 BIT16 731*4882a593Smuzhiyun #define LPFC_SLI4_INTR17 BIT17 732*4882a593Smuzhiyun #define LPFC_SLI4_INTR18 BIT18 733*4882a593Smuzhiyun #define LPFC_SLI4_INTR19 BIT19 734*4882a593Smuzhiyun #define LPFC_SLI4_INTR20 BIT20 735*4882a593Smuzhiyun #define LPFC_SLI4_INTR21 BIT21 736*4882a593Smuzhiyun #define LPFC_SLI4_INTR22 BIT22 737*4882a593Smuzhiyun #define LPFC_SLI4_INTR23 BIT23 738*4882a593Smuzhiyun #define LPFC_SLI4_INTR24 BIT24 739*4882a593Smuzhiyun #define LPFC_SLI4_INTR25 BIT25 740*4882a593Smuzhiyun #define LPFC_SLI4_INTR26 BIT26 741*4882a593Smuzhiyun #define LPFC_SLI4_INTR27 BIT27 742*4882a593Smuzhiyun #define LPFC_SLI4_INTR28 BIT28 743*4882a593Smuzhiyun #define LPFC_SLI4_INTR29 BIT29 744*4882a593Smuzhiyun #define LPFC_SLI4_INTR30 BIT30 745*4882a593Smuzhiyun #define LPFC_SLI4_INTR31 BIT31 746*4882a593Smuzhiyun 747*4882a593Smuzhiyun /* 748*4882a593Smuzhiyun * The Doorbell registers defined here exist in different BAR 749*4882a593Smuzhiyun * register sets depending on the UCNA Port's reported if_type 750*4882a593Smuzhiyun * value. For UCNA ports running SLI4 and if_type 0, they reside in 751*4882a593Smuzhiyun * BAR4. For UCNA ports running SLI4 and if_type 2, they reside in 752*4882a593Smuzhiyun * BAR0. For FC ports running SLI4 and if_type 6, they reside in 753*4882a593Smuzhiyun * BAR2. The offsets and base address are different, so the driver 754*4882a593Smuzhiyun * has to compute the register addresses accordingly 755*4882a593Smuzhiyun */ 756*4882a593Smuzhiyun #define LPFC_ULP0_RQ_DOORBELL 0x00A0 757*4882a593Smuzhiyun #define LPFC_ULP1_RQ_DOORBELL 0x00C0 758*4882a593Smuzhiyun #define LPFC_IF6_RQ_DOORBELL 0x0080 759*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_num_posted_SHIFT 24 760*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_num_posted_MASK 0x00FF 761*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_num_posted_WORD word0 762*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_index_SHIFT 16 763*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_index_MASK 0x00FF 764*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_index_WORD word0 765*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_id_SHIFT 0 766*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_id_MASK 0xFFFF 767*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_id_WORD word0 768*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_num_posted_SHIFT 16 769*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_num_posted_MASK 0x3FFF 770*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_num_posted_WORD word0 771*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_id_SHIFT 0 772*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_id_MASK 0xFFFF 773*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_id_WORD word0 774*4882a593Smuzhiyun 775*4882a593Smuzhiyun #define LPFC_ULP0_WQ_DOORBELL 0x0040 776*4882a593Smuzhiyun #define LPFC_ULP1_WQ_DOORBELL 0x0060 777*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_num_posted_SHIFT 24 778*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_num_posted_MASK 0x00FF 779*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_num_posted_WORD word0 780*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_index_SHIFT 16 781*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_index_MASK 0x00FF 782*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_index_WORD word0 783*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_id_SHIFT 0 784*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_id_MASK 0xFFFF 785*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_id_WORD word0 786*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_num_posted_SHIFT 16 787*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_num_posted_MASK 0x3FFF 788*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_num_posted_WORD word0 789*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_id_SHIFT 0 790*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_id_MASK 0xFFFF 791*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_id_WORD word0 792*4882a593Smuzhiyun 793*4882a593Smuzhiyun #define LPFC_IF6_WQ_DOORBELL 0x0040 794*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_num_posted_SHIFT 24 795*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_num_posted_MASK 0x00FF 796*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_num_posted_WORD word0 797*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_SHIFT 23 798*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_MASK 0x0001 799*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_WORD word0 800*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_id_SHIFT 16 801*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_id_MASK 0x001F 802*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_id_WORD word0 803*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_id_SHIFT 0 804*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_id_MASK 0xFFFF 805*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_id_WORD word0 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun #define LPFC_EQCQ_DOORBELL 0x0120 808*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_se_SHIFT 31 809*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_se_MASK 0x0001 810*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_se_WORD word0 811*4882a593Smuzhiyun #define LPFC_EQCQ_SOLICIT_ENABLE_OFF 0 812*4882a593Smuzhiyun #define LPFC_EQCQ_SOLICIT_ENABLE_ON 1 813*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_arm_SHIFT 29 814*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_arm_MASK 0x0001 815*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_arm_WORD word0 816*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_num_released_SHIFT 16 817*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_num_released_MASK 0x1FFF 818*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_num_released_WORD word0 819*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_qt_SHIFT 10 820*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_qt_MASK 0x0001 821*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_qt_WORD word0 822*4882a593Smuzhiyun #define LPFC_QUEUE_TYPE_COMPLETION 0 823*4882a593Smuzhiyun #define LPFC_QUEUE_TYPE_EVENT 1 824*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqci_SHIFT 9 825*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqci_MASK 0x0001 826*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqci_WORD word0 827*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_lo_SHIFT 0 828*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_lo_MASK 0x03FF 829*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_lo_WORD word0 830*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_hi_SHIFT 11 831*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_hi_MASK 0x001F 832*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_hi_WORD word0 833*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_lo_SHIFT 0 834*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_lo_MASK 0x01FF 835*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_lo_WORD word0 836*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_hi_SHIFT 11 837*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_hi_MASK 0x001F 838*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_hi_WORD word0 839*4882a593Smuzhiyun #define LPFC_CQID_HI_FIELD_SHIFT 10 840*4882a593Smuzhiyun #define LPFC_EQID_HI_FIELD_SHIFT 9 841*4882a593Smuzhiyun 842*4882a593Smuzhiyun #define LPFC_IF6_CQ_DOORBELL 0x00C0 843*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_se_SHIFT 31 844*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_se_MASK 0x0001 845*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_se_WORD word0 846*4882a593Smuzhiyun #define LPFC_IF6_CQ_SOLICIT_ENABLE_OFF 0 847*4882a593Smuzhiyun #define LPFC_IF6_CQ_SOLICIT_ENABLE_ON 1 848*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_arm_SHIFT 29 849*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_arm_MASK 0x0001 850*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_arm_WORD word0 851*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_num_released_SHIFT 16 852*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_num_released_MASK 0x1FFF 853*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_num_released_WORD word0 854*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_cqid_SHIFT 0 855*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_cqid_MASK 0xFFFF 856*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_cqid_WORD word0 857*4882a593Smuzhiyun 858*4882a593Smuzhiyun #define LPFC_IF6_EQ_DOORBELL 0x0120 859*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_io_SHIFT 31 860*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_io_MASK 0x0001 861*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_io_WORD word0 862*4882a593Smuzhiyun #define LPFC_IF6_EQ_INTR_OVERRIDE_OFF 0 863*4882a593Smuzhiyun #define LPFC_IF6_EQ_INTR_OVERRIDE_ON 1 864*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_arm_SHIFT 29 865*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_arm_MASK 0x0001 866*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_arm_WORD word0 867*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_num_released_SHIFT 16 868*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_num_released_MASK 0x1FFF 869*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_num_released_WORD word0 870*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_eqid_SHIFT 0 871*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_eqid_MASK 0x0FFF 872*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_eqid_WORD word0 873*4882a593Smuzhiyun 874*4882a593Smuzhiyun #define LPFC_BMBX 0x0160 875*4882a593Smuzhiyun #define lpfc_bmbx_addr_SHIFT 2 876*4882a593Smuzhiyun #define lpfc_bmbx_addr_MASK 0x3FFFFFFF 877*4882a593Smuzhiyun #define lpfc_bmbx_addr_WORD word0 878*4882a593Smuzhiyun #define lpfc_bmbx_hi_SHIFT 1 879*4882a593Smuzhiyun #define lpfc_bmbx_hi_MASK 0x0001 880*4882a593Smuzhiyun #define lpfc_bmbx_hi_WORD word0 881*4882a593Smuzhiyun #define lpfc_bmbx_rdy_SHIFT 0 882*4882a593Smuzhiyun #define lpfc_bmbx_rdy_MASK 0x0001 883*4882a593Smuzhiyun #define lpfc_bmbx_rdy_WORD word0 884*4882a593Smuzhiyun 885*4882a593Smuzhiyun #define LPFC_MQ_DOORBELL 0x0140 886*4882a593Smuzhiyun #define LPFC_IF6_MQ_DOORBELL 0x0160 887*4882a593Smuzhiyun #define lpfc_mq_doorbell_num_posted_SHIFT 16 888*4882a593Smuzhiyun #define lpfc_mq_doorbell_num_posted_MASK 0x3FFF 889*4882a593Smuzhiyun #define lpfc_mq_doorbell_num_posted_WORD word0 890*4882a593Smuzhiyun #define lpfc_mq_doorbell_id_SHIFT 0 891*4882a593Smuzhiyun #define lpfc_mq_doorbell_id_MASK 0xFFFF 892*4882a593Smuzhiyun #define lpfc_mq_doorbell_id_WORD word0 893*4882a593Smuzhiyun 894*4882a593Smuzhiyun struct lpfc_sli4_cfg_mhdr { 895*4882a593Smuzhiyun uint32_t word1; 896*4882a593Smuzhiyun #define lpfc_mbox_hdr_emb_SHIFT 0 897*4882a593Smuzhiyun #define lpfc_mbox_hdr_emb_MASK 0x00000001 898*4882a593Smuzhiyun #define lpfc_mbox_hdr_emb_WORD word1 899*4882a593Smuzhiyun #define lpfc_mbox_hdr_sge_cnt_SHIFT 3 900*4882a593Smuzhiyun #define lpfc_mbox_hdr_sge_cnt_MASK 0x0000001F 901*4882a593Smuzhiyun #define lpfc_mbox_hdr_sge_cnt_WORD word1 902*4882a593Smuzhiyun uint32_t payload_length; 903*4882a593Smuzhiyun uint32_t tag_lo; 904*4882a593Smuzhiyun uint32_t tag_hi; 905*4882a593Smuzhiyun uint32_t reserved5; 906*4882a593Smuzhiyun }; 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr { 909*4882a593Smuzhiyun struct { 910*4882a593Smuzhiyun uint32_t word6; 911*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_SHIFT 0 912*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_MASK 0x000000FF 913*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_WORD word6 914*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_SHIFT 8 915*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_MASK 0x000000FF 916*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_WORD word6 917*4882a593Smuzhiyun #define lpfc_mbox_hdr_port_number_SHIFT 16 918*4882a593Smuzhiyun #define lpfc_mbox_hdr_port_number_MASK 0x000000FF 919*4882a593Smuzhiyun #define lpfc_mbox_hdr_port_number_WORD word6 920*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_SHIFT 24 921*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_MASK 0x000000FF 922*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_WORD word6 923*4882a593Smuzhiyun uint32_t timeout; 924*4882a593Smuzhiyun uint32_t request_length; 925*4882a593Smuzhiyun uint32_t word9; 926*4882a593Smuzhiyun #define lpfc_mbox_hdr_version_SHIFT 0 927*4882a593Smuzhiyun #define lpfc_mbox_hdr_version_MASK 0x000000FF 928*4882a593Smuzhiyun #define lpfc_mbox_hdr_version_WORD word9 929*4882a593Smuzhiyun #define lpfc_mbox_hdr_pf_num_SHIFT 16 930*4882a593Smuzhiyun #define lpfc_mbox_hdr_pf_num_MASK 0x000000FF 931*4882a593Smuzhiyun #define lpfc_mbox_hdr_pf_num_WORD word9 932*4882a593Smuzhiyun #define lpfc_mbox_hdr_vh_num_SHIFT 24 933*4882a593Smuzhiyun #define lpfc_mbox_hdr_vh_num_MASK 0x000000FF 934*4882a593Smuzhiyun #define lpfc_mbox_hdr_vh_num_WORD word9 935*4882a593Smuzhiyun #define LPFC_Q_CREATE_VERSION_2 2 936*4882a593Smuzhiyun #define LPFC_Q_CREATE_VERSION_1 1 937*4882a593Smuzhiyun #define LPFC_Q_CREATE_VERSION_0 0 938*4882a593Smuzhiyun #define LPFC_OPCODE_VERSION_0 0 939*4882a593Smuzhiyun #define LPFC_OPCODE_VERSION_1 1 940*4882a593Smuzhiyun } request; 941*4882a593Smuzhiyun struct { 942*4882a593Smuzhiyun uint32_t word6; 943*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_SHIFT 0 944*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_MASK 0x000000FF 945*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_WORD word6 946*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_SHIFT 8 947*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_MASK 0x000000FF 948*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_WORD word6 949*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_SHIFT 24 950*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_MASK 0x000000FF 951*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_WORD word6 952*4882a593Smuzhiyun uint32_t word7; 953*4882a593Smuzhiyun #define lpfc_mbox_hdr_status_SHIFT 0 954*4882a593Smuzhiyun #define lpfc_mbox_hdr_status_MASK 0x000000FF 955*4882a593Smuzhiyun #define lpfc_mbox_hdr_status_WORD word7 956*4882a593Smuzhiyun #define lpfc_mbox_hdr_add_status_SHIFT 8 957*4882a593Smuzhiyun #define lpfc_mbox_hdr_add_status_MASK 0x000000FF 958*4882a593Smuzhiyun #define lpfc_mbox_hdr_add_status_WORD word7 959*4882a593Smuzhiyun uint32_t response_length; 960*4882a593Smuzhiyun uint32_t actual_response_length; 961*4882a593Smuzhiyun } response; 962*4882a593Smuzhiyun }; 963*4882a593Smuzhiyun 964*4882a593Smuzhiyun /* Mailbox Header structures. 965*4882a593Smuzhiyun * struct mbox_header is defined for first generation SLI4_CFG mailbox 966*4882a593Smuzhiyun * calls deployed for BE-based ports. 967*4882a593Smuzhiyun * 968*4882a593Smuzhiyun * struct sli4_mbox_header is defined for second generation SLI4 969*4882a593Smuzhiyun * ports that don't deploy the SLI4_CFG mechanism. 970*4882a593Smuzhiyun */ 971*4882a593Smuzhiyun struct mbox_header { 972*4882a593Smuzhiyun struct lpfc_sli4_cfg_mhdr cfg_mhdr; 973*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr cfg_shdr; 974*4882a593Smuzhiyun }; 975*4882a593Smuzhiyun 976*4882a593Smuzhiyun #define LPFC_EXTENT_LOCAL 0 977*4882a593Smuzhiyun #define LPFC_TIMEOUT_DEFAULT 0 978*4882a593Smuzhiyun #define LPFC_EXTENT_VERSION_DEFAULT 0 979*4882a593Smuzhiyun 980*4882a593Smuzhiyun /* Subsystem Definitions */ 981*4882a593Smuzhiyun #define LPFC_MBOX_SUBSYSTEM_NA 0x0 982*4882a593Smuzhiyun #define LPFC_MBOX_SUBSYSTEM_COMMON 0x1 983*4882a593Smuzhiyun #define LPFC_MBOX_SUBSYSTEM_LOWLEVEL 0xB 984*4882a593Smuzhiyun #define LPFC_MBOX_SUBSYSTEM_FCOE 0xC 985*4882a593Smuzhiyun 986*4882a593Smuzhiyun /* Device Specific Definitions */ 987*4882a593Smuzhiyun 988*4882a593Smuzhiyun /* The HOST ENDIAN defines are in Big Endian format. */ 989*4882a593Smuzhiyun #define HOST_ENDIAN_LOW_WORD0 0xFF3412FF 990*4882a593Smuzhiyun #define HOST_ENDIAN_HIGH_WORD1 0xFF7856FF 991*4882a593Smuzhiyun 992*4882a593Smuzhiyun /* Common Opcodes */ 993*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_NA 0x00 994*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_CQ_CREATE 0x0C 995*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_EQ_CREATE 0x0D 996*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_MQ_CREATE 0x15 997*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_CNTL_ATTRIBUTES 0x20 998*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_NOP 0x21 999*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_MODIFY_EQ_DELAY 0x29 1000*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_MQ_DESTROY 0x35 1001*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_CQ_DESTROY 0x36 1002*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_EQ_DESTROY 0x37 1003*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_QUERY_FW_CFG 0x3A 1004*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FUNCTION_RESET 0x3D 1005*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_PHYSICAL_LINK_CONFIG 0x3E 1006*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_BOOT_CONFIG 0x43 1007*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_BEACON_CONFIG 0x45 1008*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_BEACON_CONFIG 0x46 1009*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_PORT_NAME 0x4D 1010*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_MQ_CREATE_EXT 0x5A 1011*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_VPD_DATA 0x5B 1012*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_HOST_DATA 0x5D 1013*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SEND_ACTIVATION 0x73 1014*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_RESET_LICENSES 0x74 1015*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_RSRC_EXTENT_INFO 0x9A 1016*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_ALLOC_RSRC_EXTENT 0x9B 1017*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_ALLOC_RSRC_EXTENT 0x9C 1018*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_DEALLOC_RSRC_EXTENT 0x9D 1019*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_FUNCTION_CONFIG 0xA0 1020*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_PROFILE_CAPACITIES 0xA1 1021*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_PROFILE_CONFIG 0xA4 1022*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_PROFILE_CONFIG 0xA5 1023*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_PROFILE_LIST 0xA6 1024*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_ACT_PROFILE 0xA8 1025*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_FACTORY_PROFILE_CONFIG 0xA9 1026*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_READ_OBJECT 0xAB 1027*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_WRITE_OBJECT 0xAC 1028*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_READ_OBJECT_LIST 0xAD 1029*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_DELETE_OBJECT 0xAE 1030*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_SLI4_PARAMETERS 0xB5 1031*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_FEATURES 0xBF 1032*4882a593Smuzhiyun 1033*4882a593Smuzhiyun /* FCoE Opcodes */ 1034*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_WQ_CREATE 0x01 1035*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_WQ_DESTROY 0x02 1036*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_POST_SGL_PAGES 0x03 1037*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_REMOVE_SGL_PAGES 0x04 1038*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_RQ_CREATE 0x05 1039*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_RQ_DESTROY 0x06 1040*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_READ_FCF_TABLE 0x08 1041*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_ADD_FCF 0x09 1042*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_DELETE_FCF 0x0A 1043*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_POST_HDR_TEMPLATE 0x0B 1044*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_REDISCOVER_FCF 0x10 1045*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_CQ_CREATE_SET 0x1D 1046*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_SET_FCLINK_SETTINGS 0x21 1047*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_LINK_DIAG_STATE 0x22 1048*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_LINK_DIAG_LOOPBACK 0x23 1049*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_FC_SET_TRUNK_MODE 0x42 1050*4882a593Smuzhiyun 1051*4882a593Smuzhiyun /* Low level Opcodes */ 1052*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_DIAG_LOG_OPTION 0x37 1053*4882a593Smuzhiyun 1054*4882a593Smuzhiyun /* Mailbox command structures */ 1055*4882a593Smuzhiyun struct eq_context { 1056*4882a593Smuzhiyun uint32_t word0; 1057*4882a593Smuzhiyun #define lpfc_eq_context_size_SHIFT 31 1058*4882a593Smuzhiyun #define lpfc_eq_context_size_MASK 0x00000001 1059*4882a593Smuzhiyun #define lpfc_eq_context_size_WORD word0 1060*4882a593Smuzhiyun #define LPFC_EQE_SIZE_4 0x0 1061*4882a593Smuzhiyun #define LPFC_EQE_SIZE_16 0x1 1062*4882a593Smuzhiyun #define lpfc_eq_context_valid_SHIFT 29 1063*4882a593Smuzhiyun #define lpfc_eq_context_valid_MASK 0x00000001 1064*4882a593Smuzhiyun #define lpfc_eq_context_valid_WORD word0 1065*4882a593Smuzhiyun #define lpfc_eq_context_autovalid_SHIFT 28 1066*4882a593Smuzhiyun #define lpfc_eq_context_autovalid_MASK 0x00000001 1067*4882a593Smuzhiyun #define lpfc_eq_context_autovalid_WORD word0 1068*4882a593Smuzhiyun uint32_t word1; 1069*4882a593Smuzhiyun #define lpfc_eq_context_count_SHIFT 26 1070*4882a593Smuzhiyun #define lpfc_eq_context_count_MASK 0x00000003 1071*4882a593Smuzhiyun #define lpfc_eq_context_count_WORD word1 1072*4882a593Smuzhiyun #define LPFC_EQ_CNT_256 0x0 1073*4882a593Smuzhiyun #define LPFC_EQ_CNT_512 0x1 1074*4882a593Smuzhiyun #define LPFC_EQ_CNT_1024 0x2 1075*4882a593Smuzhiyun #define LPFC_EQ_CNT_2048 0x3 1076*4882a593Smuzhiyun #define LPFC_EQ_CNT_4096 0x4 1077*4882a593Smuzhiyun uint32_t word2; 1078*4882a593Smuzhiyun #define lpfc_eq_context_delay_multi_SHIFT 13 1079*4882a593Smuzhiyun #define lpfc_eq_context_delay_multi_MASK 0x000003FF 1080*4882a593Smuzhiyun #define lpfc_eq_context_delay_multi_WORD word2 1081*4882a593Smuzhiyun uint32_t reserved3; 1082*4882a593Smuzhiyun }; 1083*4882a593Smuzhiyun 1084*4882a593Smuzhiyun struct eq_delay_info { 1085*4882a593Smuzhiyun uint32_t eq_id; 1086*4882a593Smuzhiyun uint32_t phase; 1087*4882a593Smuzhiyun uint32_t delay_multi; 1088*4882a593Smuzhiyun }; 1089*4882a593Smuzhiyun #define LPFC_MAX_EQ_DELAY_EQID_CNT 8 1090*4882a593Smuzhiyun 1091*4882a593Smuzhiyun struct sgl_page_pairs { 1092*4882a593Smuzhiyun uint32_t sgl_pg0_addr_lo; 1093*4882a593Smuzhiyun uint32_t sgl_pg0_addr_hi; 1094*4882a593Smuzhiyun uint32_t sgl_pg1_addr_lo; 1095*4882a593Smuzhiyun uint32_t sgl_pg1_addr_hi; 1096*4882a593Smuzhiyun }; 1097*4882a593Smuzhiyun 1098*4882a593Smuzhiyun struct lpfc_mbx_post_sgl_pages { 1099*4882a593Smuzhiyun struct mbox_header header; 1100*4882a593Smuzhiyun uint32_t word0; 1101*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xri_SHIFT 0 1102*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xri_MASK 0x0000FFFF 1103*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xri_WORD word0 1104*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xricnt_SHIFT 16 1105*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xricnt_MASK 0x0000FFFF 1106*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xricnt_WORD word0 1107*4882a593Smuzhiyun struct sgl_page_pairs sgl_pg_pairs[1]; 1108*4882a593Smuzhiyun }; 1109*4882a593Smuzhiyun 1110*4882a593Smuzhiyun /* word0 of page-1 struct shares the same SHIFT/MASK/WORD defines as above */ 1111*4882a593Smuzhiyun struct lpfc_mbx_post_uembed_sgl_page1 { 1112*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr cfg_shdr; 1113*4882a593Smuzhiyun uint32_t word0; 1114*4882a593Smuzhiyun struct sgl_page_pairs sgl_pg_pairs; 1115*4882a593Smuzhiyun }; 1116*4882a593Smuzhiyun 1117*4882a593Smuzhiyun struct lpfc_mbx_sge { 1118*4882a593Smuzhiyun uint32_t pa_lo; 1119*4882a593Smuzhiyun uint32_t pa_hi; 1120*4882a593Smuzhiyun uint32_t length; 1121*4882a593Smuzhiyun }; 1122*4882a593Smuzhiyun 1123*4882a593Smuzhiyun struct lpfc_mbx_nembed_cmd { 1124*4882a593Smuzhiyun struct lpfc_sli4_cfg_mhdr cfg_mhdr; 1125*4882a593Smuzhiyun #define LPFC_SLI4_MBX_SGE_MAX_PAGES 19 1126*4882a593Smuzhiyun struct lpfc_mbx_sge sge[LPFC_SLI4_MBX_SGE_MAX_PAGES]; 1127*4882a593Smuzhiyun }; 1128*4882a593Smuzhiyun 1129*4882a593Smuzhiyun struct lpfc_mbx_nembed_sge_virt { 1130*4882a593Smuzhiyun void *addr[LPFC_SLI4_MBX_SGE_MAX_PAGES]; 1131*4882a593Smuzhiyun }; 1132*4882a593Smuzhiyun 1133*4882a593Smuzhiyun struct lpfc_mbx_eq_create { 1134*4882a593Smuzhiyun struct mbox_header header; 1135*4882a593Smuzhiyun union { 1136*4882a593Smuzhiyun struct { 1137*4882a593Smuzhiyun uint32_t word0; 1138*4882a593Smuzhiyun #define lpfc_mbx_eq_create_num_pages_SHIFT 0 1139*4882a593Smuzhiyun #define lpfc_mbx_eq_create_num_pages_MASK 0x0000FFFF 1140*4882a593Smuzhiyun #define lpfc_mbx_eq_create_num_pages_WORD word0 1141*4882a593Smuzhiyun struct eq_context context; 1142*4882a593Smuzhiyun struct dma_address page[LPFC_MAX_EQ_PAGE]; 1143*4882a593Smuzhiyun } request; 1144*4882a593Smuzhiyun struct { 1145*4882a593Smuzhiyun uint32_t word0; 1146*4882a593Smuzhiyun #define lpfc_mbx_eq_create_q_id_SHIFT 0 1147*4882a593Smuzhiyun #define lpfc_mbx_eq_create_q_id_MASK 0x0000FFFF 1148*4882a593Smuzhiyun #define lpfc_mbx_eq_create_q_id_WORD word0 1149*4882a593Smuzhiyun } response; 1150*4882a593Smuzhiyun } u; 1151*4882a593Smuzhiyun }; 1152*4882a593Smuzhiyun 1153*4882a593Smuzhiyun struct lpfc_mbx_modify_eq_delay { 1154*4882a593Smuzhiyun struct mbox_header header; 1155*4882a593Smuzhiyun union { 1156*4882a593Smuzhiyun struct { 1157*4882a593Smuzhiyun uint32_t num_eq; 1158*4882a593Smuzhiyun struct eq_delay_info eq[LPFC_MAX_EQ_DELAY_EQID_CNT]; 1159*4882a593Smuzhiyun } request; 1160*4882a593Smuzhiyun struct { 1161*4882a593Smuzhiyun uint32_t word0; 1162*4882a593Smuzhiyun } response; 1163*4882a593Smuzhiyun } u; 1164*4882a593Smuzhiyun }; 1165*4882a593Smuzhiyun 1166*4882a593Smuzhiyun struct lpfc_mbx_eq_destroy { 1167*4882a593Smuzhiyun struct mbox_header header; 1168*4882a593Smuzhiyun union { 1169*4882a593Smuzhiyun struct { 1170*4882a593Smuzhiyun uint32_t word0; 1171*4882a593Smuzhiyun #define lpfc_mbx_eq_destroy_q_id_SHIFT 0 1172*4882a593Smuzhiyun #define lpfc_mbx_eq_destroy_q_id_MASK 0x0000FFFF 1173*4882a593Smuzhiyun #define lpfc_mbx_eq_destroy_q_id_WORD word0 1174*4882a593Smuzhiyun } request; 1175*4882a593Smuzhiyun struct { 1176*4882a593Smuzhiyun uint32_t word0; 1177*4882a593Smuzhiyun } response; 1178*4882a593Smuzhiyun } u; 1179*4882a593Smuzhiyun }; 1180*4882a593Smuzhiyun 1181*4882a593Smuzhiyun struct lpfc_mbx_nop { 1182*4882a593Smuzhiyun struct mbox_header header; 1183*4882a593Smuzhiyun uint32_t context[2]; 1184*4882a593Smuzhiyun }; 1185*4882a593Smuzhiyun 1186*4882a593Smuzhiyun 1187*4882a593Smuzhiyun 1188*4882a593Smuzhiyun struct lpfc_mbx_set_ras_fwlog { 1189*4882a593Smuzhiyun struct mbox_header header; 1190*4882a593Smuzhiyun union { 1191*4882a593Smuzhiyun struct { 1192*4882a593Smuzhiyun uint32_t word4; 1193*4882a593Smuzhiyun #define lpfc_fwlog_enable_SHIFT 0 1194*4882a593Smuzhiyun #define lpfc_fwlog_enable_MASK 0x00000001 1195*4882a593Smuzhiyun #define lpfc_fwlog_enable_WORD word4 1196*4882a593Smuzhiyun #define lpfc_fwlog_loglvl_SHIFT 8 1197*4882a593Smuzhiyun #define lpfc_fwlog_loglvl_MASK 0x0000000F 1198*4882a593Smuzhiyun #define lpfc_fwlog_loglvl_WORD word4 1199*4882a593Smuzhiyun #define lpfc_fwlog_ra_SHIFT 15 1200*4882a593Smuzhiyun #define lpfc_fwlog_ra_WORD 0x00000008 1201*4882a593Smuzhiyun #define lpfc_fwlog_buffcnt_SHIFT 16 1202*4882a593Smuzhiyun #define lpfc_fwlog_buffcnt_MASK 0x000000FF 1203*4882a593Smuzhiyun #define lpfc_fwlog_buffcnt_WORD word4 1204*4882a593Smuzhiyun #define lpfc_fwlog_buffsz_SHIFT 24 1205*4882a593Smuzhiyun #define lpfc_fwlog_buffsz_MASK 0x000000FF 1206*4882a593Smuzhiyun #define lpfc_fwlog_buffsz_WORD word4 1207*4882a593Smuzhiyun uint32_t word5; 1208*4882a593Smuzhiyun #define lpfc_fwlog_acqe_SHIFT 0 1209*4882a593Smuzhiyun #define lpfc_fwlog_acqe_MASK 0x0000FFFF 1210*4882a593Smuzhiyun #define lpfc_fwlog_acqe_WORD word5 1211*4882a593Smuzhiyun #define lpfc_fwlog_cqid_SHIFT 16 1212*4882a593Smuzhiyun #define lpfc_fwlog_cqid_MASK 0x0000FFFF 1213*4882a593Smuzhiyun #define lpfc_fwlog_cqid_WORD word5 1214*4882a593Smuzhiyun #define LPFC_MAX_FWLOG_PAGE 16 1215*4882a593Smuzhiyun struct dma_address lwpd; 1216*4882a593Smuzhiyun struct dma_address buff_fwlog[LPFC_MAX_FWLOG_PAGE]; 1217*4882a593Smuzhiyun } request; 1218*4882a593Smuzhiyun struct { 1219*4882a593Smuzhiyun uint32_t word0; 1220*4882a593Smuzhiyun } response; 1221*4882a593Smuzhiyun } u; 1222*4882a593Smuzhiyun }; 1223*4882a593Smuzhiyun 1224*4882a593Smuzhiyun 1225*4882a593Smuzhiyun struct cq_context { 1226*4882a593Smuzhiyun uint32_t word0; 1227*4882a593Smuzhiyun #define lpfc_cq_context_event_SHIFT 31 1228*4882a593Smuzhiyun #define lpfc_cq_context_event_MASK 0x00000001 1229*4882a593Smuzhiyun #define lpfc_cq_context_event_WORD word0 1230*4882a593Smuzhiyun #define lpfc_cq_context_valid_SHIFT 29 1231*4882a593Smuzhiyun #define lpfc_cq_context_valid_MASK 0x00000001 1232*4882a593Smuzhiyun #define lpfc_cq_context_valid_WORD word0 1233*4882a593Smuzhiyun #define lpfc_cq_context_count_SHIFT 27 1234*4882a593Smuzhiyun #define lpfc_cq_context_count_MASK 0x00000003 1235*4882a593Smuzhiyun #define lpfc_cq_context_count_WORD word0 1236*4882a593Smuzhiyun #define LPFC_CQ_CNT_256 0x0 1237*4882a593Smuzhiyun #define LPFC_CQ_CNT_512 0x1 1238*4882a593Smuzhiyun #define LPFC_CQ_CNT_1024 0x2 1239*4882a593Smuzhiyun #define LPFC_CQ_CNT_WORD7 0x3 1240*4882a593Smuzhiyun #define lpfc_cq_context_autovalid_SHIFT 15 1241*4882a593Smuzhiyun #define lpfc_cq_context_autovalid_MASK 0x00000001 1242*4882a593Smuzhiyun #define lpfc_cq_context_autovalid_WORD word0 1243*4882a593Smuzhiyun uint32_t word1; 1244*4882a593Smuzhiyun #define lpfc_cq_eq_id_SHIFT 22 /* Version 0 Only */ 1245*4882a593Smuzhiyun #define lpfc_cq_eq_id_MASK 0x000000FF 1246*4882a593Smuzhiyun #define lpfc_cq_eq_id_WORD word1 1247*4882a593Smuzhiyun #define lpfc_cq_eq_id_2_SHIFT 0 /* Version 2 Only */ 1248*4882a593Smuzhiyun #define lpfc_cq_eq_id_2_MASK 0x0000FFFF 1249*4882a593Smuzhiyun #define lpfc_cq_eq_id_2_WORD word1 1250*4882a593Smuzhiyun uint32_t lpfc_cq_context_count; /* Version 2 Only */ 1251*4882a593Smuzhiyun uint32_t reserved1; 1252*4882a593Smuzhiyun }; 1253*4882a593Smuzhiyun 1254*4882a593Smuzhiyun struct lpfc_mbx_cq_create { 1255*4882a593Smuzhiyun struct mbox_header header; 1256*4882a593Smuzhiyun union { 1257*4882a593Smuzhiyun struct { 1258*4882a593Smuzhiyun uint32_t word0; 1259*4882a593Smuzhiyun #define lpfc_mbx_cq_create_page_size_SHIFT 16 /* Version 2 Only */ 1260*4882a593Smuzhiyun #define lpfc_mbx_cq_create_page_size_MASK 0x000000FF 1261*4882a593Smuzhiyun #define lpfc_mbx_cq_create_page_size_WORD word0 1262*4882a593Smuzhiyun #define lpfc_mbx_cq_create_num_pages_SHIFT 0 1263*4882a593Smuzhiyun #define lpfc_mbx_cq_create_num_pages_MASK 0x0000FFFF 1264*4882a593Smuzhiyun #define lpfc_mbx_cq_create_num_pages_WORD word0 1265*4882a593Smuzhiyun struct cq_context context; 1266*4882a593Smuzhiyun struct dma_address page[LPFC_MAX_CQ_PAGE]; 1267*4882a593Smuzhiyun } request; 1268*4882a593Smuzhiyun struct { 1269*4882a593Smuzhiyun uint32_t word0; 1270*4882a593Smuzhiyun #define lpfc_mbx_cq_create_q_id_SHIFT 0 1271*4882a593Smuzhiyun #define lpfc_mbx_cq_create_q_id_MASK 0x0000FFFF 1272*4882a593Smuzhiyun #define lpfc_mbx_cq_create_q_id_WORD word0 1273*4882a593Smuzhiyun } response; 1274*4882a593Smuzhiyun } u; 1275*4882a593Smuzhiyun }; 1276*4882a593Smuzhiyun 1277*4882a593Smuzhiyun struct lpfc_mbx_cq_create_set { 1278*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr cfg_shdr; 1279*4882a593Smuzhiyun union { 1280*4882a593Smuzhiyun struct { 1281*4882a593Smuzhiyun uint32_t word0; 1282*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_page_size_SHIFT 16 /* Version 2 Only */ 1283*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_page_size_MASK 0x000000FF 1284*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_page_size_WORD word0 1285*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_pages_SHIFT 0 1286*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_pages_MASK 0x0000FFFF 1287*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_pages_WORD word0 1288*4882a593Smuzhiyun uint32_t word1; 1289*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_evt_SHIFT 31 1290*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_evt_MASK 0x00000001 1291*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_evt_WORD word1 1292*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_valid_SHIFT 29 1293*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_valid_MASK 0x00000001 1294*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_valid_WORD word1 1295*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_cnt_SHIFT 27 1296*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_cnt_MASK 0x00000003 1297*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_cnt_WORD word1 1298*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_size_SHIFT 25 1299*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_size_MASK 0x00000003 1300*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_size_WORD word1 1301*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_autovalid_SHIFT 15 1302*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_autovalid_MASK 0x0000001 1303*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_autovalid_WORD word1 1304*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_nodelay_SHIFT 14 1305*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_nodelay_MASK 0x00000001 1306*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_nodelay_WORD word1 1307*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_clswm_SHIFT 12 1308*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_clswm_MASK 0x00000003 1309*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_clswm_WORD word1 1310*4882a593Smuzhiyun uint32_t word2; 1311*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_arm_SHIFT 31 1312*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_arm_MASK 0x00000001 1313*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_arm_WORD word2 1314*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cq_cnt_SHIFT 16 1315*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cq_cnt_MASK 0x00007FFF 1316*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cq_cnt_WORD word2 1317*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_cq_SHIFT 0 1318*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_cq_MASK 0x0000FFFF 1319*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_cq_WORD word2 1320*4882a593Smuzhiyun uint32_t word3; 1321*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id1_SHIFT 16 1322*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id1_MASK 0x0000FFFF 1323*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id1_WORD word3 1324*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id0_SHIFT 0 1325*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id0_MASK 0x0000FFFF 1326*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id0_WORD word3 1327*4882a593Smuzhiyun uint32_t word4; 1328*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id3_SHIFT 16 1329*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id3_MASK 0x0000FFFF 1330*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id3_WORD word4 1331*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id2_SHIFT 0 1332*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id2_MASK 0x0000FFFF 1333*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id2_WORD word4 1334*4882a593Smuzhiyun uint32_t word5; 1335*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id5_SHIFT 16 1336*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id5_MASK 0x0000FFFF 1337*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id5_WORD word5 1338*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id4_SHIFT 0 1339*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id4_MASK 0x0000FFFF 1340*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id4_WORD word5 1341*4882a593Smuzhiyun uint32_t word6; 1342*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id7_SHIFT 16 1343*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id7_MASK 0x0000FFFF 1344*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id7_WORD word6 1345*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id6_SHIFT 0 1346*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id6_MASK 0x0000FFFF 1347*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id6_WORD word6 1348*4882a593Smuzhiyun uint32_t word7; 1349*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id9_SHIFT 16 1350*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id9_MASK 0x0000FFFF 1351*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id9_WORD word7 1352*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id8_SHIFT 0 1353*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id8_MASK 0x0000FFFF 1354*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id8_WORD word7 1355*4882a593Smuzhiyun uint32_t word8; 1356*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id11_SHIFT 16 1357*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id11_MASK 0x0000FFFF 1358*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id11_WORD word8 1359*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id10_SHIFT 0 1360*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id10_MASK 0x0000FFFF 1361*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id10_WORD word8 1362*4882a593Smuzhiyun uint32_t word9; 1363*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id13_SHIFT 16 1364*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id13_MASK 0x0000FFFF 1365*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id13_WORD word9 1366*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id12_SHIFT 0 1367*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id12_MASK 0x0000FFFF 1368*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id12_WORD word9 1369*4882a593Smuzhiyun uint32_t word10; 1370*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id15_SHIFT 16 1371*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id15_MASK 0x0000FFFF 1372*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id15_WORD word10 1373*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id14_SHIFT 0 1374*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id14_MASK 0x0000FFFF 1375*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id14_WORD word10 1376*4882a593Smuzhiyun struct dma_address page[1]; 1377*4882a593Smuzhiyun } request; 1378*4882a593Smuzhiyun struct { 1379*4882a593Smuzhiyun uint32_t word0; 1380*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_alloc_SHIFT 16 1381*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_alloc_MASK 0x0000FFFF 1382*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_alloc_WORD word0 1383*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_base_id_SHIFT 0 1384*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_base_id_MASK 0x0000FFFF 1385*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_base_id_WORD word0 1386*4882a593Smuzhiyun } response; 1387*4882a593Smuzhiyun } u; 1388*4882a593Smuzhiyun }; 1389*4882a593Smuzhiyun 1390*4882a593Smuzhiyun struct lpfc_mbx_cq_destroy { 1391*4882a593Smuzhiyun struct mbox_header header; 1392*4882a593Smuzhiyun union { 1393*4882a593Smuzhiyun struct { 1394*4882a593Smuzhiyun uint32_t word0; 1395*4882a593Smuzhiyun #define lpfc_mbx_cq_destroy_q_id_SHIFT 0 1396*4882a593Smuzhiyun #define lpfc_mbx_cq_destroy_q_id_MASK 0x0000FFFF 1397*4882a593Smuzhiyun #define lpfc_mbx_cq_destroy_q_id_WORD word0 1398*4882a593Smuzhiyun } request; 1399*4882a593Smuzhiyun struct { 1400*4882a593Smuzhiyun uint32_t word0; 1401*4882a593Smuzhiyun } response; 1402*4882a593Smuzhiyun } u; 1403*4882a593Smuzhiyun }; 1404*4882a593Smuzhiyun 1405*4882a593Smuzhiyun struct wq_context { 1406*4882a593Smuzhiyun uint32_t reserved0; 1407*4882a593Smuzhiyun uint32_t reserved1; 1408*4882a593Smuzhiyun uint32_t reserved2; 1409*4882a593Smuzhiyun uint32_t reserved3; 1410*4882a593Smuzhiyun }; 1411*4882a593Smuzhiyun 1412*4882a593Smuzhiyun struct lpfc_mbx_wq_create { 1413*4882a593Smuzhiyun struct mbox_header header; 1414*4882a593Smuzhiyun union { 1415*4882a593Smuzhiyun struct { /* Version 0 Request */ 1416*4882a593Smuzhiyun uint32_t word0; 1417*4882a593Smuzhiyun #define lpfc_mbx_wq_create_num_pages_SHIFT 0 1418*4882a593Smuzhiyun #define lpfc_mbx_wq_create_num_pages_MASK 0x000000FF 1419*4882a593Smuzhiyun #define lpfc_mbx_wq_create_num_pages_WORD word0 1420*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dua_SHIFT 8 1421*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dua_MASK 0x00000001 1422*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dua_WORD word0 1423*4882a593Smuzhiyun #define lpfc_mbx_wq_create_cq_id_SHIFT 16 1424*4882a593Smuzhiyun #define lpfc_mbx_wq_create_cq_id_MASK 0x0000FFFF 1425*4882a593Smuzhiyun #define lpfc_mbx_wq_create_cq_id_WORD word0 1426*4882a593Smuzhiyun struct dma_address page[LPFC_MAX_WQ_PAGE_V0]; 1427*4882a593Smuzhiyun uint32_t word9; 1428*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bua_SHIFT 0 1429*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bua_MASK 0x00000001 1430*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bua_WORD word9 1431*4882a593Smuzhiyun #define lpfc_mbx_wq_create_ulp_num_SHIFT 8 1432*4882a593Smuzhiyun #define lpfc_mbx_wq_create_ulp_num_MASK 0x000000FF 1433*4882a593Smuzhiyun #define lpfc_mbx_wq_create_ulp_num_WORD word9 1434*4882a593Smuzhiyun } request; 1435*4882a593Smuzhiyun struct { /* Version 1 Request */ 1436*4882a593Smuzhiyun uint32_t word0; /* Word 0 is the same as in v0 */ 1437*4882a593Smuzhiyun uint32_t word1; 1438*4882a593Smuzhiyun #define lpfc_mbx_wq_create_page_size_SHIFT 0 1439*4882a593Smuzhiyun #define lpfc_mbx_wq_create_page_size_MASK 0x000000FF 1440*4882a593Smuzhiyun #define lpfc_mbx_wq_create_page_size_WORD word1 1441*4882a593Smuzhiyun #define LPFC_WQ_PAGE_SIZE_4096 0x1 1442*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_req_SHIFT 15 1443*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_req_MASK 0x00000001 1444*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_req_WORD word1 1445*4882a593Smuzhiyun #define lpfc_mbx_wq_create_doe_SHIFT 14 1446*4882a593Smuzhiyun #define lpfc_mbx_wq_create_doe_MASK 0x00000001 1447*4882a593Smuzhiyun #define lpfc_mbx_wq_create_doe_WORD word1 1448*4882a593Smuzhiyun #define lpfc_mbx_wq_create_toe_SHIFT 13 1449*4882a593Smuzhiyun #define lpfc_mbx_wq_create_toe_MASK 0x00000001 1450*4882a593Smuzhiyun #define lpfc_mbx_wq_create_toe_WORD word1 1451*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_size_SHIFT 8 1452*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_size_MASK 0x0000000F 1453*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_size_WORD word1 1454*4882a593Smuzhiyun #define LPFC_WQ_WQE_SIZE_64 0x5 1455*4882a593Smuzhiyun #define LPFC_WQ_WQE_SIZE_128 0x6 1456*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_count_SHIFT 16 1457*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_count_MASK 0x0000FFFF 1458*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_count_WORD word1 1459*4882a593Smuzhiyun uint32_t word2; 1460*4882a593Smuzhiyun struct dma_address page[LPFC_MAX_WQ_PAGE-1]; 1461*4882a593Smuzhiyun } request_1; 1462*4882a593Smuzhiyun struct { 1463*4882a593Smuzhiyun uint32_t word0; 1464*4882a593Smuzhiyun #define lpfc_mbx_wq_create_q_id_SHIFT 0 1465*4882a593Smuzhiyun #define lpfc_mbx_wq_create_q_id_MASK 0x0000FFFF 1466*4882a593Smuzhiyun #define lpfc_mbx_wq_create_q_id_WORD word0 1467*4882a593Smuzhiyun uint32_t doorbell_offset; 1468*4882a593Smuzhiyun uint32_t word2; 1469*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bar_set_SHIFT 0 1470*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bar_set_MASK 0x0000FFFF 1471*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bar_set_WORD word2 1472*4882a593Smuzhiyun #define WQ_PCI_BAR_0_AND_1 0x00 1473*4882a593Smuzhiyun #define WQ_PCI_BAR_2_AND_3 0x01 1474*4882a593Smuzhiyun #define WQ_PCI_BAR_4_AND_5 0x02 1475*4882a593Smuzhiyun #define lpfc_mbx_wq_create_db_format_SHIFT 16 1476*4882a593Smuzhiyun #define lpfc_mbx_wq_create_db_format_MASK 0x0000FFFF 1477*4882a593Smuzhiyun #define lpfc_mbx_wq_create_db_format_WORD word2 1478*4882a593Smuzhiyun } response; 1479*4882a593Smuzhiyun struct { 1480*4882a593Smuzhiyun uint32_t word0; 1481*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_rsp_SHIFT 31 1482*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_rsp_MASK 0x00000001 1483*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_rsp_WORD word0 1484*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_q_id_SHIFT 0 1485*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_q_id_MASK 0x0000FFFF 1486*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_q_id_WORD word0 1487*4882a593Smuzhiyun uint32_t word1; 1488*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_bar_set_SHIFT 0 1489*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_bar_set_MASK 0x0000000F 1490*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_bar_set_WORD word1 1491*4882a593Smuzhiyun uint32_t doorbell_offset; 1492*4882a593Smuzhiyun uint32_t word3; 1493*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_id_SHIFT 16 1494*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_id_MASK 0x0000001F 1495*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_id_WORD word3 1496*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_bar_SHIFT 0 1497*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_bar_MASK 0x0000000F 1498*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_bar_WORD word3 1499*4882a593Smuzhiyun uint32_t dpp_offset; 1500*4882a593Smuzhiyun } response_1; 1501*4882a593Smuzhiyun } u; 1502*4882a593Smuzhiyun }; 1503*4882a593Smuzhiyun 1504*4882a593Smuzhiyun struct lpfc_mbx_wq_destroy { 1505*4882a593Smuzhiyun struct mbox_header header; 1506*4882a593Smuzhiyun union { 1507*4882a593Smuzhiyun struct { 1508*4882a593Smuzhiyun uint32_t word0; 1509*4882a593Smuzhiyun #define lpfc_mbx_wq_destroy_q_id_SHIFT 0 1510*4882a593Smuzhiyun #define lpfc_mbx_wq_destroy_q_id_MASK 0x0000FFFF 1511*4882a593Smuzhiyun #define lpfc_mbx_wq_destroy_q_id_WORD word0 1512*4882a593Smuzhiyun } request; 1513*4882a593Smuzhiyun struct { 1514*4882a593Smuzhiyun uint32_t word0; 1515*4882a593Smuzhiyun } response; 1516*4882a593Smuzhiyun } u; 1517*4882a593Smuzhiyun }; 1518*4882a593Smuzhiyun 1519*4882a593Smuzhiyun #define LPFC_HDR_BUF_SIZE 128 1520*4882a593Smuzhiyun #define LPFC_DATA_BUF_SIZE 2048 1521*4882a593Smuzhiyun #define LPFC_NVMET_DATA_BUF_SIZE 128 1522*4882a593Smuzhiyun struct rq_context { 1523*4882a593Smuzhiyun uint32_t word0; 1524*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_SHIFT 16 /* Version 0 Only */ 1525*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_MASK 0x0000000F 1526*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_WORD word0 1527*4882a593Smuzhiyun #define LPFC_RQ_RING_SIZE_512 9 /* 512 entries */ 1528*4882a593Smuzhiyun #define LPFC_RQ_RING_SIZE_1024 10 /* 1024 entries */ 1529*4882a593Smuzhiyun #define LPFC_RQ_RING_SIZE_2048 11 /* 2048 entries */ 1530*4882a593Smuzhiyun #define LPFC_RQ_RING_SIZE_4096 12 /* 4096 entries */ 1531*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_1_SHIFT 16 /* Version 1-2 Only */ 1532*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_1_MASK 0x0000FFFF 1533*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_1_WORD word0 1534*4882a593Smuzhiyun #define lpfc_rq_context_rqe_size_SHIFT 8 /* Version 1-2 Only */ 1535*4882a593Smuzhiyun #define lpfc_rq_context_rqe_size_MASK 0x0000000F 1536*4882a593Smuzhiyun #define lpfc_rq_context_rqe_size_WORD word0 1537*4882a593Smuzhiyun #define LPFC_RQE_SIZE_8 2 1538*4882a593Smuzhiyun #define LPFC_RQE_SIZE_16 3 1539*4882a593Smuzhiyun #define LPFC_RQE_SIZE_32 4 1540*4882a593Smuzhiyun #define LPFC_RQE_SIZE_64 5 1541*4882a593Smuzhiyun #define LPFC_RQE_SIZE_128 6 1542*4882a593Smuzhiyun #define lpfc_rq_context_page_size_SHIFT 0 /* Version 1 Only */ 1543*4882a593Smuzhiyun #define lpfc_rq_context_page_size_MASK 0x000000FF 1544*4882a593Smuzhiyun #define lpfc_rq_context_page_size_WORD word0 1545*4882a593Smuzhiyun #define LPFC_RQ_PAGE_SIZE_4096 0x1 1546*4882a593Smuzhiyun uint32_t word1; 1547*4882a593Smuzhiyun #define lpfc_rq_context_data_size_SHIFT 16 /* Version 2 Only */ 1548*4882a593Smuzhiyun #define lpfc_rq_context_data_size_MASK 0x0000FFFF 1549*4882a593Smuzhiyun #define lpfc_rq_context_data_size_WORD word1 1550*4882a593Smuzhiyun #define lpfc_rq_context_hdr_size_SHIFT 0 /* Version 2 Only */ 1551*4882a593Smuzhiyun #define lpfc_rq_context_hdr_size_MASK 0x0000FFFF 1552*4882a593Smuzhiyun #define lpfc_rq_context_hdr_size_WORD word1 1553*4882a593Smuzhiyun uint32_t word2; 1554*4882a593Smuzhiyun #define lpfc_rq_context_cq_id_SHIFT 16 1555*4882a593Smuzhiyun #define lpfc_rq_context_cq_id_MASK 0x000003FF 1556*4882a593Smuzhiyun #define lpfc_rq_context_cq_id_WORD word2 1557*4882a593Smuzhiyun #define lpfc_rq_context_buf_size_SHIFT 0 1558*4882a593Smuzhiyun #define lpfc_rq_context_buf_size_MASK 0x0000FFFF 1559*4882a593Smuzhiyun #define lpfc_rq_context_buf_size_WORD word2 1560*4882a593Smuzhiyun #define lpfc_rq_context_base_cq_SHIFT 0 /* Version 2 Only */ 1561*4882a593Smuzhiyun #define lpfc_rq_context_base_cq_MASK 0x0000FFFF 1562*4882a593Smuzhiyun #define lpfc_rq_context_base_cq_WORD word2 1563*4882a593Smuzhiyun uint32_t buffer_size; /* Version 1 Only */ 1564*4882a593Smuzhiyun }; 1565*4882a593Smuzhiyun 1566*4882a593Smuzhiyun struct lpfc_mbx_rq_create { 1567*4882a593Smuzhiyun struct mbox_header header; 1568*4882a593Smuzhiyun union { 1569*4882a593Smuzhiyun struct { 1570*4882a593Smuzhiyun uint32_t word0; 1571*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_SHIFT 0 1572*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_MASK 0x0000FFFF 1573*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_WORD word0 1574*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_SHIFT 16 1575*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_MASK 0x00000001 1576*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_WORD word0 1577*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_SHIFT 17 1578*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_MASK 0x00000001 1579*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_WORD word0 1580*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_SHIFT 24 1581*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_MASK 0x000000FF 1582*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_WORD word0 1583*4882a593Smuzhiyun struct rq_context context; 1584*4882a593Smuzhiyun struct dma_address page[LPFC_MAX_RQ_PAGE]; 1585*4882a593Smuzhiyun } request; 1586*4882a593Smuzhiyun struct { 1587*4882a593Smuzhiyun uint32_t word0; 1588*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_SHIFT 16 1589*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_MASK 0x0000FFFF 1590*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_WORD word0 1591*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_SHIFT 0 1592*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_MASK 0x0000FFFF 1593*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_WORD word0 1594*4882a593Smuzhiyun uint32_t doorbell_offset; 1595*4882a593Smuzhiyun uint32_t word2; 1596*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_SHIFT 0 1597*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_MASK 0x0000FFFF 1598*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_WORD word2 1599*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_SHIFT 16 1600*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_MASK 0x0000FFFF 1601*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_WORD word2 1602*4882a593Smuzhiyun } response; 1603*4882a593Smuzhiyun } u; 1604*4882a593Smuzhiyun }; 1605*4882a593Smuzhiyun 1606*4882a593Smuzhiyun struct lpfc_mbx_rq_create_v2 { 1607*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr cfg_shdr; 1608*4882a593Smuzhiyun union { 1609*4882a593Smuzhiyun struct { 1610*4882a593Smuzhiyun uint32_t word0; 1611*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_SHIFT 0 1612*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_MASK 0x0000FFFF 1613*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_WORD word0 1614*4882a593Smuzhiyun #define lpfc_mbx_rq_create_rq_cnt_SHIFT 16 1615*4882a593Smuzhiyun #define lpfc_mbx_rq_create_rq_cnt_MASK 0x000000FF 1616*4882a593Smuzhiyun #define lpfc_mbx_rq_create_rq_cnt_WORD word0 1617*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_SHIFT 16 1618*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_MASK 0x00000001 1619*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_WORD word0 1620*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_SHIFT 17 1621*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_MASK 0x00000001 1622*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_WORD word0 1623*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_SHIFT 24 1624*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_MASK 0x000000FF 1625*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_WORD word0 1626*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dim_SHIFT 29 1627*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dim_MASK 0x00000001 1628*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dim_WORD word0 1629*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dfd_SHIFT 30 1630*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dfd_MASK 0x00000001 1631*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dfd_WORD word0 1632*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dnb_SHIFT 31 1633*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dnb_MASK 0x00000001 1634*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dnb_WORD word0 1635*4882a593Smuzhiyun struct rq_context context; 1636*4882a593Smuzhiyun struct dma_address page[1]; 1637*4882a593Smuzhiyun } request; 1638*4882a593Smuzhiyun struct { 1639*4882a593Smuzhiyun uint32_t word0; 1640*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_SHIFT 16 1641*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_MASK 0x0000FFFF 1642*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_WORD word0 1643*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_SHIFT 0 1644*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_MASK 0x0000FFFF 1645*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_WORD word0 1646*4882a593Smuzhiyun uint32_t doorbell_offset; 1647*4882a593Smuzhiyun uint32_t word2; 1648*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_SHIFT 0 1649*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_MASK 0x0000FFFF 1650*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_WORD word2 1651*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_SHIFT 16 1652*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_MASK 0x0000FFFF 1653*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_WORD word2 1654*4882a593Smuzhiyun } response; 1655*4882a593Smuzhiyun } u; 1656*4882a593Smuzhiyun }; 1657*4882a593Smuzhiyun 1658*4882a593Smuzhiyun struct lpfc_mbx_rq_destroy { 1659*4882a593Smuzhiyun struct mbox_header header; 1660*4882a593Smuzhiyun union { 1661*4882a593Smuzhiyun struct { 1662*4882a593Smuzhiyun uint32_t word0; 1663*4882a593Smuzhiyun #define lpfc_mbx_rq_destroy_q_id_SHIFT 0 1664*4882a593Smuzhiyun #define lpfc_mbx_rq_destroy_q_id_MASK 0x0000FFFF 1665*4882a593Smuzhiyun #define lpfc_mbx_rq_destroy_q_id_WORD word0 1666*4882a593Smuzhiyun } request; 1667*4882a593Smuzhiyun struct { 1668*4882a593Smuzhiyun uint32_t word0; 1669*4882a593Smuzhiyun } response; 1670*4882a593Smuzhiyun } u; 1671*4882a593Smuzhiyun }; 1672*4882a593Smuzhiyun 1673*4882a593Smuzhiyun struct mq_context { 1674*4882a593Smuzhiyun uint32_t word0; 1675*4882a593Smuzhiyun #define lpfc_mq_context_cq_id_SHIFT 22 /* Version 0 Only */ 1676*4882a593Smuzhiyun #define lpfc_mq_context_cq_id_MASK 0x000003FF 1677*4882a593Smuzhiyun #define lpfc_mq_context_cq_id_WORD word0 1678*4882a593Smuzhiyun #define lpfc_mq_context_ring_size_SHIFT 16 1679*4882a593Smuzhiyun #define lpfc_mq_context_ring_size_MASK 0x0000000F 1680*4882a593Smuzhiyun #define lpfc_mq_context_ring_size_WORD word0 1681*4882a593Smuzhiyun #define LPFC_MQ_RING_SIZE_16 0x5 1682*4882a593Smuzhiyun #define LPFC_MQ_RING_SIZE_32 0x6 1683*4882a593Smuzhiyun #define LPFC_MQ_RING_SIZE_64 0x7 1684*4882a593Smuzhiyun #define LPFC_MQ_RING_SIZE_128 0x8 1685*4882a593Smuzhiyun uint32_t word1; 1686*4882a593Smuzhiyun #define lpfc_mq_context_valid_SHIFT 31 1687*4882a593Smuzhiyun #define lpfc_mq_context_valid_MASK 0x00000001 1688*4882a593Smuzhiyun #define lpfc_mq_context_valid_WORD word1 1689*4882a593Smuzhiyun uint32_t reserved2; 1690*4882a593Smuzhiyun uint32_t reserved3; 1691*4882a593Smuzhiyun }; 1692*4882a593Smuzhiyun 1693*4882a593Smuzhiyun struct lpfc_mbx_mq_create { 1694*4882a593Smuzhiyun struct mbox_header header; 1695*4882a593Smuzhiyun union { 1696*4882a593Smuzhiyun struct { 1697*4882a593Smuzhiyun uint32_t word0; 1698*4882a593Smuzhiyun #define lpfc_mbx_mq_create_num_pages_SHIFT 0 1699*4882a593Smuzhiyun #define lpfc_mbx_mq_create_num_pages_MASK 0x0000FFFF 1700*4882a593Smuzhiyun #define lpfc_mbx_mq_create_num_pages_WORD word0 1701*4882a593Smuzhiyun struct mq_context context; 1702*4882a593Smuzhiyun struct dma_address page[LPFC_MAX_MQ_PAGE]; 1703*4882a593Smuzhiyun } request; 1704*4882a593Smuzhiyun struct { 1705*4882a593Smuzhiyun uint32_t word0; 1706*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_SHIFT 0 1707*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_MASK 0x0000FFFF 1708*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_WORD word0 1709*4882a593Smuzhiyun } response; 1710*4882a593Smuzhiyun } u; 1711*4882a593Smuzhiyun }; 1712*4882a593Smuzhiyun 1713*4882a593Smuzhiyun struct lpfc_mbx_mq_create_ext { 1714*4882a593Smuzhiyun struct mbox_header header; 1715*4882a593Smuzhiyun union { 1716*4882a593Smuzhiyun struct { 1717*4882a593Smuzhiyun uint32_t word0; 1718*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_num_pages_SHIFT 0 1719*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_num_pages_MASK 0x0000FFFF 1720*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_num_pages_WORD word0 1721*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_cq_id_SHIFT 16 /* Version 1 Only */ 1722*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_cq_id_MASK 0x0000FFFF 1723*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_cq_id_WORD word0 1724*4882a593Smuzhiyun uint32_t async_evt_bmap; 1725*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_link_SHIFT LPFC_TRAILER_CODE_LINK 1726*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_link_MASK 0x00000001 1727*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_link_WORD async_evt_bmap 1728*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_NO_LINK 0x0 1729*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_10_MBIT 0x1 1730*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_100_MBIT 0x2 1731*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_1_GBIT 0x3 1732*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_10_GBIT 0x4 1733*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fip_SHIFT LPFC_TRAILER_CODE_FCOE 1734*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fip_MASK 0x00000001 1735*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fip_WORD async_evt_bmap 1736*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_group5_SHIFT LPFC_TRAILER_CODE_GRP5 1737*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_group5_MASK 0x00000001 1738*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_group5_WORD async_evt_bmap 1739*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fc_SHIFT LPFC_TRAILER_CODE_FC 1740*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fc_MASK 0x00000001 1741*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fc_WORD async_evt_bmap 1742*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_NO_LINK 0x0 1743*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_1_GBAUD 0x1 1744*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_2_GBAUD 0x2 1745*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_4_GBAUD 0x4 1746*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_8_GBAUD 0x8 1747*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_10_GBAUD 0xA 1748*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_16_GBAUD 0x10 1749*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_sli_SHIFT LPFC_TRAILER_CODE_SLI 1750*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_sli_MASK 0x00000001 1751*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_sli_WORD async_evt_bmap 1752*4882a593Smuzhiyun struct mq_context context; 1753*4882a593Smuzhiyun struct dma_address page[LPFC_MAX_MQ_PAGE]; 1754*4882a593Smuzhiyun } request; 1755*4882a593Smuzhiyun struct { 1756*4882a593Smuzhiyun uint32_t word0; 1757*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_SHIFT 0 1758*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_MASK 0x0000FFFF 1759*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_WORD word0 1760*4882a593Smuzhiyun } response; 1761*4882a593Smuzhiyun } u; 1762*4882a593Smuzhiyun #define LPFC_ASYNC_EVENT_LINK_STATE 0x2 1763*4882a593Smuzhiyun #define LPFC_ASYNC_EVENT_FCF_STATE 0x4 1764*4882a593Smuzhiyun #define LPFC_ASYNC_EVENT_GROUP5 0x20 1765*4882a593Smuzhiyun }; 1766*4882a593Smuzhiyun 1767*4882a593Smuzhiyun struct lpfc_mbx_mq_destroy { 1768*4882a593Smuzhiyun struct mbox_header header; 1769*4882a593Smuzhiyun union { 1770*4882a593Smuzhiyun struct { 1771*4882a593Smuzhiyun uint32_t word0; 1772*4882a593Smuzhiyun #define lpfc_mbx_mq_destroy_q_id_SHIFT 0 1773*4882a593Smuzhiyun #define lpfc_mbx_mq_destroy_q_id_MASK 0x0000FFFF 1774*4882a593Smuzhiyun #define lpfc_mbx_mq_destroy_q_id_WORD word0 1775*4882a593Smuzhiyun } request; 1776*4882a593Smuzhiyun struct { 1777*4882a593Smuzhiyun uint32_t word0; 1778*4882a593Smuzhiyun } response; 1779*4882a593Smuzhiyun } u; 1780*4882a593Smuzhiyun }; 1781*4882a593Smuzhiyun 1782*4882a593Smuzhiyun /* Start Gen 2 SLI4 Mailbox definitions: */ 1783*4882a593Smuzhiyun 1784*4882a593Smuzhiyun /* Define allocate-ready Gen 2 SLI4 FCoE Resource Extent Types. */ 1785*4882a593Smuzhiyun #define LPFC_RSC_TYPE_FCOE_VFI 0x20 1786*4882a593Smuzhiyun #define LPFC_RSC_TYPE_FCOE_VPI 0x21 1787*4882a593Smuzhiyun #define LPFC_RSC_TYPE_FCOE_RPI 0x22 1788*4882a593Smuzhiyun #define LPFC_RSC_TYPE_FCOE_XRI 0x23 1789*4882a593Smuzhiyun 1790*4882a593Smuzhiyun struct lpfc_mbx_get_rsrc_extent_info { 1791*4882a593Smuzhiyun struct mbox_header header; 1792*4882a593Smuzhiyun union { 1793*4882a593Smuzhiyun struct { 1794*4882a593Smuzhiyun uint32_t word4; 1795*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_type_SHIFT 0 1796*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_type_MASK 0x0000FFFF 1797*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_type_WORD word4 1798*4882a593Smuzhiyun } req; 1799*4882a593Smuzhiyun struct { 1800*4882a593Smuzhiyun uint32_t word4; 1801*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_cnt_SHIFT 0 1802*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_cnt_MASK 0x0000FFFF 1803*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_cnt_WORD word4 1804*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_size_SHIFT 16 1805*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_size_MASK 0x0000FFFF 1806*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_size_WORD word4 1807*4882a593Smuzhiyun } rsp; 1808*4882a593Smuzhiyun } u; 1809*4882a593Smuzhiyun }; 1810*4882a593Smuzhiyun 1811*4882a593Smuzhiyun struct lpfc_mbx_query_fw_config { 1812*4882a593Smuzhiyun struct mbox_header header; 1813*4882a593Smuzhiyun struct { 1814*4882a593Smuzhiyun uint32_t config_number; 1815*4882a593Smuzhiyun #define LPFC_FC_FCOE 0x00000007 1816*4882a593Smuzhiyun uint32_t asic_revision; 1817*4882a593Smuzhiyun uint32_t physical_port; 1818*4882a593Smuzhiyun uint32_t function_mode; 1819*4882a593Smuzhiyun #define LPFC_FCOE_INI_MODE 0x00000040 1820*4882a593Smuzhiyun #define LPFC_FCOE_TGT_MODE 0x00000080 1821*4882a593Smuzhiyun #define LPFC_DUA_MODE 0x00000800 1822*4882a593Smuzhiyun uint32_t ulp0_mode; 1823*4882a593Smuzhiyun #define LPFC_ULP_FCOE_INIT_MODE 0x00000040 1824*4882a593Smuzhiyun #define LPFC_ULP_FCOE_TGT_MODE 0x00000080 1825*4882a593Smuzhiyun uint32_t ulp0_nap_words[12]; 1826*4882a593Smuzhiyun uint32_t ulp1_mode; 1827*4882a593Smuzhiyun uint32_t ulp1_nap_words[12]; 1828*4882a593Smuzhiyun uint32_t function_capabilities; 1829*4882a593Smuzhiyun uint32_t cqid_base; 1830*4882a593Smuzhiyun uint32_t cqid_tot; 1831*4882a593Smuzhiyun uint32_t eqid_base; 1832*4882a593Smuzhiyun uint32_t eqid_tot; 1833*4882a593Smuzhiyun uint32_t ulp0_nap2_words[2]; 1834*4882a593Smuzhiyun uint32_t ulp1_nap2_words[2]; 1835*4882a593Smuzhiyun } rsp; 1836*4882a593Smuzhiyun }; 1837*4882a593Smuzhiyun 1838*4882a593Smuzhiyun struct lpfc_mbx_set_beacon_config { 1839*4882a593Smuzhiyun struct mbox_header header; 1840*4882a593Smuzhiyun uint32_t word4; 1841*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_num_SHIFT 0 1842*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_num_MASK 0x0000003F 1843*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_num_WORD word4 1844*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_type_SHIFT 6 1845*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_type_MASK 0x00000003 1846*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_type_WORD word4 1847*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_state_SHIFT 8 1848*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_state_MASK 0x000000FF 1849*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_state_WORD word4 1850*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_SHIFT 16 1851*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_MASK 0x000000FF 1852*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_WORD word4 1853*4882a593Smuzhiyun 1854*4882a593Smuzhiyun /* COMMON_SET_BEACON_CONFIG_V1 */ 1855*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_v1_SHIFT 16 1856*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_v1_MASK 0x0000FFFF 1857*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_v1_WORD word4 1858*4882a593Smuzhiyun uint32_t word5; /* RESERVED */ 1859*4882a593Smuzhiyun }; 1860*4882a593Smuzhiyun 1861*4882a593Smuzhiyun struct lpfc_id_range { 1862*4882a593Smuzhiyun uint32_t word5; 1863*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_0_SHIFT 0 1864*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_0_MASK 0x0000FFFF 1865*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_0_WORD word5 1866*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_1_SHIFT 16 1867*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_1_MASK 0x0000FFFF 1868*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_1_WORD word5 1869*4882a593Smuzhiyun }; 1870*4882a593Smuzhiyun 1871*4882a593Smuzhiyun struct lpfc_mbx_set_link_diag_state { 1872*4882a593Smuzhiyun struct mbox_header header; 1873*4882a593Smuzhiyun union { 1874*4882a593Smuzhiyun struct { 1875*4882a593Smuzhiyun uint32_t word0; 1876*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_SHIFT 0 1877*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_MASK 0x00000001 1878*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_WORD word0 1879*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_bit_valid_SHIFT 2 1880*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_bit_valid_MASK 0x00000001 1881*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_bit_valid_WORD word0 1882*4882a593Smuzhiyun #define LPFC_DIAG_STATE_DIAG_BIT_VALID_NO_CHANGE 0 1883*4882a593Smuzhiyun #define LPFC_DIAG_STATE_DIAG_BIT_VALID_CHANGE 1 1884*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_num_SHIFT 16 1885*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_num_MASK 0x0000003F 1886*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_num_WORD word0 1887*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_type_SHIFT 22 1888*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_type_MASK 0x00000003 1889*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_type_WORD word0 1890*4882a593Smuzhiyun } req; 1891*4882a593Smuzhiyun struct { 1892*4882a593Smuzhiyun uint32_t word0; 1893*4882a593Smuzhiyun } rsp; 1894*4882a593Smuzhiyun } u; 1895*4882a593Smuzhiyun }; 1896*4882a593Smuzhiyun 1897*4882a593Smuzhiyun struct lpfc_mbx_set_link_diag_loopback { 1898*4882a593Smuzhiyun struct mbox_header header; 1899*4882a593Smuzhiyun union { 1900*4882a593Smuzhiyun struct { 1901*4882a593Smuzhiyun uint32_t word0; 1902*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_type_SHIFT 0 1903*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_type_MASK 0x00000003 1904*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_type_WORD word0 1905*4882a593Smuzhiyun #define LPFC_DIAG_LOOPBACK_TYPE_DISABLE 0x0 1906*4882a593Smuzhiyun #define LPFC_DIAG_LOOPBACK_TYPE_INTERNAL 0x1 1907*4882a593Smuzhiyun #define LPFC_DIAG_LOOPBACK_TYPE_SERDES 0x2 1908*4882a593Smuzhiyun #define LPFC_DIAG_LOOPBACK_TYPE_EXTERNAL_TRUNKED 0x3 1909*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_num_SHIFT 16 1910*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_num_MASK 0x0000003F 1911*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_num_WORD word0 1912*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_type_SHIFT 22 1913*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_type_MASK 0x00000003 1914*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_type_WORD word0 1915*4882a593Smuzhiyun } req; 1916*4882a593Smuzhiyun struct { 1917*4882a593Smuzhiyun uint32_t word0; 1918*4882a593Smuzhiyun } rsp; 1919*4882a593Smuzhiyun } u; 1920*4882a593Smuzhiyun }; 1921*4882a593Smuzhiyun 1922*4882a593Smuzhiyun struct lpfc_mbx_run_link_diag_test { 1923*4882a593Smuzhiyun struct mbox_header header; 1924*4882a593Smuzhiyun union { 1925*4882a593Smuzhiyun struct { 1926*4882a593Smuzhiyun uint32_t word0; 1927*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_num_SHIFT 16 1928*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_num_MASK 0x0000003F 1929*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_num_WORD word0 1930*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_type_SHIFT 22 1931*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_type_MASK 0x00000003 1932*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_type_WORD word0 1933*4882a593Smuzhiyun uint32_t word1; 1934*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_id_SHIFT 0 1935*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_id_MASK 0x0000FFFF 1936*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_id_WORD word1 1937*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_loops_SHIFT 16 1938*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_loops_MASK 0x0000FFFF 1939*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_loops_WORD word1 1940*4882a593Smuzhiyun uint32_t word2; 1941*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_ver_SHIFT 0 1942*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_ver_MASK 0x0000FFFF 1943*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_ver_WORD word2 1944*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_err_act_SHIFT 16 1945*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_err_act_MASK 0x000000FF 1946*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_err_act_WORD word2 1947*4882a593Smuzhiyun } req; 1948*4882a593Smuzhiyun struct { 1949*4882a593Smuzhiyun uint32_t word0; 1950*4882a593Smuzhiyun } rsp; 1951*4882a593Smuzhiyun } u; 1952*4882a593Smuzhiyun }; 1953*4882a593Smuzhiyun 1954*4882a593Smuzhiyun /* 1955*4882a593Smuzhiyun * struct lpfc_mbx_alloc_rsrc_extents: 1956*4882a593Smuzhiyun * A mbox is generically 256 bytes long. An SLI4_CONFIG mailbox requires 1957*4882a593Smuzhiyun * 6 words of header + 4 words of shared subcommand header + 1958*4882a593Smuzhiyun * 1 words of Extent-Opcode-specific header = 11 words or 44 bytes total. 1959*4882a593Smuzhiyun * 1960*4882a593Smuzhiyun * An embedded version of SLI4_CONFIG therefore has 256 - 44 = 212 bytes 1961*4882a593Smuzhiyun * for extents payload. 1962*4882a593Smuzhiyun * 1963*4882a593Smuzhiyun * 212/2 (bytes per extent) = 106 extents. 1964*4882a593Smuzhiyun * 106/2 (extents per word) = 53 words. 1965*4882a593Smuzhiyun * lpfc_id_range id is statically size to 53. 1966*4882a593Smuzhiyun * 1967*4882a593Smuzhiyun * This mailbox definition is used for ALLOC or GET_ALLOCATED 1968*4882a593Smuzhiyun * extent ranges. For ALLOC, the type and cnt are required. 1969*4882a593Smuzhiyun * For GET_ALLOCATED, only the type is required. 1970*4882a593Smuzhiyun */ 1971*4882a593Smuzhiyun struct lpfc_mbx_alloc_rsrc_extents { 1972*4882a593Smuzhiyun struct mbox_header header; 1973*4882a593Smuzhiyun union { 1974*4882a593Smuzhiyun struct { 1975*4882a593Smuzhiyun uint32_t word4; 1976*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_type_SHIFT 0 1977*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_type_MASK 0x0000FFFF 1978*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_type_WORD word4 1979*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_cnt_SHIFT 16 1980*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_cnt_MASK 0x0000FFFF 1981*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_cnt_WORD word4 1982*4882a593Smuzhiyun } req; 1983*4882a593Smuzhiyun struct { 1984*4882a593Smuzhiyun uint32_t word4; 1985*4882a593Smuzhiyun #define lpfc_mbx_rsrc_cnt_SHIFT 0 1986*4882a593Smuzhiyun #define lpfc_mbx_rsrc_cnt_MASK 0x0000FFFF 1987*4882a593Smuzhiyun #define lpfc_mbx_rsrc_cnt_WORD word4 1988*4882a593Smuzhiyun struct lpfc_id_range id[53]; 1989*4882a593Smuzhiyun } rsp; 1990*4882a593Smuzhiyun } u; 1991*4882a593Smuzhiyun }; 1992*4882a593Smuzhiyun 1993*4882a593Smuzhiyun /* 1994*4882a593Smuzhiyun * This is the non-embedded version of ALLOC or GET RSRC_EXTENTS. Word4 in this 1995*4882a593Smuzhiyun * structure shares the same SHIFT/MASK/WORD defines provided in the 1996*4882a593Smuzhiyun * mbx_alloc_rsrc_extents and mbx_get_alloc_rsrc_extents, word4, provided in 1997*4882a593Smuzhiyun * the structures defined above. This non-embedded structure provides for the 1998*4882a593Smuzhiyun * maximum number of extents supported by the port. 1999*4882a593Smuzhiyun */ 2000*4882a593Smuzhiyun struct lpfc_mbx_nembed_rsrc_extent { 2001*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr cfg_shdr; 2002*4882a593Smuzhiyun uint32_t word4; 2003*4882a593Smuzhiyun struct lpfc_id_range id; 2004*4882a593Smuzhiyun }; 2005*4882a593Smuzhiyun 2006*4882a593Smuzhiyun struct lpfc_mbx_dealloc_rsrc_extents { 2007*4882a593Smuzhiyun struct mbox_header header; 2008*4882a593Smuzhiyun struct { 2009*4882a593Smuzhiyun uint32_t word4; 2010*4882a593Smuzhiyun #define lpfc_mbx_dealloc_rsrc_extents_type_SHIFT 0 2011*4882a593Smuzhiyun #define lpfc_mbx_dealloc_rsrc_extents_type_MASK 0x0000FFFF 2012*4882a593Smuzhiyun #define lpfc_mbx_dealloc_rsrc_extents_type_WORD word4 2013*4882a593Smuzhiyun } req; 2014*4882a593Smuzhiyun 2015*4882a593Smuzhiyun }; 2016*4882a593Smuzhiyun 2017*4882a593Smuzhiyun /* Start SLI4 FCoE specific mbox structures. */ 2018*4882a593Smuzhiyun 2019*4882a593Smuzhiyun struct lpfc_mbx_post_hdr_tmpl { 2020*4882a593Smuzhiyun struct mbox_header header; 2021*4882a593Smuzhiyun uint32_t word10; 2022*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_rpi_offset_SHIFT 0 2023*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_rpi_offset_MASK 0x0000FFFF 2024*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_rpi_offset_WORD word10 2025*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_page_cnt_SHIFT 16 2026*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_page_cnt_MASK 0x0000FFFF 2027*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_page_cnt_WORD word10 2028*4882a593Smuzhiyun uint32_t rpi_paddr_lo; 2029*4882a593Smuzhiyun uint32_t rpi_paddr_hi; 2030*4882a593Smuzhiyun }; 2031*4882a593Smuzhiyun 2032*4882a593Smuzhiyun struct sli4_sge { /* SLI-4 */ 2033*4882a593Smuzhiyun uint32_t addr_hi; 2034*4882a593Smuzhiyun uint32_t addr_lo; 2035*4882a593Smuzhiyun 2036*4882a593Smuzhiyun uint32_t word2; 2037*4882a593Smuzhiyun #define lpfc_sli4_sge_offset_SHIFT 0 2038*4882a593Smuzhiyun #define lpfc_sli4_sge_offset_MASK 0x07FFFFFF 2039*4882a593Smuzhiyun #define lpfc_sli4_sge_offset_WORD word2 2040*4882a593Smuzhiyun #define lpfc_sli4_sge_type_SHIFT 27 2041*4882a593Smuzhiyun #define lpfc_sli4_sge_type_MASK 0x0000000F 2042*4882a593Smuzhiyun #define lpfc_sli4_sge_type_WORD word2 2043*4882a593Smuzhiyun #define LPFC_SGE_TYPE_DATA 0x0 2044*4882a593Smuzhiyun #define LPFC_SGE_TYPE_DIF 0x4 2045*4882a593Smuzhiyun #define LPFC_SGE_TYPE_LSP 0x5 2046*4882a593Smuzhiyun #define LPFC_SGE_TYPE_PEDIF 0x6 2047*4882a593Smuzhiyun #define LPFC_SGE_TYPE_PESEED 0x7 2048*4882a593Smuzhiyun #define LPFC_SGE_TYPE_DISEED 0x8 2049*4882a593Smuzhiyun #define LPFC_SGE_TYPE_ENC 0x9 2050*4882a593Smuzhiyun #define LPFC_SGE_TYPE_ATM 0xA 2051*4882a593Smuzhiyun #define LPFC_SGE_TYPE_SKIP 0xC 2052*4882a593Smuzhiyun #define lpfc_sli4_sge_last_SHIFT 31 /* Last SEG in the SGL sets it */ 2053*4882a593Smuzhiyun #define lpfc_sli4_sge_last_MASK 0x00000001 2054*4882a593Smuzhiyun #define lpfc_sli4_sge_last_WORD word2 2055*4882a593Smuzhiyun uint32_t sge_len; 2056*4882a593Smuzhiyun }; 2057*4882a593Smuzhiyun 2058*4882a593Smuzhiyun struct sli4_hybrid_sgl { 2059*4882a593Smuzhiyun struct list_head list_node; 2060*4882a593Smuzhiyun struct sli4_sge *dma_sgl; 2061*4882a593Smuzhiyun dma_addr_t dma_phys_sgl; 2062*4882a593Smuzhiyun }; 2063*4882a593Smuzhiyun 2064*4882a593Smuzhiyun struct fcp_cmd_rsp_buf { 2065*4882a593Smuzhiyun struct list_head list_node; 2066*4882a593Smuzhiyun 2067*4882a593Smuzhiyun /* for storing cmd/rsp dma alloc'ed virt_addr */ 2068*4882a593Smuzhiyun struct fcp_cmnd *fcp_cmnd; 2069*4882a593Smuzhiyun struct fcp_rsp *fcp_rsp; 2070*4882a593Smuzhiyun 2071*4882a593Smuzhiyun /* for storing this cmd/rsp's dma mapped phys addr from per CPU pool */ 2072*4882a593Smuzhiyun dma_addr_t fcp_cmd_rsp_dma_handle; 2073*4882a593Smuzhiyun }; 2074*4882a593Smuzhiyun 2075*4882a593Smuzhiyun struct sli4_sge_diseed { /* SLI-4 */ 2076*4882a593Smuzhiyun uint32_t ref_tag; 2077*4882a593Smuzhiyun uint32_t ref_tag_tran; 2078*4882a593Smuzhiyun 2079*4882a593Smuzhiyun uint32_t word2; 2080*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptran_SHIFT 0 2081*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptran_MASK 0x0000FFFF 2082*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptran_WORD word2 2083*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_af_SHIFT 24 2084*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_af_MASK 0x00000001 2085*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_af_WORD word2 2086*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_na_SHIFT 25 2087*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_na_MASK 0x00000001 2088*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_na_WORD word2 2089*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_hi_SHIFT 26 2090*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_hi_MASK 0x00000001 2091*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_hi_WORD word2 2092*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_type_SHIFT 27 2093*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_type_MASK 0x0000000F 2094*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_type_WORD word2 2095*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_last_SHIFT 31 /* Last SEG in the SGL sets it */ 2096*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_last_MASK 0x00000001 2097*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_last_WORD word2 2098*4882a593Smuzhiyun uint32_t word3; 2099*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptag_SHIFT 0 2100*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptag_MASK 0x0000FFFF 2101*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptag_WORD word3 2102*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_bs_SHIFT 16 2103*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_bs_MASK 0x00000007 2104*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_bs_WORD word3 2105*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ai_SHIFT 19 2106*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ai_MASK 0x00000001 2107*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ai_WORD word3 2108*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_me_SHIFT 20 2109*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_me_MASK 0x00000001 2110*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_me_WORD word3 2111*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_re_SHIFT 21 2112*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_re_MASK 0x00000001 2113*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_re_WORD word3 2114*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ce_SHIFT 22 2115*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ce_MASK 0x00000001 2116*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ce_WORD word3 2117*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_nr_SHIFT 23 2118*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_nr_MASK 0x00000001 2119*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_nr_WORD word3 2120*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_oprx_SHIFT 24 2121*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_oprx_MASK 0x0000000F 2122*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_oprx_WORD word3 2123*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_optx_SHIFT 28 2124*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_optx_MASK 0x0000000F 2125*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_optx_WORD word3 2126*4882a593Smuzhiyun /* optx and oprx use BG_OP_IN defines in lpfc_hw.h */ 2127*4882a593Smuzhiyun }; 2128*4882a593Smuzhiyun 2129*4882a593Smuzhiyun struct fcf_record { 2130*4882a593Smuzhiyun uint32_t max_rcv_size; 2131*4882a593Smuzhiyun uint32_t fka_adv_period; 2132*4882a593Smuzhiyun uint32_t fip_priority; 2133*4882a593Smuzhiyun uint32_t word3; 2134*4882a593Smuzhiyun #define lpfc_fcf_record_mac_0_SHIFT 0 2135*4882a593Smuzhiyun #define lpfc_fcf_record_mac_0_MASK 0x000000FF 2136*4882a593Smuzhiyun #define lpfc_fcf_record_mac_0_WORD word3 2137*4882a593Smuzhiyun #define lpfc_fcf_record_mac_1_SHIFT 8 2138*4882a593Smuzhiyun #define lpfc_fcf_record_mac_1_MASK 0x000000FF 2139*4882a593Smuzhiyun #define lpfc_fcf_record_mac_1_WORD word3 2140*4882a593Smuzhiyun #define lpfc_fcf_record_mac_2_SHIFT 16 2141*4882a593Smuzhiyun #define lpfc_fcf_record_mac_2_MASK 0x000000FF 2142*4882a593Smuzhiyun #define lpfc_fcf_record_mac_2_WORD word3 2143*4882a593Smuzhiyun #define lpfc_fcf_record_mac_3_SHIFT 24 2144*4882a593Smuzhiyun #define lpfc_fcf_record_mac_3_MASK 0x000000FF 2145*4882a593Smuzhiyun #define lpfc_fcf_record_mac_3_WORD word3 2146*4882a593Smuzhiyun uint32_t word4; 2147*4882a593Smuzhiyun #define lpfc_fcf_record_mac_4_SHIFT 0 2148*4882a593Smuzhiyun #define lpfc_fcf_record_mac_4_MASK 0x000000FF 2149*4882a593Smuzhiyun #define lpfc_fcf_record_mac_4_WORD word4 2150*4882a593Smuzhiyun #define lpfc_fcf_record_mac_5_SHIFT 8 2151*4882a593Smuzhiyun #define lpfc_fcf_record_mac_5_MASK 0x000000FF 2152*4882a593Smuzhiyun #define lpfc_fcf_record_mac_5_WORD word4 2153*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_avail_SHIFT 16 2154*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_avail_MASK 0x000000FF 2155*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_avail_WORD word4 2156*4882a593Smuzhiyun #define lpfc_fcf_record_mac_addr_prov_SHIFT 24 2157*4882a593Smuzhiyun #define lpfc_fcf_record_mac_addr_prov_MASK 0x000000FF 2158*4882a593Smuzhiyun #define lpfc_fcf_record_mac_addr_prov_WORD word4 2159*4882a593Smuzhiyun #define LPFC_FCF_FPMA 1 /* Fabric Provided MAC Address */ 2160*4882a593Smuzhiyun #define LPFC_FCF_SPMA 2 /* Server Provided MAC Address */ 2161*4882a593Smuzhiyun uint32_t word5; 2162*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_0_SHIFT 0 2163*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_0_MASK 0x000000FF 2164*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_0_WORD word5 2165*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_1_SHIFT 8 2166*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_1_MASK 0x000000FF 2167*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_1_WORD word5 2168*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_2_SHIFT 16 2169*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_2_MASK 0x000000FF 2170*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_2_WORD word5 2171*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_3_SHIFT 24 2172*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_3_MASK 0x000000FF 2173*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_3_WORD word5 2174*4882a593Smuzhiyun uint32_t word6; 2175*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_4_SHIFT 0 2176*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_4_MASK 0x000000FF 2177*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_4_WORD word6 2178*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_5_SHIFT 8 2179*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_5_MASK 0x000000FF 2180*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_5_WORD word6 2181*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_6_SHIFT 16 2182*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_6_MASK 0x000000FF 2183*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_6_WORD word6 2184*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_7_SHIFT 24 2185*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_7_MASK 0x000000FF 2186*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_7_WORD word6 2187*4882a593Smuzhiyun uint32_t word7; 2188*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_0_SHIFT 0 2189*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_0_MASK 0x000000FF 2190*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_0_WORD word7 2191*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_1_SHIFT 8 2192*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_1_MASK 0x000000FF 2193*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_1_WORD word7 2194*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_2_SHIFT 16 2195*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_2_MASK 0x000000FF 2196*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_2_WORD word7 2197*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_valid_SHIFT 24 2198*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_valid_MASK 0x00000001 2199*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_valid_WORD word7 2200*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_fc_SHIFT 25 2201*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_fc_MASK 0x00000001 2202*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_fc_WORD word7 2203*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_sol_SHIFT 31 2204*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_sol_MASK 0x00000001 2205*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_sol_WORD word7 2206*4882a593Smuzhiyun uint32_t word8; 2207*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_index_SHIFT 0 2208*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_index_MASK 0x0000FFFF 2209*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_index_WORD word8 2210*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_state_SHIFT 16 2211*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_state_MASK 0x0000FFFF 2212*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_state_WORD word8 2213*4882a593Smuzhiyun uint8_t vlan_bitmap[512]; 2214*4882a593Smuzhiyun uint32_t word137; 2215*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_0_SHIFT 0 2216*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_0_MASK 0x000000FF 2217*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_0_WORD word137 2218*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_1_SHIFT 8 2219*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_1_MASK 0x000000FF 2220*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_1_WORD word137 2221*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_2_SHIFT 16 2222*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_2_MASK 0x000000FF 2223*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_2_WORD word137 2224*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_3_SHIFT 24 2225*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_3_MASK 0x000000FF 2226*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_3_WORD word137 2227*4882a593Smuzhiyun uint32_t word138; 2228*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_4_SHIFT 0 2229*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_4_MASK 0x000000FF 2230*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_4_WORD word138 2231*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_5_SHIFT 8 2232*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_5_MASK 0x000000FF 2233*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_5_WORD word138 2234*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_6_SHIFT 16 2235*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_6_MASK 0x000000FF 2236*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_6_WORD word138 2237*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_7_SHIFT 24 2238*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_7_MASK 0x000000FF 2239*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_7_WORD word138 2240*4882a593Smuzhiyun }; 2241*4882a593Smuzhiyun 2242*4882a593Smuzhiyun struct lpfc_mbx_read_fcf_tbl { 2243*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr cfg_shdr; 2244*4882a593Smuzhiyun union { 2245*4882a593Smuzhiyun struct { 2246*4882a593Smuzhiyun uint32_t word10; 2247*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_indx_SHIFT 0 2248*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_indx_MASK 0x0000FFFF 2249*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_indx_WORD word10 2250*4882a593Smuzhiyun } request; 2251*4882a593Smuzhiyun struct { 2252*4882a593Smuzhiyun uint32_t eventag; 2253*4882a593Smuzhiyun } response; 2254*4882a593Smuzhiyun } u; 2255*4882a593Smuzhiyun uint32_t word11; 2256*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_nxt_vindx_SHIFT 0 2257*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_nxt_vindx_MASK 0x0000FFFF 2258*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_nxt_vindx_WORD word11 2259*4882a593Smuzhiyun }; 2260*4882a593Smuzhiyun 2261*4882a593Smuzhiyun struct lpfc_mbx_add_fcf_tbl_entry { 2262*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr cfg_shdr; 2263*4882a593Smuzhiyun uint32_t word10; 2264*4882a593Smuzhiyun #define lpfc_mbx_add_fcf_tbl_fcfi_SHIFT 0 2265*4882a593Smuzhiyun #define lpfc_mbx_add_fcf_tbl_fcfi_MASK 0x0000FFFF 2266*4882a593Smuzhiyun #define lpfc_mbx_add_fcf_tbl_fcfi_WORD word10 2267*4882a593Smuzhiyun struct lpfc_mbx_sge fcf_sge; 2268*4882a593Smuzhiyun }; 2269*4882a593Smuzhiyun 2270*4882a593Smuzhiyun struct lpfc_mbx_del_fcf_tbl_entry { 2271*4882a593Smuzhiyun struct mbox_header header; 2272*4882a593Smuzhiyun uint32_t word10; 2273*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_count_SHIFT 0 2274*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_count_MASK 0x0000FFFF 2275*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_count_WORD word10 2276*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_index_SHIFT 16 2277*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_index_MASK 0x0000FFFF 2278*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_index_WORD word10 2279*4882a593Smuzhiyun }; 2280*4882a593Smuzhiyun 2281*4882a593Smuzhiyun struct lpfc_mbx_redisc_fcf_tbl { 2282*4882a593Smuzhiyun struct mbox_header header; 2283*4882a593Smuzhiyun uint32_t word10; 2284*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_count_SHIFT 0 2285*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_count_MASK 0x0000FFFF 2286*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_count_WORD word10 2287*4882a593Smuzhiyun uint32_t resvd; 2288*4882a593Smuzhiyun uint32_t word12; 2289*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_index_SHIFT 0 2290*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_index_MASK 0x0000FFFF 2291*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_index_WORD word12 2292*4882a593Smuzhiyun }; 2293*4882a593Smuzhiyun 2294*4882a593Smuzhiyun /* Status field for embedded SLI_CONFIG mailbox command */ 2295*4882a593Smuzhiyun #define STATUS_SUCCESS 0x0 2296*4882a593Smuzhiyun #define STATUS_FAILED 0x1 2297*4882a593Smuzhiyun #define STATUS_ILLEGAL_REQUEST 0x2 2298*4882a593Smuzhiyun #define STATUS_ILLEGAL_FIELD 0x3 2299*4882a593Smuzhiyun #define STATUS_INSUFFICIENT_BUFFER 0x4 2300*4882a593Smuzhiyun #define STATUS_UNAUTHORIZED_REQUEST 0x5 2301*4882a593Smuzhiyun #define STATUS_FLASHROM_SAVE_FAILED 0x17 2302*4882a593Smuzhiyun #define STATUS_FLASHROM_RESTORE_FAILED 0x18 2303*4882a593Smuzhiyun #define STATUS_ICCBINDEX_ALLOC_FAILED 0x1a 2304*4882a593Smuzhiyun #define STATUS_IOCTLHANDLE_ALLOC_FAILED 0x1b 2305*4882a593Smuzhiyun #define STATUS_INVALID_PHY_ADDR_FROM_OSM 0x1c 2306*4882a593Smuzhiyun #define STATUS_INVALID_PHY_ADDR_LEN_FROM_OSM 0x1d 2307*4882a593Smuzhiyun #define STATUS_ASSERT_FAILED 0x1e 2308*4882a593Smuzhiyun #define STATUS_INVALID_SESSION 0x1f 2309*4882a593Smuzhiyun #define STATUS_INVALID_CONNECTION 0x20 2310*4882a593Smuzhiyun #define STATUS_BTL_PATH_EXCEEDS_OSM_LIMIT 0x21 2311*4882a593Smuzhiyun #define STATUS_BTL_NO_FREE_SLOT_PATH 0x24 2312*4882a593Smuzhiyun #define STATUS_BTL_NO_FREE_SLOT_TGTID 0x25 2313*4882a593Smuzhiyun #define STATUS_OSM_DEVSLOT_NOT_FOUND 0x26 2314*4882a593Smuzhiyun #define STATUS_FLASHROM_READ_FAILED 0x27 2315*4882a593Smuzhiyun #define STATUS_POLL_IOCTL_TIMEOUT 0x28 2316*4882a593Smuzhiyun #define STATUS_ERROR_ACITMAIN 0x2a 2317*4882a593Smuzhiyun #define STATUS_REBOOT_REQUIRED 0x2c 2318*4882a593Smuzhiyun #define STATUS_FCF_IN_USE 0x3a 2319*4882a593Smuzhiyun #define STATUS_FCF_TABLE_EMPTY 0x43 2320*4882a593Smuzhiyun 2321*4882a593Smuzhiyun /* 2322*4882a593Smuzhiyun * Additional status field for embedded SLI_CONFIG mailbox 2323*4882a593Smuzhiyun * command. 2324*4882a593Smuzhiyun */ 2325*4882a593Smuzhiyun #define ADD_STATUS_OPERATION_ALREADY_ACTIVE 0x67 2326*4882a593Smuzhiyun #define ADD_STATUS_FW_NOT_SUPPORTED 0xEB 2327*4882a593Smuzhiyun #define ADD_STATUS_INVALID_REQUEST 0x4B 2328*4882a593Smuzhiyun #define ADD_STATUS_FW_DOWNLOAD_HW_DISABLED 0x58 2329*4882a593Smuzhiyun 2330*4882a593Smuzhiyun struct lpfc_mbx_sli4_config { 2331*4882a593Smuzhiyun struct mbox_header header; 2332*4882a593Smuzhiyun }; 2333*4882a593Smuzhiyun 2334*4882a593Smuzhiyun struct lpfc_mbx_init_vfi { 2335*4882a593Smuzhiyun uint32_t word1; 2336*4882a593Smuzhiyun #define lpfc_init_vfi_vr_SHIFT 31 2337*4882a593Smuzhiyun #define lpfc_init_vfi_vr_MASK 0x00000001 2338*4882a593Smuzhiyun #define lpfc_init_vfi_vr_WORD word1 2339*4882a593Smuzhiyun #define lpfc_init_vfi_vt_SHIFT 30 2340*4882a593Smuzhiyun #define lpfc_init_vfi_vt_MASK 0x00000001 2341*4882a593Smuzhiyun #define lpfc_init_vfi_vt_WORD word1 2342*4882a593Smuzhiyun #define lpfc_init_vfi_vf_SHIFT 29 2343*4882a593Smuzhiyun #define lpfc_init_vfi_vf_MASK 0x00000001 2344*4882a593Smuzhiyun #define lpfc_init_vfi_vf_WORD word1 2345*4882a593Smuzhiyun #define lpfc_init_vfi_vp_SHIFT 28 2346*4882a593Smuzhiyun #define lpfc_init_vfi_vp_MASK 0x00000001 2347*4882a593Smuzhiyun #define lpfc_init_vfi_vp_WORD word1 2348*4882a593Smuzhiyun #define lpfc_init_vfi_vfi_SHIFT 0 2349*4882a593Smuzhiyun #define lpfc_init_vfi_vfi_MASK 0x0000FFFF 2350*4882a593Smuzhiyun #define lpfc_init_vfi_vfi_WORD word1 2351*4882a593Smuzhiyun uint32_t word2; 2352*4882a593Smuzhiyun #define lpfc_init_vfi_vpi_SHIFT 16 2353*4882a593Smuzhiyun #define lpfc_init_vfi_vpi_MASK 0x0000FFFF 2354*4882a593Smuzhiyun #define lpfc_init_vfi_vpi_WORD word2 2355*4882a593Smuzhiyun #define lpfc_init_vfi_fcfi_SHIFT 0 2356*4882a593Smuzhiyun #define lpfc_init_vfi_fcfi_MASK 0x0000FFFF 2357*4882a593Smuzhiyun #define lpfc_init_vfi_fcfi_WORD word2 2358*4882a593Smuzhiyun uint32_t word3; 2359*4882a593Smuzhiyun #define lpfc_init_vfi_pri_SHIFT 13 2360*4882a593Smuzhiyun #define lpfc_init_vfi_pri_MASK 0x00000007 2361*4882a593Smuzhiyun #define lpfc_init_vfi_pri_WORD word3 2362*4882a593Smuzhiyun #define lpfc_init_vfi_vf_id_SHIFT 1 2363*4882a593Smuzhiyun #define lpfc_init_vfi_vf_id_MASK 0x00000FFF 2364*4882a593Smuzhiyun #define lpfc_init_vfi_vf_id_WORD word3 2365*4882a593Smuzhiyun uint32_t word4; 2366*4882a593Smuzhiyun #define lpfc_init_vfi_hop_count_SHIFT 24 2367*4882a593Smuzhiyun #define lpfc_init_vfi_hop_count_MASK 0x000000FF 2368*4882a593Smuzhiyun #define lpfc_init_vfi_hop_count_WORD word4 2369*4882a593Smuzhiyun }; 2370*4882a593Smuzhiyun #define MBX_VFI_IN_USE 0x9F02 2371*4882a593Smuzhiyun 2372*4882a593Smuzhiyun 2373*4882a593Smuzhiyun struct lpfc_mbx_reg_vfi { 2374*4882a593Smuzhiyun uint32_t word1; 2375*4882a593Smuzhiyun #define lpfc_reg_vfi_upd_SHIFT 29 2376*4882a593Smuzhiyun #define lpfc_reg_vfi_upd_MASK 0x00000001 2377*4882a593Smuzhiyun #define lpfc_reg_vfi_upd_WORD word1 2378*4882a593Smuzhiyun #define lpfc_reg_vfi_vp_SHIFT 28 2379*4882a593Smuzhiyun #define lpfc_reg_vfi_vp_MASK 0x00000001 2380*4882a593Smuzhiyun #define lpfc_reg_vfi_vp_WORD word1 2381*4882a593Smuzhiyun #define lpfc_reg_vfi_vfi_SHIFT 0 2382*4882a593Smuzhiyun #define lpfc_reg_vfi_vfi_MASK 0x0000FFFF 2383*4882a593Smuzhiyun #define lpfc_reg_vfi_vfi_WORD word1 2384*4882a593Smuzhiyun uint32_t word2; 2385*4882a593Smuzhiyun #define lpfc_reg_vfi_vpi_SHIFT 16 2386*4882a593Smuzhiyun #define lpfc_reg_vfi_vpi_MASK 0x0000FFFF 2387*4882a593Smuzhiyun #define lpfc_reg_vfi_vpi_WORD word2 2388*4882a593Smuzhiyun #define lpfc_reg_vfi_fcfi_SHIFT 0 2389*4882a593Smuzhiyun #define lpfc_reg_vfi_fcfi_MASK 0x0000FFFF 2390*4882a593Smuzhiyun #define lpfc_reg_vfi_fcfi_WORD word2 2391*4882a593Smuzhiyun uint32_t wwn[2]; 2392*4882a593Smuzhiyun struct ulp_bde64 bde; 2393*4882a593Smuzhiyun uint32_t e_d_tov; 2394*4882a593Smuzhiyun uint32_t r_a_tov; 2395*4882a593Smuzhiyun uint32_t word10; 2396*4882a593Smuzhiyun #define lpfc_reg_vfi_nport_id_SHIFT 0 2397*4882a593Smuzhiyun #define lpfc_reg_vfi_nport_id_MASK 0x00FFFFFF 2398*4882a593Smuzhiyun #define lpfc_reg_vfi_nport_id_WORD word10 2399*4882a593Smuzhiyun #define lpfc_reg_vfi_bbcr_SHIFT 27 2400*4882a593Smuzhiyun #define lpfc_reg_vfi_bbcr_MASK 0x00000001 2401*4882a593Smuzhiyun #define lpfc_reg_vfi_bbcr_WORD word10 2402*4882a593Smuzhiyun #define lpfc_reg_vfi_bbscn_SHIFT 28 2403*4882a593Smuzhiyun #define lpfc_reg_vfi_bbscn_MASK 0x0000000F 2404*4882a593Smuzhiyun #define lpfc_reg_vfi_bbscn_WORD word10 2405*4882a593Smuzhiyun }; 2406*4882a593Smuzhiyun 2407*4882a593Smuzhiyun struct lpfc_mbx_init_vpi { 2408*4882a593Smuzhiyun uint32_t word1; 2409*4882a593Smuzhiyun #define lpfc_init_vpi_vfi_SHIFT 16 2410*4882a593Smuzhiyun #define lpfc_init_vpi_vfi_MASK 0x0000FFFF 2411*4882a593Smuzhiyun #define lpfc_init_vpi_vfi_WORD word1 2412*4882a593Smuzhiyun #define lpfc_init_vpi_vpi_SHIFT 0 2413*4882a593Smuzhiyun #define lpfc_init_vpi_vpi_MASK 0x0000FFFF 2414*4882a593Smuzhiyun #define lpfc_init_vpi_vpi_WORD word1 2415*4882a593Smuzhiyun }; 2416*4882a593Smuzhiyun 2417*4882a593Smuzhiyun struct lpfc_mbx_read_vpi { 2418*4882a593Smuzhiyun uint32_t word1_rsvd; 2419*4882a593Smuzhiyun uint32_t word2; 2420*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vnportid_SHIFT 0 2421*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vnportid_MASK 0x00FFFFFF 2422*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vnportid_WORD word2 2423*4882a593Smuzhiyun uint32_t word3_rsvd; 2424*4882a593Smuzhiyun uint32_t word4; 2425*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_acq_alpa_SHIFT 0 2426*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_acq_alpa_MASK 0x000000FF 2427*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_acq_alpa_WORD word4 2428*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_pb_SHIFT 15 2429*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_pb_MASK 0x00000001 2430*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_pb_WORD word4 2431*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_spec_alpa_SHIFT 16 2432*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_spec_alpa_MASK 0x000000FF 2433*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_spec_alpa_WORD word4 2434*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_ns_SHIFT 30 2435*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_ns_MASK 0x00000001 2436*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_ns_WORD word4 2437*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_hl_SHIFT 31 2438*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_hl_MASK 0x00000001 2439*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_hl_WORD word4 2440*4882a593Smuzhiyun uint32_t word5_rsvd; 2441*4882a593Smuzhiyun uint32_t word6; 2442*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vpi_SHIFT 0 2443*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vpi_MASK 0x0000FFFF 2444*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vpi_WORD word6 2445*4882a593Smuzhiyun uint32_t word7; 2446*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_0_SHIFT 0 2447*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_0_MASK 0x000000FF 2448*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_0_WORD word7 2449*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_1_SHIFT 8 2450*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_1_MASK 0x000000FF 2451*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_1_WORD word7 2452*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_2_SHIFT 16 2453*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_2_MASK 0x000000FF 2454*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_2_WORD word7 2455*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_3_SHIFT 24 2456*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_3_MASK 0x000000FF 2457*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_3_WORD word7 2458*4882a593Smuzhiyun uint32_t word8; 2459*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_4_SHIFT 0 2460*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_4_MASK 0x000000FF 2461*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_4_WORD word8 2462*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_5_SHIFT 8 2463*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_5_MASK 0x000000FF 2464*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_5_WORD word8 2465*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vlan_tag_SHIFT 16 2466*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vlan_tag_MASK 0x00000FFF 2467*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vlan_tag_WORD word8 2468*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vv_SHIFT 28 2469*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vv_MASK 0x0000001 2470*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vv_WORD word8 2471*4882a593Smuzhiyun }; 2472*4882a593Smuzhiyun 2473*4882a593Smuzhiyun struct lpfc_mbx_unreg_vfi { 2474*4882a593Smuzhiyun uint32_t word1_rsvd; 2475*4882a593Smuzhiyun uint32_t word2; 2476*4882a593Smuzhiyun #define lpfc_unreg_vfi_vfi_SHIFT 0 2477*4882a593Smuzhiyun #define lpfc_unreg_vfi_vfi_MASK 0x0000FFFF 2478*4882a593Smuzhiyun #define lpfc_unreg_vfi_vfi_WORD word2 2479*4882a593Smuzhiyun }; 2480*4882a593Smuzhiyun 2481*4882a593Smuzhiyun struct lpfc_mbx_resume_rpi { 2482*4882a593Smuzhiyun uint32_t word1; 2483*4882a593Smuzhiyun #define lpfc_resume_rpi_index_SHIFT 0 2484*4882a593Smuzhiyun #define lpfc_resume_rpi_index_MASK 0x0000FFFF 2485*4882a593Smuzhiyun #define lpfc_resume_rpi_index_WORD word1 2486*4882a593Smuzhiyun #define lpfc_resume_rpi_ii_SHIFT 30 2487*4882a593Smuzhiyun #define lpfc_resume_rpi_ii_MASK 0x00000003 2488*4882a593Smuzhiyun #define lpfc_resume_rpi_ii_WORD word1 2489*4882a593Smuzhiyun #define RESUME_INDEX_RPI 0 2490*4882a593Smuzhiyun #define RESUME_INDEX_VPI 1 2491*4882a593Smuzhiyun #define RESUME_INDEX_VFI 2 2492*4882a593Smuzhiyun #define RESUME_INDEX_FCFI 3 2493*4882a593Smuzhiyun uint32_t event_tag; 2494*4882a593Smuzhiyun }; 2495*4882a593Smuzhiyun 2496*4882a593Smuzhiyun #define REG_FCF_INVALID_QID 0xFFFF 2497*4882a593Smuzhiyun struct lpfc_mbx_reg_fcfi { 2498*4882a593Smuzhiyun uint32_t word1; 2499*4882a593Smuzhiyun #define lpfc_reg_fcfi_info_index_SHIFT 0 2500*4882a593Smuzhiyun #define lpfc_reg_fcfi_info_index_MASK 0x0000FFFF 2501*4882a593Smuzhiyun #define lpfc_reg_fcfi_info_index_WORD word1 2502*4882a593Smuzhiyun #define lpfc_reg_fcfi_fcfi_SHIFT 16 2503*4882a593Smuzhiyun #define lpfc_reg_fcfi_fcfi_MASK 0x0000FFFF 2504*4882a593Smuzhiyun #define lpfc_reg_fcfi_fcfi_WORD word1 2505*4882a593Smuzhiyun uint32_t word2; 2506*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id1_SHIFT 0 2507*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id1_MASK 0x0000FFFF 2508*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id1_WORD word2 2509*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id0_SHIFT 16 2510*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id0_MASK 0x0000FFFF 2511*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id0_WORD word2 2512*4882a593Smuzhiyun uint32_t word3; 2513*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id3_SHIFT 0 2514*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id3_MASK 0x0000FFFF 2515*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id3_WORD word3 2516*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id2_SHIFT 16 2517*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id2_MASK 0x0000FFFF 2518*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id2_WORD word3 2519*4882a593Smuzhiyun uint32_t word4; 2520*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match0_SHIFT 24 2521*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match0_MASK 0x000000FF 2522*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match0_WORD word4 2523*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask0_SHIFT 16 2524*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask0_MASK 0x000000FF 2525*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask0_WORD word4 2526*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match0_SHIFT 8 2527*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match0_MASK 0x000000FF 2528*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match0_WORD word4 2529*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask0_SHIFT 0 2530*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask0_MASK 0x000000FF 2531*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask0_WORD word4 2532*4882a593Smuzhiyun uint32_t word5; 2533*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match1_SHIFT 24 2534*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match1_MASK 0x000000FF 2535*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match1_WORD word5 2536*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask1_SHIFT 16 2537*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask1_MASK 0x000000FF 2538*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask1_WORD word5 2539*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match1_SHIFT 8 2540*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match1_MASK 0x000000FF 2541*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match1_WORD word5 2542*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask1_SHIFT 0 2543*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask1_MASK 0x000000FF 2544*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask1_WORD word5 2545*4882a593Smuzhiyun uint32_t word6; 2546*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match2_SHIFT 24 2547*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match2_MASK 0x000000FF 2548*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match2_WORD word6 2549*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask2_SHIFT 16 2550*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask2_MASK 0x000000FF 2551*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask2_WORD word6 2552*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match2_SHIFT 8 2553*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match2_MASK 0x000000FF 2554*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match2_WORD word6 2555*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask2_SHIFT 0 2556*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask2_MASK 0x000000FF 2557*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask2_WORD word6 2558*4882a593Smuzhiyun uint32_t word7; 2559*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match3_SHIFT 24 2560*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match3_MASK 0x000000FF 2561*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match3_WORD word7 2562*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask3_SHIFT 16 2563*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask3_MASK 0x000000FF 2564*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask3_WORD word7 2565*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match3_SHIFT 8 2566*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match3_MASK 0x000000FF 2567*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match3_WORD word7 2568*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask3_SHIFT 0 2569*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask3_MASK 0x000000FF 2570*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask3_WORD word7 2571*4882a593Smuzhiyun uint32_t word8; 2572*4882a593Smuzhiyun #define lpfc_reg_fcfi_mam_SHIFT 13 2573*4882a593Smuzhiyun #define lpfc_reg_fcfi_mam_MASK 0x00000003 2574*4882a593Smuzhiyun #define lpfc_reg_fcfi_mam_WORD word8 2575*4882a593Smuzhiyun #define LPFC_MAM_BOTH 0 /* Both SPMA and FPMA */ 2576*4882a593Smuzhiyun #define LPFC_MAM_SPMA 1 /* Server Provided MAC Address */ 2577*4882a593Smuzhiyun #define LPFC_MAM_FPMA 2 /* Fabric Provided MAC Address */ 2578*4882a593Smuzhiyun #define lpfc_reg_fcfi_vv_SHIFT 12 2579*4882a593Smuzhiyun #define lpfc_reg_fcfi_vv_MASK 0x00000001 2580*4882a593Smuzhiyun #define lpfc_reg_fcfi_vv_WORD word8 2581*4882a593Smuzhiyun #define lpfc_reg_fcfi_vlan_tag_SHIFT 0 2582*4882a593Smuzhiyun #define lpfc_reg_fcfi_vlan_tag_MASK 0x00000FFF 2583*4882a593Smuzhiyun #define lpfc_reg_fcfi_vlan_tag_WORD word8 2584*4882a593Smuzhiyun }; 2585*4882a593Smuzhiyun 2586*4882a593Smuzhiyun struct lpfc_mbx_reg_fcfi_mrq { 2587*4882a593Smuzhiyun uint32_t word1; 2588*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_info_index_SHIFT 0 2589*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_info_index_MASK 0x0000FFFF 2590*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_info_index_WORD word1 2591*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_fcfi_SHIFT 16 2592*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_fcfi_MASK 0x0000FFFF 2593*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_fcfi_WORD word1 2594*4882a593Smuzhiyun uint32_t word2; 2595*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id1_SHIFT 0 2596*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id1_MASK 0x0000FFFF 2597*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id1_WORD word2 2598*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id0_SHIFT 16 2599*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id0_MASK 0x0000FFFF 2600*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id0_WORD word2 2601*4882a593Smuzhiyun uint32_t word3; 2602*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id3_SHIFT 0 2603*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id3_MASK 0x0000FFFF 2604*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id3_WORD word3 2605*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id2_SHIFT 16 2606*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id2_MASK 0x0000FFFF 2607*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id2_WORD word3 2608*4882a593Smuzhiyun uint32_t word4; 2609*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match0_SHIFT 24 2610*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match0_MASK 0x000000FF 2611*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match0_WORD word4 2612*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask0_SHIFT 16 2613*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask0_MASK 0x000000FF 2614*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask0_WORD word4 2615*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match0_SHIFT 8 2616*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match0_MASK 0x000000FF 2617*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match0_WORD word4 2618*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask0_SHIFT 0 2619*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask0_MASK 0x000000FF 2620*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask0_WORD word4 2621*4882a593Smuzhiyun uint32_t word5; 2622*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match1_SHIFT 24 2623*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match1_MASK 0x000000FF 2624*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match1_WORD word5 2625*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask1_SHIFT 16 2626*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask1_MASK 0x000000FF 2627*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask1_WORD word5 2628*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match1_SHIFT 8 2629*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match1_MASK 0x000000FF 2630*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match1_WORD word5 2631*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask1_SHIFT 0 2632*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask1_MASK 0x000000FF 2633*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask1_WORD word5 2634*4882a593Smuzhiyun uint32_t word6; 2635*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match2_SHIFT 24 2636*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match2_MASK 0x000000FF 2637*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match2_WORD word6 2638*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask2_SHIFT 16 2639*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask2_MASK 0x000000FF 2640*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask2_WORD word6 2641*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match2_SHIFT 8 2642*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match2_MASK 0x000000FF 2643*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match2_WORD word6 2644*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask2_SHIFT 0 2645*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask2_MASK 0x000000FF 2646*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask2_WORD word6 2647*4882a593Smuzhiyun uint32_t word7; 2648*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match3_SHIFT 24 2649*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match3_MASK 0x000000FF 2650*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match3_WORD word7 2651*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask3_SHIFT 16 2652*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask3_MASK 0x000000FF 2653*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask3_WORD word7 2654*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match3_SHIFT 8 2655*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match3_MASK 0x000000FF 2656*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match3_WORD word7 2657*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask3_SHIFT 0 2658*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask3_MASK 0x000000FF 2659*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask3_WORD word7 2660*4882a593Smuzhiyun uint32_t word8; 2661*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc7_SHIFT 31 2662*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc7_MASK 0x00000001 2663*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc7_WORD word8 2664*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc6_SHIFT 30 2665*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc6_MASK 0x00000001 2666*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc6_WORD word8 2667*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc5_SHIFT 29 2668*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc5_MASK 0x00000001 2669*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc5_WORD word8 2670*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc4_SHIFT 28 2671*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc4_MASK 0x00000001 2672*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc4_WORD word8 2673*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc3_SHIFT 27 2674*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc3_MASK 0x00000001 2675*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc3_WORD word8 2676*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc2_SHIFT 26 2677*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc2_MASK 0x00000001 2678*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc2_WORD word8 2679*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc1_SHIFT 25 2680*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc1_MASK 0x00000001 2681*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc1_WORD word8 2682*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc0_SHIFT 24 2683*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc0_MASK 0x00000001 2684*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc0_WORD word8 2685*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt7_SHIFT 23 2686*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt7_MASK 0x00000001 2687*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt7_WORD word8 2688*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt6_SHIFT 22 2689*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt6_MASK 0x00000001 2690*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt6_WORD word8 2691*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt5_SHIFT 21 2692*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt5_MASK 0x00000001 2693*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt5_WORD word8 2694*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt4_SHIFT 20 2695*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt4_MASK 0x00000001 2696*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt4_WORD word8 2697*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt3_SHIFT 19 2698*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt3_MASK 0x00000001 2699*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt3_WORD word8 2700*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt2_SHIFT 18 2701*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt2_MASK 0x00000001 2702*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt2_WORD word8 2703*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt1_SHIFT 17 2704*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt1_MASK 0x00000001 2705*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt1_WORD word8 2706*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt0_SHIFT 16 2707*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt0_MASK 0x00000001 2708*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt0_WORD word8 2709*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_xmv_SHIFT 15 2710*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_xmv_MASK 0x00000001 2711*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_xmv_WORD word8 2712*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_mode_SHIFT 13 2713*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_mode_MASK 0x00000001 2714*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_mode_WORD word8 2715*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vv_SHIFT 12 2716*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vv_MASK 0x00000001 2717*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vv_WORD word8 2718*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vlan_tag_SHIFT 0 2719*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vlan_tag_MASK 0x00000FFF 2720*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vlan_tag_WORD word8 2721*4882a593Smuzhiyun uint32_t word9; 2722*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_policy_SHIFT 12 2723*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_policy_MASK 0x0000000F 2724*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_policy_WORD word9 2725*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_filter_SHIFT 8 2726*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_filter_MASK 0x0000000F 2727*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_filter_WORD word9 2728*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_npairs_SHIFT 0 2729*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_npairs_MASK 0x000000FF 2730*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_npairs_WORD word9 2731*4882a593Smuzhiyun uint32_t word10; 2732*4882a593Smuzhiyun uint32_t word11; 2733*4882a593Smuzhiyun uint32_t word12; 2734*4882a593Smuzhiyun uint32_t word13; 2735*4882a593Smuzhiyun uint32_t word14; 2736*4882a593Smuzhiyun uint32_t word15; 2737*4882a593Smuzhiyun uint32_t word16; 2738*4882a593Smuzhiyun }; 2739*4882a593Smuzhiyun 2740*4882a593Smuzhiyun struct lpfc_mbx_unreg_fcfi { 2741*4882a593Smuzhiyun uint32_t word1_rsv; 2742*4882a593Smuzhiyun uint32_t word2; 2743*4882a593Smuzhiyun #define lpfc_unreg_fcfi_SHIFT 0 2744*4882a593Smuzhiyun #define lpfc_unreg_fcfi_MASK 0x0000FFFF 2745*4882a593Smuzhiyun #define lpfc_unreg_fcfi_WORD word2 2746*4882a593Smuzhiyun }; 2747*4882a593Smuzhiyun 2748*4882a593Smuzhiyun struct lpfc_mbx_read_rev { 2749*4882a593Smuzhiyun uint32_t word1; 2750*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_sli_lvl_SHIFT 16 2751*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_sli_lvl_MASK 0x0000000F 2752*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_sli_lvl_WORD word1 2753*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcoe_SHIFT 20 2754*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcoe_MASK 0x00000001 2755*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcoe_WORD word1 2756*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_cee_ver_SHIFT 21 2757*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_cee_ver_MASK 0x00000003 2758*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_cee_ver_WORD word1 2759*4882a593Smuzhiyun #define LPFC_PREDCBX_CEE_MODE 0 2760*4882a593Smuzhiyun #define LPFC_DCBX_CEE_MODE 1 2761*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_vpd_SHIFT 29 2762*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_vpd_MASK 0x00000001 2763*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_vpd_WORD word1 2764*4882a593Smuzhiyun uint32_t first_hw_rev; 2765*4882a593Smuzhiyun #define LPFC_G7_ASIC_1 0xd 2766*4882a593Smuzhiyun uint32_t second_hw_rev; 2767*4882a593Smuzhiyun uint32_t word4_rsvd; 2768*4882a593Smuzhiyun uint32_t third_hw_rev; 2769*4882a593Smuzhiyun uint32_t word6; 2770*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_low_SHIFT 0 2771*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_low_MASK 0x000000FF 2772*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_low_WORD word6 2773*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_high_SHIFT 8 2774*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_high_MASK 0x000000FF 2775*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_high_WORD word6 2776*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_low_SHIFT 16 2777*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_low_MASK 0x000000FF 2778*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_low_WORD word6 2779*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_high_SHIFT 24 2780*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_high_MASK 0x000000FF 2781*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_high_WORD word6 2782*4882a593Smuzhiyun uint32_t word7_rsvd; 2783*4882a593Smuzhiyun uint32_t fw_id_rev; 2784*4882a593Smuzhiyun uint8_t fw_name[16]; 2785*4882a593Smuzhiyun uint32_t ulp_fw_id_rev; 2786*4882a593Smuzhiyun uint8_t ulp_fw_name[16]; 2787*4882a593Smuzhiyun uint32_t word18_47_rsvd[30]; 2788*4882a593Smuzhiyun uint32_t word48; 2789*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_avail_len_SHIFT 0 2790*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_avail_len_MASK 0x00FFFFFF 2791*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_avail_len_WORD word48 2792*4882a593Smuzhiyun uint32_t vpd_paddr_low; 2793*4882a593Smuzhiyun uint32_t vpd_paddr_high; 2794*4882a593Smuzhiyun uint32_t avail_vpd_len; 2795*4882a593Smuzhiyun uint32_t rsvd_52_63[12]; 2796*4882a593Smuzhiyun }; 2797*4882a593Smuzhiyun 2798*4882a593Smuzhiyun struct lpfc_mbx_read_config { 2799*4882a593Smuzhiyun uint32_t word1; 2800*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_extnts_inuse_SHIFT 31 2801*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_extnts_inuse_MASK 0x00000001 2802*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_extnts_inuse_WORD word1 2803*4882a593Smuzhiyun uint32_t word2; 2804*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_numb_SHIFT 0 2805*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_numb_MASK 0x0000003F 2806*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_numb_WORD word2 2807*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_type_SHIFT 6 2808*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_type_MASK 0x00000003 2809*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_type_WORD word2 2810*4882a593Smuzhiyun #define LPFC_LNK_TYPE_GE 0 2811*4882a593Smuzhiyun #define LPFC_LNK_TYPE_FC 1 2812*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_ldv_SHIFT 8 2813*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_ldv_MASK 0x00000001 2814*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_ldv_WORD word2 2815*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_trunk_SHIFT 12 2816*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_trunk_MASK 0x0000000F 2817*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_trunk_WORD word2 2818*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_pt_SHIFT 20 2819*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_pt_MASK 0x00000003 2820*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_pt_WORD word2 2821*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_tf_SHIFT 22 2822*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_tf_MASK 0x00000001 2823*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_tf_WORD word2 2824*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_ptv_SHIFT 23 2825*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_ptv_MASK 0x00000001 2826*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_ptv_WORD word2 2827*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_topology_SHIFT 24 2828*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_topology_MASK 0x000000FF 2829*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_topology_WORD word2 2830*4882a593Smuzhiyun uint32_t rsvd_3; 2831*4882a593Smuzhiyun uint32_t word4; 2832*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_e_d_tov_SHIFT 0 2833*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_e_d_tov_MASK 0x0000FFFF 2834*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_e_d_tov_WORD word4 2835*4882a593Smuzhiyun uint32_t rsvd_5; 2836*4882a593Smuzhiyun uint32_t word6; 2837*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_r_a_tov_SHIFT 0 2838*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_r_a_tov_MASK 0x0000FFFF 2839*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_r_a_tov_WORD word6 2840*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_link_speed_SHIFT 16 2841*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_link_speed_MASK 0x0000FFFF 2842*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_link_speed_WORD word6 2843*4882a593Smuzhiyun uint32_t rsvd_7; 2844*4882a593Smuzhiyun uint32_t word8; 2845*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_min_SHIFT 0 2846*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_min_MASK 0x0000000F 2847*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_min_WORD word8 2848*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_max_SHIFT 4 2849*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_max_MASK 0x0000000F 2850*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_max_WORD word8 2851*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_def_SHIFT 8 2852*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_def_MASK 0x0000000F 2853*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_def_WORD word8 2854*4882a593Smuzhiyun uint32_t word9; 2855*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lmt_SHIFT 0 2856*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lmt_MASK 0x0000FFFF 2857*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lmt_WORD word9 2858*4882a593Smuzhiyun uint32_t rsvd_10; 2859*4882a593Smuzhiyun uint32_t rsvd_11; 2860*4882a593Smuzhiyun uint32_t word12; 2861*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_base_SHIFT 0 2862*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_base_MASK 0x0000FFFF 2863*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_base_WORD word12 2864*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_count_SHIFT 16 2865*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_count_MASK 0x0000FFFF 2866*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_count_WORD word12 2867*4882a593Smuzhiyun uint32_t word13; 2868*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_base_SHIFT 0 2869*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_base_MASK 0x0000FFFF 2870*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_base_WORD word13 2871*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_count_SHIFT 16 2872*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_count_MASK 0x0000FFFF 2873*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_count_WORD word13 2874*4882a593Smuzhiyun uint32_t word14; 2875*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_base_SHIFT 0 2876*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_base_MASK 0x0000FFFF 2877*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_base_WORD word14 2878*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_count_SHIFT 16 2879*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_count_MASK 0x0000FFFF 2880*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_count_WORD word14 2881*4882a593Smuzhiyun uint32_t word15; 2882*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_base_SHIFT 0 2883*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_base_MASK 0x0000FFFF 2884*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_base_WORD word15 2885*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_count_SHIFT 16 2886*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_count_MASK 0x0000FFFF 2887*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_count_WORD word15 2888*4882a593Smuzhiyun uint32_t word16; 2889*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_fcfi_count_SHIFT 16 2890*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_fcfi_count_MASK 0x0000FFFF 2891*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_fcfi_count_WORD word16 2892*4882a593Smuzhiyun uint32_t word17; 2893*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rq_count_SHIFT 0 2894*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rq_count_MASK 0x0000FFFF 2895*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rq_count_WORD word17 2896*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_eq_count_SHIFT 16 2897*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_eq_count_MASK 0x0000FFFF 2898*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_eq_count_WORD word17 2899*4882a593Smuzhiyun uint32_t word18; 2900*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_wq_count_SHIFT 0 2901*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_wq_count_MASK 0x0000FFFF 2902*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_wq_count_WORD word18 2903*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_cq_count_SHIFT 16 2904*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_cq_count_MASK 0x0000FFFF 2905*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_cq_count_WORD word18 2906*4882a593Smuzhiyun }; 2907*4882a593Smuzhiyun 2908*4882a593Smuzhiyun struct lpfc_mbx_request_features { 2909*4882a593Smuzhiyun uint32_t word1; 2910*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_qry_SHIFT 0 2911*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_qry_MASK 0x00000001 2912*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_qry_WORD word1 2913*4882a593Smuzhiyun uint32_t word2; 2914*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaab_SHIFT 0 2915*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaab_MASK 0x00000001 2916*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaab_WORD word2 2917*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_npiv_SHIFT 1 2918*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_npiv_MASK 0x00000001 2919*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_npiv_WORD word2 2920*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_dif_SHIFT 2 2921*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_dif_MASK 0x00000001 2922*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_dif_WORD word2 2923*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_vf_SHIFT 3 2924*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_vf_MASK 0x00000001 2925*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_vf_WORD word2 2926*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpi_SHIFT 4 2927*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpi_MASK 0x00000001 2928*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpi_WORD word2 2929*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpt_SHIFT 5 2930*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpt_MASK 0x00000001 2931*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpt_WORD word2 2932*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpc_SHIFT 6 2933*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpc_MASK 0x00000001 2934*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpc_WORD word2 2935*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_ifip_SHIFT 7 2936*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_ifip_MASK 0x00000001 2937*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_ifip_WORD word2 2938*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaar_SHIFT 9 2939*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaar_MASK 0x00000001 2940*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaar_WORD word2 2941*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_perfh_SHIFT 11 2942*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_perfh_MASK 0x00000001 2943*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_perfh_WORD word2 2944*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_mrqp_SHIFT 16 2945*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_mrqp_MASK 0x00000001 2946*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_mrqp_WORD word2 2947*4882a593Smuzhiyun uint32_t word3; 2948*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_iaab_SHIFT 0 2949*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_iaab_MASK 0x00000001 2950*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_iaab_WORD word3 2951*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_npiv_SHIFT 1 2952*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_npiv_MASK 0x00000001 2953*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_npiv_WORD word3 2954*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_dif_SHIFT 2 2955*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_dif_MASK 0x00000001 2956*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_dif_WORD word3 2957*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_vf_SHIFT 3 2958*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_vf__MASK 0x00000001 2959*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_vf_WORD word3 2960*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpi_SHIFT 4 2961*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpi_MASK 0x00000001 2962*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpi_WORD word3 2963*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpt_SHIFT 5 2964*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpt_MASK 0x00000001 2965*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpt_WORD word3 2966*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpc_SHIFT 6 2967*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpc_MASK 0x00000001 2968*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpc_WORD word3 2969*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_ifip_SHIFT 7 2970*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_ifip_MASK 0x00000001 2971*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_ifip_WORD word3 2972*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_perfh_SHIFT 11 2973*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_perfh_MASK 0x00000001 2974*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_perfh_WORD word3 2975*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_mrqp_SHIFT 16 2976*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_mrqp_MASK 0x00000001 2977*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_mrqp_WORD word3 2978*4882a593Smuzhiyun }; 2979*4882a593Smuzhiyun 2980*4882a593Smuzhiyun struct lpfc_mbx_memory_dump_type3 { 2981*4882a593Smuzhiyun uint32_t word1; 2982*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_type_SHIFT 0 2983*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_type_MASK 0x0000000f 2984*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_type_WORD word1 2985*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_link_SHIFT 24 2986*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_link_MASK 0x000000ff 2987*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_link_WORD word1 2988*4882a593Smuzhiyun uint32_t word2; 2989*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_page_no_SHIFT 0 2990*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_page_no_MASK 0x0000ffff 2991*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_page_no_WORD word2 2992*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_offset_SHIFT 16 2993*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_offset_MASK 0x0000ffff 2994*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_offset_WORD word2 2995*4882a593Smuzhiyun uint32_t word3; 2996*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_length_SHIFT 0 2997*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_length_MASK 0x00ffffff 2998*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_length_WORD word3 2999*4882a593Smuzhiyun uint32_t addr_lo; 3000*4882a593Smuzhiyun uint32_t addr_hi; 3001*4882a593Smuzhiyun uint32_t return_len; 3002*4882a593Smuzhiyun }; 3003*4882a593Smuzhiyun 3004*4882a593Smuzhiyun #define DMP_PAGE_A0 0xa0 3005*4882a593Smuzhiyun #define DMP_PAGE_A2 0xa2 3006*4882a593Smuzhiyun #define DMP_SFF_PAGE_A0_SIZE 256 3007*4882a593Smuzhiyun #define DMP_SFF_PAGE_A2_SIZE 256 3008*4882a593Smuzhiyun 3009*4882a593Smuzhiyun #define SFP_WAVELENGTH_LC1310 1310 3010*4882a593Smuzhiyun #define SFP_WAVELENGTH_LL1550 1550 3011*4882a593Smuzhiyun 3012*4882a593Smuzhiyun 3013*4882a593Smuzhiyun /* 3014*4882a593Smuzhiyun * * SFF-8472 TABLE 3.4 3015*4882a593Smuzhiyun * */ 3016*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_UNKNOWN 0x00 /* Unknown */ 3017*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_SC 0x01 /* SC */ 3018*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_FC_COPPER1 0x02 /* FC style 1 copper connector */ 3019*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_FC_COPPER2 0x03 /* FC style 2 copper connector */ 3020*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_BNC 0x04 /* BNC / TNC */ 3021*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR__FC_COAX 0x05 /* FC coaxial headers */ 3022*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_FIBERJACK 0x06 /* FiberJack */ 3023*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_LC 0x07 /* LC */ 3024*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_MT 0x08 /* MT - RJ */ 3025*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_MU 0x09 /* MU */ 3026*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_SF 0x0A /* SG */ 3027*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_OPTICAL_PIGTAIL 0x0B /* Optical pigtail */ 3028*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_OPTICAL_PARALLEL 0x0C /* MPO Parallel Optic */ 3029*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_HSSDC_II 0x20 /* HSSDC II */ 3030*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_COPPER_PIGTAIL 0x21 /* Copper pigtail */ 3031*4882a593Smuzhiyun #define SFF_PG0_CONNECTOR_RJ45 0x22 /* RJ45 */ 3032*4882a593Smuzhiyun 3033*4882a593Smuzhiyun /* SFF-8472 Table 3.1 Diagnostics: Data Fields Address/Page A0 */ 3034*4882a593Smuzhiyun 3035*4882a593Smuzhiyun #define SSF_IDENTIFIER 0 3036*4882a593Smuzhiyun #define SSF_EXT_IDENTIFIER 1 3037*4882a593Smuzhiyun #define SSF_CONNECTOR 2 3038*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B0 3 3039*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B1 4 3040*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B2 5 3041*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B3 6 3042*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B4 7 3043*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B5 8 3044*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B6 9 3045*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B7 10 3046*4882a593Smuzhiyun #define SSF_ENCODING 11 3047*4882a593Smuzhiyun #define SSF_BR_NOMINAL 12 3048*4882a593Smuzhiyun #define SSF_RATE_IDENTIFIER 13 3049*4882a593Smuzhiyun #define SSF_LENGTH_9UM_KM 14 3050*4882a593Smuzhiyun #define SSF_LENGTH_9UM 15 3051*4882a593Smuzhiyun #define SSF_LENGTH_50UM_OM2 16 3052*4882a593Smuzhiyun #define SSF_LENGTH_62UM_OM1 17 3053*4882a593Smuzhiyun #define SFF_LENGTH_COPPER 18 3054*4882a593Smuzhiyun #define SSF_LENGTH_50UM_OM3 19 3055*4882a593Smuzhiyun #define SSF_VENDOR_NAME 20 3056*4882a593Smuzhiyun #define SSF_VENDOR_OUI 36 3057*4882a593Smuzhiyun #define SSF_VENDOR_PN 40 3058*4882a593Smuzhiyun #define SSF_VENDOR_REV 56 3059*4882a593Smuzhiyun #define SSF_WAVELENGTH_B1 60 3060*4882a593Smuzhiyun #define SSF_WAVELENGTH_B0 61 3061*4882a593Smuzhiyun #define SSF_CC_BASE 63 3062*4882a593Smuzhiyun #define SSF_OPTIONS_B1 64 3063*4882a593Smuzhiyun #define SSF_OPTIONS_B0 65 3064*4882a593Smuzhiyun #define SSF_BR_MAX 66 3065*4882a593Smuzhiyun #define SSF_BR_MIN 67 3066*4882a593Smuzhiyun #define SSF_VENDOR_SN 68 3067*4882a593Smuzhiyun #define SSF_DATE_CODE 84 3068*4882a593Smuzhiyun #define SSF_MONITORING_TYPEDIAGNOSTIC 92 3069*4882a593Smuzhiyun #define SSF_ENHANCED_OPTIONS 93 3070*4882a593Smuzhiyun #define SFF_8472_COMPLIANCE 94 3071*4882a593Smuzhiyun #define SSF_CC_EXT 95 3072*4882a593Smuzhiyun #define SSF_A0_VENDOR_SPECIFIC 96 3073*4882a593Smuzhiyun 3074*4882a593Smuzhiyun /* SFF-8472 Table 3.1a Diagnostics: Data Fields Address/Page A2 */ 3075*4882a593Smuzhiyun 3076*4882a593Smuzhiyun #define SSF_TEMP_HIGH_ALARM 0 3077*4882a593Smuzhiyun #define SSF_TEMP_LOW_ALARM 2 3078*4882a593Smuzhiyun #define SSF_TEMP_HIGH_WARNING 4 3079*4882a593Smuzhiyun #define SSF_TEMP_LOW_WARNING 6 3080*4882a593Smuzhiyun #define SSF_VOLTAGE_HIGH_ALARM 8 3081*4882a593Smuzhiyun #define SSF_VOLTAGE_LOW_ALARM 10 3082*4882a593Smuzhiyun #define SSF_VOLTAGE_HIGH_WARNING 12 3083*4882a593Smuzhiyun #define SSF_VOLTAGE_LOW_WARNING 14 3084*4882a593Smuzhiyun #define SSF_BIAS_HIGH_ALARM 16 3085*4882a593Smuzhiyun #define SSF_BIAS_LOW_ALARM 18 3086*4882a593Smuzhiyun #define SSF_BIAS_HIGH_WARNING 20 3087*4882a593Smuzhiyun #define SSF_BIAS_LOW_WARNING 22 3088*4882a593Smuzhiyun #define SSF_TXPOWER_HIGH_ALARM 24 3089*4882a593Smuzhiyun #define SSF_TXPOWER_LOW_ALARM 26 3090*4882a593Smuzhiyun #define SSF_TXPOWER_HIGH_WARNING 28 3091*4882a593Smuzhiyun #define SSF_TXPOWER_LOW_WARNING 30 3092*4882a593Smuzhiyun #define SSF_RXPOWER_HIGH_ALARM 32 3093*4882a593Smuzhiyun #define SSF_RXPOWER_LOW_ALARM 34 3094*4882a593Smuzhiyun #define SSF_RXPOWER_HIGH_WARNING 36 3095*4882a593Smuzhiyun #define SSF_RXPOWER_LOW_WARNING 38 3096*4882a593Smuzhiyun #define SSF_EXT_CAL_CONSTANTS 56 3097*4882a593Smuzhiyun #define SSF_CC_DMI 95 3098*4882a593Smuzhiyun #define SFF_TEMPERATURE_B1 96 3099*4882a593Smuzhiyun #define SFF_TEMPERATURE_B0 97 3100*4882a593Smuzhiyun #define SFF_VCC_B1 98 3101*4882a593Smuzhiyun #define SFF_VCC_B0 99 3102*4882a593Smuzhiyun #define SFF_TX_BIAS_CURRENT_B1 100 3103*4882a593Smuzhiyun #define SFF_TX_BIAS_CURRENT_B0 101 3104*4882a593Smuzhiyun #define SFF_TXPOWER_B1 102 3105*4882a593Smuzhiyun #define SFF_TXPOWER_B0 103 3106*4882a593Smuzhiyun #define SFF_RXPOWER_B1 104 3107*4882a593Smuzhiyun #define SFF_RXPOWER_B0 105 3108*4882a593Smuzhiyun #define SSF_STATUS_CONTROL 110 3109*4882a593Smuzhiyun #define SSF_ALARM_FLAGS 112 3110*4882a593Smuzhiyun #define SSF_WARNING_FLAGS 116 3111*4882a593Smuzhiyun #define SSF_EXT_TATUS_CONTROL_B1 118 3112*4882a593Smuzhiyun #define SSF_EXT_TATUS_CONTROL_B0 119 3113*4882a593Smuzhiyun #define SSF_A2_VENDOR_SPECIFIC 120 3114*4882a593Smuzhiyun #define SSF_USER_EEPROM 128 3115*4882a593Smuzhiyun #define SSF_VENDOR_CONTROL 148 3116*4882a593Smuzhiyun 3117*4882a593Smuzhiyun 3118*4882a593Smuzhiyun /* 3119*4882a593Smuzhiyun * Tranceiver codes Fibre Channel SFF-8472 3120*4882a593Smuzhiyun * Table 3.5. 3121*4882a593Smuzhiyun */ 3122*4882a593Smuzhiyun 3123*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte0 { 3124*4882a593Smuzhiyun uint8_t inifiband:4; 3125*4882a593Smuzhiyun uint8_t teng_ethernet:4; 3126*4882a593Smuzhiyun }; 3127*4882a593Smuzhiyun 3128*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte1 { 3129*4882a593Smuzhiyun uint8_t sonet:6; 3130*4882a593Smuzhiyun uint8_t escon:2; 3131*4882a593Smuzhiyun }; 3132*4882a593Smuzhiyun 3133*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte2 { 3134*4882a593Smuzhiyun uint8_t soNet:8; 3135*4882a593Smuzhiyun }; 3136*4882a593Smuzhiyun 3137*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte3 { 3138*4882a593Smuzhiyun uint8_t ethernet:8; 3139*4882a593Smuzhiyun }; 3140*4882a593Smuzhiyun 3141*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte4 { 3142*4882a593Smuzhiyun uint8_t fc_el_lo:1; 3143*4882a593Smuzhiyun uint8_t fc_lw_laser:1; 3144*4882a593Smuzhiyun uint8_t fc_sw_laser:1; 3145*4882a593Smuzhiyun uint8_t fc_md_distance:1; 3146*4882a593Smuzhiyun uint8_t fc_lg_distance:1; 3147*4882a593Smuzhiyun uint8_t fc_int_distance:1; 3148*4882a593Smuzhiyun uint8_t fc_short_distance:1; 3149*4882a593Smuzhiyun uint8_t fc_vld_distance:1; 3150*4882a593Smuzhiyun }; 3151*4882a593Smuzhiyun 3152*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte5 { 3153*4882a593Smuzhiyun uint8_t reserved1:1; 3154*4882a593Smuzhiyun uint8_t reserved2:1; 3155*4882a593Smuzhiyun uint8_t fc_sfp_active:1; /* Active cable */ 3156*4882a593Smuzhiyun uint8_t fc_sfp_passive:1; /* Passive cable */ 3157*4882a593Smuzhiyun uint8_t fc_lw_laser:1; /* Longwave laser */ 3158*4882a593Smuzhiyun uint8_t fc_sw_laser_sl:1; 3159*4882a593Smuzhiyun uint8_t fc_sw_laser_sn:1; 3160*4882a593Smuzhiyun uint8_t fc_el_hi:1; /* Electrical enclosure high bit */ 3161*4882a593Smuzhiyun }; 3162*4882a593Smuzhiyun 3163*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte6 { 3164*4882a593Smuzhiyun uint8_t fc_tm_sm:1; /* Single Mode */ 3165*4882a593Smuzhiyun uint8_t reserved:1; 3166*4882a593Smuzhiyun uint8_t fc_tm_m6:1; /* Multimode, 62.5um (M6) */ 3167*4882a593Smuzhiyun uint8_t fc_tm_tv:1; /* Video Coax (TV) */ 3168*4882a593Smuzhiyun uint8_t fc_tm_mi:1; /* Miniature Coax (MI) */ 3169*4882a593Smuzhiyun uint8_t fc_tm_tp:1; /* Twisted Pair (TP) */ 3170*4882a593Smuzhiyun uint8_t fc_tm_tw:1; /* Twin Axial Pair */ 3171*4882a593Smuzhiyun }; 3172*4882a593Smuzhiyun 3173*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte7 { 3174*4882a593Smuzhiyun uint8_t fc_sp_100MB:1; /* 100 MB/sec */ 3175*4882a593Smuzhiyun uint8_t reserve:1; 3176*4882a593Smuzhiyun uint8_t fc_sp_200mb:1; /* 200 MB/sec */ 3177*4882a593Smuzhiyun uint8_t fc_sp_3200MB:1; /* 3200 MB/sec */ 3178*4882a593Smuzhiyun uint8_t fc_sp_400MB:1; /* 400 MB/sec */ 3179*4882a593Smuzhiyun uint8_t fc_sp_1600MB:1; /* 1600 MB/sec */ 3180*4882a593Smuzhiyun uint8_t fc_sp_800MB:1; /* 800 MB/sec */ 3181*4882a593Smuzhiyun uint8_t fc_sp_1200MB:1; /* 1200 MB/sec */ 3182*4882a593Smuzhiyun }; 3183*4882a593Smuzhiyun 3184*4882a593Smuzhiyun /* User writable non-volatile memory, SFF-8472 Table 3.20 */ 3185*4882a593Smuzhiyun struct user_eeprom { 3186*4882a593Smuzhiyun uint8_t vendor_name[16]; 3187*4882a593Smuzhiyun uint8_t vendor_oui[3]; 3188*4882a593Smuzhiyun uint8_t vendor_pn[816]; 3189*4882a593Smuzhiyun uint8_t vendor_rev[4]; 3190*4882a593Smuzhiyun uint8_t vendor_sn[16]; 3191*4882a593Smuzhiyun uint8_t datecode[6]; 3192*4882a593Smuzhiyun uint8_t lot_code[2]; 3193*4882a593Smuzhiyun uint8_t reserved191[57]; 3194*4882a593Smuzhiyun }; 3195*4882a593Smuzhiyun 3196*4882a593Smuzhiyun #define SLI4_PAGE_ALIGN(addr) (((addr)+((SLI4_PAGE_SIZE)-1)) \ 3197*4882a593Smuzhiyun &(~((SLI4_PAGE_SIZE)-1))) 3198*4882a593Smuzhiyun 3199*4882a593Smuzhiyun struct lpfc_sli4_parameters { 3200*4882a593Smuzhiyun uint32_t word0; 3201*4882a593Smuzhiyun #define cfg_prot_type_SHIFT 0 3202*4882a593Smuzhiyun #define cfg_prot_type_MASK 0x000000FF 3203*4882a593Smuzhiyun #define cfg_prot_type_WORD word0 3204*4882a593Smuzhiyun uint32_t word1; 3205*4882a593Smuzhiyun #define cfg_ft_SHIFT 0 3206*4882a593Smuzhiyun #define cfg_ft_MASK 0x00000001 3207*4882a593Smuzhiyun #define cfg_ft_WORD word1 3208*4882a593Smuzhiyun #define cfg_sli_rev_SHIFT 4 3209*4882a593Smuzhiyun #define cfg_sli_rev_MASK 0x0000000f 3210*4882a593Smuzhiyun #define cfg_sli_rev_WORD word1 3211*4882a593Smuzhiyun #define cfg_sli_family_SHIFT 8 3212*4882a593Smuzhiyun #define cfg_sli_family_MASK 0x0000000f 3213*4882a593Smuzhiyun #define cfg_sli_family_WORD word1 3214*4882a593Smuzhiyun #define cfg_if_type_SHIFT 12 3215*4882a593Smuzhiyun #define cfg_if_type_MASK 0x0000000f 3216*4882a593Smuzhiyun #define cfg_if_type_WORD word1 3217*4882a593Smuzhiyun #define cfg_sli_hint_1_SHIFT 16 3218*4882a593Smuzhiyun #define cfg_sli_hint_1_MASK 0x000000ff 3219*4882a593Smuzhiyun #define cfg_sli_hint_1_WORD word1 3220*4882a593Smuzhiyun #define cfg_sli_hint_2_SHIFT 24 3221*4882a593Smuzhiyun #define cfg_sli_hint_2_MASK 0x0000001f 3222*4882a593Smuzhiyun #define cfg_sli_hint_2_WORD word1 3223*4882a593Smuzhiyun uint32_t word2; 3224*4882a593Smuzhiyun #define cfg_eqav_SHIFT 31 3225*4882a593Smuzhiyun #define cfg_eqav_MASK 0x00000001 3226*4882a593Smuzhiyun #define cfg_eqav_WORD word2 3227*4882a593Smuzhiyun uint32_t word3; 3228*4882a593Smuzhiyun uint32_t word4; 3229*4882a593Smuzhiyun #define cfg_cqv_SHIFT 14 3230*4882a593Smuzhiyun #define cfg_cqv_MASK 0x00000003 3231*4882a593Smuzhiyun #define cfg_cqv_WORD word4 3232*4882a593Smuzhiyun #define cfg_cqpsize_SHIFT 16 3233*4882a593Smuzhiyun #define cfg_cqpsize_MASK 0x000000ff 3234*4882a593Smuzhiyun #define cfg_cqpsize_WORD word4 3235*4882a593Smuzhiyun #define cfg_cqav_SHIFT 31 3236*4882a593Smuzhiyun #define cfg_cqav_MASK 0x00000001 3237*4882a593Smuzhiyun #define cfg_cqav_WORD word4 3238*4882a593Smuzhiyun uint32_t word5; 3239*4882a593Smuzhiyun uint32_t word6; 3240*4882a593Smuzhiyun #define cfg_mqv_SHIFT 14 3241*4882a593Smuzhiyun #define cfg_mqv_MASK 0x00000003 3242*4882a593Smuzhiyun #define cfg_mqv_WORD word6 3243*4882a593Smuzhiyun uint32_t word7; 3244*4882a593Smuzhiyun uint32_t word8; 3245*4882a593Smuzhiyun #define cfg_wqpcnt_SHIFT 0 3246*4882a593Smuzhiyun #define cfg_wqpcnt_MASK 0x0000000f 3247*4882a593Smuzhiyun #define cfg_wqpcnt_WORD word8 3248*4882a593Smuzhiyun #define cfg_wqsize_SHIFT 8 3249*4882a593Smuzhiyun #define cfg_wqsize_MASK 0x0000000f 3250*4882a593Smuzhiyun #define cfg_wqsize_WORD word8 3251*4882a593Smuzhiyun #define cfg_wqv_SHIFT 14 3252*4882a593Smuzhiyun #define cfg_wqv_MASK 0x00000003 3253*4882a593Smuzhiyun #define cfg_wqv_WORD word8 3254*4882a593Smuzhiyun #define cfg_wqpsize_SHIFT 16 3255*4882a593Smuzhiyun #define cfg_wqpsize_MASK 0x000000ff 3256*4882a593Smuzhiyun #define cfg_wqpsize_WORD word8 3257*4882a593Smuzhiyun uint32_t word9; 3258*4882a593Smuzhiyun uint32_t word10; 3259*4882a593Smuzhiyun #define cfg_rqv_SHIFT 14 3260*4882a593Smuzhiyun #define cfg_rqv_MASK 0x00000003 3261*4882a593Smuzhiyun #define cfg_rqv_WORD word10 3262*4882a593Smuzhiyun uint32_t word11; 3263*4882a593Smuzhiyun #define cfg_rq_db_window_SHIFT 28 3264*4882a593Smuzhiyun #define cfg_rq_db_window_MASK 0x0000000f 3265*4882a593Smuzhiyun #define cfg_rq_db_window_WORD word11 3266*4882a593Smuzhiyun uint32_t word12; 3267*4882a593Smuzhiyun #define cfg_fcoe_SHIFT 0 3268*4882a593Smuzhiyun #define cfg_fcoe_MASK 0x00000001 3269*4882a593Smuzhiyun #define cfg_fcoe_WORD word12 3270*4882a593Smuzhiyun #define cfg_ext_SHIFT 1 3271*4882a593Smuzhiyun #define cfg_ext_MASK 0x00000001 3272*4882a593Smuzhiyun #define cfg_ext_WORD word12 3273*4882a593Smuzhiyun #define cfg_hdrr_SHIFT 2 3274*4882a593Smuzhiyun #define cfg_hdrr_MASK 0x00000001 3275*4882a593Smuzhiyun #define cfg_hdrr_WORD word12 3276*4882a593Smuzhiyun #define cfg_phwq_SHIFT 15 3277*4882a593Smuzhiyun #define cfg_phwq_MASK 0x00000001 3278*4882a593Smuzhiyun #define cfg_phwq_WORD word12 3279*4882a593Smuzhiyun #define cfg_oas_SHIFT 25 3280*4882a593Smuzhiyun #define cfg_oas_MASK 0x00000001 3281*4882a593Smuzhiyun #define cfg_oas_WORD word12 3282*4882a593Smuzhiyun #define cfg_loopbk_scope_SHIFT 28 3283*4882a593Smuzhiyun #define cfg_loopbk_scope_MASK 0x0000000f 3284*4882a593Smuzhiyun #define cfg_loopbk_scope_WORD word12 3285*4882a593Smuzhiyun uint32_t sge_supp_len; 3286*4882a593Smuzhiyun uint32_t word14; 3287*4882a593Smuzhiyun #define cfg_sgl_page_cnt_SHIFT 0 3288*4882a593Smuzhiyun #define cfg_sgl_page_cnt_MASK 0x0000000f 3289*4882a593Smuzhiyun #define cfg_sgl_page_cnt_WORD word14 3290*4882a593Smuzhiyun #define cfg_sgl_page_size_SHIFT 8 3291*4882a593Smuzhiyun #define cfg_sgl_page_size_MASK 0x000000ff 3292*4882a593Smuzhiyun #define cfg_sgl_page_size_WORD word14 3293*4882a593Smuzhiyun #define cfg_sgl_pp_align_SHIFT 16 3294*4882a593Smuzhiyun #define cfg_sgl_pp_align_MASK 0x000000ff 3295*4882a593Smuzhiyun #define cfg_sgl_pp_align_WORD word14 3296*4882a593Smuzhiyun uint32_t word15; 3297*4882a593Smuzhiyun uint32_t word16; 3298*4882a593Smuzhiyun uint32_t word17; 3299*4882a593Smuzhiyun uint32_t word18; 3300*4882a593Smuzhiyun uint32_t word19; 3301*4882a593Smuzhiyun #define cfg_ext_embed_cb_SHIFT 0 3302*4882a593Smuzhiyun #define cfg_ext_embed_cb_MASK 0x00000001 3303*4882a593Smuzhiyun #define cfg_ext_embed_cb_WORD word19 3304*4882a593Smuzhiyun #define cfg_mds_diags_SHIFT 1 3305*4882a593Smuzhiyun #define cfg_mds_diags_MASK 0x00000001 3306*4882a593Smuzhiyun #define cfg_mds_diags_WORD word19 3307*4882a593Smuzhiyun #define cfg_nvme_SHIFT 3 3308*4882a593Smuzhiyun #define cfg_nvme_MASK 0x00000001 3309*4882a593Smuzhiyun #define cfg_nvme_WORD word19 3310*4882a593Smuzhiyun #define cfg_xib_SHIFT 4 3311*4882a593Smuzhiyun #define cfg_xib_MASK 0x00000001 3312*4882a593Smuzhiyun #define cfg_xib_WORD word19 3313*4882a593Smuzhiyun #define cfg_xpsgl_SHIFT 6 3314*4882a593Smuzhiyun #define cfg_xpsgl_MASK 0x00000001 3315*4882a593Smuzhiyun #define cfg_xpsgl_WORD word19 3316*4882a593Smuzhiyun #define cfg_eqdr_SHIFT 8 3317*4882a593Smuzhiyun #define cfg_eqdr_MASK 0x00000001 3318*4882a593Smuzhiyun #define cfg_eqdr_WORD word19 3319*4882a593Smuzhiyun #define cfg_nosr_SHIFT 9 3320*4882a593Smuzhiyun #define cfg_nosr_MASK 0x00000001 3321*4882a593Smuzhiyun #define cfg_nosr_WORD word19 3322*4882a593Smuzhiyun 3323*4882a593Smuzhiyun #define cfg_bv1s_SHIFT 10 3324*4882a593Smuzhiyun #define cfg_bv1s_MASK 0x00000001 3325*4882a593Smuzhiyun #define cfg_bv1s_WORD word19 3326*4882a593Smuzhiyun #define cfg_pvl_SHIFT 13 3327*4882a593Smuzhiyun #define cfg_pvl_MASK 0x00000001 3328*4882a593Smuzhiyun #define cfg_pvl_WORD word19 3329*4882a593Smuzhiyun 3330*4882a593Smuzhiyun #define cfg_nsler_SHIFT 12 3331*4882a593Smuzhiyun #define cfg_nsler_MASK 0x00000001 3332*4882a593Smuzhiyun #define cfg_nsler_WORD word19 3333*4882a593Smuzhiyun 3334*4882a593Smuzhiyun uint32_t word20; 3335*4882a593Smuzhiyun #define cfg_max_tow_xri_SHIFT 0 3336*4882a593Smuzhiyun #define cfg_max_tow_xri_MASK 0x0000ffff 3337*4882a593Smuzhiyun #define cfg_max_tow_xri_WORD word20 3338*4882a593Smuzhiyun 3339*4882a593Smuzhiyun uint32_t word21; /* RESERVED */ 3340*4882a593Smuzhiyun uint32_t word22; /* RESERVED */ 3341*4882a593Smuzhiyun uint32_t word23; /* RESERVED */ 3342*4882a593Smuzhiyun 3343*4882a593Smuzhiyun uint32_t word24; 3344*4882a593Smuzhiyun #define cfg_frag_field_offset_SHIFT 0 3345*4882a593Smuzhiyun #define cfg_frag_field_offset_MASK 0x0000ffff 3346*4882a593Smuzhiyun #define cfg_frag_field_offset_WORD word24 3347*4882a593Smuzhiyun 3348*4882a593Smuzhiyun #define cfg_frag_field_size_SHIFT 16 3349*4882a593Smuzhiyun #define cfg_frag_field_size_MASK 0x0000ffff 3350*4882a593Smuzhiyun #define cfg_frag_field_size_WORD word24 3351*4882a593Smuzhiyun 3352*4882a593Smuzhiyun uint32_t word25; 3353*4882a593Smuzhiyun #define cfg_sgl_field_offset_SHIFT 0 3354*4882a593Smuzhiyun #define cfg_sgl_field_offset_MASK 0x0000ffff 3355*4882a593Smuzhiyun #define cfg_sgl_field_offset_WORD word25 3356*4882a593Smuzhiyun 3357*4882a593Smuzhiyun #define cfg_sgl_field_size_SHIFT 16 3358*4882a593Smuzhiyun #define cfg_sgl_field_size_MASK 0x0000ffff 3359*4882a593Smuzhiyun #define cfg_sgl_field_size_WORD word25 3360*4882a593Smuzhiyun 3361*4882a593Smuzhiyun uint32_t word26; /* Chain SGE initial value LOW */ 3362*4882a593Smuzhiyun uint32_t word27; /* Chain SGE initial value HIGH */ 3363*4882a593Smuzhiyun #define LPFC_NODELAY_MAX_IO 32 3364*4882a593Smuzhiyun }; 3365*4882a593Smuzhiyun 3366*4882a593Smuzhiyun #define LPFC_SET_UE_RECOVERY 0x10 3367*4882a593Smuzhiyun #define LPFC_SET_MDS_DIAGS 0x12 3368*4882a593Smuzhiyun #define LPFC_SET_DUAL_DUMP 0x1e 3369*4882a593Smuzhiyun struct lpfc_mbx_set_feature { 3370*4882a593Smuzhiyun struct mbox_header header; 3371*4882a593Smuzhiyun uint32_t feature; 3372*4882a593Smuzhiyun uint32_t param_len; 3373*4882a593Smuzhiyun uint32_t word6; 3374*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UER_SHIFT 0 3375*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UER_MASK 0x00000001 3376*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UER_WORD word6 3377*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_SHIFT 2 3378*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_MASK 0x00000001 3379*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_WORD word6 3380*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_deep_loopbk_SHIFT 1 3381*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_deep_loopbk_MASK 0x00000001 3382*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_deep_loopbk_WORD word6 3383*4882a593Smuzhiyun #define lpfc_mbx_set_feature_dd_SHIFT 0 3384*4882a593Smuzhiyun #define lpfc_mbx_set_feature_dd_MASK 0x00000001 3385*4882a593Smuzhiyun #define lpfc_mbx_set_feature_dd_WORD word6 3386*4882a593Smuzhiyun #define lpfc_mbx_set_feature_ddquery_SHIFT 1 3387*4882a593Smuzhiyun #define lpfc_mbx_set_feature_ddquery_MASK 0x00000001 3388*4882a593Smuzhiyun #define lpfc_mbx_set_feature_ddquery_WORD word6 3389*4882a593Smuzhiyun #define LPFC_DISABLE_DUAL_DUMP 0 3390*4882a593Smuzhiyun #define LPFC_ENABLE_DUAL_DUMP 1 3391*4882a593Smuzhiyun #define LPFC_QUERY_OP_DUAL_DUMP 2 3392*4882a593Smuzhiyun uint32_t word7; 3393*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UERP_SHIFT 0 3394*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UERP_MASK 0x0000ffff 3395*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UERP_WORD word7 3396*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UESR_SHIFT 16 3397*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UESR_MASK 0x0000ffff 3398*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UESR_WORD word7 3399*4882a593Smuzhiyun }; 3400*4882a593Smuzhiyun 3401*4882a593Smuzhiyun 3402*4882a593Smuzhiyun #define LPFC_SET_HOST_OS_DRIVER_VERSION 0x2 3403*4882a593Smuzhiyun struct lpfc_mbx_set_host_data { 3404*4882a593Smuzhiyun #define LPFC_HOST_OS_DRIVER_VERSION_SIZE 48 3405*4882a593Smuzhiyun struct mbox_header header; 3406*4882a593Smuzhiyun uint32_t param_id; 3407*4882a593Smuzhiyun uint32_t param_len; 3408*4882a593Smuzhiyun uint8_t data[LPFC_HOST_OS_DRIVER_VERSION_SIZE]; 3409*4882a593Smuzhiyun }; 3410*4882a593Smuzhiyun 3411*4882a593Smuzhiyun struct lpfc_mbx_set_trunk_mode { 3412*4882a593Smuzhiyun struct mbox_header header; 3413*4882a593Smuzhiyun uint32_t word0; 3414*4882a593Smuzhiyun #define lpfc_mbx_set_trunk_mode_WORD word0 3415*4882a593Smuzhiyun #define lpfc_mbx_set_trunk_mode_SHIFT 0 3416*4882a593Smuzhiyun #define lpfc_mbx_set_trunk_mode_MASK 0xFF 3417*4882a593Smuzhiyun uint32_t word1; 3418*4882a593Smuzhiyun uint32_t word2; 3419*4882a593Smuzhiyun }; 3420*4882a593Smuzhiyun 3421*4882a593Smuzhiyun struct lpfc_mbx_get_sli4_parameters { 3422*4882a593Smuzhiyun struct mbox_header header; 3423*4882a593Smuzhiyun struct lpfc_sli4_parameters sli4_parameters; 3424*4882a593Smuzhiyun }; 3425*4882a593Smuzhiyun 3426*4882a593Smuzhiyun struct lpfc_rscr_desc_generic { 3427*4882a593Smuzhiyun #define LPFC_RSRC_DESC_WSIZE 22 3428*4882a593Smuzhiyun uint32_t desc[LPFC_RSRC_DESC_WSIZE]; 3429*4882a593Smuzhiyun }; 3430*4882a593Smuzhiyun 3431*4882a593Smuzhiyun struct lpfc_rsrc_desc_pcie { 3432*4882a593Smuzhiyun uint32_t word0; 3433*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_type_SHIFT 0 3434*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_type_MASK 0x000000ff 3435*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_type_WORD word0 3436*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_PCIE 0x40 3437*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_length_SHIFT 8 3438*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_length_MASK 0x000000ff 3439*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_length_WORD word0 3440*4882a593Smuzhiyun uint32_t word1; 3441*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pfnum_SHIFT 0 3442*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pfnum_MASK 0x000000ff 3443*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pfnum_WORD word1 3444*4882a593Smuzhiyun uint32_t reserved; 3445*4882a593Smuzhiyun uint32_t word3; 3446*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_sriov_sta_SHIFT 0 3447*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_sriov_sta_MASK 0x000000ff 3448*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_sriov_sta_WORD word3 3449*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_sta_SHIFT 8 3450*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_sta_MASK 0x000000ff 3451*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_sta_WORD word3 3452*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_type_SHIFT 16 3453*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_type_MASK 0x000000ff 3454*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_type_WORD word3 3455*4882a593Smuzhiyun uint32_t word4; 3456*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_nr_virtfn_SHIFT 0 3457*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_nr_virtfn_MASK 0x0000ffff 3458*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_nr_virtfn_WORD word4 3459*4882a593Smuzhiyun }; 3460*4882a593Smuzhiyun 3461*4882a593Smuzhiyun struct lpfc_rsrc_desc_fcfcoe { 3462*4882a593Smuzhiyun uint32_t word0; 3463*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_type_SHIFT 0 3464*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_type_MASK 0x000000ff 3465*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_type_WORD word0 3466*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_FCFCOE 0x43 3467*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_length_SHIFT 8 3468*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_length_MASK 0x000000ff 3469*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_length_WORD word0 3470*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_FCFCOE_V0_RSVD 0 3471*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_FCFCOE_V0_LENGTH 72 3472*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_FCFCOE_V1_LENGTH 88 3473*4882a593Smuzhiyun uint32_t word1; 3474*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfnum_SHIFT 0 3475*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfnum_MASK 0x000000ff 3476*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfnum_WORD word1 3477*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_pfnum_SHIFT 16 3478*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_pfnum_MASK 0x000007ff 3479*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_pfnum_WORD word1 3480*4882a593Smuzhiyun uint32_t word2; 3481*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rpi_cnt_SHIFT 0 3482*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rpi_cnt_MASK 0x0000ffff 3483*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rpi_cnt_WORD word2 3484*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_xri_cnt_SHIFT 16 3485*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_xri_cnt_MASK 0x0000ffff 3486*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_xri_cnt_WORD word2 3487*4882a593Smuzhiyun uint32_t word3; 3488*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_wq_cnt_SHIFT 0 3489*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_wq_cnt_MASK 0x0000ffff 3490*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_wq_cnt_WORD word3 3491*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rq_cnt_SHIFT 16 3492*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rq_cnt_MASK 0x0000ffff 3493*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rq_cnt_WORD word3 3494*4882a593Smuzhiyun uint32_t word4; 3495*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_cq_cnt_SHIFT 0 3496*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_cq_cnt_MASK 0x0000ffff 3497*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_cq_cnt_WORD word4 3498*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vpi_cnt_SHIFT 16 3499*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vpi_cnt_MASK 0x0000ffff 3500*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vpi_cnt_WORD word4 3501*4882a593Smuzhiyun uint32_t word5; 3502*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_fcfi_cnt_SHIFT 0 3503*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_fcfi_cnt_MASK 0x0000ffff 3504*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_fcfi_cnt_WORD word5 3505*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfi_cnt_SHIFT 16 3506*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfi_cnt_MASK 0x0000ffff 3507*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfi_cnt_WORD word5 3508*4882a593Smuzhiyun uint32_t word6; 3509*4882a593Smuzhiyun uint32_t word7; 3510*4882a593Smuzhiyun uint32_t word8; 3511*4882a593Smuzhiyun uint32_t word9; 3512*4882a593Smuzhiyun uint32_t word10; 3513*4882a593Smuzhiyun uint32_t word11; 3514*4882a593Smuzhiyun uint32_t word12; 3515*4882a593Smuzhiyun uint32_t word13; 3516*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_nr_SHIFT 0 3517*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_nr_MASK 0x0000003f 3518*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_nr_WORD word13 3519*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_tp_SHIFT 6 3520*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_tp_MASK 0x00000003 3521*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_tp_WORD word13 3522*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lmc_SHIFT 8 3523*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lmc_MASK 0x00000001 3524*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lmc_WORD word13 3525*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lld_SHIFT 9 3526*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lld_MASK 0x00000001 3527*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lld_WORD word13 3528*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_eq_cnt_SHIFT 16 3529*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_eq_cnt_MASK 0x0000ffff 3530*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_eq_cnt_WORD word13 3531*4882a593Smuzhiyun /* extended FC/FCoE Resource Descriptor when length = 88 bytes */ 3532*4882a593Smuzhiyun uint32_t bw_min; 3533*4882a593Smuzhiyun uint32_t bw_max; 3534*4882a593Smuzhiyun uint32_t iops_min; 3535*4882a593Smuzhiyun uint32_t iops_max; 3536*4882a593Smuzhiyun uint32_t reserved[4]; 3537*4882a593Smuzhiyun }; 3538*4882a593Smuzhiyun 3539*4882a593Smuzhiyun struct lpfc_func_cfg { 3540*4882a593Smuzhiyun #define LPFC_RSRC_DESC_MAX_NUM 2 3541*4882a593Smuzhiyun uint32_t rsrc_desc_count; 3542*4882a593Smuzhiyun struct lpfc_rscr_desc_generic desc[LPFC_RSRC_DESC_MAX_NUM]; 3543*4882a593Smuzhiyun }; 3544*4882a593Smuzhiyun 3545*4882a593Smuzhiyun struct lpfc_mbx_get_func_cfg { 3546*4882a593Smuzhiyun struct mbox_header header; 3547*4882a593Smuzhiyun #define LPFC_CFG_TYPE_PERSISTENT_OVERRIDE 0x0 3548*4882a593Smuzhiyun #define LPFC_CFG_TYPE_FACTURY_DEFAULT 0x1 3549*4882a593Smuzhiyun #define LPFC_CFG_TYPE_CURRENT_ACTIVE 0x2 3550*4882a593Smuzhiyun struct lpfc_func_cfg func_cfg; 3551*4882a593Smuzhiyun }; 3552*4882a593Smuzhiyun 3553*4882a593Smuzhiyun struct lpfc_prof_cfg { 3554*4882a593Smuzhiyun #define LPFC_RSRC_DESC_MAX_NUM 2 3555*4882a593Smuzhiyun uint32_t rsrc_desc_count; 3556*4882a593Smuzhiyun struct lpfc_rscr_desc_generic desc[LPFC_RSRC_DESC_MAX_NUM]; 3557*4882a593Smuzhiyun }; 3558*4882a593Smuzhiyun 3559*4882a593Smuzhiyun struct lpfc_mbx_get_prof_cfg { 3560*4882a593Smuzhiyun struct mbox_header header; 3561*4882a593Smuzhiyun #define LPFC_CFG_TYPE_PERSISTENT_OVERRIDE 0x0 3562*4882a593Smuzhiyun #define LPFC_CFG_TYPE_FACTURY_DEFAULT 0x1 3563*4882a593Smuzhiyun #define LPFC_CFG_TYPE_CURRENT_ACTIVE 0x2 3564*4882a593Smuzhiyun union { 3565*4882a593Smuzhiyun struct { 3566*4882a593Smuzhiyun uint32_t word10; 3567*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_id_SHIFT 0 3568*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_id_MASK 0x000000ff 3569*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_id_WORD word10 3570*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_tp_SHIFT 8 3571*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_tp_MASK 0x00000003 3572*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_tp_WORD word10 3573*4882a593Smuzhiyun } request; 3574*4882a593Smuzhiyun struct { 3575*4882a593Smuzhiyun struct lpfc_prof_cfg prof_cfg; 3576*4882a593Smuzhiyun } response; 3577*4882a593Smuzhiyun } u; 3578*4882a593Smuzhiyun }; 3579*4882a593Smuzhiyun 3580*4882a593Smuzhiyun struct lpfc_controller_attribute { 3581*4882a593Smuzhiyun uint32_t version_string[8]; 3582*4882a593Smuzhiyun uint32_t manufacturer_name[8]; 3583*4882a593Smuzhiyun uint32_t supported_modes; 3584*4882a593Smuzhiyun uint32_t word17; 3585*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_lo_SHIFT 0 3586*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_lo_MASK 0x000000ff 3587*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_lo_WORD word17 3588*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_hi_SHIFT 8 3589*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_hi_MASK 0x000000ff 3590*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_hi_WORD word17 3591*4882a593Smuzhiyun uint32_t mbx_da_struct_ver; 3592*4882a593Smuzhiyun uint32_t ep_fw_da_struct_ver; 3593*4882a593Smuzhiyun uint32_t ncsi_ver_str[3]; 3594*4882a593Smuzhiyun uint32_t dflt_ext_timeout; 3595*4882a593Smuzhiyun uint32_t model_number[8]; 3596*4882a593Smuzhiyun uint32_t description[16]; 3597*4882a593Smuzhiyun uint32_t serial_number[8]; 3598*4882a593Smuzhiyun uint32_t ip_ver_str[8]; 3599*4882a593Smuzhiyun uint32_t fw_ver_str[8]; 3600*4882a593Smuzhiyun uint32_t bios_ver_str[8]; 3601*4882a593Smuzhiyun uint32_t redboot_ver_str[8]; 3602*4882a593Smuzhiyun uint32_t driver_ver_str[8]; 3603*4882a593Smuzhiyun uint32_t flash_fw_ver_str[8]; 3604*4882a593Smuzhiyun uint32_t functionality; 3605*4882a593Smuzhiyun uint32_t word105; 3606*4882a593Smuzhiyun #define lpfc_cntl_attr_max_cbd_len_SHIFT 0 3607*4882a593Smuzhiyun #define lpfc_cntl_attr_max_cbd_len_MASK 0x0000ffff 3608*4882a593Smuzhiyun #define lpfc_cntl_attr_max_cbd_len_WORD word105 3609*4882a593Smuzhiyun #define lpfc_cntl_attr_asic_rev_SHIFT 16 3610*4882a593Smuzhiyun #define lpfc_cntl_attr_asic_rev_MASK 0x000000ff 3611*4882a593Smuzhiyun #define lpfc_cntl_attr_asic_rev_WORD word105 3612*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid0_SHIFT 24 3613*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid0_MASK 0x000000ff 3614*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid0_WORD word105 3615*4882a593Smuzhiyun uint32_t gen_guid1_12[3]; 3616*4882a593Smuzhiyun uint32_t word109; 3617*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid13_14_SHIFT 0 3618*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid13_14_MASK 0x0000ffff 3619*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid13_14_WORD word109 3620*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid15_SHIFT 16 3621*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid15_MASK 0x000000ff 3622*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid15_WORD word109 3623*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_port_cnt_SHIFT 24 3624*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_port_cnt_MASK 0x000000ff 3625*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_port_cnt_WORD word109 3626*4882a593Smuzhiyun uint32_t word110; 3627*4882a593Smuzhiyun #define lpfc_cntl_attr_dflt_lnk_tmo_SHIFT 0 3628*4882a593Smuzhiyun #define lpfc_cntl_attr_dflt_lnk_tmo_MASK 0x0000ffff 3629*4882a593Smuzhiyun #define lpfc_cntl_attr_dflt_lnk_tmo_WORD word110 3630*4882a593Smuzhiyun #define lpfc_cntl_attr_multi_func_dev_SHIFT 24 3631*4882a593Smuzhiyun #define lpfc_cntl_attr_multi_func_dev_MASK 0x000000ff 3632*4882a593Smuzhiyun #define lpfc_cntl_attr_multi_func_dev_WORD word110 3633*4882a593Smuzhiyun uint32_t word111; 3634*4882a593Smuzhiyun #define lpfc_cntl_attr_cache_valid_SHIFT 0 3635*4882a593Smuzhiyun #define lpfc_cntl_attr_cache_valid_MASK 0x000000ff 3636*4882a593Smuzhiyun #define lpfc_cntl_attr_cache_valid_WORD word111 3637*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_status_SHIFT 8 3638*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_status_MASK 0x000000ff 3639*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_status_WORD word111 3640*4882a593Smuzhiyun #define lpfc_cntl_attr_max_domain_SHIFT 16 3641*4882a593Smuzhiyun #define lpfc_cntl_attr_max_domain_MASK 0x000000ff 3642*4882a593Smuzhiyun #define lpfc_cntl_attr_max_domain_WORD word111 3643*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_numb_SHIFT 24 3644*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_numb_MASK 0x0000003f 3645*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_numb_WORD word111 3646*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_type_SHIFT 30 3647*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_type_MASK 0x00000003 3648*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_type_WORD word111 3649*4882a593Smuzhiyun uint32_t fw_post_status; 3650*4882a593Smuzhiyun uint32_t hba_mtu[8]; 3651*4882a593Smuzhiyun uint32_t word121; 3652*4882a593Smuzhiyun uint32_t reserved1[3]; 3653*4882a593Smuzhiyun uint32_t word125; 3654*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_vendor_id_SHIFT 0 3655*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_vendor_id_MASK 0x0000ffff 3656*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_vendor_id_WORD word125 3657*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_device_id_SHIFT 16 3658*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_device_id_MASK 0x0000ffff 3659*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_device_id_WORD word125 3660*4882a593Smuzhiyun uint32_t word126; 3661*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subvdr_id_SHIFT 0 3662*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subvdr_id_MASK 0x0000ffff 3663*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subvdr_id_WORD word126 3664*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subsys_id_SHIFT 16 3665*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subsys_id_MASK 0x0000ffff 3666*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subsys_id_WORD word126 3667*4882a593Smuzhiyun uint32_t word127; 3668*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_bus_num_SHIFT 0 3669*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_bus_num_MASK 0x000000ff 3670*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_bus_num_WORD word127 3671*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_dev_num_SHIFT 8 3672*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_dev_num_MASK 0x000000ff 3673*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_dev_num_WORD word127 3674*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_fnc_num_SHIFT 16 3675*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_fnc_num_MASK 0x000000ff 3676*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_fnc_num_WORD word127 3677*4882a593Smuzhiyun #define lpfc_cntl_attr_inf_type_SHIFT 24 3678*4882a593Smuzhiyun #define lpfc_cntl_attr_inf_type_MASK 0x000000ff 3679*4882a593Smuzhiyun #define lpfc_cntl_attr_inf_type_WORD word127 3680*4882a593Smuzhiyun uint32_t unique_id[2]; 3681*4882a593Smuzhiyun uint32_t word130; 3682*4882a593Smuzhiyun #define lpfc_cntl_attr_num_netfil_SHIFT 0 3683*4882a593Smuzhiyun #define lpfc_cntl_attr_num_netfil_MASK 0x000000ff 3684*4882a593Smuzhiyun #define lpfc_cntl_attr_num_netfil_WORD word130 3685*4882a593Smuzhiyun uint32_t reserved2[4]; 3686*4882a593Smuzhiyun }; 3687*4882a593Smuzhiyun 3688*4882a593Smuzhiyun struct lpfc_mbx_get_cntl_attributes { 3689*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr cfg_shdr; 3690*4882a593Smuzhiyun struct lpfc_controller_attribute cntl_attr; 3691*4882a593Smuzhiyun }; 3692*4882a593Smuzhiyun 3693*4882a593Smuzhiyun struct lpfc_mbx_get_port_name { 3694*4882a593Smuzhiyun struct mbox_header header; 3695*4882a593Smuzhiyun union { 3696*4882a593Smuzhiyun struct { 3697*4882a593Smuzhiyun uint32_t word4; 3698*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_lnk_type_SHIFT 0 3699*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_lnk_type_MASK 0x00000003 3700*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_lnk_type_WORD word4 3701*4882a593Smuzhiyun } request; 3702*4882a593Smuzhiyun struct { 3703*4882a593Smuzhiyun uint32_t word4; 3704*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name0_SHIFT 0 3705*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name0_MASK 0x000000FF 3706*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name0_WORD word4 3707*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name1_SHIFT 8 3708*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name1_MASK 0x000000FF 3709*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name1_WORD word4 3710*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name2_SHIFT 16 3711*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name2_MASK 0x000000FF 3712*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name2_WORD word4 3713*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name3_SHIFT 24 3714*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name3_MASK 0x000000FF 3715*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name3_WORD word4 3716*4882a593Smuzhiyun #define LPFC_LINK_NUMBER_0 0 3717*4882a593Smuzhiyun #define LPFC_LINK_NUMBER_1 1 3718*4882a593Smuzhiyun #define LPFC_LINK_NUMBER_2 2 3719*4882a593Smuzhiyun #define LPFC_LINK_NUMBER_3 3 3720*4882a593Smuzhiyun } response; 3721*4882a593Smuzhiyun } u; 3722*4882a593Smuzhiyun }; 3723*4882a593Smuzhiyun 3724*4882a593Smuzhiyun /* Mailbox Completion Queue Error Messages */ 3725*4882a593Smuzhiyun #define MB_CQE_STATUS_SUCCESS 0x0 3726*4882a593Smuzhiyun #define MB_CQE_STATUS_INSUFFICIENT_PRIVILEGES 0x1 3727*4882a593Smuzhiyun #define MB_CQE_STATUS_INVALID_PARAMETER 0x2 3728*4882a593Smuzhiyun #define MB_CQE_STATUS_INSUFFICIENT_RESOURCES 0x3 3729*4882a593Smuzhiyun #define MB_CEQ_STATUS_QUEUE_FLUSHING 0x4 3730*4882a593Smuzhiyun #define MB_CQE_STATUS_DMA_FAILED 0x5 3731*4882a593Smuzhiyun 3732*4882a593Smuzhiyun #define LPFC_MBX_WR_CONFIG_MAX_BDE 1 3733*4882a593Smuzhiyun struct lpfc_mbx_wr_object { 3734*4882a593Smuzhiyun struct mbox_header header; 3735*4882a593Smuzhiyun union { 3736*4882a593Smuzhiyun struct { 3737*4882a593Smuzhiyun uint32_t word4; 3738*4882a593Smuzhiyun #define lpfc_wr_object_eof_SHIFT 31 3739*4882a593Smuzhiyun #define lpfc_wr_object_eof_MASK 0x00000001 3740*4882a593Smuzhiyun #define lpfc_wr_object_eof_WORD word4 3741*4882a593Smuzhiyun #define lpfc_wr_object_eas_SHIFT 29 3742*4882a593Smuzhiyun #define lpfc_wr_object_eas_MASK 0x00000001 3743*4882a593Smuzhiyun #define lpfc_wr_object_eas_WORD word4 3744*4882a593Smuzhiyun #define lpfc_wr_object_write_length_SHIFT 0 3745*4882a593Smuzhiyun #define lpfc_wr_object_write_length_MASK 0x00FFFFFF 3746*4882a593Smuzhiyun #define lpfc_wr_object_write_length_WORD word4 3747*4882a593Smuzhiyun uint32_t write_offset; 3748*4882a593Smuzhiyun uint32_t object_name[26]; 3749*4882a593Smuzhiyun uint32_t bde_count; 3750*4882a593Smuzhiyun struct ulp_bde64 bde[LPFC_MBX_WR_CONFIG_MAX_BDE]; 3751*4882a593Smuzhiyun } request; 3752*4882a593Smuzhiyun struct { 3753*4882a593Smuzhiyun uint32_t actual_write_length; 3754*4882a593Smuzhiyun uint32_t word5; 3755*4882a593Smuzhiyun #define lpfc_wr_object_change_status_SHIFT 0 3756*4882a593Smuzhiyun #define lpfc_wr_object_change_status_MASK 0x000000FF 3757*4882a593Smuzhiyun #define lpfc_wr_object_change_status_WORD word5 3758*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_NO_RESET_NEEDED 0x00 3759*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_PHYS_DEV_RESET 0x01 3760*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_FW_RESET 0x02 3761*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_PORT_MIGRATION 0x04 3762*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_PCI_RESET 0x05 3763*4882a593Smuzhiyun #define lpfc_wr_object_csf_SHIFT 8 3764*4882a593Smuzhiyun #define lpfc_wr_object_csf_MASK 0x00000001 3765*4882a593Smuzhiyun #define lpfc_wr_object_csf_WORD word5 3766*4882a593Smuzhiyun } response; 3767*4882a593Smuzhiyun } u; 3768*4882a593Smuzhiyun }; 3769*4882a593Smuzhiyun 3770*4882a593Smuzhiyun /* mailbox queue entry structure */ 3771*4882a593Smuzhiyun struct lpfc_mqe { 3772*4882a593Smuzhiyun uint32_t word0; 3773*4882a593Smuzhiyun #define lpfc_mqe_status_SHIFT 16 3774*4882a593Smuzhiyun #define lpfc_mqe_status_MASK 0x0000FFFF 3775*4882a593Smuzhiyun #define lpfc_mqe_status_WORD word0 3776*4882a593Smuzhiyun #define lpfc_mqe_command_SHIFT 8 3777*4882a593Smuzhiyun #define lpfc_mqe_command_MASK 0x000000FF 3778*4882a593Smuzhiyun #define lpfc_mqe_command_WORD word0 3779*4882a593Smuzhiyun union { 3780*4882a593Smuzhiyun uint32_t mb_words[LPFC_SLI4_MB_WORD_COUNT - 1]; 3781*4882a593Smuzhiyun /* sli4 mailbox commands */ 3782*4882a593Smuzhiyun struct lpfc_mbx_sli4_config sli4_config; 3783*4882a593Smuzhiyun struct lpfc_mbx_init_vfi init_vfi; 3784*4882a593Smuzhiyun struct lpfc_mbx_reg_vfi reg_vfi; 3785*4882a593Smuzhiyun struct lpfc_mbx_reg_vfi unreg_vfi; 3786*4882a593Smuzhiyun struct lpfc_mbx_init_vpi init_vpi; 3787*4882a593Smuzhiyun struct lpfc_mbx_resume_rpi resume_rpi; 3788*4882a593Smuzhiyun struct lpfc_mbx_read_fcf_tbl read_fcf_tbl; 3789*4882a593Smuzhiyun struct lpfc_mbx_add_fcf_tbl_entry add_fcf_entry; 3790*4882a593Smuzhiyun struct lpfc_mbx_del_fcf_tbl_entry del_fcf_entry; 3791*4882a593Smuzhiyun struct lpfc_mbx_redisc_fcf_tbl redisc_fcf_tbl; 3792*4882a593Smuzhiyun struct lpfc_mbx_reg_fcfi reg_fcfi; 3793*4882a593Smuzhiyun struct lpfc_mbx_reg_fcfi_mrq reg_fcfi_mrq; 3794*4882a593Smuzhiyun struct lpfc_mbx_unreg_fcfi unreg_fcfi; 3795*4882a593Smuzhiyun struct lpfc_mbx_mq_create mq_create; 3796*4882a593Smuzhiyun struct lpfc_mbx_mq_create_ext mq_create_ext; 3797*4882a593Smuzhiyun struct lpfc_mbx_eq_create eq_create; 3798*4882a593Smuzhiyun struct lpfc_mbx_modify_eq_delay eq_delay; 3799*4882a593Smuzhiyun struct lpfc_mbx_cq_create cq_create; 3800*4882a593Smuzhiyun struct lpfc_mbx_cq_create_set cq_create_set; 3801*4882a593Smuzhiyun struct lpfc_mbx_wq_create wq_create; 3802*4882a593Smuzhiyun struct lpfc_mbx_rq_create rq_create; 3803*4882a593Smuzhiyun struct lpfc_mbx_rq_create_v2 rq_create_v2; 3804*4882a593Smuzhiyun struct lpfc_mbx_mq_destroy mq_destroy; 3805*4882a593Smuzhiyun struct lpfc_mbx_eq_destroy eq_destroy; 3806*4882a593Smuzhiyun struct lpfc_mbx_cq_destroy cq_destroy; 3807*4882a593Smuzhiyun struct lpfc_mbx_wq_destroy wq_destroy; 3808*4882a593Smuzhiyun struct lpfc_mbx_rq_destroy rq_destroy; 3809*4882a593Smuzhiyun struct lpfc_mbx_get_rsrc_extent_info rsrc_extent_info; 3810*4882a593Smuzhiyun struct lpfc_mbx_alloc_rsrc_extents alloc_rsrc_extents; 3811*4882a593Smuzhiyun struct lpfc_mbx_dealloc_rsrc_extents dealloc_rsrc_extents; 3812*4882a593Smuzhiyun struct lpfc_mbx_post_sgl_pages post_sgl_pages; 3813*4882a593Smuzhiyun struct lpfc_mbx_nembed_cmd nembed_cmd; 3814*4882a593Smuzhiyun struct lpfc_mbx_read_rev read_rev; 3815*4882a593Smuzhiyun struct lpfc_mbx_read_vpi read_vpi; 3816*4882a593Smuzhiyun struct lpfc_mbx_read_config rd_config; 3817*4882a593Smuzhiyun struct lpfc_mbx_request_features req_ftrs; 3818*4882a593Smuzhiyun struct lpfc_mbx_post_hdr_tmpl hdr_tmpl; 3819*4882a593Smuzhiyun struct lpfc_mbx_query_fw_config query_fw_cfg; 3820*4882a593Smuzhiyun struct lpfc_mbx_set_beacon_config beacon_config; 3821*4882a593Smuzhiyun struct lpfc_mbx_get_sli4_parameters get_sli4_parameters; 3822*4882a593Smuzhiyun struct lpfc_mbx_set_link_diag_state link_diag_state; 3823*4882a593Smuzhiyun struct lpfc_mbx_set_link_diag_loopback link_diag_loopback; 3824*4882a593Smuzhiyun struct lpfc_mbx_run_link_diag_test link_diag_test; 3825*4882a593Smuzhiyun struct lpfc_mbx_get_func_cfg get_func_cfg; 3826*4882a593Smuzhiyun struct lpfc_mbx_get_prof_cfg get_prof_cfg; 3827*4882a593Smuzhiyun struct lpfc_mbx_wr_object wr_object; 3828*4882a593Smuzhiyun struct lpfc_mbx_get_port_name get_port_name; 3829*4882a593Smuzhiyun struct lpfc_mbx_set_feature set_feature; 3830*4882a593Smuzhiyun struct lpfc_mbx_memory_dump_type3 mem_dump_type3; 3831*4882a593Smuzhiyun struct lpfc_mbx_set_host_data set_host_data; 3832*4882a593Smuzhiyun struct lpfc_mbx_set_trunk_mode set_trunk_mode; 3833*4882a593Smuzhiyun struct lpfc_mbx_nop nop; 3834*4882a593Smuzhiyun struct lpfc_mbx_set_ras_fwlog ras_fwlog; 3835*4882a593Smuzhiyun } un; 3836*4882a593Smuzhiyun }; 3837*4882a593Smuzhiyun 3838*4882a593Smuzhiyun struct lpfc_mcqe { 3839*4882a593Smuzhiyun uint32_t word0; 3840*4882a593Smuzhiyun #define lpfc_mcqe_status_SHIFT 0 3841*4882a593Smuzhiyun #define lpfc_mcqe_status_MASK 0x0000FFFF 3842*4882a593Smuzhiyun #define lpfc_mcqe_status_WORD word0 3843*4882a593Smuzhiyun #define lpfc_mcqe_ext_status_SHIFT 16 3844*4882a593Smuzhiyun #define lpfc_mcqe_ext_status_MASK 0x0000FFFF 3845*4882a593Smuzhiyun #define lpfc_mcqe_ext_status_WORD word0 3846*4882a593Smuzhiyun uint32_t mcqe_tag0; 3847*4882a593Smuzhiyun uint32_t mcqe_tag1; 3848*4882a593Smuzhiyun uint32_t trailer; 3849*4882a593Smuzhiyun #define lpfc_trailer_valid_SHIFT 31 3850*4882a593Smuzhiyun #define lpfc_trailer_valid_MASK 0x00000001 3851*4882a593Smuzhiyun #define lpfc_trailer_valid_WORD trailer 3852*4882a593Smuzhiyun #define lpfc_trailer_async_SHIFT 30 3853*4882a593Smuzhiyun #define lpfc_trailer_async_MASK 0x00000001 3854*4882a593Smuzhiyun #define lpfc_trailer_async_WORD trailer 3855*4882a593Smuzhiyun #define lpfc_trailer_hpi_SHIFT 29 3856*4882a593Smuzhiyun #define lpfc_trailer_hpi_MASK 0x00000001 3857*4882a593Smuzhiyun #define lpfc_trailer_hpi_WORD trailer 3858*4882a593Smuzhiyun #define lpfc_trailer_completed_SHIFT 28 3859*4882a593Smuzhiyun #define lpfc_trailer_completed_MASK 0x00000001 3860*4882a593Smuzhiyun #define lpfc_trailer_completed_WORD trailer 3861*4882a593Smuzhiyun #define lpfc_trailer_consumed_SHIFT 27 3862*4882a593Smuzhiyun #define lpfc_trailer_consumed_MASK 0x00000001 3863*4882a593Smuzhiyun #define lpfc_trailer_consumed_WORD trailer 3864*4882a593Smuzhiyun #define lpfc_trailer_type_SHIFT 16 3865*4882a593Smuzhiyun #define lpfc_trailer_type_MASK 0x000000FF 3866*4882a593Smuzhiyun #define lpfc_trailer_type_WORD trailer 3867*4882a593Smuzhiyun #define lpfc_trailer_code_SHIFT 8 3868*4882a593Smuzhiyun #define lpfc_trailer_code_MASK 0x000000FF 3869*4882a593Smuzhiyun #define lpfc_trailer_code_WORD trailer 3870*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_LINK 0x1 3871*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_FCOE 0x2 3872*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_DCBX 0x3 3873*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_GRP5 0x5 3874*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_FC 0x10 3875*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_SLI 0x11 3876*4882a593Smuzhiyun }; 3877*4882a593Smuzhiyun 3878*4882a593Smuzhiyun struct lpfc_acqe_link { 3879*4882a593Smuzhiyun uint32_t word0; 3880*4882a593Smuzhiyun #define lpfc_acqe_link_speed_SHIFT 24 3881*4882a593Smuzhiyun #define lpfc_acqe_link_speed_MASK 0x000000FF 3882*4882a593Smuzhiyun #define lpfc_acqe_link_speed_WORD word0 3883*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_ZERO 0x0 3884*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_10MBPS 0x1 3885*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_100MBPS 0x2 3886*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_1GBPS 0x3 3887*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_10GBPS 0x4 3888*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_20GBPS 0x5 3889*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_25GBPS 0x6 3890*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_40GBPS 0x7 3891*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_100GBPS 0x8 3892*4882a593Smuzhiyun #define lpfc_acqe_link_duplex_SHIFT 16 3893*4882a593Smuzhiyun #define lpfc_acqe_link_duplex_MASK 0x000000FF 3894*4882a593Smuzhiyun #define lpfc_acqe_link_duplex_WORD word0 3895*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_DUPLEX_NONE 0x0 3896*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_DUPLEX_HALF 0x1 3897*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_DUPLEX_FULL 0x2 3898*4882a593Smuzhiyun #define lpfc_acqe_link_status_SHIFT 8 3899*4882a593Smuzhiyun #define lpfc_acqe_link_status_MASK 0x000000FF 3900*4882a593Smuzhiyun #define lpfc_acqe_link_status_WORD word0 3901*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_STATUS_DOWN 0x0 3902*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_STATUS_UP 0x1 3903*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_STATUS_LOGICAL_DOWN 0x2 3904*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_STATUS_LOGICAL_UP 0x3 3905*4882a593Smuzhiyun #define lpfc_acqe_link_type_SHIFT 6 3906*4882a593Smuzhiyun #define lpfc_acqe_link_type_MASK 0x00000003 3907*4882a593Smuzhiyun #define lpfc_acqe_link_type_WORD word0 3908*4882a593Smuzhiyun #define lpfc_acqe_link_number_SHIFT 0 3909*4882a593Smuzhiyun #define lpfc_acqe_link_number_MASK 0x0000003F 3910*4882a593Smuzhiyun #define lpfc_acqe_link_number_WORD word0 3911*4882a593Smuzhiyun uint32_t word1; 3912*4882a593Smuzhiyun #define lpfc_acqe_link_fault_SHIFT 0 3913*4882a593Smuzhiyun #define lpfc_acqe_link_fault_MASK 0x000000FF 3914*4882a593Smuzhiyun #define lpfc_acqe_link_fault_WORD word1 3915*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_FAULT_NONE 0x0 3916*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_FAULT_LOCAL 0x1 3917*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_FAULT_REMOTE 0x2 3918*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_FAULT_LR_LRR 0x3 3919*4882a593Smuzhiyun #define lpfc_acqe_logical_link_speed_SHIFT 16 3920*4882a593Smuzhiyun #define lpfc_acqe_logical_link_speed_MASK 0x0000FFFF 3921*4882a593Smuzhiyun #define lpfc_acqe_logical_link_speed_WORD word1 3922*4882a593Smuzhiyun uint32_t event_tag; 3923*4882a593Smuzhiyun uint32_t trailer; 3924*4882a593Smuzhiyun #define LPFC_LINK_EVENT_TYPE_PHYSICAL 0x0 3925*4882a593Smuzhiyun #define LPFC_LINK_EVENT_TYPE_VIRTUAL 0x1 3926*4882a593Smuzhiyun }; 3927*4882a593Smuzhiyun 3928*4882a593Smuzhiyun struct lpfc_acqe_fip { 3929*4882a593Smuzhiyun uint32_t index; 3930*4882a593Smuzhiyun uint32_t word1; 3931*4882a593Smuzhiyun #define lpfc_acqe_fip_fcf_count_SHIFT 0 3932*4882a593Smuzhiyun #define lpfc_acqe_fip_fcf_count_MASK 0x0000FFFF 3933*4882a593Smuzhiyun #define lpfc_acqe_fip_fcf_count_WORD word1 3934*4882a593Smuzhiyun #define lpfc_acqe_fip_event_type_SHIFT 16 3935*4882a593Smuzhiyun #define lpfc_acqe_fip_event_type_MASK 0x0000FFFF 3936*4882a593Smuzhiyun #define lpfc_acqe_fip_event_type_WORD word1 3937*4882a593Smuzhiyun uint32_t event_tag; 3938*4882a593Smuzhiyun uint32_t trailer; 3939*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_NEW_FCF 0x1 3940*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_FCF_TABLE_FULL 0x2 3941*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_FCF_DEAD 0x3 3942*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_CVL 0x4 3943*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_FCF_PARAM_MOD 0x5 3944*4882a593Smuzhiyun }; 3945*4882a593Smuzhiyun 3946*4882a593Smuzhiyun struct lpfc_acqe_dcbx { 3947*4882a593Smuzhiyun uint32_t tlv_ttl; 3948*4882a593Smuzhiyun uint32_t reserved; 3949*4882a593Smuzhiyun uint32_t event_tag; 3950*4882a593Smuzhiyun uint32_t trailer; 3951*4882a593Smuzhiyun }; 3952*4882a593Smuzhiyun 3953*4882a593Smuzhiyun struct lpfc_acqe_grp5 { 3954*4882a593Smuzhiyun uint32_t word0; 3955*4882a593Smuzhiyun #define lpfc_acqe_grp5_type_SHIFT 6 3956*4882a593Smuzhiyun #define lpfc_acqe_grp5_type_MASK 0x00000003 3957*4882a593Smuzhiyun #define lpfc_acqe_grp5_type_WORD word0 3958*4882a593Smuzhiyun #define lpfc_acqe_grp5_number_SHIFT 0 3959*4882a593Smuzhiyun #define lpfc_acqe_grp5_number_MASK 0x0000003F 3960*4882a593Smuzhiyun #define lpfc_acqe_grp5_number_WORD word0 3961*4882a593Smuzhiyun uint32_t word1; 3962*4882a593Smuzhiyun #define lpfc_acqe_grp5_llink_spd_SHIFT 16 3963*4882a593Smuzhiyun #define lpfc_acqe_grp5_llink_spd_MASK 0x0000FFFF 3964*4882a593Smuzhiyun #define lpfc_acqe_grp5_llink_spd_WORD word1 3965*4882a593Smuzhiyun uint32_t event_tag; 3966*4882a593Smuzhiyun uint32_t trailer; 3967*4882a593Smuzhiyun }; 3968*4882a593Smuzhiyun 3969*4882a593Smuzhiyun extern const char *const trunk_errmsg[]; 3970*4882a593Smuzhiyun 3971*4882a593Smuzhiyun struct lpfc_acqe_fc_la { 3972*4882a593Smuzhiyun uint32_t word0; 3973*4882a593Smuzhiyun #define lpfc_acqe_fc_la_speed_SHIFT 24 3974*4882a593Smuzhiyun #define lpfc_acqe_fc_la_speed_MASK 0x000000FF 3975*4882a593Smuzhiyun #define lpfc_acqe_fc_la_speed_WORD word0 3976*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_UNKNOWN 0x0 3977*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_1G 0x1 3978*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_2G 0x2 3979*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_4G 0x4 3980*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_8G 0x8 3981*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_10G 0xA 3982*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_16G 0x10 3983*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_32G 0x20 3984*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_64G 0x21 3985*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_128G 0x22 3986*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_256G 0x23 3987*4882a593Smuzhiyun #define lpfc_acqe_fc_la_topology_SHIFT 16 3988*4882a593Smuzhiyun #define lpfc_acqe_fc_la_topology_MASK 0x000000FF 3989*4882a593Smuzhiyun #define lpfc_acqe_fc_la_topology_WORD word0 3990*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_UNKOWN 0x0 3991*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_P2P 0x1 3992*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_FCAL 0x2 3993*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_INTERNAL_LOOP 0x3 3994*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_SERDES_LOOP 0x4 3995*4882a593Smuzhiyun #define lpfc_acqe_fc_la_att_type_SHIFT 8 3996*4882a593Smuzhiyun #define lpfc_acqe_fc_la_att_type_MASK 0x000000FF 3997*4882a593Smuzhiyun #define lpfc_acqe_fc_la_att_type_WORD word0 3998*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_LINK_UP 0x1 3999*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_LINK_DOWN 0x2 4000*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_NO_HARD_ALPA 0x3 4001*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_MDS_LINK_DOWN 0x4 4002*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_MDS_LOOPBACK 0x5 4003*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_UNEXP_WWPN 0x6 4004*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_TRUNKING_EVENT 0x7 4005*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_type_SHIFT 6 4006*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_type_MASK 0x00000003 4007*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_type_WORD word0 4008*4882a593Smuzhiyun #define LPFC_LINK_TYPE_ETHERNET 0x0 4009*4882a593Smuzhiyun #define LPFC_LINK_TYPE_FC 0x1 4010*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_number_SHIFT 0 4011*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_number_MASK 0x0000003F 4012*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_number_WORD word0 4013*4882a593Smuzhiyun 4014*4882a593Smuzhiyun /* Attention Type is 0x07 (Trunking Event) word0 */ 4015*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port0_SHIFT 16 4016*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port0_MASK 0x0000001 4017*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port0_WORD word0 4018*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port1_SHIFT 17 4019*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port1_MASK 0x0000001 4020*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port1_WORD word0 4021*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port2_SHIFT 18 4022*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port2_MASK 0x0000001 4023*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port2_WORD word0 4024*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port3_SHIFT 19 4025*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port3_MASK 0x0000001 4026*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port3_WORD word0 4027*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port0_SHIFT 20 4028*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port0_MASK 0x0000001 4029*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port0_WORD word0 4030*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port1_SHIFT 21 4031*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port1_MASK 0x0000001 4032*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port1_WORD word0 4033*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port2_SHIFT 22 4034*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port2_MASK 0x0000001 4035*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port2_WORD word0 4036*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port3_SHIFT 23 4037*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port3_MASK 0x0000001 4038*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port3_WORD word0 4039*4882a593Smuzhiyun uint32_t word1; 4040*4882a593Smuzhiyun #define lpfc_acqe_fc_la_llink_spd_SHIFT 16 4041*4882a593Smuzhiyun #define lpfc_acqe_fc_la_llink_spd_MASK 0x0000FFFF 4042*4882a593Smuzhiyun #define lpfc_acqe_fc_la_llink_spd_WORD word1 4043*4882a593Smuzhiyun #define lpfc_acqe_fc_la_fault_SHIFT 0 4044*4882a593Smuzhiyun #define lpfc_acqe_fc_la_fault_MASK 0x000000FF 4045*4882a593Smuzhiyun #define lpfc_acqe_fc_la_fault_WORD word1 4046*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_fault_SHIFT 0 4047*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_fault_MASK 0x0000000F 4048*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_fault_WORD word1 4049*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_linkmask_SHIFT 4 4050*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_linkmask_MASK 0x000000F 4051*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_linkmask_WORD word1 4052*4882a593Smuzhiyun #define LPFC_FC_LA_FAULT_NONE 0x0 4053*4882a593Smuzhiyun #define LPFC_FC_LA_FAULT_LOCAL 0x1 4054*4882a593Smuzhiyun #define LPFC_FC_LA_FAULT_REMOTE 0x2 4055*4882a593Smuzhiyun uint32_t event_tag; 4056*4882a593Smuzhiyun uint32_t trailer; 4057*4882a593Smuzhiyun #define LPFC_FC_LA_EVENT_TYPE_FC_LINK 0x1 4058*4882a593Smuzhiyun #define LPFC_FC_LA_EVENT_TYPE_SHARED_LINK 0x2 4059*4882a593Smuzhiyun }; 4060*4882a593Smuzhiyun 4061*4882a593Smuzhiyun struct lpfc_acqe_misconfigured_event { 4062*4882a593Smuzhiyun struct { 4063*4882a593Smuzhiyun uint32_t word0; 4064*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_state_SHIFT 0 4065*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_state_MASK 0x000000FF 4066*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_state_WORD word0 4067*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_state_SHIFT 8 4068*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_state_MASK 0x000000FF 4069*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_state_WORD word0 4070*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_state_SHIFT 16 4071*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_state_MASK 0x000000FF 4072*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_state_WORD word0 4073*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_state_SHIFT 24 4074*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_state_MASK 0x000000FF 4075*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_state_WORD word0 4076*4882a593Smuzhiyun uint32_t word1; 4077*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_op_SHIFT 0 4078*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_op_MASK 0x00000001 4079*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_op_WORD word1 4080*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_severity_SHIFT 1 4081*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_severity_MASK 0x00000003 4082*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_severity_WORD word1 4083*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_op_SHIFT 8 4084*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_op_MASK 0x00000001 4085*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_op_WORD word1 4086*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_severity_SHIFT 9 4087*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_severity_MASK 0x00000003 4088*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_severity_WORD word1 4089*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_op_SHIFT 16 4090*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_op_MASK 0x00000001 4091*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_op_WORD word1 4092*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_severity_SHIFT 17 4093*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_severity_MASK 0x00000003 4094*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_severity_WORD word1 4095*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_op_SHIFT 24 4096*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_op_MASK 0x00000001 4097*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_op_WORD word1 4098*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_severity_SHIFT 25 4099*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_severity_MASK 0x00000003 4100*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_severity_WORD word1 4101*4882a593Smuzhiyun } theEvent; 4102*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_VALID 0x00 4103*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_NOT_PRESENT 0x01 4104*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_WRONG_TYPE 0x02 4105*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_UNSUPPORTED 0x03 4106*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_UNQUALIFIED 0x04 4107*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_UNCERTIFIED 0x05 4108*4882a593Smuzhiyun }; 4109*4882a593Smuzhiyun 4110*4882a593Smuzhiyun struct lpfc_acqe_sli { 4111*4882a593Smuzhiyun uint32_t event_data1; 4112*4882a593Smuzhiyun uint32_t event_data2; 4113*4882a593Smuzhiyun uint32_t reserved; 4114*4882a593Smuzhiyun uint32_t trailer; 4115*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_PORT_ERROR 0x1 4116*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_OVER_TEMP 0x2 4117*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_NORM_TEMP 0x3 4118*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_NVLOG_POST 0x4 4119*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_DIAG_DUMP 0x5 4120*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_MISCONFIGURED 0x9 4121*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_REMOTE_DPORT 0xA 4122*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_MISCONF_FAWWN 0xF 4123*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_EEPROM_FAILURE 0x10 4124*4882a593Smuzhiyun }; 4125*4882a593Smuzhiyun 4126*4882a593Smuzhiyun /* 4127*4882a593Smuzhiyun * Define the bootstrap mailbox (bmbx) region used to communicate 4128*4882a593Smuzhiyun * mailbox command between the host and port. The mailbox consists 4129*4882a593Smuzhiyun * of a payload area of 256 bytes and a completion queue of length 4130*4882a593Smuzhiyun * 16 bytes. 4131*4882a593Smuzhiyun */ 4132*4882a593Smuzhiyun struct lpfc_bmbx_create { 4133*4882a593Smuzhiyun struct lpfc_mqe mqe; 4134*4882a593Smuzhiyun struct lpfc_mcqe mcqe; 4135*4882a593Smuzhiyun }; 4136*4882a593Smuzhiyun 4137*4882a593Smuzhiyun #define SGL_ALIGN_SZ 64 4138*4882a593Smuzhiyun #define SGL_PAGE_SIZE 4096 4139*4882a593Smuzhiyun /* align SGL addr on a size boundary - adjust address up */ 4140*4882a593Smuzhiyun #define NO_XRI 0xffff 4141*4882a593Smuzhiyun 4142*4882a593Smuzhiyun struct wqe_common { 4143*4882a593Smuzhiyun uint32_t word6; 4144*4882a593Smuzhiyun #define wqe_xri_tag_SHIFT 0 4145*4882a593Smuzhiyun #define wqe_xri_tag_MASK 0x0000FFFF 4146*4882a593Smuzhiyun #define wqe_xri_tag_WORD word6 4147*4882a593Smuzhiyun #define wqe_ctxt_tag_SHIFT 16 4148*4882a593Smuzhiyun #define wqe_ctxt_tag_MASK 0x0000FFFF 4149*4882a593Smuzhiyun #define wqe_ctxt_tag_WORD word6 4150*4882a593Smuzhiyun uint32_t word7; 4151*4882a593Smuzhiyun #define wqe_dif_SHIFT 0 4152*4882a593Smuzhiyun #define wqe_dif_MASK 0x00000003 4153*4882a593Smuzhiyun #define wqe_dif_WORD word7 4154*4882a593Smuzhiyun #define LPFC_WQE_DIF_PASSTHRU 1 4155*4882a593Smuzhiyun #define LPFC_WQE_DIF_STRIP 2 4156*4882a593Smuzhiyun #define LPFC_WQE_DIF_INSERT 3 4157*4882a593Smuzhiyun #define wqe_ct_SHIFT 2 4158*4882a593Smuzhiyun #define wqe_ct_MASK 0x00000003 4159*4882a593Smuzhiyun #define wqe_ct_WORD word7 4160*4882a593Smuzhiyun #define wqe_status_SHIFT 4 4161*4882a593Smuzhiyun #define wqe_status_MASK 0x0000000f 4162*4882a593Smuzhiyun #define wqe_status_WORD word7 4163*4882a593Smuzhiyun #define wqe_cmnd_SHIFT 8 4164*4882a593Smuzhiyun #define wqe_cmnd_MASK 0x000000ff 4165*4882a593Smuzhiyun #define wqe_cmnd_WORD word7 4166*4882a593Smuzhiyun #define wqe_class_SHIFT 16 4167*4882a593Smuzhiyun #define wqe_class_MASK 0x00000007 4168*4882a593Smuzhiyun #define wqe_class_WORD word7 4169*4882a593Smuzhiyun #define wqe_ar_SHIFT 19 4170*4882a593Smuzhiyun #define wqe_ar_MASK 0x00000001 4171*4882a593Smuzhiyun #define wqe_ar_WORD word7 4172*4882a593Smuzhiyun #define wqe_ag_SHIFT wqe_ar_SHIFT 4173*4882a593Smuzhiyun #define wqe_ag_MASK wqe_ar_MASK 4174*4882a593Smuzhiyun #define wqe_ag_WORD wqe_ar_WORD 4175*4882a593Smuzhiyun #define wqe_pu_SHIFT 20 4176*4882a593Smuzhiyun #define wqe_pu_MASK 0x00000003 4177*4882a593Smuzhiyun #define wqe_pu_WORD word7 4178*4882a593Smuzhiyun #define wqe_erp_SHIFT 22 4179*4882a593Smuzhiyun #define wqe_erp_MASK 0x00000001 4180*4882a593Smuzhiyun #define wqe_erp_WORD word7 4181*4882a593Smuzhiyun #define wqe_conf_SHIFT wqe_erp_SHIFT 4182*4882a593Smuzhiyun #define wqe_conf_MASK wqe_erp_MASK 4183*4882a593Smuzhiyun #define wqe_conf_WORD wqe_erp_WORD 4184*4882a593Smuzhiyun #define wqe_lnk_SHIFT 23 4185*4882a593Smuzhiyun #define wqe_lnk_MASK 0x00000001 4186*4882a593Smuzhiyun #define wqe_lnk_WORD word7 4187*4882a593Smuzhiyun #define wqe_tmo_SHIFT 24 4188*4882a593Smuzhiyun #define wqe_tmo_MASK 0x000000ff 4189*4882a593Smuzhiyun #define wqe_tmo_WORD word7 4190*4882a593Smuzhiyun uint32_t abort_tag; /* word 8 in WQE */ 4191*4882a593Smuzhiyun uint32_t word9; 4192*4882a593Smuzhiyun #define wqe_reqtag_SHIFT 0 4193*4882a593Smuzhiyun #define wqe_reqtag_MASK 0x0000FFFF 4194*4882a593Smuzhiyun #define wqe_reqtag_WORD word9 4195*4882a593Smuzhiyun #define wqe_temp_rpi_SHIFT 16 4196*4882a593Smuzhiyun #define wqe_temp_rpi_MASK 0x0000FFFF 4197*4882a593Smuzhiyun #define wqe_temp_rpi_WORD word9 4198*4882a593Smuzhiyun #define wqe_rcvoxid_SHIFT 16 4199*4882a593Smuzhiyun #define wqe_rcvoxid_MASK 0x0000FFFF 4200*4882a593Smuzhiyun #define wqe_rcvoxid_WORD word9 4201*4882a593Smuzhiyun #define wqe_sof_SHIFT 24 4202*4882a593Smuzhiyun #define wqe_sof_MASK 0x000000FF 4203*4882a593Smuzhiyun #define wqe_sof_WORD word9 4204*4882a593Smuzhiyun #define wqe_eof_SHIFT 16 4205*4882a593Smuzhiyun #define wqe_eof_MASK 0x000000FF 4206*4882a593Smuzhiyun #define wqe_eof_WORD word9 4207*4882a593Smuzhiyun uint32_t word10; 4208*4882a593Smuzhiyun #define wqe_ebde_cnt_SHIFT 0 4209*4882a593Smuzhiyun #define wqe_ebde_cnt_MASK 0x0000000f 4210*4882a593Smuzhiyun #define wqe_ebde_cnt_WORD word10 4211*4882a593Smuzhiyun #define wqe_nvme_SHIFT 4 4212*4882a593Smuzhiyun #define wqe_nvme_MASK 0x00000001 4213*4882a593Smuzhiyun #define wqe_nvme_WORD word10 4214*4882a593Smuzhiyun #define wqe_oas_SHIFT 6 4215*4882a593Smuzhiyun #define wqe_oas_MASK 0x00000001 4216*4882a593Smuzhiyun #define wqe_oas_WORD word10 4217*4882a593Smuzhiyun #define wqe_lenloc_SHIFT 7 4218*4882a593Smuzhiyun #define wqe_lenloc_MASK 0x00000003 4219*4882a593Smuzhiyun #define wqe_lenloc_WORD word10 4220*4882a593Smuzhiyun #define LPFC_WQE_LENLOC_NONE 0 4221*4882a593Smuzhiyun #define LPFC_WQE_LENLOC_WORD3 1 4222*4882a593Smuzhiyun #define LPFC_WQE_LENLOC_WORD12 2 4223*4882a593Smuzhiyun #define LPFC_WQE_LENLOC_WORD4 3 4224*4882a593Smuzhiyun #define wqe_qosd_SHIFT 9 4225*4882a593Smuzhiyun #define wqe_qosd_MASK 0x00000001 4226*4882a593Smuzhiyun #define wqe_qosd_WORD word10 4227*4882a593Smuzhiyun #define wqe_xbl_SHIFT 11 4228*4882a593Smuzhiyun #define wqe_xbl_MASK 0x00000001 4229*4882a593Smuzhiyun #define wqe_xbl_WORD word10 4230*4882a593Smuzhiyun #define wqe_iod_SHIFT 13 4231*4882a593Smuzhiyun #define wqe_iod_MASK 0x00000001 4232*4882a593Smuzhiyun #define wqe_iod_WORD word10 4233*4882a593Smuzhiyun #define LPFC_WQE_IOD_NONE 0 4234*4882a593Smuzhiyun #define LPFC_WQE_IOD_WRITE 0 4235*4882a593Smuzhiyun #define LPFC_WQE_IOD_READ 1 4236*4882a593Smuzhiyun #define wqe_dbde_SHIFT 14 4237*4882a593Smuzhiyun #define wqe_dbde_MASK 0x00000001 4238*4882a593Smuzhiyun #define wqe_dbde_WORD word10 4239*4882a593Smuzhiyun #define wqe_wqes_SHIFT 15 4240*4882a593Smuzhiyun #define wqe_wqes_MASK 0x00000001 4241*4882a593Smuzhiyun #define wqe_wqes_WORD word10 4242*4882a593Smuzhiyun /* Note that this field overlaps above fields */ 4243*4882a593Smuzhiyun #define wqe_wqid_SHIFT 1 4244*4882a593Smuzhiyun #define wqe_wqid_MASK 0x00007fff 4245*4882a593Smuzhiyun #define wqe_wqid_WORD word10 4246*4882a593Smuzhiyun #define wqe_pri_SHIFT 16 4247*4882a593Smuzhiyun #define wqe_pri_MASK 0x00000007 4248*4882a593Smuzhiyun #define wqe_pri_WORD word10 4249*4882a593Smuzhiyun #define wqe_pv_SHIFT 19 4250*4882a593Smuzhiyun #define wqe_pv_MASK 0x00000001 4251*4882a593Smuzhiyun #define wqe_pv_WORD word10 4252*4882a593Smuzhiyun #define wqe_xc_SHIFT 21 4253*4882a593Smuzhiyun #define wqe_xc_MASK 0x00000001 4254*4882a593Smuzhiyun #define wqe_xc_WORD word10 4255*4882a593Smuzhiyun #define wqe_sr_SHIFT 22 4256*4882a593Smuzhiyun #define wqe_sr_MASK 0x00000001 4257*4882a593Smuzhiyun #define wqe_sr_WORD word10 4258*4882a593Smuzhiyun #define wqe_ccpe_SHIFT 23 4259*4882a593Smuzhiyun #define wqe_ccpe_MASK 0x00000001 4260*4882a593Smuzhiyun #define wqe_ccpe_WORD word10 4261*4882a593Smuzhiyun #define wqe_ccp_SHIFT 24 4262*4882a593Smuzhiyun #define wqe_ccp_MASK 0x000000ff 4263*4882a593Smuzhiyun #define wqe_ccp_WORD word10 4264*4882a593Smuzhiyun uint32_t word11; 4265*4882a593Smuzhiyun #define wqe_cmd_type_SHIFT 0 4266*4882a593Smuzhiyun #define wqe_cmd_type_MASK 0x0000000f 4267*4882a593Smuzhiyun #define wqe_cmd_type_WORD word11 4268*4882a593Smuzhiyun #define wqe_els_id_SHIFT 4 4269*4882a593Smuzhiyun #define wqe_els_id_MASK 0x00000003 4270*4882a593Smuzhiyun #define wqe_els_id_WORD word11 4271*4882a593Smuzhiyun #define LPFC_ELS_ID_FLOGI 3 4272*4882a593Smuzhiyun #define LPFC_ELS_ID_FDISC 2 4273*4882a593Smuzhiyun #define LPFC_ELS_ID_LOGO 1 4274*4882a593Smuzhiyun #define LPFC_ELS_ID_DEFAULT 0 4275*4882a593Smuzhiyun #define wqe_irsp_SHIFT 4 4276*4882a593Smuzhiyun #define wqe_irsp_MASK 0x00000001 4277*4882a593Smuzhiyun #define wqe_irsp_WORD word11 4278*4882a593Smuzhiyun #define wqe_pbde_SHIFT 5 4279*4882a593Smuzhiyun #define wqe_pbde_MASK 0x00000001 4280*4882a593Smuzhiyun #define wqe_pbde_WORD word11 4281*4882a593Smuzhiyun #define wqe_sup_SHIFT 6 4282*4882a593Smuzhiyun #define wqe_sup_MASK 0x00000001 4283*4882a593Smuzhiyun #define wqe_sup_WORD word11 4284*4882a593Smuzhiyun #define wqe_ffrq_SHIFT 6 4285*4882a593Smuzhiyun #define wqe_ffrq_MASK 0x00000001 4286*4882a593Smuzhiyun #define wqe_ffrq_WORD word11 4287*4882a593Smuzhiyun #define wqe_wqec_SHIFT 7 4288*4882a593Smuzhiyun #define wqe_wqec_MASK 0x00000001 4289*4882a593Smuzhiyun #define wqe_wqec_WORD word11 4290*4882a593Smuzhiyun #define wqe_irsplen_SHIFT 8 4291*4882a593Smuzhiyun #define wqe_irsplen_MASK 0x0000000f 4292*4882a593Smuzhiyun #define wqe_irsplen_WORD word11 4293*4882a593Smuzhiyun #define wqe_cqid_SHIFT 16 4294*4882a593Smuzhiyun #define wqe_cqid_MASK 0x0000ffff 4295*4882a593Smuzhiyun #define wqe_cqid_WORD word11 4296*4882a593Smuzhiyun #define LPFC_WQE_CQ_ID_DEFAULT 0xffff 4297*4882a593Smuzhiyun }; 4298*4882a593Smuzhiyun 4299*4882a593Smuzhiyun struct wqe_did { 4300*4882a593Smuzhiyun uint32_t word5; 4301*4882a593Smuzhiyun #define wqe_els_did_SHIFT 0 4302*4882a593Smuzhiyun #define wqe_els_did_MASK 0x00FFFFFF 4303*4882a593Smuzhiyun #define wqe_els_did_WORD word5 4304*4882a593Smuzhiyun #define wqe_xmit_bls_pt_SHIFT 28 4305*4882a593Smuzhiyun #define wqe_xmit_bls_pt_MASK 0x00000003 4306*4882a593Smuzhiyun #define wqe_xmit_bls_pt_WORD word5 4307*4882a593Smuzhiyun #define wqe_xmit_bls_ar_SHIFT 30 4308*4882a593Smuzhiyun #define wqe_xmit_bls_ar_MASK 0x00000001 4309*4882a593Smuzhiyun #define wqe_xmit_bls_ar_WORD word5 4310*4882a593Smuzhiyun #define wqe_xmit_bls_xo_SHIFT 31 4311*4882a593Smuzhiyun #define wqe_xmit_bls_xo_MASK 0x00000001 4312*4882a593Smuzhiyun #define wqe_xmit_bls_xo_WORD word5 4313*4882a593Smuzhiyun }; 4314*4882a593Smuzhiyun 4315*4882a593Smuzhiyun struct lpfc_wqe_generic{ 4316*4882a593Smuzhiyun struct ulp_bde64 bde; 4317*4882a593Smuzhiyun uint32_t word3; 4318*4882a593Smuzhiyun uint32_t word4; 4319*4882a593Smuzhiyun uint32_t word5; 4320*4882a593Smuzhiyun struct wqe_common wqe_com; 4321*4882a593Smuzhiyun uint32_t payload[4]; 4322*4882a593Smuzhiyun }; 4323*4882a593Smuzhiyun 4324*4882a593Smuzhiyun struct els_request64_wqe { 4325*4882a593Smuzhiyun struct ulp_bde64 bde; 4326*4882a593Smuzhiyun uint32_t payload_len; 4327*4882a593Smuzhiyun uint32_t word4; 4328*4882a593Smuzhiyun #define els_req64_sid_SHIFT 0 4329*4882a593Smuzhiyun #define els_req64_sid_MASK 0x00FFFFFF 4330*4882a593Smuzhiyun #define els_req64_sid_WORD word4 4331*4882a593Smuzhiyun #define els_req64_sp_SHIFT 24 4332*4882a593Smuzhiyun #define els_req64_sp_MASK 0x00000001 4333*4882a593Smuzhiyun #define els_req64_sp_WORD word4 4334*4882a593Smuzhiyun #define els_req64_vf_SHIFT 25 4335*4882a593Smuzhiyun #define els_req64_vf_MASK 0x00000001 4336*4882a593Smuzhiyun #define els_req64_vf_WORD word4 4337*4882a593Smuzhiyun struct wqe_did wqe_dest; 4338*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4339*4882a593Smuzhiyun uint32_t word12; 4340*4882a593Smuzhiyun #define els_req64_vfid_SHIFT 1 4341*4882a593Smuzhiyun #define els_req64_vfid_MASK 0x00000FFF 4342*4882a593Smuzhiyun #define els_req64_vfid_WORD word12 4343*4882a593Smuzhiyun #define els_req64_pri_SHIFT 13 4344*4882a593Smuzhiyun #define els_req64_pri_MASK 0x00000007 4345*4882a593Smuzhiyun #define els_req64_pri_WORD word12 4346*4882a593Smuzhiyun uint32_t word13; 4347*4882a593Smuzhiyun #define els_req64_hopcnt_SHIFT 24 4348*4882a593Smuzhiyun #define els_req64_hopcnt_MASK 0x000000ff 4349*4882a593Smuzhiyun #define els_req64_hopcnt_WORD word13 4350*4882a593Smuzhiyun uint32_t word14; 4351*4882a593Smuzhiyun uint32_t max_response_payload_len; 4352*4882a593Smuzhiyun }; 4353*4882a593Smuzhiyun 4354*4882a593Smuzhiyun struct xmit_els_rsp64_wqe { 4355*4882a593Smuzhiyun struct ulp_bde64 bde; 4356*4882a593Smuzhiyun uint32_t response_payload_len; 4357*4882a593Smuzhiyun uint32_t word4; 4358*4882a593Smuzhiyun #define els_rsp64_sid_SHIFT 0 4359*4882a593Smuzhiyun #define els_rsp64_sid_MASK 0x00FFFFFF 4360*4882a593Smuzhiyun #define els_rsp64_sid_WORD word4 4361*4882a593Smuzhiyun #define els_rsp64_sp_SHIFT 24 4362*4882a593Smuzhiyun #define els_rsp64_sp_MASK 0x00000001 4363*4882a593Smuzhiyun #define els_rsp64_sp_WORD word4 4364*4882a593Smuzhiyun struct wqe_did wqe_dest; 4365*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4366*4882a593Smuzhiyun uint32_t word12; 4367*4882a593Smuzhiyun #define wqe_rsp_temp_rpi_SHIFT 0 4368*4882a593Smuzhiyun #define wqe_rsp_temp_rpi_MASK 0x0000FFFF 4369*4882a593Smuzhiyun #define wqe_rsp_temp_rpi_WORD word12 4370*4882a593Smuzhiyun uint32_t rsvd_13_15[3]; 4371*4882a593Smuzhiyun }; 4372*4882a593Smuzhiyun 4373*4882a593Smuzhiyun struct xmit_bls_rsp64_wqe { 4374*4882a593Smuzhiyun uint32_t payload0; 4375*4882a593Smuzhiyun /* Payload0 for BA_ACC */ 4376*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_SHIFT 16 4377*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_MASK 0x000000ff 4378*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_WORD payload0 4379*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_vald_SHIFT 24 4380*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_vald_MASK 0x000000ff 4381*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_vald_WORD payload0 4382*4882a593Smuzhiyun /* Payload0 for BA_RJT */ 4383*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_vspec_SHIFT 0 4384*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_vspec_MASK 0x000000ff 4385*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_vspec_WORD payload0 4386*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_expc_SHIFT 8 4387*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_expc_MASK 0x000000ff 4388*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_expc_WORD payload0 4389*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_rsnc_SHIFT 16 4390*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_rsnc_MASK 0x000000ff 4391*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_rsnc_WORD payload0 4392*4882a593Smuzhiyun uint32_t word1; 4393*4882a593Smuzhiyun #define xmit_bls_rsp64_rxid_SHIFT 0 4394*4882a593Smuzhiyun #define xmit_bls_rsp64_rxid_MASK 0x0000ffff 4395*4882a593Smuzhiyun #define xmit_bls_rsp64_rxid_WORD word1 4396*4882a593Smuzhiyun #define xmit_bls_rsp64_oxid_SHIFT 16 4397*4882a593Smuzhiyun #define xmit_bls_rsp64_oxid_MASK 0x0000ffff 4398*4882a593Smuzhiyun #define xmit_bls_rsp64_oxid_WORD word1 4399*4882a593Smuzhiyun uint32_t word2; 4400*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcnthi_SHIFT 0 4401*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcnthi_MASK 0x0000ffff 4402*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcnthi_WORD word2 4403*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcntlo_SHIFT 16 4404*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcntlo_MASK 0x0000ffff 4405*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcntlo_WORD word2 4406*4882a593Smuzhiyun uint32_t rsrvd3; 4407*4882a593Smuzhiyun uint32_t rsrvd4; 4408*4882a593Smuzhiyun struct wqe_did wqe_dest; 4409*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4410*4882a593Smuzhiyun uint32_t word12; 4411*4882a593Smuzhiyun #define xmit_bls_rsp64_temprpi_SHIFT 0 4412*4882a593Smuzhiyun #define xmit_bls_rsp64_temprpi_MASK 0x0000ffff 4413*4882a593Smuzhiyun #define xmit_bls_rsp64_temprpi_WORD word12 4414*4882a593Smuzhiyun uint32_t rsvd_13_15[3]; 4415*4882a593Smuzhiyun }; 4416*4882a593Smuzhiyun 4417*4882a593Smuzhiyun struct wqe_rctl_dfctl { 4418*4882a593Smuzhiyun uint32_t word5; 4419*4882a593Smuzhiyun #define wqe_si_SHIFT 2 4420*4882a593Smuzhiyun #define wqe_si_MASK 0x000000001 4421*4882a593Smuzhiyun #define wqe_si_WORD word5 4422*4882a593Smuzhiyun #define wqe_la_SHIFT 3 4423*4882a593Smuzhiyun #define wqe_la_MASK 0x000000001 4424*4882a593Smuzhiyun #define wqe_la_WORD word5 4425*4882a593Smuzhiyun #define wqe_xo_SHIFT 6 4426*4882a593Smuzhiyun #define wqe_xo_MASK 0x000000001 4427*4882a593Smuzhiyun #define wqe_xo_WORD word5 4428*4882a593Smuzhiyun #define wqe_ls_SHIFT 7 4429*4882a593Smuzhiyun #define wqe_ls_MASK 0x000000001 4430*4882a593Smuzhiyun #define wqe_ls_WORD word5 4431*4882a593Smuzhiyun #define wqe_dfctl_SHIFT 8 4432*4882a593Smuzhiyun #define wqe_dfctl_MASK 0x0000000ff 4433*4882a593Smuzhiyun #define wqe_dfctl_WORD word5 4434*4882a593Smuzhiyun #define wqe_type_SHIFT 16 4435*4882a593Smuzhiyun #define wqe_type_MASK 0x0000000ff 4436*4882a593Smuzhiyun #define wqe_type_WORD word5 4437*4882a593Smuzhiyun #define wqe_rctl_SHIFT 24 4438*4882a593Smuzhiyun #define wqe_rctl_MASK 0x0000000ff 4439*4882a593Smuzhiyun #define wqe_rctl_WORD word5 4440*4882a593Smuzhiyun }; 4441*4882a593Smuzhiyun 4442*4882a593Smuzhiyun struct xmit_seq64_wqe { 4443*4882a593Smuzhiyun struct ulp_bde64 bde; 4444*4882a593Smuzhiyun uint32_t rsvd3; 4445*4882a593Smuzhiyun uint32_t relative_offset; 4446*4882a593Smuzhiyun struct wqe_rctl_dfctl wge_ctl; 4447*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4448*4882a593Smuzhiyun uint32_t xmit_len; 4449*4882a593Smuzhiyun uint32_t rsvd_12_15[3]; 4450*4882a593Smuzhiyun }; 4451*4882a593Smuzhiyun struct xmit_bcast64_wqe { 4452*4882a593Smuzhiyun struct ulp_bde64 bde; 4453*4882a593Smuzhiyun uint32_t seq_payload_len; 4454*4882a593Smuzhiyun uint32_t rsvd4; 4455*4882a593Smuzhiyun struct wqe_rctl_dfctl wge_ctl; /* word 5 */ 4456*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4457*4882a593Smuzhiyun uint32_t rsvd_12_15[4]; 4458*4882a593Smuzhiyun }; 4459*4882a593Smuzhiyun 4460*4882a593Smuzhiyun struct gen_req64_wqe { 4461*4882a593Smuzhiyun struct ulp_bde64 bde; 4462*4882a593Smuzhiyun uint32_t request_payload_len; 4463*4882a593Smuzhiyun uint32_t relative_offset; 4464*4882a593Smuzhiyun struct wqe_rctl_dfctl wge_ctl; /* word 5 */ 4465*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4466*4882a593Smuzhiyun uint32_t rsvd_12_14[3]; 4467*4882a593Smuzhiyun uint32_t max_response_payload_len; 4468*4882a593Smuzhiyun }; 4469*4882a593Smuzhiyun 4470*4882a593Smuzhiyun /* Define NVME PRLI request to fabric. NVME is a 4471*4882a593Smuzhiyun * fabric-only protocol. 4472*4882a593Smuzhiyun * Updated to red-lined v1.08 on Sept 16, 2016 4473*4882a593Smuzhiyun */ 4474*4882a593Smuzhiyun struct lpfc_nvme_prli { 4475*4882a593Smuzhiyun uint32_t word1; 4476*4882a593Smuzhiyun /* The Response Code is defined in the FCP PRLI lpfc_hw.h */ 4477*4882a593Smuzhiyun #define prli_acc_rsp_code_SHIFT 8 4478*4882a593Smuzhiyun #define prli_acc_rsp_code_MASK 0x0000000f 4479*4882a593Smuzhiyun #define prli_acc_rsp_code_WORD word1 4480*4882a593Smuzhiyun #define prli_estabImagePair_SHIFT 13 4481*4882a593Smuzhiyun #define prli_estabImagePair_MASK 0x00000001 4482*4882a593Smuzhiyun #define prli_estabImagePair_WORD word1 4483*4882a593Smuzhiyun #define prli_type_code_ext_SHIFT 16 4484*4882a593Smuzhiyun #define prli_type_code_ext_MASK 0x000000ff 4485*4882a593Smuzhiyun #define prli_type_code_ext_WORD word1 4486*4882a593Smuzhiyun #define prli_type_code_SHIFT 24 4487*4882a593Smuzhiyun #define prli_type_code_MASK 0x000000ff 4488*4882a593Smuzhiyun #define prli_type_code_WORD word1 4489*4882a593Smuzhiyun uint32_t word_rsvd2; 4490*4882a593Smuzhiyun uint32_t word_rsvd3; 4491*4882a593Smuzhiyun 4492*4882a593Smuzhiyun uint32_t word4; 4493*4882a593Smuzhiyun #define prli_fba_SHIFT 0 4494*4882a593Smuzhiyun #define prli_fba_MASK 0x00000001 4495*4882a593Smuzhiyun #define prli_fba_WORD word4 4496*4882a593Smuzhiyun #define prli_disc_SHIFT 3 4497*4882a593Smuzhiyun #define prli_disc_MASK 0x00000001 4498*4882a593Smuzhiyun #define prli_disc_WORD word4 4499*4882a593Smuzhiyun #define prli_tgt_SHIFT 4 4500*4882a593Smuzhiyun #define prli_tgt_MASK 0x00000001 4501*4882a593Smuzhiyun #define prli_tgt_WORD word4 4502*4882a593Smuzhiyun #define prli_init_SHIFT 5 4503*4882a593Smuzhiyun #define prli_init_MASK 0x00000001 4504*4882a593Smuzhiyun #define prli_init_WORD word4 4505*4882a593Smuzhiyun #define prli_conf_SHIFT 7 4506*4882a593Smuzhiyun #define prli_conf_MASK 0x00000001 4507*4882a593Smuzhiyun #define prli_conf_WORD word4 4508*4882a593Smuzhiyun #define prli_nsler_SHIFT 8 4509*4882a593Smuzhiyun #define prli_nsler_MASK 0x00000001 4510*4882a593Smuzhiyun #define prli_nsler_WORD word4 4511*4882a593Smuzhiyun uint32_t word5; 4512*4882a593Smuzhiyun #define prli_fb_sz_SHIFT 0 4513*4882a593Smuzhiyun #define prli_fb_sz_MASK 0x0000ffff 4514*4882a593Smuzhiyun #define prli_fb_sz_WORD word5 4515*4882a593Smuzhiyun #define LPFC_NVMET_FB_SZ_MAX 65536 /* Driver target mode only. */ 4516*4882a593Smuzhiyun }; 4517*4882a593Smuzhiyun 4518*4882a593Smuzhiyun struct create_xri_wqe { 4519*4882a593Smuzhiyun uint32_t rsrvd[5]; /* words 0-4 */ 4520*4882a593Smuzhiyun struct wqe_did wqe_dest; /* word 5 */ 4521*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4522*4882a593Smuzhiyun uint32_t rsvd_12_15[4]; /* word 12-15 */ 4523*4882a593Smuzhiyun }; 4524*4882a593Smuzhiyun 4525*4882a593Smuzhiyun #define INHIBIT_ABORT 1 4526*4882a593Smuzhiyun #define T_REQUEST_TAG 3 4527*4882a593Smuzhiyun #define T_XRI_TAG 1 4528*4882a593Smuzhiyun 4529*4882a593Smuzhiyun struct abort_cmd_wqe { 4530*4882a593Smuzhiyun uint32_t rsrvd[3]; 4531*4882a593Smuzhiyun uint32_t word3; 4532*4882a593Smuzhiyun #define abort_cmd_ia_SHIFT 0 4533*4882a593Smuzhiyun #define abort_cmd_ia_MASK 0x000000001 4534*4882a593Smuzhiyun #define abort_cmd_ia_WORD word3 4535*4882a593Smuzhiyun #define abort_cmd_criteria_SHIFT 8 4536*4882a593Smuzhiyun #define abort_cmd_criteria_MASK 0x0000000ff 4537*4882a593Smuzhiyun #define abort_cmd_criteria_WORD word3 4538*4882a593Smuzhiyun uint32_t rsrvd4; 4539*4882a593Smuzhiyun uint32_t rsrvd5; 4540*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4541*4882a593Smuzhiyun uint32_t rsvd_12_15[4]; /* word 12-15 */ 4542*4882a593Smuzhiyun }; 4543*4882a593Smuzhiyun 4544*4882a593Smuzhiyun struct fcp_iwrite64_wqe { 4545*4882a593Smuzhiyun struct ulp_bde64 bde; 4546*4882a593Smuzhiyun uint32_t word3; 4547*4882a593Smuzhiyun #define cmd_buff_len_SHIFT 16 4548*4882a593Smuzhiyun #define cmd_buff_len_MASK 0x00000ffff 4549*4882a593Smuzhiyun #define cmd_buff_len_WORD word3 4550*4882a593Smuzhiyun #define payload_offset_len_SHIFT 0 4551*4882a593Smuzhiyun #define payload_offset_len_MASK 0x0000ffff 4552*4882a593Smuzhiyun #define payload_offset_len_WORD word3 4553*4882a593Smuzhiyun uint32_t total_xfer_len; 4554*4882a593Smuzhiyun uint32_t initial_xfer_len; 4555*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4556*4882a593Smuzhiyun uint32_t rsrvd12; 4557*4882a593Smuzhiyun struct ulp_bde64 ph_bde; /* words 13-15 */ 4558*4882a593Smuzhiyun }; 4559*4882a593Smuzhiyun 4560*4882a593Smuzhiyun struct fcp_iread64_wqe { 4561*4882a593Smuzhiyun struct ulp_bde64 bde; 4562*4882a593Smuzhiyun uint32_t word3; 4563*4882a593Smuzhiyun #define cmd_buff_len_SHIFT 16 4564*4882a593Smuzhiyun #define cmd_buff_len_MASK 0x00000ffff 4565*4882a593Smuzhiyun #define cmd_buff_len_WORD word3 4566*4882a593Smuzhiyun #define payload_offset_len_SHIFT 0 4567*4882a593Smuzhiyun #define payload_offset_len_MASK 0x0000ffff 4568*4882a593Smuzhiyun #define payload_offset_len_WORD word3 4569*4882a593Smuzhiyun uint32_t total_xfer_len; /* word 4 */ 4570*4882a593Smuzhiyun uint32_t rsrvd5; /* word 5 */ 4571*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4572*4882a593Smuzhiyun uint32_t rsrvd12; 4573*4882a593Smuzhiyun struct ulp_bde64 ph_bde; /* words 13-15 */ 4574*4882a593Smuzhiyun }; 4575*4882a593Smuzhiyun 4576*4882a593Smuzhiyun struct fcp_icmnd64_wqe { 4577*4882a593Smuzhiyun struct ulp_bde64 bde; /* words 0-2 */ 4578*4882a593Smuzhiyun uint32_t word3; 4579*4882a593Smuzhiyun #define cmd_buff_len_SHIFT 16 4580*4882a593Smuzhiyun #define cmd_buff_len_MASK 0x00000ffff 4581*4882a593Smuzhiyun #define cmd_buff_len_WORD word3 4582*4882a593Smuzhiyun #define payload_offset_len_SHIFT 0 4583*4882a593Smuzhiyun #define payload_offset_len_MASK 0x0000ffff 4584*4882a593Smuzhiyun #define payload_offset_len_WORD word3 4585*4882a593Smuzhiyun uint32_t rsrvd4; /* word 4 */ 4586*4882a593Smuzhiyun uint32_t rsrvd5; /* word 5 */ 4587*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4588*4882a593Smuzhiyun uint32_t rsvd_12_15[4]; /* word 12-15 */ 4589*4882a593Smuzhiyun }; 4590*4882a593Smuzhiyun 4591*4882a593Smuzhiyun struct fcp_trsp64_wqe { 4592*4882a593Smuzhiyun struct ulp_bde64 bde; 4593*4882a593Smuzhiyun uint32_t response_len; 4594*4882a593Smuzhiyun uint32_t rsvd_4_5[2]; 4595*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4596*4882a593Smuzhiyun uint32_t rsvd_12_15[4]; /* word 12-15 */ 4597*4882a593Smuzhiyun }; 4598*4882a593Smuzhiyun 4599*4882a593Smuzhiyun struct fcp_tsend64_wqe { 4600*4882a593Smuzhiyun struct ulp_bde64 bde; 4601*4882a593Smuzhiyun uint32_t payload_offset_len; 4602*4882a593Smuzhiyun uint32_t relative_offset; 4603*4882a593Smuzhiyun uint32_t reserved; 4604*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4605*4882a593Smuzhiyun uint32_t fcp_data_len; /* word 12 */ 4606*4882a593Smuzhiyun uint32_t rsvd_13_15[3]; /* word 13-15 */ 4607*4882a593Smuzhiyun }; 4608*4882a593Smuzhiyun 4609*4882a593Smuzhiyun struct fcp_treceive64_wqe { 4610*4882a593Smuzhiyun struct ulp_bde64 bde; 4611*4882a593Smuzhiyun uint32_t payload_offset_len; 4612*4882a593Smuzhiyun uint32_t relative_offset; 4613*4882a593Smuzhiyun uint32_t reserved; 4614*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4615*4882a593Smuzhiyun uint32_t fcp_data_len; /* word 12 */ 4616*4882a593Smuzhiyun uint32_t rsvd_13_15[3]; /* word 13-15 */ 4617*4882a593Smuzhiyun }; 4618*4882a593Smuzhiyun #define TXRDY_PAYLOAD_LEN 12 4619*4882a593Smuzhiyun 4620*4882a593Smuzhiyun #define CMD_SEND_FRAME 0xE1 4621*4882a593Smuzhiyun 4622*4882a593Smuzhiyun struct send_frame_wqe { 4623*4882a593Smuzhiyun struct ulp_bde64 bde; /* words 0-2 */ 4624*4882a593Smuzhiyun uint32_t frame_len; /* word 3 */ 4625*4882a593Smuzhiyun uint32_t fc_hdr_wd0; /* word 4 */ 4626*4882a593Smuzhiyun uint32_t fc_hdr_wd1; /* word 5 */ 4627*4882a593Smuzhiyun struct wqe_common wqe_com; /* words 6-11 */ 4628*4882a593Smuzhiyun uint32_t fc_hdr_wd2; /* word 12 */ 4629*4882a593Smuzhiyun uint32_t fc_hdr_wd3; /* word 13 */ 4630*4882a593Smuzhiyun uint32_t fc_hdr_wd4; /* word 14 */ 4631*4882a593Smuzhiyun uint32_t fc_hdr_wd5; /* word 15 */ 4632*4882a593Smuzhiyun }; 4633*4882a593Smuzhiyun 4634*4882a593Smuzhiyun #define ELS_RDF_REG_TAG_CNT 4 4635*4882a593Smuzhiyun struct lpfc_els_rdf_reg_desc { 4636*4882a593Smuzhiyun struct fc_df_desc_fpin_reg reg_desc; /* descriptor header */ 4637*4882a593Smuzhiyun __be32 desc_tags[ELS_RDF_REG_TAG_CNT]; 4638*4882a593Smuzhiyun /* tags in reg_desc */ 4639*4882a593Smuzhiyun }; 4640*4882a593Smuzhiyun 4641*4882a593Smuzhiyun struct lpfc_els_rdf_req { 4642*4882a593Smuzhiyun struct fc_els_rdf rdf; /* hdr up to descriptors */ 4643*4882a593Smuzhiyun struct lpfc_els_rdf_reg_desc reg_d1; /* 1st descriptor */ 4644*4882a593Smuzhiyun }; 4645*4882a593Smuzhiyun 4646*4882a593Smuzhiyun struct lpfc_els_rdf_rsp { 4647*4882a593Smuzhiyun struct fc_els_rdf_resp rdf_resp; /* hdr up to descriptors */ 4648*4882a593Smuzhiyun struct lpfc_els_rdf_reg_desc reg_d1; /* 1st descriptor */ 4649*4882a593Smuzhiyun }; 4650*4882a593Smuzhiyun 4651*4882a593Smuzhiyun union lpfc_wqe { 4652*4882a593Smuzhiyun uint32_t words[16]; 4653*4882a593Smuzhiyun struct lpfc_wqe_generic generic; 4654*4882a593Smuzhiyun struct fcp_icmnd64_wqe fcp_icmd; 4655*4882a593Smuzhiyun struct fcp_iread64_wqe fcp_iread; 4656*4882a593Smuzhiyun struct fcp_iwrite64_wqe fcp_iwrite; 4657*4882a593Smuzhiyun struct abort_cmd_wqe abort_cmd; 4658*4882a593Smuzhiyun struct create_xri_wqe create_xri; 4659*4882a593Smuzhiyun struct xmit_bcast64_wqe xmit_bcast64; 4660*4882a593Smuzhiyun struct xmit_seq64_wqe xmit_sequence; 4661*4882a593Smuzhiyun struct xmit_bls_rsp64_wqe xmit_bls_rsp; 4662*4882a593Smuzhiyun struct xmit_els_rsp64_wqe xmit_els_rsp; 4663*4882a593Smuzhiyun struct els_request64_wqe els_req; 4664*4882a593Smuzhiyun struct gen_req64_wqe gen_req; 4665*4882a593Smuzhiyun struct fcp_trsp64_wqe fcp_trsp; 4666*4882a593Smuzhiyun struct fcp_tsend64_wqe fcp_tsend; 4667*4882a593Smuzhiyun struct fcp_treceive64_wqe fcp_treceive; 4668*4882a593Smuzhiyun struct send_frame_wqe send_frame; 4669*4882a593Smuzhiyun }; 4670*4882a593Smuzhiyun 4671*4882a593Smuzhiyun union lpfc_wqe128 { 4672*4882a593Smuzhiyun uint32_t words[32]; 4673*4882a593Smuzhiyun struct lpfc_wqe_generic generic; 4674*4882a593Smuzhiyun struct fcp_icmnd64_wqe fcp_icmd; 4675*4882a593Smuzhiyun struct fcp_iread64_wqe fcp_iread; 4676*4882a593Smuzhiyun struct fcp_iwrite64_wqe fcp_iwrite; 4677*4882a593Smuzhiyun struct abort_cmd_wqe abort_cmd; 4678*4882a593Smuzhiyun struct create_xri_wqe create_xri; 4679*4882a593Smuzhiyun struct xmit_bcast64_wqe xmit_bcast64; 4680*4882a593Smuzhiyun struct xmit_seq64_wqe xmit_sequence; 4681*4882a593Smuzhiyun struct xmit_bls_rsp64_wqe xmit_bls_rsp; 4682*4882a593Smuzhiyun struct xmit_els_rsp64_wqe xmit_els_rsp; 4683*4882a593Smuzhiyun struct els_request64_wqe els_req; 4684*4882a593Smuzhiyun struct gen_req64_wqe gen_req; 4685*4882a593Smuzhiyun struct fcp_trsp64_wqe fcp_trsp; 4686*4882a593Smuzhiyun struct fcp_tsend64_wqe fcp_tsend; 4687*4882a593Smuzhiyun struct fcp_treceive64_wqe fcp_treceive; 4688*4882a593Smuzhiyun struct send_frame_wqe send_frame; 4689*4882a593Smuzhiyun }; 4690*4882a593Smuzhiyun 4691*4882a593Smuzhiyun #define MAGIC_NUMBER_G6 0xFEAA0003 4692*4882a593Smuzhiyun #define MAGIC_NUMBER_G7 0xFEAA0005 4693*4882a593Smuzhiyun 4694*4882a593Smuzhiyun struct lpfc_grp_hdr { 4695*4882a593Smuzhiyun uint32_t size; 4696*4882a593Smuzhiyun uint32_t magic_number; 4697*4882a593Smuzhiyun uint32_t word2; 4698*4882a593Smuzhiyun #define lpfc_grp_hdr_file_type_SHIFT 24 4699*4882a593Smuzhiyun #define lpfc_grp_hdr_file_type_MASK 0x000000FF 4700*4882a593Smuzhiyun #define lpfc_grp_hdr_file_type_WORD word2 4701*4882a593Smuzhiyun #define lpfc_grp_hdr_id_SHIFT 16 4702*4882a593Smuzhiyun #define lpfc_grp_hdr_id_MASK 0x000000FF 4703*4882a593Smuzhiyun #define lpfc_grp_hdr_id_WORD word2 4704*4882a593Smuzhiyun uint8_t rev_name[128]; 4705*4882a593Smuzhiyun uint8_t date[12]; 4706*4882a593Smuzhiyun uint8_t revision[32]; 4707*4882a593Smuzhiyun }; 4708*4882a593Smuzhiyun 4709*4882a593Smuzhiyun /* Defines for WQE command type */ 4710*4882a593Smuzhiyun #define FCP_COMMAND 0x0 4711*4882a593Smuzhiyun #define NVME_READ_CMD 0x0 4712*4882a593Smuzhiyun #define FCP_COMMAND_DATA_OUT 0x1 4713*4882a593Smuzhiyun #define NVME_WRITE_CMD 0x1 4714*4882a593Smuzhiyun #define FCP_COMMAND_TRECEIVE 0x2 4715*4882a593Smuzhiyun #define FCP_COMMAND_TRSP 0x3 4716*4882a593Smuzhiyun #define FCP_COMMAND_TSEND 0x7 4717*4882a593Smuzhiyun #define OTHER_COMMAND 0x8 4718*4882a593Smuzhiyun #define ELS_COMMAND_NON_FIP 0xC 4719*4882a593Smuzhiyun #define ELS_COMMAND_FIP 0xD 4720*4882a593Smuzhiyun 4721*4882a593Smuzhiyun #define LPFC_NVME_EMBED_CMD 0x0 4722*4882a593Smuzhiyun #define LPFC_NVME_EMBED_WRITE 0x1 4723*4882a593Smuzhiyun #define LPFC_NVME_EMBED_READ 0x2 4724*4882a593Smuzhiyun 4725*4882a593Smuzhiyun /* WQE Commands */ 4726*4882a593Smuzhiyun #define CMD_ABORT_XRI_WQE 0x0F 4727*4882a593Smuzhiyun #define CMD_XMIT_SEQUENCE64_WQE 0x82 4728*4882a593Smuzhiyun #define CMD_XMIT_BCAST64_WQE 0x84 4729*4882a593Smuzhiyun #define CMD_ELS_REQUEST64_WQE 0x8A 4730*4882a593Smuzhiyun #define CMD_XMIT_ELS_RSP64_WQE 0x95 4731*4882a593Smuzhiyun #define CMD_XMIT_BLS_RSP64_WQE 0x97 4732*4882a593Smuzhiyun #define CMD_FCP_IWRITE64_WQE 0x98 4733*4882a593Smuzhiyun #define CMD_FCP_IREAD64_WQE 0x9A 4734*4882a593Smuzhiyun #define CMD_FCP_ICMND64_WQE 0x9C 4735*4882a593Smuzhiyun #define CMD_FCP_TSEND64_WQE 0x9F 4736*4882a593Smuzhiyun #define CMD_FCP_TRECEIVE64_WQE 0xA1 4737*4882a593Smuzhiyun #define CMD_FCP_TRSP64_WQE 0xA3 4738*4882a593Smuzhiyun #define CMD_GEN_REQUEST64_WQE 0xC2 4739*4882a593Smuzhiyun 4740*4882a593Smuzhiyun #define CMD_WQE_MASK 0xff 4741*4882a593Smuzhiyun 4742*4882a593Smuzhiyun 4743*4882a593Smuzhiyun #define LPFC_FW_DUMP 1 4744*4882a593Smuzhiyun #define LPFC_FW_RESET 2 4745*4882a593Smuzhiyun #define LPFC_DV_RESET 3 4746