1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2005-2016 Broadcom. 4*4882a593Smuzhiyun * All rights reserved. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Contact Information: 7*4882a593Smuzhiyun * linux-drivers@emulex.com 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * Emulex 10*4882a593Smuzhiyun * 3333 Susan Street 11*4882a593Smuzhiyun * Costa Mesa, CA 92626 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /********* Mailbox door bell *************/ 15*4882a593Smuzhiyun /* Used for driver communication with the FW. 16*4882a593Smuzhiyun * The software must write this register twice to post any command. First, 17*4882a593Smuzhiyun * it writes the register with hi=1 and the upper bits of the physical address 18*4882a593Smuzhiyun * for the MAILBOX structure. Software must poll the ready bit until this 19*4882a593Smuzhiyun * is acknowledged. Then, sotware writes the register with hi=0 with the lower 20*4882a593Smuzhiyun * bits in the address. It must poll the ready bit until the command is 21*4882a593Smuzhiyun * complete. Upon completion, the MAILBOX will contain a valid completion 22*4882a593Smuzhiyun * queue entry. 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun #define MPU_MAILBOX_DB_OFFSET 0x160 25*4882a593Smuzhiyun #define MPU_MAILBOX_DB_RDY_MASK 0x1 /* bit 0 */ 26*4882a593Smuzhiyun #define MPU_MAILBOX_DB_HI_MASK 0x2 /* bit 1 */ 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define MPU_EP_CONTROL 0 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /********** MPU semphore: used for SH & BE *************/ 31*4882a593Smuzhiyun #define SLIPORT_SOFTRESET_OFFSET 0x5c /* CSR BAR offset */ 32*4882a593Smuzhiyun #define SLIPORT_SEMAPHORE_OFFSET_BEx 0xac /* CSR BAR offset */ 33*4882a593Smuzhiyun #define SLIPORT_SEMAPHORE_OFFSET_SH 0x94 /* PCI-CFG offset */ 34*4882a593Smuzhiyun #define POST_STAGE_MASK 0x0000FFFF 35*4882a593Smuzhiyun #define POST_ERR_MASK 0x1 36*4882a593Smuzhiyun #define POST_ERR_SHIFT 31 37*4882a593Smuzhiyun #define POST_ERR_RECOVERY_CODE_MASK 0xFFF 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /* Soft Reset register masks */ 40*4882a593Smuzhiyun #define SLIPORT_SOFTRESET_SR_MASK 0x00000080 /* SR bit */ 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun /* MPU semphore POST stage values */ 43*4882a593Smuzhiyun #define POST_STAGE_AWAITING_HOST_RDY 0x1 /* FW awaiting goahead from host */ 44*4882a593Smuzhiyun #define POST_STAGE_HOST_RDY 0x2 /* Host has given go-ahed to FW */ 45*4882a593Smuzhiyun #define POST_STAGE_BE_RESET 0x3 /* Host wants to reset chip */ 46*4882a593Smuzhiyun #define POST_STAGE_ARMFW_RDY 0xc000 /* FW is done with POST */ 47*4882a593Smuzhiyun #define POST_STAGE_RECOVERABLE_ERR 0xE000 /* Recoverable err detected */ 48*4882a593Smuzhiyun /* FW has detected a UE and is dumping FAT log data */ 49*4882a593Smuzhiyun #define POST_STAGE_FAT_LOG_START 0x0D00 50*4882a593Smuzhiyun #define POST_STAGE_ARMFW_UE 0xF000 /*FW has asserted an UE*/ 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* Lancer SLIPORT registers */ 53*4882a593Smuzhiyun #define SLIPORT_STATUS_OFFSET 0x404 54*4882a593Smuzhiyun #define SLIPORT_CONTROL_OFFSET 0x408 55*4882a593Smuzhiyun #define SLIPORT_ERROR1_OFFSET 0x40C 56*4882a593Smuzhiyun #define SLIPORT_ERROR2_OFFSET 0x410 57*4882a593Smuzhiyun #define PHYSDEV_CONTROL_OFFSET 0x414 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #define SLIPORT_STATUS_ERR_MASK 0x80000000 60*4882a593Smuzhiyun #define SLIPORT_STATUS_DIP_MASK 0x02000000 61*4882a593Smuzhiyun #define SLIPORT_STATUS_RN_MASK 0x01000000 62*4882a593Smuzhiyun #define SLIPORT_STATUS_RDY_MASK 0x00800000 63*4882a593Smuzhiyun #define SLI_PORT_CONTROL_IP_MASK 0x08000000 64*4882a593Smuzhiyun #define PHYSDEV_CONTROL_FW_RESET_MASK 0x00000002 65*4882a593Smuzhiyun #define PHYSDEV_CONTROL_DD_MASK 0x00000004 66*4882a593Smuzhiyun #define PHYSDEV_CONTROL_INP_MASK 0x40000000 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #define SLIPORT_ERROR_NO_RESOURCE1 0x2 69*4882a593Smuzhiyun #define SLIPORT_ERROR_NO_RESOURCE2 0x9 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun #define SLIPORT_ERROR_FW_RESET1 0x2 72*4882a593Smuzhiyun #define SLIPORT_ERROR_FW_RESET2 0x0 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /********* Memory BAR register ************/ 75*4882a593Smuzhiyun #define PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET 0xfc 76*4882a593Smuzhiyun /* Host Interrupt Enable, if set interrupts are enabled although "PCI Interrupt 77*4882a593Smuzhiyun * Disable" may still globally block interrupts in addition to individual 78*4882a593Smuzhiyun * interrupt masks; a mechanism for the device driver to block all interrupts 79*4882a593Smuzhiyun * atomically without having to arbitrate for the PCI Interrupt Disable bit 80*4882a593Smuzhiyun * with the OS. 81*4882a593Smuzhiyun */ 82*4882a593Smuzhiyun #define MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK BIT(29) /* bit 29 */ 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /********* PCI Function Capability *********/ 85*4882a593Smuzhiyun #define BE_FUNCTION_CAPS_RSS 0x2 86*4882a593Smuzhiyun #define BE_FUNCTION_CAPS_SUPER_NIC 0x40 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /********* Power management (WOL) **********/ 89*4882a593Smuzhiyun #define PCICFG_PM_CONTROL_OFFSET 0x44 90*4882a593Smuzhiyun #define PCICFG_PM_CONTROL_MASK 0x108 /* bits 3 & 8 */ 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /********* Online Control Registers *******/ 93*4882a593Smuzhiyun #define PCICFG_ONLINE0 0xB0 94*4882a593Smuzhiyun #define PCICFG_ONLINE1 0xB4 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /********* UE Status and Mask Registers ***/ 97*4882a593Smuzhiyun #define PCICFG_UE_STATUS_LOW 0xA0 98*4882a593Smuzhiyun #define PCICFG_UE_STATUS_HIGH 0xA4 99*4882a593Smuzhiyun #define PCICFG_UE_STATUS_LOW_MASK 0xA8 100*4882a593Smuzhiyun #define PCICFG_UE_STATUS_HI_MASK 0xAC 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /******** SLI_INTF ***********************/ 103*4882a593Smuzhiyun #define SLI_INTF_REG_OFFSET 0x58 104*4882a593Smuzhiyun #define SLI_INTF_VALID_MASK 0xE0000000 105*4882a593Smuzhiyun #define SLI_INTF_VALID 0xC0000000 106*4882a593Smuzhiyun #define SLI_INTF_HINT2_MASK 0x1F000000 107*4882a593Smuzhiyun #define SLI_INTF_HINT2_SHIFT 24 108*4882a593Smuzhiyun #define SLI_INTF_HINT1_MASK 0x00FF0000 109*4882a593Smuzhiyun #define SLI_INTF_HINT1_SHIFT 16 110*4882a593Smuzhiyun #define SLI_INTF_FAMILY_MASK 0x00000F00 111*4882a593Smuzhiyun #define SLI_INTF_FAMILY_SHIFT 8 112*4882a593Smuzhiyun #define SLI_INTF_IF_TYPE_MASK 0x0000F000 113*4882a593Smuzhiyun #define SLI_INTF_IF_TYPE_SHIFT 12 114*4882a593Smuzhiyun #define SLI_INTF_REV_MASK 0x000000F0 115*4882a593Smuzhiyun #define SLI_INTF_REV_SHIFT 4 116*4882a593Smuzhiyun #define SLI_INTF_FT_MASK 0x00000001 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun #define SLI_INTF_TYPE_2 2 119*4882a593Smuzhiyun #define SLI_INTF_TYPE_3 3 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun /********* ISR0 Register offset **********/ 122*4882a593Smuzhiyun #define CEV_ISR0_OFFSET 0xC18 123*4882a593Smuzhiyun #define CEV_ISR_SIZE 4 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /********* Event Q door bell *************/ 126*4882a593Smuzhiyun #define DB_EQ_OFFSET DB_CQ_OFFSET 127*4882a593Smuzhiyun #define DB_EQ_RING_ID_MASK 0x1FF /* bits 0 - 8 */ 128*4882a593Smuzhiyun #define DB_EQ_RING_ID_EXT_MASK 0x3e00 /* bits 9-13 */ 129*4882a593Smuzhiyun #define DB_EQ_RING_ID_EXT_MASK_SHIFT (2) /* qid bits 9-13 placing at 11-15 */ 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun /* Clear the interrupt for this eq */ 132*4882a593Smuzhiyun #define DB_EQ_CLR_SHIFT (9) /* bit 9 */ 133*4882a593Smuzhiyun /* Must be 1 */ 134*4882a593Smuzhiyun #define DB_EQ_EVNT_SHIFT (10) /* bit 10 */ 135*4882a593Smuzhiyun /* Number of event entries processed */ 136*4882a593Smuzhiyun #define DB_EQ_NUM_POPPED_SHIFT (16) /* bits 16 - 28 */ 137*4882a593Smuzhiyun /* Rearm bit */ 138*4882a593Smuzhiyun #define DB_EQ_REARM_SHIFT (29) /* bit 29 */ 139*4882a593Smuzhiyun /* Rearm to interrupt delay encoding */ 140*4882a593Smuzhiyun #define DB_EQ_R2I_DLY_SHIFT (30) /* bits 30 - 31 */ 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* Rearm to interrupt (R2I) delay multiplier encoding represents 3 different 143*4882a593Smuzhiyun * values configured in CEV_REARM2IRPT_DLY_MULT_CSR register. This value is 144*4882a593Smuzhiyun * programmed by host driver while ringing an EQ doorbell(EQ_DB) if a delay 145*4882a593Smuzhiyun * between rearming the EQ and next interrupt on this EQ is desired. 146*4882a593Smuzhiyun */ 147*4882a593Smuzhiyun #define R2I_DLY_ENC_0 0 /* No delay */ 148*4882a593Smuzhiyun #define R2I_DLY_ENC_1 1 /* maps to 160us EQ delay */ 149*4882a593Smuzhiyun #define R2I_DLY_ENC_2 2 /* maps to 96us EQ delay */ 150*4882a593Smuzhiyun #define R2I_DLY_ENC_3 3 /* maps to 48us EQ delay */ 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun /********* Compl Q door bell *************/ 153*4882a593Smuzhiyun #define DB_CQ_OFFSET 0x120 154*4882a593Smuzhiyun #define DB_CQ_RING_ID_MASK 0x3FF /* bits 0 - 9 */ 155*4882a593Smuzhiyun #define DB_CQ_RING_ID_EXT_MASK 0x7C00 /* bits 10-14 */ 156*4882a593Smuzhiyun #define DB_CQ_RING_ID_EXT_MASK_SHIFT (1) /* qid bits 10-14 157*4882a593Smuzhiyun placing at 11-15 */ 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun /* Number of event entries processed */ 160*4882a593Smuzhiyun #define DB_CQ_NUM_POPPED_SHIFT (16) /* bits 16 - 28 */ 161*4882a593Smuzhiyun /* Rearm bit */ 162*4882a593Smuzhiyun #define DB_CQ_REARM_SHIFT (29) /* bit 29 */ 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun /********** TX ULP door bell *************/ 165*4882a593Smuzhiyun #define DB_TXULP1_OFFSET 0x60 166*4882a593Smuzhiyun #define DB_TXULP_RING_ID_MASK 0x7FF /* bits 0 - 10 */ 167*4882a593Smuzhiyun /* Number of tx entries posted */ 168*4882a593Smuzhiyun #define DB_TXULP_NUM_POSTED_SHIFT (16) /* bits 16 - 29 */ 169*4882a593Smuzhiyun #define DB_TXULP_NUM_POSTED_MASK 0x3FFF /* bits 16 - 29 */ 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun /********** RQ(erx) door bell ************/ 172*4882a593Smuzhiyun #define DB_RQ_OFFSET 0x100 173*4882a593Smuzhiyun #define DB_RQ_RING_ID_MASK 0x3FF /* bits 0 - 9 */ 174*4882a593Smuzhiyun /* Number of rx frags posted */ 175*4882a593Smuzhiyun #define DB_RQ_NUM_POSTED_SHIFT (24) /* bits 24 - 31 */ 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /********** MCC door bell ************/ 178*4882a593Smuzhiyun #define DB_MCCQ_OFFSET 0x140 179*4882a593Smuzhiyun #define DB_MCCQ_RING_ID_MASK 0x7FF /* bits 0 - 10 */ 180*4882a593Smuzhiyun /* Number of entries posted */ 181*4882a593Smuzhiyun #define DB_MCCQ_NUM_POSTED_SHIFT (16) /* bits 16 - 29 */ 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun /********** SRIOV VF PCICFG OFFSET ********/ 184*4882a593Smuzhiyun #define SRIOV_VF_PCICFG_OFFSET (4096) 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun /********** FAT TABLE ********/ 187*4882a593Smuzhiyun #define RETRIEVE_FAT 0 188*4882a593Smuzhiyun #define QUERY_FAT 1 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun /************* Rx Packet Type Encoding **************/ 191*4882a593Smuzhiyun #define BE_UNICAST_PACKET 0 192*4882a593Smuzhiyun #define BE_MULTICAST_PACKET 1 193*4882a593Smuzhiyun #define BE_BROADCAST_PACKET 2 194*4882a593Smuzhiyun #define BE_RSVD_PACKET 3 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun /* 197*4882a593Smuzhiyun * BE descriptors: host memory data structures whose formats 198*4882a593Smuzhiyun * are hardwired in BE silicon. 199*4882a593Smuzhiyun */ 200*4882a593Smuzhiyun /* Event Queue Descriptor */ 201*4882a593Smuzhiyun #define EQ_ENTRY_VALID_MASK 0x1 /* bit 0 */ 202*4882a593Smuzhiyun #define EQ_ENTRY_RES_ID_MASK 0xFFFF /* bits 16 - 31 */ 203*4882a593Smuzhiyun #define EQ_ENTRY_RES_ID_SHIFT 16 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun struct be_eq_entry { 206*4882a593Smuzhiyun u32 evt; 207*4882a593Smuzhiyun }; 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun /* TX Queue Descriptor */ 210*4882a593Smuzhiyun #define ETH_WRB_FRAG_LEN_MASK 0xFFFF 211*4882a593Smuzhiyun struct be_eth_wrb { 212*4882a593Smuzhiyun __le32 frag_pa_hi; /* dword 0 */ 213*4882a593Smuzhiyun __le32 frag_pa_lo; /* dword 1 */ 214*4882a593Smuzhiyun u32 rsvd0; /* dword 2 */ 215*4882a593Smuzhiyun __le32 frag_len; /* dword 3: bits 0 - 15 */ 216*4882a593Smuzhiyun } __packed; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun /* Pseudo amap definition for eth_hdr_wrb in which each bit of the 219*4882a593Smuzhiyun * actual structure is defined as a byte : used to calculate 220*4882a593Smuzhiyun * offset/shift/mask of each field */ 221*4882a593Smuzhiyun struct amap_eth_hdr_wrb { 222*4882a593Smuzhiyun u8 rsvd0[32]; /* dword 0 */ 223*4882a593Smuzhiyun u8 rsvd1[32]; /* dword 1 */ 224*4882a593Smuzhiyun u8 complete; /* dword 2 */ 225*4882a593Smuzhiyun u8 event; 226*4882a593Smuzhiyun u8 crc; 227*4882a593Smuzhiyun u8 forward; 228*4882a593Smuzhiyun u8 lso6; 229*4882a593Smuzhiyun u8 mgmt; 230*4882a593Smuzhiyun u8 ipcs; 231*4882a593Smuzhiyun u8 udpcs; 232*4882a593Smuzhiyun u8 tcpcs; 233*4882a593Smuzhiyun u8 lso; 234*4882a593Smuzhiyun u8 vlan; 235*4882a593Smuzhiyun u8 gso[2]; 236*4882a593Smuzhiyun u8 num_wrb[5]; 237*4882a593Smuzhiyun u8 lso_mss[14]; 238*4882a593Smuzhiyun u8 len[16]; /* dword 3 */ 239*4882a593Smuzhiyun u8 vlan_tag[16]; 240*4882a593Smuzhiyun } __packed; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun #define TX_HDR_WRB_COMPL 1 /* word 2 */ 243*4882a593Smuzhiyun #define TX_HDR_WRB_EVT BIT(1) /* word 2 */ 244*4882a593Smuzhiyun #define TX_HDR_WRB_NUM_SHIFT 13 /* word 2: bits 13:17 */ 245*4882a593Smuzhiyun #define TX_HDR_WRB_NUM_MASK 0x1F /* word 2: bits 13:17 */ 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun struct be_eth_hdr_wrb { 248*4882a593Smuzhiyun __le32 dw[4]; 249*4882a593Smuzhiyun }; 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun /********* Tx Compl Status Encoding *********/ 252*4882a593Smuzhiyun #define BE_TX_COMP_HDR_PARSE_ERR 0x2 253*4882a593Smuzhiyun #define BE_TX_COMP_NDMA_ERR 0x3 254*4882a593Smuzhiyun #define BE_TX_COMP_ACL_ERR 0x5 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun #define LANCER_TX_COMP_LSO_ERR 0x1 257*4882a593Smuzhiyun #define LANCER_TX_COMP_HSW_DROP_MAC_ERR 0x3 258*4882a593Smuzhiyun #define LANCER_TX_COMP_HSW_DROP_VLAN_ERR 0x5 259*4882a593Smuzhiyun #define LANCER_TX_COMP_QINQ_ERR 0x7 260*4882a593Smuzhiyun #define LANCER_TX_COMP_SGE_ERR 0x9 261*4882a593Smuzhiyun #define LANCER_TX_COMP_PARITY_ERR 0xb 262*4882a593Smuzhiyun #define LANCER_TX_COMP_DMA_ERR 0xd 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun /* TX Compl Queue Descriptor */ 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun /* Pseudo amap definition for eth_tx_compl in which each bit of the 267*4882a593Smuzhiyun * actual structure is defined as a byte: used to calculate 268*4882a593Smuzhiyun * offset/shift/mask of each field */ 269*4882a593Smuzhiyun struct amap_eth_tx_compl { 270*4882a593Smuzhiyun u8 wrb_index[16]; /* dword 0 */ 271*4882a593Smuzhiyun u8 ct[2]; /* dword 0 */ 272*4882a593Smuzhiyun u8 port[2]; /* dword 0 */ 273*4882a593Smuzhiyun u8 rsvd0[8]; /* dword 0 */ 274*4882a593Smuzhiyun u8 status[4]; /* dword 0 */ 275*4882a593Smuzhiyun u8 user_bytes[16]; /* dword 1 */ 276*4882a593Smuzhiyun u8 nwh_bytes[8]; /* dword 1 */ 277*4882a593Smuzhiyun u8 lso; /* dword 1 */ 278*4882a593Smuzhiyun u8 cast_enc[2]; /* dword 1 */ 279*4882a593Smuzhiyun u8 rsvd1[5]; /* dword 1 */ 280*4882a593Smuzhiyun u8 rsvd2[32]; /* dword 2 */ 281*4882a593Smuzhiyun u8 pkts[16]; /* dword 3 */ 282*4882a593Smuzhiyun u8 ringid[11]; /* dword 3 */ 283*4882a593Smuzhiyun u8 hash_val[4]; /* dword 3 */ 284*4882a593Smuzhiyun u8 valid; /* dword 3 */ 285*4882a593Smuzhiyun } __packed; 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun struct be_eth_tx_compl { 288*4882a593Smuzhiyun u32 dw[4]; 289*4882a593Smuzhiyun }; 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun /* RX Queue Descriptor */ 292*4882a593Smuzhiyun struct be_eth_rx_d { 293*4882a593Smuzhiyun u32 fragpa_hi; 294*4882a593Smuzhiyun u32 fragpa_lo; 295*4882a593Smuzhiyun }; 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /* RX Compl Queue Descriptor */ 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun /* Pseudo amap definition for BE2 and BE3 legacy mode eth_rx_compl in which 300*4882a593Smuzhiyun * each bit of the actual structure is defined as a byte: used to calculate 301*4882a593Smuzhiyun * offset/shift/mask of each field */ 302*4882a593Smuzhiyun struct amap_eth_rx_compl_v0 { 303*4882a593Smuzhiyun u8 vlan_tag[16]; /* dword 0 */ 304*4882a593Smuzhiyun u8 pktsize[14]; /* dword 0 */ 305*4882a593Smuzhiyun u8 port; /* dword 0 */ 306*4882a593Smuzhiyun u8 ip_opt; /* dword 0 */ 307*4882a593Smuzhiyun u8 err; /* dword 1 */ 308*4882a593Smuzhiyun u8 rsshp; /* dword 1 */ 309*4882a593Smuzhiyun u8 ipf; /* dword 1 */ 310*4882a593Smuzhiyun u8 tcpf; /* dword 1 */ 311*4882a593Smuzhiyun u8 udpf; /* dword 1 */ 312*4882a593Smuzhiyun u8 ipcksm; /* dword 1 */ 313*4882a593Smuzhiyun u8 l4_cksm; /* dword 1 */ 314*4882a593Smuzhiyun u8 ip_version; /* dword 1 */ 315*4882a593Smuzhiyun u8 macdst[6]; /* dword 1 */ 316*4882a593Smuzhiyun u8 vtp; /* dword 1 */ 317*4882a593Smuzhiyun u8 ip_frag; /* dword 1 */ 318*4882a593Smuzhiyun u8 fragndx[10]; /* dword 1 */ 319*4882a593Smuzhiyun u8 ct[2]; /* dword 1 */ 320*4882a593Smuzhiyun u8 sw; /* dword 1 */ 321*4882a593Smuzhiyun u8 numfrags[3]; /* dword 1 */ 322*4882a593Smuzhiyun u8 rss_flush; /* dword 2 */ 323*4882a593Smuzhiyun u8 cast_enc[2]; /* dword 2 */ 324*4882a593Smuzhiyun u8 qnq; /* dword 2 */ 325*4882a593Smuzhiyun u8 rss_bank; /* dword 2 */ 326*4882a593Smuzhiyun u8 rsvd1[23]; /* dword 2 */ 327*4882a593Smuzhiyun u8 lro_pkt; /* dword 2 */ 328*4882a593Smuzhiyun u8 rsvd2[2]; /* dword 2 */ 329*4882a593Smuzhiyun u8 valid; /* dword 2 */ 330*4882a593Smuzhiyun u8 rsshash[32]; /* dword 3 */ 331*4882a593Smuzhiyun } __packed; 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun /* Pseudo amap definition for BE3 native mode eth_rx_compl in which 334*4882a593Smuzhiyun * each bit of the actual structure is defined as a byte: used to calculate 335*4882a593Smuzhiyun * offset/shift/mask of each field */ 336*4882a593Smuzhiyun struct amap_eth_rx_compl_v1 { 337*4882a593Smuzhiyun u8 vlan_tag[16]; /* dword 0 */ 338*4882a593Smuzhiyun u8 pktsize[14]; /* dword 0 */ 339*4882a593Smuzhiyun u8 vtp; /* dword 0 */ 340*4882a593Smuzhiyun u8 ip_opt; /* dword 0 */ 341*4882a593Smuzhiyun u8 err; /* dword 1 */ 342*4882a593Smuzhiyun u8 rsshp; /* dword 1 */ 343*4882a593Smuzhiyun u8 ipf; /* dword 1 */ 344*4882a593Smuzhiyun u8 tcpf; /* dword 1 */ 345*4882a593Smuzhiyun u8 udpf; /* dword 1 */ 346*4882a593Smuzhiyun u8 ipcksm; /* dword 1 */ 347*4882a593Smuzhiyun u8 l4_cksm; /* dword 1 */ 348*4882a593Smuzhiyun u8 ip_version; /* dword 1 */ 349*4882a593Smuzhiyun u8 macdst[7]; /* dword 1 */ 350*4882a593Smuzhiyun u8 rsvd0; /* dword 1 */ 351*4882a593Smuzhiyun u8 fragndx[10]; /* dword 1 */ 352*4882a593Smuzhiyun u8 ct[2]; /* dword 1 */ 353*4882a593Smuzhiyun u8 sw; /* dword 1 */ 354*4882a593Smuzhiyun u8 numfrags[3]; /* dword 1 */ 355*4882a593Smuzhiyun u8 rss_flush; /* dword 2 */ 356*4882a593Smuzhiyun u8 cast_enc[2]; /* dword 2 */ 357*4882a593Smuzhiyun u8 qnq; /* dword 2 */ 358*4882a593Smuzhiyun u8 rss_bank; /* dword 2 */ 359*4882a593Smuzhiyun u8 port[2]; /* dword 2 */ 360*4882a593Smuzhiyun u8 vntagp; /* dword 2 */ 361*4882a593Smuzhiyun u8 header_len[8]; /* dword 2 */ 362*4882a593Smuzhiyun u8 header_split[2]; /* dword 2 */ 363*4882a593Smuzhiyun u8 rsvd1[12]; /* dword 2 */ 364*4882a593Smuzhiyun u8 tunneled; 365*4882a593Smuzhiyun u8 valid; /* dword 2 */ 366*4882a593Smuzhiyun u8 rsshash[32]; /* dword 3 */ 367*4882a593Smuzhiyun } __packed; 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun struct be_eth_rx_compl { 370*4882a593Smuzhiyun u32 dw[4]; 371*4882a593Smuzhiyun }; 372