1*4882a593Smuzhiyun /* bnx2x_hsi.h: Qlogic Everest network driver. 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright (c) 2007-2013 Broadcom Corporation 4*4882a593Smuzhiyun * Copyright (c) 2014 QLogic Corporation 5*4882a593Smuzhiyun * All rights reserved 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 8*4882a593Smuzhiyun * it under the terms of the GNU General Public License as published by 9*4882a593Smuzhiyun * the Free Software Foundation. 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun #ifndef BNX2X_HSI_H 12*4882a593Smuzhiyun #define BNX2X_HSI_H 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include "bnx2x_fw_defs.h" 15*4882a593Smuzhiyun #include "bnx2x_mfw_req.h" 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define FW_ENCODE_32BIT_PATTERN 0x1e1e1e1e 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun struct license_key { 20*4882a593Smuzhiyun u32 reserved[6]; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun u32 max_iscsi_conn; 23*4882a593Smuzhiyun #define BNX2X_MAX_ISCSI_TRGT_CONN_MASK 0xFFFF 24*4882a593Smuzhiyun #define BNX2X_MAX_ISCSI_TRGT_CONN_SHIFT 0 25*4882a593Smuzhiyun #define BNX2X_MAX_ISCSI_INIT_CONN_MASK 0xFFFF0000 26*4882a593Smuzhiyun #define BNX2X_MAX_ISCSI_INIT_CONN_SHIFT 16 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun u32 reserved_a; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun u32 max_fcoe_conn; 31*4882a593Smuzhiyun #define BNX2X_MAX_FCOE_TRGT_CONN_MASK 0xFFFF 32*4882a593Smuzhiyun #define BNX2X_MAX_FCOE_TRGT_CONN_SHIFT 0 33*4882a593Smuzhiyun #define BNX2X_MAX_FCOE_INIT_CONN_MASK 0xFFFF0000 34*4882a593Smuzhiyun #define BNX2X_MAX_FCOE_INIT_CONN_SHIFT 16 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun u32 reserved_b[4]; 37*4882a593Smuzhiyun }; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /**************************************************************************** 40*4882a593Smuzhiyun * Shared HW configuration * 41*4882a593Smuzhiyun ****************************************************************************/ 42*4882a593Smuzhiyun #define PIN_CFG_NA 0x00000000 43*4882a593Smuzhiyun #define PIN_CFG_GPIO0_P0 0x00000001 44*4882a593Smuzhiyun #define PIN_CFG_GPIO1_P0 0x00000002 45*4882a593Smuzhiyun #define PIN_CFG_GPIO2_P0 0x00000003 46*4882a593Smuzhiyun #define PIN_CFG_GPIO3_P0 0x00000004 47*4882a593Smuzhiyun #define PIN_CFG_GPIO0_P1 0x00000005 48*4882a593Smuzhiyun #define PIN_CFG_GPIO1_P1 0x00000006 49*4882a593Smuzhiyun #define PIN_CFG_GPIO2_P1 0x00000007 50*4882a593Smuzhiyun #define PIN_CFG_GPIO3_P1 0x00000008 51*4882a593Smuzhiyun #define PIN_CFG_EPIO0 0x00000009 52*4882a593Smuzhiyun #define PIN_CFG_EPIO1 0x0000000a 53*4882a593Smuzhiyun #define PIN_CFG_EPIO2 0x0000000b 54*4882a593Smuzhiyun #define PIN_CFG_EPIO3 0x0000000c 55*4882a593Smuzhiyun #define PIN_CFG_EPIO4 0x0000000d 56*4882a593Smuzhiyun #define PIN_CFG_EPIO5 0x0000000e 57*4882a593Smuzhiyun #define PIN_CFG_EPIO6 0x0000000f 58*4882a593Smuzhiyun #define PIN_CFG_EPIO7 0x00000010 59*4882a593Smuzhiyun #define PIN_CFG_EPIO8 0x00000011 60*4882a593Smuzhiyun #define PIN_CFG_EPIO9 0x00000012 61*4882a593Smuzhiyun #define PIN_CFG_EPIO10 0x00000013 62*4882a593Smuzhiyun #define PIN_CFG_EPIO11 0x00000014 63*4882a593Smuzhiyun #define PIN_CFG_EPIO12 0x00000015 64*4882a593Smuzhiyun #define PIN_CFG_EPIO13 0x00000016 65*4882a593Smuzhiyun #define PIN_CFG_EPIO14 0x00000017 66*4882a593Smuzhiyun #define PIN_CFG_EPIO15 0x00000018 67*4882a593Smuzhiyun #define PIN_CFG_EPIO16 0x00000019 68*4882a593Smuzhiyun #define PIN_CFG_EPIO17 0x0000001a 69*4882a593Smuzhiyun #define PIN_CFG_EPIO18 0x0000001b 70*4882a593Smuzhiyun #define PIN_CFG_EPIO19 0x0000001c 71*4882a593Smuzhiyun #define PIN_CFG_EPIO20 0x0000001d 72*4882a593Smuzhiyun #define PIN_CFG_EPIO21 0x0000001e 73*4882a593Smuzhiyun #define PIN_CFG_EPIO22 0x0000001f 74*4882a593Smuzhiyun #define PIN_CFG_EPIO23 0x00000020 75*4882a593Smuzhiyun #define PIN_CFG_EPIO24 0x00000021 76*4882a593Smuzhiyun #define PIN_CFG_EPIO25 0x00000022 77*4882a593Smuzhiyun #define PIN_CFG_EPIO26 0x00000023 78*4882a593Smuzhiyun #define PIN_CFG_EPIO27 0x00000024 79*4882a593Smuzhiyun #define PIN_CFG_EPIO28 0x00000025 80*4882a593Smuzhiyun #define PIN_CFG_EPIO29 0x00000026 81*4882a593Smuzhiyun #define PIN_CFG_EPIO30 0x00000027 82*4882a593Smuzhiyun #define PIN_CFG_EPIO31 0x00000028 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* EPIO definition */ 85*4882a593Smuzhiyun #define EPIO_CFG_NA 0x00000000 86*4882a593Smuzhiyun #define EPIO_CFG_EPIO0 0x00000001 87*4882a593Smuzhiyun #define EPIO_CFG_EPIO1 0x00000002 88*4882a593Smuzhiyun #define EPIO_CFG_EPIO2 0x00000003 89*4882a593Smuzhiyun #define EPIO_CFG_EPIO3 0x00000004 90*4882a593Smuzhiyun #define EPIO_CFG_EPIO4 0x00000005 91*4882a593Smuzhiyun #define EPIO_CFG_EPIO5 0x00000006 92*4882a593Smuzhiyun #define EPIO_CFG_EPIO6 0x00000007 93*4882a593Smuzhiyun #define EPIO_CFG_EPIO7 0x00000008 94*4882a593Smuzhiyun #define EPIO_CFG_EPIO8 0x00000009 95*4882a593Smuzhiyun #define EPIO_CFG_EPIO9 0x0000000a 96*4882a593Smuzhiyun #define EPIO_CFG_EPIO10 0x0000000b 97*4882a593Smuzhiyun #define EPIO_CFG_EPIO11 0x0000000c 98*4882a593Smuzhiyun #define EPIO_CFG_EPIO12 0x0000000d 99*4882a593Smuzhiyun #define EPIO_CFG_EPIO13 0x0000000e 100*4882a593Smuzhiyun #define EPIO_CFG_EPIO14 0x0000000f 101*4882a593Smuzhiyun #define EPIO_CFG_EPIO15 0x00000010 102*4882a593Smuzhiyun #define EPIO_CFG_EPIO16 0x00000011 103*4882a593Smuzhiyun #define EPIO_CFG_EPIO17 0x00000012 104*4882a593Smuzhiyun #define EPIO_CFG_EPIO18 0x00000013 105*4882a593Smuzhiyun #define EPIO_CFG_EPIO19 0x00000014 106*4882a593Smuzhiyun #define EPIO_CFG_EPIO20 0x00000015 107*4882a593Smuzhiyun #define EPIO_CFG_EPIO21 0x00000016 108*4882a593Smuzhiyun #define EPIO_CFG_EPIO22 0x00000017 109*4882a593Smuzhiyun #define EPIO_CFG_EPIO23 0x00000018 110*4882a593Smuzhiyun #define EPIO_CFG_EPIO24 0x00000019 111*4882a593Smuzhiyun #define EPIO_CFG_EPIO25 0x0000001a 112*4882a593Smuzhiyun #define EPIO_CFG_EPIO26 0x0000001b 113*4882a593Smuzhiyun #define EPIO_CFG_EPIO27 0x0000001c 114*4882a593Smuzhiyun #define EPIO_CFG_EPIO28 0x0000001d 115*4882a593Smuzhiyun #define EPIO_CFG_EPIO29 0x0000001e 116*4882a593Smuzhiyun #define EPIO_CFG_EPIO30 0x0000001f 117*4882a593Smuzhiyun #define EPIO_CFG_EPIO31 0x00000020 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun struct mac_addr { 120*4882a593Smuzhiyun u32 upper; 121*4882a593Smuzhiyun u32 lower; 122*4882a593Smuzhiyun }; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun struct shared_hw_cfg { /* NVRAM Offset */ 125*4882a593Smuzhiyun /* Up to 16 bytes of NULL-terminated string */ 126*4882a593Smuzhiyun u8 part_num[16]; /* 0x104 */ 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun u32 config; /* 0x114 */ 129*4882a593Smuzhiyun #define SHARED_HW_CFG_MDIO_VOLTAGE_MASK 0x00000001 130*4882a593Smuzhiyun #define SHARED_HW_CFG_MDIO_VOLTAGE_SHIFT 0 131*4882a593Smuzhiyun #define SHARED_HW_CFG_MDIO_VOLTAGE_1_2V 0x00000000 132*4882a593Smuzhiyun #define SHARED_HW_CFG_MDIO_VOLTAGE_2_5V 0x00000001 133*4882a593Smuzhiyun #define SHARED_HW_CFG_MCP_RST_ON_CORE_RST_EN 0x00000002 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun #define SHARED_HW_CFG_PORT_SWAP 0x00000004 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun #define SHARED_HW_CFG_BEACON_WOL_EN 0x00000008 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN3_DISABLED 0x00000000 140*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN3_ENABLED 0x00000010 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_MASK 0x00000700 143*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_SHIFT 8 144*4882a593Smuzhiyun /* Whatever MFW found in NVM 145*4882a593Smuzhiyun (if multiple found, priority order is: NC-SI, UMP, IPMI) */ 146*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_DEFAULT 0x00000000 147*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_NC_SI 0x00000100 148*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_UMP 0x00000200 149*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_IPMI 0x00000300 150*4882a593Smuzhiyun /* Use SPIO4 as an arbiter between: 0-NC_SI, 1-IPMI 151*4882a593Smuzhiyun (can only be used when an add-in board, not BMC, pulls-down SPIO4) */ 152*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_SPIO4_NC_SI_IPMI 0x00000400 153*4882a593Smuzhiyun /* Use SPIO4 as an arbiter between: 0-UMP, 1-IPMI 154*4882a593Smuzhiyun (can only be used when an add-in board, not BMC, pulls-down SPIO4) */ 155*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_SPIO4_UMP_IPMI 0x00000500 156*4882a593Smuzhiyun /* Use SPIO4 as an arbiter between: 0-NC-SI, 1-UMP 157*4882a593Smuzhiyun (can only be used when an add-in board, not BMC, pulls-down SPIO4) */ 158*4882a593Smuzhiyun #define SHARED_HW_CFG_MFW_SELECT_SPIO4_NC_SI_UMP 0x00000600 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_MODE_MASK 0x000f0000 161*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_MODE_SHIFT 16 162*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_MAC1 0x00000000 163*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY1 0x00010000 164*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY2 0x00020000 165*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY3 0x00030000 166*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_MAC2 0x00040000 167*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY4 0x00050000 168*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY5 0x00060000 169*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY6 0x00070000 170*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_MAC3 0x00080000 171*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY7 0x00090000 172*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY9 0x000a0000 173*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY11 0x000b0000 174*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_MAC4 0x000c0000 175*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_PHY8 0x000d0000 176*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_EXTPHY1 0x000e0000 177*4882a593Smuzhiyun #define SHARED_HW_CFG_LED_EXTPHY2 0x000f0000 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun #define SHARED_HW_CFG_AN_ENABLE_MASK 0x3f000000 181*4882a593Smuzhiyun #define SHARED_HW_CFG_AN_ENABLE_SHIFT 24 182*4882a593Smuzhiyun #define SHARED_HW_CFG_AN_ENABLE_CL37 0x01000000 183*4882a593Smuzhiyun #define SHARED_HW_CFG_AN_ENABLE_CL73 0x02000000 184*4882a593Smuzhiyun #define SHARED_HW_CFG_AN_ENABLE_BAM 0x04000000 185*4882a593Smuzhiyun #define SHARED_HW_CFG_AN_ENABLE_PARALLEL_DETECTION 0x08000000 186*4882a593Smuzhiyun #define SHARED_HW_CFG_AN_EN_SGMII_FIBER_AUTO_DETECT 0x10000000 187*4882a593Smuzhiyun #define SHARED_HW_CFG_AN_ENABLE_REMOTE_PHY 0x20000000 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun #define SHARED_HW_CFG_SRIOV_MASK 0x40000000 190*4882a593Smuzhiyun #define SHARED_HW_CFG_SRIOV_DISABLED 0x00000000 191*4882a593Smuzhiyun #define SHARED_HW_CFG_SRIOV_ENABLED 0x40000000 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun #define SHARED_HW_CFG_ATC_MASK 0x80000000 194*4882a593Smuzhiyun #define SHARED_HW_CFG_ATC_DISABLED 0x00000000 195*4882a593Smuzhiyun #define SHARED_HW_CFG_ATC_ENABLED 0x80000000 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun u32 config2; /* 0x118 */ 198*4882a593Smuzhiyun /* one time auto detect grace period (in sec) */ 199*4882a593Smuzhiyun #define SHARED_HW_CFG_GRACE_PERIOD_MASK 0x000000ff 200*4882a593Smuzhiyun #define SHARED_HW_CFG_GRACE_PERIOD_SHIFT 0 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN2_ENABLED 0x00000100 203*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN2_DISABLED 0x00000000 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun /* The default value for the core clock is 250MHz and it is 206*4882a593Smuzhiyun achieved by setting the clock change to 4 */ 207*4882a593Smuzhiyun #define SHARED_HW_CFG_CLOCK_CHANGE_MASK 0x00000e00 208*4882a593Smuzhiyun #define SHARED_HW_CFG_CLOCK_CHANGE_SHIFT 9 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun #define SHARED_HW_CFG_SMBUS_TIMING_MASK 0x00001000 211*4882a593Smuzhiyun #define SHARED_HW_CFG_SMBUS_TIMING_100KHZ 0x00000000 212*4882a593Smuzhiyun #define SHARED_HW_CFG_SMBUS_TIMING_400KHZ 0x00001000 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun #define SHARED_HW_CFG_HIDE_PORT1 0x00002000 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun #define SHARED_HW_CFG_WOL_CAPABLE_MASK 0x00004000 217*4882a593Smuzhiyun #define SHARED_HW_CFG_WOL_CAPABLE_DISABLED 0x00000000 218*4882a593Smuzhiyun #define SHARED_HW_CFG_WOL_CAPABLE_ENABLED 0x00004000 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* Output low when PERST is asserted */ 221*4882a593Smuzhiyun #define SHARED_HW_CFG_SPIO4_FOLLOW_PERST_MASK 0x00008000 222*4882a593Smuzhiyun #define SHARED_HW_CFG_SPIO4_FOLLOW_PERST_DISABLED 0x00000000 223*4882a593Smuzhiyun #define SHARED_HW_CFG_SPIO4_FOLLOW_PERST_ENABLED 0x00008000 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN2_PREEMPHASIS_MASK 0x00070000 226*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN2_PREEMPHASIS_SHIFT 16 227*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN2_PREEMPHASIS_HW 0x00000000 228*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN2_PREEMPHASIS_0DB 0x00010000 229*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN2_PREEMPHASIS_3_5DB 0x00020000 230*4882a593Smuzhiyun #define SHARED_HW_CFG_PCIE_GEN2_PREEMPHASIS_6_0DB 0x00030000 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun /* The fan failure mechanism is usually related to the PHY type 233*4882a593Smuzhiyun since the power consumption of the board is determined by the PHY. 234*4882a593Smuzhiyun Currently, fan is required for most designs with SFX7101, BCM8727 235*4882a593Smuzhiyun and BCM8481. If a fan is not required for a board which uses one 236*4882a593Smuzhiyun of those PHYs, this field should be set to "Disabled". If a fan is 237*4882a593Smuzhiyun required for a different PHY type, this option should be set to 238*4882a593Smuzhiyun "Enabled". The fan failure indication is expected on SPIO5 */ 239*4882a593Smuzhiyun #define SHARED_HW_CFG_FAN_FAILURE_MASK 0x00180000 240*4882a593Smuzhiyun #define SHARED_HW_CFG_FAN_FAILURE_SHIFT 19 241*4882a593Smuzhiyun #define SHARED_HW_CFG_FAN_FAILURE_PHY_TYPE 0x00000000 242*4882a593Smuzhiyun #define SHARED_HW_CFG_FAN_FAILURE_DISABLED 0x00080000 243*4882a593Smuzhiyun #define SHARED_HW_CFG_FAN_FAILURE_ENABLED 0x00100000 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun /* ASPM Power Management support */ 246*4882a593Smuzhiyun #define SHARED_HW_CFG_ASPM_SUPPORT_MASK 0x00600000 247*4882a593Smuzhiyun #define SHARED_HW_CFG_ASPM_SUPPORT_SHIFT 21 248*4882a593Smuzhiyun #define SHARED_HW_CFG_ASPM_SUPPORT_L0S_L1_ENABLED 0x00000000 249*4882a593Smuzhiyun #define SHARED_HW_CFG_ASPM_SUPPORT_L0S_DISABLED 0x00200000 250*4882a593Smuzhiyun #define SHARED_HW_CFG_ASPM_SUPPORT_L1_DISABLED 0x00400000 251*4882a593Smuzhiyun #define SHARED_HW_CFG_ASPM_SUPPORT_L0S_L1_DISABLED 0x00600000 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun /* The value of PM_TL_IGNORE_REQS (bit0) in PCI register 254*4882a593Smuzhiyun tl_control_0 (register 0x2800) */ 255*4882a593Smuzhiyun #define SHARED_HW_CFG_PREVENT_L1_ENTRY_MASK 0x00800000 256*4882a593Smuzhiyun #define SHARED_HW_CFG_PREVENT_L1_ENTRY_DISABLED 0x00000000 257*4882a593Smuzhiyun #define SHARED_HW_CFG_PREVENT_L1_ENTRY_ENABLED 0x00800000 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun #define SHARED_HW_CFG_PORT_MODE_MASK 0x01000000 260*4882a593Smuzhiyun #define SHARED_HW_CFG_PORT_MODE_2 0x00000000 261*4882a593Smuzhiyun #define SHARED_HW_CFG_PORT_MODE_4 0x01000000 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun #define SHARED_HW_CFG_PATH_SWAP_MASK 0x02000000 264*4882a593Smuzhiyun #define SHARED_HW_CFG_PATH_SWAP_DISABLED 0x00000000 265*4882a593Smuzhiyun #define SHARED_HW_CFG_PATH_SWAP_ENABLED 0x02000000 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun /* Set the MDC/MDIO access for the first external phy */ 268*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS1_MASK 0x1C000000 269*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS1_SHIFT 26 270*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS1_PHY_TYPE 0x00000000 271*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS1_EMAC0 0x04000000 272*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS1_EMAC1 0x08000000 273*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS1_BOTH 0x0c000000 274*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS1_SWAPPED 0x10000000 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun /* Set the MDC/MDIO access for the second external phy */ 277*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS2_MASK 0xE0000000 278*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS2_SHIFT 29 279*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS2_PHY_TYPE 0x00000000 280*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS2_EMAC0 0x20000000 281*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS2_EMAC1 0x40000000 282*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS2_BOTH 0x60000000 283*4882a593Smuzhiyun #define SHARED_HW_CFG_MDC_MDIO_ACCESS2_SWAPPED 0x80000000 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun u32 config_3; /* 0x11C */ 286*4882a593Smuzhiyun #define SHARED_HW_CFG_EXTENDED_MF_MODE_MASK 0x00000F00 287*4882a593Smuzhiyun #define SHARED_HW_CFG_EXTENDED_MF_MODE_SHIFT 8 288*4882a593Smuzhiyun #define SHARED_HW_CFG_EXTENDED_MF_MODE_NPAR1_DOT_5 0x00000000 289*4882a593Smuzhiyun #define SHARED_HW_CFG_EXTENDED_MF_MODE_NPAR2_DOT_0 0x00000100 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun u32 ump_nc_si_config; /* 0x120 */ 292*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_MASK 0x00000003 293*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_SHIFT 0 294*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_MAC 0x00000000 295*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_PHY 0x00000001 296*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_MII 0x00000000 297*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_RMII 0x00000002 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_NUM_DEVS_MASK 0x00000f00 300*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_NUM_DEVS_SHIFT 8 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_MASK 0x00ff0000 303*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_SHIFT 16 304*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_NONE 0x00000000 305*4882a593Smuzhiyun #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_BCM5221 0x00010000 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun u32 board; /* 0x124 */ 308*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_I2C_MUX0_MASK 0x0000003F 309*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_I2C_MUX0_SHIFT 0 310*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_I2C_MUX1_MASK 0x00000FC0 311*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_I2C_MUX1_SHIFT 6 312*4882a593Smuzhiyun /* Use the PIN_CFG_XXX defines on top */ 313*4882a593Smuzhiyun #define SHARED_HW_CFG_BOARD_REV_MASK 0x00ff0000 314*4882a593Smuzhiyun #define SHARED_HW_CFG_BOARD_REV_SHIFT 16 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun #define SHARED_HW_CFG_BOARD_MAJOR_VER_MASK 0x0f000000 317*4882a593Smuzhiyun #define SHARED_HW_CFG_BOARD_MAJOR_VER_SHIFT 24 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun #define SHARED_HW_CFG_BOARD_MINOR_VER_MASK 0xf0000000 320*4882a593Smuzhiyun #define SHARED_HW_CFG_BOARD_MINOR_VER_SHIFT 28 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun u32 wc_lane_config; /* 0x128 */ 323*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_MASK 0x0000FFFF 324*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_SHIFT 0 325*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_32103210 0x00001b1b 326*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_32100123 0x00001be4 327*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_01233210 0x0000e41b 328*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_01230123 0x0000e4e4 329*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_TX_MASK 0x000000FF 330*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_TX_SHIFT 0 331*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_RX_MASK 0x0000FF00 332*4882a593Smuzhiyun #define SHARED_HW_CFG_LANE_SWAP_CFG_RX_SHIFT 8 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun /* TX lane Polarity swap */ 335*4882a593Smuzhiyun #define SHARED_HW_CFG_TX_LANE0_POL_FLIP_ENABLED 0x00010000 336*4882a593Smuzhiyun #define SHARED_HW_CFG_TX_LANE1_POL_FLIP_ENABLED 0x00020000 337*4882a593Smuzhiyun #define SHARED_HW_CFG_TX_LANE2_POL_FLIP_ENABLED 0x00040000 338*4882a593Smuzhiyun #define SHARED_HW_CFG_TX_LANE3_POL_FLIP_ENABLED 0x00080000 339*4882a593Smuzhiyun /* TX lane Polarity swap */ 340*4882a593Smuzhiyun #define SHARED_HW_CFG_RX_LANE0_POL_FLIP_ENABLED 0x00100000 341*4882a593Smuzhiyun #define SHARED_HW_CFG_RX_LANE1_POL_FLIP_ENABLED 0x00200000 342*4882a593Smuzhiyun #define SHARED_HW_CFG_RX_LANE2_POL_FLIP_ENABLED 0x00400000 343*4882a593Smuzhiyun #define SHARED_HW_CFG_RX_LANE3_POL_FLIP_ENABLED 0x00800000 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun /* Selects the port layout of the board */ 346*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_PORT_LAYOUT_MASK 0x0F000000 347*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_PORT_LAYOUT_SHIFT 24 348*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_PORT_LAYOUT_2P_01 0x00000000 349*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_PORT_LAYOUT_2P_10 0x01000000 350*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_PORT_LAYOUT_4P_0123 0x02000000 351*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_PORT_LAYOUT_4P_1032 0x03000000 352*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_PORT_LAYOUT_4P_2301 0x04000000 353*4882a593Smuzhiyun #define SHARED_HW_CFG_E3_PORT_LAYOUT_4P_3210 0x05000000 354*4882a593Smuzhiyun }; 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /**************************************************************************** 358*4882a593Smuzhiyun * Port HW configuration * 359*4882a593Smuzhiyun ****************************************************************************/ 360*4882a593Smuzhiyun struct port_hw_cfg { /* port 0: 0x12c port 1: 0x2bc */ 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun u32 pci_id; 363*4882a593Smuzhiyun #define PORT_HW_CFG_PCI_VENDOR_ID_MASK 0xffff0000 364*4882a593Smuzhiyun #define PORT_HW_CFG_PCI_DEVICE_ID_MASK 0x0000ffff 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun u32 pci_sub_id; 367*4882a593Smuzhiyun #define PORT_HW_CFG_PCI_SUBSYS_DEVICE_ID_MASK 0xffff0000 368*4882a593Smuzhiyun #define PORT_HW_CFG_PCI_SUBSYS_VENDOR_ID_MASK 0x0000ffff 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun u32 power_dissipated; 371*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_DIS_D0_MASK 0x000000ff 372*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_DIS_D0_SHIFT 0 373*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_DIS_D1_MASK 0x0000ff00 374*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_DIS_D1_SHIFT 8 375*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_DIS_D2_MASK 0x00ff0000 376*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_DIS_D2_SHIFT 16 377*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_DIS_D3_MASK 0xff000000 378*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_DIS_D3_SHIFT 24 379*4882a593Smuzhiyun 380*4882a593Smuzhiyun u32 power_consumed; 381*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_CONS_D0_MASK 0x000000ff 382*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_CONS_D0_SHIFT 0 383*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_CONS_D1_MASK 0x0000ff00 384*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_CONS_D1_SHIFT 8 385*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_CONS_D2_MASK 0x00ff0000 386*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_CONS_D2_SHIFT 16 387*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_CONS_D3_MASK 0xff000000 388*4882a593Smuzhiyun #define PORT_HW_CFG_POWER_CONS_D3_SHIFT 24 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun u32 mac_upper; 391*4882a593Smuzhiyun #define PORT_HW_CFG_UPPERMAC_MASK 0x0000ffff 392*4882a593Smuzhiyun #define PORT_HW_CFG_UPPERMAC_SHIFT 0 393*4882a593Smuzhiyun u32 mac_lower; 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun u32 iscsi_mac_upper; /* Upper 16 bits are always zeroes */ 396*4882a593Smuzhiyun u32 iscsi_mac_lower; 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun u32 rdma_mac_upper; /* Upper 16 bits are always zeroes */ 399*4882a593Smuzhiyun u32 rdma_mac_lower; 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun u32 serdes_config; 402*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_TX_DRV_PRE_EMPHASIS_MASK 0x0000ffff 403*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_TX_DRV_PRE_EMPHASIS_SHIFT 0 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_MASK 0xffff0000 406*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_SHIFT 16 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun /* Default values: 2P-64, 4P-32 */ 410*4882a593Smuzhiyun u32 pf_config; /* 0x158 */ 411*4882a593Smuzhiyun #define PORT_HW_CFG_PF_NUM_VF_MASK 0x0000007F 412*4882a593Smuzhiyun #define PORT_HW_CFG_PF_NUM_VF_SHIFT 0 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun /* Default values: 17 */ 415*4882a593Smuzhiyun #define PORT_HW_CFG_PF_NUM_MSIX_VECTORS_MASK 0x00007F00 416*4882a593Smuzhiyun #define PORT_HW_CFG_PF_NUM_MSIX_VECTORS_SHIFT 8 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_FLR_MASK 0x00010000 419*4882a593Smuzhiyun #define PORT_HW_CFG_FLR_ENABLED 0x00010000 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun u32 vf_config; /* 0x15C */ 422*4882a593Smuzhiyun #define PORT_HW_CFG_VF_NUM_MSIX_VECTORS_MASK 0x0000007F 423*4882a593Smuzhiyun #define PORT_HW_CFG_VF_NUM_MSIX_VECTORS_SHIFT 0 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun #define PORT_HW_CFG_VF_PCI_DEVICE_ID_MASK 0xFFFF0000 426*4882a593Smuzhiyun #define PORT_HW_CFG_VF_PCI_DEVICE_ID_SHIFT 16 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun u32 mf_pci_id; /* 0x160 */ 429*4882a593Smuzhiyun #define PORT_HW_CFG_MF_PCI_DEVICE_ID_MASK 0x0000FFFF 430*4882a593Smuzhiyun #define PORT_HW_CFG_MF_PCI_DEVICE_ID_SHIFT 0 431*4882a593Smuzhiyun 432*4882a593Smuzhiyun /* Controls the TX laser of the SFP+ module */ 433*4882a593Smuzhiyun u32 sfp_ctrl; /* 0x164 */ 434*4882a593Smuzhiyun #define PORT_HW_CFG_TX_LASER_MASK 0x000000FF 435*4882a593Smuzhiyun #define PORT_HW_CFG_TX_LASER_SHIFT 0 436*4882a593Smuzhiyun #define PORT_HW_CFG_TX_LASER_MDIO 0x00000000 437*4882a593Smuzhiyun #define PORT_HW_CFG_TX_LASER_GPIO0 0x00000001 438*4882a593Smuzhiyun #define PORT_HW_CFG_TX_LASER_GPIO1 0x00000002 439*4882a593Smuzhiyun #define PORT_HW_CFG_TX_LASER_GPIO2 0x00000003 440*4882a593Smuzhiyun #define PORT_HW_CFG_TX_LASER_GPIO3 0x00000004 441*4882a593Smuzhiyun 442*4882a593Smuzhiyun /* Controls the fault module LED of the SFP+ */ 443*4882a593Smuzhiyun #define PORT_HW_CFG_FAULT_MODULE_LED_MASK 0x0000FF00 444*4882a593Smuzhiyun #define PORT_HW_CFG_FAULT_MODULE_LED_SHIFT 8 445*4882a593Smuzhiyun #define PORT_HW_CFG_FAULT_MODULE_LED_GPIO0 0x00000000 446*4882a593Smuzhiyun #define PORT_HW_CFG_FAULT_MODULE_LED_GPIO1 0x00000100 447*4882a593Smuzhiyun #define PORT_HW_CFG_FAULT_MODULE_LED_GPIO2 0x00000200 448*4882a593Smuzhiyun #define PORT_HW_CFG_FAULT_MODULE_LED_GPIO3 0x00000300 449*4882a593Smuzhiyun #define PORT_HW_CFG_FAULT_MODULE_LED_DISABLED 0x00000400 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun /* The output pin TX_DIS that controls the TX laser of the SFP+ 452*4882a593Smuzhiyun module. Use the PIN_CFG_XXX defines on top */ 453*4882a593Smuzhiyun u32 e3_sfp_ctrl; /* 0x168 */ 454*4882a593Smuzhiyun #define PORT_HW_CFG_E3_TX_LASER_MASK 0x000000FF 455*4882a593Smuzhiyun #define PORT_HW_CFG_E3_TX_LASER_SHIFT 0 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun /* The output pin for SFPP_TYPE which turns on the Fault module LED */ 458*4882a593Smuzhiyun #define PORT_HW_CFG_E3_FAULT_MDL_LED_MASK 0x0000FF00 459*4882a593Smuzhiyun #define PORT_HW_CFG_E3_FAULT_MDL_LED_SHIFT 8 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun /* The input pin MOD_ABS that indicates whether SFP+ module is 462*4882a593Smuzhiyun present or not. Use the PIN_CFG_XXX defines on top */ 463*4882a593Smuzhiyun #define PORT_HW_CFG_E3_MOD_ABS_MASK 0x00FF0000 464*4882a593Smuzhiyun #define PORT_HW_CFG_E3_MOD_ABS_SHIFT 16 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun /* The output pin PWRDIS_SFP_X which disable the power of the SFP+ 467*4882a593Smuzhiyun module. Use the PIN_CFG_XXX defines on top */ 468*4882a593Smuzhiyun #define PORT_HW_CFG_E3_PWR_DIS_MASK 0xFF000000 469*4882a593Smuzhiyun #define PORT_HW_CFG_E3_PWR_DIS_SHIFT 24 470*4882a593Smuzhiyun 471*4882a593Smuzhiyun /* 472*4882a593Smuzhiyun * The input pin which signals module transmit fault. Use the 473*4882a593Smuzhiyun * PIN_CFG_XXX defines on top 474*4882a593Smuzhiyun */ 475*4882a593Smuzhiyun u32 e3_cmn_pin_cfg; /* 0x16C */ 476*4882a593Smuzhiyun #define PORT_HW_CFG_E3_TX_FAULT_MASK 0x000000FF 477*4882a593Smuzhiyun #define PORT_HW_CFG_E3_TX_FAULT_SHIFT 0 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun /* The output pin which reset the PHY. Use the PIN_CFG_XXX defines on 480*4882a593Smuzhiyun top */ 481*4882a593Smuzhiyun #define PORT_HW_CFG_E3_PHY_RESET_MASK 0x0000FF00 482*4882a593Smuzhiyun #define PORT_HW_CFG_E3_PHY_RESET_SHIFT 8 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun /* 485*4882a593Smuzhiyun * The output pin which powers down the PHY. Use the PIN_CFG_XXX 486*4882a593Smuzhiyun * defines on top 487*4882a593Smuzhiyun */ 488*4882a593Smuzhiyun #define PORT_HW_CFG_E3_PWR_DOWN_MASK 0x00FF0000 489*4882a593Smuzhiyun #define PORT_HW_CFG_E3_PWR_DOWN_SHIFT 16 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun /* The output pin values BSC_SEL which selects the I2C for this port 492*4882a593Smuzhiyun in the I2C Mux */ 493*4882a593Smuzhiyun #define PORT_HW_CFG_E3_I2C_MUX0_MASK 0x01000000 494*4882a593Smuzhiyun #define PORT_HW_CFG_E3_I2C_MUX1_MASK 0x02000000 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun /* 498*4882a593Smuzhiyun * The input pin I_FAULT which indicate over-current has occurred. 499*4882a593Smuzhiyun * Use the PIN_CFG_XXX defines on top 500*4882a593Smuzhiyun */ 501*4882a593Smuzhiyun u32 e3_cmn_pin_cfg1; /* 0x170 */ 502*4882a593Smuzhiyun #define PORT_HW_CFG_E3_OVER_CURRENT_MASK 0x000000FF 503*4882a593Smuzhiyun #define PORT_HW_CFG_E3_OVER_CURRENT_SHIFT 0 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun /* pause on host ring */ 506*4882a593Smuzhiyun u32 generic_features; /* 0x174 */ 507*4882a593Smuzhiyun #define PORT_HW_CFG_PAUSE_ON_HOST_RING_MASK 0x00000001 508*4882a593Smuzhiyun #define PORT_HW_CFG_PAUSE_ON_HOST_RING_SHIFT 0 509*4882a593Smuzhiyun #define PORT_HW_CFG_PAUSE_ON_HOST_RING_DISABLED 0x00000000 510*4882a593Smuzhiyun #define PORT_HW_CFG_PAUSE_ON_HOST_RING_ENABLED 0x00000001 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun /* SFP+ Tx Equalization: NIC recommended and tested value is 0xBEB2 513*4882a593Smuzhiyun * LOM recommended and tested value is 0xBEB2. Using a different 514*4882a593Smuzhiyun * value means using a value not tested by BRCM 515*4882a593Smuzhiyun */ 516*4882a593Smuzhiyun u32 sfi_tap_values; /* 0x178 */ 517*4882a593Smuzhiyun #define PORT_HW_CFG_TX_EQUALIZATION_MASK 0x0000FFFF 518*4882a593Smuzhiyun #define PORT_HW_CFG_TX_EQUALIZATION_SHIFT 0 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun /* SFP+ Tx driver broadcast IDRIVER: NIC recommended and tested 521*4882a593Smuzhiyun * value is 0x2. LOM recommended and tested value is 0x2. Using a 522*4882a593Smuzhiyun * different value means using a value not tested by BRCM 523*4882a593Smuzhiyun */ 524*4882a593Smuzhiyun #define PORT_HW_CFG_TX_DRV_BROADCAST_MASK 0x000F0000 525*4882a593Smuzhiyun #define PORT_HW_CFG_TX_DRV_BROADCAST_SHIFT 16 526*4882a593Smuzhiyun /* Set non-default values for TXFIR in SFP mode. */ 527*4882a593Smuzhiyun #define PORT_HW_CFG_TX_DRV_IFIR_MASK 0x00F00000 528*4882a593Smuzhiyun #define PORT_HW_CFG_TX_DRV_IFIR_SHIFT 20 529*4882a593Smuzhiyun 530*4882a593Smuzhiyun /* Set non-default values for IPREDRIVER in SFP mode. */ 531*4882a593Smuzhiyun #define PORT_HW_CFG_TX_DRV_IPREDRIVER_MASK 0x0F000000 532*4882a593Smuzhiyun #define PORT_HW_CFG_TX_DRV_IPREDRIVER_SHIFT 24 533*4882a593Smuzhiyun 534*4882a593Smuzhiyun /* Set non-default values for POST2 in SFP mode. */ 535*4882a593Smuzhiyun #define PORT_HW_CFG_TX_DRV_POST2_MASK 0xF0000000 536*4882a593Smuzhiyun #define PORT_HW_CFG_TX_DRV_POST2_SHIFT 28 537*4882a593Smuzhiyun 538*4882a593Smuzhiyun u32 reserved0[5]; /* 0x17c */ 539*4882a593Smuzhiyun 540*4882a593Smuzhiyun u32 aeu_int_mask; /* 0x190 */ 541*4882a593Smuzhiyun 542*4882a593Smuzhiyun u32 media_type; /* 0x194 */ 543*4882a593Smuzhiyun #define PORT_HW_CFG_MEDIA_TYPE_PHY0_MASK 0x000000FF 544*4882a593Smuzhiyun #define PORT_HW_CFG_MEDIA_TYPE_PHY0_SHIFT 0 545*4882a593Smuzhiyun 546*4882a593Smuzhiyun #define PORT_HW_CFG_MEDIA_TYPE_PHY1_MASK 0x0000FF00 547*4882a593Smuzhiyun #define PORT_HW_CFG_MEDIA_TYPE_PHY1_SHIFT 8 548*4882a593Smuzhiyun 549*4882a593Smuzhiyun #define PORT_HW_CFG_MEDIA_TYPE_PHY2_MASK 0x00FF0000 550*4882a593Smuzhiyun #define PORT_HW_CFG_MEDIA_TYPE_PHY2_SHIFT 16 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun /* 4 times 16 bits for all 4 lanes. In case external PHY is present 553*4882a593Smuzhiyun (not direct mode), those values will not take effect on the 4 XGXS 554*4882a593Smuzhiyun lanes. For some external PHYs (such as 8706 and 8726) the values 555*4882a593Smuzhiyun will be used to configure the external PHY in those cases, not 556*4882a593Smuzhiyun all 4 values are needed. */ 557*4882a593Smuzhiyun u16 xgxs_config_rx[4]; /* 0x198 */ 558*4882a593Smuzhiyun u16 xgxs_config_tx[4]; /* 0x1A0 */ 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun /* For storing FCOE mac on shared memory */ 561*4882a593Smuzhiyun u32 fcoe_fip_mac_upper; 562*4882a593Smuzhiyun #define PORT_HW_CFG_FCOE_UPPERMAC_MASK 0x0000ffff 563*4882a593Smuzhiyun #define PORT_HW_CFG_FCOE_UPPERMAC_SHIFT 0 564*4882a593Smuzhiyun u32 fcoe_fip_mac_lower; 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun u32 fcoe_wwn_port_name_upper; 567*4882a593Smuzhiyun u32 fcoe_wwn_port_name_lower; 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun u32 fcoe_wwn_node_name_upper; 570*4882a593Smuzhiyun u32 fcoe_wwn_node_name_lower; 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun u32 Reserved1[49]; /* 0x1C0 */ 573*4882a593Smuzhiyun 574*4882a593Smuzhiyun /* Enable RJ45 magjack pair swapping on 10GBase-T PHY (0=default), 575*4882a593Smuzhiyun 84833 only */ 576*4882a593Smuzhiyun u32 xgbt_phy_cfg; /* 0x284 */ 577*4882a593Smuzhiyun #define PORT_HW_CFG_RJ45_PAIR_SWAP_MASK 0x000000FF 578*4882a593Smuzhiyun #define PORT_HW_CFG_RJ45_PAIR_SWAP_SHIFT 0 579*4882a593Smuzhiyun 580*4882a593Smuzhiyun u32 default_cfg; /* 0x288 */ 581*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO0_CONFIG_MASK 0x00000003 582*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO0_CONFIG_SHIFT 0 583*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO0_CONFIG_NA 0x00000000 584*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO0_CONFIG_LOW 0x00000001 585*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO0_CONFIG_HIGH 0x00000002 586*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO0_CONFIG_INPUT 0x00000003 587*4882a593Smuzhiyun 588*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO1_CONFIG_MASK 0x0000000C 589*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO1_CONFIG_SHIFT 2 590*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO1_CONFIG_NA 0x00000000 591*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO1_CONFIG_LOW 0x00000004 592*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO1_CONFIG_HIGH 0x00000008 593*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO1_CONFIG_INPUT 0x0000000c 594*4882a593Smuzhiyun 595*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO2_CONFIG_MASK 0x00000030 596*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO2_CONFIG_SHIFT 4 597*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO2_CONFIG_NA 0x00000000 598*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO2_CONFIG_LOW 0x00000010 599*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO2_CONFIG_HIGH 0x00000020 600*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO2_CONFIG_INPUT 0x00000030 601*4882a593Smuzhiyun 602*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO3_CONFIG_MASK 0x000000C0 603*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO3_CONFIG_SHIFT 6 604*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO3_CONFIG_NA 0x00000000 605*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO3_CONFIG_LOW 0x00000040 606*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO3_CONFIG_HIGH 0x00000080 607*4882a593Smuzhiyun #define PORT_HW_CFG_GPIO3_CONFIG_INPUT 0x000000c0 608*4882a593Smuzhiyun 609*4882a593Smuzhiyun /* When KR link is required to be set to force which is not 610*4882a593Smuzhiyun KR-compliant, this parameter determine what is the trigger for it. 611*4882a593Smuzhiyun When GPIO is selected, low input will force the speed. Currently 612*4882a593Smuzhiyun default speed is 1G. In the future, it may be widen to select the 613*4882a593Smuzhiyun forced speed in with another parameter. Note when force-1G is 614*4882a593Smuzhiyun enabled, it override option 56: Link Speed option. */ 615*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_MASK 0x00000F00 616*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_SHIFT 8 617*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_NOT_FORCED 0x00000000 618*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_GPIO0_P0 0x00000100 619*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_GPIO1_P0 0x00000200 620*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_GPIO2_P0 0x00000300 621*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_GPIO3_P0 0x00000400 622*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_GPIO0_P1 0x00000500 623*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_GPIO1_P1 0x00000600 624*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_GPIO2_P1 0x00000700 625*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_GPIO3_P1 0x00000800 626*4882a593Smuzhiyun #define PORT_HW_CFG_FORCE_KR_ENABLER_FORCED 0x00000900 627*4882a593Smuzhiyun /* Enable to determine with which GPIO to reset the external phy */ 628*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_MASK 0x000F0000 629*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_SHIFT 16 630*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_PHY_TYPE 0x00000000 631*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO0_P0 0x00010000 632*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO1_P0 0x00020000 633*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO2_P0 0x00030000 634*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO3_P0 0x00040000 635*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO0_P1 0x00050000 636*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO1_P1 0x00060000 637*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO2_P1 0x00070000 638*4882a593Smuzhiyun #define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO3_P1 0x00080000 639*4882a593Smuzhiyun 640*4882a593Smuzhiyun /* Enable BAM on KR */ 641*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_BAM_ON_KR_MASK 0x00100000 642*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_BAM_ON_KR_SHIFT 20 643*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_BAM_ON_KR_DISABLED 0x00000000 644*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_BAM_ON_KR_ENABLED 0x00100000 645*4882a593Smuzhiyun 646*4882a593Smuzhiyun /* Enable Common Mode Sense */ 647*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_CMS_MASK 0x00200000 648*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_CMS_SHIFT 21 649*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_CMS_DISABLED 0x00000000 650*4882a593Smuzhiyun #define PORT_HW_CFG_ENABLE_CMS_ENABLED 0x00200000 651*4882a593Smuzhiyun 652*4882a593Smuzhiyun /* Determine the Serdes electrical interface */ 653*4882a593Smuzhiyun #define PORT_HW_CFG_NET_SERDES_IF_MASK 0x0F000000 654*4882a593Smuzhiyun #define PORT_HW_CFG_NET_SERDES_IF_SHIFT 24 655*4882a593Smuzhiyun #define PORT_HW_CFG_NET_SERDES_IF_SGMII 0x00000000 656*4882a593Smuzhiyun #define PORT_HW_CFG_NET_SERDES_IF_XFI 0x01000000 657*4882a593Smuzhiyun #define PORT_HW_CFG_NET_SERDES_IF_SFI 0x02000000 658*4882a593Smuzhiyun #define PORT_HW_CFG_NET_SERDES_IF_KR 0x03000000 659*4882a593Smuzhiyun #define PORT_HW_CFG_NET_SERDES_IF_DXGXS 0x04000000 660*4882a593Smuzhiyun #define PORT_HW_CFG_NET_SERDES_IF_KR2 0x05000000 661*4882a593Smuzhiyun 662*4882a593Smuzhiyun 663*4882a593Smuzhiyun u32 speed_capability_mask2; /* 0x28C */ 664*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3_MASK 0x0000FFFF 665*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3_SHIFT 0 666*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3_10M_FULL 0x00000001 667*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3__ 0x00000002 668*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3___ 0x00000004 669*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3_100M_FULL 0x00000008 670*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3_1G 0x00000010 671*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3_2_DOT_5G 0x00000020 672*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3_10G 0x00000040 673*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D3_20G 0x00000080 674*4882a593Smuzhiyun 675*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0_MASK 0xFFFF0000 676*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0_SHIFT 16 677*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0_10M_FULL 0x00010000 678*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0__ 0x00020000 679*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0___ 0x00040000 680*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0_100M_FULL 0x00080000 681*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0_1G 0x00100000 682*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0_2_DOT_5G 0x00200000 683*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0_10G 0x00400000 684*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY2_D0_20G 0x00800000 685*4882a593Smuzhiyun 686*4882a593Smuzhiyun 687*4882a593Smuzhiyun /* In the case where two media types (e.g. copper and fiber) are 688*4882a593Smuzhiyun present and electrically active at the same time, PHY Selection 689*4882a593Smuzhiyun will determine which of the two PHYs will be designated as the 690*4882a593Smuzhiyun Active PHY and used for a connection to the network. */ 691*4882a593Smuzhiyun u32 multi_phy_config; /* 0x290 */ 692*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SELECTION_MASK 0x00000007 693*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SELECTION_SHIFT 0 694*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SELECTION_HARDWARE_DEFAULT 0x00000000 695*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SELECTION_FIRST_PHY 0x00000001 696*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SELECTION_SECOND_PHY 0x00000002 697*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SELECTION_FIRST_PHY_PRIORITY 0x00000003 698*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SELECTION_SECOND_PHY_PRIORITY 0x00000004 699*4882a593Smuzhiyun 700*4882a593Smuzhiyun /* When enabled, all second phy nvram parameters will be swapped 701*4882a593Smuzhiyun with the first phy parameters */ 702*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SWAPPED_MASK 0x00000008 703*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SWAPPED_SHIFT 3 704*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SWAPPED_DISABLED 0x00000000 705*4882a593Smuzhiyun #define PORT_HW_CFG_PHY_SWAPPED_ENABLED 0x00000008 706*4882a593Smuzhiyun 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun /* Address of the second external phy */ 709*4882a593Smuzhiyun u32 external_phy_config2; /* 0x294 */ 710*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_ADDR_MASK 0x000000FF 711*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_ADDR_SHIFT 0 712*4882a593Smuzhiyun 713*4882a593Smuzhiyun /* The second XGXS external PHY type */ 714*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_MASK 0x0000FF00 715*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_SHIFT 8 716*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_DIRECT 0x00000000 717*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8071 0x00000100 718*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8072 0x00000200 719*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8073 0x00000300 720*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8705 0x00000400 721*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8706 0x00000500 722*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8726 0x00000600 723*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8481 0x00000700 724*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_SFX7101 0x00000800 725*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8727 0x00000900 726*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8727_NOC 0x00000a00 727*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM84823 0x00000b00 728*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM54640 0x00000c00 729*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM84833 0x00000d00 730*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM54618SE 0x00000e00 731*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8722 0x00000f00 732*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM54616 0x00001000 733*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM84834 0x00001100 734*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM84858 0x00001200 735*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_FAILURE 0x0000fd00 736*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_NOT_CONN 0x0000ff00 737*4882a593Smuzhiyun 738*4882a593Smuzhiyun 739*4882a593Smuzhiyun /* 4 times 16 bits for all 4 lanes. For some external PHYs (such as 740*4882a593Smuzhiyun 8706, 8726 and 8727) not all 4 values are needed. */ 741*4882a593Smuzhiyun u16 xgxs_config2_rx[4]; /* 0x296 */ 742*4882a593Smuzhiyun u16 xgxs_config2_tx[4]; /* 0x2A0 */ 743*4882a593Smuzhiyun 744*4882a593Smuzhiyun u32 lane_config; 745*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_MASK 0x0000ffff 746*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_SHIFT 0 747*4882a593Smuzhiyun /* AN and forced */ 748*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_01230123 0x00001b1b 749*4882a593Smuzhiyun /* forced only */ 750*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_01233210 0x00001be4 751*4882a593Smuzhiyun /* forced only */ 752*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_31203120 0x0000d8d8 753*4882a593Smuzhiyun /* forced only */ 754*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_32103210 0x0000e4e4 755*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_TX_MASK 0x000000ff 756*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_TX_SHIFT 0 757*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_RX_MASK 0x0000ff00 758*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_RX_SHIFT 8 759*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK 0x0000c000 760*4882a593Smuzhiyun #define PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT 14 761*4882a593Smuzhiyun 762*4882a593Smuzhiyun /* Indicate whether to swap the external phy polarity */ 763*4882a593Smuzhiyun #define PORT_HW_CFG_SWAP_PHY_POLARITY_MASK 0x00010000 764*4882a593Smuzhiyun #define PORT_HW_CFG_SWAP_PHY_POLARITY_DISABLED 0x00000000 765*4882a593Smuzhiyun #define PORT_HW_CFG_SWAP_PHY_POLARITY_ENABLED 0x00010000 766*4882a593Smuzhiyun 767*4882a593Smuzhiyun 768*4882a593Smuzhiyun u32 external_phy_config; 769*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK 0x000000ff 770*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT 0 771*4882a593Smuzhiyun 772*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK 0x0000ff00 773*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SHIFT 8 774*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT 0x00000000 775*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8071 0x00000100 776*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072 0x00000200 777*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073 0x00000300 778*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705 0x00000400 779*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706 0x00000500 780*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726 0x00000600 781*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481 0x00000700 782*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101 0x00000800 783*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727 0x00000900 784*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727_NOC 0x00000a00 785*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823 0x00000b00 786*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54640 0x00000c00 787*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833 0x00000d00 788*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54618SE 0x00000e00 789*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8722 0x00000f00 790*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54616 0x00001000 791*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84834 0x00001100 792*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84858 0x00001200 793*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT_WC 0x0000fc00 794*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE 0x0000fd00 795*4882a593Smuzhiyun #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN 0x0000ff00 796*4882a593Smuzhiyun 797*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_EXT_PHY_ADDR_MASK 0x00ff0000 798*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_EXT_PHY_ADDR_SHIFT 16 799*4882a593Smuzhiyun 800*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK 0xff000000 801*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_SHIFT 24 802*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT 0x00000000 803*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482 0x01000000 804*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT_SD 0x02000000 805*4882a593Smuzhiyun #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_NOT_CONN 0xff000000 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun u32 speed_capability_mask; 808*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_MASK 0x0000ffff 809*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_SHIFT 0 810*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_10M_FULL 0x00000001 811*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_10M_HALF 0x00000002 812*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_100M_HALF 0x00000004 813*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_100M_FULL 0x00000008 814*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_1G 0x00000010 815*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_2_5G 0x00000020 816*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_10G 0x00000040 817*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_20G 0x00000080 818*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D3_RESERVED 0x0000f000 819*4882a593Smuzhiyun 820*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_MASK 0xffff0000 821*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_SHIFT 16 822*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL 0x00010000 823*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF 0x00020000 824*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF 0x00040000 825*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL 0x00080000 826*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_1G 0x00100000 827*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G 0x00200000 828*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_10G 0x00400000 829*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_20G 0x00800000 830*4882a593Smuzhiyun #define PORT_HW_CFG_SPEED_CAPABILITY_D0_RESERVED 0xf0000000 831*4882a593Smuzhiyun 832*4882a593Smuzhiyun /* A place to hold the original MAC address as a backup */ 833*4882a593Smuzhiyun u32 backup_mac_upper; /* 0x2B4 */ 834*4882a593Smuzhiyun u32 backup_mac_lower; /* 0x2B8 */ 835*4882a593Smuzhiyun 836*4882a593Smuzhiyun }; 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun 839*4882a593Smuzhiyun /**************************************************************************** 840*4882a593Smuzhiyun * Shared Feature configuration * 841*4882a593Smuzhiyun ****************************************************************************/ 842*4882a593Smuzhiyun struct shared_feat_cfg { /* NVRAM Offset */ 843*4882a593Smuzhiyun 844*4882a593Smuzhiyun u32 config; /* 0x450 */ 845*4882a593Smuzhiyun #define SHARED_FEATURE_BMC_ECHO_MODE_EN 0x00000001 846*4882a593Smuzhiyun 847*4882a593Smuzhiyun /* Use NVRAM values instead of HW default values */ 848*4882a593Smuzhiyun #define SHARED_FEAT_CFG_OVERRIDE_PREEMPHASIS_CFG_MASK \ 849*4882a593Smuzhiyun 0x00000002 850*4882a593Smuzhiyun #define SHARED_FEAT_CFG_OVERRIDE_PREEMPHASIS_CFG_DISABLED \ 851*4882a593Smuzhiyun 0x00000000 852*4882a593Smuzhiyun #define SHARED_FEAT_CFG_OVERRIDE_PREEMPHASIS_CFG_ENABLED \ 853*4882a593Smuzhiyun 0x00000002 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun #define SHARED_FEAT_CFG_NCSI_ID_METHOD_MASK 0x00000008 856*4882a593Smuzhiyun #define SHARED_FEAT_CFG_NCSI_ID_METHOD_SPIO 0x00000000 857*4882a593Smuzhiyun #define SHARED_FEAT_CFG_NCSI_ID_METHOD_NVRAM 0x00000008 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun #define SHARED_FEAT_CFG_NCSI_ID_MASK 0x00000030 860*4882a593Smuzhiyun #define SHARED_FEAT_CFG_NCSI_ID_SHIFT 4 861*4882a593Smuzhiyun 862*4882a593Smuzhiyun /* Override the OTP back to single function mode. When using GPIO, 863*4882a593Smuzhiyun high means only SF, 0 is according to CLP configuration */ 864*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_MASK 0x00000700 865*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_SHIFT 8 866*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_MF_ALLOWED 0x00000000 867*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_FORCED_SF 0x00000100 868*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_SPIO4 0x00000200 869*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_SWITCH_INDEPT 0x00000300 870*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_AFEX_MODE 0x00000400 871*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_BD_MODE 0x00000500 872*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_UFP_MODE 0x00000600 873*4882a593Smuzhiyun #define SHARED_FEAT_CFG_FORCE_SF_MODE_EXTENDED_MODE 0x00000700 874*4882a593Smuzhiyun 875*4882a593Smuzhiyun /* The interval in seconds between sending LLDP packets. Set to zero 876*4882a593Smuzhiyun to disable the feature */ 877*4882a593Smuzhiyun #define SHARED_FEAT_CFG_LLDP_XMIT_INTERVAL_MASK 0x00ff0000 878*4882a593Smuzhiyun #define SHARED_FEAT_CFG_LLDP_XMIT_INTERVAL_SHIFT 16 879*4882a593Smuzhiyun 880*4882a593Smuzhiyun /* The assigned device type ID for LLDP usage */ 881*4882a593Smuzhiyun #define SHARED_FEAT_CFG_LLDP_DEVICE_TYPE_ID_MASK 0xff000000 882*4882a593Smuzhiyun #define SHARED_FEAT_CFG_LLDP_DEVICE_TYPE_ID_SHIFT 24 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun }; 885*4882a593Smuzhiyun 886*4882a593Smuzhiyun 887*4882a593Smuzhiyun /**************************************************************************** 888*4882a593Smuzhiyun * Port Feature configuration * 889*4882a593Smuzhiyun ****************************************************************************/ 890*4882a593Smuzhiyun struct port_feat_cfg { /* port 0: 0x454 port 1: 0x4c8 */ 891*4882a593Smuzhiyun 892*4882a593Smuzhiyun u32 config; 893*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_MASK 0x0000000f 894*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_SHIFT 0 895*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_DISABLED 0x00000000 896*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_64K 0x00000001 897*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_128K 0x00000002 898*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_256K 0x00000003 899*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_512K 0x00000004 900*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_1M 0x00000005 901*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_2M 0x00000006 902*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_4M 0x00000007 903*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_8M 0x00000008 904*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_16M 0x00000009 905*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_32M 0x0000000a 906*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_64M 0x0000000b 907*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_128M 0x0000000c 908*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_256M 0x0000000d 909*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_512M 0x0000000e 910*4882a593Smuzhiyun #define PORT_FEATURE_BAR1_SIZE_1G 0x0000000f 911*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_MASK 0x000000f0 912*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_SHIFT 4 913*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_DISABLED 0x00000000 914*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_64K 0x00000010 915*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_128K 0x00000020 916*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_256K 0x00000030 917*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_512K 0x00000040 918*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_1M 0x00000050 919*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_2M 0x00000060 920*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_4M 0x00000070 921*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_8M 0x00000080 922*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_16M 0x00000090 923*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_32M 0x000000a0 924*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_64M 0x000000b0 925*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_128M 0x000000c0 926*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_256M 0x000000d0 927*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_512M 0x000000e0 928*4882a593Smuzhiyun #define PORT_FEATURE_BAR2_SIZE_1G 0x000000f0 929*4882a593Smuzhiyun 930*4882a593Smuzhiyun #define PORT_FEAT_CFG_DCBX_MASK 0x00000100 931*4882a593Smuzhiyun #define PORT_FEAT_CFG_DCBX_DISABLED 0x00000000 932*4882a593Smuzhiyun #define PORT_FEAT_CFG_DCBX_ENABLED 0x00000100 933*4882a593Smuzhiyun 934*4882a593Smuzhiyun #define PORT_FEAT_CFG_STORAGE_PERSONALITY_MASK 0x00000C00 935*4882a593Smuzhiyun #define PORT_FEAT_CFG_STORAGE_PERSONALITY_FCOE 0x00000400 936*4882a593Smuzhiyun #define PORT_FEAT_CFG_STORAGE_PERSONALITY_ISCSI 0x00000800 937*4882a593Smuzhiyun 938*4882a593Smuzhiyun #define PORT_FEATURE_EN_SIZE_MASK 0x0f000000 939*4882a593Smuzhiyun #define PORT_FEATURE_EN_SIZE_SHIFT 24 940*4882a593Smuzhiyun #define PORT_FEATURE_WOL_ENABLED 0x01000000 941*4882a593Smuzhiyun #define PORT_FEATURE_MBA_ENABLED 0x02000000 942*4882a593Smuzhiyun #define PORT_FEATURE_MFW_ENABLED 0x04000000 943*4882a593Smuzhiyun 944*4882a593Smuzhiyun /* Advertise expansion ROM even if MBA is disabled */ 945*4882a593Smuzhiyun #define PORT_FEAT_CFG_FORCE_EXP_ROM_ADV_MASK 0x08000000 946*4882a593Smuzhiyun #define PORT_FEAT_CFG_FORCE_EXP_ROM_ADV_DISABLED 0x00000000 947*4882a593Smuzhiyun #define PORT_FEAT_CFG_FORCE_EXP_ROM_ADV_ENABLED 0x08000000 948*4882a593Smuzhiyun 949*4882a593Smuzhiyun /* Check the optic vendor via i2c against a list of approved modules 950*4882a593Smuzhiyun in a separate nvram image */ 951*4882a593Smuzhiyun #define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_MASK 0xe0000000 952*4882a593Smuzhiyun #define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_SHIFT 29 953*4882a593Smuzhiyun #define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_NO_ENFORCEMENT \ 954*4882a593Smuzhiyun 0x00000000 955*4882a593Smuzhiyun #define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_DISABLE_TX_LASER \ 956*4882a593Smuzhiyun 0x20000000 957*4882a593Smuzhiyun #define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_WARNING_MSG 0x40000000 958*4882a593Smuzhiyun #define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_POWER_DOWN 0x60000000 959*4882a593Smuzhiyun 960*4882a593Smuzhiyun u32 wol_config; 961*4882a593Smuzhiyun /* Default is used when driver sets to "auto" mode */ 962*4882a593Smuzhiyun #define PORT_FEATURE_WOL_DEFAULT_MASK 0x00000003 963*4882a593Smuzhiyun #define PORT_FEATURE_WOL_DEFAULT_SHIFT 0 964*4882a593Smuzhiyun #define PORT_FEATURE_WOL_DEFAULT_DISABLE 0x00000000 965*4882a593Smuzhiyun #define PORT_FEATURE_WOL_DEFAULT_MAGIC 0x00000001 966*4882a593Smuzhiyun #define PORT_FEATURE_WOL_DEFAULT_ACPI 0x00000002 967*4882a593Smuzhiyun #define PORT_FEATURE_WOL_DEFAULT_MAGIC_AND_ACPI 0x00000003 968*4882a593Smuzhiyun #define PORT_FEATURE_WOL_RES_PAUSE_CAP 0x00000004 969*4882a593Smuzhiyun #define PORT_FEATURE_WOL_RES_ASYM_PAUSE_CAP 0x00000008 970*4882a593Smuzhiyun #define PORT_FEATURE_WOL_ACPI_UPON_MGMT 0x00000010 971*4882a593Smuzhiyun 972*4882a593Smuzhiyun u32 mba_config; 973*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK 0x00000007 974*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_SHIFT 0 975*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_PXE 0x00000000 976*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_RPL 0x00000001 977*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_BOOTP 0x00000002 978*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_ISCSIB 0x00000003 979*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_FCOE_BOOT 0x00000004 980*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_NONE 0x00000007 981*4882a593Smuzhiyun 982*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_RETRY_MASK 0x00000038 983*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BOOT_RETRY_SHIFT 3 984*4882a593Smuzhiyun 985*4882a593Smuzhiyun #define PORT_FEATURE_MBA_RES_PAUSE_CAP 0x00000100 986*4882a593Smuzhiyun #define PORT_FEATURE_MBA_RES_ASYM_PAUSE_CAP 0x00000200 987*4882a593Smuzhiyun #define PORT_FEATURE_MBA_SETUP_PROMPT_ENABLE 0x00000400 988*4882a593Smuzhiyun #define PORT_FEATURE_MBA_HOTKEY_MASK 0x00000800 989*4882a593Smuzhiyun #define PORT_FEATURE_MBA_HOTKEY_CTRL_S 0x00000000 990*4882a593Smuzhiyun #define PORT_FEATURE_MBA_HOTKEY_CTRL_B 0x00000800 991*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_MASK 0x000ff000 992*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_SHIFT 12 993*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_DISABLED 0x00000000 994*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_2K 0x00001000 995*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_4K 0x00002000 996*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_8K 0x00003000 997*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_16K 0x00004000 998*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_32K 0x00005000 999*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_64K 0x00006000 1000*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_128K 0x00007000 1001*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_256K 0x00008000 1002*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_512K 0x00009000 1003*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_1M 0x0000a000 1004*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_2M 0x0000b000 1005*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_4M 0x0000c000 1006*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_8M 0x0000d000 1007*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_16M 0x0000e000 1008*4882a593Smuzhiyun #define PORT_FEATURE_MBA_EXP_ROM_SIZE_32M 0x0000f000 1009*4882a593Smuzhiyun #define PORT_FEATURE_MBA_MSG_TIMEOUT_MASK 0x00f00000 1010*4882a593Smuzhiyun #define PORT_FEATURE_MBA_MSG_TIMEOUT_SHIFT 20 1011*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_MASK 0x03000000 1012*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_SHIFT 24 1013*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_AUTO 0x00000000 1014*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_BBS 0x01000000 1015*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_INT18H 0x02000000 1016*4882a593Smuzhiyun #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_INT19H 0x03000000 1017*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_MASK 0x3c000000 1018*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_SHIFT 26 1019*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_AUTO 0x00000000 1020*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_10HD 0x04000000 1021*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_10FD 0x08000000 1022*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_100HD 0x0c000000 1023*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_100FD 0x10000000 1024*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_1GBPS 0x14000000 1025*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_2_5GBPS 0x18000000 1026*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_10GBPS_CX4 0x1c000000 1027*4882a593Smuzhiyun #define PORT_FEATURE_MBA_LINK_SPEED_20GBPS 0x20000000 1028*4882a593Smuzhiyun u32 bmc_config; 1029*4882a593Smuzhiyun #define PORT_FEATURE_BMC_LINK_OVERRIDE_MASK 0x00000001 1030*4882a593Smuzhiyun #define PORT_FEATURE_BMC_LINK_OVERRIDE_DEFAULT 0x00000000 1031*4882a593Smuzhiyun #define PORT_FEATURE_BMC_LINK_OVERRIDE_EN 0x00000001 1032*4882a593Smuzhiyun 1033*4882a593Smuzhiyun u32 mba_vlan_cfg; 1034*4882a593Smuzhiyun #define PORT_FEATURE_MBA_VLAN_TAG_MASK 0x0000ffff 1035*4882a593Smuzhiyun #define PORT_FEATURE_MBA_VLAN_TAG_SHIFT 0 1036*4882a593Smuzhiyun #define PORT_FEATURE_MBA_VLAN_EN 0x00010000 1037*4882a593Smuzhiyun 1038*4882a593Smuzhiyun u32 resource_cfg; 1039*4882a593Smuzhiyun #define PORT_FEATURE_RESOURCE_CFG_VALID 0x00000001 1040*4882a593Smuzhiyun #define PORT_FEATURE_RESOURCE_CFG_DIAG 0x00000002 1041*4882a593Smuzhiyun #define PORT_FEATURE_RESOURCE_CFG_L2 0x00000004 1042*4882a593Smuzhiyun #define PORT_FEATURE_RESOURCE_CFG_ISCSI 0x00000008 1043*4882a593Smuzhiyun #define PORT_FEATURE_RESOURCE_CFG_RDMA 0x00000010 1044*4882a593Smuzhiyun 1045*4882a593Smuzhiyun u32 smbus_config; 1046*4882a593Smuzhiyun #define PORT_FEATURE_SMBUS_ADDR_MASK 0x000000fe 1047*4882a593Smuzhiyun #define PORT_FEATURE_SMBUS_ADDR_SHIFT 1 1048*4882a593Smuzhiyun 1049*4882a593Smuzhiyun u32 vf_config; 1050*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_MASK 0x0000000f 1051*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_SHIFT 0 1052*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_DISABLED 0x00000000 1053*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_4K 0x00000001 1054*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_8K 0x00000002 1055*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_16K 0x00000003 1056*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_32K 0x00000004 1057*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_64K 0x00000005 1058*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_128K 0x00000006 1059*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_256K 0x00000007 1060*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_512K 0x00000008 1061*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_1M 0x00000009 1062*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_2M 0x0000000a 1063*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_4M 0x0000000b 1064*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_8M 0x0000000c 1065*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_16M 0x0000000d 1066*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_32M 0x0000000e 1067*4882a593Smuzhiyun #define PORT_FEAT_CFG_VF_BAR2_SIZE_64M 0x0000000f 1068*4882a593Smuzhiyun 1069*4882a593Smuzhiyun u32 link_config; /* Used as HW defaults for the driver */ 1070*4882a593Smuzhiyun #define PORT_FEATURE_CONNECTED_SWITCH_MASK 0x03000000 1071*4882a593Smuzhiyun #define PORT_FEATURE_CONNECTED_SWITCH_SHIFT 24 1072*4882a593Smuzhiyun /* (forced) low speed switch (< 10G) */ 1073*4882a593Smuzhiyun #define PORT_FEATURE_CON_SWITCH_1G_SWITCH 0x00000000 1074*4882a593Smuzhiyun /* (forced) high speed switch (>= 10G) */ 1075*4882a593Smuzhiyun #define PORT_FEATURE_CON_SWITCH_10G_SWITCH 0x01000000 1076*4882a593Smuzhiyun #define PORT_FEATURE_CON_SWITCH_AUTO_DETECT 0x02000000 1077*4882a593Smuzhiyun #define PORT_FEATURE_CON_SWITCH_ONE_TIME_DETECT 0x03000000 1078*4882a593Smuzhiyun 1079*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_MASK 0x000f0000 1080*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_SHIFT 16 1081*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_AUTO 0x00000000 1082*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_10M_FULL 0x00010000 1083*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_10M_HALF 0x00020000 1084*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_100M_HALF 0x00030000 1085*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_100M_FULL 0x00040000 1086*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_1G 0x00050000 1087*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_2_5G 0x00060000 1088*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_10G_CX4 0x00070000 1089*4882a593Smuzhiyun #define PORT_FEATURE_LINK_SPEED_20G 0x00080000 1090*4882a593Smuzhiyun 1091*4882a593Smuzhiyun #define PORT_FEATURE_FLOW_CONTROL_MASK 0x00000700 1092*4882a593Smuzhiyun #define PORT_FEATURE_FLOW_CONTROL_SHIFT 8 1093*4882a593Smuzhiyun #define PORT_FEATURE_FLOW_CONTROL_AUTO 0x00000000 1094*4882a593Smuzhiyun #define PORT_FEATURE_FLOW_CONTROL_TX 0x00000100 1095*4882a593Smuzhiyun #define PORT_FEATURE_FLOW_CONTROL_RX 0x00000200 1096*4882a593Smuzhiyun #define PORT_FEATURE_FLOW_CONTROL_BOTH 0x00000300 1097*4882a593Smuzhiyun #define PORT_FEATURE_FLOW_CONTROL_NONE 0x00000400 1098*4882a593Smuzhiyun 1099*4882a593Smuzhiyun /* The default for MCP link configuration, 1100*4882a593Smuzhiyun uses the same defines as link_config */ 1101*4882a593Smuzhiyun u32 mfw_wol_link_cfg; 1102*4882a593Smuzhiyun 1103*4882a593Smuzhiyun /* The default for the driver of the second external phy, 1104*4882a593Smuzhiyun uses the same defines as link_config */ 1105*4882a593Smuzhiyun u32 link_config2; /* 0x47C */ 1106*4882a593Smuzhiyun 1107*4882a593Smuzhiyun /* The default for MCP of the second external phy, 1108*4882a593Smuzhiyun uses the same defines as link_config */ 1109*4882a593Smuzhiyun u32 mfw_wol_link_cfg2; /* 0x480 */ 1110*4882a593Smuzhiyun 1111*4882a593Smuzhiyun 1112*4882a593Smuzhiyun /* EEE power saving mode */ 1113*4882a593Smuzhiyun u32 eee_power_mode; /* 0x484 */ 1114*4882a593Smuzhiyun #define PORT_FEAT_CFG_EEE_POWER_MODE_MASK 0x000000FF 1115*4882a593Smuzhiyun #define PORT_FEAT_CFG_EEE_POWER_MODE_SHIFT 0 1116*4882a593Smuzhiyun #define PORT_FEAT_CFG_EEE_POWER_MODE_DISABLED 0x00000000 1117*4882a593Smuzhiyun #define PORT_FEAT_CFG_EEE_POWER_MODE_BALANCED 0x00000001 1118*4882a593Smuzhiyun #define PORT_FEAT_CFG_EEE_POWER_MODE_AGGRESSIVE 0x00000002 1119*4882a593Smuzhiyun #define PORT_FEAT_CFG_EEE_POWER_MODE_LOW_LATENCY 0x00000003 1120*4882a593Smuzhiyun 1121*4882a593Smuzhiyun 1122*4882a593Smuzhiyun u32 Reserved2[16]; /* 0x488 */ 1123*4882a593Smuzhiyun }; 1124*4882a593Smuzhiyun 1125*4882a593Smuzhiyun 1126*4882a593Smuzhiyun /**************************************************************************** 1127*4882a593Smuzhiyun * Device Information * 1128*4882a593Smuzhiyun ****************************************************************************/ 1129*4882a593Smuzhiyun struct shm_dev_info { /* size */ 1130*4882a593Smuzhiyun 1131*4882a593Smuzhiyun u32 bc_rev; /* 8 bits each: major, minor, build */ /* 4 */ 1132*4882a593Smuzhiyun 1133*4882a593Smuzhiyun struct shared_hw_cfg shared_hw_config; /* 40 */ 1134*4882a593Smuzhiyun 1135*4882a593Smuzhiyun struct port_hw_cfg port_hw_config[PORT_MAX]; /* 400*2=800 */ 1136*4882a593Smuzhiyun 1137*4882a593Smuzhiyun struct shared_feat_cfg shared_feature_config; /* 4 */ 1138*4882a593Smuzhiyun 1139*4882a593Smuzhiyun struct port_feat_cfg port_feature_config[PORT_MAX];/* 116*2=232 */ 1140*4882a593Smuzhiyun 1141*4882a593Smuzhiyun }; 1142*4882a593Smuzhiyun 1143*4882a593Smuzhiyun struct extended_dev_info_shared_cfg { 1144*4882a593Smuzhiyun u32 reserved[18]; 1145*4882a593Smuzhiyun u32 mbi_version; 1146*4882a593Smuzhiyun u32 mbi_date; 1147*4882a593Smuzhiyun }; 1148*4882a593Smuzhiyun 1149*4882a593Smuzhiyun #if !defined(__LITTLE_ENDIAN) && !defined(__BIG_ENDIAN) 1150*4882a593Smuzhiyun #error "Missing either LITTLE_ENDIAN or BIG_ENDIAN definition." 1151*4882a593Smuzhiyun #endif 1152*4882a593Smuzhiyun 1153*4882a593Smuzhiyun #define FUNC_0 0 1154*4882a593Smuzhiyun #define FUNC_1 1 1155*4882a593Smuzhiyun #define FUNC_2 2 1156*4882a593Smuzhiyun #define FUNC_3 3 1157*4882a593Smuzhiyun #define FUNC_4 4 1158*4882a593Smuzhiyun #define FUNC_5 5 1159*4882a593Smuzhiyun #define FUNC_6 6 1160*4882a593Smuzhiyun #define FUNC_7 7 1161*4882a593Smuzhiyun #define E1_FUNC_MAX 2 1162*4882a593Smuzhiyun #define E1H_FUNC_MAX 8 1163*4882a593Smuzhiyun #define E2_FUNC_MAX 4 /* per path */ 1164*4882a593Smuzhiyun 1165*4882a593Smuzhiyun #define VN_0 0 1166*4882a593Smuzhiyun #define VN_1 1 1167*4882a593Smuzhiyun #define VN_2 2 1168*4882a593Smuzhiyun #define VN_3 3 1169*4882a593Smuzhiyun #define E1VN_MAX 1 1170*4882a593Smuzhiyun #define E1HVN_MAX 4 1171*4882a593Smuzhiyun 1172*4882a593Smuzhiyun #define E2_VF_MAX 64 /* HC_REG_VF_CONFIGURATION_SIZE */ 1173*4882a593Smuzhiyun /* This value (in milliseconds) determines the frequency of the driver 1174*4882a593Smuzhiyun * issuing the PULSE message code. The firmware monitors this periodic 1175*4882a593Smuzhiyun * pulse to determine when to switch to an OS-absent mode. */ 1176*4882a593Smuzhiyun #define DRV_PULSE_PERIOD_MS 250 1177*4882a593Smuzhiyun 1178*4882a593Smuzhiyun /* This value (in milliseconds) determines how long the driver should 1179*4882a593Smuzhiyun * wait for an acknowledgement from the firmware before timing out. Once 1180*4882a593Smuzhiyun * the firmware has timed out, the driver will assume there is no firmware 1181*4882a593Smuzhiyun * running and there won't be any firmware-driver synchronization during a 1182*4882a593Smuzhiyun * driver reset. */ 1183*4882a593Smuzhiyun #define FW_ACK_TIME_OUT_MS 5000 1184*4882a593Smuzhiyun 1185*4882a593Smuzhiyun #define FW_ACK_POLL_TIME_MS 1 1186*4882a593Smuzhiyun 1187*4882a593Smuzhiyun #define FW_ACK_NUM_OF_POLL (FW_ACK_TIME_OUT_MS/FW_ACK_POLL_TIME_MS) 1188*4882a593Smuzhiyun 1189*4882a593Smuzhiyun #define MFW_TRACE_SIGNATURE 0x54524342 1190*4882a593Smuzhiyun 1191*4882a593Smuzhiyun /**************************************************************************** 1192*4882a593Smuzhiyun * Driver <-> FW Mailbox * 1193*4882a593Smuzhiyun ****************************************************************************/ 1194*4882a593Smuzhiyun struct drv_port_mb { 1195*4882a593Smuzhiyun 1196*4882a593Smuzhiyun u32 link_status; 1197*4882a593Smuzhiyun /* Driver should update this field on any link change event */ 1198*4882a593Smuzhiyun 1199*4882a593Smuzhiyun #define LINK_STATUS_NONE (0<<0) 1200*4882a593Smuzhiyun #define LINK_STATUS_LINK_FLAG_MASK 0x00000001 1201*4882a593Smuzhiyun #define LINK_STATUS_LINK_UP 0x00000001 1202*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_MASK 0x0000001E 1203*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_AN_NOT_COMPLETE (0<<1) 1204*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_10THD (1<<1) 1205*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_10TFD (2<<1) 1206*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_100TXHD (3<<1) 1207*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_100T4 (4<<1) 1208*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_100TXFD (5<<1) 1209*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_1000THD (6<<1) 1210*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_1000TFD (7<<1) 1211*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_1000XFD (7<<1) 1212*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_2500THD (8<<1) 1213*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_2500TFD (9<<1) 1214*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_2500XFD (9<<1) 1215*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_10GTFD (10<<1) 1216*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_10GXFD (10<<1) 1217*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_20GTFD (11<<1) 1218*4882a593Smuzhiyun #define LINK_STATUS_SPEED_AND_DUPLEX_20GXFD (11<<1) 1219*4882a593Smuzhiyun 1220*4882a593Smuzhiyun #define LINK_STATUS_AUTO_NEGOTIATE_FLAG_MASK 0x00000020 1221*4882a593Smuzhiyun #define LINK_STATUS_AUTO_NEGOTIATE_ENABLED 0x00000020 1222*4882a593Smuzhiyun 1223*4882a593Smuzhiyun #define LINK_STATUS_AUTO_NEGOTIATE_COMPLETE 0x00000040 1224*4882a593Smuzhiyun #define LINK_STATUS_PARALLEL_DETECTION_FLAG_MASK 0x00000080 1225*4882a593Smuzhiyun #define LINK_STATUS_PARALLEL_DETECTION_USED 0x00000080 1226*4882a593Smuzhiyun 1227*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_1000TFD_CAPABLE 0x00000200 1228*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_1000THD_CAPABLE 0x00000400 1229*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_100T4_CAPABLE 0x00000800 1230*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_100TXFD_CAPABLE 0x00001000 1231*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_100TXHD_CAPABLE 0x00002000 1232*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_10TFD_CAPABLE 0x00004000 1233*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_10THD_CAPABLE 0x00008000 1234*4882a593Smuzhiyun 1235*4882a593Smuzhiyun #define LINK_STATUS_TX_FLOW_CONTROL_FLAG_MASK 0x00010000 1236*4882a593Smuzhiyun #define LINK_STATUS_TX_FLOW_CONTROL_ENABLED 0x00010000 1237*4882a593Smuzhiyun 1238*4882a593Smuzhiyun #define LINK_STATUS_RX_FLOW_CONTROL_FLAG_MASK 0x00020000 1239*4882a593Smuzhiyun #define LINK_STATUS_RX_FLOW_CONTROL_ENABLED 0x00020000 1240*4882a593Smuzhiyun 1241*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_FLOW_CONTROL_MASK 0x000C0000 1242*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_NOT_PAUSE_CAPABLE (0<<18) 1243*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_SYMMETRIC_PAUSE (1<<18) 1244*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE (2<<18) 1245*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_BOTH_PAUSE (3<<18) 1246*4882a593Smuzhiyun 1247*4882a593Smuzhiyun #define LINK_STATUS_SERDES_LINK 0x00100000 1248*4882a593Smuzhiyun 1249*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_2500XFD_CAPABLE 0x00200000 1250*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_2500XHD_CAPABLE 0x00400000 1251*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_10GXFD_CAPABLE 0x00800000 1252*4882a593Smuzhiyun #define LINK_STATUS_LINK_PARTNER_20GXFD_CAPABLE 0x10000000 1253*4882a593Smuzhiyun 1254*4882a593Smuzhiyun #define LINK_STATUS_PFC_ENABLED 0x20000000 1255*4882a593Smuzhiyun 1256*4882a593Smuzhiyun #define LINK_STATUS_PHYSICAL_LINK_FLAG 0x40000000 1257*4882a593Smuzhiyun #define LINK_STATUS_SFP_TX_FAULT 0x80000000 1258*4882a593Smuzhiyun 1259*4882a593Smuzhiyun u32 port_stx; 1260*4882a593Smuzhiyun 1261*4882a593Smuzhiyun u32 stat_nig_timer; 1262*4882a593Smuzhiyun 1263*4882a593Smuzhiyun /* MCP firmware does not use this field */ 1264*4882a593Smuzhiyun u32 ext_phy_fw_version; 1265*4882a593Smuzhiyun 1266*4882a593Smuzhiyun }; 1267*4882a593Smuzhiyun 1268*4882a593Smuzhiyun 1269*4882a593Smuzhiyun struct drv_func_mb { 1270*4882a593Smuzhiyun 1271*4882a593Smuzhiyun u32 drv_mb_header; 1272*4882a593Smuzhiyun #define DRV_MSG_CODE_MASK 0xffff0000 1273*4882a593Smuzhiyun #define DRV_MSG_CODE_LOAD_REQ 0x10000000 1274*4882a593Smuzhiyun #define DRV_MSG_CODE_LOAD_DONE 0x11000000 1275*4882a593Smuzhiyun #define DRV_MSG_CODE_UNLOAD_REQ_WOL_EN 0x20000000 1276*4882a593Smuzhiyun #define DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS 0x20010000 1277*4882a593Smuzhiyun #define DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP 0x20020000 1278*4882a593Smuzhiyun #define DRV_MSG_CODE_UNLOAD_DONE 0x21000000 1279*4882a593Smuzhiyun #define DRV_MSG_CODE_DCC_OK 0x30000000 1280*4882a593Smuzhiyun #define DRV_MSG_CODE_DCC_FAILURE 0x31000000 1281*4882a593Smuzhiyun #define DRV_MSG_CODE_DIAG_ENTER_REQ 0x50000000 1282*4882a593Smuzhiyun #define DRV_MSG_CODE_DIAG_EXIT_REQ 0x60000000 1283*4882a593Smuzhiyun #define DRV_MSG_CODE_VALIDATE_KEY 0x70000000 1284*4882a593Smuzhiyun #define DRV_MSG_CODE_GET_CURR_KEY 0x80000000 1285*4882a593Smuzhiyun #define DRV_MSG_CODE_GET_UPGRADE_KEY 0x81000000 1286*4882a593Smuzhiyun #define DRV_MSG_CODE_GET_MANUF_KEY 0x82000000 1287*4882a593Smuzhiyun #define DRV_MSG_CODE_LOAD_L2B_PRAM 0x90000000 1288*4882a593Smuzhiyun #define DRV_MSG_CODE_OEM_OK 0x00010000 1289*4882a593Smuzhiyun #define DRV_MSG_CODE_OEM_FAILURE 0x00020000 1290*4882a593Smuzhiyun #define DRV_MSG_CODE_OEM_UPDATE_SVID_OK 0x00030000 1291*4882a593Smuzhiyun #define DRV_MSG_CODE_OEM_UPDATE_SVID_FAILURE 0x00040000 1292*4882a593Smuzhiyun /* 1293*4882a593Smuzhiyun * The optic module verification command requires bootcode 1294*4882a593Smuzhiyun * v5.0.6 or later, te specific optic module verification command 1295*4882a593Smuzhiyun * requires bootcode v5.2.12 or later 1296*4882a593Smuzhiyun */ 1297*4882a593Smuzhiyun #define DRV_MSG_CODE_VRFY_FIRST_PHY_OPT_MDL 0xa0000000 1298*4882a593Smuzhiyun #define REQ_BC_VER_4_VRFY_FIRST_PHY_OPT_MDL 0x00050006 1299*4882a593Smuzhiyun #define DRV_MSG_CODE_VRFY_SPECIFIC_PHY_OPT_MDL 0xa1000000 1300*4882a593Smuzhiyun #define REQ_BC_VER_4_VRFY_SPECIFIC_PHY_OPT_MDL 0x00050234 1301*4882a593Smuzhiyun #define DRV_MSG_CODE_VRFY_AFEX_SUPPORTED 0xa2000000 1302*4882a593Smuzhiyun #define REQ_BC_VER_4_VRFY_AFEX_SUPPORTED 0x00070002 1303*4882a593Smuzhiyun #define REQ_BC_VER_4_SFP_TX_DISABLE_SUPPORTED 0x00070014 1304*4882a593Smuzhiyun #define REQ_BC_VER_4_MT_SUPPORTED 0x00070201 1305*4882a593Smuzhiyun #define REQ_BC_VER_4_PFC_STATS_SUPPORTED 0x00070201 1306*4882a593Smuzhiyun #define REQ_BC_VER_4_FCOE_FEATURES 0x00070209 1307*4882a593Smuzhiyun 1308*4882a593Smuzhiyun #define DRV_MSG_CODE_DCBX_ADMIN_PMF_MSG 0xb0000000 1309*4882a593Smuzhiyun #define DRV_MSG_CODE_DCBX_PMF_DRV_OK 0xb2000000 1310*4882a593Smuzhiyun #define REQ_BC_VER_4_DCBX_ADMIN_MSG_NON_PMF 0x00070401 1311*4882a593Smuzhiyun 1312*4882a593Smuzhiyun #define DRV_MSG_CODE_VF_DISABLED_DONE 0xc0000000 1313*4882a593Smuzhiyun 1314*4882a593Smuzhiyun #define DRV_MSG_CODE_AFEX_DRIVER_SETMAC 0xd0000000 1315*4882a593Smuzhiyun #define DRV_MSG_CODE_AFEX_LISTGET_ACK 0xd1000000 1316*4882a593Smuzhiyun #define DRV_MSG_CODE_AFEX_LISTSET_ACK 0xd2000000 1317*4882a593Smuzhiyun #define DRV_MSG_CODE_AFEX_STATSGET_ACK 0xd3000000 1318*4882a593Smuzhiyun #define DRV_MSG_CODE_AFEX_VIFSET_ACK 0xd4000000 1319*4882a593Smuzhiyun 1320*4882a593Smuzhiyun #define DRV_MSG_CODE_DRV_INFO_ACK 0xd8000000 1321*4882a593Smuzhiyun #define DRV_MSG_CODE_DRV_INFO_NACK 0xd9000000 1322*4882a593Smuzhiyun 1323*4882a593Smuzhiyun #define DRV_MSG_CODE_EEE_RESULTS_ACK 0xda000000 1324*4882a593Smuzhiyun 1325*4882a593Smuzhiyun #define DRV_MSG_CODE_RMMOD 0xdb000000 1326*4882a593Smuzhiyun #define REQ_BC_VER_4_RMMOD_CMD 0x0007080f 1327*4882a593Smuzhiyun 1328*4882a593Smuzhiyun #define DRV_MSG_CODE_SET_MF_BW 0xe0000000 1329*4882a593Smuzhiyun #define REQ_BC_VER_4_SET_MF_BW 0x00060202 1330*4882a593Smuzhiyun #define DRV_MSG_CODE_SET_MF_BW_ACK 0xe1000000 1331*4882a593Smuzhiyun 1332*4882a593Smuzhiyun #define DRV_MSG_CODE_LINK_STATUS_CHANGED 0x01000000 1333*4882a593Smuzhiyun 1334*4882a593Smuzhiyun #define DRV_MSG_CODE_INITIATE_FLR 0x02000000 1335*4882a593Smuzhiyun #define REQ_BC_VER_4_INITIATE_FLR 0x00070213 1336*4882a593Smuzhiyun 1337*4882a593Smuzhiyun #define BIOS_MSG_CODE_LIC_CHALLENGE 0xff010000 1338*4882a593Smuzhiyun #define BIOS_MSG_CODE_LIC_RESPONSE 0xff020000 1339*4882a593Smuzhiyun #define BIOS_MSG_CODE_VIRT_MAC_PRIM 0xff030000 1340*4882a593Smuzhiyun #define BIOS_MSG_CODE_VIRT_MAC_ISCSI 0xff040000 1341*4882a593Smuzhiyun 1342*4882a593Smuzhiyun #define DRV_MSG_SEQ_NUMBER_MASK 0x0000ffff 1343*4882a593Smuzhiyun 1344*4882a593Smuzhiyun u32 drv_mb_param; 1345*4882a593Smuzhiyun #define DRV_MSG_CODE_SET_MF_BW_MIN_MASK 0x00ff0000 1346*4882a593Smuzhiyun #define DRV_MSG_CODE_SET_MF_BW_MAX_MASK 0xff000000 1347*4882a593Smuzhiyun 1348*4882a593Smuzhiyun #define DRV_MSG_CODE_UNLOAD_SKIP_LINK_RESET 0x00000002 1349*4882a593Smuzhiyun 1350*4882a593Smuzhiyun #define DRV_MSG_CODE_LOAD_REQ_WITH_LFA 0x0000100a 1351*4882a593Smuzhiyun #define DRV_MSG_CODE_LOAD_REQ_FORCE_LFA 0x00002000 1352*4882a593Smuzhiyun 1353*4882a593Smuzhiyun u32 fw_mb_header; 1354*4882a593Smuzhiyun #define FW_MSG_CODE_MASK 0xffff0000 1355*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_LOAD_COMMON 0x10100000 1356*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_LOAD_PORT 0x10110000 1357*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_LOAD_FUNCTION 0x10120000 1358*4882a593Smuzhiyun /* Load common chip is supported from bc 6.0.0 */ 1359*4882a593Smuzhiyun #define REQ_BC_VER_4_DRV_LOAD_COMMON_CHIP 0x00060000 1360*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_LOAD_COMMON_CHIP 0x10130000 1361*4882a593Smuzhiyun 1362*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_LOAD_REFUSED 0x10200000 1363*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_LOAD_DONE 0x11100000 1364*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_UNLOAD_COMMON 0x20100000 1365*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_UNLOAD_PORT 0x20110000 1366*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_UNLOAD_FUNCTION 0x20120000 1367*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_UNLOAD_DONE 0x21100000 1368*4882a593Smuzhiyun #define FW_MSG_CODE_DCC_DONE 0x30100000 1369*4882a593Smuzhiyun #define FW_MSG_CODE_LLDP_DONE 0x40100000 1370*4882a593Smuzhiyun #define FW_MSG_CODE_DIAG_ENTER_DONE 0x50100000 1371*4882a593Smuzhiyun #define FW_MSG_CODE_DIAG_REFUSE 0x50200000 1372*4882a593Smuzhiyun #define FW_MSG_CODE_DIAG_EXIT_DONE 0x60100000 1373*4882a593Smuzhiyun #define FW_MSG_CODE_VALIDATE_KEY_SUCCESS 0x70100000 1374*4882a593Smuzhiyun #define FW_MSG_CODE_VALIDATE_KEY_FAILURE 0x70200000 1375*4882a593Smuzhiyun #define FW_MSG_CODE_GET_KEY_DONE 0x80100000 1376*4882a593Smuzhiyun #define FW_MSG_CODE_NO_KEY 0x80f00000 1377*4882a593Smuzhiyun #define FW_MSG_CODE_LIC_INFO_NOT_READY 0x80f80000 1378*4882a593Smuzhiyun #define FW_MSG_CODE_L2B_PRAM_LOADED 0x90100000 1379*4882a593Smuzhiyun #define FW_MSG_CODE_L2B_PRAM_T_LOAD_FAILURE 0x90210000 1380*4882a593Smuzhiyun #define FW_MSG_CODE_L2B_PRAM_C_LOAD_FAILURE 0x90220000 1381*4882a593Smuzhiyun #define FW_MSG_CODE_L2B_PRAM_X_LOAD_FAILURE 0x90230000 1382*4882a593Smuzhiyun #define FW_MSG_CODE_L2B_PRAM_U_LOAD_FAILURE 0x90240000 1383*4882a593Smuzhiyun #define FW_MSG_CODE_VRFY_OPT_MDL_SUCCESS 0xa0100000 1384*4882a593Smuzhiyun #define FW_MSG_CODE_VRFY_OPT_MDL_INVLD_IMG 0xa0200000 1385*4882a593Smuzhiyun #define FW_MSG_CODE_VRFY_OPT_MDL_UNAPPROVED 0xa0300000 1386*4882a593Smuzhiyun #define FW_MSG_CODE_VF_DISABLED_DONE 0xb0000000 1387*4882a593Smuzhiyun #define FW_MSG_CODE_HW_SET_INVALID_IMAGE 0xb0100000 1388*4882a593Smuzhiyun 1389*4882a593Smuzhiyun #define FW_MSG_CODE_AFEX_DRIVER_SETMAC_DONE 0xd0100000 1390*4882a593Smuzhiyun #define FW_MSG_CODE_AFEX_LISTGET_ACK 0xd1100000 1391*4882a593Smuzhiyun #define FW_MSG_CODE_AFEX_LISTSET_ACK 0xd2100000 1392*4882a593Smuzhiyun #define FW_MSG_CODE_AFEX_STATSGET_ACK 0xd3100000 1393*4882a593Smuzhiyun #define FW_MSG_CODE_AFEX_VIFSET_ACK 0xd4100000 1394*4882a593Smuzhiyun 1395*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_INFO_ACK 0xd8100000 1396*4882a593Smuzhiyun #define FW_MSG_CODE_DRV_INFO_NACK 0xd9100000 1397*4882a593Smuzhiyun 1398*4882a593Smuzhiyun #define FW_MSG_CODE_EEE_RESULS_ACK 0xda100000 1399*4882a593Smuzhiyun 1400*4882a593Smuzhiyun #define FW_MSG_CODE_RMMOD_ACK 0xdb100000 1401*4882a593Smuzhiyun 1402*4882a593Smuzhiyun #define FW_MSG_CODE_SET_MF_BW_SENT 0xe0000000 1403*4882a593Smuzhiyun #define FW_MSG_CODE_SET_MF_BW_DONE 0xe1000000 1404*4882a593Smuzhiyun 1405*4882a593Smuzhiyun #define FW_MSG_CODE_LINK_CHANGED_ACK 0x01100000 1406*4882a593Smuzhiyun 1407*4882a593Smuzhiyun #define FW_MSG_CODE_LIC_CHALLENGE 0xff010000 1408*4882a593Smuzhiyun #define FW_MSG_CODE_LIC_RESPONSE 0xff020000 1409*4882a593Smuzhiyun #define FW_MSG_CODE_VIRT_MAC_PRIM 0xff030000 1410*4882a593Smuzhiyun #define FW_MSG_CODE_VIRT_MAC_ISCSI 0xff040000 1411*4882a593Smuzhiyun 1412*4882a593Smuzhiyun #define FW_MSG_SEQ_NUMBER_MASK 0x0000ffff 1413*4882a593Smuzhiyun 1414*4882a593Smuzhiyun u32 fw_mb_param; 1415*4882a593Smuzhiyun 1416*4882a593Smuzhiyun u32 drv_pulse_mb; 1417*4882a593Smuzhiyun #define DRV_PULSE_SEQ_MASK 0x00007fff 1418*4882a593Smuzhiyun #define DRV_PULSE_SYSTEM_TIME_MASK 0xffff0000 1419*4882a593Smuzhiyun /* 1420*4882a593Smuzhiyun * The system time is in the format of 1421*4882a593Smuzhiyun * (year-2001)*12*32 + month*32 + day. 1422*4882a593Smuzhiyun */ 1423*4882a593Smuzhiyun #define DRV_PULSE_ALWAYS_ALIVE 0x00008000 1424*4882a593Smuzhiyun /* 1425*4882a593Smuzhiyun * Indicate to the firmware not to go into the 1426*4882a593Smuzhiyun * OS-absent when it is not getting driver pulse. 1427*4882a593Smuzhiyun * This is used for debugging as well for PXE(MBA). 1428*4882a593Smuzhiyun */ 1429*4882a593Smuzhiyun 1430*4882a593Smuzhiyun u32 mcp_pulse_mb; 1431*4882a593Smuzhiyun #define MCP_PULSE_SEQ_MASK 0x00007fff 1432*4882a593Smuzhiyun #define MCP_PULSE_ALWAYS_ALIVE 0x00008000 1433*4882a593Smuzhiyun /* Indicates to the driver not to assert due to lack 1434*4882a593Smuzhiyun * of MCP response */ 1435*4882a593Smuzhiyun #define MCP_EVENT_MASK 0xffff0000 1436*4882a593Smuzhiyun #define MCP_EVENT_OTHER_DRIVER_RESET_REQ 0x00010000 1437*4882a593Smuzhiyun 1438*4882a593Smuzhiyun u32 iscsi_boot_signature; 1439*4882a593Smuzhiyun u32 iscsi_boot_block_offset; 1440*4882a593Smuzhiyun 1441*4882a593Smuzhiyun u32 drv_status; 1442*4882a593Smuzhiyun #define DRV_STATUS_PMF 0x00000001 1443*4882a593Smuzhiyun #define DRV_STATUS_VF_DISABLED 0x00000002 1444*4882a593Smuzhiyun #define DRV_STATUS_SET_MF_BW 0x00000004 1445*4882a593Smuzhiyun #define DRV_STATUS_LINK_EVENT 0x00000008 1446*4882a593Smuzhiyun 1447*4882a593Smuzhiyun #define DRV_STATUS_OEM_EVENT_MASK 0x00000070 1448*4882a593Smuzhiyun #define DRV_STATUS_OEM_DISABLE_ENABLE_PF 0x00000010 1449*4882a593Smuzhiyun #define DRV_STATUS_OEM_BANDWIDTH_ALLOCATION 0x00000020 1450*4882a593Smuzhiyun 1451*4882a593Smuzhiyun #define DRV_STATUS_OEM_UPDATE_SVID 0x00000080 1452*4882a593Smuzhiyun 1453*4882a593Smuzhiyun #define DRV_STATUS_DCC_EVENT_MASK 0x0000ff00 1454*4882a593Smuzhiyun #define DRV_STATUS_DCC_DISABLE_ENABLE_PF 0x00000100 1455*4882a593Smuzhiyun #define DRV_STATUS_DCC_BANDWIDTH_ALLOCATION 0x00000200 1456*4882a593Smuzhiyun #define DRV_STATUS_DCC_CHANGE_MAC_ADDRESS 0x00000400 1457*4882a593Smuzhiyun #define DRV_STATUS_DCC_RESERVED1 0x00000800 1458*4882a593Smuzhiyun #define DRV_STATUS_DCC_SET_PROTOCOL 0x00001000 1459*4882a593Smuzhiyun #define DRV_STATUS_DCC_SET_PRIORITY 0x00002000 1460*4882a593Smuzhiyun 1461*4882a593Smuzhiyun #define DRV_STATUS_DCBX_EVENT_MASK 0x000f0000 1462*4882a593Smuzhiyun #define DRV_STATUS_DCBX_NEGOTIATION_RESULTS 0x00010000 1463*4882a593Smuzhiyun #define DRV_STATUS_AFEX_EVENT_MASK 0x03f00000 1464*4882a593Smuzhiyun #define DRV_STATUS_AFEX_LISTGET_REQ 0x00100000 1465*4882a593Smuzhiyun #define DRV_STATUS_AFEX_LISTSET_REQ 0x00200000 1466*4882a593Smuzhiyun #define DRV_STATUS_AFEX_STATSGET_REQ 0x00400000 1467*4882a593Smuzhiyun #define DRV_STATUS_AFEX_VIFSET_REQ 0x00800000 1468*4882a593Smuzhiyun 1469*4882a593Smuzhiyun #define DRV_STATUS_DRV_INFO_REQ 0x04000000 1470*4882a593Smuzhiyun 1471*4882a593Smuzhiyun #define DRV_STATUS_EEE_NEGOTIATION_RESULTS 0x08000000 1472*4882a593Smuzhiyun 1473*4882a593Smuzhiyun u32 virt_mac_upper; 1474*4882a593Smuzhiyun #define VIRT_MAC_SIGN_MASK 0xffff0000 1475*4882a593Smuzhiyun #define VIRT_MAC_SIGNATURE 0x564d0000 1476*4882a593Smuzhiyun u32 virt_mac_lower; 1477*4882a593Smuzhiyun 1478*4882a593Smuzhiyun }; 1479*4882a593Smuzhiyun 1480*4882a593Smuzhiyun 1481*4882a593Smuzhiyun /**************************************************************************** 1482*4882a593Smuzhiyun * Management firmware state * 1483*4882a593Smuzhiyun ****************************************************************************/ 1484*4882a593Smuzhiyun /* Allocate 440 bytes for management firmware */ 1485*4882a593Smuzhiyun #define MGMTFW_STATE_WORD_SIZE 110 1486*4882a593Smuzhiyun 1487*4882a593Smuzhiyun struct mgmtfw_state { 1488*4882a593Smuzhiyun u32 opaque[MGMTFW_STATE_WORD_SIZE]; 1489*4882a593Smuzhiyun }; 1490*4882a593Smuzhiyun 1491*4882a593Smuzhiyun 1492*4882a593Smuzhiyun /**************************************************************************** 1493*4882a593Smuzhiyun * Multi-Function configuration * 1494*4882a593Smuzhiyun ****************************************************************************/ 1495*4882a593Smuzhiyun struct shared_mf_cfg { 1496*4882a593Smuzhiyun 1497*4882a593Smuzhiyun u32 clp_mb; 1498*4882a593Smuzhiyun #define SHARED_MF_CLP_SET_DEFAULT 0x00000000 1499*4882a593Smuzhiyun /* set by CLP */ 1500*4882a593Smuzhiyun #define SHARED_MF_CLP_EXIT 0x00000001 1501*4882a593Smuzhiyun /* set by MCP */ 1502*4882a593Smuzhiyun #define SHARED_MF_CLP_EXIT_DONE 0x00010000 1503*4882a593Smuzhiyun 1504*4882a593Smuzhiyun }; 1505*4882a593Smuzhiyun 1506*4882a593Smuzhiyun struct port_mf_cfg { 1507*4882a593Smuzhiyun 1508*4882a593Smuzhiyun u32 dynamic_cfg; /* device control channel */ 1509*4882a593Smuzhiyun #define PORT_MF_CFG_E1HOV_TAG_MASK 0x0000ffff 1510*4882a593Smuzhiyun #define PORT_MF_CFG_E1HOV_TAG_SHIFT 0 1511*4882a593Smuzhiyun #define PORT_MF_CFG_E1HOV_TAG_DEFAULT PORT_MF_CFG_E1HOV_TAG_MASK 1512*4882a593Smuzhiyun 1513*4882a593Smuzhiyun u32 reserved[1]; 1514*4882a593Smuzhiyun 1515*4882a593Smuzhiyun }; 1516*4882a593Smuzhiyun 1517*4882a593Smuzhiyun struct func_mf_cfg { 1518*4882a593Smuzhiyun 1519*4882a593Smuzhiyun u32 config; 1520*4882a593Smuzhiyun /* E/R/I/D */ 1521*4882a593Smuzhiyun /* function 0 of each port cannot be hidden */ 1522*4882a593Smuzhiyun #define FUNC_MF_CFG_FUNC_HIDE 0x00000001 1523*4882a593Smuzhiyun 1524*4882a593Smuzhiyun #define FUNC_MF_CFG_PROTOCOL_MASK 0x00000006 1525*4882a593Smuzhiyun #define FUNC_MF_CFG_PROTOCOL_FCOE 0x00000000 1526*4882a593Smuzhiyun #define FUNC_MF_CFG_PROTOCOL_ETHERNET 0x00000002 1527*4882a593Smuzhiyun #define FUNC_MF_CFG_PROTOCOL_ETHERNET_WITH_RDMA 0x00000004 1528*4882a593Smuzhiyun #define FUNC_MF_CFG_PROTOCOL_ISCSI 0x00000006 1529*4882a593Smuzhiyun #define FUNC_MF_CFG_PROTOCOL_DEFAULT \ 1530*4882a593Smuzhiyun FUNC_MF_CFG_PROTOCOL_ETHERNET_WITH_RDMA 1531*4882a593Smuzhiyun 1532*4882a593Smuzhiyun #define FUNC_MF_CFG_FUNC_DISABLED 0x00000008 1533*4882a593Smuzhiyun #define FUNC_MF_CFG_FUNC_DELETED 0x00000010 1534*4882a593Smuzhiyun 1535*4882a593Smuzhiyun /* PRI */ 1536*4882a593Smuzhiyun /* 0 - low priority, 3 - high priority */ 1537*4882a593Smuzhiyun #define FUNC_MF_CFG_TRANSMIT_PRIORITY_MASK 0x00000300 1538*4882a593Smuzhiyun #define FUNC_MF_CFG_TRANSMIT_PRIORITY_SHIFT 8 1539*4882a593Smuzhiyun #define FUNC_MF_CFG_TRANSMIT_PRIORITY_DEFAULT 0x00000000 1540*4882a593Smuzhiyun 1541*4882a593Smuzhiyun /* MINBW, MAXBW */ 1542*4882a593Smuzhiyun /* value range - 0..100, increments in 100Mbps */ 1543*4882a593Smuzhiyun #define FUNC_MF_CFG_MIN_BW_MASK 0x00ff0000 1544*4882a593Smuzhiyun #define FUNC_MF_CFG_MIN_BW_SHIFT 16 1545*4882a593Smuzhiyun #define FUNC_MF_CFG_MIN_BW_DEFAULT 0x00000000 1546*4882a593Smuzhiyun #define FUNC_MF_CFG_MAX_BW_MASK 0xff000000 1547*4882a593Smuzhiyun #define FUNC_MF_CFG_MAX_BW_SHIFT 24 1548*4882a593Smuzhiyun #define FUNC_MF_CFG_MAX_BW_DEFAULT 0x64000000 1549*4882a593Smuzhiyun 1550*4882a593Smuzhiyun u32 mac_upper; /* MAC */ 1551*4882a593Smuzhiyun #define FUNC_MF_CFG_UPPERMAC_MASK 0x0000ffff 1552*4882a593Smuzhiyun #define FUNC_MF_CFG_UPPERMAC_SHIFT 0 1553*4882a593Smuzhiyun #define FUNC_MF_CFG_UPPERMAC_DEFAULT FUNC_MF_CFG_UPPERMAC_MASK 1554*4882a593Smuzhiyun u32 mac_lower; 1555*4882a593Smuzhiyun #define FUNC_MF_CFG_LOWERMAC_DEFAULT 0xffffffff 1556*4882a593Smuzhiyun 1557*4882a593Smuzhiyun u32 e1hov_tag; /* VNI */ 1558*4882a593Smuzhiyun #define FUNC_MF_CFG_E1HOV_TAG_MASK 0x0000ffff 1559*4882a593Smuzhiyun #define FUNC_MF_CFG_E1HOV_TAG_SHIFT 0 1560*4882a593Smuzhiyun #define FUNC_MF_CFG_E1HOV_TAG_DEFAULT FUNC_MF_CFG_E1HOV_TAG_MASK 1561*4882a593Smuzhiyun 1562*4882a593Smuzhiyun /* afex default VLAN ID - 12 bits */ 1563*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_VLAN_MASK 0x0fff0000 1564*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_VLAN_SHIFT 16 1565*4882a593Smuzhiyun 1566*4882a593Smuzhiyun u32 afex_config; 1567*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_COS_FILTER_MASK 0x000000ff 1568*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_COS_FILTER_SHIFT 0 1569*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_MBA_ENABLED_MASK 0x0000ff00 1570*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_MBA_ENABLED_SHIFT 8 1571*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_MBA_ENABLED_VAL 0x00000100 1572*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_VLAN_MODE_MASK 0x000f0000 1573*4882a593Smuzhiyun #define FUNC_MF_CFG_AFEX_VLAN_MODE_SHIFT 16 1574*4882a593Smuzhiyun 1575*4882a593Smuzhiyun u32 reserved; 1576*4882a593Smuzhiyun }; 1577*4882a593Smuzhiyun 1578*4882a593Smuzhiyun enum mf_cfg_afex_vlan_mode { 1579*4882a593Smuzhiyun FUNC_MF_CFG_AFEX_VLAN_TRUNK_MODE = 0, 1580*4882a593Smuzhiyun FUNC_MF_CFG_AFEX_VLAN_ACCESS_MODE, 1581*4882a593Smuzhiyun FUNC_MF_CFG_AFEX_VLAN_TRUNK_TAG_NATIVE_MODE 1582*4882a593Smuzhiyun }; 1583*4882a593Smuzhiyun 1584*4882a593Smuzhiyun /* This structure is not applicable and should not be accessed on 57711 */ 1585*4882a593Smuzhiyun struct func_ext_cfg { 1586*4882a593Smuzhiyun u32 func_cfg; 1587*4882a593Smuzhiyun #define MACP_FUNC_CFG_FLAGS_MASK 0x0000007F 1588*4882a593Smuzhiyun #define MACP_FUNC_CFG_FLAGS_SHIFT 0 1589*4882a593Smuzhiyun #define MACP_FUNC_CFG_FLAGS_ENABLED 0x00000001 1590*4882a593Smuzhiyun #define MACP_FUNC_CFG_FLAGS_ETHERNET 0x00000002 1591*4882a593Smuzhiyun #define MACP_FUNC_CFG_FLAGS_ISCSI_OFFLOAD 0x00000004 1592*4882a593Smuzhiyun #define MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD 0x00000008 1593*4882a593Smuzhiyun #define MACP_FUNC_CFG_PAUSE_ON_HOST_RING 0x00000080 1594*4882a593Smuzhiyun 1595*4882a593Smuzhiyun u32 iscsi_mac_addr_upper; 1596*4882a593Smuzhiyun u32 iscsi_mac_addr_lower; 1597*4882a593Smuzhiyun 1598*4882a593Smuzhiyun u32 fcoe_mac_addr_upper; 1599*4882a593Smuzhiyun u32 fcoe_mac_addr_lower; 1600*4882a593Smuzhiyun 1601*4882a593Smuzhiyun u32 fcoe_wwn_port_name_upper; 1602*4882a593Smuzhiyun u32 fcoe_wwn_port_name_lower; 1603*4882a593Smuzhiyun 1604*4882a593Smuzhiyun u32 fcoe_wwn_node_name_upper; 1605*4882a593Smuzhiyun u32 fcoe_wwn_node_name_lower; 1606*4882a593Smuzhiyun 1607*4882a593Smuzhiyun u32 preserve_data; 1608*4882a593Smuzhiyun #define MF_FUNC_CFG_PRESERVE_L2_MAC (1<<0) 1609*4882a593Smuzhiyun #define MF_FUNC_CFG_PRESERVE_ISCSI_MAC (1<<1) 1610*4882a593Smuzhiyun #define MF_FUNC_CFG_PRESERVE_FCOE_MAC (1<<2) 1611*4882a593Smuzhiyun #define MF_FUNC_CFG_PRESERVE_FCOE_WWN_P (1<<3) 1612*4882a593Smuzhiyun #define MF_FUNC_CFG_PRESERVE_FCOE_WWN_N (1<<4) 1613*4882a593Smuzhiyun #define MF_FUNC_CFG_PRESERVE_TX_BW (1<<5) 1614*4882a593Smuzhiyun }; 1615*4882a593Smuzhiyun 1616*4882a593Smuzhiyun struct mf_cfg { 1617*4882a593Smuzhiyun 1618*4882a593Smuzhiyun struct shared_mf_cfg shared_mf_config; /* 0x4 */ 1619*4882a593Smuzhiyun /* 0x8*2*2=0x20 */ 1620*4882a593Smuzhiyun struct port_mf_cfg port_mf_config[NVM_PATH_MAX][PORT_MAX]; 1621*4882a593Smuzhiyun /* for all chips, there are 8 mf functions */ 1622*4882a593Smuzhiyun struct func_mf_cfg func_mf_config[E1H_FUNC_MAX]; /* 0x18 * 8 = 0xc0 */ 1623*4882a593Smuzhiyun /* 1624*4882a593Smuzhiyun * Extended configuration per function - this array does not exist and 1625*4882a593Smuzhiyun * should not be accessed on 57711 1626*4882a593Smuzhiyun */ 1627*4882a593Smuzhiyun struct func_ext_cfg func_ext_config[E1H_FUNC_MAX]; /* 0x28 * 8 = 0x140*/ 1628*4882a593Smuzhiyun }; /* 0x224 */ 1629*4882a593Smuzhiyun 1630*4882a593Smuzhiyun /**************************************************************************** 1631*4882a593Smuzhiyun * Shared Memory Region * 1632*4882a593Smuzhiyun ****************************************************************************/ 1633*4882a593Smuzhiyun struct shmem_region { /* SharedMem Offset (size) */ 1634*4882a593Smuzhiyun 1635*4882a593Smuzhiyun u32 validity_map[PORT_MAX]; /* 0x0 (4*2 = 0x8) */ 1636*4882a593Smuzhiyun #define SHR_MEM_FORMAT_REV_MASK 0xff000000 1637*4882a593Smuzhiyun #define SHR_MEM_FORMAT_REV_ID ('A'<<24) 1638*4882a593Smuzhiyun /* validity bits */ 1639*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_PCI_CFG 0x00100000 1640*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_MB 0x00200000 1641*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_DEV_INFO 0x00400000 1642*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_RESERVED 0x00000007 1643*4882a593Smuzhiyun /* One licensing bit should be set */ 1644*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_LIC_KEY_IN_EFFECT_MASK 0x00000038 1645*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_LIC_MANUF_KEY_IN_EFFECT 0x00000008 1646*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_LIC_UPGRADE_KEY_IN_EFFECT 0x00000010 1647*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_LIC_NO_KEY_IN_EFFECT 0x00000020 1648*4882a593Smuzhiyun /* Active MFW */ 1649*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_ACTIVE_MFW_UNKNOWN 0x00000000 1650*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_ACTIVE_MFW_MASK 0x000001c0 1651*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_ACTIVE_MFW_IPMI 0x00000040 1652*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_ACTIVE_MFW_UMP 0x00000080 1653*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_ACTIVE_MFW_NCSI 0x000000c0 1654*4882a593Smuzhiyun #define SHR_MEM_VALIDITY_ACTIVE_MFW_NONE 0x000001c0 1655*4882a593Smuzhiyun 1656*4882a593Smuzhiyun struct shm_dev_info dev_info; /* 0x8 (0x438) */ 1657*4882a593Smuzhiyun 1658*4882a593Smuzhiyun struct license_key drv_lic_key[PORT_MAX]; /* 0x440 (52*2=0x68) */ 1659*4882a593Smuzhiyun 1660*4882a593Smuzhiyun /* FW information (for internal FW use) */ 1661*4882a593Smuzhiyun u32 fw_info_fio_offset; /* 0x4a8 (0x4) */ 1662*4882a593Smuzhiyun struct mgmtfw_state mgmtfw_state; /* 0x4ac (0x1b8) */ 1663*4882a593Smuzhiyun 1664*4882a593Smuzhiyun struct drv_port_mb port_mb[PORT_MAX]; /* 0x664 (16*2=0x20) */ 1665*4882a593Smuzhiyun 1666*4882a593Smuzhiyun #ifdef BMAPI 1667*4882a593Smuzhiyun /* This is a variable length array */ 1668*4882a593Smuzhiyun /* the number of function depends on the chip type */ 1669*4882a593Smuzhiyun struct drv_func_mb func_mb[1]; /* 0x684 (44*2/4/8=0x58/0xb0/0x160) */ 1670*4882a593Smuzhiyun #else 1671*4882a593Smuzhiyun /* the number of function depends on the chip type */ 1672*4882a593Smuzhiyun struct drv_func_mb func_mb[]; /* 0x684 (44*2/4/8=0x58/0xb0/0x160) */ 1673*4882a593Smuzhiyun #endif /* BMAPI */ 1674*4882a593Smuzhiyun 1675*4882a593Smuzhiyun }; /* 57710 = 0x6dc | 57711 = 0x7E4 | 57712 = 0x734 */ 1676*4882a593Smuzhiyun 1677*4882a593Smuzhiyun /**************************************************************************** 1678*4882a593Smuzhiyun * Shared Memory 2 Region * 1679*4882a593Smuzhiyun ****************************************************************************/ 1680*4882a593Smuzhiyun /* The fw_flr_ack is actually built in the following way: */ 1681*4882a593Smuzhiyun /* 8 bit: PF ack */ 1682*4882a593Smuzhiyun /* 64 bit: VF ack */ 1683*4882a593Smuzhiyun /* 8 bit: ios_dis_ack */ 1684*4882a593Smuzhiyun /* In order to maintain endianity in the mailbox hsi, we want to keep using */ 1685*4882a593Smuzhiyun /* u32. The fw must have the VF right after the PF since this is how it */ 1686*4882a593Smuzhiyun /* access arrays(it expects always the VF to reside after the PF, and that */ 1687*4882a593Smuzhiyun /* makes the calculation much easier for it. ) */ 1688*4882a593Smuzhiyun /* In order to answer both limitations, and keep the struct small, the code */ 1689*4882a593Smuzhiyun /* will abuse the structure defined here to achieve the actual partition */ 1690*4882a593Smuzhiyun /* above */ 1691*4882a593Smuzhiyun /****************************************************************************/ 1692*4882a593Smuzhiyun struct fw_flr_ack { 1693*4882a593Smuzhiyun u32 pf_ack; 1694*4882a593Smuzhiyun u32 vf_ack[1]; 1695*4882a593Smuzhiyun u32 iov_dis_ack; 1696*4882a593Smuzhiyun }; 1697*4882a593Smuzhiyun 1698*4882a593Smuzhiyun struct fw_flr_mb { 1699*4882a593Smuzhiyun u32 aggint; 1700*4882a593Smuzhiyun u32 opgen_addr; 1701*4882a593Smuzhiyun struct fw_flr_ack ack; 1702*4882a593Smuzhiyun }; 1703*4882a593Smuzhiyun 1704*4882a593Smuzhiyun struct eee_remote_vals { 1705*4882a593Smuzhiyun u32 tx_tw; 1706*4882a593Smuzhiyun u32 rx_tw; 1707*4882a593Smuzhiyun }; 1708*4882a593Smuzhiyun 1709*4882a593Smuzhiyun /**** SUPPORT FOR SHMEM ARRRAYS *** 1710*4882a593Smuzhiyun * The SHMEM HSI is aligned on 32 bit boundaries which makes it difficult to 1711*4882a593Smuzhiyun * define arrays with storage types smaller then unsigned dwords. 1712*4882a593Smuzhiyun * The macros below add generic support for SHMEM arrays with numeric elements 1713*4882a593Smuzhiyun * that can span 2,4,8 or 16 bits. The array underlying type is a 32 bit dword 1714*4882a593Smuzhiyun * array with individual bit-filed elements accessed using shifts and masks. 1715*4882a593Smuzhiyun * 1716*4882a593Smuzhiyun */ 1717*4882a593Smuzhiyun 1718*4882a593Smuzhiyun /* eb is the bitwidth of a single element */ 1719*4882a593Smuzhiyun #define SHMEM_ARRAY_MASK(eb) ((1<<(eb))-1) 1720*4882a593Smuzhiyun #define SHMEM_ARRAY_ENTRY(i, eb) ((i)/(32/(eb))) 1721*4882a593Smuzhiyun 1722*4882a593Smuzhiyun /* the bit-position macro allows the used to flip the order of the arrays 1723*4882a593Smuzhiyun * elements on a per byte or word boundary. 1724*4882a593Smuzhiyun * 1725*4882a593Smuzhiyun * example: an array with 8 entries each 4 bit wide. This array will fit into 1726*4882a593Smuzhiyun * a single dword. The diagrmas below show the array order of the nibbles. 1727*4882a593Smuzhiyun * 1728*4882a593Smuzhiyun * SHMEM_ARRAY_BITPOS(i, 4, 4) defines the stadard ordering: 1729*4882a593Smuzhiyun * 1730*4882a593Smuzhiyun * | | | | 1731*4882a593Smuzhiyun * 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 1732*4882a593Smuzhiyun * | | | | 1733*4882a593Smuzhiyun * 1734*4882a593Smuzhiyun * SHMEM_ARRAY_BITPOS(i, 4, 8) defines a flip ordering per byte: 1735*4882a593Smuzhiyun * 1736*4882a593Smuzhiyun * | | | | 1737*4882a593Smuzhiyun * 1 | 0 | 3 | 2 | 5 | 4 | 7 | 6 | 1738*4882a593Smuzhiyun * | | | | 1739*4882a593Smuzhiyun * 1740*4882a593Smuzhiyun * SHMEM_ARRAY_BITPOS(i, 4, 16) defines a flip ordering per word: 1741*4882a593Smuzhiyun * 1742*4882a593Smuzhiyun * | | | | 1743*4882a593Smuzhiyun * 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 1744*4882a593Smuzhiyun * | | | | 1745*4882a593Smuzhiyun */ 1746*4882a593Smuzhiyun #define SHMEM_ARRAY_BITPOS(i, eb, fb) \ 1747*4882a593Smuzhiyun ((((32/(fb)) - 1 - ((i)/((fb)/(eb))) % (32/(fb))) * (fb)) + \ 1748*4882a593Smuzhiyun (((i)%((fb)/(eb))) * (eb))) 1749*4882a593Smuzhiyun 1750*4882a593Smuzhiyun #define SHMEM_ARRAY_GET(a, i, eb, fb) \ 1751*4882a593Smuzhiyun ((a[SHMEM_ARRAY_ENTRY(i, eb)] >> SHMEM_ARRAY_BITPOS(i, eb, fb)) & \ 1752*4882a593Smuzhiyun SHMEM_ARRAY_MASK(eb)) 1753*4882a593Smuzhiyun 1754*4882a593Smuzhiyun #define SHMEM_ARRAY_SET(a, i, eb, fb, val) \ 1755*4882a593Smuzhiyun do { \ 1756*4882a593Smuzhiyun a[SHMEM_ARRAY_ENTRY(i, eb)] &= ~(SHMEM_ARRAY_MASK(eb) << \ 1757*4882a593Smuzhiyun SHMEM_ARRAY_BITPOS(i, eb, fb)); \ 1758*4882a593Smuzhiyun a[SHMEM_ARRAY_ENTRY(i, eb)] |= (((val) & SHMEM_ARRAY_MASK(eb)) << \ 1759*4882a593Smuzhiyun SHMEM_ARRAY_BITPOS(i, eb, fb)); \ 1760*4882a593Smuzhiyun } while (0) 1761*4882a593Smuzhiyun 1762*4882a593Smuzhiyun 1763*4882a593Smuzhiyun /****START OF DCBX STRUCTURES DECLARATIONS****/ 1764*4882a593Smuzhiyun #define DCBX_MAX_NUM_PRI_PG_ENTRIES 8 1765*4882a593Smuzhiyun #define DCBX_PRI_PG_BITWIDTH 4 1766*4882a593Smuzhiyun #define DCBX_PRI_PG_FBITS 8 1767*4882a593Smuzhiyun #define DCBX_PRI_PG_GET(a, i) \ 1768*4882a593Smuzhiyun SHMEM_ARRAY_GET(a, i, DCBX_PRI_PG_BITWIDTH, DCBX_PRI_PG_FBITS) 1769*4882a593Smuzhiyun #define DCBX_PRI_PG_SET(a, i, val) \ 1770*4882a593Smuzhiyun SHMEM_ARRAY_SET(a, i, DCBX_PRI_PG_BITWIDTH, DCBX_PRI_PG_FBITS, val) 1771*4882a593Smuzhiyun #define DCBX_MAX_NUM_PG_BW_ENTRIES 8 1772*4882a593Smuzhiyun #define DCBX_BW_PG_BITWIDTH 8 1773*4882a593Smuzhiyun #define DCBX_PG_BW_GET(a, i) \ 1774*4882a593Smuzhiyun SHMEM_ARRAY_GET(a, i, DCBX_BW_PG_BITWIDTH, DCBX_BW_PG_BITWIDTH) 1775*4882a593Smuzhiyun #define DCBX_PG_BW_SET(a, i, val) \ 1776*4882a593Smuzhiyun SHMEM_ARRAY_SET(a, i, DCBX_BW_PG_BITWIDTH, DCBX_BW_PG_BITWIDTH, val) 1777*4882a593Smuzhiyun #define DCBX_STRICT_PRI_PG 15 1778*4882a593Smuzhiyun #define DCBX_MAX_APP_PROTOCOL 16 1779*4882a593Smuzhiyun #define FCOE_APP_IDX 0 1780*4882a593Smuzhiyun #define ISCSI_APP_IDX 1 1781*4882a593Smuzhiyun #define PREDEFINED_APP_IDX_MAX 2 1782*4882a593Smuzhiyun 1783*4882a593Smuzhiyun 1784*4882a593Smuzhiyun /* Big/Little endian have the same representation. */ 1785*4882a593Smuzhiyun struct dcbx_ets_feature { 1786*4882a593Smuzhiyun /* 1787*4882a593Smuzhiyun * For Admin MIB - is this feature supported by the 1788*4882a593Smuzhiyun * driver | For Local MIB - should this feature be enabled. 1789*4882a593Smuzhiyun */ 1790*4882a593Smuzhiyun u32 enabled; 1791*4882a593Smuzhiyun u32 pg_bw_tbl[2]; 1792*4882a593Smuzhiyun u32 pri_pg_tbl[1]; 1793*4882a593Smuzhiyun }; 1794*4882a593Smuzhiyun 1795*4882a593Smuzhiyun /* Driver structure in LE */ 1796*4882a593Smuzhiyun struct dcbx_pfc_feature { 1797*4882a593Smuzhiyun #ifdef __BIG_ENDIAN 1798*4882a593Smuzhiyun u8 pri_en_bitmap; 1799*4882a593Smuzhiyun #define DCBX_PFC_PRI_0 0x01 1800*4882a593Smuzhiyun #define DCBX_PFC_PRI_1 0x02 1801*4882a593Smuzhiyun #define DCBX_PFC_PRI_2 0x04 1802*4882a593Smuzhiyun #define DCBX_PFC_PRI_3 0x08 1803*4882a593Smuzhiyun #define DCBX_PFC_PRI_4 0x10 1804*4882a593Smuzhiyun #define DCBX_PFC_PRI_5 0x20 1805*4882a593Smuzhiyun #define DCBX_PFC_PRI_6 0x40 1806*4882a593Smuzhiyun #define DCBX_PFC_PRI_7 0x80 1807*4882a593Smuzhiyun u8 pfc_caps; 1808*4882a593Smuzhiyun u8 reserved; 1809*4882a593Smuzhiyun u8 enabled; 1810*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 1811*4882a593Smuzhiyun u8 enabled; 1812*4882a593Smuzhiyun u8 reserved; 1813*4882a593Smuzhiyun u8 pfc_caps; 1814*4882a593Smuzhiyun u8 pri_en_bitmap; 1815*4882a593Smuzhiyun #define DCBX_PFC_PRI_0 0x01 1816*4882a593Smuzhiyun #define DCBX_PFC_PRI_1 0x02 1817*4882a593Smuzhiyun #define DCBX_PFC_PRI_2 0x04 1818*4882a593Smuzhiyun #define DCBX_PFC_PRI_3 0x08 1819*4882a593Smuzhiyun #define DCBX_PFC_PRI_4 0x10 1820*4882a593Smuzhiyun #define DCBX_PFC_PRI_5 0x20 1821*4882a593Smuzhiyun #define DCBX_PFC_PRI_6 0x40 1822*4882a593Smuzhiyun #define DCBX_PFC_PRI_7 0x80 1823*4882a593Smuzhiyun #endif 1824*4882a593Smuzhiyun }; 1825*4882a593Smuzhiyun 1826*4882a593Smuzhiyun struct dcbx_app_priority_entry { 1827*4882a593Smuzhiyun #ifdef __BIG_ENDIAN 1828*4882a593Smuzhiyun u16 app_id; 1829*4882a593Smuzhiyun u8 pri_bitmap; 1830*4882a593Smuzhiyun u8 appBitfield; 1831*4882a593Smuzhiyun #define DCBX_APP_ENTRY_VALID 0x01 1832*4882a593Smuzhiyun #define DCBX_APP_ENTRY_SF_MASK 0xF0 1833*4882a593Smuzhiyun #define DCBX_APP_ENTRY_SF_SHIFT 4 1834*4882a593Smuzhiyun #define DCBX_APP_SF_ETH_TYPE 0x10 1835*4882a593Smuzhiyun #define DCBX_APP_SF_PORT 0x20 1836*4882a593Smuzhiyun #define DCBX_APP_SF_UDP 0x40 1837*4882a593Smuzhiyun #define DCBX_APP_SF_DEFAULT 0x80 1838*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 1839*4882a593Smuzhiyun u8 appBitfield; 1840*4882a593Smuzhiyun #define DCBX_APP_ENTRY_VALID 0x01 1841*4882a593Smuzhiyun #define DCBX_APP_ENTRY_SF_MASK 0xF0 1842*4882a593Smuzhiyun #define DCBX_APP_ENTRY_SF_SHIFT 4 1843*4882a593Smuzhiyun #define DCBX_APP_ENTRY_VALID 0x01 1844*4882a593Smuzhiyun #define DCBX_APP_SF_ETH_TYPE 0x10 1845*4882a593Smuzhiyun #define DCBX_APP_SF_PORT 0x20 1846*4882a593Smuzhiyun #define DCBX_APP_SF_UDP 0x40 1847*4882a593Smuzhiyun #define DCBX_APP_SF_DEFAULT 0x80 1848*4882a593Smuzhiyun u8 pri_bitmap; 1849*4882a593Smuzhiyun u16 app_id; 1850*4882a593Smuzhiyun #endif 1851*4882a593Smuzhiyun }; 1852*4882a593Smuzhiyun 1853*4882a593Smuzhiyun 1854*4882a593Smuzhiyun /* FW structure in BE */ 1855*4882a593Smuzhiyun struct dcbx_app_priority_feature { 1856*4882a593Smuzhiyun #ifdef __BIG_ENDIAN 1857*4882a593Smuzhiyun u8 reserved; 1858*4882a593Smuzhiyun u8 default_pri; 1859*4882a593Smuzhiyun u8 tc_supported; 1860*4882a593Smuzhiyun u8 enabled; 1861*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 1862*4882a593Smuzhiyun u8 enabled; 1863*4882a593Smuzhiyun u8 tc_supported; 1864*4882a593Smuzhiyun u8 default_pri; 1865*4882a593Smuzhiyun u8 reserved; 1866*4882a593Smuzhiyun #endif 1867*4882a593Smuzhiyun struct dcbx_app_priority_entry app_pri_tbl[DCBX_MAX_APP_PROTOCOL]; 1868*4882a593Smuzhiyun }; 1869*4882a593Smuzhiyun 1870*4882a593Smuzhiyun /* FW structure in BE */ 1871*4882a593Smuzhiyun struct dcbx_features { 1872*4882a593Smuzhiyun /* PG feature */ 1873*4882a593Smuzhiyun struct dcbx_ets_feature ets; 1874*4882a593Smuzhiyun /* PFC feature */ 1875*4882a593Smuzhiyun struct dcbx_pfc_feature pfc; 1876*4882a593Smuzhiyun /* APP feature */ 1877*4882a593Smuzhiyun struct dcbx_app_priority_feature app; 1878*4882a593Smuzhiyun }; 1879*4882a593Smuzhiyun 1880*4882a593Smuzhiyun /* LLDP protocol parameters */ 1881*4882a593Smuzhiyun /* FW structure in BE */ 1882*4882a593Smuzhiyun struct lldp_params { 1883*4882a593Smuzhiyun #ifdef __BIG_ENDIAN 1884*4882a593Smuzhiyun u8 msg_fast_tx_interval; 1885*4882a593Smuzhiyun u8 msg_tx_hold; 1886*4882a593Smuzhiyun u8 msg_tx_interval; 1887*4882a593Smuzhiyun u8 admin_status; 1888*4882a593Smuzhiyun #define LLDP_TX_ONLY 0x01 1889*4882a593Smuzhiyun #define LLDP_RX_ONLY 0x02 1890*4882a593Smuzhiyun #define LLDP_TX_RX 0x03 1891*4882a593Smuzhiyun #define LLDP_DISABLED 0x04 1892*4882a593Smuzhiyun u8 reserved1; 1893*4882a593Smuzhiyun u8 tx_fast; 1894*4882a593Smuzhiyun u8 tx_crd_max; 1895*4882a593Smuzhiyun u8 tx_crd; 1896*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 1897*4882a593Smuzhiyun u8 admin_status; 1898*4882a593Smuzhiyun #define LLDP_TX_ONLY 0x01 1899*4882a593Smuzhiyun #define LLDP_RX_ONLY 0x02 1900*4882a593Smuzhiyun #define LLDP_TX_RX 0x03 1901*4882a593Smuzhiyun #define LLDP_DISABLED 0x04 1902*4882a593Smuzhiyun u8 msg_tx_interval; 1903*4882a593Smuzhiyun u8 msg_tx_hold; 1904*4882a593Smuzhiyun u8 msg_fast_tx_interval; 1905*4882a593Smuzhiyun u8 tx_crd; 1906*4882a593Smuzhiyun u8 tx_crd_max; 1907*4882a593Smuzhiyun u8 tx_fast; 1908*4882a593Smuzhiyun u8 reserved1; 1909*4882a593Smuzhiyun #endif 1910*4882a593Smuzhiyun #define REM_CHASSIS_ID_STAT_LEN 4 1911*4882a593Smuzhiyun #define REM_PORT_ID_STAT_LEN 4 1912*4882a593Smuzhiyun /* Holds remote Chassis ID TLV header, subtype and 9B of payload. */ 1913*4882a593Smuzhiyun u32 peer_chassis_id[REM_CHASSIS_ID_STAT_LEN]; 1914*4882a593Smuzhiyun /* Holds remote Port ID TLV header, subtype and 9B of payload. */ 1915*4882a593Smuzhiyun u32 peer_port_id[REM_PORT_ID_STAT_LEN]; 1916*4882a593Smuzhiyun }; 1917*4882a593Smuzhiyun 1918*4882a593Smuzhiyun struct lldp_dcbx_stat { 1919*4882a593Smuzhiyun #define LOCAL_CHASSIS_ID_STAT_LEN 2 1920*4882a593Smuzhiyun #define LOCAL_PORT_ID_STAT_LEN 2 1921*4882a593Smuzhiyun /* Holds local Chassis ID 8B payload of constant subtype 4. */ 1922*4882a593Smuzhiyun u32 local_chassis_id[LOCAL_CHASSIS_ID_STAT_LEN]; 1923*4882a593Smuzhiyun /* Holds local Port ID 8B payload of constant subtype 3. */ 1924*4882a593Smuzhiyun u32 local_port_id[LOCAL_PORT_ID_STAT_LEN]; 1925*4882a593Smuzhiyun /* Number of DCBX frames transmitted. */ 1926*4882a593Smuzhiyun u32 num_tx_dcbx_pkts; 1927*4882a593Smuzhiyun /* Number of DCBX frames received. */ 1928*4882a593Smuzhiyun u32 num_rx_dcbx_pkts; 1929*4882a593Smuzhiyun }; 1930*4882a593Smuzhiyun 1931*4882a593Smuzhiyun /* ADMIN MIB - DCBX local machine default configuration. */ 1932*4882a593Smuzhiyun struct lldp_admin_mib { 1933*4882a593Smuzhiyun u32 ver_cfg_flags; 1934*4882a593Smuzhiyun #define DCBX_ETS_CONFIG_TX_ENABLED 0x00000001 1935*4882a593Smuzhiyun #define DCBX_PFC_CONFIG_TX_ENABLED 0x00000002 1936*4882a593Smuzhiyun #define DCBX_APP_CONFIG_TX_ENABLED 0x00000004 1937*4882a593Smuzhiyun #define DCBX_ETS_RECO_TX_ENABLED 0x00000008 1938*4882a593Smuzhiyun #define DCBX_ETS_RECO_VALID 0x00000010 1939*4882a593Smuzhiyun #define DCBX_ETS_WILLING 0x00000020 1940*4882a593Smuzhiyun #define DCBX_PFC_WILLING 0x00000040 1941*4882a593Smuzhiyun #define DCBX_APP_WILLING 0x00000080 1942*4882a593Smuzhiyun #define DCBX_VERSION_CEE 0x00000100 1943*4882a593Smuzhiyun #define DCBX_VERSION_IEEE 0x00000200 1944*4882a593Smuzhiyun #define DCBX_DCBX_ENABLED 0x00000400 1945*4882a593Smuzhiyun #define DCBX_CEE_VERSION_MASK 0x0000f000 1946*4882a593Smuzhiyun #define DCBX_CEE_VERSION_SHIFT 12 1947*4882a593Smuzhiyun #define DCBX_CEE_MAX_VERSION_MASK 0x000f0000 1948*4882a593Smuzhiyun #define DCBX_CEE_MAX_VERSION_SHIFT 16 1949*4882a593Smuzhiyun struct dcbx_features features; 1950*4882a593Smuzhiyun }; 1951*4882a593Smuzhiyun 1952*4882a593Smuzhiyun /* REMOTE MIB - remote machine DCBX configuration. */ 1953*4882a593Smuzhiyun struct lldp_remote_mib { 1954*4882a593Smuzhiyun u32 prefix_seq_num; 1955*4882a593Smuzhiyun u32 flags; 1956*4882a593Smuzhiyun #define DCBX_ETS_TLV_RX 0x00000001 1957*4882a593Smuzhiyun #define DCBX_PFC_TLV_RX 0x00000002 1958*4882a593Smuzhiyun #define DCBX_APP_TLV_RX 0x00000004 1959*4882a593Smuzhiyun #define DCBX_ETS_RX_ERROR 0x00000010 1960*4882a593Smuzhiyun #define DCBX_PFC_RX_ERROR 0x00000020 1961*4882a593Smuzhiyun #define DCBX_APP_RX_ERROR 0x00000040 1962*4882a593Smuzhiyun #define DCBX_ETS_REM_WILLING 0x00000100 1963*4882a593Smuzhiyun #define DCBX_PFC_REM_WILLING 0x00000200 1964*4882a593Smuzhiyun #define DCBX_APP_REM_WILLING 0x00000400 1965*4882a593Smuzhiyun #define DCBX_REMOTE_ETS_RECO_VALID 0x00001000 1966*4882a593Smuzhiyun #define DCBX_REMOTE_MIB_VALID 0x00002000 1967*4882a593Smuzhiyun struct dcbx_features features; 1968*4882a593Smuzhiyun u32 suffix_seq_num; 1969*4882a593Smuzhiyun }; 1970*4882a593Smuzhiyun 1971*4882a593Smuzhiyun /* LOCAL MIB - operational DCBX configuration - transmitted on Tx LLDPDU. */ 1972*4882a593Smuzhiyun struct lldp_local_mib { 1973*4882a593Smuzhiyun u32 prefix_seq_num; 1974*4882a593Smuzhiyun /* Indicates if there is mismatch with negotiation results. */ 1975*4882a593Smuzhiyun u32 error; 1976*4882a593Smuzhiyun #define DCBX_LOCAL_ETS_ERROR 0x00000001 1977*4882a593Smuzhiyun #define DCBX_LOCAL_PFC_ERROR 0x00000002 1978*4882a593Smuzhiyun #define DCBX_LOCAL_APP_ERROR 0x00000004 1979*4882a593Smuzhiyun #define DCBX_LOCAL_PFC_MISMATCH 0x00000010 1980*4882a593Smuzhiyun #define DCBX_LOCAL_APP_MISMATCH 0x00000020 1981*4882a593Smuzhiyun #define DCBX_REMOTE_MIB_ERROR 0x00000040 1982*4882a593Smuzhiyun #define DCBX_REMOTE_ETS_TLV_NOT_FOUND 0x00000080 1983*4882a593Smuzhiyun #define DCBX_REMOTE_PFC_TLV_NOT_FOUND 0x00000100 1984*4882a593Smuzhiyun #define DCBX_REMOTE_APP_TLV_NOT_FOUND 0x00000200 1985*4882a593Smuzhiyun struct dcbx_features features; 1986*4882a593Smuzhiyun u32 suffix_seq_num; 1987*4882a593Smuzhiyun }; 1988*4882a593Smuzhiyun /***END OF DCBX STRUCTURES DECLARATIONS***/ 1989*4882a593Smuzhiyun 1990*4882a593Smuzhiyun /***********************************************************/ 1991*4882a593Smuzhiyun /* Elink section */ 1992*4882a593Smuzhiyun /***********************************************************/ 1993*4882a593Smuzhiyun #define SHMEM_LINK_CONFIG_SIZE 2 1994*4882a593Smuzhiyun struct shmem_lfa { 1995*4882a593Smuzhiyun u32 req_duplex; 1996*4882a593Smuzhiyun #define REQ_DUPLEX_PHY0_MASK 0x0000ffff 1997*4882a593Smuzhiyun #define REQ_DUPLEX_PHY0_SHIFT 0 1998*4882a593Smuzhiyun #define REQ_DUPLEX_PHY1_MASK 0xffff0000 1999*4882a593Smuzhiyun #define REQ_DUPLEX_PHY1_SHIFT 16 2000*4882a593Smuzhiyun u32 req_flow_ctrl; 2001*4882a593Smuzhiyun #define REQ_FLOW_CTRL_PHY0_MASK 0x0000ffff 2002*4882a593Smuzhiyun #define REQ_FLOW_CTRL_PHY0_SHIFT 0 2003*4882a593Smuzhiyun #define REQ_FLOW_CTRL_PHY1_MASK 0xffff0000 2004*4882a593Smuzhiyun #define REQ_FLOW_CTRL_PHY1_SHIFT 16 2005*4882a593Smuzhiyun u32 req_line_speed; /* Also determine AutoNeg */ 2006*4882a593Smuzhiyun #define REQ_LINE_SPD_PHY0_MASK 0x0000ffff 2007*4882a593Smuzhiyun #define REQ_LINE_SPD_PHY0_SHIFT 0 2008*4882a593Smuzhiyun #define REQ_LINE_SPD_PHY1_MASK 0xffff0000 2009*4882a593Smuzhiyun #define REQ_LINE_SPD_PHY1_SHIFT 16 2010*4882a593Smuzhiyun u32 speed_cap_mask[SHMEM_LINK_CONFIG_SIZE]; 2011*4882a593Smuzhiyun u32 additional_config; 2012*4882a593Smuzhiyun #define REQ_FC_AUTO_ADV_MASK 0x0000ffff 2013*4882a593Smuzhiyun #define REQ_FC_AUTO_ADV0_SHIFT 0 2014*4882a593Smuzhiyun #define NO_LFA_DUE_TO_DCC_MASK 0x00010000 2015*4882a593Smuzhiyun u32 lfa_sts; 2016*4882a593Smuzhiyun #define LFA_LINK_FLAP_REASON_OFFSET 0 2017*4882a593Smuzhiyun #define LFA_LINK_FLAP_REASON_MASK 0x000000ff 2018*4882a593Smuzhiyun #define LFA_LINK_DOWN 0x1 2019*4882a593Smuzhiyun #define LFA_LOOPBACK_ENABLED 0x2 2020*4882a593Smuzhiyun #define LFA_DUPLEX_MISMATCH 0x3 2021*4882a593Smuzhiyun #define LFA_MFW_IS_TOO_OLD 0x4 2022*4882a593Smuzhiyun #define LFA_LINK_SPEED_MISMATCH 0x5 2023*4882a593Smuzhiyun #define LFA_FLOW_CTRL_MISMATCH 0x6 2024*4882a593Smuzhiyun #define LFA_SPEED_CAP_MISMATCH 0x7 2025*4882a593Smuzhiyun #define LFA_DCC_LFA_DISABLED 0x8 2026*4882a593Smuzhiyun #define LFA_EEE_MISMATCH 0x9 2027*4882a593Smuzhiyun 2028*4882a593Smuzhiyun #define LINK_FLAP_AVOIDANCE_COUNT_OFFSET 8 2029*4882a593Smuzhiyun #define LINK_FLAP_AVOIDANCE_COUNT_MASK 0x0000ff00 2030*4882a593Smuzhiyun 2031*4882a593Smuzhiyun #define LINK_FLAP_COUNT_OFFSET 16 2032*4882a593Smuzhiyun #define LINK_FLAP_COUNT_MASK 0x00ff0000 2033*4882a593Smuzhiyun 2034*4882a593Smuzhiyun #define LFA_FLAGS_MASK 0xff000000 2035*4882a593Smuzhiyun #define SHMEM_LFA_DONT_CLEAR_STAT (1<<24) 2036*4882a593Smuzhiyun }; 2037*4882a593Smuzhiyun 2038*4882a593Smuzhiyun /* Used to support NSCI get OS driver version 2039*4882a593Smuzhiyun * on driver load the version value will be set 2040*4882a593Smuzhiyun * on driver unload driver value of 0x0 will be set. 2041*4882a593Smuzhiyun */ 2042*4882a593Smuzhiyun struct os_drv_ver { 2043*4882a593Smuzhiyun #define DRV_VER_NOT_LOADED 0 2044*4882a593Smuzhiyun 2045*4882a593Smuzhiyun /* personalties order is important */ 2046*4882a593Smuzhiyun #define DRV_PERS_ETHERNET 0 2047*4882a593Smuzhiyun #define DRV_PERS_ISCSI 1 2048*4882a593Smuzhiyun #define DRV_PERS_FCOE 2 2049*4882a593Smuzhiyun 2050*4882a593Smuzhiyun /* shmem2 struct is constant can't add more personalties here */ 2051*4882a593Smuzhiyun #define MAX_DRV_PERS 3 2052*4882a593Smuzhiyun u32 versions[MAX_DRV_PERS]; 2053*4882a593Smuzhiyun }; 2054*4882a593Smuzhiyun 2055*4882a593Smuzhiyun struct ncsi_oem_fcoe_features { 2056*4882a593Smuzhiyun u32 fcoe_features1; 2057*4882a593Smuzhiyun #define FCOE_FEATURES1_IOS_PER_CONNECTION_MASK 0x0000FFFF 2058*4882a593Smuzhiyun #define FCOE_FEATURES1_IOS_PER_CONNECTION_OFFSET 0 2059*4882a593Smuzhiyun 2060*4882a593Smuzhiyun #define FCOE_FEATURES1_LOGINS_PER_PORT_MASK 0xFFFF0000 2061*4882a593Smuzhiyun #define FCOE_FEATURES1_LOGINS_PER_PORT_OFFSET 16 2062*4882a593Smuzhiyun 2063*4882a593Smuzhiyun u32 fcoe_features2; 2064*4882a593Smuzhiyun #define FCOE_FEATURES2_EXCHANGES_MASK 0x0000FFFF 2065*4882a593Smuzhiyun #define FCOE_FEATURES2_EXCHANGES_OFFSET 0 2066*4882a593Smuzhiyun 2067*4882a593Smuzhiyun #define FCOE_FEATURES2_NPIV_WWN_PER_PORT_MASK 0xFFFF0000 2068*4882a593Smuzhiyun #define FCOE_FEATURES2_NPIV_WWN_PER_PORT_OFFSET 16 2069*4882a593Smuzhiyun 2070*4882a593Smuzhiyun u32 fcoe_features3; 2071*4882a593Smuzhiyun #define FCOE_FEATURES3_TARGETS_SUPPORTED_MASK 0x0000FFFF 2072*4882a593Smuzhiyun #define FCOE_FEATURES3_TARGETS_SUPPORTED_OFFSET 0 2073*4882a593Smuzhiyun 2074*4882a593Smuzhiyun #define FCOE_FEATURES3_OUTSTANDING_COMMANDS_MASK 0xFFFF0000 2075*4882a593Smuzhiyun #define FCOE_FEATURES3_OUTSTANDING_COMMANDS_OFFSET 16 2076*4882a593Smuzhiyun 2077*4882a593Smuzhiyun u32 fcoe_features4; 2078*4882a593Smuzhiyun #define FCOE_FEATURES4_FEATURE_SETTINGS_MASK 0x0000000F 2079*4882a593Smuzhiyun #define FCOE_FEATURES4_FEATURE_SETTINGS_OFFSET 0 2080*4882a593Smuzhiyun }; 2081*4882a593Smuzhiyun 2082*4882a593Smuzhiyun enum curr_cfg_method_e { 2083*4882a593Smuzhiyun CURR_CFG_MET_NONE = 0, /* default config */ 2084*4882a593Smuzhiyun CURR_CFG_MET_OS = 1, 2085*4882a593Smuzhiyun CURR_CFG_MET_VENDOR_SPEC = 2,/* e.g. Option ROM, NPAR, O/S Cfg Utils */ 2086*4882a593Smuzhiyun }; 2087*4882a593Smuzhiyun 2088*4882a593Smuzhiyun #define FC_NPIV_WWPN_SIZE 8 2089*4882a593Smuzhiyun #define FC_NPIV_WWNN_SIZE 8 2090*4882a593Smuzhiyun struct bdn_npiv_settings { 2091*4882a593Smuzhiyun u8 npiv_wwpn[FC_NPIV_WWPN_SIZE]; 2092*4882a593Smuzhiyun u8 npiv_wwnn[FC_NPIV_WWNN_SIZE]; 2093*4882a593Smuzhiyun }; 2094*4882a593Smuzhiyun 2095*4882a593Smuzhiyun struct bdn_fc_npiv_cfg { 2096*4882a593Smuzhiyun /* hdr used internally by the MFW */ 2097*4882a593Smuzhiyun u32 hdr; 2098*4882a593Smuzhiyun u32 num_of_npiv; 2099*4882a593Smuzhiyun }; 2100*4882a593Smuzhiyun 2101*4882a593Smuzhiyun #define MAX_NUMBER_NPIV 64 2102*4882a593Smuzhiyun struct bdn_fc_npiv_tbl { 2103*4882a593Smuzhiyun struct bdn_fc_npiv_cfg fc_npiv_cfg; 2104*4882a593Smuzhiyun struct bdn_npiv_settings settings[MAX_NUMBER_NPIV]; 2105*4882a593Smuzhiyun }; 2106*4882a593Smuzhiyun 2107*4882a593Smuzhiyun struct mdump_driver_info { 2108*4882a593Smuzhiyun u32 epoc; 2109*4882a593Smuzhiyun u32 drv_ver; 2110*4882a593Smuzhiyun u32 fw_ver; 2111*4882a593Smuzhiyun 2112*4882a593Smuzhiyun u32 valid_dump; 2113*4882a593Smuzhiyun #define FIRST_DUMP_VALID (1 << 0) 2114*4882a593Smuzhiyun #define SECOND_DUMP_VALID (1 << 1) 2115*4882a593Smuzhiyun 2116*4882a593Smuzhiyun u32 flags; 2117*4882a593Smuzhiyun #define ENABLE_ALL_TRIGGERS (0x7fffffff) 2118*4882a593Smuzhiyun #define TRIGGER_MDUMP_ONCE (1 << 31) 2119*4882a593Smuzhiyun }; 2120*4882a593Smuzhiyun 2121*4882a593Smuzhiyun struct ncsi_oem_data { 2122*4882a593Smuzhiyun u32 driver_version[4]; 2123*4882a593Smuzhiyun struct ncsi_oem_fcoe_features ncsi_oem_fcoe_features; 2124*4882a593Smuzhiyun }; 2125*4882a593Smuzhiyun 2126*4882a593Smuzhiyun struct shmem2_region { 2127*4882a593Smuzhiyun 2128*4882a593Smuzhiyun u32 size; /* 0x0000 */ 2129*4882a593Smuzhiyun 2130*4882a593Smuzhiyun u32 dcc_support; /* 0x0004 */ 2131*4882a593Smuzhiyun #define SHMEM_DCC_SUPPORT_NONE 0x00000000 2132*4882a593Smuzhiyun #define SHMEM_DCC_SUPPORT_DISABLE_ENABLE_PF_TLV 0x00000001 2133*4882a593Smuzhiyun #define SHMEM_DCC_SUPPORT_BANDWIDTH_ALLOCATION_TLV 0x00000004 2134*4882a593Smuzhiyun #define SHMEM_DCC_SUPPORT_CHANGE_MAC_ADDRESS_TLV 0x00000008 2135*4882a593Smuzhiyun #define SHMEM_DCC_SUPPORT_SET_PROTOCOL_TLV 0x00000040 2136*4882a593Smuzhiyun #define SHMEM_DCC_SUPPORT_SET_PRIORITY_TLV 0x00000080 2137*4882a593Smuzhiyun 2138*4882a593Smuzhiyun u32 ext_phy_fw_version2[PORT_MAX]; /* 0x0008 */ 2139*4882a593Smuzhiyun /* 2140*4882a593Smuzhiyun * For backwards compatibility, if the mf_cfg_addr does not exist 2141*4882a593Smuzhiyun * (the size filed is smaller than 0xc) the mf_cfg resides at the 2142*4882a593Smuzhiyun * end of struct shmem_region 2143*4882a593Smuzhiyun */ 2144*4882a593Smuzhiyun u32 mf_cfg_addr; /* 0x0010 */ 2145*4882a593Smuzhiyun #define SHMEM_MF_CFG_ADDR_NONE 0x00000000 2146*4882a593Smuzhiyun 2147*4882a593Smuzhiyun struct fw_flr_mb flr_mb; /* 0x0014 */ 2148*4882a593Smuzhiyun u32 dcbx_lldp_params_offset; /* 0x0028 */ 2149*4882a593Smuzhiyun #define SHMEM_LLDP_DCBX_PARAMS_NONE 0x00000000 2150*4882a593Smuzhiyun u32 dcbx_neg_res_offset; /* 0x002c */ 2151*4882a593Smuzhiyun #define SHMEM_DCBX_NEG_RES_NONE 0x00000000 2152*4882a593Smuzhiyun u32 dcbx_remote_mib_offset; /* 0x0030 */ 2153*4882a593Smuzhiyun #define SHMEM_DCBX_REMOTE_MIB_NONE 0x00000000 2154*4882a593Smuzhiyun /* 2155*4882a593Smuzhiyun * The other shmemX_base_addr holds the other path's shmem address 2156*4882a593Smuzhiyun * required for example in case of common phy init, or for path1 to know 2157*4882a593Smuzhiyun * the address of mcp debug trace which is located in offset from shmem 2158*4882a593Smuzhiyun * of path0 2159*4882a593Smuzhiyun */ 2160*4882a593Smuzhiyun u32 other_shmem_base_addr; /* 0x0034 */ 2161*4882a593Smuzhiyun u32 other_shmem2_base_addr; /* 0x0038 */ 2162*4882a593Smuzhiyun /* 2163*4882a593Smuzhiyun * mcp_vf_disabled is set by the MCP to indicate the driver about VFs 2164*4882a593Smuzhiyun * which were disabled/flred 2165*4882a593Smuzhiyun */ 2166*4882a593Smuzhiyun u32 mcp_vf_disabled[E2_VF_MAX / 32]; /* 0x003c */ 2167*4882a593Smuzhiyun 2168*4882a593Smuzhiyun /* 2169*4882a593Smuzhiyun * drv_ack_vf_disabled is set by the PF driver to ack handled disabled 2170*4882a593Smuzhiyun * VFs 2171*4882a593Smuzhiyun */ 2172*4882a593Smuzhiyun u32 drv_ack_vf_disabled[E2_FUNC_MAX][E2_VF_MAX / 32]; /* 0x0044 */ 2173*4882a593Smuzhiyun 2174*4882a593Smuzhiyun u32 dcbx_lldp_dcbx_stat_offset; /* 0x0064 */ 2175*4882a593Smuzhiyun #define SHMEM_LLDP_DCBX_STAT_NONE 0x00000000 2176*4882a593Smuzhiyun 2177*4882a593Smuzhiyun /* 2178*4882a593Smuzhiyun * edebug_driver_if field is used to transfer messages between edebug 2179*4882a593Smuzhiyun * app to the driver through shmem2. 2180*4882a593Smuzhiyun * 2181*4882a593Smuzhiyun * message format: 2182*4882a593Smuzhiyun * bits 0-2 - function number / instance of driver to perform request 2183*4882a593Smuzhiyun * bits 3-5 - op code / is_ack? 2184*4882a593Smuzhiyun * bits 6-63 - data 2185*4882a593Smuzhiyun */ 2186*4882a593Smuzhiyun u32 edebug_driver_if[2]; /* 0x0068 */ 2187*4882a593Smuzhiyun #define EDEBUG_DRIVER_IF_OP_CODE_GET_PHYS_ADDR 1 2188*4882a593Smuzhiyun #define EDEBUG_DRIVER_IF_OP_CODE_GET_BUS_ADDR 2 2189*4882a593Smuzhiyun #define EDEBUG_DRIVER_IF_OP_CODE_DISABLE_STAT 3 2190*4882a593Smuzhiyun 2191*4882a593Smuzhiyun u32 nvm_retain_bitmap_addr; /* 0x0070 */ 2192*4882a593Smuzhiyun 2193*4882a593Smuzhiyun /* afex support of that driver */ 2194*4882a593Smuzhiyun u32 afex_driver_support; /* 0x0074 */ 2195*4882a593Smuzhiyun #define SHMEM_AFEX_VERSION_MASK 0x100f 2196*4882a593Smuzhiyun #define SHMEM_AFEX_SUPPORTED_VERSION_ONE 0x1001 2197*4882a593Smuzhiyun #define SHMEM_AFEX_REDUCED_DRV_LOADED 0x8000 2198*4882a593Smuzhiyun 2199*4882a593Smuzhiyun /* driver receives addr in scratchpad to which it should respond */ 2200*4882a593Smuzhiyun u32 afex_scratchpad_addr_to_write[E2_FUNC_MAX]; 2201*4882a593Smuzhiyun 2202*4882a593Smuzhiyun /* generic params from MCP to driver (value depends on the msg sent 2203*4882a593Smuzhiyun * to driver 2204*4882a593Smuzhiyun */ 2205*4882a593Smuzhiyun u32 afex_param1_to_driver[E2_FUNC_MAX]; /* 0x0088 */ 2206*4882a593Smuzhiyun u32 afex_param2_to_driver[E2_FUNC_MAX]; /* 0x0098 */ 2207*4882a593Smuzhiyun 2208*4882a593Smuzhiyun u32 swim_base_addr; /* 0x0108 */ 2209*4882a593Smuzhiyun u32 swim_funcs; 2210*4882a593Smuzhiyun u32 swim_main_cb; 2211*4882a593Smuzhiyun 2212*4882a593Smuzhiyun /* bitmap notifying which VIF profiles stored in nvram are enabled by 2213*4882a593Smuzhiyun * switch 2214*4882a593Smuzhiyun */ 2215*4882a593Smuzhiyun u32 afex_profiles_enabled[2]; 2216*4882a593Smuzhiyun 2217*4882a593Smuzhiyun /* generic flags controlled by the driver */ 2218*4882a593Smuzhiyun u32 drv_flags; 2219*4882a593Smuzhiyun #define DRV_FLAGS_DCB_CONFIGURED 0x0 2220*4882a593Smuzhiyun #define DRV_FLAGS_DCB_CONFIGURATION_ABORTED 0x1 2221*4882a593Smuzhiyun #define DRV_FLAGS_DCB_MFW_CONFIGURED 0x2 2222*4882a593Smuzhiyun 2223*4882a593Smuzhiyun #define DRV_FLAGS_PORT_MASK ((1 << DRV_FLAGS_DCB_CONFIGURED) | \ 2224*4882a593Smuzhiyun (1 << DRV_FLAGS_DCB_CONFIGURATION_ABORTED) | \ 2225*4882a593Smuzhiyun (1 << DRV_FLAGS_DCB_MFW_CONFIGURED)) 2226*4882a593Smuzhiyun /* pointer to extended dev_info shared data copied from nvm image */ 2227*4882a593Smuzhiyun u32 extended_dev_info_shared_addr; 2228*4882a593Smuzhiyun u32 ncsi_oem_data_addr; 2229*4882a593Smuzhiyun 2230*4882a593Smuzhiyun u32 ocsd_host_addr; /* initialized by option ROM */ 2231*4882a593Smuzhiyun u32 ocbb_host_addr; /* initialized by option ROM */ 2232*4882a593Smuzhiyun u32 ocsd_req_update_interval; /* initialized by option ROM */ 2233*4882a593Smuzhiyun u32 temperature_in_half_celsius; 2234*4882a593Smuzhiyun u32 glob_struct_in_host; 2235*4882a593Smuzhiyun 2236*4882a593Smuzhiyun u32 dcbx_neg_res_ext_offset; 2237*4882a593Smuzhiyun #define SHMEM_DCBX_NEG_RES_EXT_NONE 0x00000000 2238*4882a593Smuzhiyun 2239*4882a593Smuzhiyun u32 drv_capabilities_flag[E2_FUNC_MAX]; 2240*4882a593Smuzhiyun #define DRV_FLAGS_CAPABILITIES_LOADED_SUPPORTED 0x00000001 2241*4882a593Smuzhiyun #define DRV_FLAGS_CAPABILITIES_LOADED_L2 0x00000002 2242*4882a593Smuzhiyun #define DRV_FLAGS_CAPABILITIES_LOADED_FCOE 0x00000004 2243*4882a593Smuzhiyun #define DRV_FLAGS_CAPABILITIES_LOADED_ISCSI 0x00000008 2244*4882a593Smuzhiyun #define DRV_FLAGS_MTU_MASK 0xffff0000 2245*4882a593Smuzhiyun #define DRV_FLAGS_MTU_SHIFT 16 2246*4882a593Smuzhiyun 2247*4882a593Smuzhiyun u32 extended_dev_info_shared_cfg_size; 2248*4882a593Smuzhiyun 2249*4882a593Smuzhiyun u32 dcbx_en[PORT_MAX]; 2250*4882a593Smuzhiyun 2251*4882a593Smuzhiyun /* The offset points to the multi threaded meta structure */ 2252*4882a593Smuzhiyun u32 multi_thread_data_offset; 2253*4882a593Smuzhiyun 2254*4882a593Smuzhiyun /* address of DMAable host address holding values from the drivers */ 2255*4882a593Smuzhiyun u32 drv_info_host_addr_lo; 2256*4882a593Smuzhiyun u32 drv_info_host_addr_hi; 2257*4882a593Smuzhiyun 2258*4882a593Smuzhiyun /* general values written by the MFW (such as current version) */ 2259*4882a593Smuzhiyun u32 drv_info_control; 2260*4882a593Smuzhiyun #define DRV_INFO_CONTROL_VER_MASK 0x000000ff 2261*4882a593Smuzhiyun #define DRV_INFO_CONTROL_VER_SHIFT 0 2262*4882a593Smuzhiyun #define DRV_INFO_CONTROL_OP_CODE_MASK 0x0000ff00 2263*4882a593Smuzhiyun #define DRV_INFO_CONTROL_OP_CODE_SHIFT 8 2264*4882a593Smuzhiyun u32 ibft_host_addr; /* initialized by option ROM */ 2265*4882a593Smuzhiyun struct eee_remote_vals eee_remote_vals[PORT_MAX]; 2266*4882a593Smuzhiyun u32 reserved[E2_FUNC_MAX]; 2267*4882a593Smuzhiyun 2268*4882a593Smuzhiyun 2269*4882a593Smuzhiyun /* the status of EEE auto-negotiation 2270*4882a593Smuzhiyun * bits 15:0 the configured tx-lpi entry timer value. Depends on bit 31. 2271*4882a593Smuzhiyun * bits 19:16 the supported modes for EEE. 2272*4882a593Smuzhiyun * bits 23:20 the speeds advertised for EEE. 2273*4882a593Smuzhiyun * bits 27:24 the speeds the Link partner advertised for EEE. 2274*4882a593Smuzhiyun * The supported/adv. modes in bits 27:19 originate from the 2275*4882a593Smuzhiyun * SHMEM_EEE_XXX_ADV definitions (where XXX is replaced by speed). 2276*4882a593Smuzhiyun * bit 28 when 1'b1 EEE was requested. 2277*4882a593Smuzhiyun * bit 29 when 1'b1 tx lpi was requested. 2278*4882a593Smuzhiyun * bit 30 when 1'b1 EEE was negotiated. Tx lpi will be asserted iff 2279*4882a593Smuzhiyun * 30:29 are 2'b11. 2280*4882a593Smuzhiyun * bit 31 when 1'b0 bits 15:0 contain a PORT_FEAT_CFG_EEE_ define as 2281*4882a593Smuzhiyun * value. When 1'b1 those bits contains a value times 16 microseconds. 2282*4882a593Smuzhiyun */ 2283*4882a593Smuzhiyun u32 eee_status[PORT_MAX]; 2284*4882a593Smuzhiyun #define SHMEM_EEE_TIMER_MASK 0x0000ffff 2285*4882a593Smuzhiyun #define SHMEM_EEE_SUPPORTED_MASK 0x000f0000 2286*4882a593Smuzhiyun #define SHMEM_EEE_SUPPORTED_SHIFT 16 2287*4882a593Smuzhiyun #define SHMEM_EEE_ADV_STATUS_MASK 0x00f00000 2288*4882a593Smuzhiyun #define SHMEM_EEE_100M_ADV (1<<0) 2289*4882a593Smuzhiyun #define SHMEM_EEE_1G_ADV (1<<1) 2290*4882a593Smuzhiyun #define SHMEM_EEE_10G_ADV (1<<2) 2291*4882a593Smuzhiyun #define SHMEM_EEE_ADV_STATUS_SHIFT 20 2292*4882a593Smuzhiyun #define SHMEM_EEE_LP_ADV_STATUS_MASK 0x0f000000 2293*4882a593Smuzhiyun #define SHMEM_EEE_LP_ADV_STATUS_SHIFT 24 2294*4882a593Smuzhiyun #define SHMEM_EEE_REQUESTED_BIT 0x10000000 2295*4882a593Smuzhiyun #define SHMEM_EEE_LPI_REQUESTED_BIT 0x20000000 2296*4882a593Smuzhiyun #define SHMEM_EEE_ACTIVE_BIT 0x40000000 2297*4882a593Smuzhiyun #define SHMEM_EEE_TIME_OUTPUT_BIT 0x80000000 2298*4882a593Smuzhiyun 2299*4882a593Smuzhiyun u32 sizeof_port_stats; 2300*4882a593Smuzhiyun 2301*4882a593Smuzhiyun /* Link Flap Avoidance */ 2302*4882a593Smuzhiyun u32 lfa_host_addr[PORT_MAX]; 2303*4882a593Smuzhiyun u32 reserved1; 2304*4882a593Smuzhiyun 2305*4882a593Smuzhiyun u32 reserved2; /* Offset 0x148 */ 2306*4882a593Smuzhiyun u32 reserved3; /* Offset 0x14C */ 2307*4882a593Smuzhiyun u32 reserved4; /* Offset 0x150 */ 2308*4882a593Smuzhiyun u32 link_attr_sync[PORT_MAX]; /* Offset 0x154 */ 2309*4882a593Smuzhiyun #define LINK_ATTR_SYNC_KR2_ENABLE 0x00000001 2310*4882a593Smuzhiyun #define LINK_ATTR_84858 0x00000002 2311*4882a593Smuzhiyun #define LINK_SFP_EEPROM_COMP_CODE_MASK 0x0000ff00 2312*4882a593Smuzhiyun #define LINK_SFP_EEPROM_COMP_CODE_SHIFT 8 2313*4882a593Smuzhiyun #define LINK_SFP_EEPROM_COMP_CODE_SR 0x00001000 2314*4882a593Smuzhiyun #define LINK_SFP_EEPROM_COMP_CODE_LR 0x00002000 2315*4882a593Smuzhiyun #define LINK_SFP_EEPROM_COMP_CODE_LRM 0x00004000 2316*4882a593Smuzhiyun 2317*4882a593Smuzhiyun u32 reserved5[2]; 2318*4882a593Smuzhiyun u32 link_change_count[PORT_MAX]; /* Offset 0x160-0x164 */ 2319*4882a593Smuzhiyun #define LINK_CHANGE_COUNT_MASK 0xff /* Offset 0x168 */ 2320*4882a593Smuzhiyun /* driver version for each personality */ 2321*4882a593Smuzhiyun struct os_drv_ver func_os_drv_ver[E2_FUNC_MAX]; /* Offset 0x16c */ 2322*4882a593Smuzhiyun 2323*4882a593Smuzhiyun /* Flag to the driver that PF's drv_info_host_addr buffer was read */ 2324*4882a593Smuzhiyun u32 mfw_drv_indication; 2325*4882a593Smuzhiyun 2326*4882a593Smuzhiyun /* We use indication for each PF (0..3) */ 2327*4882a593Smuzhiyun #define MFW_DRV_IND_READ_DONE_OFFSET(_pf_) (1 << (_pf_)) 2328*4882a593Smuzhiyun union { /* For various OEMs */ /* Offset 0x1a0 */ 2329*4882a593Smuzhiyun u8 storage_boot_prog[E2_FUNC_MAX]; 2330*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_MASK 0x000000FF 2331*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_NONE 0x00000000 2332*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_ISCSI_IP_ACQUIRED 0x00000002 2333*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_FCOE_FABRIC_LOGIN_SUCCESS 0x00000002 2334*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_TARGET_FOUND 0x00000004 2335*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_ISCSI_CHAP_SUCCESS 0x00000008 2336*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_FCOE_LUN_FOUND 0x00000008 2337*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_LOGGED_INTO_TGT 0x00000010 2338*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_IMG_DOWNLOADED 0x00000020 2339*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_OS_HANDOFF 0x00000040 2340*4882a593Smuzhiyun #define STORAGE_BOOT_PROG_COMPLETED 0x00000080 2341*4882a593Smuzhiyun 2342*4882a593Smuzhiyun u32 oem_i2c_data_addr; 2343*4882a593Smuzhiyun }; 2344*4882a593Smuzhiyun 2345*4882a593Smuzhiyun /* 9 entires for the C2S PCP map for each inner VLAN PCP + 1 default */ 2346*4882a593Smuzhiyun /* For PCP values 0-3 use the map lower */ 2347*4882a593Smuzhiyun /* 0xFF000000 - PCP 0, 0x00FF0000 - PCP 1, 2348*4882a593Smuzhiyun * 0x0000FF00 - PCP 2, 0x000000FF PCP 3 2349*4882a593Smuzhiyun */ 2350*4882a593Smuzhiyun u32 c2s_pcp_map_lower[E2_FUNC_MAX]; /* 0x1a4 */ 2351*4882a593Smuzhiyun 2352*4882a593Smuzhiyun /* For PCP values 4-7 use the map upper */ 2353*4882a593Smuzhiyun /* 0xFF000000 - PCP 4, 0x00FF0000 - PCP 5, 2354*4882a593Smuzhiyun * 0x0000FF00 - PCP 6, 0x000000FF PCP 7 2355*4882a593Smuzhiyun */ 2356*4882a593Smuzhiyun u32 c2s_pcp_map_upper[E2_FUNC_MAX]; /* 0x1b4 */ 2357*4882a593Smuzhiyun 2358*4882a593Smuzhiyun /* For PCP default value get the MSB byte of the map default */ 2359*4882a593Smuzhiyun u32 c2s_pcp_map_default[E2_FUNC_MAX]; /* 0x1c4 */ 2360*4882a593Smuzhiyun 2361*4882a593Smuzhiyun /* FC_NPIV table offset in NVRAM */ 2362*4882a593Smuzhiyun u32 fc_npiv_nvram_tbl_addr[PORT_MAX]; /* 0x1d4 */ 2363*4882a593Smuzhiyun 2364*4882a593Smuzhiyun /* Shows last method that changed configuration of this device */ 2365*4882a593Smuzhiyun enum curr_cfg_method_e curr_cfg; /* 0x1dc */ 2366*4882a593Smuzhiyun 2367*4882a593Smuzhiyun /* Storm FW version, shold be kept in the format 0xMMmmbbdd: 2368*4882a593Smuzhiyun * MM - Major, mm - Minor, bb - Build ,dd - Drop 2369*4882a593Smuzhiyun */ 2370*4882a593Smuzhiyun u32 netproc_fw_ver; /* 0x1e0 */ 2371*4882a593Smuzhiyun 2372*4882a593Smuzhiyun /* Option ROM SMASH CLP version */ 2373*4882a593Smuzhiyun u32 clp_ver; /* 0x1e4 */ 2374*4882a593Smuzhiyun 2375*4882a593Smuzhiyun u32 pcie_bus_num; /* 0x1e8 */ 2376*4882a593Smuzhiyun 2377*4882a593Smuzhiyun u32 sriov_switch_mode; /* 0x1ec */ 2378*4882a593Smuzhiyun #define SRIOV_SWITCH_MODE_NONE 0x0 2379*4882a593Smuzhiyun #define SRIOV_SWITCH_MODE_VEB 0x1 2380*4882a593Smuzhiyun #define SRIOV_SWITCH_MODE_VEPA 0x2 2381*4882a593Smuzhiyun 2382*4882a593Smuzhiyun u8 rsrv2[E2_FUNC_MAX]; /* 0x1f0 */ 2383*4882a593Smuzhiyun 2384*4882a593Smuzhiyun u32 img_inv_table_addr; /* Address to INV_TABLE_P */ /* 0x1f4 */ 2385*4882a593Smuzhiyun 2386*4882a593Smuzhiyun u32 mtu_size[E2_FUNC_MAX]; /* 0x1f8 */ 2387*4882a593Smuzhiyun 2388*4882a593Smuzhiyun u32 os_driver_state[E2_FUNC_MAX]; /* 0x208 */ 2389*4882a593Smuzhiyun #define OS_DRIVER_STATE_NOT_LOADED 0 /* not installed */ 2390*4882a593Smuzhiyun #define OS_DRIVER_STATE_LOADING 1 /* transition state */ 2391*4882a593Smuzhiyun #define OS_DRIVER_STATE_DISABLED 2 /* installed but disabled */ 2392*4882a593Smuzhiyun #define OS_DRIVER_STATE_ACTIVE 3 /* installed and active */ 2393*4882a593Smuzhiyun 2394*4882a593Smuzhiyun /* mini dump driver info */ 2395*4882a593Smuzhiyun struct mdump_driver_info drv_info; /* 0x218 */ 2396*4882a593Smuzhiyun }; 2397*4882a593Smuzhiyun 2398*4882a593Smuzhiyun 2399*4882a593Smuzhiyun struct emac_stats { 2400*4882a593Smuzhiyun u32 rx_stat_ifhcinoctets; 2401*4882a593Smuzhiyun u32 rx_stat_ifhcinbadoctets; 2402*4882a593Smuzhiyun u32 rx_stat_etherstatsfragments; 2403*4882a593Smuzhiyun u32 rx_stat_ifhcinucastpkts; 2404*4882a593Smuzhiyun u32 rx_stat_ifhcinmulticastpkts; 2405*4882a593Smuzhiyun u32 rx_stat_ifhcinbroadcastpkts; 2406*4882a593Smuzhiyun u32 rx_stat_dot3statsfcserrors; 2407*4882a593Smuzhiyun u32 rx_stat_dot3statsalignmenterrors; 2408*4882a593Smuzhiyun u32 rx_stat_dot3statscarriersenseerrors; 2409*4882a593Smuzhiyun u32 rx_stat_xonpauseframesreceived; 2410*4882a593Smuzhiyun u32 rx_stat_xoffpauseframesreceived; 2411*4882a593Smuzhiyun u32 rx_stat_maccontrolframesreceived; 2412*4882a593Smuzhiyun u32 rx_stat_xoffstateentered; 2413*4882a593Smuzhiyun u32 rx_stat_dot3statsframestoolong; 2414*4882a593Smuzhiyun u32 rx_stat_etherstatsjabbers; 2415*4882a593Smuzhiyun u32 rx_stat_etherstatsundersizepkts; 2416*4882a593Smuzhiyun u32 rx_stat_etherstatspkts64octets; 2417*4882a593Smuzhiyun u32 rx_stat_etherstatspkts65octetsto127octets; 2418*4882a593Smuzhiyun u32 rx_stat_etherstatspkts128octetsto255octets; 2419*4882a593Smuzhiyun u32 rx_stat_etherstatspkts256octetsto511octets; 2420*4882a593Smuzhiyun u32 rx_stat_etherstatspkts512octetsto1023octets; 2421*4882a593Smuzhiyun u32 rx_stat_etherstatspkts1024octetsto1522octets; 2422*4882a593Smuzhiyun u32 rx_stat_etherstatspktsover1522octets; 2423*4882a593Smuzhiyun 2424*4882a593Smuzhiyun u32 rx_stat_falsecarriererrors; 2425*4882a593Smuzhiyun 2426*4882a593Smuzhiyun u32 tx_stat_ifhcoutoctets; 2427*4882a593Smuzhiyun u32 tx_stat_ifhcoutbadoctets; 2428*4882a593Smuzhiyun u32 tx_stat_etherstatscollisions; 2429*4882a593Smuzhiyun u32 tx_stat_outxonsent; 2430*4882a593Smuzhiyun u32 tx_stat_outxoffsent; 2431*4882a593Smuzhiyun u32 tx_stat_flowcontroldone; 2432*4882a593Smuzhiyun u32 tx_stat_dot3statssinglecollisionframes; 2433*4882a593Smuzhiyun u32 tx_stat_dot3statsmultiplecollisionframes; 2434*4882a593Smuzhiyun u32 tx_stat_dot3statsdeferredtransmissions; 2435*4882a593Smuzhiyun u32 tx_stat_dot3statsexcessivecollisions; 2436*4882a593Smuzhiyun u32 tx_stat_dot3statslatecollisions; 2437*4882a593Smuzhiyun u32 tx_stat_ifhcoutucastpkts; 2438*4882a593Smuzhiyun u32 tx_stat_ifhcoutmulticastpkts; 2439*4882a593Smuzhiyun u32 tx_stat_ifhcoutbroadcastpkts; 2440*4882a593Smuzhiyun u32 tx_stat_etherstatspkts64octets; 2441*4882a593Smuzhiyun u32 tx_stat_etherstatspkts65octetsto127octets; 2442*4882a593Smuzhiyun u32 tx_stat_etherstatspkts128octetsto255octets; 2443*4882a593Smuzhiyun u32 tx_stat_etherstatspkts256octetsto511octets; 2444*4882a593Smuzhiyun u32 tx_stat_etherstatspkts512octetsto1023octets; 2445*4882a593Smuzhiyun u32 tx_stat_etherstatspkts1024octetsto1522octets; 2446*4882a593Smuzhiyun u32 tx_stat_etherstatspktsover1522octets; 2447*4882a593Smuzhiyun u32 tx_stat_dot3statsinternalmactransmiterrors; 2448*4882a593Smuzhiyun }; 2449*4882a593Smuzhiyun 2450*4882a593Smuzhiyun 2451*4882a593Smuzhiyun struct bmac1_stats { 2452*4882a593Smuzhiyun u32 tx_stat_gtpkt_lo; 2453*4882a593Smuzhiyun u32 tx_stat_gtpkt_hi; 2454*4882a593Smuzhiyun u32 tx_stat_gtxpf_lo; 2455*4882a593Smuzhiyun u32 tx_stat_gtxpf_hi; 2456*4882a593Smuzhiyun u32 tx_stat_gtfcs_lo; 2457*4882a593Smuzhiyun u32 tx_stat_gtfcs_hi; 2458*4882a593Smuzhiyun u32 tx_stat_gtmca_lo; 2459*4882a593Smuzhiyun u32 tx_stat_gtmca_hi; 2460*4882a593Smuzhiyun u32 tx_stat_gtbca_lo; 2461*4882a593Smuzhiyun u32 tx_stat_gtbca_hi; 2462*4882a593Smuzhiyun u32 tx_stat_gtfrg_lo; 2463*4882a593Smuzhiyun u32 tx_stat_gtfrg_hi; 2464*4882a593Smuzhiyun u32 tx_stat_gtovr_lo; 2465*4882a593Smuzhiyun u32 tx_stat_gtovr_hi; 2466*4882a593Smuzhiyun u32 tx_stat_gt64_lo; 2467*4882a593Smuzhiyun u32 tx_stat_gt64_hi; 2468*4882a593Smuzhiyun u32 tx_stat_gt127_lo; 2469*4882a593Smuzhiyun u32 tx_stat_gt127_hi; 2470*4882a593Smuzhiyun u32 tx_stat_gt255_lo; 2471*4882a593Smuzhiyun u32 tx_stat_gt255_hi; 2472*4882a593Smuzhiyun u32 tx_stat_gt511_lo; 2473*4882a593Smuzhiyun u32 tx_stat_gt511_hi; 2474*4882a593Smuzhiyun u32 tx_stat_gt1023_lo; 2475*4882a593Smuzhiyun u32 tx_stat_gt1023_hi; 2476*4882a593Smuzhiyun u32 tx_stat_gt1518_lo; 2477*4882a593Smuzhiyun u32 tx_stat_gt1518_hi; 2478*4882a593Smuzhiyun u32 tx_stat_gt2047_lo; 2479*4882a593Smuzhiyun u32 tx_stat_gt2047_hi; 2480*4882a593Smuzhiyun u32 tx_stat_gt4095_lo; 2481*4882a593Smuzhiyun u32 tx_stat_gt4095_hi; 2482*4882a593Smuzhiyun u32 tx_stat_gt9216_lo; 2483*4882a593Smuzhiyun u32 tx_stat_gt9216_hi; 2484*4882a593Smuzhiyun u32 tx_stat_gt16383_lo; 2485*4882a593Smuzhiyun u32 tx_stat_gt16383_hi; 2486*4882a593Smuzhiyun u32 tx_stat_gtmax_lo; 2487*4882a593Smuzhiyun u32 tx_stat_gtmax_hi; 2488*4882a593Smuzhiyun u32 tx_stat_gtufl_lo; 2489*4882a593Smuzhiyun u32 tx_stat_gtufl_hi; 2490*4882a593Smuzhiyun u32 tx_stat_gterr_lo; 2491*4882a593Smuzhiyun u32 tx_stat_gterr_hi; 2492*4882a593Smuzhiyun u32 tx_stat_gtbyt_lo; 2493*4882a593Smuzhiyun u32 tx_stat_gtbyt_hi; 2494*4882a593Smuzhiyun 2495*4882a593Smuzhiyun u32 rx_stat_gr64_lo; 2496*4882a593Smuzhiyun u32 rx_stat_gr64_hi; 2497*4882a593Smuzhiyun u32 rx_stat_gr127_lo; 2498*4882a593Smuzhiyun u32 rx_stat_gr127_hi; 2499*4882a593Smuzhiyun u32 rx_stat_gr255_lo; 2500*4882a593Smuzhiyun u32 rx_stat_gr255_hi; 2501*4882a593Smuzhiyun u32 rx_stat_gr511_lo; 2502*4882a593Smuzhiyun u32 rx_stat_gr511_hi; 2503*4882a593Smuzhiyun u32 rx_stat_gr1023_lo; 2504*4882a593Smuzhiyun u32 rx_stat_gr1023_hi; 2505*4882a593Smuzhiyun u32 rx_stat_gr1518_lo; 2506*4882a593Smuzhiyun u32 rx_stat_gr1518_hi; 2507*4882a593Smuzhiyun u32 rx_stat_gr2047_lo; 2508*4882a593Smuzhiyun u32 rx_stat_gr2047_hi; 2509*4882a593Smuzhiyun u32 rx_stat_gr4095_lo; 2510*4882a593Smuzhiyun u32 rx_stat_gr4095_hi; 2511*4882a593Smuzhiyun u32 rx_stat_gr9216_lo; 2512*4882a593Smuzhiyun u32 rx_stat_gr9216_hi; 2513*4882a593Smuzhiyun u32 rx_stat_gr16383_lo; 2514*4882a593Smuzhiyun u32 rx_stat_gr16383_hi; 2515*4882a593Smuzhiyun u32 rx_stat_grmax_lo; 2516*4882a593Smuzhiyun u32 rx_stat_grmax_hi; 2517*4882a593Smuzhiyun u32 rx_stat_grpkt_lo; 2518*4882a593Smuzhiyun u32 rx_stat_grpkt_hi; 2519*4882a593Smuzhiyun u32 rx_stat_grfcs_lo; 2520*4882a593Smuzhiyun u32 rx_stat_grfcs_hi; 2521*4882a593Smuzhiyun u32 rx_stat_grmca_lo; 2522*4882a593Smuzhiyun u32 rx_stat_grmca_hi; 2523*4882a593Smuzhiyun u32 rx_stat_grbca_lo; 2524*4882a593Smuzhiyun u32 rx_stat_grbca_hi; 2525*4882a593Smuzhiyun u32 rx_stat_grxcf_lo; 2526*4882a593Smuzhiyun u32 rx_stat_grxcf_hi; 2527*4882a593Smuzhiyun u32 rx_stat_grxpf_lo; 2528*4882a593Smuzhiyun u32 rx_stat_grxpf_hi; 2529*4882a593Smuzhiyun u32 rx_stat_grxuo_lo; 2530*4882a593Smuzhiyun u32 rx_stat_grxuo_hi; 2531*4882a593Smuzhiyun u32 rx_stat_grjbr_lo; 2532*4882a593Smuzhiyun u32 rx_stat_grjbr_hi; 2533*4882a593Smuzhiyun u32 rx_stat_grovr_lo; 2534*4882a593Smuzhiyun u32 rx_stat_grovr_hi; 2535*4882a593Smuzhiyun u32 rx_stat_grflr_lo; 2536*4882a593Smuzhiyun u32 rx_stat_grflr_hi; 2537*4882a593Smuzhiyun u32 rx_stat_grmeg_lo; 2538*4882a593Smuzhiyun u32 rx_stat_grmeg_hi; 2539*4882a593Smuzhiyun u32 rx_stat_grmeb_lo; 2540*4882a593Smuzhiyun u32 rx_stat_grmeb_hi; 2541*4882a593Smuzhiyun u32 rx_stat_grbyt_lo; 2542*4882a593Smuzhiyun u32 rx_stat_grbyt_hi; 2543*4882a593Smuzhiyun u32 rx_stat_grund_lo; 2544*4882a593Smuzhiyun u32 rx_stat_grund_hi; 2545*4882a593Smuzhiyun u32 rx_stat_grfrg_lo; 2546*4882a593Smuzhiyun u32 rx_stat_grfrg_hi; 2547*4882a593Smuzhiyun u32 rx_stat_grerb_lo; 2548*4882a593Smuzhiyun u32 rx_stat_grerb_hi; 2549*4882a593Smuzhiyun u32 rx_stat_grfre_lo; 2550*4882a593Smuzhiyun u32 rx_stat_grfre_hi; 2551*4882a593Smuzhiyun u32 rx_stat_gripj_lo; 2552*4882a593Smuzhiyun u32 rx_stat_gripj_hi; 2553*4882a593Smuzhiyun }; 2554*4882a593Smuzhiyun 2555*4882a593Smuzhiyun struct bmac2_stats { 2556*4882a593Smuzhiyun u32 tx_stat_gtpk_lo; /* gtpok */ 2557*4882a593Smuzhiyun u32 tx_stat_gtpk_hi; /* gtpok */ 2558*4882a593Smuzhiyun u32 tx_stat_gtxpf_lo; /* gtpf */ 2559*4882a593Smuzhiyun u32 tx_stat_gtxpf_hi; /* gtpf */ 2560*4882a593Smuzhiyun u32 tx_stat_gtpp_lo; /* NEW BMAC2 */ 2561*4882a593Smuzhiyun u32 tx_stat_gtpp_hi; /* NEW BMAC2 */ 2562*4882a593Smuzhiyun u32 tx_stat_gtfcs_lo; 2563*4882a593Smuzhiyun u32 tx_stat_gtfcs_hi; 2564*4882a593Smuzhiyun u32 tx_stat_gtuca_lo; /* NEW BMAC2 */ 2565*4882a593Smuzhiyun u32 tx_stat_gtuca_hi; /* NEW BMAC2 */ 2566*4882a593Smuzhiyun u32 tx_stat_gtmca_lo; 2567*4882a593Smuzhiyun u32 tx_stat_gtmca_hi; 2568*4882a593Smuzhiyun u32 tx_stat_gtbca_lo; 2569*4882a593Smuzhiyun u32 tx_stat_gtbca_hi; 2570*4882a593Smuzhiyun u32 tx_stat_gtovr_lo; 2571*4882a593Smuzhiyun u32 tx_stat_gtovr_hi; 2572*4882a593Smuzhiyun u32 tx_stat_gtfrg_lo; 2573*4882a593Smuzhiyun u32 tx_stat_gtfrg_hi; 2574*4882a593Smuzhiyun u32 tx_stat_gtpkt1_lo; /* gtpkt */ 2575*4882a593Smuzhiyun u32 tx_stat_gtpkt1_hi; /* gtpkt */ 2576*4882a593Smuzhiyun u32 tx_stat_gt64_lo; 2577*4882a593Smuzhiyun u32 tx_stat_gt64_hi; 2578*4882a593Smuzhiyun u32 tx_stat_gt127_lo; 2579*4882a593Smuzhiyun u32 tx_stat_gt127_hi; 2580*4882a593Smuzhiyun u32 tx_stat_gt255_lo; 2581*4882a593Smuzhiyun u32 tx_stat_gt255_hi; 2582*4882a593Smuzhiyun u32 tx_stat_gt511_lo; 2583*4882a593Smuzhiyun u32 tx_stat_gt511_hi; 2584*4882a593Smuzhiyun u32 tx_stat_gt1023_lo; 2585*4882a593Smuzhiyun u32 tx_stat_gt1023_hi; 2586*4882a593Smuzhiyun u32 tx_stat_gt1518_lo; 2587*4882a593Smuzhiyun u32 tx_stat_gt1518_hi; 2588*4882a593Smuzhiyun u32 tx_stat_gt2047_lo; 2589*4882a593Smuzhiyun u32 tx_stat_gt2047_hi; 2590*4882a593Smuzhiyun u32 tx_stat_gt4095_lo; 2591*4882a593Smuzhiyun u32 tx_stat_gt4095_hi; 2592*4882a593Smuzhiyun u32 tx_stat_gt9216_lo; 2593*4882a593Smuzhiyun u32 tx_stat_gt9216_hi; 2594*4882a593Smuzhiyun u32 tx_stat_gt16383_lo; 2595*4882a593Smuzhiyun u32 tx_stat_gt16383_hi; 2596*4882a593Smuzhiyun u32 tx_stat_gtmax_lo; 2597*4882a593Smuzhiyun u32 tx_stat_gtmax_hi; 2598*4882a593Smuzhiyun u32 tx_stat_gtufl_lo; 2599*4882a593Smuzhiyun u32 tx_stat_gtufl_hi; 2600*4882a593Smuzhiyun u32 tx_stat_gterr_lo; 2601*4882a593Smuzhiyun u32 tx_stat_gterr_hi; 2602*4882a593Smuzhiyun u32 tx_stat_gtbyt_lo; 2603*4882a593Smuzhiyun u32 tx_stat_gtbyt_hi; 2604*4882a593Smuzhiyun 2605*4882a593Smuzhiyun u32 rx_stat_gr64_lo; 2606*4882a593Smuzhiyun u32 rx_stat_gr64_hi; 2607*4882a593Smuzhiyun u32 rx_stat_gr127_lo; 2608*4882a593Smuzhiyun u32 rx_stat_gr127_hi; 2609*4882a593Smuzhiyun u32 rx_stat_gr255_lo; 2610*4882a593Smuzhiyun u32 rx_stat_gr255_hi; 2611*4882a593Smuzhiyun u32 rx_stat_gr511_lo; 2612*4882a593Smuzhiyun u32 rx_stat_gr511_hi; 2613*4882a593Smuzhiyun u32 rx_stat_gr1023_lo; 2614*4882a593Smuzhiyun u32 rx_stat_gr1023_hi; 2615*4882a593Smuzhiyun u32 rx_stat_gr1518_lo; 2616*4882a593Smuzhiyun u32 rx_stat_gr1518_hi; 2617*4882a593Smuzhiyun u32 rx_stat_gr2047_lo; 2618*4882a593Smuzhiyun u32 rx_stat_gr2047_hi; 2619*4882a593Smuzhiyun u32 rx_stat_gr4095_lo; 2620*4882a593Smuzhiyun u32 rx_stat_gr4095_hi; 2621*4882a593Smuzhiyun u32 rx_stat_gr9216_lo; 2622*4882a593Smuzhiyun u32 rx_stat_gr9216_hi; 2623*4882a593Smuzhiyun u32 rx_stat_gr16383_lo; 2624*4882a593Smuzhiyun u32 rx_stat_gr16383_hi; 2625*4882a593Smuzhiyun u32 rx_stat_grmax_lo; 2626*4882a593Smuzhiyun u32 rx_stat_grmax_hi; 2627*4882a593Smuzhiyun u32 rx_stat_grpkt_lo; 2628*4882a593Smuzhiyun u32 rx_stat_grpkt_hi; 2629*4882a593Smuzhiyun u32 rx_stat_grfcs_lo; 2630*4882a593Smuzhiyun u32 rx_stat_grfcs_hi; 2631*4882a593Smuzhiyun u32 rx_stat_gruca_lo; 2632*4882a593Smuzhiyun u32 rx_stat_gruca_hi; 2633*4882a593Smuzhiyun u32 rx_stat_grmca_lo; 2634*4882a593Smuzhiyun u32 rx_stat_grmca_hi; 2635*4882a593Smuzhiyun u32 rx_stat_grbca_lo; 2636*4882a593Smuzhiyun u32 rx_stat_grbca_hi; 2637*4882a593Smuzhiyun u32 rx_stat_grxpf_lo; /* grpf */ 2638*4882a593Smuzhiyun u32 rx_stat_grxpf_hi; /* grpf */ 2639*4882a593Smuzhiyun u32 rx_stat_grpp_lo; 2640*4882a593Smuzhiyun u32 rx_stat_grpp_hi; 2641*4882a593Smuzhiyun u32 rx_stat_grxuo_lo; /* gruo */ 2642*4882a593Smuzhiyun u32 rx_stat_grxuo_hi; /* gruo */ 2643*4882a593Smuzhiyun u32 rx_stat_grjbr_lo; 2644*4882a593Smuzhiyun u32 rx_stat_grjbr_hi; 2645*4882a593Smuzhiyun u32 rx_stat_grovr_lo; 2646*4882a593Smuzhiyun u32 rx_stat_grovr_hi; 2647*4882a593Smuzhiyun u32 rx_stat_grxcf_lo; /* grcf */ 2648*4882a593Smuzhiyun u32 rx_stat_grxcf_hi; /* grcf */ 2649*4882a593Smuzhiyun u32 rx_stat_grflr_lo; 2650*4882a593Smuzhiyun u32 rx_stat_grflr_hi; 2651*4882a593Smuzhiyun u32 rx_stat_grpok_lo; 2652*4882a593Smuzhiyun u32 rx_stat_grpok_hi; 2653*4882a593Smuzhiyun u32 rx_stat_grmeg_lo; 2654*4882a593Smuzhiyun u32 rx_stat_grmeg_hi; 2655*4882a593Smuzhiyun u32 rx_stat_grmeb_lo; 2656*4882a593Smuzhiyun u32 rx_stat_grmeb_hi; 2657*4882a593Smuzhiyun u32 rx_stat_grbyt_lo; 2658*4882a593Smuzhiyun u32 rx_stat_grbyt_hi; 2659*4882a593Smuzhiyun u32 rx_stat_grund_lo; 2660*4882a593Smuzhiyun u32 rx_stat_grund_hi; 2661*4882a593Smuzhiyun u32 rx_stat_grfrg_lo; 2662*4882a593Smuzhiyun u32 rx_stat_grfrg_hi; 2663*4882a593Smuzhiyun u32 rx_stat_grerb_lo; /* grerrbyt */ 2664*4882a593Smuzhiyun u32 rx_stat_grerb_hi; /* grerrbyt */ 2665*4882a593Smuzhiyun u32 rx_stat_grfre_lo; /* grfrerr */ 2666*4882a593Smuzhiyun u32 rx_stat_grfre_hi; /* grfrerr */ 2667*4882a593Smuzhiyun u32 rx_stat_gripj_lo; 2668*4882a593Smuzhiyun u32 rx_stat_gripj_hi; 2669*4882a593Smuzhiyun }; 2670*4882a593Smuzhiyun 2671*4882a593Smuzhiyun struct mstat_stats { 2672*4882a593Smuzhiyun struct { 2673*4882a593Smuzhiyun /* OTE MSTAT on E3 has a bug where this register's contents are 2674*4882a593Smuzhiyun * actually tx_gtxpok + tx_gtxpf + (possibly)tx_gtxpp 2675*4882a593Smuzhiyun */ 2676*4882a593Smuzhiyun u32 tx_gtxpok_lo; 2677*4882a593Smuzhiyun u32 tx_gtxpok_hi; 2678*4882a593Smuzhiyun u32 tx_gtxpf_lo; 2679*4882a593Smuzhiyun u32 tx_gtxpf_hi; 2680*4882a593Smuzhiyun u32 tx_gtxpp_lo; 2681*4882a593Smuzhiyun u32 tx_gtxpp_hi; 2682*4882a593Smuzhiyun u32 tx_gtfcs_lo; 2683*4882a593Smuzhiyun u32 tx_gtfcs_hi; 2684*4882a593Smuzhiyun u32 tx_gtuca_lo; 2685*4882a593Smuzhiyun u32 tx_gtuca_hi; 2686*4882a593Smuzhiyun u32 tx_gtmca_lo; 2687*4882a593Smuzhiyun u32 tx_gtmca_hi; 2688*4882a593Smuzhiyun u32 tx_gtgca_lo; 2689*4882a593Smuzhiyun u32 tx_gtgca_hi; 2690*4882a593Smuzhiyun u32 tx_gtpkt_lo; 2691*4882a593Smuzhiyun u32 tx_gtpkt_hi; 2692*4882a593Smuzhiyun u32 tx_gt64_lo; 2693*4882a593Smuzhiyun u32 tx_gt64_hi; 2694*4882a593Smuzhiyun u32 tx_gt127_lo; 2695*4882a593Smuzhiyun u32 tx_gt127_hi; 2696*4882a593Smuzhiyun u32 tx_gt255_lo; 2697*4882a593Smuzhiyun u32 tx_gt255_hi; 2698*4882a593Smuzhiyun u32 tx_gt511_lo; 2699*4882a593Smuzhiyun u32 tx_gt511_hi; 2700*4882a593Smuzhiyun u32 tx_gt1023_lo; 2701*4882a593Smuzhiyun u32 tx_gt1023_hi; 2702*4882a593Smuzhiyun u32 tx_gt1518_lo; 2703*4882a593Smuzhiyun u32 tx_gt1518_hi; 2704*4882a593Smuzhiyun u32 tx_gt2047_lo; 2705*4882a593Smuzhiyun u32 tx_gt2047_hi; 2706*4882a593Smuzhiyun u32 tx_gt4095_lo; 2707*4882a593Smuzhiyun u32 tx_gt4095_hi; 2708*4882a593Smuzhiyun u32 tx_gt9216_lo; 2709*4882a593Smuzhiyun u32 tx_gt9216_hi; 2710*4882a593Smuzhiyun u32 tx_gt16383_lo; 2711*4882a593Smuzhiyun u32 tx_gt16383_hi; 2712*4882a593Smuzhiyun u32 tx_gtufl_lo; 2713*4882a593Smuzhiyun u32 tx_gtufl_hi; 2714*4882a593Smuzhiyun u32 tx_gterr_lo; 2715*4882a593Smuzhiyun u32 tx_gterr_hi; 2716*4882a593Smuzhiyun u32 tx_gtbyt_lo; 2717*4882a593Smuzhiyun u32 tx_gtbyt_hi; 2718*4882a593Smuzhiyun u32 tx_collisions_lo; 2719*4882a593Smuzhiyun u32 tx_collisions_hi; 2720*4882a593Smuzhiyun u32 tx_singlecollision_lo; 2721*4882a593Smuzhiyun u32 tx_singlecollision_hi; 2722*4882a593Smuzhiyun u32 tx_multiplecollisions_lo; 2723*4882a593Smuzhiyun u32 tx_multiplecollisions_hi; 2724*4882a593Smuzhiyun u32 tx_deferred_lo; 2725*4882a593Smuzhiyun u32 tx_deferred_hi; 2726*4882a593Smuzhiyun u32 tx_excessivecollisions_lo; 2727*4882a593Smuzhiyun u32 tx_excessivecollisions_hi; 2728*4882a593Smuzhiyun u32 tx_latecollisions_lo; 2729*4882a593Smuzhiyun u32 tx_latecollisions_hi; 2730*4882a593Smuzhiyun } stats_tx; 2731*4882a593Smuzhiyun 2732*4882a593Smuzhiyun struct { 2733*4882a593Smuzhiyun u32 rx_gr64_lo; 2734*4882a593Smuzhiyun u32 rx_gr64_hi; 2735*4882a593Smuzhiyun u32 rx_gr127_lo; 2736*4882a593Smuzhiyun u32 rx_gr127_hi; 2737*4882a593Smuzhiyun u32 rx_gr255_lo; 2738*4882a593Smuzhiyun u32 rx_gr255_hi; 2739*4882a593Smuzhiyun u32 rx_gr511_lo; 2740*4882a593Smuzhiyun u32 rx_gr511_hi; 2741*4882a593Smuzhiyun u32 rx_gr1023_lo; 2742*4882a593Smuzhiyun u32 rx_gr1023_hi; 2743*4882a593Smuzhiyun u32 rx_gr1518_lo; 2744*4882a593Smuzhiyun u32 rx_gr1518_hi; 2745*4882a593Smuzhiyun u32 rx_gr2047_lo; 2746*4882a593Smuzhiyun u32 rx_gr2047_hi; 2747*4882a593Smuzhiyun u32 rx_gr4095_lo; 2748*4882a593Smuzhiyun u32 rx_gr4095_hi; 2749*4882a593Smuzhiyun u32 rx_gr9216_lo; 2750*4882a593Smuzhiyun u32 rx_gr9216_hi; 2751*4882a593Smuzhiyun u32 rx_gr16383_lo; 2752*4882a593Smuzhiyun u32 rx_gr16383_hi; 2753*4882a593Smuzhiyun u32 rx_grpkt_lo; 2754*4882a593Smuzhiyun u32 rx_grpkt_hi; 2755*4882a593Smuzhiyun u32 rx_grfcs_lo; 2756*4882a593Smuzhiyun u32 rx_grfcs_hi; 2757*4882a593Smuzhiyun u32 rx_gruca_lo; 2758*4882a593Smuzhiyun u32 rx_gruca_hi; 2759*4882a593Smuzhiyun u32 rx_grmca_lo; 2760*4882a593Smuzhiyun u32 rx_grmca_hi; 2761*4882a593Smuzhiyun u32 rx_grbca_lo; 2762*4882a593Smuzhiyun u32 rx_grbca_hi; 2763*4882a593Smuzhiyun u32 rx_grxpf_lo; 2764*4882a593Smuzhiyun u32 rx_grxpf_hi; 2765*4882a593Smuzhiyun u32 rx_grxpp_lo; 2766*4882a593Smuzhiyun u32 rx_grxpp_hi; 2767*4882a593Smuzhiyun u32 rx_grxuo_lo; 2768*4882a593Smuzhiyun u32 rx_grxuo_hi; 2769*4882a593Smuzhiyun u32 rx_grovr_lo; 2770*4882a593Smuzhiyun u32 rx_grovr_hi; 2771*4882a593Smuzhiyun u32 rx_grxcf_lo; 2772*4882a593Smuzhiyun u32 rx_grxcf_hi; 2773*4882a593Smuzhiyun u32 rx_grflr_lo; 2774*4882a593Smuzhiyun u32 rx_grflr_hi; 2775*4882a593Smuzhiyun u32 rx_grpok_lo; 2776*4882a593Smuzhiyun u32 rx_grpok_hi; 2777*4882a593Smuzhiyun u32 rx_grbyt_lo; 2778*4882a593Smuzhiyun u32 rx_grbyt_hi; 2779*4882a593Smuzhiyun u32 rx_grund_lo; 2780*4882a593Smuzhiyun u32 rx_grund_hi; 2781*4882a593Smuzhiyun u32 rx_grfrg_lo; 2782*4882a593Smuzhiyun u32 rx_grfrg_hi; 2783*4882a593Smuzhiyun u32 rx_grerb_lo; 2784*4882a593Smuzhiyun u32 rx_grerb_hi; 2785*4882a593Smuzhiyun u32 rx_grfre_lo; 2786*4882a593Smuzhiyun u32 rx_grfre_hi; 2787*4882a593Smuzhiyun 2788*4882a593Smuzhiyun u32 rx_alignmenterrors_lo; 2789*4882a593Smuzhiyun u32 rx_alignmenterrors_hi; 2790*4882a593Smuzhiyun u32 rx_falsecarrier_lo; 2791*4882a593Smuzhiyun u32 rx_falsecarrier_hi; 2792*4882a593Smuzhiyun u32 rx_llfcmsgcnt_lo; 2793*4882a593Smuzhiyun u32 rx_llfcmsgcnt_hi; 2794*4882a593Smuzhiyun } stats_rx; 2795*4882a593Smuzhiyun }; 2796*4882a593Smuzhiyun 2797*4882a593Smuzhiyun union mac_stats { 2798*4882a593Smuzhiyun struct emac_stats emac_stats; 2799*4882a593Smuzhiyun struct bmac1_stats bmac1_stats; 2800*4882a593Smuzhiyun struct bmac2_stats bmac2_stats; 2801*4882a593Smuzhiyun struct mstat_stats mstat_stats; 2802*4882a593Smuzhiyun }; 2803*4882a593Smuzhiyun 2804*4882a593Smuzhiyun 2805*4882a593Smuzhiyun struct mac_stx { 2806*4882a593Smuzhiyun /* in_bad_octets */ 2807*4882a593Smuzhiyun u32 rx_stat_ifhcinbadoctets_hi; 2808*4882a593Smuzhiyun u32 rx_stat_ifhcinbadoctets_lo; 2809*4882a593Smuzhiyun 2810*4882a593Smuzhiyun /* out_bad_octets */ 2811*4882a593Smuzhiyun u32 tx_stat_ifhcoutbadoctets_hi; 2812*4882a593Smuzhiyun u32 tx_stat_ifhcoutbadoctets_lo; 2813*4882a593Smuzhiyun 2814*4882a593Smuzhiyun /* crc_receive_errors */ 2815*4882a593Smuzhiyun u32 rx_stat_dot3statsfcserrors_hi; 2816*4882a593Smuzhiyun u32 rx_stat_dot3statsfcserrors_lo; 2817*4882a593Smuzhiyun /* alignment_errors */ 2818*4882a593Smuzhiyun u32 rx_stat_dot3statsalignmenterrors_hi; 2819*4882a593Smuzhiyun u32 rx_stat_dot3statsalignmenterrors_lo; 2820*4882a593Smuzhiyun /* carrier_sense_errors */ 2821*4882a593Smuzhiyun u32 rx_stat_dot3statscarriersenseerrors_hi; 2822*4882a593Smuzhiyun u32 rx_stat_dot3statscarriersenseerrors_lo; 2823*4882a593Smuzhiyun /* false_carrier_detections */ 2824*4882a593Smuzhiyun u32 rx_stat_falsecarriererrors_hi; 2825*4882a593Smuzhiyun u32 rx_stat_falsecarriererrors_lo; 2826*4882a593Smuzhiyun 2827*4882a593Smuzhiyun /* runt_packets_received */ 2828*4882a593Smuzhiyun u32 rx_stat_etherstatsundersizepkts_hi; 2829*4882a593Smuzhiyun u32 rx_stat_etherstatsundersizepkts_lo; 2830*4882a593Smuzhiyun /* jabber_packets_received */ 2831*4882a593Smuzhiyun u32 rx_stat_dot3statsframestoolong_hi; 2832*4882a593Smuzhiyun u32 rx_stat_dot3statsframestoolong_lo; 2833*4882a593Smuzhiyun 2834*4882a593Smuzhiyun /* error_runt_packets_received */ 2835*4882a593Smuzhiyun u32 rx_stat_etherstatsfragments_hi; 2836*4882a593Smuzhiyun u32 rx_stat_etherstatsfragments_lo; 2837*4882a593Smuzhiyun /* error_jabber_packets_received */ 2838*4882a593Smuzhiyun u32 rx_stat_etherstatsjabbers_hi; 2839*4882a593Smuzhiyun u32 rx_stat_etherstatsjabbers_lo; 2840*4882a593Smuzhiyun 2841*4882a593Smuzhiyun /* control_frames_received */ 2842*4882a593Smuzhiyun u32 rx_stat_maccontrolframesreceived_hi; 2843*4882a593Smuzhiyun u32 rx_stat_maccontrolframesreceived_lo; 2844*4882a593Smuzhiyun u32 rx_stat_mac_xpf_hi; 2845*4882a593Smuzhiyun u32 rx_stat_mac_xpf_lo; 2846*4882a593Smuzhiyun u32 rx_stat_mac_xcf_hi; 2847*4882a593Smuzhiyun u32 rx_stat_mac_xcf_lo; 2848*4882a593Smuzhiyun 2849*4882a593Smuzhiyun /* xoff_state_entered */ 2850*4882a593Smuzhiyun u32 rx_stat_xoffstateentered_hi; 2851*4882a593Smuzhiyun u32 rx_stat_xoffstateentered_lo; 2852*4882a593Smuzhiyun /* pause_xon_frames_received */ 2853*4882a593Smuzhiyun u32 rx_stat_xonpauseframesreceived_hi; 2854*4882a593Smuzhiyun u32 rx_stat_xonpauseframesreceived_lo; 2855*4882a593Smuzhiyun /* pause_xoff_frames_received */ 2856*4882a593Smuzhiyun u32 rx_stat_xoffpauseframesreceived_hi; 2857*4882a593Smuzhiyun u32 rx_stat_xoffpauseframesreceived_lo; 2858*4882a593Smuzhiyun /* pause_xon_frames_transmitted */ 2859*4882a593Smuzhiyun u32 tx_stat_outxonsent_hi; 2860*4882a593Smuzhiyun u32 tx_stat_outxonsent_lo; 2861*4882a593Smuzhiyun /* pause_xoff_frames_transmitted */ 2862*4882a593Smuzhiyun u32 tx_stat_outxoffsent_hi; 2863*4882a593Smuzhiyun u32 tx_stat_outxoffsent_lo; 2864*4882a593Smuzhiyun /* flow_control_done */ 2865*4882a593Smuzhiyun u32 tx_stat_flowcontroldone_hi; 2866*4882a593Smuzhiyun u32 tx_stat_flowcontroldone_lo; 2867*4882a593Smuzhiyun 2868*4882a593Smuzhiyun /* ether_stats_collisions */ 2869*4882a593Smuzhiyun u32 tx_stat_etherstatscollisions_hi; 2870*4882a593Smuzhiyun u32 tx_stat_etherstatscollisions_lo; 2871*4882a593Smuzhiyun /* single_collision_transmit_frames */ 2872*4882a593Smuzhiyun u32 tx_stat_dot3statssinglecollisionframes_hi; 2873*4882a593Smuzhiyun u32 tx_stat_dot3statssinglecollisionframes_lo; 2874*4882a593Smuzhiyun /* multiple_collision_transmit_frames */ 2875*4882a593Smuzhiyun u32 tx_stat_dot3statsmultiplecollisionframes_hi; 2876*4882a593Smuzhiyun u32 tx_stat_dot3statsmultiplecollisionframes_lo; 2877*4882a593Smuzhiyun /* deferred_transmissions */ 2878*4882a593Smuzhiyun u32 tx_stat_dot3statsdeferredtransmissions_hi; 2879*4882a593Smuzhiyun u32 tx_stat_dot3statsdeferredtransmissions_lo; 2880*4882a593Smuzhiyun /* excessive_collision_frames */ 2881*4882a593Smuzhiyun u32 tx_stat_dot3statsexcessivecollisions_hi; 2882*4882a593Smuzhiyun u32 tx_stat_dot3statsexcessivecollisions_lo; 2883*4882a593Smuzhiyun /* late_collision_frames */ 2884*4882a593Smuzhiyun u32 tx_stat_dot3statslatecollisions_hi; 2885*4882a593Smuzhiyun u32 tx_stat_dot3statslatecollisions_lo; 2886*4882a593Smuzhiyun 2887*4882a593Smuzhiyun /* frames_transmitted_64_bytes */ 2888*4882a593Smuzhiyun u32 tx_stat_etherstatspkts64octets_hi; 2889*4882a593Smuzhiyun u32 tx_stat_etherstatspkts64octets_lo; 2890*4882a593Smuzhiyun /* frames_transmitted_65_127_bytes */ 2891*4882a593Smuzhiyun u32 tx_stat_etherstatspkts65octetsto127octets_hi; 2892*4882a593Smuzhiyun u32 tx_stat_etherstatspkts65octetsto127octets_lo; 2893*4882a593Smuzhiyun /* frames_transmitted_128_255_bytes */ 2894*4882a593Smuzhiyun u32 tx_stat_etherstatspkts128octetsto255octets_hi; 2895*4882a593Smuzhiyun u32 tx_stat_etherstatspkts128octetsto255octets_lo; 2896*4882a593Smuzhiyun /* frames_transmitted_256_511_bytes */ 2897*4882a593Smuzhiyun u32 tx_stat_etherstatspkts256octetsto511octets_hi; 2898*4882a593Smuzhiyun u32 tx_stat_etherstatspkts256octetsto511octets_lo; 2899*4882a593Smuzhiyun /* frames_transmitted_512_1023_bytes */ 2900*4882a593Smuzhiyun u32 tx_stat_etherstatspkts512octetsto1023octets_hi; 2901*4882a593Smuzhiyun u32 tx_stat_etherstatspkts512octetsto1023octets_lo; 2902*4882a593Smuzhiyun /* frames_transmitted_1024_1522_bytes */ 2903*4882a593Smuzhiyun u32 tx_stat_etherstatspkts1024octetsto1522octets_hi; 2904*4882a593Smuzhiyun u32 tx_stat_etherstatspkts1024octetsto1522octets_lo; 2905*4882a593Smuzhiyun /* frames_transmitted_1523_9022_bytes */ 2906*4882a593Smuzhiyun u32 tx_stat_etherstatspktsover1522octets_hi; 2907*4882a593Smuzhiyun u32 tx_stat_etherstatspktsover1522octets_lo; 2908*4882a593Smuzhiyun u32 tx_stat_mac_2047_hi; 2909*4882a593Smuzhiyun u32 tx_stat_mac_2047_lo; 2910*4882a593Smuzhiyun u32 tx_stat_mac_4095_hi; 2911*4882a593Smuzhiyun u32 tx_stat_mac_4095_lo; 2912*4882a593Smuzhiyun u32 tx_stat_mac_9216_hi; 2913*4882a593Smuzhiyun u32 tx_stat_mac_9216_lo; 2914*4882a593Smuzhiyun u32 tx_stat_mac_16383_hi; 2915*4882a593Smuzhiyun u32 tx_stat_mac_16383_lo; 2916*4882a593Smuzhiyun 2917*4882a593Smuzhiyun /* internal_mac_transmit_errors */ 2918*4882a593Smuzhiyun u32 tx_stat_dot3statsinternalmactransmiterrors_hi; 2919*4882a593Smuzhiyun u32 tx_stat_dot3statsinternalmactransmiterrors_lo; 2920*4882a593Smuzhiyun 2921*4882a593Smuzhiyun /* if_out_discards */ 2922*4882a593Smuzhiyun u32 tx_stat_mac_ufl_hi; 2923*4882a593Smuzhiyun u32 tx_stat_mac_ufl_lo; 2924*4882a593Smuzhiyun }; 2925*4882a593Smuzhiyun 2926*4882a593Smuzhiyun 2927*4882a593Smuzhiyun #define MAC_STX_IDX_MAX 2 2928*4882a593Smuzhiyun 2929*4882a593Smuzhiyun struct host_port_stats { 2930*4882a593Smuzhiyun u32 host_port_stats_counter; 2931*4882a593Smuzhiyun 2932*4882a593Smuzhiyun struct mac_stx mac_stx[MAC_STX_IDX_MAX]; 2933*4882a593Smuzhiyun 2934*4882a593Smuzhiyun u32 brb_drop_hi; 2935*4882a593Smuzhiyun u32 brb_drop_lo; 2936*4882a593Smuzhiyun 2937*4882a593Smuzhiyun u32 not_used; /* obsolete */ 2938*4882a593Smuzhiyun u32 pfc_frames_tx_hi; 2939*4882a593Smuzhiyun u32 pfc_frames_tx_lo; 2940*4882a593Smuzhiyun u32 pfc_frames_rx_hi; 2941*4882a593Smuzhiyun u32 pfc_frames_rx_lo; 2942*4882a593Smuzhiyun 2943*4882a593Smuzhiyun u32 eee_lpi_count_hi; 2944*4882a593Smuzhiyun u32 eee_lpi_count_lo; 2945*4882a593Smuzhiyun }; 2946*4882a593Smuzhiyun 2947*4882a593Smuzhiyun 2948*4882a593Smuzhiyun struct host_func_stats { 2949*4882a593Smuzhiyun u32 host_func_stats_start; 2950*4882a593Smuzhiyun 2951*4882a593Smuzhiyun u32 total_bytes_received_hi; 2952*4882a593Smuzhiyun u32 total_bytes_received_lo; 2953*4882a593Smuzhiyun 2954*4882a593Smuzhiyun u32 total_bytes_transmitted_hi; 2955*4882a593Smuzhiyun u32 total_bytes_transmitted_lo; 2956*4882a593Smuzhiyun 2957*4882a593Smuzhiyun u32 total_unicast_packets_received_hi; 2958*4882a593Smuzhiyun u32 total_unicast_packets_received_lo; 2959*4882a593Smuzhiyun 2960*4882a593Smuzhiyun u32 total_multicast_packets_received_hi; 2961*4882a593Smuzhiyun u32 total_multicast_packets_received_lo; 2962*4882a593Smuzhiyun 2963*4882a593Smuzhiyun u32 total_broadcast_packets_received_hi; 2964*4882a593Smuzhiyun u32 total_broadcast_packets_received_lo; 2965*4882a593Smuzhiyun 2966*4882a593Smuzhiyun u32 total_unicast_packets_transmitted_hi; 2967*4882a593Smuzhiyun u32 total_unicast_packets_transmitted_lo; 2968*4882a593Smuzhiyun 2969*4882a593Smuzhiyun u32 total_multicast_packets_transmitted_hi; 2970*4882a593Smuzhiyun u32 total_multicast_packets_transmitted_lo; 2971*4882a593Smuzhiyun 2972*4882a593Smuzhiyun u32 total_broadcast_packets_transmitted_hi; 2973*4882a593Smuzhiyun u32 total_broadcast_packets_transmitted_lo; 2974*4882a593Smuzhiyun 2975*4882a593Smuzhiyun u32 valid_bytes_received_hi; 2976*4882a593Smuzhiyun u32 valid_bytes_received_lo; 2977*4882a593Smuzhiyun 2978*4882a593Smuzhiyun u32 host_func_stats_end; 2979*4882a593Smuzhiyun }; 2980*4882a593Smuzhiyun 2981*4882a593Smuzhiyun /* VIC definitions */ 2982*4882a593Smuzhiyun #define VICSTATST_UIF_INDEX 2 2983*4882a593Smuzhiyun 2984*4882a593Smuzhiyun 2985*4882a593Smuzhiyun /* stats collected for afex. 2986*4882a593Smuzhiyun * NOTE: structure is exactly as expected to be received by the switch. 2987*4882a593Smuzhiyun * order must remain exactly as is unless protocol changes ! 2988*4882a593Smuzhiyun */ 2989*4882a593Smuzhiyun struct afex_stats { 2990*4882a593Smuzhiyun u32 tx_unicast_frames_hi; 2991*4882a593Smuzhiyun u32 tx_unicast_frames_lo; 2992*4882a593Smuzhiyun u32 tx_unicast_bytes_hi; 2993*4882a593Smuzhiyun u32 tx_unicast_bytes_lo; 2994*4882a593Smuzhiyun u32 tx_multicast_frames_hi; 2995*4882a593Smuzhiyun u32 tx_multicast_frames_lo; 2996*4882a593Smuzhiyun u32 tx_multicast_bytes_hi; 2997*4882a593Smuzhiyun u32 tx_multicast_bytes_lo; 2998*4882a593Smuzhiyun u32 tx_broadcast_frames_hi; 2999*4882a593Smuzhiyun u32 tx_broadcast_frames_lo; 3000*4882a593Smuzhiyun u32 tx_broadcast_bytes_hi; 3001*4882a593Smuzhiyun u32 tx_broadcast_bytes_lo; 3002*4882a593Smuzhiyun u32 tx_frames_discarded_hi; 3003*4882a593Smuzhiyun u32 tx_frames_discarded_lo; 3004*4882a593Smuzhiyun u32 tx_frames_dropped_hi; 3005*4882a593Smuzhiyun u32 tx_frames_dropped_lo; 3006*4882a593Smuzhiyun 3007*4882a593Smuzhiyun u32 rx_unicast_frames_hi; 3008*4882a593Smuzhiyun u32 rx_unicast_frames_lo; 3009*4882a593Smuzhiyun u32 rx_unicast_bytes_hi; 3010*4882a593Smuzhiyun u32 rx_unicast_bytes_lo; 3011*4882a593Smuzhiyun u32 rx_multicast_frames_hi; 3012*4882a593Smuzhiyun u32 rx_multicast_frames_lo; 3013*4882a593Smuzhiyun u32 rx_multicast_bytes_hi; 3014*4882a593Smuzhiyun u32 rx_multicast_bytes_lo; 3015*4882a593Smuzhiyun u32 rx_broadcast_frames_hi; 3016*4882a593Smuzhiyun u32 rx_broadcast_frames_lo; 3017*4882a593Smuzhiyun u32 rx_broadcast_bytes_hi; 3018*4882a593Smuzhiyun u32 rx_broadcast_bytes_lo; 3019*4882a593Smuzhiyun u32 rx_frames_discarded_hi; 3020*4882a593Smuzhiyun u32 rx_frames_discarded_lo; 3021*4882a593Smuzhiyun u32 rx_frames_dropped_hi; 3022*4882a593Smuzhiyun u32 rx_frames_dropped_lo; 3023*4882a593Smuzhiyun }; 3024*4882a593Smuzhiyun 3025*4882a593Smuzhiyun #define BCM_5710_FW_MAJOR_VERSION 7 3026*4882a593Smuzhiyun #define BCM_5710_FW_MINOR_VERSION 13 3027*4882a593Smuzhiyun #define BCM_5710_FW_REVISION_VERSION 21 3028*4882a593Smuzhiyun #define BCM_5710_FW_REVISION_VERSION_V15 15 3029*4882a593Smuzhiyun #define BCM_5710_FW_ENGINEERING_VERSION 0 3030*4882a593Smuzhiyun #define BCM_5710_FW_COMPILE_FLAGS 1 3031*4882a593Smuzhiyun 3032*4882a593Smuzhiyun 3033*4882a593Smuzhiyun /* 3034*4882a593Smuzhiyun * attention bits 3035*4882a593Smuzhiyun */ 3036*4882a593Smuzhiyun struct atten_sp_status_block { 3037*4882a593Smuzhiyun __le32 attn_bits; 3038*4882a593Smuzhiyun __le32 attn_bits_ack; 3039*4882a593Smuzhiyun u8 status_block_id; 3040*4882a593Smuzhiyun u8 reserved0; 3041*4882a593Smuzhiyun __le16 attn_bits_index; 3042*4882a593Smuzhiyun __le32 reserved1; 3043*4882a593Smuzhiyun }; 3044*4882a593Smuzhiyun 3045*4882a593Smuzhiyun 3046*4882a593Smuzhiyun /* 3047*4882a593Smuzhiyun * The eth aggregative context of Cstorm 3048*4882a593Smuzhiyun */ 3049*4882a593Smuzhiyun struct cstorm_eth_ag_context { 3050*4882a593Smuzhiyun u32 __reserved0[10]; 3051*4882a593Smuzhiyun }; 3052*4882a593Smuzhiyun 3053*4882a593Smuzhiyun 3054*4882a593Smuzhiyun /* 3055*4882a593Smuzhiyun * dmae command structure 3056*4882a593Smuzhiyun */ 3057*4882a593Smuzhiyun struct dmae_command { 3058*4882a593Smuzhiyun u32 opcode; 3059*4882a593Smuzhiyun #define DMAE_COMMAND_SRC (0x1<<0) 3060*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_SHIFT 0 3061*4882a593Smuzhiyun #define DMAE_COMMAND_DST (0x3<<1) 3062*4882a593Smuzhiyun #define DMAE_COMMAND_DST_SHIFT 1 3063*4882a593Smuzhiyun #define DMAE_COMMAND_C_DST (0x1<<3) 3064*4882a593Smuzhiyun #define DMAE_COMMAND_C_DST_SHIFT 3 3065*4882a593Smuzhiyun #define DMAE_COMMAND_C_TYPE_ENABLE (0x1<<4) 3066*4882a593Smuzhiyun #define DMAE_COMMAND_C_TYPE_ENABLE_SHIFT 4 3067*4882a593Smuzhiyun #define DMAE_COMMAND_C_TYPE_CRC_ENABLE (0x1<<5) 3068*4882a593Smuzhiyun #define DMAE_COMMAND_C_TYPE_CRC_ENABLE_SHIFT 5 3069*4882a593Smuzhiyun #define DMAE_COMMAND_C_TYPE_CRC_OFFSET (0x7<<6) 3070*4882a593Smuzhiyun #define DMAE_COMMAND_C_TYPE_CRC_OFFSET_SHIFT 6 3071*4882a593Smuzhiyun #define DMAE_COMMAND_ENDIANITY (0x3<<9) 3072*4882a593Smuzhiyun #define DMAE_COMMAND_ENDIANITY_SHIFT 9 3073*4882a593Smuzhiyun #define DMAE_COMMAND_PORT (0x1<<11) 3074*4882a593Smuzhiyun #define DMAE_COMMAND_PORT_SHIFT 11 3075*4882a593Smuzhiyun #define DMAE_COMMAND_CRC_RESET (0x1<<12) 3076*4882a593Smuzhiyun #define DMAE_COMMAND_CRC_RESET_SHIFT 12 3077*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_RESET (0x1<<13) 3078*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_RESET_SHIFT 13 3079*4882a593Smuzhiyun #define DMAE_COMMAND_DST_RESET (0x1<<14) 3080*4882a593Smuzhiyun #define DMAE_COMMAND_DST_RESET_SHIFT 14 3081*4882a593Smuzhiyun #define DMAE_COMMAND_E1HVN (0x3<<15) 3082*4882a593Smuzhiyun #define DMAE_COMMAND_E1HVN_SHIFT 15 3083*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VN (0x3<<17) 3084*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VN_SHIFT 17 3085*4882a593Smuzhiyun #define DMAE_COMMAND_C_FUNC (0x1<<19) 3086*4882a593Smuzhiyun #define DMAE_COMMAND_C_FUNC_SHIFT 19 3087*4882a593Smuzhiyun #define DMAE_COMMAND_ERR_POLICY (0x3<<20) 3088*4882a593Smuzhiyun #define DMAE_COMMAND_ERR_POLICY_SHIFT 20 3089*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED0 (0x3FF<<22) 3090*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED0_SHIFT 22 3091*4882a593Smuzhiyun u32 src_addr_lo; 3092*4882a593Smuzhiyun u32 src_addr_hi; 3093*4882a593Smuzhiyun u32 dst_addr_lo; 3094*4882a593Smuzhiyun u32 dst_addr_hi; 3095*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3096*4882a593Smuzhiyun u16 opcode_iov; 3097*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_VFID (0x3F<<0) 3098*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_VFID_SHIFT 0 3099*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_VFPF (0x1<<6) 3100*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_VFPF_SHIFT 6 3101*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED1 (0x1<<7) 3102*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED1_SHIFT 7 3103*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VFID (0x3F<<8) 3104*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VFID_SHIFT 8 3105*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VFPF (0x1<<14) 3106*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VFPF_SHIFT 14 3107*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED2 (0x1<<15) 3108*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED2_SHIFT 15 3109*4882a593Smuzhiyun u16 len; 3110*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3111*4882a593Smuzhiyun u16 len; 3112*4882a593Smuzhiyun u16 opcode_iov; 3113*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_VFID (0x3F<<0) 3114*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_VFID_SHIFT 0 3115*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_VFPF (0x1<<6) 3116*4882a593Smuzhiyun #define DMAE_COMMAND_SRC_VFPF_SHIFT 6 3117*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED1 (0x1<<7) 3118*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED1_SHIFT 7 3119*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VFID (0x3F<<8) 3120*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VFID_SHIFT 8 3121*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VFPF (0x1<<14) 3122*4882a593Smuzhiyun #define DMAE_COMMAND_DST_VFPF_SHIFT 14 3123*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED2 (0x1<<15) 3124*4882a593Smuzhiyun #define DMAE_COMMAND_RESERVED2_SHIFT 15 3125*4882a593Smuzhiyun #endif 3126*4882a593Smuzhiyun u32 comp_addr_lo; 3127*4882a593Smuzhiyun u32 comp_addr_hi; 3128*4882a593Smuzhiyun u32 comp_val; 3129*4882a593Smuzhiyun u32 crc32; 3130*4882a593Smuzhiyun u32 crc32_c; 3131*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3132*4882a593Smuzhiyun u16 crc16_c; 3133*4882a593Smuzhiyun u16 crc16; 3134*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3135*4882a593Smuzhiyun u16 crc16; 3136*4882a593Smuzhiyun u16 crc16_c; 3137*4882a593Smuzhiyun #endif 3138*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3139*4882a593Smuzhiyun u16 reserved3; 3140*4882a593Smuzhiyun u16 crc_t10; 3141*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3142*4882a593Smuzhiyun u16 crc_t10; 3143*4882a593Smuzhiyun u16 reserved3; 3144*4882a593Smuzhiyun #endif 3145*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3146*4882a593Smuzhiyun u16 xsum8; 3147*4882a593Smuzhiyun u16 xsum16; 3148*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3149*4882a593Smuzhiyun u16 xsum16; 3150*4882a593Smuzhiyun u16 xsum8; 3151*4882a593Smuzhiyun #endif 3152*4882a593Smuzhiyun }; 3153*4882a593Smuzhiyun 3154*4882a593Smuzhiyun 3155*4882a593Smuzhiyun /* 3156*4882a593Smuzhiyun * common data for all protocols 3157*4882a593Smuzhiyun */ 3158*4882a593Smuzhiyun struct doorbell_hdr { 3159*4882a593Smuzhiyun u8 header; 3160*4882a593Smuzhiyun #define DOORBELL_HDR_RX (0x1<<0) 3161*4882a593Smuzhiyun #define DOORBELL_HDR_RX_SHIFT 0 3162*4882a593Smuzhiyun #define DOORBELL_HDR_DB_TYPE (0x1<<1) 3163*4882a593Smuzhiyun #define DOORBELL_HDR_DB_TYPE_SHIFT 1 3164*4882a593Smuzhiyun #define DOORBELL_HDR_DPM_SIZE (0x3<<2) 3165*4882a593Smuzhiyun #define DOORBELL_HDR_DPM_SIZE_SHIFT 2 3166*4882a593Smuzhiyun #define DOORBELL_HDR_CONN_TYPE (0xF<<4) 3167*4882a593Smuzhiyun #define DOORBELL_HDR_CONN_TYPE_SHIFT 4 3168*4882a593Smuzhiyun }; 3169*4882a593Smuzhiyun 3170*4882a593Smuzhiyun /* 3171*4882a593Smuzhiyun * Ethernet doorbell 3172*4882a593Smuzhiyun */ 3173*4882a593Smuzhiyun struct eth_tx_doorbell { 3174*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3175*4882a593Smuzhiyun u16 npackets; 3176*4882a593Smuzhiyun u8 params; 3177*4882a593Smuzhiyun #define ETH_TX_DOORBELL_NUM_BDS (0x3F<<0) 3178*4882a593Smuzhiyun #define ETH_TX_DOORBELL_NUM_BDS_SHIFT 0 3179*4882a593Smuzhiyun #define ETH_TX_DOORBELL_RESERVED_TX_FIN_FLAG (0x1<<6) 3180*4882a593Smuzhiyun #define ETH_TX_DOORBELL_RESERVED_TX_FIN_FLAG_SHIFT 6 3181*4882a593Smuzhiyun #define ETH_TX_DOORBELL_SPARE (0x1<<7) 3182*4882a593Smuzhiyun #define ETH_TX_DOORBELL_SPARE_SHIFT 7 3183*4882a593Smuzhiyun struct doorbell_hdr hdr; 3184*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3185*4882a593Smuzhiyun struct doorbell_hdr hdr; 3186*4882a593Smuzhiyun u8 params; 3187*4882a593Smuzhiyun #define ETH_TX_DOORBELL_NUM_BDS (0x3F<<0) 3188*4882a593Smuzhiyun #define ETH_TX_DOORBELL_NUM_BDS_SHIFT 0 3189*4882a593Smuzhiyun #define ETH_TX_DOORBELL_RESERVED_TX_FIN_FLAG (0x1<<6) 3190*4882a593Smuzhiyun #define ETH_TX_DOORBELL_RESERVED_TX_FIN_FLAG_SHIFT 6 3191*4882a593Smuzhiyun #define ETH_TX_DOORBELL_SPARE (0x1<<7) 3192*4882a593Smuzhiyun #define ETH_TX_DOORBELL_SPARE_SHIFT 7 3193*4882a593Smuzhiyun u16 npackets; 3194*4882a593Smuzhiyun #endif 3195*4882a593Smuzhiyun }; 3196*4882a593Smuzhiyun 3197*4882a593Smuzhiyun 3198*4882a593Smuzhiyun /* 3199*4882a593Smuzhiyun * 3 lines. status block 3200*4882a593Smuzhiyun */ 3201*4882a593Smuzhiyun struct hc_status_block_e1x { 3202*4882a593Smuzhiyun __le16 index_values[HC_SB_MAX_INDICES_E1X]; 3203*4882a593Smuzhiyun __le16 running_index[HC_SB_MAX_SM]; 3204*4882a593Smuzhiyun __le32 rsrv[11]; 3205*4882a593Smuzhiyun }; 3206*4882a593Smuzhiyun 3207*4882a593Smuzhiyun /* 3208*4882a593Smuzhiyun * host status block 3209*4882a593Smuzhiyun */ 3210*4882a593Smuzhiyun struct host_hc_status_block_e1x { 3211*4882a593Smuzhiyun struct hc_status_block_e1x sb; 3212*4882a593Smuzhiyun }; 3213*4882a593Smuzhiyun 3214*4882a593Smuzhiyun 3215*4882a593Smuzhiyun /* 3216*4882a593Smuzhiyun * 3 lines. status block 3217*4882a593Smuzhiyun */ 3218*4882a593Smuzhiyun struct hc_status_block_e2 { 3219*4882a593Smuzhiyun __le16 index_values[HC_SB_MAX_INDICES_E2]; 3220*4882a593Smuzhiyun __le16 running_index[HC_SB_MAX_SM]; 3221*4882a593Smuzhiyun __le32 reserved[11]; 3222*4882a593Smuzhiyun }; 3223*4882a593Smuzhiyun 3224*4882a593Smuzhiyun /* 3225*4882a593Smuzhiyun * host status block 3226*4882a593Smuzhiyun */ 3227*4882a593Smuzhiyun struct host_hc_status_block_e2 { 3228*4882a593Smuzhiyun struct hc_status_block_e2 sb; 3229*4882a593Smuzhiyun }; 3230*4882a593Smuzhiyun 3231*4882a593Smuzhiyun 3232*4882a593Smuzhiyun /* 3233*4882a593Smuzhiyun * 5 lines. slow-path status block 3234*4882a593Smuzhiyun */ 3235*4882a593Smuzhiyun struct hc_sp_status_block { 3236*4882a593Smuzhiyun __le16 index_values[HC_SP_SB_MAX_INDICES]; 3237*4882a593Smuzhiyun __le16 running_index; 3238*4882a593Smuzhiyun __le16 rsrv; 3239*4882a593Smuzhiyun u32 rsrv1; 3240*4882a593Smuzhiyun }; 3241*4882a593Smuzhiyun 3242*4882a593Smuzhiyun /* 3243*4882a593Smuzhiyun * host status block 3244*4882a593Smuzhiyun */ 3245*4882a593Smuzhiyun struct host_sp_status_block { 3246*4882a593Smuzhiyun struct atten_sp_status_block atten_status_block; 3247*4882a593Smuzhiyun struct hc_sp_status_block sp_sb; 3248*4882a593Smuzhiyun }; 3249*4882a593Smuzhiyun 3250*4882a593Smuzhiyun 3251*4882a593Smuzhiyun /* 3252*4882a593Smuzhiyun * IGU driver acknowledgment register 3253*4882a593Smuzhiyun */ 3254*4882a593Smuzhiyun struct igu_ack_register { 3255*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3256*4882a593Smuzhiyun u16 sb_id_and_flags; 3257*4882a593Smuzhiyun #define IGU_ACK_REGISTER_STATUS_BLOCK_ID (0x1F<<0) 3258*4882a593Smuzhiyun #define IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT 0 3259*4882a593Smuzhiyun #define IGU_ACK_REGISTER_STORM_ID (0x7<<5) 3260*4882a593Smuzhiyun #define IGU_ACK_REGISTER_STORM_ID_SHIFT 5 3261*4882a593Smuzhiyun #define IGU_ACK_REGISTER_UPDATE_INDEX (0x1<<8) 3262*4882a593Smuzhiyun #define IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT 8 3263*4882a593Smuzhiyun #define IGU_ACK_REGISTER_INTERRUPT_MODE (0x3<<9) 3264*4882a593Smuzhiyun #define IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT 9 3265*4882a593Smuzhiyun #define IGU_ACK_REGISTER_RESERVED (0x1F<<11) 3266*4882a593Smuzhiyun #define IGU_ACK_REGISTER_RESERVED_SHIFT 11 3267*4882a593Smuzhiyun u16 status_block_index; 3268*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3269*4882a593Smuzhiyun u16 status_block_index; 3270*4882a593Smuzhiyun u16 sb_id_and_flags; 3271*4882a593Smuzhiyun #define IGU_ACK_REGISTER_STATUS_BLOCK_ID (0x1F<<0) 3272*4882a593Smuzhiyun #define IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT 0 3273*4882a593Smuzhiyun #define IGU_ACK_REGISTER_STORM_ID (0x7<<5) 3274*4882a593Smuzhiyun #define IGU_ACK_REGISTER_STORM_ID_SHIFT 5 3275*4882a593Smuzhiyun #define IGU_ACK_REGISTER_UPDATE_INDEX (0x1<<8) 3276*4882a593Smuzhiyun #define IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT 8 3277*4882a593Smuzhiyun #define IGU_ACK_REGISTER_INTERRUPT_MODE (0x3<<9) 3278*4882a593Smuzhiyun #define IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT 9 3279*4882a593Smuzhiyun #define IGU_ACK_REGISTER_RESERVED (0x1F<<11) 3280*4882a593Smuzhiyun #define IGU_ACK_REGISTER_RESERVED_SHIFT 11 3281*4882a593Smuzhiyun #endif 3282*4882a593Smuzhiyun }; 3283*4882a593Smuzhiyun 3284*4882a593Smuzhiyun 3285*4882a593Smuzhiyun /* 3286*4882a593Smuzhiyun * IGU driver acknowledgement register 3287*4882a593Smuzhiyun */ 3288*4882a593Smuzhiyun struct igu_backward_compatible { 3289*4882a593Smuzhiyun u32 sb_id_and_flags; 3290*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_SB_INDEX (0xFFFF<<0) 3291*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_SB_INDEX_SHIFT 0 3292*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_SB_SELECT (0x1F<<16) 3293*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_SB_SELECT_SHIFT 16 3294*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_SEGMENT_ACCESS (0x7<<21) 3295*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_SEGMENT_ACCESS_SHIFT 21 3296*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_BUPDATE (0x1<<24) 3297*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_BUPDATE_SHIFT 24 3298*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_ENABLE_INT (0x3<<25) 3299*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_ENABLE_INT_SHIFT 25 3300*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_RESERVED_0 (0x1F<<27) 3301*4882a593Smuzhiyun #define IGU_BACKWARD_COMPATIBLE_RESERVED_0_SHIFT 27 3302*4882a593Smuzhiyun u32 reserved_2; 3303*4882a593Smuzhiyun }; 3304*4882a593Smuzhiyun 3305*4882a593Smuzhiyun 3306*4882a593Smuzhiyun /* 3307*4882a593Smuzhiyun * IGU driver acknowledgement register 3308*4882a593Smuzhiyun */ 3309*4882a593Smuzhiyun struct igu_regular { 3310*4882a593Smuzhiyun u32 sb_id_and_flags; 3311*4882a593Smuzhiyun #define IGU_REGULAR_SB_INDEX (0xFFFFF<<0) 3312*4882a593Smuzhiyun #define IGU_REGULAR_SB_INDEX_SHIFT 0 3313*4882a593Smuzhiyun #define IGU_REGULAR_RESERVED0 (0x1<<20) 3314*4882a593Smuzhiyun #define IGU_REGULAR_RESERVED0_SHIFT 20 3315*4882a593Smuzhiyun #define IGU_REGULAR_SEGMENT_ACCESS (0x7<<21) 3316*4882a593Smuzhiyun #define IGU_REGULAR_SEGMENT_ACCESS_SHIFT 21 3317*4882a593Smuzhiyun #define IGU_REGULAR_BUPDATE (0x1<<24) 3318*4882a593Smuzhiyun #define IGU_REGULAR_BUPDATE_SHIFT 24 3319*4882a593Smuzhiyun #define IGU_REGULAR_ENABLE_INT (0x3<<25) 3320*4882a593Smuzhiyun #define IGU_REGULAR_ENABLE_INT_SHIFT 25 3321*4882a593Smuzhiyun #define IGU_REGULAR_RESERVED_1 (0x1<<27) 3322*4882a593Smuzhiyun #define IGU_REGULAR_RESERVED_1_SHIFT 27 3323*4882a593Smuzhiyun #define IGU_REGULAR_CLEANUP_TYPE (0x3<<28) 3324*4882a593Smuzhiyun #define IGU_REGULAR_CLEANUP_TYPE_SHIFT 28 3325*4882a593Smuzhiyun #define IGU_REGULAR_CLEANUP_SET (0x1<<30) 3326*4882a593Smuzhiyun #define IGU_REGULAR_CLEANUP_SET_SHIFT 30 3327*4882a593Smuzhiyun #define IGU_REGULAR_BCLEANUP (0x1<<31) 3328*4882a593Smuzhiyun #define IGU_REGULAR_BCLEANUP_SHIFT 31 3329*4882a593Smuzhiyun u32 reserved_2; 3330*4882a593Smuzhiyun }; 3331*4882a593Smuzhiyun 3332*4882a593Smuzhiyun /* 3333*4882a593Smuzhiyun * IGU driver acknowledgement register 3334*4882a593Smuzhiyun */ 3335*4882a593Smuzhiyun union igu_consprod_reg { 3336*4882a593Smuzhiyun struct igu_regular regular; 3337*4882a593Smuzhiyun struct igu_backward_compatible backward_compatible; 3338*4882a593Smuzhiyun }; 3339*4882a593Smuzhiyun 3340*4882a593Smuzhiyun 3341*4882a593Smuzhiyun /* 3342*4882a593Smuzhiyun * Igu control commands 3343*4882a593Smuzhiyun */ 3344*4882a593Smuzhiyun enum igu_ctrl_cmd { 3345*4882a593Smuzhiyun IGU_CTRL_CMD_TYPE_RD, 3346*4882a593Smuzhiyun IGU_CTRL_CMD_TYPE_WR, 3347*4882a593Smuzhiyun MAX_IGU_CTRL_CMD 3348*4882a593Smuzhiyun }; 3349*4882a593Smuzhiyun 3350*4882a593Smuzhiyun 3351*4882a593Smuzhiyun /* 3352*4882a593Smuzhiyun * Control register for the IGU command register 3353*4882a593Smuzhiyun */ 3354*4882a593Smuzhiyun struct igu_ctrl_reg { 3355*4882a593Smuzhiyun u32 ctrl_data; 3356*4882a593Smuzhiyun #define IGU_CTRL_REG_ADDRESS (0xFFF<<0) 3357*4882a593Smuzhiyun #define IGU_CTRL_REG_ADDRESS_SHIFT 0 3358*4882a593Smuzhiyun #define IGU_CTRL_REG_FID (0x7F<<12) 3359*4882a593Smuzhiyun #define IGU_CTRL_REG_FID_SHIFT 12 3360*4882a593Smuzhiyun #define IGU_CTRL_REG_RESERVED (0x1<<19) 3361*4882a593Smuzhiyun #define IGU_CTRL_REG_RESERVED_SHIFT 19 3362*4882a593Smuzhiyun #define IGU_CTRL_REG_TYPE (0x1<<20) 3363*4882a593Smuzhiyun #define IGU_CTRL_REG_TYPE_SHIFT 20 3364*4882a593Smuzhiyun #define IGU_CTRL_REG_UNUSED (0x7FF<<21) 3365*4882a593Smuzhiyun #define IGU_CTRL_REG_UNUSED_SHIFT 21 3366*4882a593Smuzhiyun }; 3367*4882a593Smuzhiyun 3368*4882a593Smuzhiyun 3369*4882a593Smuzhiyun /* 3370*4882a593Smuzhiyun * Igu interrupt command 3371*4882a593Smuzhiyun */ 3372*4882a593Smuzhiyun enum igu_int_cmd { 3373*4882a593Smuzhiyun IGU_INT_ENABLE, 3374*4882a593Smuzhiyun IGU_INT_DISABLE, 3375*4882a593Smuzhiyun IGU_INT_NOP, 3376*4882a593Smuzhiyun IGU_INT_NOP2, 3377*4882a593Smuzhiyun MAX_IGU_INT_CMD 3378*4882a593Smuzhiyun }; 3379*4882a593Smuzhiyun 3380*4882a593Smuzhiyun 3381*4882a593Smuzhiyun /* 3382*4882a593Smuzhiyun * Igu segments 3383*4882a593Smuzhiyun */ 3384*4882a593Smuzhiyun enum igu_seg_access { 3385*4882a593Smuzhiyun IGU_SEG_ACCESS_NORM, 3386*4882a593Smuzhiyun IGU_SEG_ACCESS_DEF, 3387*4882a593Smuzhiyun IGU_SEG_ACCESS_ATTN, 3388*4882a593Smuzhiyun MAX_IGU_SEG_ACCESS 3389*4882a593Smuzhiyun }; 3390*4882a593Smuzhiyun 3391*4882a593Smuzhiyun 3392*4882a593Smuzhiyun /* 3393*4882a593Smuzhiyun * Parser parsing flags field 3394*4882a593Smuzhiyun */ 3395*4882a593Smuzhiyun struct parsing_flags { 3396*4882a593Smuzhiyun __le16 flags; 3397*4882a593Smuzhiyun #define PARSING_FLAGS_ETHERNET_ADDRESS_TYPE (0x1<<0) 3398*4882a593Smuzhiyun #define PARSING_FLAGS_ETHERNET_ADDRESS_TYPE_SHIFT 0 3399*4882a593Smuzhiyun #define PARSING_FLAGS_VLAN (0x1<<1) 3400*4882a593Smuzhiyun #define PARSING_FLAGS_VLAN_SHIFT 1 3401*4882a593Smuzhiyun #define PARSING_FLAGS_EXTRA_VLAN (0x1<<2) 3402*4882a593Smuzhiyun #define PARSING_FLAGS_EXTRA_VLAN_SHIFT 2 3403*4882a593Smuzhiyun #define PARSING_FLAGS_OVER_ETHERNET_PROTOCOL (0x3<<3) 3404*4882a593Smuzhiyun #define PARSING_FLAGS_OVER_ETHERNET_PROTOCOL_SHIFT 3 3405*4882a593Smuzhiyun #define PARSING_FLAGS_IP_OPTIONS (0x1<<5) 3406*4882a593Smuzhiyun #define PARSING_FLAGS_IP_OPTIONS_SHIFT 5 3407*4882a593Smuzhiyun #define PARSING_FLAGS_FRAGMENTATION_STATUS (0x1<<6) 3408*4882a593Smuzhiyun #define PARSING_FLAGS_FRAGMENTATION_STATUS_SHIFT 6 3409*4882a593Smuzhiyun #define PARSING_FLAGS_OVER_IP_PROTOCOL (0x3<<7) 3410*4882a593Smuzhiyun #define PARSING_FLAGS_OVER_IP_PROTOCOL_SHIFT 7 3411*4882a593Smuzhiyun #define PARSING_FLAGS_PURE_ACK_INDICATION (0x1<<9) 3412*4882a593Smuzhiyun #define PARSING_FLAGS_PURE_ACK_INDICATION_SHIFT 9 3413*4882a593Smuzhiyun #define PARSING_FLAGS_TCP_OPTIONS_EXIST (0x1<<10) 3414*4882a593Smuzhiyun #define PARSING_FLAGS_TCP_OPTIONS_EXIST_SHIFT 10 3415*4882a593Smuzhiyun #define PARSING_FLAGS_TIME_STAMP_EXIST_FLAG (0x1<<11) 3416*4882a593Smuzhiyun #define PARSING_FLAGS_TIME_STAMP_EXIST_FLAG_SHIFT 11 3417*4882a593Smuzhiyun #define PARSING_FLAGS_CONNECTION_MATCH (0x1<<12) 3418*4882a593Smuzhiyun #define PARSING_FLAGS_CONNECTION_MATCH_SHIFT 12 3419*4882a593Smuzhiyun #define PARSING_FLAGS_LLC_SNAP (0x1<<13) 3420*4882a593Smuzhiyun #define PARSING_FLAGS_LLC_SNAP_SHIFT 13 3421*4882a593Smuzhiyun #define PARSING_FLAGS_RESERVED0 (0x3<<14) 3422*4882a593Smuzhiyun #define PARSING_FLAGS_RESERVED0_SHIFT 14 3423*4882a593Smuzhiyun }; 3424*4882a593Smuzhiyun 3425*4882a593Smuzhiyun 3426*4882a593Smuzhiyun /* 3427*4882a593Smuzhiyun * Parsing flags for TCP ACK type 3428*4882a593Smuzhiyun */ 3429*4882a593Smuzhiyun enum prs_flags_ack_type { 3430*4882a593Smuzhiyun PRS_FLAG_PUREACK_PIGGY, 3431*4882a593Smuzhiyun PRS_FLAG_PUREACK_PURE, 3432*4882a593Smuzhiyun MAX_PRS_FLAGS_ACK_TYPE 3433*4882a593Smuzhiyun }; 3434*4882a593Smuzhiyun 3435*4882a593Smuzhiyun 3436*4882a593Smuzhiyun /* 3437*4882a593Smuzhiyun * Parsing flags for Ethernet address type 3438*4882a593Smuzhiyun */ 3439*4882a593Smuzhiyun enum prs_flags_eth_addr_type { 3440*4882a593Smuzhiyun PRS_FLAG_ETHTYPE_NON_UNICAST, 3441*4882a593Smuzhiyun PRS_FLAG_ETHTYPE_UNICAST, 3442*4882a593Smuzhiyun MAX_PRS_FLAGS_ETH_ADDR_TYPE 3443*4882a593Smuzhiyun }; 3444*4882a593Smuzhiyun 3445*4882a593Smuzhiyun 3446*4882a593Smuzhiyun /* 3447*4882a593Smuzhiyun * Parsing flags for over-ethernet protocol 3448*4882a593Smuzhiyun */ 3449*4882a593Smuzhiyun enum prs_flags_over_eth { 3450*4882a593Smuzhiyun PRS_FLAG_OVERETH_UNKNOWN, 3451*4882a593Smuzhiyun PRS_FLAG_OVERETH_IPV4, 3452*4882a593Smuzhiyun PRS_FLAG_OVERETH_IPV6, 3453*4882a593Smuzhiyun PRS_FLAG_OVERETH_LLCSNAP_UNKNOWN, 3454*4882a593Smuzhiyun MAX_PRS_FLAGS_OVER_ETH 3455*4882a593Smuzhiyun }; 3456*4882a593Smuzhiyun 3457*4882a593Smuzhiyun 3458*4882a593Smuzhiyun /* 3459*4882a593Smuzhiyun * Parsing flags for over-IP protocol 3460*4882a593Smuzhiyun */ 3461*4882a593Smuzhiyun enum prs_flags_over_ip { 3462*4882a593Smuzhiyun PRS_FLAG_OVERIP_UNKNOWN, 3463*4882a593Smuzhiyun PRS_FLAG_OVERIP_TCP, 3464*4882a593Smuzhiyun PRS_FLAG_OVERIP_UDP, 3465*4882a593Smuzhiyun MAX_PRS_FLAGS_OVER_IP 3466*4882a593Smuzhiyun }; 3467*4882a593Smuzhiyun 3468*4882a593Smuzhiyun 3469*4882a593Smuzhiyun /* 3470*4882a593Smuzhiyun * SDM operation gen command (generate aggregative interrupt) 3471*4882a593Smuzhiyun */ 3472*4882a593Smuzhiyun struct sdm_op_gen { 3473*4882a593Smuzhiyun __le32 command; 3474*4882a593Smuzhiyun #define SDM_OP_GEN_COMP_PARAM (0x1F<<0) 3475*4882a593Smuzhiyun #define SDM_OP_GEN_COMP_PARAM_SHIFT 0 3476*4882a593Smuzhiyun #define SDM_OP_GEN_COMP_TYPE (0x7<<5) 3477*4882a593Smuzhiyun #define SDM_OP_GEN_COMP_TYPE_SHIFT 5 3478*4882a593Smuzhiyun #define SDM_OP_GEN_AGG_VECT_IDX (0xFF<<8) 3479*4882a593Smuzhiyun #define SDM_OP_GEN_AGG_VECT_IDX_SHIFT 8 3480*4882a593Smuzhiyun #define SDM_OP_GEN_AGG_VECT_IDX_VALID (0x1<<16) 3481*4882a593Smuzhiyun #define SDM_OP_GEN_AGG_VECT_IDX_VALID_SHIFT 16 3482*4882a593Smuzhiyun #define SDM_OP_GEN_RESERVED (0x7FFF<<17) 3483*4882a593Smuzhiyun #define SDM_OP_GEN_RESERVED_SHIFT 17 3484*4882a593Smuzhiyun }; 3485*4882a593Smuzhiyun 3486*4882a593Smuzhiyun 3487*4882a593Smuzhiyun /* 3488*4882a593Smuzhiyun * Timers connection context 3489*4882a593Smuzhiyun */ 3490*4882a593Smuzhiyun struct timers_block_context { 3491*4882a593Smuzhiyun u32 __reserved_0; 3492*4882a593Smuzhiyun u32 __reserved_1; 3493*4882a593Smuzhiyun u32 __reserved_2; 3494*4882a593Smuzhiyun u32 flags; 3495*4882a593Smuzhiyun #define __TIMERS_BLOCK_CONTEXT_NUM_OF_ACTIVE_TIMERS (0x3<<0) 3496*4882a593Smuzhiyun #define __TIMERS_BLOCK_CONTEXT_NUM_OF_ACTIVE_TIMERS_SHIFT 0 3497*4882a593Smuzhiyun #define TIMERS_BLOCK_CONTEXT_CONN_VALID_FLG (0x1<<2) 3498*4882a593Smuzhiyun #define TIMERS_BLOCK_CONTEXT_CONN_VALID_FLG_SHIFT 2 3499*4882a593Smuzhiyun #define __TIMERS_BLOCK_CONTEXT_RESERVED0 (0x1FFFFFFF<<3) 3500*4882a593Smuzhiyun #define __TIMERS_BLOCK_CONTEXT_RESERVED0_SHIFT 3 3501*4882a593Smuzhiyun }; 3502*4882a593Smuzhiyun 3503*4882a593Smuzhiyun 3504*4882a593Smuzhiyun /* 3505*4882a593Smuzhiyun * The eth aggregative context of Tstorm 3506*4882a593Smuzhiyun */ 3507*4882a593Smuzhiyun struct tstorm_eth_ag_context { 3508*4882a593Smuzhiyun u32 __reserved0[14]; 3509*4882a593Smuzhiyun }; 3510*4882a593Smuzhiyun 3511*4882a593Smuzhiyun 3512*4882a593Smuzhiyun /* 3513*4882a593Smuzhiyun * The eth aggregative context of Ustorm 3514*4882a593Smuzhiyun */ 3515*4882a593Smuzhiyun struct ustorm_eth_ag_context { 3516*4882a593Smuzhiyun u32 __reserved0; 3517*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3518*4882a593Smuzhiyun u8 cdu_usage; 3519*4882a593Smuzhiyun u8 __reserved2; 3520*4882a593Smuzhiyun u16 __reserved1; 3521*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3522*4882a593Smuzhiyun u16 __reserved1; 3523*4882a593Smuzhiyun u8 __reserved2; 3524*4882a593Smuzhiyun u8 cdu_usage; 3525*4882a593Smuzhiyun #endif 3526*4882a593Smuzhiyun u32 __reserved3[6]; 3527*4882a593Smuzhiyun }; 3528*4882a593Smuzhiyun 3529*4882a593Smuzhiyun 3530*4882a593Smuzhiyun /* 3531*4882a593Smuzhiyun * The eth aggregative context of Xstorm 3532*4882a593Smuzhiyun */ 3533*4882a593Smuzhiyun struct xstorm_eth_ag_context { 3534*4882a593Smuzhiyun u32 reserved0; 3535*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3536*4882a593Smuzhiyun u8 cdu_reserved; 3537*4882a593Smuzhiyun u8 reserved2; 3538*4882a593Smuzhiyun u16 reserved1; 3539*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3540*4882a593Smuzhiyun u16 reserved1; 3541*4882a593Smuzhiyun u8 reserved2; 3542*4882a593Smuzhiyun u8 cdu_reserved; 3543*4882a593Smuzhiyun #endif 3544*4882a593Smuzhiyun u32 reserved3[30]; 3545*4882a593Smuzhiyun }; 3546*4882a593Smuzhiyun 3547*4882a593Smuzhiyun 3548*4882a593Smuzhiyun /* 3549*4882a593Smuzhiyun * doorbell message sent to the chip 3550*4882a593Smuzhiyun */ 3551*4882a593Smuzhiyun struct doorbell { 3552*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3553*4882a593Smuzhiyun u16 zero_fill2; 3554*4882a593Smuzhiyun u8 zero_fill1; 3555*4882a593Smuzhiyun struct doorbell_hdr header; 3556*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3557*4882a593Smuzhiyun struct doorbell_hdr header; 3558*4882a593Smuzhiyun u8 zero_fill1; 3559*4882a593Smuzhiyun u16 zero_fill2; 3560*4882a593Smuzhiyun #endif 3561*4882a593Smuzhiyun }; 3562*4882a593Smuzhiyun 3563*4882a593Smuzhiyun 3564*4882a593Smuzhiyun /* 3565*4882a593Smuzhiyun * doorbell message sent to the chip 3566*4882a593Smuzhiyun */ 3567*4882a593Smuzhiyun struct doorbell_set_prod { 3568*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 3569*4882a593Smuzhiyun u16 prod; 3570*4882a593Smuzhiyun u8 zero_fill1; 3571*4882a593Smuzhiyun struct doorbell_hdr header; 3572*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 3573*4882a593Smuzhiyun struct doorbell_hdr header; 3574*4882a593Smuzhiyun u8 zero_fill1; 3575*4882a593Smuzhiyun u16 prod; 3576*4882a593Smuzhiyun #endif 3577*4882a593Smuzhiyun }; 3578*4882a593Smuzhiyun 3579*4882a593Smuzhiyun 3580*4882a593Smuzhiyun struct regpair { 3581*4882a593Smuzhiyun __le32 lo; 3582*4882a593Smuzhiyun __le32 hi; 3583*4882a593Smuzhiyun }; 3584*4882a593Smuzhiyun 3585*4882a593Smuzhiyun struct regpair_native { 3586*4882a593Smuzhiyun u32 lo; 3587*4882a593Smuzhiyun u32 hi; 3588*4882a593Smuzhiyun }; 3589*4882a593Smuzhiyun 3590*4882a593Smuzhiyun /* 3591*4882a593Smuzhiyun * Classify rule opcodes in E2/E3 3592*4882a593Smuzhiyun */ 3593*4882a593Smuzhiyun enum classify_rule { 3594*4882a593Smuzhiyun CLASSIFY_RULE_OPCODE_MAC, 3595*4882a593Smuzhiyun CLASSIFY_RULE_OPCODE_VLAN, 3596*4882a593Smuzhiyun CLASSIFY_RULE_OPCODE_PAIR, 3597*4882a593Smuzhiyun CLASSIFY_RULE_OPCODE_IMAC_VNI, 3598*4882a593Smuzhiyun MAX_CLASSIFY_RULE 3599*4882a593Smuzhiyun }; 3600*4882a593Smuzhiyun 3601*4882a593Smuzhiyun 3602*4882a593Smuzhiyun /* 3603*4882a593Smuzhiyun * Classify rule types in E2/E3 3604*4882a593Smuzhiyun */ 3605*4882a593Smuzhiyun enum classify_rule_action_type { 3606*4882a593Smuzhiyun CLASSIFY_RULE_REMOVE, 3607*4882a593Smuzhiyun CLASSIFY_RULE_ADD, 3608*4882a593Smuzhiyun MAX_CLASSIFY_RULE_ACTION_TYPE 3609*4882a593Smuzhiyun }; 3610*4882a593Smuzhiyun 3611*4882a593Smuzhiyun 3612*4882a593Smuzhiyun /* 3613*4882a593Smuzhiyun * client init ramrod data 3614*4882a593Smuzhiyun */ 3615*4882a593Smuzhiyun struct client_init_general_data { 3616*4882a593Smuzhiyun u8 client_id; 3617*4882a593Smuzhiyun u8 statistics_counter_id; 3618*4882a593Smuzhiyun u8 statistics_en_flg; 3619*4882a593Smuzhiyun u8 is_fcoe_flg; 3620*4882a593Smuzhiyun u8 activate_flg; 3621*4882a593Smuzhiyun u8 sp_client_id; 3622*4882a593Smuzhiyun __le16 mtu; 3623*4882a593Smuzhiyun u8 statistics_zero_flg; 3624*4882a593Smuzhiyun u8 func_id; 3625*4882a593Smuzhiyun u8 cos; 3626*4882a593Smuzhiyun u8 traffic_type; 3627*4882a593Smuzhiyun u8 fp_hsi_ver; 3628*4882a593Smuzhiyun u8 reserved0[3]; 3629*4882a593Smuzhiyun }; 3630*4882a593Smuzhiyun 3631*4882a593Smuzhiyun 3632*4882a593Smuzhiyun /* 3633*4882a593Smuzhiyun * client init rx data 3634*4882a593Smuzhiyun */ 3635*4882a593Smuzhiyun struct client_init_rx_data { 3636*4882a593Smuzhiyun u8 tpa_en; 3637*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_TPA_EN_IPV4 (0x1<<0) 3638*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_TPA_EN_IPV4_SHIFT 0 3639*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_TPA_EN_IPV6 (0x1<<1) 3640*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_TPA_EN_IPV6_SHIFT 1 3641*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_TPA_MODE (0x1<<2) 3642*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_TPA_MODE_SHIFT 2 3643*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_TPA_OVER_VLAN_DISABLE (0x1<<3) 3644*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_TPA_OVER_VLAN_DISABLE_SHIFT 3 3645*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_RESERVED5 (0xF<<4) 3646*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_RESERVED5_SHIFT 4 3647*4882a593Smuzhiyun u8 vmqueue_mode_en_flg; 3648*4882a593Smuzhiyun u8 extra_data_over_sgl_en_flg; 3649*4882a593Smuzhiyun u8 cache_line_alignment_log_size; 3650*4882a593Smuzhiyun u8 enable_dynamic_hc; 3651*4882a593Smuzhiyun u8 max_sges_for_packet; 3652*4882a593Smuzhiyun u8 client_qzone_id; 3653*4882a593Smuzhiyun u8 drop_ip_cs_err_flg; 3654*4882a593Smuzhiyun u8 drop_tcp_cs_err_flg; 3655*4882a593Smuzhiyun u8 drop_ttl0_flg; 3656*4882a593Smuzhiyun u8 drop_udp_cs_err_flg; 3657*4882a593Smuzhiyun u8 inner_vlan_removal_enable_flg; 3658*4882a593Smuzhiyun u8 outer_vlan_removal_enable_flg; 3659*4882a593Smuzhiyun u8 status_block_id; 3660*4882a593Smuzhiyun u8 rx_sb_index_number; 3661*4882a593Smuzhiyun u8 dont_verify_rings_pause_thr_flg; 3662*4882a593Smuzhiyun u8 max_tpa_queues; 3663*4882a593Smuzhiyun u8 silent_vlan_removal_flg; 3664*4882a593Smuzhiyun __le16 max_bytes_on_bd; 3665*4882a593Smuzhiyun __le16 sge_buff_size; 3666*4882a593Smuzhiyun u8 approx_mcast_engine_id; 3667*4882a593Smuzhiyun u8 rss_engine_id; 3668*4882a593Smuzhiyun struct regpair bd_page_base; 3669*4882a593Smuzhiyun struct regpair sge_page_base; 3670*4882a593Smuzhiyun struct regpair cqe_page_base; 3671*4882a593Smuzhiyun u8 is_leading_rss; 3672*4882a593Smuzhiyun u8 is_approx_mcast; 3673*4882a593Smuzhiyun __le16 max_agg_size; 3674*4882a593Smuzhiyun __le16 state; 3675*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_UCAST_DROP_ALL (0x1<<0) 3676*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_UCAST_DROP_ALL_SHIFT 0 3677*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_UCAST_ACCEPT_ALL (0x1<<1) 3678*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_UCAST_ACCEPT_ALL_SHIFT 1 3679*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_UCAST_ACCEPT_UNMATCHED (0x1<<2) 3680*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_UCAST_ACCEPT_UNMATCHED_SHIFT 2 3681*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_MCAST_DROP_ALL (0x1<<3) 3682*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_MCAST_DROP_ALL_SHIFT 3 3683*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_MCAST_ACCEPT_ALL (0x1<<4) 3684*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_MCAST_ACCEPT_ALL_SHIFT 4 3685*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_BCAST_ACCEPT_ALL (0x1<<5) 3686*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_BCAST_ACCEPT_ALL_SHIFT 5 3687*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_ACCEPT_ANY_VLAN (0x1<<6) 3688*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_ACCEPT_ANY_VLAN_SHIFT 6 3689*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_RESERVED2 (0x1FF<<7) 3690*4882a593Smuzhiyun #define CLIENT_INIT_RX_DATA_RESERVED2_SHIFT 7 3691*4882a593Smuzhiyun __le16 cqe_pause_thr_low; 3692*4882a593Smuzhiyun __le16 cqe_pause_thr_high; 3693*4882a593Smuzhiyun __le16 bd_pause_thr_low; 3694*4882a593Smuzhiyun __le16 bd_pause_thr_high; 3695*4882a593Smuzhiyun __le16 sge_pause_thr_low; 3696*4882a593Smuzhiyun __le16 sge_pause_thr_high; 3697*4882a593Smuzhiyun __le16 rx_cos_mask; 3698*4882a593Smuzhiyun __le16 silent_vlan_value; 3699*4882a593Smuzhiyun __le16 silent_vlan_mask; 3700*4882a593Smuzhiyun u8 handle_ptp_pkts_flg; 3701*4882a593Smuzhiyun u8 reserved6[3]; 3702*4882a593Smuzhiyun __le32 reserved7; 3703*4882a593Smuzhiyun }; 3704*4882a593Smuzhiyun 3705*4882a593Smuzhiyun /* 3706*4882a593Smuzhiyun * client init tx data 3707*4882a593Smuzhiyun */ 3708*4882a593Smuzhiyun struct client_init_tx_data { 3709*4882a593Smuzhiyun u8 enforce_security_flg; 3710*4882a593Smuzhiyun u8 tx_status_block_id; 3711*4882a593Smuzhiyun u8 tx_sb_index_number; 3712*4882a593Smuzhiyun u8 tss_leading_client_id; 3713*4882a593Smuzhiyun u8 tx_switching_flg; 3714*4882a593Smuzhiyun u8 anti_spoofing_flg; 3715*4882a593Smuzhiyun __le16 default_vlan; 3716*4882a593Smuzhiyun struct regpair tx_bd_page_base; 3717*4882a593Smuzhiyun __le16 state; 3718*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_UCAST_ACCEPT_ALL (0x1<<0) 3719*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_UCAST_ACCEPT_ALL_SHIFT 0 3720*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_MCAST_ACCEPT_ALL (0x1<<1) 3721*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_MCAST_ACCEPT_ALL_SHIFT 1 3722*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_BCAST_ACCEPT_ALL (0x1<<2) 3723*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_BCAST_ACCEPT_ALL_SHIFT 2 3724*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_ACCEPT_ANY_VLAN (0x1<<3) 3725*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_ACCEPT_ANY_VLAN_SHIFT 3 3726*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_RESERVED0 (0xFFF<<4) 3727*4882a593Smuzhiyun #define CLIENT_INIT_TX_DATA_RESERVED0_SHIFT 4 3728*4882a593Smuzhiyun u8 default_vlan_flg; 3729*4882a593Smuzhiyun u8 force_default_pri_flg; 3730*4882a593Smuzhiyun u8 tunnel_lso_inc_ip_id; 3731*4882a593Smuzhiyun u8 refuse_outband_vlan_flg; 3732*4882a593Smuzhiyun u8 tunnel_non_lso_pcsum_location; 3733*4882a593Smuzhiyun u8 tunnel_non_lso_outer_ip_csum_location; 3734*4882a593Smuzhiyun }; 3735*4882a593Smuzhiyun 3736*4882a593Smuzhiyun /* 3737*4882a593Smuzhiyun * client init ramrod data 3738*4882a593Smuzhiyun */ 3739*4882a593Smuzhiyun struct client_init_ramrod_data { 3740*4882a593Smuzhiyun struct client_init_general_data general; 3741*4882a593Smuzhiyun struct client_init_rx_data rx; 3742*4882a593Smuzhiyun struct client_init_tx_data tx; 3743*4882a593Smuzhiyun }; 3744*4882a593Smuzhiyun 3745*4882a593Smuzhiyun 3746*4882a593Smuzhiyun /* 3747*4882a593Smuzhiyun * client update ramrod data 3748*4882a593Smuzhiyun */ 3749*4882a593Smuzhiyun struct client_update_ramrod_data { 3750*4882a593Smuzhiyun u8 client_id; 3751*4882a593Smuzhiyun u8 func_id; 3752*4882a593Smuzhiyun u8 inner_vlan_removal_enable_flg; 3753*4882a593Smuzhiyun u8 inner_vlan_removal_change_flg; 3754*4882a593Smuzhiyun u8 outer_vlan_removal_enable_flg; 3755*4882a593Smuzhiyun u8 outer_vlan_removal_change_flg; 3756*4882a593Smuzhiyun u8 anti_spoofing_enable_flg; 3757*4882a593Smuzhiyun u8 anti_spoofing_change_flg; 3758*4882a593Smuzhiyun u8 activate_flg; 3759*4882a593Smuzhiyun u8 activate_change_flg; 3760*4882a593Smuzhiyun __le16 default_vlan; 3761*4882a593Smuzhiyun u8 default_vlan_enable_flg; 3762*4882a593Smuzhiyun u8 default_vlan_change_flg; 3763*4882a593Smuzhiyun __le16 silent_vlan_value; 3764*4882a593Smuzhiyun __le16 silent_vlan_mask; 3765*4882a593Smuzhiyun u8 silent_vlan_removal_flg; 3766*4882a593Smuzhiyun u8 silent_vlan_change_flg; 3767*4882a593Smuzhiyun u8 refuse_outband_vlan_flg; 3768*4882a593Smuzhiyun u8 refuse_outband_vlan_change_flg; 3769*4882a593Smuzhiyun u8 tx_switching_flg; 3770*4882a593Smuzhiyun u8 tx_switching_change_flg; 3771*4882a593Smuzhiyun u8 handle_ptp_pkts_flg; 3772*4882a593Smuzhiyun u8 handle_ptp_pkts_change_flg; 3773*4882a593Smuzhiyun __le16 reserved1; 3774*4882a593Smuzhiyun __le32 echo; 3775*4882a593Smuzhiyun }; 3776*4882a593Smuzhiyun 3777*4882a593Smuzhiyun 3778*4882a593Smuzhiyun /* 3779*4882a593Smuzhiyun * The eth storm context of Cstorm 3780*4882a593Smuzhiyun */ 3781*4882a593Smuzhiyun struct cstorm_eth_st_context { 3782*4882a593Smuzhiyun u32 __reserved0[4]; 3783*4882a593Smuzhiyun }; 3784*4882a593Smuzhiyun 3785*4882a593Smuzhiyun 3786*4882a593Smuzhiyun struct double_regpair { 3787*4882a593Smuzhiyun u32 regpair0_lo; 3788*4882a593Smuzhiyun u32 regpair0_hi; 3789*4882a593Smuzhiyun u32 regpair1_lo; 3790*4882a593Smuzhiyun u32 regpair1_hi; 3791*4882a593Smuzhiyun }; 3792*4882a593Smuzhiyun 3793*4882a593Smuzhiyun /* 2nd parse bd type used in ethernet tx BDs */ 3794*4882a593Smuzhiyun enum eth_2nd_parse_bd_type { 3795*4882a593Smuzhiyun ETH_2ND_PARSE_BD_TYPE_LSO_TUNNEL, 3796*4882a593Smuzhiyun MAX_ETH_2ND_PARSE_BD_TYPE 3797*4882a593Smuzhiyun }; 3798*4882a593Smuzhiyun 3799*4882a593Smuzhiyun /* 3800*4882a593Smuzhiyun * Ethernet address typesm used in ethernet tx BDs 3801*4882a593Smuzhiyun */ 3802*4882a593Smuzhiyun enum eth_addr_type { 3803*4882a593Smuzhiyun UNKNOWN_ADDRESS, 3804*4882a593Smuzhiyun UNICAST_ADDRESS, 3805*4882a593Smuzhiyun MULTICAST_ADDRESS, 3806*4882a593Smuzhiyun BROADCAST_ADDRESS, 3807*4882a593Smuzhiyun MAX_ETH_ADDR_TYPE 3808*4882a593Smuzhiyun }; 3809*4882a593Smuzhiyun 3810*4882a593Smuzhiyun 3811*4882a593Smuzhiyun /* 3812*4882a593Smuzhiyun * 3813*4882a593Smuzhiyun */ 3814*4882a593Smuzhiyun struct eth_classify_cmd_header { 3815*4882a593Smuzhiyun u8 cmd_general_data; 3816*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_RX_CMD (0x1<<0) 3817*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_RX_CMD_SHIFT 0 3818*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_TX_CMD (0x1<<1) 3819*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_TX_CMD_SHIFT 1 3820*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_OPCODE (0x3<<2) 3821*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_OPCODE_SHIFT 2 3822*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_IS_ADD (0x1<<4) 3823*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_IS_ADD_SHIFT 4 3824*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_RESERVED0 (0x7<<5) 3825*4882a593Smuzhiyun #define ETH_CLASSIFY_CMD_HEADER_RESERVED0_SHIFT 5 3826*4882a593Smuzhiyun u8 func_id; 3827*4882a593Smuzhiyun u8 client_id; 3828*4882a593Smuzhiyun u8 reserved1; 3829*4882a593Smuzhiyun }; 3830*4882a593Smuzhiyun 3831*4882a593Smuzhiyun 3832*4882a593Smuzhiyun /* 3833*4882a593Smuzhiyun * header for eth classification config ramrod 3834*4882a593Smuzhiyun */ 3835*4882a593Smuzhiyun struct eth_classify_header { 3836*4882a593Smuzhiyun u8 rule_cnt; 3837*4882a593Smuzhiyun u8 warning_on_error; 3838*4882a593Smuzhiyun __le16 reserved1; 3839*4882a593Smuzhiyun __le32 echo; 3840*4882a593Smuzhiyun }; 3841*4882a593Smuzhiyun 3842*4882a593Smuzhiyun /* 3843*4882a593Smuzhiyun * Command for adding/removing a Inner-MAC/VNI classification rule 3844*4882a593Smuzhiyun */ 3845*4882a593Smuzhiyun struct eth_classify_imac_vni_cmd { 3846*4882a593Smuzhiyun struct eth_classify_cmd_header header; 3847*4882a593Smuzhiyun __le32 vni; 3848*4882a593Smuzhiyun __le16 imac_lsb; 3849*4882a593Smuzhiyun __le16 imac_mid; 3850*4882a593Smuzhiyun __le16 imac_msb; 3851*4882a593Smuzhiyun __le16 reserved1; 3852*4882a593Smuzhiyun }; 3853*4882a593Smuzhiyun 3854*4882a593Smuzhiyun /* 3855*4882a593Smuzhiyun * Command for adding/removing a MAC classification rule 3856*4882a593Smuzhiyun */ 3857*4882a593Smuzhiyun struct eth_classify_mac_cmd { 3858*4882a593Smuzhiyun struct eth_classify_cmd_header header; 3859*4882a593Smuzhiyun __le16 reserved0; 3860*4882a593Smuzhiyun __le16 inner_mac; 3861*4882a593Smuzhiyun __le16 mac_lsb; 3862*4882a593Smuzhiyun __le16 mac_mid; 3863*4882a593Smuzhiyun __le16 mac_msb; 3864*4882a593Smuzhiyun __le16 reserved1; 3865*4882a593Smuzhiyun }; 3866*4882a593Smuzhiyun 3867*4882a593Smuzhiyun 3868*4882a593Smuzhiyun /* 3869*4882a593Smuzhiyun * Command for adding/removing a MAC-VLAN pair classification rule 3870*4882a593Smuzhiyun */ 3871*4882a593Smuzhiyun struct eth_classify_pair_cmd { 3872*4882a593Smuzhiyun struct eth_classify_cmd_header header; 3873*4882a593Smuzhiyun __le16 reserved0; 3874*4882a593Smuzhiyun __le16 inner_mac; 3875*4882a593Smuzhiyun __le16 mac_lsb; 3876*4882a593Smuzhiyun __le16 mac_mid; 3877*4882a593Smuzhiyun __le16 mac_msb; 3878*4882a593Smuzhiyun __le16 vlan; 3879*4882a593Smuzhiyun }; 3880*4882a593Smuzhiyun 3881*4882a593Smuzhiyun 3882*4882a593Smuzhiyun /* 3883*4882a593Smuzhiyun * Command for adding/removing a VLAN classification rule 3884*4882a593Smuzhiyun */ 3885*4882a593Smuzhiyun struct eth_classify_vlan_cmd { 3886*4882a593Smuzhiyun struct eth_classify_cmd_header header; 3887*4882a593Smuzhiyun __le32 reserved0; 3888*4882a593Smuzhiyun __le32 reserved1; 3889*4882a593Smuzhiyun __le16 reserved2; 3890*4882a593Smuzhiyun __le16 vlan; 3891*4882a593Smuzhiyun }; 3892*4882a593Smuzhiyun 3893*4882a593Smuzhiyun /* 3894*4882a593Smuzhiyun * Command for adding/removing a VXLAN classification rule 3895*4882a593Smuzhiyun */ 3896*4882a593Smuzhiyun 3897*4882a593Smuzhiyun /* 3898*4882a593Smuzhiyun * union for eth classification rule 3899*4882a593Smuzhiyun */ 3900*4882a593Smuzhiyun union eth_classify_rule_cmd { 3901*4882a593Smuzhiyun struct eth_classify_mac_cmd mac; 3902*4882a593Smuzhiyun struct eth_classify_vlan_cmd vlan; 3903*4882a593Smuzhiyun struct eth_classify_pair_cmd pair; 3904*4882a593Smuzhiyun struct eth_classify_imac_vni_cmd imac_vni; 3905*4882a593Smuzhiyun }; 3906*4882a593Smuzhiyun 3907*4882a593Smuzhiyun /* 3908*4882a593Smuzhiyun * parameters for eth classification configuration ramrod 3909*4882a593Smuzhiyun */ 3910*4882a593Smuzhiyun struct eth_classify_rules_ramrod_data { 3911*4882a593Smuzhiyun struct eth_classify_header header; 3912*4882a593Smuzhiyun union eth_classify_rule_cmd rules[CLASSIFY_RULES_COUNT]; 3913*4882a593Smuzhiyun }; 3914*4882a593Smuzhiyun 3915*4882a593Smuzhiyun 3916*4882a593Smuzhiyun /* 3917*4882a593Smuzhiyun * The data contain client ID need to the ramrod 3918*4882a593Smuzhiyun */ 3919*4882a593Smuzhiyun struct eth_common_ramrod_data { 3920*4882a593Smuzhiyun __le32 client_id; 3921*4882a593Smuzhiyun __le32 reserved1; 3922*4882a593Smuzhiyun }; 3923*4882a593Smuzhiyun 3924*4882a593Smuzhiyun 3925*4882a593Smuzhiyun /* 3926*4882a593Smuzhiyun * The eth storm context of Ustorm 3927*4882a593Smuzhiyun */ 3928*4882a593Smuzhiyun struct ustorm_eth_st_context { 3929*4882a593Smuzhiyun u32 reserved0[52]; 3930*4882a593Smuzhiyun }; 3931*4882a593Smuzhiyun 3932*4882a593Smuzhiyun /* 3933*4882a593Smuzhiyun * The eth storm context of Tstorm 3934*4882a593Smuzhiyun */ 3935*4882a593Smuzhiyun struct tstorm_eth_st_context { 3936*4882a593Smuzhiyun u32 __reserved0[28]; 3937*4882a593Smuzhiyun }; 3938*4882a593Smuzhiyun 3939*4882a593Smuzhiyun /* 3940*4882a593Smuzhiyun * The eth storm context of Xstorm 3941*4882a593Smuzhiyun */ 3942*4882a593Smuzhiyun struct xstorm_eth_st_context { 3943*4882a593Smuzhiyun u32 reserved0[60]; 3944*4882a593Smuzhiyun }; 3945*4882a593Smuzhiyun 3946*4882a593Smuzhiyun /* 3947*4882a593Smuzhiyun * Ethernet connection context 3948*4882a593Smuzhiyun */ 3949*4882a593Smuzhiyun struct eth_context { 3950*4882a593Smuzhiyun struct ustorm_eth_st_context ustorm_st_context; 3951*4882a593Smuzhiyun struct tstorm_eth_st_context tstorm_st_context; 3952*4882a593Smuzhiyun struct xstorm_eth_ag_context xstorm_ag_context; 3953*4882a593Smuzhiyun struct tstorm_eth_ag_context tstorm_ag_context; 3954*4882a593Smuzhiyun struct cstorm_eth_ag_context cstorm_ag_context; 3955*4882a593Smuzhiyun struct ustorm_eth_ag_context ustorm_ag_context; 3956*4882a593Smuzhiyun struct timers_block_context timers_context; 3957*4882a593Smuzhiyun struct xstorm_eth_st_context xstorm_st_context; 3958*4882a593Smuzhiyun struct cstorm_eth_st_context cstorm_st_context; 3959*4882a593Smuzhiyun }; 3960*4882a593Smuzhiyun 3961*4882a593Smuzhiyun 3962*4882a593Smuzhiyun /* 3963*4882a593Smuzhiyun * union for sgl and raw data. 3964*4882a593Smuzhiyun */ 3965*4882a593Smuzhiyun union eth_sgl_or_raw_data { 3966*4882a593Smuzhiyun __le16 sgl[8]; 3967*4882a593Smuzhiyun u32 raw_data[4]; 3968*4882a593Smuzhiyun }; 3969*4882a593Smuzhiyun 3970*4882a593Smuzhiyun /* 3971*4882a593Smuzhiyun * eth FP end aggregation CQE parameters struct 3972*4882a593Smuzhiyun */ 3973*4882a593Smuzhiyun struct eth_end_agg_rx_cqe { 3974*4882a593Smuzhiyun u8 type_error_flags; 3975*4882a593Smuzhiyun #define ETH_END_AGG_RX_CQE_TYPE (0x3<<0) 3976*4882a593Smuzhiyun #define ETH_END_AGG_RX_CQE_TYPE_SHIFT 0 3977*4882a593Smuzhiyun #define ETH_END_AGG_RX_CQE_SGL_RAW_SEL (0x1<<2) 3978*4882a593Smuzhiyun #define ETH_END_AGG_RX_CQE_SGL_RAW_SEL_SHIFT 2 3979*4882a593Smuzhiyun #define ETH_END_AGG_RX_CQE_RESERVED0 (0x1F<<3) 3980*4882a593Smuzhiyun #define ETH_END_AGG_RX_CQE_RESERVED0_SHIFT 3 3981*4882a593Smuzhiyun u8 reserved1; 3982*4882a593Smuzhiyun u8 queue_index; 3983*4882a593Smuzhiyun u8 reserved2; 3984*4882a593Smuzhiyun __le32 timestamp_delta; 3985*4882a593Smuzhiyun __le16 num_of_coalesced_segs; 3986*4882a593Smuzhiyun __le16 pkt_len; 3987*4882a593Smuzhiyun u8 pure_ack_count; 3988*4882a593Smuzhiyun u8 reserved3; 3989*4882a593Smuzhiyun __le16 reserved4; 3990*4882a593Smuzhiyun union eth_sgl_or_raw_data sgl_or_raw_data; 3991*4882a593Smuzhiyun __le32 reserved5[8]; 3992*4882a593Smuzhiyun }; 3993*4882a593Smuzhiyun 3994*4882a593Smuzhiyun 3995*4882a593Smuzhiyun /* 3996*4882a593Smuzhiyun * regular eth FP CQE parameters struct 3997*4882a593Smuzhiyun */ 3998*4882a593Smuzhiyun struct eth_fast_path_rx_cqe { 3999*4882a593Smuzhiyun u8 type_error_flags; 4000*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_TYPE (0x3<<0) 4001*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_TYPE_SHIFT 0 4002*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_SGL_RAW_SEL (0x1<<2) 4003*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_SGL_RAW_SEL_SHIFT 2 4004*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG (0x1<<3) 4005*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG_SHIFT 3 4006*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG (0x1<<4) 4007*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG_SHIFT 4 4008*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG (0x1<<5) 4009*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG_SHIFT 5 4010*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_PTP_PKT (0x1<<6) 4011*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_PTP_PKT_SHIFT 6 4012*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_RESERVED0 (0x1<<7) 4013*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_RESERVED0_SHIFT 7 4014*4882a593Smuzhiyun u8 status_flags; 4015*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE (0x7<<0) 4016*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE_SHIFT 0 4017*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG (0x1<<3) 4018*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG_SHIFT 3 4019*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_BROADCAST_FLG (0x1<<4) 4020*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_BROADCAST_FLG_SHIFT 4 4021*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_MAC_MATCH_FLG (0x1<<5) 4022*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_MAC_MATCH_FLG_SHIFT 5 4023*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG (0x1<<6) 4024*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG_SHIFT 6 4025*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG (0x1<<7) 4026*4882a593Smuzhiyun #define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG_SHIFT 7 4027*4882a593Smuzhiyun u8 queue_index; 4028*4882a593Smuzhiyun u8 placement_offset; 4029*4882a593Smuzhiyun __le32 rss_hash_result; 4030*4882a593Smuzhiyun __le16 vlan_tag; 4031*4882a593Smuzhiyun __le16 pkt_len_or_gro_seg_len; 4032*4882a593Smuzhiyun __le16 len_on_bd; 4033*4882a593Smuzhiyun struct parsing_flags pars_flags; 4034*4882a593Smuzhiyun union eth_sgl_or_raw_data sgl_or_raw_data; 4035*4882a593Smuzhiyun u8 tunn_type; 4036*4882a593Smuzhiyun u8 tunn_inner_hdrs_offset; 4037*4882a593Smuzhiyun __le16 reserved1; 4038*4882a593Smuzhiyun __le32 tunn_tenant_id; 4039*4882a593Smuzhiyun __le32 padding[5]; 4040*4882a593Smuzhiyun u32 marker; 4041*4882a593Smuzhiyun }; 4042*4882a593Smuzhiyun 4043*4882a593Smuzhiyun 4044*4882a593Smuzhiyun /* 4045*4882a593Smuzhiyun * Command for setting classification flags for a client 4046*4882a593Smuzhiyun */ 4047*4882a593Smuzhiyun struct eth_filter_rules_cmd { 4048*4882a593Smuzhiyun u8 cmd_general_data; 4049*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_RX_CMD (0x1<<0) 4050*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_RX_CMD_SHIFT 0 4051*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_TX_CMD (0x1<<1) 4052*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_TX_CMD_SHIFT 1 4053*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_RESERVED0 (0x3F<<2) 4054*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_RESERVED0_SHIFT 2 4055*4882a593Smuzhiyun u8 func_id; 4056*4882a593Smuzhiyun u8 client_id; 4057*4882a593Smuzhiyun u8 reserved1; 4058*4882a593Smuzhiyun __le16 state; 4059*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_UCAST_DROP_ALL (0x1<<0) 4060*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_UCAST_DROP_ALL_SHIFT 0 4061*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_UCAST_ACCEPT_ALL (0x1<<1) 4062*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_UCAST_ACCEPT_ALL_SHIFT 1 4063*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_UCAST_ACCEPT_UNMATCHED (0x1<<2) 4064*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_UCAST_ACCEPT_UNMATCHED_SHIFT 2 4065*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_MCAST_DROP_ALL (0x1<<3) 4066*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_MCAST_DROP_ALL_SHIFT 3 4067*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_MCAST_ACCEPT_ALL (0x1<<4) 4068*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_MCAST_ACCEPT_ALL_SHIFT 4 4069*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_BCAST_ACCEPT_ALL (0x1<<5) 4070*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_BCAST_ACCEPT_ALL_SHIFT 5 4071*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_ACCEPT_ANY_VLAN (0x1<<6) 4072*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_ACCEPT_ANY_VLAN_SHIFT 6 4073*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_RESERVED2 (0x1FF<<7) 4074*4882a593Smuzhiyun #define ETH_FILTER_RULES_CMD_RESERVED2_SHIFT 7 4075*4882a593Smuzhiyun __le16 reserved3; 4076*4882a593Smuzhiyun struct regpair reserved4; 4077*4882a593Smuzhiyun }; 4078*4882a593Smuzhiyun 4079*4882a593Smuzhiyun 4080*4882a593Smuzhiyun /* 4081*4882a593Smuzhiyun * parameters for eth classification filters ramrod 4082*4882a593Smuzhiyun */ 4083*4882a593Smuzhiyun struct eth_filter_rules_ramrod_data { 4084*4882a593Smuzhiyun struct eth_classify_header header; 4085*4882a593Smuzhiyun struct eth_filter_rules_cmd rules[FILTER_RULES_COUNT]; 4086*4882a593Smuzhiyun }; 4087*4882a593Smuzhiyun 4088*4882a593Smuzhiyun /* Hsi version */ 4089*4882a593Smuzhiyun enum eth_fp_hsi_ver { 4090*4882a593Smuzhiyun ETH_FP_HSI_VER_0, 4091*4882a593Smuzhiyun ETH_FP_HSI_VER_1, 4092*4882a593Smuzhiyun ETH_FP_HSI_VER_2, 4093*4882a593Smuzhiyun MAX_ETH_FP_HSI_VER 4094*4882a593Smuzhiyun }; 4095*4882a593Smuzhiyun 4096*4882a593Smuzhiyun /* 4097*4882a593Smuzhiyun * parameters for eth classification configuration ramrod 4098*4882a593Smuzhiyun */ 4099*4882a593Smuzhiyun struct eth_general_rules_ramrod_data { 4100*4882a593Smuzhiyun struct eth_classify_header header; 4101*4882a593Smuzhiyun union eth_classify_rule_cmd rules[CLASSIFY_RULES_COUNT]; 4102*4882a593Smuzhiyun }; 4103*4882a593Smuzhiyun 4104*4882a593Smuzhiyun 4105*4882a593Smuzhiyun /* 4106*4882a593Smuzhiyun * The data for Halt ramrod 4107*4882a593Smuzhiyun */ 4108*4882a593Smuzhiyun struct eth_halt_ramrod_data { 4109*4882a593Smuzhiyun __le32 client_id; 4110*4882a593Smuzhiyun __le32 reserved0; 4111*4882a593Smuzhiyun }; 4112*4882a593Smuzhiyun 4113*4882a593Smuzhiyun 4114*4882a593Smuzhiyun /* 4115*4882a593Smuzhiyun * destination and source mac address. 4116*4882a593Smuzhiyun */ 4117*4882a593Smuzhiyun struct eth_mac_addresses { 4118*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 4119*4882a593Smuzhiyun __le16 dst_mid; 4120*4882a593Smuzhiyun __le16 dst_lo; 4121*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 4122*4882a593Smuzhiyun __le16 dst_lo; 4123*4882a593Smuzhiyun __le16 dst_mid; 4124*4882a593Smuzhiyun #endif 4125*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 4126*4882a593Smuzhiyun __le16 src_lo; 4127*4882a593Smuzhiyun __le16 dst_hi; 4128*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 4129*4882a593Smuzhiyun __le16 dst_hi; 4130*4882a593Smuzhiyun __le16 src_lo; 4131*4882a593Smuzhiyun #endif 4132*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 4133*4882a593Smuzhiyun __le16 src_hi; 4134*4882a593Smuzhiyun __le16 src_mid; 4135*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 4136*4882a593Smuzhiyun __le16 src_mid; 4137*4882a593Smuzhiyun __le16 src_hi; 4138*4882a593Smuzhiyun #endif 4139*4882a593Smuzhiyun }; 4140*4882a593Smuzhiyun 4141*4882a593Smuzhiyun /* tunneling related data */ 4142*4882a593Smuzhiyun struct eth_tunnel_data { 4143*4882a593Smuzhiyun __le16 dst_lo; 4144*4882a593Smuzhiyun __le16 dst_mid; 4145*4882a593Smuzhiyun __le16 dst_hi; 4146*4882a593Smuzhiyun __le16 fw_ip_hdr_csum; 4147*4882a593Smuzhiyun __le16 pseudo_csum; 4148*4882a593Smuzhiyun u8 ip_hdr_start_inner_w; 4149*4882a593Smuzhiyun u8 flags; 4150*4882a593Smuzhiyun #define ETH_TUNNEL_DATA_IPV6_OUTER (0x1<<0) 4151*4882a593Smuzhiyun #define ETH_TUNNEL_DATA_IPV6_OUTER_SHIFT 0 4152*4882a593Smuzhiyun #define ETH_TUNNEL_DATA_RESERVED (0x7F<<1) 4153*4882a593Smuzhiyun #define ETH_TUNNEL_DATA_RESERVED_SHIFT 1 4154*4882a593Smuzhiyun }; 4155*4882a593Smuzhiyun 4156*4882a593Smuzhiyun /* union for mac addresses and for tunneling data. 4157*4882a593Smuzhiyun * considered as tunneling data only if (tunnel_exist == 1). 4158*4882a593Smuzhiyun */ 4159*4882a593Smuzhiyun union eth_mac_addr_or_tunnel_data { 4160*4882a593Smuzhiyun struct eth_mac_addresses mac_addr; 4161*4882a593Smuzhiyun struct eth_tunnel_data tunnel_data; 4162*4882a593Smuzhiyun }; 4163*4882a593Smuzhiyun 4164*4882a593Smuzhiyun /*Command for setting multicast classification for a client */ 4165*4882a593Smuzhiyun struct eth_multicast_rules_cmd { 4166*4882a593Smuzhiyun u8 cmd_general_data; 4167*4882a593Smuzhiyun #define ETH_MULTICAST_RULES_CMD_RX_CMD (0x1<<0) 4168*4882a593Smuzhiyun #define ETH_MULTICAST_RULES_CMD_RX_CMD_SHIFT 0 4169*4882a593Smuzhiyun #define ETH_MULTICAST_RULES_CMD_TX_CMD (0x1<<1) 4170*4882a593Smuzhiyun #define ETH_MULTICAST_RULES_CMD_TX_CMD_SHIFT 1 4171*4882a593Smuzhiyun #define ETH_MULTICAST_RULES_CMD_IS_ADD (0x1<<2) 4172*4882a593Smuzhiyun #define ETH_MULTICAST_RULES_CMD_IS_ADD_SHIFT 2 4173*4882a593Smuzhiyun #define ETH_MULTICAST_RULES_CMD_RESERVED0 (0x1F<<3) 4174*4882a593Smuzhiyun #define ETH_MULTICAST_RULES_CMD_RESERVED0_SHIFT 3 4175*4882a593Smuzhiyun u8 func_id; 4176*4882a593Smuzhiyun u8 bin_id; 4177*4882a593Smuzhiyun u8 engine_id; 4178*4882a593Smuzhiyun __le32 reserved2; 4179*4882a593Smuzhiyun struct regpair reserved3; 4180*4882a593Smuzhiyun }; 4181*4882a593Smuzhiyun 4182*4882a593Smuzhiyun /* 4183*4882a593Smuzhiyun * parameters for multicast classification ramrod 4184*4882a593Smuzhiyun */ 4185*4882a593Smuzhiyun struct eth_multicast_rules_ramrod_data { 4186*4882a593Smuzhiyun struct eth_classify_header header; 4187*4882a593Smuzhiyun struct eth_multicast_rules_cmd rules[MULTICAST_RULES_COUNT]; 4188*4882a593Smuzhiyun }; 4189*4882a593Smuzhiyun 4190*4882a593Smuzhiyun /* 4191*4882a593Smuzhiyun * Place holder for ramrods protocol specific data 4192*4882a593Smuzhiyun */ 4193*4882a593Smuzhiyun struct ramrod_data { 4194*4882a593Smuzhiyun __le32 data_lo; 4195*4882a593Smuzhiyun __le32 data_hi; 4196*4882a593Smuzhiyun }; 4197*4882a593Smuzhiyun 4198*4882a593Smuzhiyun /* 4199*4882a593Smuzhiyun * union for ramrod data for Ethernet protocol (CQE) (force size of 16 bits) 4200*4882a593Smuzhiyun */ 4201*4882a593Smuzhiyun union eth_ramrod_data { 4202*4882a593Smuzhiyun struct ramrod_data general; 4203*4882a593Smuzhiyun }; 4204*4882a593Smuzhiyun 4205*4882a593Smuzhiyun 4206*4882a593Smuzhiyun /* 4207*4882a593Smuzhiyun * RSS toeplitz hash type, as reported in CQE 4208*4882a593Smuzhiyun */ 4209*4882a593Smuzhiyun enum eth_rss_hash_type { 4210*4882a593Smuzhiyun DEFAULT_HASH_TYPE, 4211*4882a593Smuzhiyun IPV4_HASH_TYPE, 4212*4882a593Smuzhiyun TCP_IPV4_HASH_TYPE, 4213*4882a593Smuzhiyun IPV6_HASH_TYPE, 4214*4882a593Smuzhiyun TCP_IPV6_HASH_TYPE, 4215*4882a593Smuzhiyun VLAN_PRI_HASH_TYPE, 4216*4882a593Smuzhiyun E1HOV_PRI_HASH_TYPE, 4217*4882a593Smuzhiyun DSCP_HASH_TYPE, 4218*4882a593Smuzhiyun MAX_ETH_RSS_HASH_TYPE 4219*4882a593Smuzhiyun }; 4220*4882a593Smuzhiyun 4221*4882a593Smuzhiyun 4222*4882a593Smuzhiyun /* 4223*4882a593Smuzhiyun * Ethernet RSS mode 4224*4882a593Smuzhiyun */ 4225*4882a593Smuzhiyun enum eth_rss_mode { 4226*4882a593Smuzhiyun ETH_RSS_MODE_DISABLED, 4227*4882a593Smuzhiyun ETH_RSS_MODE_REGULAR, 4228*4882a593Smuzhiyun ETH_RSS_MODE_VLAN_PRI, 4229*4882a593Smuzhiyun ETH_RSS_MODE_E1HOV_PRI, 4230*4882a593Smuzhiyun ETH_RSS_MODE_IP_DSCP, 4231*4882a593Smuzhiyun MAX_ETH_RSS_MODE 4232*4882a593Smuzhiyun }; 4233*4882a593Smuzhiyun 4234*4882a593Smuzhiyun 4235*4882a593Smuzhiyun /* 4236*4882a593Smuzhiyun * parameters for RSS update ramrod (E2) 4237*4882a593Smuzhiyun */ 4238*4882a593Smuzhiyun struct eth_rss_update_ramrod_data { 4239*4882a593Smuzhiyun u8 rss_engine_id; 4240*4882a593Smuzhiyun u8 rss_mode; 4241*4882a593Smuzhiyun __le16 capabilities; 4242*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV4_CAPABILITY (0x1<<0) 4243*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV4_CAPABILITY_SHIFT 0 4244*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV4_TCP_CAPABILITY (0x1<<1) 4245*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV4_TCP_CAPABILITY_SHIFT 1 4246*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV4_UDP_CAPABILITY (0x1<<2) 4247*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV4_UDP_CAPABILITY_SHIFT 2 4248*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV4_VXLAN_CAPABILITY (0x1<<3) 4249*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV4_VXLAN_CAPABILITY_SHIFT 3 4250*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_CAPABILITY (0x1<<4) 4251*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_CAPABILITY_SHIFT 4 4252*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_TCP_CAPABILITY (0x1<<5) 4253*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_TCP_CAPABILITY_SHIFT 5 4254*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_UDP_CAPABILITY (0x1<<6) 4255*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_UDP_CAPABILITY_SHIFT 6 4256*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_VXLAN_CAPABILITY (0x1<<7) 4257*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_VXLAN_CAPABILITY_SHIFT 7 4258*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_TUNN_INNER_HDRS_CAPABILITY (0x1<<8) 4259*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_TUNN_INNER_HDRS_CAPABILITY_SHIFT 8 4260*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_UPDATE_RSS_KEY (0x1<<9) 4261*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_UPDATE_RSS_KEY_SHIFT 9 4262*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_RESERVED (0x3F<<10) 4263*4882a593Smuzhiyun #define ETH_RSS_UPDATE_RAMROD_DATA_RESERVED_SHIFT 10 4264*4882a593Smuzhiyun u8 rss_result_mask; 4265*4882a593Smuzhiyun u8 reserved3; 4266*4882a593Smuzhiyun __le16 reserved4; 4267*4882a593Smuzhiyun u8 indirection_table[T_ETH_INDIRECTION_TABLE_SIZE]; 4268*4882a593Smuzhiyun __le32 rss_key[T_ETH_RSS_KEY]; 4269*4882a593Smuzhiyun __le32 echo; 4270*4882a593Smuzhiyun __le32 reserved5; 4271*4882a593Smuzhiyun }; 4272*4882a593Smuzhiyun 4273*4882a593Smuzhiyun 4274*4882a593Smuzhiyun /* 4275*4882a593Smuzhiyun * The eth Rx Buffer Descriptor 4276*4882a593Smuzhiyun */ 4277*4882a593Smuzhiyun struct eth_rx_bd { 4278*4882a593Smuzhiyun __le32 addr_lo; 4279*4882a593Smuzhiyun __le32 addr_hi; 4280*4882a593Smuzhiyun }; 4281*4882a593Smuzhiyun 4282*4882a593Smuzhiyun 4283*4882a593Smuzhiyun /* 4284*4882a593Smuzhiyun * Eth Rx Cqe structure- general structure for ramrods 4285*4882a593Smuzhiyun */ 4286*4882a593Smuzhiyun struct common_ramrod_eth_rx_cqe { 4287*4882a593Smuzhiyun u8 ramrod_type; 4288*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_TYPE (0x3<<0) 4289*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_TYPE_SHIFT 0 4290*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_ERROR (0x1<<2) 4291*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_ERROR_SHIFT 2 4292*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_RESERVED0 (0x1F<<3) 4293*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_RESERVED0_SHIFT 3 4294*4882a593Smuzhiyun u8 conn_type; 4295*4882a593Smuzhiyun __le16 reserved1; 4296*4882a593Smuzhiyun __le32 conn_and_cmd_data; 4297*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_CID (0xFFFFFF<<0) 4298*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_CID_SHIFT 0 4299*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_CMD_ID (0xFF<<24) 4300*4882a593Smuzhiyun #define COMMON_RAMROD_ETH_RX_CQE_CMD_ID_SHIFT 24 4301*4882a593Smuzhiyun struct ramrod_data protocol_data; 4302*4882a593Smuzhiyun __le32 echo; 4303*4882a593Smuzhiyun __le32 reserved2[11]; 4304*4882a593Smuzhiyun }; 4305*4882a593Smuzhiyun 4306*4882a593Smuzhiyun /* 4307*4882a593Smuzhiyun * Rx Last CQE in page (in ETH) 4308*4882a593Smuzhiyun */ 4309*4882a593Smuzhiyun struct eth_rx_cqe_next_page { 4310*4882a593Smuzhiyun __le32 addr_lo; 4311*4882a593Smuzhiyun __le32 addr_hi; 4312*4882a593Smuzhiyun __le32 reserved[14]; 4313*4882a593Smuzhiyun }; 4314*4882a593Smuzhiyun 4315*4882a593Smuzhiyun /* 4316*4882a593Smuzhiyun * union for all eth rx cqe types (fix their sizes) 4317*4882a593Smuzhiyun */ 4318*4882a593Smuzhiyun union eth_rx_cqe { 4319*4882a593Smuzhiyun struct eth_fast_path_rx_cqe fast_path_cqe; 4320*4882a593Smuzhiyun struct common_ramrod_eth_rx_cqe ramrod_cqe; 4321*4882a593Smuzhiyun struct eth_rx_cqe_next_page next_page_cqe; 4322*4882a593Smuzhiyun struct eth_end_agg_rx_cqe end_agg_cqe; 4323*4882a593Smuzhiyun }; 4324*4882a593Smuzhiyun 4325*4882a593Smuzhiyun 4326*4882a593Smuzhiyun /* 4327*4882a593Smuzhiyun * Values for RX ETH CQE type field 4328*4882a593Smuzhiyun */ 4329*4882a593Smuzhiyun enum eth_rx_cqe_type { 4330*4882a593Smuzhiyun RX_ETH_CQE_TYPE_ETH_FASTPATH, 4331*4882a593Smuzhiyun RX_ETH_CQE_TYPE_ETH_RAMROD, 4332*4882a593Smuzhiyun RX_ETH_CQE_TYPE_ETH_START_AGG, 4333*4882a593Smuzhiyun RX_ETH_CQE_TYPE_ETH_STOP_AGG, 4334*4882a593Smuzhiyun MAX_ETH_RX_CQE_TYPE 4335*4882a593Smuzhiyun }; 4336*4882a593Smuzhiyun 4337*4882a593Smuzhiyun 4338*4882a593Smuzhiyun /* 4339*4882a593Smuzhiyun * Type of SGL/Raw field in ETH RX fast path CQE 4340*4882a593Smuzhiyun */ 4341*4882a593Smuzhiyun enum eth_rx_fp_sel { 4342*4882a593Smuzhiyun ETH_FP_CQE_REGULAR, 4343*4882a593Smuzhiyun ETH_FP_CQE_RAW, 4344*4882a593Smuzhiyun MAX_ETH_RX_FP_SEL 4345*4882a593Smuzhiyun }; 4346*4882a593Smuzhiyun 4347*4882a593Smuzhiyun 4348*4882a593Smuzhiyun /* 4349*4882a593Smuzhiyun * The eth Rx SGE Descriptor 4350*4882a593Smuzhiyun */ 4351*4882a593Smuzhiyun struct eth_rx_sge { 4352*4882a593Smuzhiyun __le32 addr_lo; 4353*4882a593Smuzhiyun __le32 addr_hi; 4354*4882a593Smuzhiyun }; 4355*4882a593Smuzhiyun 4356*4882a593Smuzhiyun 4357*4882a593Smuzhiyun /* 4358*4882a593Smuzhiyun * common data for all protocols 4359*4882a593Smuzhiyun */ 4360*4882a593Smuzhiyun struct spe_hdr { 4361*4882a593Smuzhiyun __le32 conn_and_cmd_data; 4362*4882a593Smuzhiyun #define SPE_HDR_CID (0xFFFFFF<<0) 4363*4882a593Smuzhiyun #define SPE_HDR_CID_SHIFT 0 4364*4882a593Smuzhiyun #define SPE_HDR_CMD_ID (0xFF<<24) 4365*4882a593Smuzhiyun #define SPE_HDR_CMD_ID_SHIFT 24 4366*4882a593Smuzhiyun __le16 type; 4367*4882a593Smuzhiyun #define SPE_HDR_CONN_TYPE (0xFF<<0) 4368*4882a593Smuzhiyun #define SPE_HDR_CONN_TYPE_SHIFT 0 4369*4882a593Smuzhiyun #define SPE_HDR_FUNCTION_ID (0xFF<<8) 4370*4882a593Smuzhiyun #define SPE_HDR_FUNCTION_ID_SHIFT 8 4371*4882a593Smuzhiyun __le16 reserved1; 4372*4882a593Smuzhiyun }; 4373*4882a593Smuzhiyun 4374*4882a593Smuzhiyun /* 4375*4882a593Smuzhiyun * specific data for ethernet slow path element 4376*4882a593Smuzhiyun */ 4377*4882a593Smuzhiyun union eth_specific_data { 4378*4882a593Smuzhiyun u8 protocol_data[8]; 4379*4882a593Smuzhiyun struct regpair client_update_ramrod_data; 4380*4882a593Smuzhiyun struct regpair client_init_ramrod_init_data; 4381*4882a593Smuzhiyun struct eth_halt_ramrod_data halt_ramrod_data; 4382*4882a593Smuzhiyun struct regpair update_data_addr; 4383*4882a593Smuzhiyun struct eth_common_ramrod_data common_ramrod_data; 4384*4882a593Smuzhiyun struct regpair classify_cfg_addr; 4385*4882a593Smuzhiyun struct regpair filter_cfg_addr; 4386*4882a593Smuzhiyun struct regpair mcast_cfg_addr; 4387*4882a593Smuzhiyun }; 4388*4882a593Smuzhiyun 4389*4882a593Smuzhiyun /* 4390*4882a593Smuzhiyun * Ethernet slow path element 4391*4882a593Smuzhiyun */ 4392*4882a593Smuzhiyun struct eth_spe { 4393*4882a593Smuzhiyun struct spe_hdr hdr; 4394*4882a593Smuzhiyun union eth_specific_data data; 4395*4882a593Smuzhiyun }; 4396*4882a593Smuzhiyun 4397*4882a593Smuzhiyun 4398*4882a593Smuzhiyun /* 4399*4882a593Smuzhiyun * Ethernet command ID for slow path elements 4400*4882a593Smuzhiyun */ 4401*4882a593Smuzhiyun enum eth_spqe_cmd_id { 4402*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_UNUSED, 4403*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_CLIENT_SETUP, 4404*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_HALT, 4405*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_FORWARD_SETUP, 4406*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_TX_QUEUE_SETUP, 4407*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_CLIENT_UPDATE, 4408*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_EMPTY, 4409*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_TERMINATE, 4410*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_TPA_UPDATE, 4411*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_CLASSIFICATION_RULES, 4412*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_FILTER_RULES, 4413*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_MULTICAST_RULES, 4414*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_RSS_UPDATE, 4415*4882a593Smuzhiyun RAMROD_CMD_ID_ETH_SET_MAC, 4416*4882a593Smuzhiyun MAX_ETH_SPQE_CMD_ID 4417*4882a593Smuzhiyun }; 4418*4882a593Smuzhiyun 4419*4882a593Smuzhiyun 4420*4882a593Smuzhiyun /* 4421*4882a593Smuzhiyun * eth tpa update command 4422*4882a593Smuzhiyun */ 4423*4882a593Smuzhiyun enum eth_tpa_update_command { 4424*4882a593Smuzhiyun TPA_UPDATE_NONE_COMMAND, 4425*4882a593Smuzhiyun TPA_UPDATE_ENABLE_COMMAND, 4426*4882a593Smuzhiyun TPA_UPDATE_DISABLE_COMMAND, 4427*4882a593Smuzhiyun MAX_ETH_TPA_UPDATE_COMMAND 4428*4882a593Smuzhiyun }; 4429*4882a593Smuzhiyun 4430*4882a593Smuzhiyun /* In case of LSO over IPv4 tunnel, whether to increment 4431*4882a593Smuzhiyun * IP ID on external IP header or internal IP header 4432*4882a593Smuzhiyun */ 4433*4882a593Smuzhiyun enum eth_tunnel_lso_inc_ip_id { 4434*4882a593Smuzhiyun EXT_HEADER, 4435*4882a593Smuzhiyun INT_HEADER, 4436*4882a593Smuzhiyun MAX_ETH_TUNNEL_LSO_INC_IP_ID 4437*4882a593Smuzhiyun }; 4438*4882a593Smuzhiyun 4439*4882a593Smuzhiyun /* In case tunnel exist and L4 checksum offload, 4440*4882a593Smuzhiyun * the pseudo checksum location, on packet or on BD. 4441*4882a593Smuzhiyun */ 4442*4882a593Smuzhiyun enum eth_tunnel_non_lso_csum_location { 4443*4882a593Smuzhiyun CSUM_ON_PKT, 4444*4882a593Smuzhiyun CSUM_ON_BD, 4445*4882a593Smuzhiyun MAX_ETH_TUNNEL_NON_LSO_CSUM_LOCATION 4446*4882a593Smuzhiyun }; 4447*4882a593Smuzhiyun 4448*4882a593Smuzhiyun enum eth_tunn_type { 4449*4882a593Smuzhiyun TUNN_TYPE_NONE, 4450*4882a593Smuzhiyun TUNN_TYPE_VXLAN, 4451*4882a593Smuzhiyun TUNN_TYPE_L2_GRE, 4452*4882a593Smuzhiyun TUNN_TYPE_IPV4_GRE, 4453*4882a593Smuzhiyun TUNN_TYPE_IPV6_GRE, 4454*4882a593Smuzhiyun TUNN_TYPE_L2_GENEVE, 4455*4882a593Smuzhiyun TUNN_TYPE_IPV4_GENEVE, 4456*4882a593Smuzhiyun TUNN_TYPE_IPV6_GENEVE, 4457*4882a593Smuzhiyun MAX_ETH_TUNN_TYPE 4458*4882a593Smuzhiyun }; 4459*4882a593Smuzhiyun 4460*4882a593Smuzhiyun /* 4461*4882a593Smuzhiyun * Tx regular BD structure 4462*4882a593Smuzhiyun */ 4463*4882a593Smuzhiyun struct eth_tx_bd { 4464*4882a593Smuzhiyun __le32 addr_lo; 4465*4882a593Smuzhiyun __le32 addr_hi; 4466*4882a593Smuzhiyun __le16 total_pkt_bytes; 4467*4882a593Smuzhiyun __le16 nbytes; 4468*4882a593Smuzhiyun u8 reserved[4]; 4469*4882a593Smuzhiyun }; 4470*4882a593Smuzhiyun 4471*4882a593Smuzhiyun 4472*4882a593Smuzhiyun /* 4473*4882a593Smuzhiyun * structure for easy accessibility to assembler 4474*4882a593Smuzhiyun */ 4475*4882a593Smuzhiyun struct eth_tx_bd_flags { 4476*4882a593Smuzhiyun u8 as_bitfield; 4477*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_IP_CSUM (0x1<<0) 4478*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_IP_CSUM_SHIFT 0 4479*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_L4_CSUM (0x1<<1) 4480*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_L4_CSUM_SHIFT 1 4481*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_VLAN_MODE (0x3<<2) 4482*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT 2 4483*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_START_BD (0x1<<4) 4484*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_START_BD_SHIFT 4 4485*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_IS_UDP (0x1<<5) 4486*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_IS_UDP_SHIFT 5 4487*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_SW_LSO (0x1<<6) 4488*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_SW_LSO_SHIFT 6 4489*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_IPV6 (0x1<<7) 4490*4882a593Smuzhiyun #define ETH_TX_BD_FLAGS_IPV6_SHIFT 7 4491*4882a593Smuzhiyun }; 4492*4882a593Smuzhiyun 4493*4882a593Smuzhiyun /* 4494*4882a593Smuzhiyun * The eth Tx Buffer Descriptor 4495*4882a593Smuzhiyun */ 4496*4882a593Smuzhiyun struct eth_tx_start_bd { 4497*4882a593Smuzhiyun __le32 addr_lo; 4498*4882a593Smuzhiyun __le32 addr_hi; 4499*4882a593Smuzhiyun __le16 nbd; 4500*4882a593Smuzhiyun __le16 nbytes; 4501*4882a593Smuzhiyun __le16 vlan_or_ethertype; 4502*4882a593Smuzhiyun struct eth_tx_bd_flags bd_flags; 4503*4882a593Smuzhiyun u8 general_data; 4504*4882a593Smuzhiyun #define ETH_TX_START_BD_HDR_NBDS (0x7<<0) 4505*4882a593Smuzhiyun #define ETH_TX_START_BD_HDR_NBDS_SHIFT 0 4506*4882a593Smuzhiyun #define ETH_TX_START_BD_NO_ADDED_TAGS (0x1<<3) 4507*4882a593Smuzhiyun #define ETH_TX_START_BD_NO_ADDED_TAGS_SHIFT 3 4508*4882a593Smuzhiyun #define ETH_TX_START_BD_FORCE_VLAN_MODE (0x1<<4) 4509*4882a593Smuzhiyun #define ETH_TX_START_BD_FORCE_VLAN_MODE_SHIFT 4 4510*4882a593Smuzhiyun #define ETH_TX_START_BD_PARSE_NBDS (0x3<<5) 4511*4882a593Smuzhiyun #define ETH_TX_START_BD_PARSE_NBDS_SHIFT 5 4512*4882a593Smuzhiyun #define ETH_TX_START_BD_TUNNEL_EXIST (0x1<<7) 4513*4882a593Smuzhiyun #define ETH_TX_START_BD_TUNNEL_EXIST_SHIFT 7 4514*4882a593Smuzhiyun }; 4515*4882a593Smuzhiyun 4516*4882a593Smuzhiyun /* 4517*4882a593Smuzhiyun * Tx parsing BD structure for ETH E1/E1h 4518*4882a593Smuzhiyun */ 4519*4882a593Smuzhiyun struct eth_tx_parse_bd_e1x { 4520*4882a593Smuzhiyun __le16 global_data; 4521*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_IP_HDR_START_OFFSET_W (0xF<<0) 4522*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_IP_HDR_START_OFFSET_W_SHIFT 0 4523*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_ETH_ADDR_TYPE (0x3<<4) 4524*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_ETH_ADDR_TYPE_SHIFT 4 4525*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN (0x1<<6) 4526*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN_SHIFT 6 4527*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_LLC_SNAP_EN (0x1<<7) 4528*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_LLC_SNAP_EN_SHIFT 7 4529*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_NS_FLG (0x1<<8) 4530*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_NS_FLG_SHIFT 8 4531*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_RESERVED0 (0x7F<<9) 4532*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_RESERVED0_SHIFT 9 4533*4882a593Smuzhiyun u8 tcp_flags; 4534*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_FIN_FLG (0x1<<0) 4535*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_FIN_FLG_SHIFT 0 4536*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_SYN_FLG (0x1<<1) 4537*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_SYN_FLG_SHIFT 1 4538*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_RST_FLG (0x1<<2) 4539*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_RST_FLG_SHIFT 2 4540*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_PSH_FLG (0x1<<3) 4541*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_PSH_FLG_SHIFT 3 4542*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_ACK_FLG (0x1<<4) 4543*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_ACK_FLG_SHIFT 4 4544*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_URG_FLG (0x1<<5) 4545*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_URG_FLG_SHIFT 5 4546*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_ECE_FLG (0x1<<6) 4547*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_ECE_FLG_SHIFT 6 4548*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_CWR_FLG (0x1<<7) 4549*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E1X_CWR_FLG_SHIFT 7 4550*4882a593Smuzhiyun u8 ip_hlen_w; 4551*4882a593Smuzhiyun __le16 total_hlen_w; 4552*4882a593Smuzhiyun __le16 tcp_pseudo_csum; 4553*4882a593Smuzhiyun __le16 lso_mss; 4554*4882a593Smuzhiyun __le16 ip_id; 4555*4882a593Smuzhiyun __le32 tcp_send_seq; 4556*4882a593Smuzhiyun }; 4557*4882a593Smuzhiyun 4558*4882a593Smuzhiyun /* 4559*4882a593Smuzhiyun * Tx parsing BD structure for ETH E2 4560*4882a593Smuzhiyun */ 4561*4882a593Smuzhiyun struct eth_tx_parse_bd_e2 { 4562*4882a593Smuzhiyun union eth_mac_addr_or_tunnel_data data; 4563*4882a593Smuzhiyun __le32 parsing_data; 4564*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W (0x7FF<<0) 4565*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT 0 4566*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW (0xF<<11) 4567*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT 11 4568*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_IPV6_WITH_EXT_HDR (0x1<<15) 4569*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_IPV6_WITH_EXT_HDR_SHIFT 15 4570*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_LSO_MSS (0x3FFF<<16) 4571*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_LSO_MSS_SHIFT 16 4572*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE (0x3<<30) 4573*4882a593Smuzhiyun #define ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE_SHIFT 30 4574*4882a593Smuzhiyun }; 4575*4882a593Smuzhiyun 4576*4882a593Smuzhiyun /* 4577*4882a593Smuzhiyun * Tx 2nd parsing BD structure for ETH packet 4578*4882a593Smuzhiyun */ 4579*4882a593Smuzhiyun struct eth_tx_parse_2nd_bd { 4580*4882a593Smuzhiyun __le16 global_data; 4581*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_IP_HDR_START_OUTER_W (0xF<<0) 4582*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_IP_HDR_START_OUTER_W_SHIFT 0 4583*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_RESERVED0 (0x1<<4) 4584*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_RESERVED0_SHIFT 4 4585*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_LLC_SNAP_EN (0x1<<5) 4586*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_LLC_SNAP_EN_SHIFT 5 4587*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_NS_FLG (0x1<<6) 4588*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_NS_FLG_SHIFT 6 4589*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_TUNNEL_UDP_EXIST (0x1<<7) 4590*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_TUNNEL_UDP_EXIST_SHIFT 7 4591*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_IP_HDR_LEN_OUTER_W (0x1F<<8) 4592*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_IP_HDR_LEN_OUTER_W_SHIFT 8 4593*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_RESERVED1 (0x7<<13) 4594*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_RESERVED1_SHIFT 13 4595*4882a593Smuzhiyun u8 bd_type; 4596*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_TYPE (0xF<<0) 4597*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_TYPE_SHIFT 0 4598*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_RESERVED2 (0xF<<4) 4599*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_RESERVED2_SHIFT 4 4600*4882a593Smuzhiyun u8 reserved3; 4601*4882a593Smuzhiyun u8 tcp_flags; 4602*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_FIN_FLG (0x1<<0) 4603*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_FIN_FLG_SHIFT 0 4604*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_SYN_FLG (0x1<<1) 4605*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_SYN_FLG_SHIFT 1 4606*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_RST_FLG (0x1<<2) 4607*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_RST_FLG_SHIFT 2 4608*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_PSH_FLG (0x1<<3) 4609*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_PSH_FLG_SHIFT 3 4610*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_ACK_FLG (0x1<<4) 4611*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_ACK_FLG_SHIFT 4 4612*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_URG_FLG (0x1<<5) 4613*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_URG_FLG_SHIFT 5 4614*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_ECE_FLG (0x1<<6) 4615*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_ECE_FLG_SHIFT 6 4616*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_CWR_FLG (0x1<<7) 4617*4882a593Smuzhiyun #define ETH_TX_PARSE_2ND_BD_CWR_FLG_SHIFT 7 4618*4882a593Smuzhiyun u8 reserved4; 4619*4882a593Smuzhiyun u8 tunnel_udp_hdr_start_w; 4620*4882a593Smuzhiyun u8 fw_ip_hdr_to_payload_w; 4621*4882a593Smuzhiyun __le16 fw_ip_csum_wo_len_flags_frag; 4622*4882a593Smuzhiyun __le16 hw_ip_id; 4623*4882a593Smuzhiyun __le32 tcp_send_seq; 4624*4882a593Smuzhiyun }; 4625*4882a593Smuzhiyun 4626*4882a593Smuzhiyun /* The last BD in the BD memory will hold a pointer to the next BD memory */ 4627*4882a593Smuzhiyun struct eth_tx_next_bd { 4628*4882a593Smuzhiyun __le32 addr_lo; 4629*4882a593Smuzhiyun __le32 addr_hi; 4630*4882a593Smuzhiyun u8 reserved[8]; 4631*4882a593Smuzhiyun }; 4632*4882a593Smuzhiyun 4633*4882a593Smuzhiyun /* 4634*4882a593Smuzhiyun * union for 4 Bd types 4635*4882a593Smuzhiyun */ 4636*4882a593Smuzhiyun union eth_tx_bd_types { 4637*4882a593Smuzhiyun struct eth_tx_start_bd start_bd; 4638*4882a593Smuzhiyun struct eth_tx_bd reg_bd; 4639*4882a593Smuzhiyun struct eth_tx_parse_bd_e1x parse_bd_e1x; 4640*4882a593Smuzhiyun struct eth_tx_parse_bd_e2 parse_bd_e2; 4641*4882a593Smuzhiyun struct eth_tx_parse_2nd_bd parse_2nd_bd; 4642*4882a593Smuzhiyun struct eth_tx_next_bd next_bd; 4643*4882a593Smuzhiyun }; 4644*4882a593Smuzhiyun 4645*4882a593Smuzhiyun /* 4646*4882a593Smuzhiyun * array of 13 bds as appears in the eth xstorm context 4647*4882a593Smuzhiyun */ 4648*4882a593Smuzhiyun struct eth_tx_bds_array { 4649*4882a593Smuzhiyun union eth_tx_bd_types bds[13]; 4650*4882a593Smuzhiyun }; 4651*4882a593Smuzhiyun 4652*4882a593Smuzhiyun 4653*4882a593Smuzhiyun /* 4654*4882a593Smuzhiyun * VLAN mode on TX BDs 4655*4882a593Smuzhiyun */ 4656*4882a593Smuzhiyun enum eth_tx_vlan_type { 4657*4882a593Smuzhiyun X_ETH_NO_VLAN, 4658*4882a593Smuzhiyun X_ETH_OUTBAND_VLAN, 4659*4882a593Smuzhiyun X_ETH_INBAND_VLAN, 4660*4882a593Smuzhiyun X_ETH_FW_ADDED_VLAN, 4661*4882a593Smuzhiyun MAX_ETH_TX_VLAN_TYPE 4662*4882a593Smuzhiyun }; 4663*4882a593Smuzhiyun 4664*4882a593Smuzhiyun 4665*4882a593Smuzhiyun /* 4666*4882a593Smuzhiyun * Ethernet VLAN filtering mode in E1x 4667*4882a593Smuzhiyun */ 4668*4882a593Smuzhiyun enum eth_vlan_filter_mode { 4669*4882a593Smuzhiyun ETH_VLAN_FILTER_ANY_VLAN, 4670*4882a593Smuzhiyun ETH_VLAN_FILTER_SPECIFIC_VLAN, 4671*4882a593Smuzhiyun ETH_VLAN_FILTER_CLASSIFY, 4672*4882a593Smuzhiyun MAX_ETH_VLAN_FILTER_MODE 4673*4882a593Smuzhiyun }; 4674*4882a593Smuzhiyun 4675*4882a593Smuzhiyun 4676*4882a593Smuzhiyun /* 4677*4882a593Smuzhiyun * MAC filtering configuration command header 4678*4882a593Smuzhiyun */ 4679*4882a593Smuzhiyun struct mac_configuration_hdr { 4680*4882a593Smuzhiyun u8 length; 4681*4882a593Smuzhiyun u8 offset; 4682*4882a593Smuzhiyun __le16 client_id; 4683*4882a593Smuzhiyun __le32 echo; 4684*4882a593Smuzhiyun }; 4685*4882a593Smuzhiyun 4686*4882a593Smuzhiyun /* 4687*4882a593Smuzhiyun * MAC address in list for ramrod 4688*4882a593Smuzhiyun */ 4689*4882a593Smuzhiyun struct mac_configuration_entry { 4690*4882a593Smuzhiyun __le16 lsb_mac_addr; 4691*4882a593Smuzhiyun __le16 middle_mac_addr; 4692*4882a593Smuzhiyun __le16 msb_mac_addr; 4693*4882a593Smuzhiyun __le16 vlan_id; 4694*4882a593Smuzhiyun u8 pf_id; 4695*4882a593Smuzhiyun u8 flags; 4696*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_ACTION_TYPE (0x1<<0) 4697*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_ACTION_TYPE_SHIFT 0 4698*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_RDMA_MAC (0x1<<1) 4699*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_RDMA_MAC_SHIFT 1 4700*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_VLAN_FILTERING_MODE (0x3<<2) 4701*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_VLAN_FILTERING_MODE_SHIFT 2 4702*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_OVERRIDE_VLAN_REMOVAL (0x1<<4) 4703*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_OVERRIDE_VLAN_REMOVAL_SHIFT 4 4704*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_BROADCAST (0x1<<5) 4705*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_BROADCAST_SHIFT 5 4706*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_RESERVED1 (0x3<<6) 4707*4882a593Smuzhiyun #define MAC_CONFIGURATION_ENTRY_RESERVED1_SHIFT 6 4708*4882a593Smuzhiyun __le16 reserved0; 4709*4882a593Smuzhiyun __le32 clients_bit_vector; 4710*4882a593Smuzhiyun }; 4711*4882a593Smuzhiyun 4712*4882a593Smuzhiyun /* 4713*4882a593Smuzhiyun * MAC filtering configuration command 4714*4882a593Smuzhiyun */ 4715*4882a593Smuzhiyun struct mac_configuration_cmd { 4716*4882a593Smuzhiyun struct mac_configuration_hdr hdr; 4717*4882a593Smuzhiyun struct mac_configuration_entry config_table[64]; 4718*4882a593Smuzhiyun }; 4719*4882a593Smuzhiyun 4720*4882a593Smuzhiyun 4721*4882a593Smuzhiyun /* 4722*4882a593Smuzhiyun * Set-MAC command type (in E1x) 4723*4882a593Smuzhiyun */ 4724*4882a593Smuzhiyun enum set_mac_action_type { 4725*4882a593Smuzhiyun T_ETH_MAC_COMMAND_INVALIDATE, 4726*4882a593Smuzhiyun T_ETH_MAC_COMMAND_SET, 4727*4882a593Smuzhiyun MAX_SET_MAC_ACTION_TYPE 4728*4882a593Smuzhiyun }; 4729*4882a593Smuzhiyun 4730*4882a593Smuzhiyun 4731*4882a593Smuzhiyun /* 4732*4882a593Smuzhiyun * Ethernet TPA Modes 4733*4882a593Smuzhiyun */ 4734*4882a593Smuzhiyun enum tpa_mode { 4735*4882a593Smuzhiyun TPA_LRO, 4736*4882a593Smuzhiyun TPA_GRO, 4737*4882a593Smuzhiyun MAX_TPA_MODE}; 4738*4882a593Smuzhiyun 4739*4882a593Smuzhiyun 4740*4882a593Smuzhiyun /* 4741*4882a593Smuzhiyun * tpa update ramrod data 4742*4882a593Smuzhiyun */ 4743*4882a593Smuzhiyun struct tpa_update_ramrod_data { 4744*4882a593Smuzhiyun u8 update_ipv4; 4745*4882a593Smuzhiyun u8 update_ipv6; 4746*4882a593Smuzhiyun u8 client_id; 4747*4882a593Smuzhiyun u8 max_tpa_queues; 4748*4882a593Smuzhiyun u8 max_sges_for_packet; 4749*4882a593Smuzhiyun u8 complete_on_both_clients; 4750*4882a593Smuzhiyun u8 dont_verify_rings_pause_thr_flg; 4751*4882a593Smuzhiyun u8 tpa_mode; 4752*4882a593Smuzhiyun __le16 sge_buff_size; 4753*4882a593Smuzhiyun __le16 max_agg_size; 4754*4882a593Smuzhiyun __le32 sge_page_base_lo; 4755*4882a593Smuzhiyun __le32 sge_page_base_hi; 4756*4882a593Smuzhiyun __le16 sge_pause_thr_low; 4757*4882a593Smuzhiyun __le16 sge_pause_thr_high; 4758*4882a593Smuzhiyun u8 tpa_over_vlan_disable; 4759*4882a593Smuzhiyun u8 reserved[7]; 4760*4882a593Smuzhiyun }; 4761*4882a593Smuzhiyun 4762*4882a593Smuzhiyun 4763*4882a593Smuzhiyun /* 4764*4882a593Smuzhiyun * approximate-match multicast filtering for E1H per function in Tstorm 4765*4882a593Smuzhiyun */ 4766*4882a593Smuzhiyun struct tstorm_eth_approximate_match_multicast_filtering { 4767*4882a593Smuzhiyun u32 mcast_add_hash_bit_array[8]; 4768*4882a593Smuzhiyun }; 4769*4882a593Smuzhiyun 4770*4882a593Smuzhiyun 4771*4882a593Smuzhiyun /* 4772*4882a593Smuzhiyun * Common configuration parameters per function in Tstorm 4773*4882a593Smuzhiyun */ 4774*4882a593Smuzhiyun struct tstorm_eth_function_common_config { 4775*4882a593Smuzhiyun __le16 config_flags; 4776*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY (0x1<<0) 4777*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY_SHIFT 0 4778*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY (0x1<<1) 4779*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY_SHIFT 1 4780*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY (0x1<<2) 4781*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY_SHIFT 2 4782*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY (0x1<<3) 4783*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY_SHIFT 3 4784*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE (0x7<<4) 4785*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE_SHIFT 4 4786*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_VLAN_FILTERING_ENABLE (0x1<<7) 4787*4882a593Smuzhiyun #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_VLAN_FILTERING_ENABLE_SHIFT 7 4788*4882a593Smuzhiyun #define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0 (0xFF<<8) 4789*4882a593Smuzhiyun #define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0_SHIFT 8 4790*4882a593Smuzhiyun u8 rss_result_mask; 4791*4882a593Smuzhiyun u8 reserved1; 4792*4882a593Smuzhiyun __le16 vlan_id[2]; 4793*4882a593Smuzhiyun }; 4794*4882a593Smuzhiyun 4795*4882a593Smuzhiyun 4796*4882a593Smuzhiyun /* 4797*4882a593Smuzhiyun * MAC filtering configuration parameters per port in Tstorm 4798*4882a593Smuzhiyun */ 4799*4882a593Smuzhiyun struct tstorm_eth_mac_filter_config { 4800*4882a593Smuzhiyun u32 ucast_drop_all; 4801*4882a593Smuzhiyun u32 ucast_accept_all; 4802*4882a593Smuzhiyun u32 mcast_drop_all; 4803*4882a593Smuzhiyun u32 mcast_accept_all; 4804*4882a593Smuzhiyun u32 bcast_accept_all; 4805*4882a593Smuzhiyun u32 vlan_filter[2]; 4806*4882a593Smuzhiyun u32 unmatched_unicast; 4807*4882a593Smuzhiyun }; 4808*4882a593Smuzhiyun 4809*4882a593Smuzhiyun 4810*4882a593Smuzhiyun /* 4811*4882a593Smuzhiyun * tx only queue init ramrod data 4812*4882a593Smuzhiyun */ 4813*4882a593Smuzhiyun struct tx_queue_init_ramrod_data { 4814*4882a593Smuzhiyun struct client_init_general_data general; 4815*4882a593Smuzhiyun struct client_init_tx_data tx; 4816*4882a593Smuzhiyun }; 4817*4882a593Smuzhiyun 4818*4882a593Smuzhiyun 4819*4882a593Smuzhiyun /* 4820*4882a593Smuzhiyun * Three RX producers for ETH 4821*4882a593Smuzhiyun */ 4822*4882a593Smuzhiyun struct ustorm_eth_rx_producers { 4823*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 4824*4882a593Smuzhiyun u16 bd_prod; 4825*4882a593Smuzhiyun u16 cqe_prod; 4826*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 4827*4882a593Smuzhiyun u16 cqe_prod; 4828*4882a593Smuzhiyun u16 bd_prod; 4829*4882a593Smuzhiyun #endif 4830*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 4831*4882a593Smuzhiyun u16 reserved; 4832*4882a593Smuzhiyun u16 sge_prod; 4833*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 4834*4882a593Smuzhiyun u16 sge_prod; 4835*4882a593Smuzhiyun u16 reserved; 4836*4882a593Smuzhiyun #endif 4837*4882a593Smuzhiyun }; 4838*4882a593Smuzhiyun 4839*4882a593Smuzhiyun 4840*4882a593Smuzhiyun /* 4841*4882a593Smuzhiyun * FCoE RX statistics parameters section#0 4842*4882a593Smuzhiyun */ 4843*4882a593Smuzhiyun struct fcoe_rx_stat_params_section0 { 4844*4882a593Smuzhiyun __le32 fcoe_rx_pkt_cnt; 4845*4882a593Smuzhiyun __le32 fcoe_rx_byte_cnt; 4846*4882a593Smuzhiyun }; 4847*4882a593Smuzhiyun 4848*4882a593Smuzhiyun 4849*4882a593Smuzhiyun /* 4850*4882a593Smuzhiyun * FCoE RX statistics parameters section#1 4851*4882a593Smuzhiyun */ 4852*4882a593Smuzhiyun struct fcoe_rx_stat_params_section1 { 4853*4882a593Smuzhiyun __le32 fcoe_ver_cnt; 4854*4882a593Smuzhiyun __le32 fcoe_rx_drop_pkt_cnt; 4855*4882a593Smuzhiyun }; 4856*4882a593Smuzhiyun 4857*4882a593Smuzhiyun 4858*4882a593Smuzhiyun /* 4859*4882a593Smuzhiyun * FCoE RX statistics parameters section#2 4860*4882a593Smuzhiyun */ 4861*4882a593Smuzhiyun struct fcoe_rx_stat_params_section2 { 4862*4882a593Smuzhiyun __le32 fc_crc_cnt; 4863*4882a593Smuzhiyun __le32 eofa_del_cnt; 4864*4882a593Smuzhiyun __le32 miss_frame_cnt; 4865*4882a593Smuzhiyun __le32 seq_timeout_cnt; 4866*4882a593Smuzhiyun __le32 drop_seq_cnt; 4867*4882a593Smuzhiyun __le32 fcoe_rx_drop_pkt_cnt; 4868*4882a593Smuzhiyun __le32 fcp_rx_pkt_cnt; 4869*4882a593Smuzhiyun __le32 reserved0; 4870*4882a593Smuzhiyun }; 4871*4882a593Smuzhiyun 4872*4882a593Smuzhiyun 4873*4882a593Smuzhiyun /* 4874*4882a593Smuzhiyun * FCoE TX statistics parameters 4875*4882a593Smuzhiyun */ 4876*4882a593Smuzhiyun struct fcoe_tx_stat_params { 4877*4882a593Smuzhiyun __le32 fcoe_tx_pkt_cnt; 4878*4882a593Smuzhiyun __le32 fcoe_tx_byte_cnt; 4879*4882a593Smuzhiyun __le32 fcp_tx_pkt_cnt; 4880*4882a593Smuzhiyun __le32 reserved0; 4881*4882a593Smuzhiyun }; 4882*4882a593Smuzhiyun 4883*4882a593Smuzhiyun /* 4884*4882a593Smuzhiyun * FCoE statistics parameters 4885*4882a593Smuzhiyun */ 4886*4882a593Smuzhiyun struct fcoe_statistics_params { 4887*4882a593Smuzhiyun struct fcoe_tx_stat_params tx_stat; 4888*4882a593Smuzhiyun struct fcoe_rx_stat_params_section0 rx_stat0; 4889*4882a593Smuzhiyun struct fcoe_rx_stat_params_section1 rx_stat1; 4890*4882a593Smuzhiyun struct fcoe_rx_stat_params_section2 rx_stat2; 4891*4882a593Smuzhiyun }; 4892*4882a593Smuzhiyun 4893*4882a593Smuzhiyun 4894*4882a593Smuzhiyun /* 4895*4882a593Smuzhiyun * The data afex vif list ramrod need 4896*4882a593Smuzhiyun */ 4897*4882a593Smuzhiyun struct afex_vif_list_ramrod_data { 4898*4882a593Smuzhiyun u8 afex_vif_list_command; 4899*4882a593Smuzhiyun u8 func_bit_map; 4900*4882a593Smuzhiyun __le16 vif_list_index; 4901*4882a593Smuzhiyun u8 func_to_clear; 4902*4882a593Smuzhiyun u8 echo; 4903*4882a593Smuzhiyun __le16 reserved1; 4904*4882a593Smuzhiyun }; 4905*4882a593Smuzhiyun 4906*4882a593Smuzhiyun struct c2s_pri_trans_table_entry { 4907*4882a593Smuzhiyun u8 val[MAX_VLAN_PRIORITIES]; 4908*4882a593Smuzhiyun }; 4909*4882a593Smuzhiyun 4910*4882a593Smuzhiyun /* 4911*4882a593Smuzhiyun * cfc delete event data 4912*4882a593Smuzhiyun */ 4913*4882a593Smuzhiyun struct cfc_del_event_data { 4914*4882a593Smuzhiyun __le32 cid; 4915*4882a593Smuzhiyun __le32 reserved0; 4916*4882a593Smuzhiyun __le32 reserved1; 4917*4882a593Smuzhiyun }; 4918*4882a593Smuzhiyun 4919*4882a593Smuzhiyun 4920*4882a593Smuzhiyun /* 4921*4882a593Smuzhiyun * per-port SAFC demo variables 4922*4882a593Smuzhiyun */ 4923*4882a593Smuzhiyun struct cmng_flags_per_port { 4924*4882a593Smuzhiyun u32 cmng_enables; 4925*4882a593Smuzhiyun #define CMNG_FLAGS_PER_PORT_FAIRNESS_VN (0x1<<0) 4926*4882a593Smuzhiyun #define CMNG_FLAGS_PER_PORT_FAIRNESS_VN_SHIFT 0 4927*4882a593Smuzhiyun #define CMNG_FLAGS_PER_PORT_RATE_SHAPING_VN (0x1<<1) 4928*4882a593Smuzhiyun #define CMNG_FLAGS_PER_PORT_RATE_SHAPING_VN_SHIFT 1 4929*4882a593Smuzhiyun #define CMNG_FLAGS_PER_PORT_FAIRNESS_COS (0x1<<2) 4930*4882a593Smuzhiyun #define CMNG_FLAGS_PER_PORT_FAIRNESS_COS_SHIFT 2 4931*4882a593Smuzhiyun #define CMNG_FLAGS_PER_PORT_FAIRNESS_COS_MODE (0x1<<3) 4932*4882a593Smuzhiyun #define CMNG_FLAGS_PER_PORT_FAIRNESS_COS_MODE_SHIFT 3 4933*4882a593Smuzhiyun #define __CMNG_FLAGS_PER_PORT_RESERVED0 (0xFFFFFFF<<4) 4934*4882a593Smuzhiyun #define __CMNG_FLAGS_PER_PORT_RESERVED0_SHIFT 4 4935*4882a593Smuzhiyun u32 __reserved1; 4936*4882a593Smuzhiyun }; 4937*4882a593Smuzhiyun 4938*4882a593Smuzhiyun 4939*4882a593Smuzhiyun /* 4940*4882a593Smuzhiyun * per-port rate shaping variables 4941*4882a593Smuzhiyun */ 4942*4882a593Smuzhiyun struct rate_shaping_vars_per_port { 4943*4882a593Smuzhiyun u32 rs_periodic_timeout; 4944*4882a593Smuzhiyun u32 rs_threshold; 4945*4882a593Smuzhiyun }; 4946*4882a593Smuzhiyun 4947*4882a593Smuzhiyun /* 4948*4882a593Smuzhiyun * per-port fairness variables 4949*4882a593Smuzhiyun */ 4950*4882a593Smuzhiyun struct fairness_vars_per_port { 4951*4882a593Smuzhiyun u32 upper_bound; 4952*4882a593Smuzhiyun u32 fair_threshold; 4953*4882a593Smuzhiyun u32 fairness_timeout; 4954*4882a593Smuzhiyun u32 size_thr; 4955*4882a593Smuzhiyun }; 4956*4882a593Smuzhiyun 4957*4882a593Smuzhiyun /* 4958*4882a593Smuzhiyun * per-port SAFC variables 4959*4882a593Smuzhiyun */ 4960*4882a593Smuzhiyun struct safc_struct_per_port { 4961*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 4962*4882a593Smuzhiyun u16 __reserved1; 4963*4882a593Smuzhiyun u8 __reserved0; 4964*4882a593Smuzhiyun u8 safc_timeout_usec; 4965*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 4966*4882a593Smuzhiyun u8 safc_timeout_usec; 4967*4882a593Smuzhiyun u8 __reserved0; 4968*4882a593Smuzhiyun u16 __reserved1; 4969*4882a593Smuzhiyun #endif 4970*4882a593Smuzhiyun u8 cos_to_traffic_types[MAX_COS_NUMBER]; 4971*4882a593Smuzhiyun u16 cos_to_pause_mask[NUM_OF_SAFC_BITS]; 4972*4882a593Smuzhiyun }; 4973*4882a593Smuzhiyun 4974*4882a593Smuzhiyun /* 4975*4882a593Smuzhiyun * Per-port congestion management variables 4976*4882a593Smuzhiyun */ 4977*4882a593Smuzhiyun struct cmng_struct_per_port { 4978*4882a593Smuzhiyun struct rate_shaping_vars_per_port rs_vars; 4979*4882a593Smuzhiyun struct fairness_vars_per_port fair_vars; 4980*4882a593Smuzhiyun struct safc_struct_per_port safc_vars; 4981*4882a593Smuzhiyun struct cmng_flags_per_port flags; 4982*4882a593Smuzhiyun }; 4983*4882a593Smuzhiyun 4984*4882a593Smuzhiyun /* 4985*4882a593Smuzhiyun * a single rate shaping counter. can be used as protocol or vnic counter 4986*4882a593Smuzhiyun */ 4987*4882a593Smuzhiyun struct rate_shaping_counter { 4988*4882a593Smuzhiyun u32 quota; 4989*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 4990*4882a593Smuzhiyun u16 __reserved0; 4991*4882a593Smuzhiyun u16 rate; 4992*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 4993*4882a593Smuzhiyun u16 rate; 4994*4882a593Smuzhiyun u16 __reserved0; 4995*4882a593Smuzhiyun #endif 4996*4882a593Smuzhiyun }; 4997*4882a593Smuzhiyun 4998*4882a593Smuzhiyun /* 4999*4882a593Smuzhiyun * per-vnic rate shaping variables 5000*4882a593Smuzhiyun */ 5001*4882a593Smuzhiyun struct rate_shaping_vars_per_vn { 5002*4882a593Smuzhiyun struct rate_shaping_counter vn_counter; 5003*4882a593Smuzhiyun }; 5004*4882a593Smuzhiyun 5005*4882a593Smuzhiyun /* 5006*4882a593Smuzhiyun * per-vnic fairness variables 5007*4882a593Smuzhiyun */ 5008*4882a593Smuzhiyun struct fairness_vars_per_vn { 5009*4882a593Smuzhiyun u32 cos_credit_delta[MAX_COS_NUMBER]; 5010*4882a593Smuzhiyun u32 vn_credit_delta; 5011*4882a593Smuzhiyun u32 __reserved0; 5012*4882a593Smuzhiyun }; 5013*4882a593Smuzhiyun 5014*4882a593Smuzhiyun /* 5015*4882a593Smuzhiyun * cmng port init state 5016*4882a593Smuzhiyun */ 5017*4882a593Smuzhiyun struct cmng_vnic { 5018*4882a593Smuzhiyun struct rate_shaping_vars_per_vn vnic_max_rate[4]; 5019*4882a593Smuzhiyun struct fairness_vars_per_vn vnic_min_rate[4]; 5020*4882a593Smuzhiyun }; 5021*4882a593Smuzhiyun 5022*4882a593Smuzhiyun /* 5023*4882a593Smuzhiyun * cmng port init state 5024*4882a593Smuzhiyun */ 5025*4882a593Smuzhiyun struct cmng_init { 5026*4882a593Smuzhiyun struct cmng_struct_per_port port; 5027*4882a593Smuzhiyun struct cmng_vnic vnic; 5028*4882a593Smuzhiyun }; 5029*4882a593Smuzhiyun 5030*4882a593Smuzhiyun 5031*4882a593Smuzhiyun /* 5032*4882a593Smuzhiyun * driver parameters for congestion management init, all rates are in Mbps 5033*4882a593Smuzhiyun */ 5034*4882a593Smuzhiyun struct cmng_init_input { 5035*4882a593Smuzhiyun u32 port_rate; 5036*4882a593Smuzhiyun u16 vnic_min_rate[4]; 5037*4882a593Smuzhiyun u16 vnic_max_rate[4]; 5038*4882a593Smuzhiyun u16 cos_min_rate[MAX_COS_NUMBER]; 5039*4882a593Smuzhiyun u16 cos_to_pause_mask[MAX_COS_NUMBER]; 5040*4882a593Smuzhiyun struct cmng_flags_per_port flags; 5041*4882a593Smuzhiyun }; 5042*4882a593Smuzhiyun 5043*4882a593Smuzhiyun 5044*4882a593Smuzhiyun /* 5045*4882a593Smuzhiyun * Protocol-common command ID for slow path elements 5046*4882a593Smuzhiyun */ 5047*4882a593Smuzhiyun enum common_spqe_cmd_id { 5048*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_UNUSED, 5049*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_FUNCTION_START, 5050*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_FUNCTION_STOP, 5051*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_FUNCTION_UPDATE, 5052*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_CFC_DEL, 5053*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_CFC_DEL_WB, 5054*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_STAT_QUERY, 5055*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_STOP_TRAFFIC, 5056*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_START_TRAFFIC, 5057*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_AFEX_VIF_LISTS, 5058*4882a593Smuzhiyun RAMROD_CMD_ID_COMMON_SET_TIMESYNC, 5059*4882a593Smuzhiyun MAX_COMMON_SPQE_CMD_ID 5060*4882a593Smuzhiyun }; 5061*4882a593Smuzhiyun 5062*4882a593Smuzhiyun /* 5063*4882a593Smuzhiyun * Per-protocol connection types 5064*4882a593Smuzhiyun */ 5065*4882a593Smuzhiyun enum connection_type { 5066*4882a593Smuzhiyun ETH_CONNECTION_TYPE, 5067*4882a593Smuzhiyun TOE_CONNECTION_TYPE, 5068*4882a593Smuzhiyun RDMA_CONNECTION_TYPE, 5069*4882a593Smuzhiyun ISCSI_CONNECTION_TYPE, 5070*4882a593Smuzhiyun FCOE_CONNECTION_TYPE, 5071*4882a593Smuzhiyun RESERVED_CONNECTION_TYPE_0, 5072*4882a593Smuzhiyun RESERVED_CONNECTION_TYPE_1, 5073*4882a593Smuzhiyun RESERVED_CONNECTION_TYPE_2, 5074*4882a593Smuzhiyun NONE_CONNECTION_TYPE, 5075*4882a593Smuzhiyun MAX_CONNECTION_TYPE 5076*4882a593Smuzhiyun }; 5077*4882a593Smuzhiyun 5078*4882a593Smuzhiyun 5079*4882a593Smuzhiyun /* 5080*4882a593Smuzhiyun * Cos modes 5081*4882a593Smuzhiyun */ 5082*4882a593Smuzhiyun enum cos_mode { 5083*4882a593Smuzhiyun OVERRIDE_COS, 5084*4882a593Smuzhiyun STATIC_COS, 5085*4882a593Smuzhiyun FW_WRR, 5086*4882a593Smuzhiyun MAX_COS_MODE 5087*4882a593Smuzhiyun }; 5088*4882a593Smuzhiyun 5089*4882a593Smuzhiyun 5090*4882a593Smuzhiyun /* 5091*4882a593Smuzhiyun * Dynamic HC counters set by the driver 5092*4882a593Smuzhiyun */ 5093*4882a593Smuzhiyun struct hc_dynamic_drv_counter { 5094*4882a593Smuzhiyun u32 val[HC_SB_MAX_DYNAMIC_INDICES]; 5095*4882a593Smuzhiyun }; 5096*4882a593Smuzhiyun 5097*4882a593Smuzhiyun /* 5098*4882a593Smuzhiyun * zone A per-queue data 5099*4882a593Smuzhiyun */ 5100*4882a593Smuzhiyun struct cstorm_queue_zone_data { 5101*4882a593Smuzhiyun struct hc_dynamic_drv_counter hc_dyn_drv_cnt; 5102*4882a593Smuzhiyun struct regpair reserved[2]; 5103*4882a593Smuzhiyun }; 5104*4882a593Smuzhiyun 5105*4882a593Smuzhiyun 5106*4882a593Smuzhiyun /* 5107*4882a593Smuzhiyun * Vf-PF channel data in cstorm ram (non-triggered zone) 5108*4882a593Smuzhiyun */ 5109*4882a593Smuzhiyun struct vf_pf_channel_zone_data { 5110*4882a593Smuzhiyun u32 msg_addr_lo; 5111*4882a593Smuzhiyun u32 msg_addr_hi; 5112*4882a593Smuzhiyun }; 5113*4882a593Smuzhiyun 5114*4882a593Smuzhiyun /* 5115*4882a593Smuzhiyun * zone for VF non-triggered data 5116*4882a593Smuzhiyun */ 5117*4882a593Smuzhiyun struct non_trigger_vf_zone { 5118*4882a593Smuzhiyun struct vf_pf_channel_zone_data vf_pf_channel; 5119*4882a593Smuzhiyun }; 5120*4882a593Smuzhiyun 5121*4882a593Smuzhiyun /* 5122*4882a593Smuzhiyun * Vf-PF channel trigger zone in cstorm ram 5123*4882a593Smuzhiyun */ 5124*4882a593Smuzhiyun struct vf_pf_channel_zone_trigger { 5125*4882a593Smuzhiyun u8 addr_valid; 5126*4882a593Smuzhiyun }; 5127*4882a593Smuzhiyun 5128*4882a593Smuzhiyun /* 5129*4882a593Smuzhiyun * zone that triggers the in-bound interrupt 5130*4882a593Smuzhiyun */ 5131*4882a593Smuzhiyun struct trigger_vf_zone { 5132*4882a593Smuzhiyun struct vf_pf_channel_zone_trigger vf_pf_channel; 5133*4882a593Smuzhiyun u8 reserved0; 5134*4882a593Smuzhiyun u16 reserved1; 5135*4882a593Smuzhiyun u32 reserved2; 5136*4882a593Smuzhiyun }; 5137*4882a593Smuzhiyun 5138*4882a593Smuzhiyun /* 5139*4882a593Smuzhiyun * zone B per-VF data 5140*4882a593Smuzhiyun */ 5141*4882a593Smuzhiyun struct cstorm_vf_zone_data { 5142*4882a593Smuzhiyun struct non_trigger_vf_zone non_trigger; 5143*4882a593Smuzhiyun struct trigger_vf_zone trigger; 5144*4882a593Smuzhiyun }; 5145*4882a593Smuzhiyun 5146*4882a593Smuzhiyun 5147*4882a593Smuzhiyun /* 5148*4882a593Smuzhiyun * Dynamic host coalescing init parameters, per state machine 5149*4882a593Smuzhiyun */ 5150*4882a593Smuzhiyun struct dynamic_hc_sm_config { 5151*4882a593Smuzhiyun u32 threshold[3]; 5152*4882a593Smuzhiyun u8 shift_per_protocol[HC_SB_MAX_DYNAMIC_INDICES]; 5153*4882a593Smuzhiyun u8 hc_timeout0[HC_SB_MAX_DYNAMIC_INDICES]; 5154*4882a593Smuzhiyun u8 hc_timeout1[HC_SB_MAX_DYNAMIC_INDICES]; 5155*4882a593Smuzhiyun u8 hc_timeout2[HC_SB_MAX_DYNAMIC_INDICES]; 5156*4882a593Smuzhiyun u8 hc_timeout3[HC_SB_MAX_DYNAMIC_INDICES]; 5157*4882a593Smuzhiyun }; 5158*4882a593Smuzhiyun 5159*4882a593Smuzhiyun /* 5160*4882a593Smuzhiyun * Dynamic host coalescing init parameters 5161*4882a593Smuzhiyun */ 5162*4882a593Smuzhiyun struct dynamic_hc_config { 5163*4882a593Smuzhiyun struct dynamic_hc_sm_config sm_config[HC_SB_MAX_SM]; 5164*4882a593Smuzhiyun }; 5165*4882a593Smuzhiyun 5166*4882a593Smuzhiyun 5167*4882a593Smuzhiyun struct e2_integ_data { 5168*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5169*4882a593Smuzhiyun u8 flags; 5170*4882a593Smuzhiyun #define E2_INTEG_DATA_TESTING_EN (0x1<<0) 5171*4882a593Smuzhiyun #define E2_INTEG_DATA_TESTING_EN_SHIFT 0 5172*4882a593Smuzhiyun #define E2_INTEG_DATA_LB_TX (0x1<<1) 5173*4882a593Smuzhiyun #define E2_INTEG_DATA_LB_TX_SHIFT 1 5174*4882a593Smuzhiyun #define E2_INTEG_DATA_COS_TX (0x1<<2) 5175*4882a593Smuzhiyun #define E2_INTEG_DATA_COS_TX_SHIFT 2 5176*4882a593Smuzhiyun #define E2_INTEG_DATA_OPPORTUNISTICQM (0x1<<3) 5177*4882a593Smuzhiyun #define E2_INTEG_DATA_OPPORTUNISTICQM_SHIFT 3 5178*4882a593Smuzhiyun #define E2_INTEG_DATA_DPMTESTRELEASEDQ (0x1<<4) 5179*4882a593Smuzhiyun #define E2_INTEG_DATA_DPMTESTRELEASEDQ_SHIFT 4 5180*4882a593Smuzhiyun #define E2_INTEG_DATA_RESERVED (0x7<<5) 5181*4882a593Smuzhiyun #define E2_INTEG_DATA_RESERVED_SHIFT 5 5182*4882a593Smuzhiyun u8 cos; 5183*4882a593Smuzhiyun u8 voq; 5184*4882a593Smuzhiyun u8 pbf_queue; 5185*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5186*4882a593Smuzhiyun u8 pbf_queue; 5187*4882a593Smuzhiyun u8 voq; 5188*4882a593Smuzhiyun u8 cos; 5189*4882a593Smuzhiyun u8 flags; 5190*4882a593Smuzhiyun #define E2_INTEG_DATA_TESTING_EN (0x1<<0) 5191*4882a593Smuzhiyun #define E2_INTEG_DATA_TESTING_EN_SHIFT 0 5192*4882a593Smuzhiyun #define E2_INTEG_DATA_LB_TX (0x1<<1) 5193*4882a593Smuzhiyun #define E2_INTEG_DATA_LB_TX_SHIFT 1 5194*4882a593Smuzhiyun #define E2_INTEG_DATA_COS_TX (0x1<<2) 5195*4882a593Smuzhiyun #define E2_INTEG_DATA_COS_TX_SHIFT 2 5196*4882a593Smuzhiyun #define E2_INTEG_DATA_OPPORTUNISTICQM (0x1<<3) 5197*4882a593Smuzhiyun #define E2_INTEG_DATA_OPPORTUNISTICQM_SHIFT 3 5198*4882a593Smuzhiyun #define E2_INTEG_DATA_DPMTESTRELEASEDQ (0x1<<4) 5199*4882a593Smuzhiyun #define E2_INTEG_DATA_DPMTESTRELEASEDQ_SHIFT 4 5200*4882a593Smuzhiyun #define E2_INTEG_DATA_RESERVED (0x7<<5) 5201*4882a593Smuzhiyun #define E2_INTEG_DATA_RESERVED_SHIFT 5 5202*4882a593Smuzhiyun #endif 5203*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5204*4882a593Smuzhiyun u16 reserved3; 5205*4882a593Smuzhiyun u8 reserved2; 5206*4882a593Smuzhiyun u8 ramEn; 5207*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5208*4882a593Smuzhiyun u8 ramEn; 5209*4882a593Smuzhiyun u8 reserved2; 5210*4882a593Smuzhiyun u16 reserved3; 5211*4882a593Smuzhiyun #endif 5212*4882a593Smuzhiyun }; 5213*4882a593Smuzhiyun 5214*4882a593Smuzhiyun 5215*4882a593Smuzhiyun /* 5216*4882a593Smuzhiyun * set mac event data 5217*4882a593Smuzhiyun */ 5218*4882a593Smuzhiyun struct eth_event_data { 5219*4882a593Smuzhiyun __le32 echo; 5220*4882a593Smuzhiyun __le32 reserved0; 5221*4882a593Smuzhiyun __le32 reserved1; 5222*4882a593Smuzhiyun }; 5223*4882a593Smuzhiyun 5224*4882a593Smuzhiyun 5225*4882a593Smuzhiyun /* 5226*4882a593Smuzhiyun * pf-vf event data 5227*4882a593Smuzhiyun */ 5228*4882a593Smuzhiyun struct vf_pf_event_data { 5229*4882a593Smuzhiyun u8 vf_id; 5230*4882a593Smuzhiyun u8 reserved0; 5231*4882a593Smuzhiyun __le16 reserved1; 5232*4882a593Smuzhiyun __le32 msg_addr_lo; 5233*4882a593Smuzhiyun __le32 msg_addr_hi; 5234*4882a593Smuzhiyun }; 5235*4882a593Smuzhiyun 5236*4882a593Smuzhiyun /* 5237*4882a593Smuzhiyun * VF FLR event data 5238*4882a593Smuzhiyun */ 5239*4882a593Smuzhiyun struct vf_flr_event_data { 5240*4882a593Smuzhiyun u8 vf_id; 5241*4882a593Smuzhiyun u8 reserved0; 5242*4882a593Smuzhiyun __le16 reserved1; 5243*4882a593Smuzhiyun __le32 reserved2; 5244*4882a593Smuzhiyun __le32 reserved3; 5245*4882a593Smuzhiyun }; 5246*4882a593Smuzhiyun 5247*4882a593Smuzhiyun /* 5248*4882a593Smuzhiyun * malicious VF event data 5249*4882a593Smuzhiyun */ 5250*4882a593Smuzhiyun struct malicious_vf_event_data { 5251*4882a593Smuzhiyun u8 vf_id; 5252*4882a593Smuzhiyun u8 err_id; 5253*4882a593Smuzhiyun __le16 reserved1; 5254*4882a593Smuzhiyun __le32 reserved2; 5255*4882a593Smuzhiyun __le32 reserved3; 5256*4882a593Smuzhiyun }; 5257*4882a593Smuzhiyun 5258*4882a593Smuzhiyun /* 5259*4882a593Smuzhiyun * vif list event data 5260*4882a593Smuzhiyun */ 5261*4882a593Smuzhiyun struct vif_list_event_data { 5262*4882a593Smuzhiyun u8 func_bit_map; 5263*4882a593Smuzhiyun u8 echo; 5264*4882a593Smuzhiyun __le16 reserved0; 5265*4882a593Smuzhiyun __le32 reserved1; 5266*4882a593Smuzhiyun __le32 reserved2; 5267*4882a593Smuzhiyun }; 5268*4882a593Smuzhiyun 5269*4882a593Smuzhiyun /* function update event data */ 5270*4882a593Smuzhiyun struct function_update_event_data { 5271*4882a593Smuzhiyun u8 echo; 5272*4882a593Smuzhiyun u8 reserved; 5273*4882a593Smuzhiyun __le16 reserved0; 5274*4882a593Smuzhiyun __le32 reserved1; 5275*4882a593Smuzhiyun __le32 reserved2; 5276*4882a593Smuzhiyun }; 5277*4882a593Smuzhiyun 5278*4882a593Smuzhiyun 5279*4882a593Smuzhiyun /* union for all event ring message types */ 5280*4882a593Smuzhiyun union event_data { 5281*4882a593Smuzhiyun struct vf_pf_event_data vf_pf_event; 5282*4882a593Smuzhiyun struct eth_event_data eth_event; 5283*4882a593Smuzhiyun struct cfc_del_event_data cfc_del_event; 5284*4882a593Smuzhiyun struct vf_flr_event_data vf_flr_event; 5285*4882a593Smuzhiyun struct malicious_vf_event_data malicious_vf_event; 5286*4882a593Smuzhiyun struct vif_list_event_data vif_list_event; 5287*4882a593Smuzhiyun struct function_update_event_data function_update_event; 5288*4882a593Smuzhiyun }; 5289*4882a593Smuzhiyun 5290*4882a593Smuzhiyun 5291*4882a593Smuzhiyun /* 5292*4882a593Smuzhiyun * per PF event ring data 5293*4882a593Smuzhiyun */ 5294*4882a593Smuzhiyun struct event_ring_data { 5295*4882a593Smuzhiyun struct regpair_native base_addr; 5296*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5297*4882a593Smuzhiyun u8 index_id; 5298*4882a593Smuzhiyun u8 sb_id; 5299*4882a593Smuzhiyun u16 producer; 5300*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5301*4882a593Smuzhiyun u16 producer; 5302*4882a593Smuzhiyun u8 sb_id; 5303*4882a593Smuzhiyun u8 index_id; 5304*4882a593Smuzhiyun #endif 5305*4882a593Smuzhiyun u32 reserved0; 5306*4882a593Smuzhiyun }; 5307*4882a593Smuzhiyun 5308*4882a593Smuzhiyun 5309*4882a593Smuzhiyun /* 5310*4882a593Smuzhiyun * event ring message element (each element is 128 bits) 5311*4882a593Smuzhiyun */ 5312*4882a593Smuzhiyun struct event_ring_msg { 5313*4882a593Smuzhiyun u8 opcode; 5314*4882a593Smuzhiyun u8 error; 5315*4882a593Smuzhiyun u16 reserved1; 5316*4882a593Smuzhiyun union event_data data; 5317*4882a593Smuzhiyun }; 5318*4882a593Smuzhiyun 5319*4882a593Smuzhiyun /* 5320*4882a593Smuzhiyun * event ring next page element (128 bits) 5321*4882a593Smuzhiyun */ 5322*4882a593Smuzhiyun struct event_ring_next { 5323*4882a593Smuzhiyun struct regpair addr; 5324*4882a593Smuzhiyun u32 reserved[2]; 5325*4882a593Smuzhiyun }; 5326*4882a593Smuzhiyun 5327*4882a593Smuzhiyun /* 5328*4882a593Smuzhiyun * union for event ring element types (each element is 128 bits) 5329*4882a593Smuzhiyun */ 5330*4882a593Smuzhiyun union event_ring_elem { 5331*4882a593Smuzhiyun struct event_ring_msg message; 5332*4882a593Smuzhiyun struct event_ring_next next_page; 5333*4882a593Smuzhiyun }; 5334*4882a593Smuzhiyun 5335*4882a593Smuzhiyun 5336*4882a593Smuzhiyun /* 5337*4882a593Smuzhiyun * Common event ring opcodes 5338*4882a593Smuzhiyun */ 5339*4882a593Smuzhiyun enum event_ring_opcode { 5340*4882a593Smuzhiyun EVENT_RING_OPCODE_VF_PF_CHANNEL, 5341*4882a593Smuzhiyun EVENT_RING_OPCODE_FUNCTION_START, 5342*4882a593Smuzhiyun EVENT_RING_OPCODE_FUNCTION_STOP, 5343*4882a593Smuzhiyun EVENT_RING_OPCODE_CFC_DEL, 5344*4882a593Smuzhiyun EVENT_RING_OPCODE_CFC_DEL_WB, 5345*4882a593Smuzhiyun EVENT_RING_OPCODE_STAT_QUERY, 5346*4882a593Smuzhiyun EVENT_RING_OPCODE_STOP_TRAFFIC, 5347*4882a593Smuzhiyun EVENT_RING_OPCODE_START_TRAFFIC, 5348*4882a593Smuzhiyun EVENT_RING_OPCODE_VF_FLR, 5349*4882a593Smuzhiyun EVENT_RING_OPCODE_MALICIOUS_VF, 5350*4882a593Smuzhiyun EVENT_RING_OPCODE_FORWARD_SETUP, 5351*4882a593Smuzhiyun EVENT_RING_OPCODE_RSS_UPDATE_RULES, 5352*4882a593Smuzhiyun EVENT_RING_OPCODE_FUNCTION_UPDATE, 5353*4882a593Smuzhiyun EVENT_RING_OPCODE_AFEX_VIF_LISTS, 5354*4882a593Smuzhiyun EVENT_RING_OPCODE_SET_MAC, 5355*4882a593Smuzhiyun EVENT_RING_OPCODE_CLASSIFICATION_RULES, 5356*4882a593Smuzhiyun EVENT_RING_OPCODE_FILTERS_RULES, 5357*4882a593Smuzhiyun EVENT_RING_OPCODE_MULTICAST_RULES, 5358*4882a593Smuzhiyun EVENT_RING_OPCODE_SET_TIMESYNC, 5359*4882a593Smuzhiyun MAX_EVENT_RING_OPCODE 5360*4882a593Smuzhiyun }; 5361*4882a593Smuzhiyun 5362*4882a593Smuzhiyun /* 5363*4882a593Smuzhiyun * Modes for fairness algorithm 5364*4882a593Smuzhiyun */ 5365*4882a593Smuzhiyun enum fairness_mode { 5366*4882a593Smuzhiyun FAIRNESS_COS_WRR_MODE, 5367*4882a593Smuzhiyun FAIRNESS_COS_ETS_MODE, 5368*4882a593Smuzhiyun MAX_FAIRNESS_MODE 5369*4882a593Smuzhiyun }; 5370*4882a593Smuzhiyun 5371*4882a593Smuzhiyun 5372*4882a593Smuzhiyun /* 5373*4882a593Smuzhiyun * Priority and cos 5374*4882a593Smuzhiyun */ 5375*4882a593Smuzhiyun struct priority_cos { 5376*4882a593Smuzhiyun u8 priority; 5377*4882a593Smuzhiyun u8 cos; 5378*4882a593Smuzhiyun __le16 reserved1; 5379*4882a593Smuzhiyun }; 5380*4882a593Smuzhiyun 5381*4882a593Smuzhiyun /* 5382*4882a593Smuzhiyun * The data for flow control configuration 5383*4882a593Smuzhiyun */ 5384*4882a593Smuzhiyun struct flow_control_configuration { 5385*4882a593Smuzhiyun struct priority_cos traffic_type_to_priority_cos[MAX_TRAFFIC_TYPES]; 5386*4882a593Smuzhiyun u8 dcb_enabled; 5387*4882a593Smuzhiyun u8 dcb_version; 5388*4882a593Smuzhiyun u8 dont_add_pri_0_en; 5389*4882a593Smuzhiyun u8 reserved1; 5390*4882a593Smuzhiyun __le32 reserved2; 5391*4882a593Smuzhiyun u8 dcb_outer_pri[MAX_TRAFFIC_TYPES]; 5392*4882a593Smuzhiyun }; 5393*4882a593Smuzhiyun 5394*4882a593Smuzhiyun 5395*4882a593Smuzhiyun /* 5396*4882a593Smuzhiyun * 5397*4882a593Smuzhiyun */ 5398*4882a593Smuzhiyun struct function_start_data { 5399*4882a593Smuzhiyun u8 function_mode; 5400*4882a593Smuzhiyun u8 allow_npar_tx_switching; 5401*4882a593Smuzhiyun __le16 sd_vlan_tag; 5402*4882a593Smuzhiyun __le16 vif_id; 5403*4882a593Smuzhiyun u8 path_id; 5404*4882a593Smuzhiyun u8 network_cos_mode; 5405*4882a593Smuzhiyun u8 dmae_cmd_id; 5406*4882a593Smuzhiyun u8 no_added_tags; 5407*4882a593Smuzhiyun __le16 reserved0; 5408*4882a593Smuzhiyun __le32 reserved1; 5409*4882a593Smuzhiyun u8 inner_clss_vxlan; 5410*4882a593Smuzhiyun u8 inner_clss_l2gre; 5411*4882a593Smuzhiyun u8 inner_clss_l2geneve; 5412*4882a593Smuzhiyun u8 inner_rss; 5413*4882a593Smuzhiyun __le16 vxlan_dst_port; 5414*4882a593Smuzhiyun __le16 geneve_dst_port; 5415*4882a593Smuzhiyun u8 sd_accept_mf_clss_fail; 5416*4882a593Smuzhiyun u8 sd_accept_mf_clss_fail_match_ethtype; 5417*4882a593Smuzhiyun __le16 sd_accept_mf_clss_fail_ethtype; 5418*4882a593Smuzhiyun __le16 sd_vlan_eth_type; 5419*4882a593Smuzhiyun u8 sd_vlan_force_pri_flg; 5420*4882a593Smuzhiyun u8 sd_vlan_force_pri_val; 5421*4882a593Smuzhiyun u8 c2s_pri_tt_valid; 5422*4882a593Smuzhiyun u8 c2s_pri_default; 5423*4882a593Smuzhiyun u8 tx_vlan_filtering_enable; 5424*4882a593Smuzhiyun u8 tx_vlan_filtering_use_pvid; 5425*4882a593Smuzhiyun u8 reserved2[4]; 5426*4882a593Smuzhiyun struct c2s_pri_trans_table_entry c2s_pri_trans_table; 5427*4882a593Smuzhiyun }; 5428*4882a593Smuzhiyun 5429*4882a593Smuzhiyun struct function_update_data { 5430*4882a593Smuzhiyun u8 vif_id_change_flg; 5431*4882a593Smuzhiyun u8 afex_default_vlan_change_flg; 5432*4882a593Smuzhiyun u8 allowed_priorities_change_flg; 5433*4882a593Smuzhiyun u8 network_cos_mode_change_flg; 5434*4882a593Smuzhiyun __le16 vif_id; 5435*4882a593Smuzhiyun __le16 afex_default_vlan; 5436*4882a593Smuzhiyun u8 allowed_priorities; 5437*4882a593Smuzhiyun u8 network_cos_mode; 5438*4882a593Smuzhiyun u8 lb_mode_en_change_flg; 5439*4882a593Smuzhiyun u8 lb_mode_en; 5440*4882a593Smuzhiyun u8 tx_switch_suspend_change_flg; 5441*4882a593Smuzhiyun u8 tx_switch_suspend; 5442*4882a593Smuzhiyun u8 echo; 5443*4882a593Smuzhiyun u8 update_tunn_cfg_flg; 5444*4882a593Smuzhiyun u8 inner_clss_vxlan; 5445*4882a593Smuzhiyun u8 inner_clss_l2gre; 5446*4882a593Smuzhiyun u8 inner_clss_l2geneve; 5447*4882a593Smuzhiyun u8 inner_rss; 5448*4882a593Smuzhiyun __le16 vxlan_dst_port; 5449*4882a593Smuzhiyun __le16 geneve_dst_port; 5450*4882a593Smuzhiyun u8 sd_vlan_force_pri_change_flg; 5451*4882a593Smuzhiyun u8 sd_vlan_force_pri_flg; 5452*4882a593Smuzhiyun u8 sd_vlan_force_pri_val; 5453*4882a593Smuzhiyun u8 sd_vlan_tag_change_flg; 5454*4882a593Smuzhiyun u8 sd_vlan_eth_type_change_flg; 5455*4882a593Smuzhiyun u8 reserved1; 5456*4882a593Smuzhiyun __le16 sd_vlan_tag; 5457*4882a593Smuzhiyun __le16 sd_vlan_eth_type; 5458*4882a593Smuzhiyun u8 tx_vlan_filtering_pvid_change_flg; 5459*4882a593Smuzhiyun u8 reserved0; 5460*4882a593Smuzhiyun __le32 reserved2; 5461*4882a593Smuzhiyun }; 5462*4882a593Smuzhiyun 5463*4882a593Smuzhiyun /* 5464*4882a593Smuzhiyun * FW version stored in the Xstorm RAM 5465*4882a593Smuzhiyun */ 5466*4882a593Smuzhiyun struct fw_version { 5467*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5468*4882a593Smuzhiyun u8 engineering; 5469*4882a593Smuzhiyun u8 revision; 5470*4882a593Smuzhiyun u8 minor; 5471*4882a593Smuzhiyun u8 major; 5472*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5473*4882a593Smuzhiyun u8 major; 5474*4882a593Smuzhiyun u8 minor; 5475*4882a593Smuzhiyun u8 revision; 5476*4882a593Smuzhiyun u8 engineering; 5477*4882a593Smuzhiyun #endif 5478*4882a593Smuzhiyun u32 flags; 5479*4882a593Smuzhiyun #define FW_VERSION_OPTIMIZED (0x1<<0) 5480*4882a593Smuzhiyun #define FW_VERSION_OPTIMIZED_SHIFT 0 5481*4882a593Smuzhiyun #define FW_VERSION_BIG_ENDIEN (0x1<<1) 5482*4882a593Smuzhiyun #define FW_VERSION_BIG_ENDIEN_SHIFT 1 5483*4882a593Smuzhiyun #define FW_VERSION_CHIP_VERSION (0x3<<2) 5484*4882a593Smuzhiyun #define FW_VERSION_CHIP_VERSION_SHIFT 2 5485*4882a593Smuzhiyun #define __FW_VERSION_RESERVED (0xFFFFFFF<<4) 5486*4882a593Smuzhiyun #define __FW_VERSION_RESERVED_SHIFT 4 5487*4882a593Smuzhiyun }; 5488*4882a593Smuzhiyun 5489*4882a593Smuzhiyun /* 5490*4882a593Smuzhiyun * Dynamic Host-Coalescing - Driver(host) counters 5491*4882a593Smuzhiyun */ 5492*4882a593Smuzhiyun struct hc_dynamic_sb_drv_counters { 5493*4882a593Smuzhiyun u32 dynamic_hc_drv_counter[HC_SB_MAX_DYNAMIC_INDICES]; 5494*4882a593Smuzhiyun }; 5495*4882a593Smuzhiyun 5496*4882a593Smuzhiyun 5497*4882a593Smuzhiyun /* 5498*4882a593Smuzhiyun * 2 bytes. configuration/state parameters for a single protocol index 5499*4882a593Smuzhiyun */ 5500*4882a593Smuzhiyun struct hc_index_data { 5501*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5502*4882a593Smuzhiyun u8 flags; 5503*4882a593Smuzhiyun #define HC_INDEX_DATA_SM_ID (0x1<<0) 5504*4882a593Smuzhiyun #define HC_INDEX_DATA_SM_ID_SHIFT 0 5505*4882a593Smuzhiyun #define HC_INDEX_DATA_HC_ENABLED (0x1<<1) 5506*4882a593Smuzhiyun #define HC_INDEX_DATA_HC_ENABLED_SHIFT 1 5507*4882a593Smuzhiyun #define HC_INDEX_DATA_DYNAMIC_HC_ENABLED (0x1<<2) 5508*4882a593Smuzhiyun #define HC_INDEX_DATA_DYNAMIC_HC_ENABLED_SHIFT 2 5509*4882a593Smuzhiyun #define HC_INDEX_DATA_RESERVE (0x1F<<3) 5510*4882a593Smuzhiyun #define HC_INDEX_DATA_RESERVE_SHIFT 3 5511*4882a593Smuzhiyun u8 timeout; 5512*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5513*4882a593Smuzhiyun u8 timeout; 5514*4882a593Smuzhiyun u8 flags; 5515*4882a593Smuzhiyun #define HC_INDEX_DATA_SM_ID (0x1<<0) 5516*4882a593Smuzhiyun #define HC_INDEX_DATA_SM_ID_SHIFT 0 5517*4882a593Smuzhiyun #define HC_INDEX_DATA_HC_ENABLED (0x1<<1) 5518*4882a593Smuzhiyun #define HC_INDEX_DATA_HC_ENABLED_SHIFT 1 5519*4882a593Smuzhiyun #define HC_INDEX_DATA_DYNAMIC_HC_ENABLED (0x1<<2) 5520*4882a593Smuzhiyun #define HC_INDEX_DATA_DYNAMIC_HC_ENABLED_SHIFT 2 5521*4882a593Smuzhiyun #define HC_INDEX_DATA_RESERVE (0x1F<<3) 5522*4882a593Smuzhiyun #define HC_INDEX_DATA_RESERVE_SHIFT 3 5523*4882a593Smuzhiyun #endif 5524*4882a593Smuzhiyun }; 5525*4882a593Smuzhiyun 5526*4882a593Smuzhiyun 5527*4882a593Smuzhiyun /* 5528*4882a593Smuzhiyun * HC state-machine 5529*4882a593Smuzhiyun */ 5530*4882a593Smuzhiyun struct hc_status_block_sm { 5531*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5532*4882a593Smuzhiyun u8 igu_seg_id; 5533*4882a593Smuzhiyun u8 igu_sb_id; 5534*4882a593Smuzhiyun u8 timer_value; 5535*4882a593Smuzhiyun u8 __flags; 5536*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5537*4882a593Smuzhiyun u8 __flags; 5538*4882a593Smuzhiyun u8 timer_value; 5539*4882a593Smuzhiyun u8 igu_sb_id; 5540*4882a593Smuzhiyun u8 igu_seg_id; 5541*4882a593Smuzhiyun #endif 5542*4882a593Smuzhiyun u32 time_to_expire; 5543*4882a593Smuzhiyun }; 5544*4882a593Smuzhiyun 5545*4882a593Smuzhiyun /* 5546*4882a593Smuzhiyun * hold PCI identification variables- used in various places in firmware 5547*4882a593Smuzhiyun */ 5548*4882a593Smuzhiyun struct pci_entity { 5549*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5550*4882a593Smuzhiyun u8 vf_valid; 5551*4882a593Smuzhiyun u8 vf_id; 5552*4882a593Smuzhiyun u8 vnic_id; 5553*4882a593Smuzhiyun u8 pf_id; 5554*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5555*4882a593Smuzhiyun u8 pf_id; 5556*4882a593Smuzhiyun u8 vnic_id; 5557*4882a593Smuzhiyun u8 vf_id; 5558*4882a593Smuzhiyun u8 vf_valid; 5559*4882a593Smuzhiyun #endif 5560*4882a593Smuzhiyun }; 5561*4882a593Smuzhiyun 5562*4882a593Smuzhiyun /* 5563*4882a593Smuzhiyun * The fast-path status block meta-data, common to all chips 5564*4882a593Smuzhiyun */ 5565*4882a593Smuzhiyun struct hc_sb_data { 5566*4882a593Smuzhiyun struct regpair_native host_sb_addr; 5567*4882a593Smuzhiyun struct hc_status_block_sm state_machine[HC_SB_MAX_SM]; 5568*4882a593Smuzhiyun struct pci_entity p_func; 5569*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5570*4882a593Smuzhiyun u8 rsrv0; 5571*4882a593Smuzhiyun u8 state; 5572*4882a593Smuzhiyun u8 dhc_qzone_id; 5573*4882a593Smuzhiyun u8 same_igu_sb_1b; 5574*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5575*4882a593Smuzhiyun u8 same_igu_sb_1b; 5576*4882a593Smuzhiyun u8 dhc_qzone_id; 5577*4882a593Smuzhiyun u8 state; 5578*4882a593Smuzhiyun u8 rsrv0; 5579*4882a593Smuzhiyun #endif 5580*4882a593Smuzhiyun struct regpair_native rsrv1[2]; 5581*4882a593Smuzhiyun }; 5582*4882a593Smuzhiyun 5583*4882a593Smuzhiyun 5584*4882a593Smuzhiyun /* 5585*4882a593Smuzhiyun * Segment types for host coaslescing 5586*4882a593Smuzhiyun */ 5587*4882a593Smuzhiyun enum hc_segment { 5588*4882a593Smuzhiyun HC_REGULAR_SEGMENT, 5589*4882a593Smuzhiyun HC_DEFAULT_SEGMENT, 5590*4882a593Smuzhiyun MAX_HC_SEGMENT 5591*4882a593Smuzhiyun }; 5592*4882a593Smuzhiyun 5593*4882a593Smuzhiyun 5594*4882a593Smuzhiyun /* 5595*4882a593Smuzhiyun * The fast-path status block meta-data 5596*4882a593Smuzhiyun */ 5597*4882a593Smuzhiyun struct hc_sp_status_block_data { 5598*4882a593Smuzhiyun struct regpair_native host_sb_addr; 5599*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5600*4882a593Smuzhiyun u8 rsrv1; 5601*4882a593Smuzhiyun u8 state; 5602*4882a593Smuzhiyun u8 igu_seg_id; 5603*4882a593Smuzhiyun u8 igu_sb_id; 5604*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 5605*4882a593Smuzhiyun u8 igu_sb_id; 5606*4882a593Smuzhiyun u8 igu_seg_id; 5607*4882a593Smuzhiyun u8 state; 5608*4882a593Smuzhiyun u8 rsrv1; 5609*4882a593Smuzhiyun #endif 5610*4882a593Smuzhiyun struct pci_entity p_func; 5611*4882a593Smuzhiyun }; 5612*4882a593Smuzhiyun 5613*4882a593Smuzhiyun 5614*4882a593Smuzhiyun /* 5615*4882a593Smuzhiyun * The fast-path status block meta-data 5616*4882a593Smuzhiyun */ 5617*4882a593Smuzhiyun struct hc_status_block_data_e1x { 5618*4882a593Smuzhiyun struct hc_index_data index_data[HC_SB_MAX_INDICES_E1X]; 5619*4882a593Smuzhiyun struct hc_sb_data common; 5620*4882a593Smuzhiyun }; 5621*4882a593Smuzhiyun 5622*4882a593Smuzhiyun 5623*4882a593Smuzhiyun /* 5624*4882a593Smuzhiyun * The fast-path status block meta-data 5625*4882a593Smuzhiyun */ 5626*4882a593Smuzhiyun struct hc_status_block_data_e2 { 5627*4882a593Smuzhiyun struct hc_index_data index_data[HC_SB_MAX_INDICES_E2]; 5628*4882a593Smuzhiyun struct hc_sb_data common; 5629*4882a593Smuzhiyun }; 5630*4882a593Smuzhiyun 5631*4882a593Smuzhiyun 5632*4882a593Smuzhiyun /* 5633*4882a593Smuzhiyun * IGU block operartion modes (in Everest2) 5634*4882a593Smuzhiyun */ 5635*4882a593Smuzhiyun enum igu_mode { 5636*4882a593Smuzhiyun HC_IGU_BC_MODE, 5637*4882a593Smuzhiyun HC_IGU_NBC_MODE, 5638*4882a593Smuzhiyun MAX_IGU_MODE 5639*4882a593Smuzhiyun }; 5640*4882a593Smuzhiyun 5641*4882a593Smuzhiyun /* 5642*4882a593Smuzhiyun * Inner Headers Classification Type 5643*4882a593Smuzhiyun */ 5644*4882a593Smuzhiyun enum inner_clss_type { 5645*4882a593Smuzhiyun INNER_CLSS_DISABLED, 5646*4882a593Smuzhiyun INNER_CLSS_USE_VLAN, 5647*4882a593Smuzhiyun INNER_CLSS_USE_VNI, 5648*4882a593Smuzhiyun MAX_INNER_CLSS_TYPE}; 5649*4882a593Smuzhiyun 5650*4882a593Smuzhiyun /* 5651*4882a593Smuzhiyun * IP versions 5652*4882a593Smuzhiyun */ 5653*4882a593Smuzhiyun enum ip_ver { 5654*4882a593Smuzhiyun IP_V4, 5655*4882a593Smuzhiyun IP_V6, 5656*4882a593Smuzhiyun MAX_IP_VER 5657*4882a593Smuzhiyun }; 5658*4882a593Smuzhiyun 5659*4882a593Smuzhiyun /* 5660*4882a593Smuzhiyun * Malicious VF error ID 5661*4882a593Smuzhiyun */ 5662*4882a593Smuzhiyun enum malicious_vf_error_id { 5663*4882a593Smuzhiyun MALICIOUS_VF_NO_ERROR, 5664*4882a593Smuzhiyun VF_PF_CHANNEL_NOT_READY, 5665*4882a593Smuzhiyun ETH_ILLEGAL_BD_LENGTHS, 5666*4882a593Smuzhiyun ETH_PACKET_TOO_SHORT, 5667*4882a593Smuzhiyun ETH_PAYLOAD_TOO_BIG, 5668*4882a593Smuzhiyun ETH_ILLEGAL_ETH_TYPE, 5669*4882a593Smuzhiyun ETH_ILLEGAL_LSO_HDR_LEN, 5670*4882a593Smuzhiyun ETH_TOO_MANY_BDS, 5671*4882a593Smuzhiyun ETH_ZERO_HDR_NBDS, 5672*4882a593Smuzhiyun ETH_START_BD_NOT_SET, 5673*4882a593Smuzhiyun ETH_ILLEGAL_PARSE_NBDS, 5674*4882a593Smuzhiyun ETH_IPV6_AND_CHECKSUM, 5675*4882a593Smuzhiyun ETH_VLAN_FLG_INCORRECT, 5676*4882a593Smuzhiyun ETH_ILLEGAL_LSO_MSS, 5677*4882a593Smuzhiyun ETH_TUNNEL_NOT_SUPPORTED, 5678*4882a593Smuzhiyun MAX_MALICIOUS_VF_ERROR_ID 5679*4882a593Smuzhiyun }; 5680*4882a593Smuzhiyun 5681*4882a593Smuzhiyun /* 5682*4882a593Smuzhiyun * Multi-function modes 5683*4882a593Smuzhiyun */ 5684*4882a593Smuzhiyun enum mf_mode { 5685*4882a593Smuzhiyun SINGLE_FUNCTION, 5686*4882a593Smuzhiyun MULTI_FUNCTION_SD, 5687*4882a593Smuzhiyun MULTI_FUNCTION_SI, 5688*4882a593Smuzhiyun MULTI_FUNCTION_AFEX, 5689*4882a593Smuzhiyun MAX_MF_MODE 5690*4882a593Smuzhiyun }; 5691*4882a593Smuzhiyun 5692*4882a593Smuzhiyun /* 5693*4882a593Smuzhiyun * Protocol-common statistics collected by the Tstorm (per pf) 5694*4882a593Smuzhiyun */ 5695*4882a593Smuzhiyun struct tstorm_per_pf_stats { 5696*4882a593Smuzhiyun struct regpair rcv_error_bytes; 5697*4882a593Smuzhiyun }; 5698*4882a593Smuzhiyun 5699*4882a593Smuzhiyun /* 5700*4882a593Smuzhiyun * 5701*4882a593Smuzhiyun */ 5702*4882a593Smuzhiyun struct per_pf_stats { 5703*4882a593Smuzhiyun struct tstorm_per_pf_stats tstorm_pf_statistics; 5704*4882a593Smuzhiyun }; 5705*4882a593Smuzhiyun 5706*4882a593Smuzhiyun 5707*4882a593Smuzhiyun /* 5708*4882a593Smuzhiyun * Protocol-common statistics collected by the Tstorm (per port) 5709*4882a593Smuzhiyun */ 5710*4882a593Smuzhiyun struct tstorm_per_port_stats { 5711*4882a593Smuzhiyun __le32 mac_discard; 5712*4882a593Smuzhiyun __le32 mac_filter_discard; 5713*4882a593Smuzhiyun __le32 brb_truncate_discard; 5714*4882a593Smuzhiyun __le32 mf_tag_discard; 5715*4882a593Smuzhiyun __le32 packet_drop; 5716*4882a593Smuzhiyun __le32 reserved; 5717*4882a593Smuzhiyun }; 5718*4882a593Smuzhiyun 5719*4882a593Smuzhiyun /* 5720*4882a593Smuzhiyun * 5721*4882a593Smuzhiyun */ 5722*4882a593Smuzhiyun struct per_port_stats { 5723*4882a593Smuzhiyun struct tstorm_per_port_stats tstorm_port_statistics; 5724*4882a593Smuzhiyun }; 5725*4882a593Smuzhiyun 5726*4882a593Smuzhiyun 5727*4882a593Smuzhiyun /* 5728*4882a593Smuzhiyun * Protocol-common statistics collected by the Tstorm (per client) 5729*4882a593Smuzhiyun */ 5730*4882a593Smuzhiyun struct tstorm_per_queue_stats { 5731*4882a593Smuzhiyun struct regpair rcv_ucast_bytes; 5732*4882a593Smuzhiyun __le32 rcv_ucast_pkts; 5733*4882a593Smuzhiyun __le32 checksum_discard; 5734*4882a593Smuzhiyun struct regpair rcv_bcast_bytes; 5735*4882a593Smuzhiyun __le32 rcv_bcast_pkts; 5736*4882a593Smuzhiyun __le32 pkts_too_big_discard; 5737*4882a593Smuzhiyun struct regpair rcv_mcast_bytes; 5738*4882a593Smuzhiyun __le32 rcv_mcast_pkts; 5739*4882a593Smuzhiyun __le32 ttl0_discard; 5740*4882a593Smuzhiyun __le16 no_buff_discard; 5741*4882a593Smuzhiyun __le16 reserved0; 5742*4882a593Smuzhiyun __le32 reserved1; 5743*4882a593Smuzhiyun }; 5744*4882a593Smuzhiyun 5745*4882a593Smuzhiyun /* 5746*4882a593Smuzhiyun * Protocol-common statistics collected by the Ustorm (per client) 5747*4882a593Smuzhiyun */ 5748*4882a593Smuzhiyun struct ustorm_per_queue_stats { 5749*4882a593Smuzhiyun struct regpair ucast_no_buff_bytes; 5750*4882a593Smuzhiyun struct regpair mcast_no_buff_bytes; 5751*4882a593Smuzhiyun struct regpair bcast_no_buff_bytes; 5752*4882a593Smuzhiyun __le32 ucast_no_buff_pkts; 5753*4882a593Smuzhiyun __le32 mcast_no_buff_pkts; 5754*4882a593Smuzhiyun __le32 bcast_no_buff_pkts; 5755*4882a593Smuzhiyun __le32 coalesced_pkts; 5756*4882a593Smuzhiyun struct regpair coalesced_bytes; 5757*4882a593Smuzhiyun __le32 coalesced_events; 5758*4882a593Smuzhiyun __le32 coalesced_aborts; 5759*4882a593Smuzhiyun }; 5760*4882a593Smuzhiyun 5761*4882a593Smuzhiyun /* 5762*4882a593Smuzhiyun * Protocol-common statistics collected by the Xstorm (per client) 5763*4882a593Smuzhiyun */ 5764*4882a593Smuzhiyun struct xstorm_per_queue_stats { 5765*4882a593Smuzhiyun struct regpair ucast_bytes_sent; 5766*4882a593Smuzhiyun struct regpair mcast_bytes_sent; 5767*4882a593Smuzhiyun struct regpair bcast_bytes_sent; 5768*4882a593Smuzhiyun __le32 ucast_pkts_sent; 5769*4882a593Smuzhiyun __le32 mcast_pkts_sent; 5770*4882a593Smuzhiyun __le32 bcast_pkts_sent; 5771*4882a593Smuzhiyun __le32 error_drop_pkts; 5772*4882a593Smuzhiyun }; 5773*4882a593Smuzhiyun 5774*4882a593Smuzhiyun /* 5775*4882a593Smuzhiyun * 5776*4882a593Smuzhiyun */ 5777*4882a593Smuzhiyun struct per_queue_stats { 5778*4882a593Smuzhiyun struct tstorm_per_queue_stats tstorm_queue_statistics; 5779*4882a593Smuzhiyun struct ustorm_per_queue_stats ustorm_queue_statistics; 5780*4882a593Smuzhiyun struct xstorm_per_queue_stats xstorm_queue_statistics; 5781*4882a593Smuzhiyun }; 5782*4882a593Smuzhiyun 5783*4882a593Smuzhiyun 5784*4882a593Smuzhiyun /* 5785*4882a593Smuzhiyun * FW version stored in first line of pram 5786*4882a593Smuzhiyun */ 5787*4882a593Smuzhiyun struct pram_fw_version { 5788*4882a593Smuzhiyun u8 major; 5789*4882a593Smuzhiyun u8 minor; 5790*4882a593Smuzhiyun u8 revision; 5791*4882a593Smuzhiyun u8 engineering; 5792*4882a593Smuzhiyun u8 flags; 5793*4882a593Smuzhiyun #define PRAM_FW_VERSION_OPTIMIZED (0x1<<0) 5794*4882a593Smuzhiyun #define PRAM_FW_VERSION_OPTIMIZED_SHIFT 0 5795*4882a593Smuzhiyun #define PRAM_FW_VERSION_STORM_ID (0x3<<1) 5796*4882a593Smuzhiyun #define PRAM_FW_VERSION_STORM_ID_SHIFT 1 5797*4882a593Smuzhiyun #define PRAM_FW_VERSION_BIG_ENDIEN (0x1<<3) 5798*4882a593Smuzhiyun #define PRAM_FW_VERSION_BIG_ENDIEN_SHIFT 3 5799*4882a593Smuzhiyun #define PRAM_FW_VERSION_CHIP_VERSION (0x3<<4) 5800*4882a593Smuzhiyun #define PRAM_FW_VERSION_CHIP_VERSION_SHIFT 4 5801*4882a593Smuzhiyun #define __PRAM_FW_VERSION_RESERVED0 (0x3<<6) 5802*4882a593Smuzhiyun #define __PRAM_FW_VERSION_RESERVED0_SHIFT 6 5803*4882a593Smuzhiyun }; 5804*4882a593Smuzhiyun 5805*4882a593Smuzhiyun 5806*4882a593Smuzhiyun /* 5807*4882a593Smuzhiyun * Ethernet slow path element 5808*4882a593Smuzhiyun */ 5809*4882a593Smuzhiyun union protocol_common_specific_data { 5810*4882a593Smuzhiyun u8 protocol_data[8]; 5811*4882a593Smuzhiyun struct regpair phy_address; 5812*4882a593Smuzhiyun struct regpair mac_config_addr; 5813*4882a593Smuzhiyun struct afex_vif_list_ramrod_data afex_vif_list_data; 5814*4882a593Smuzhiyun }; 5815*4882a593Smuzhiyun 5816*4882a593Smuzhiyun /* 5817*4882a593Smuzhiyun * The send queue element 5818*4882a593Smuzhiyun */ 5819*4882a593Smuzhiyun struct protocol_common_spe { 5820*4882a593Smuzhiyun struct spe_hdr hdr; 5821*4882a593Smuzhiyun union protocol_common_specific_data data; 5822*4882a593Smuzhiyun }; 5823*4882a593Smuzhiyun 5824*4882a593Smuzhiyun /* The data for the Set Timesync Ramrod */ 5825*4882a593Smuzhiyun struct set_timesync_ramrod_data { 5826*4882a593Smuzhiyun u8 drift_adjust_cmd; 5827*4882a593Smuzhiyun u8 offset_cmd; 5828*4882a593Smuzhiyun u8 add_sub_drift_adjust_value; 5829*4882a593Smuzhiyun u8 drift_adjust_value; 5830*4882a593Smuzhiyun u32 drift_adjust_period; 5831*4882a593Smuzhiyun struct regpair offset_delta; 5832*4882a593Smuzhiyun }; 5833*4882a593Smuzhiyun 5834*4882a593Smuzhiyun /* 5835*4882a593Smuzhiyun * The send queue element 5836*4882a593Smuzhiyun */ 5837*4882a593Smuzhiyun struct slow_path_element { 5838*4882a593Smuzhiyun struct spe_hdr hdr; 5839*4882a593Smuzhiyun struct regpair protocol_data; 5840*4882a593Smuzhiyun }; 5841*4882a593Smuzhiyun 5842*4882a593Smuzhiyun 5843*4882a593Smuzhiyun /* 5844*4882a593Smuzhiyun * Protocol-common statistics counter 5845*4882a593Smuzhiyun */ 5846*4882a593Smuzhiyun struct stats_counter { 5847*4882a593Smuzhiyun __le16 xstats_counter; 5848*4882a593Smuzhiyun __le16 reserved0; 5849*4882a593Smuzhiyun __le32 reserved1; 5850*4882a593Smuzhiyun __le16 tstats_counter; 5851*4882a593Smuzhiyun __le16 reserved2; 5852*4882a593Smuzhiyun __le32 reserved3; 5853*4882a593Smuzhiyun __le16 ustats_counter; 5854*4882a593Smuzhiyun __le16 reserved4; 5855*4882a593Smuzhiyun __le32 reserved5; 5856*4882a593Smuzhiyun __le16 cstats_counter; 5857*4882a593Smuzhiyun __le16 reserved6; 5858*4882a593Smuzhiyun __le32 reserved7; 5859*4882a593Smuzhiyun }; 5860*4882a593Smuzhiyun 5861*4882a593Smuzhiyun 5862*4882a593Smuzhiyun /* 5863*4882a593Smuzhiyun * 5864*4882a593Smuzhiyun */ 5865*4882a593Smuzhiyun struct stats_query_entry { 5866*4882a593Smuzhiyun u8 kind; 5867*4882a593Smuzhiyun u8 index; 5868*4882a593Smuzhiyun __le16 funcID; 5869*4882a593Smuzhiyun __le32 reserved; 5870*4882a593Smuzhiyun struct regpair address; 5871*4882a593Smuzhiyun }; 5872*4882a593Smuzhiyun 5873*4882a593Smuzhiyun /* 5874*4882a593Smuzhiyun * statistic command 5875*4882a593Smuzhiyun */ 5876*4882a593Smuzhiyun struct stats_query_cmd_group { 5877*4882a593Smuzhiyun struct stats_query_entry query[STATS_QUERY_CMD_COUNT]; 5878*4882a593Smuzhiyun }; 5879*4882a593Smuzhiyun 5880*4882a593Smuzhiyun 5881*4882a593Smuzhiyun /* 5882*4882a593Smuzhiyun * statistic command header 5883*4882a593Smuzhiyun */ 5884*4882a593Smuzhiyun struct stats_query_header { 5885*4882a593Smuzhiyun u8 cmd_num; 5886*4882a593Smuzhiyun u8 reserved0; 5887*4882a593Smuzhiyun __le16 drv_stats_counter; 5888*4882a593Smuzhiyun __le32 reserved1; 5889*4882a593Smuzhiyun struct regpair stats_counters_addrs; 5890*4882a593Smuzhiyun }; 5891*4882a593Smuzhiyun 5892*4882a593Smuzhiyun 5893*4882a593Smuzhiyun /* 5894*4882a593Smuzhiyun * Types of statistcis query entry 5895*4882a593Smuzhiyun */ 5896*4882a593Smuzhiyun enum stats_query_type { 5897*4882a593Smuzhiyun STATS_TYPE_QUEUE, 5898*4882a593Smuzhiyun STATS_TYPE_PORT, 5899*4882a593Smuzhiyun STATS_TYPE_PF, 5900*4882a593Smuzhiyun STATS_TYPE_TOE, 5901*4882a593Smuzhiyun STATS_TYPE_FCOE, 5902*4882a593Smuzhiyun MAX_STATS_QUERY_TYPE 5903*4882a593Smuzhiyun }; 5904*4882a593Smuzhiyun 5905*4882a593Smuzhiyun 5906*4882a593Smuzhiyun /* 5907*4882a593Smuzhiyun * Indicate of the function status block state 5908*4882a593Smuzhiyun */ 5909*4882a593Smuzhiyun enum status_block_state { 5910*4882a593Smuzhiyun SB_DISABLED, 5911*4882a593Smuzhiyun SB_ENABLED, 5912*4882a593Smuzhiyun SB_CLEANED, 5913*4882a593Smuzhiyun MAX_STATUS_BLOCK_STATE 5914*4882a593Smuzhiyun }; 5915*4882a593Smuzhiyun 5916*4882a593Smuzhiyun 5917*4882a593Smuzhiyun /* 5918*4882a593Smuzhiyun * Storm IDs (including attentions for IGU related enums) 5919*4882a593Smuzhiyun */ 5920*4882a593Smuzhiyun enum storm_id { 5921*4882a593Smuzhiyun USTORM_ID, 5922*4882a593Smuzhiyun CSTORM_ID, 5923*4882a593Smuzhiyun XSTORM_ID, 5924*4882a593Smuzhiyun TSTORM_ID, 5925*4882a593Smuzhiyun ATTENTION_ID, 5926*4882a593Smuzhiyun MAX_STORM_ID 5927*4882a593Smuzhiyun }; 5928*4882a593Smuzhiyun 5929*4882a593Smuzhiyun 5930*4882a593Smuzhiyun /* 5931*4882a593Smuzhiyun * Taffic types used in ETS and flow control algorithms 5932*4882a593Smuzhiyun */ 5933*4882a593Smuzhiyun enum traffic_type { 5934*4882a593Smuzhiyun LLFC_TRAFFIC_TYPE_NW, 5935*4882a593Smuzhiyun LLFC_TRAFFIC_TYPE_FCOE, 5936*4882a593Smuzhiyun LLFC_TRAFFIC_TYPE_ISCSI, 5937*4882a593Smuzhiyun MAX_TRAFFIC_TYPE 5938*4882a593Smuzhiyun }; 5939*4882a593Smuzhiyun 5940*4882a593Smuzhiyun 5941*4882a593Smuzhiyun /* 5942*4882a593Smuzhiyun * zone A per-queue data 5943*4882a593Smuzhiyun */ 5944*4882a593Smuzhiyun struct tstorm_queue_zone_data { 5945*4882a593Smuzhiyun struct regpair reserved[4]; 5946*4882a593Smuzhiyun }; 5947*4882a593Smuzhiyun 5948*4882a593Smuzhiyun 5949*4882a593Smuzhiyun /* 5950*4882a593Smuzhiyun * zone B per-VF data 5951*4882a593Smuzhiyun */ 5952*4882a593Smuzhiyun struct tstorm_vf_zone_data { 5953*4882a593Smuzhiyun struct regpair reserved; 5954*4882a593Smuzhiyun }; 5955*4882a593Smuzhiyun 5956*4882a593Smuzhiyun /* Add or Subtract Value for Set Timesync Ramrod */ 5957*4882a593Smuzhiyun enum ts_add_sub_value { 5958*4882a593Smuzhiyun TS_SUB_VALUE, 5959*4882a593Smuzhiyun TS_ADD_VALUE, 5960*4882a593Smuzhiyun MAX_TS_ADD_SUB_VALUE 5961*4882a593Smuzhiyun }; 5962*4882a593Smuzhiyun 5963*4882a593Smuzhiyun /* Drift-Adjust Commands for Set Timesync Ramrod */ 5964*4882a593Smuzhiyun enum ts_drift_adjust_cmd { 5965*4882a593Smuzhiyun TS_DRIFT_ADJUST_KEEP, 5966*4882a593Smuzhiyun TS_DRIFT_ADJUST_SET, 5967*4882a593Smuzhiyun TS_DRIFT_ADJUST_RESET, 5968*4882a593Smuzhiyun MAX_TS_DRIFT_ADJUST_CMD 5969*4882a593Smuzhiyun }; 5970*4882a593Smuzhiyun 5971*4882a593Smuzhiyun /* Offset Commands for Set Timesync Ramrod */ 5972*4882a593Smuzhiyun enum ts_offset_cmd { 5973*4882a593Smuzhiyun TS_OFFSET_KEEP, 5974*4882a593Smuzhiyun TS_OFFSET_INC, 5975*4882a593Smuzhiyun TS_OFFSET_DEC, 5976*4882a593Smuzhiyun MAX_TS_OFFSET_CMD 5977*4882a593Smuzhiyun }; 5978*4882a593Smuzhiyun 5979*4882a593Smuzhiyun /* zone A per-queue data */ 5980*4882a593Smuzhiyun struct ustorm_queue_zone_data { 5981*4882a593Smuzhiyun struct ustorm_eth_rx_producers eth_rx_producers; 5982*4882a593Smuzhiyun struct regpair reserved[3]; 5983*4882a593Smuzhiyun }; 5984*4882a593Smuzhiyun 5985*4882a593Smuzhiyun 5986*4882a593Smuzhiyun /* 5987*4882a593Smuzhiyun * zone B per-VF data 5988*4882a593Smuzhiyun */ 5989*4882a593Smuzhiyun struct ustorm_vf_zone_data { 5990*4882a593Smuzhiyun struct regpair reserved; 5991*4882a593Smuzhiyun }; 5992*4882a593Smuzhiyun 5993*4882a593Smuzhiyun 5994*4882a593Smuzhiyun /* 5995*4882a593Smuzhiyun * data per VF-PF channel 5996*4882a593Smuzhiyun */ 5997*4882a593Smuzhiyun struct vf_pf_channel_data { 5998*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 5999*4882a593Smuzhiyun u16 reserved0; 6000*4882a593Smuzhiyun u8 valid; 6001*4882a593Smuzhiyun u8 state; 6002*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 6003*4882a593Smuzhiyun u8 state; 6004*4882a593Smuzhiyun u8 valid; 6005*4882a593Smuzhiyun u16 reserved0; 6006*4882a593Smuzhiyun #endif 6007*4882a593Smuzhiyun u32 reserved1; 6008*4882a593Smuzhiyun }; 6009*4882a593Smuzhiyun 6010*4882a593Smuzhiyun 6011*4882a593Smuzhiyun /* 6012*4882a593Smuzhiyun * State of VF-PF channel 6013*4882a593Smuzhiyun */ 6014*4882a593Smuzhiyun enum vf_pf_channel_state { 6015*4882a593Smuzhiyun VF_PF_CHANNEL_STATE_READY, 6016*4882a593Smuzhiyun VF_PF_CHANNEL_STATE_WAITING_FOR_ACK, 6017*4882a593Smuzhiyun MAX_VF_PF_CHANNEL_STATE 6018*4882a593Smuzhiyun }; 6019*4882a593Smuzhiyun 6020*4882a593Smuzhiyun 6021*4882a593Smuzhiyun /* 6022*4882a593Smuzhiyun * vif_list_rule_kind 6023*4882a593Smuzhiyun */ 6024*4882a593Smuzhiyun enum vif_list_rule_kind { 6025*4882a593Smuzhiyun VIF_LIST_RULE_SET, 6026*4882a593Smuzhiyun VIF_LIST_RULE_GET, 6027*4882a593Smuzhiyun VIF_LIST_RULE_CLEAR_ALL, 6028*4882a593Smuzhiyun VIF_LIST_RULE_CLEAR_FUNC, 6029*4882a593Smuzhiyun MAX_VIF_LIST_RULE_KIND 6030*4882a593Smuzhiyun }; 6031*4882a593Smuzhiyun 6032*4882a593Smuzhiyun 6033*4882a593Smuzhiyun /* 6034*4882a593Smuzhiyun * zone A per-queue data 6035*4882a593Smuzhiyun */ 6036*4882a593Smuzhiyun struct xstorm_queue_zone_data { 6037*4882a593Smuzhiyun struct regpair reserved[4]; 6038*4882a593Smuzhiyun }; 6039*4882a593Smuzhiyun 6040*4882a593Smuzhiyun 6041*4882a593Smuzhiyun /* 6042*4882a593Smuzhiyun * zone B per-VF data 6043*4882a593Smuzhiyun */ 6044*4882a593Smuzhiyun struct xstorm_vf_zone_data { 6045*4882a593Smuzhiyun struct regpair reserved; 6046*4882a593Smuzhiyun }; 6047*4882a593Smuzhiyun 6048*4882a593Smuzhiyun #endif /* BNX2X_HSI_H */ 6049