1d1a890faSShreyas Bhatewara /* 2d1a890faSShreyas Bhatewara * Linux driver for VMware's vmxnet3 ethernet NIC. 3d1a890faSShreyas Bhatewara * 44978478aSRonak Doshi * Copyright (C) 2008-2024, VMware, Inc. All Rights Reserved. 5d1a890faSShreyas Bhatewara * 6d1a890faSShreyas Bhatewara * This program is free software; you can redistribute it and/or modify it 7d1a890faSShreyas Bhatewara * under the terms of the GNU General Public License as published by the 8d1a890faSShreyas Bhatewara * Free Software Foundation; version 2 of the License and no later version. 9d1a890faSShreyas Bhatewara * 10d1a890faSShreyas Bhatewara * This program is distributed in the hope that it will be useful, but 11d1a890faSShreyas Bhatewara * WITHOUT ANY WARRANTY; without even the implied warranty of 12d1a890faSShreyas Bhatewara * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 13d1a890faSShreyas Bhatewara * NON INFRINGEMENT. See the GNU General Public License for more 14d1a890faSShreyas Bhatewara * details. 15d1a890faSShreyas Bhatewara * 16d1a890faSShreyas Bhatewara * You should have received a copy of the GNU General Public License 17d1a890faSShreyas Bhatewara * along with this program; if not, write to the Free Software 18d1a890faSShreyas Bhatewara * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19d1a890faSShreyas Bhatewara * 20d1a890faSShreyas Bhatewara * The full GNU General Public License is included in this distribution in 21d1a890faSShreyas Bhatewara * the file called "COPYING". 22d1a890faSShreyas Bhatewara * 23190af10fSShrikrishna Khare * Maintained by: pv-drivers@vmware.com 24d1a890faSShreyas Bhatewara * 25d1a890faSShreyas Bhatewara */ 26d1a890faSShreyas Bhatewara 27d1a890faSShreyas Bhatewara #ifndef _VMXNET3_DEFS_H_ 28d1a890faSShreyas Bhatewara #define _VMXNET3_DEFS_H_ 29d1a890faSShreyas Bhatewara 30d1a890faSShreyas Bhatewara #include "upt1_defs.h" 31d1a890faSShreyas Bhatewara 32d1a890faSShreyas Bhatewara /* all registers are 32 bit wide */ 33d1a890faSShreyas Bhatewara /* BAR 1 */ 34d1a890faSShreyas Bhatewara enum { 35d1a890faSShreyas Bhatewara VMXNET3_REG_VRRS = 0x0, /* Vmxnet3 Revision Report Selection */ 36d1a890faSShreyas Bhatewara VMXNET3_REG_UVRS = 0x8, /* UPT Version Report Selection */ 37d1a890faSShreyas Bhatewara VMXNET3_REG_DSAL = 0x10, /* Driver Shared Address Low */ 38d1a890faSShreyas Bhatewara VMXNET3_REG_DSAH = 0x18, /* Driver Shared Address High */ 39d1a890faSShreyas Bhatewara VMXNET3_REG_CMD = 0x20, /* Command */ 40d1a890faSShreyas Bhatewara VMXNET3_REG_MACL = 0x28, /* MAC Address Low */ 41d1a890faSShreyas Bhatewara VMXNET3_REG_MACH = 0x30, /* MAC Address High */ 42d1a890faSShreyas Bhatewara VMXNET3_REG_ICR = 0x38, /* Interrupt Cause Register */ 436f91f4baSRonak Doshi VMXNET3_REG_ECR = 0x40, /* Event Cause Register */ 446f91f4baSRonak Doshi VMXNET3_REG_DCR = 0x48, /* Device capability register, 456f91f4baSRonak Doshi * from 0x48 to 0x80 466f91f4baSRonak Doshi */ 476f91f4baSRonak Doshi VMXNET3_REG_PTCR = 0x88, /* Passthru capbility register 486f91f4baSRonak Doshi * from 0x88 to 0xb0 496f91f4baSRonak Doshi */ 50d1a890faSShreyas Bhatewara }; 51d1a890faSShreyas Bhatewara 52d1a890faSShreyas Bhatewara /* BAR 0 */ 53d1a890faSShreyas Bhatewara enum { 54d1a890faSShreyas Bhatewara VMXNET3_REG_IMR = 0x0, /* Interrupt Mask Register */ 55d1a890faSShreyas Bhatewara VMXNET3_REG_TXPROD = 0x600, /* Tx Producer Index */ 56d1a890faSShreyas Bhatewara VMXNET3_REG_RXPROD = 0x800, /* Rx Producer Index for ring 1 */ 57d1a890faSShreyas Bhatewara VMXNET3_REG_RXPROD2 = 0xA00 /* Rx Producer Index for ring 2 */ 58d1a890faSShreyas Bhatewara }; 59d1a890faSShreyas Bhatewara 60543fb674SRonak Doshi /* For Large PT BAR, the following offset to DB register */ 61543fb674SRonak Doshi enum { 62543fb674SRonak Doshi VMXNET3_REG_LB_TXPROD = 0x1000, /* Tx Producer Index */ 63543fb674SRonak Doshi VMXNET3_REG_LB_RXPROD = 0x1400, /* Rx Producer Index for ring 1 */ 64543fb674SRonak Doshi VMXNET3_REG_LB_RXPROD2 = 0x1800, /* Rx Producer Index for ring 2 */ 65543fb674SRonak Doshi }; 66543fb674SRonak Doshi 67d1a890faSShreyas Bhatewara #define VMXNET3_PT_REG_SIZE 4096 /* BAR 0 */ 68543fb674SRonak Doshi #define VMXNET3_LARGE_PT_REG_SIZE 8192 /* large PT pages */ 69d1a890faSShreyas Bhatewara #define VMXNET3_VD_REG_SIZE 4096 /* BAR 1 */ 70543fb674SRonak Doshi #define VMXNET3_LARGE_BAR0_REG_SIZE (4096 * 4096) /* LARGE BAR 0 */ 71543fb674SRonak Doshi #define VMXNET3_OOB_REG_SIZE (4094 * 4096) /* OOB pages */ 72d1a890faSShreyas Bhatewara 73d1a890faSShreyas Bhatewara #define VMXNET3_REG_ALIGN 8 /* All registers are 8-byte aligned. */ 74d1a890faSShreyas Bhatewara #define VMXNET3_REG_ALIGN_MASK 0x7 75d1a890faSShreyas Bhatewara 76d1a890faSShreyas Bhatewara /* I/O Mapped access to registers */ 77d1a890faSShreyas Bhatewara #define VMXNET3_IO_TYPE_PT 0 78d1a890faSShreyas Bhatewara #define VMXNET3_IO_TYPE_VD 1 79d1a890faSShreyas Bhatewara #define VMXNET3_IO_ADDR(type, reg) (((type) << 24) | ((reg) & 0xFFFFFF)) 80d1a890faSShreyas Bhatewara #define VMXNET3_IO_TYPE(addr) ((addr) >> 24) 81d1a890faSShreyas Bhatewara #define VMXNET3_IO_REG(addr) ((addr) & 0xFFFFFF) 82d1a890faSShreyas Bhatewara 834c22fad7SRonak Doshi #define VMXNET3_PMC_PSEUDO_TSC 0x10003 844c22fad7SRonak Doshi 85d1a890faSShreyas Bhatewara enum { 86d1a890faSShreyas Bhatewara VMXNET3_CMD_FIRST_SET = 0xCAFE0000, 87d1a890faSShreyas Bhatewara VMXNET3_CMD_ACTIVATE_DEV = VMXNET3_CMD_FIRST_SET, 88d1a890faSShreyas Bhatewara VMXNET3_CMD_QUIESCE_DEV, 89d1a890faSShreyas Bhatewara VMXNET3_CMD_RESET_DEV, 90d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_RX_MODE, 91d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_MAC_FILTERS, 92d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_VLAN_FILTERS, 93d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_RSSIDT, 94d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_IML, 95d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_PMCFG, 96d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_FEATURE, 97190af10fSShrikrishna Khare VMXNET3_CMD_RESERVED1, 98d1a890faSShreyas Bhatewara VMXNET3_CMD_LOAD_PLUGIN, 99190af10fSShrikrishna Khare VMXNET3_CMD_RESERVED2, 100f35c7480SShrikrishna Khare VMXNET3_CMD_RESERVED3, 1014edef40eSShrikrishna Khare VMXNET3_CMD_SET_COALESCE, 10247443222SShrikrishna Khare VMXNET3_CMD_REGISTER_MEMREGS, 103d3a8a9e5SRonak Doshi VMXNET3_CMD_SET_RSS_FIELDS, 104c7112ebdSRonak Doshi VMXNET3_CMD_RESERVED4, 105c7112ebdSRonak Doshi VMXNET3_CMD_RESERVED5, 106c7112ebdSRonak Doshi VMXNET3_CMD_SET_RING_BUFFER_SIZE, 107d1a890faSShreyas Bhatewara 108d1a890faSShreyas Bhatewara VMXNET3_CMD_FIRST_GET = 0xF00D0000, 109d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_QUEUE_STATUS = VMXNET3_CMD_FIRST_GET, 110d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_STATS, 111d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_LINK, 112d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_PERM_MAC_LO, 113d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_PERM_MAC_HI, 114d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_DID_LO, 115d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_DID_HI, 116d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_DEV_EXTRA_INFO, 117190af10fSShrikrishna Khare VMXNET3_CMD_GET_CONF_INTR, 118190af10fSShrikrishna Khare VMXNET3_CMD_GET_RESERVED1, 1194edef40eSShrikrishna Khare VMXNET3_CMD_GET_TXDATA_DESC_SIZE, 1204edef40eSShrikrishna Khare VMXNET3_CMD_GET_COALESCE, 121d3a8a9e5SRonak Doshi VMXNET3_CMD_GET_RSS_FIELDS, 12239f9895aSRonak Doshi VMXNET3_CMD_GET_RESERVED2, 12339f9895aSRonak Doshi VMXNET3_CMD_GET_RESERVED3, 12439f9895aSRonak Doshi VMXNET3_CMD_GET_MAX_QUEUES_CONF, 1256f91f4baSRonak Doshi VMXNET3_CMD_GET_RESERVED4, 1266f91f4baSRonak Doshi VMXNET3_CMD_GET_MAX_CAPABILITIES, 1276f91f4baSRonak Doshi VMXNET3_CMD_GET_DCR0_REG, 1284c22fad7SRonak Doshi VMXNET3_CMD_GET_TSRING_DESC_SIZE, 129*2e5010fdSRonak Doshi VMXNET3_CMD_GET_DISABLED_OFFLOADS, 130d1a890faSShreyas Bhatewara }; 131d1a890faSShreyas Bhatewara 132115924b6SShreyas Bhatewara /* 133115924b6SShreyas Bhatewara * Little Endian layout of bitfields - 134115924b6SShreyas Bhatewara * Byte 0 : 7.....len.....0 135dacce2beSRonak Doshi * Byte 1 : oco gen 13.len.8 136115924b6SShreyas Bhatewara * Byte 2 : 5.msscof.0 ext1 dtype 137115924b6SShreyas Bhatewara * Byte 3 : 13...msscof...6 138115924b6SShreyas Bhatewara * 139115924b6SShreyas Bhatewara * Big Endian layout of bitfields - 140115924b6SShreyas Bhatewara * Byte 0: 13...msscof...6 141115924b6SShreyas Bhatewara * Byte 1 : 5.msscof.0 ext1 dtype 142dacce2beSRonak Doshi * Byte 2 : oco gen 13.len.8 143115924b6SShreyas Bhatewara * Byte 3 : 7.....len.....0 144115924b6SShreyas Bhatewara * 145115924b6SShreyas Bhatewara * Thus, le32_to_cpu on the dword will allow the big endian driver to read 146115924b6SShreyas Bhatewara * the bit fields correctly. And cpu_to_le32 will convert bitfields 147115924b6SShreyas Bhatewara * bit fields written by big endian driver to format required by device. 148115924b6SShreyas Bhatewara */ 149d1a890faSShreyas Bhatewara 150115924b6SShreyas Bhatewara struct Vmxnet3_TxDesc { 151115924b6SShreyas Bhatewara __le64 addr; 152115924b6SShreyas Bhatewara 153115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 154115924b6SShreyas Bhatewara u32 msscof:14; /* MSS, checksum offset, flags */ 15560cafa03SRonak Doshi u32 ext1:1; /* set to 1 to indicate inner csum/tso, vmxnet3 v7 */ 156115924b6SShreyas Bhatewara u32 dtype:1; /* descriptor type */ 15760cafa03SRonak Doshi u32 oco:1; /* Outer csum offload */ 158115924b6SShreyas Bhatewara u32 gen:1; /* generation bit */ 159115924b6SShreyas Bhatewara u32 len:14; 160115924b6SShreyas Bhatewara #else 161d1a890faSShreyas Bhatewara u32 len:14; 162d1a890faSShreyas Bhatewara u32 gen:1; /* generation bit */ 16360cafa03SRonak Doshi u32 oco:1; /* Outer csum offload */ 164d1a890faSShreyas Bhatewara u32 dtype:1; /* descriptor type */ 16560cafa03SRonak Doshi u32 ext1:1; /* set to 1 to indicate inner csum/tso, vmxnet3 v7 */ 166d1a890faSShreyas Bhatewara u32 msscof:14; /* MSS, checksum offset, flags */ 167115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 168d1a890faSShreyas Bhatewara 169115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 170115924b6SShreyas Bhatewara u32 tci:16; /* Tag to Insert */ 171115924b6SShreyas Bhatewara u32 ti:1; /* VLAN Tag Insertion */ 172115924b6SShreyas Bhatewara u32 ext2:1; 173115924b6SShreyas Bhatewara u32 cq:1; /* completion request */ 174115924b6SShreyas Bhatewara u32 eop:1; /* End Of Packet */ 175115924b6SShreyas Bhatewara u32 om:2; /* offload mode */ 176115924b6SShreyas Bhatewara u32 hlen:10; /* header len */ 177115924b6SShreyas Bhatewara #else 178d1a890faSShreyas Bhatewara u32 hlen:10; /* header len */ 179d1a890faSShreyas Bhatewara u32 om:2; /* offload mode */ 180d1a890faSShreyas Bhatewara u32 eop:1; /* End Of Packet */ 181d1a890faSShreyas Bhatewara u32 cq:1; /* completion request */ 182d1a890faSShreyas Bhatewara u32 ext2:1; 183d1a890faSShreyas Bhatewara u32 ti:1; /* VLAN Tag Insertion */ 184d1a890faSShreyas Bhatewara u32 tci:16; /* Tag to Insert */ 185115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 186d1a890faSShreyas Bhatewara }; 187d1a890faSShreyas Bhatewara 188d1a890faSShreyas Bhatewara /* TxDesc.OM values */ 189d1a890faSShreyas Bhatewara #define VMXNET3_OM_NONE 0 190dacce2beSRonak Doshi #define VMXNET3_OM_ENCAP 1 191d1a890faSShreyas Bhatewara #define VMXNET3_OM_CSUM 2 192d1a890faSShreyas Bhatewara #define VMXNET3_OM_TSO 3 193d1a890faSShreyas Bhatewara 194d1a890faSShreyas Bhatewara /* fields in TxDesc we access w/o using bit fields */ 195d1a890faSShreyas Bhatewara #define VMXNET3_TXD_EOP_SHIFT 12 196d1a890faSShreyas Bhatewara #define VMXNET3_TXD_CQ_SHIFT 13 197d1a890faSShreyas Bhatewara #define VMXNET3_TXD_GEN_SHIFT 14 198115924b6SShreyas Bhatewara #define VMXNET3_TXD_EOP_DWORD_SHIFT 3 199115924b6SShreyas Bhatewara #define VMXNET3_TXD_GEN_DWORD_SHIFT 2 200d1a890faSShreyas Bhatewara 201d1a890faSShreyas Bhatewara #define VMXNET3_TXD_CQ (1 << VMXNET3_TXD_CQ_SHIFT) 202d1a890faSShreyas Bhatewara #define VMXNET3_TXD_EOP (1 << VMXNET3_TXD_EOP_SHIFT) 203d1a890faSShreyas Bhatewara #define VMXNET3_TXD_GEN (1 << VMXNET3_TXD_GEN_SHIFT) 204d1a890faSShreyas Bhatewara 205d1a890faSShreyas Bhatewara #define VMXNET3_HDR_COPY_SIZE 128 206d1a890faSShreyas Bhatewara 207d1a890faSShreyas Bhatewara 208d1a890faSShreyas Bhatewara struct Vmxnet3_TxDataDesc { 209d1a890faSShreyas Bhatewara u8 data[VMXNET3_HDR_COPY_SIZE]; 210d1a890faSShreyas Bhatewara }; 211d1a890faSShreyas Bhatewara 21250a5ce3eSShrikrishna Khare typedef u8 Vmxnet3_RxDataDesc; 21350a5ce3eSShrikrishna Khare 214115924b6SShreyas Bhatewara #define VMXNET3_TCD_GEN_SHIFT 31 215115924b6SShreyas Bhatewara #define VMXNET3_TCD_GEN_SIZE 1 216115924b6SShreyas Bhatewara #define VMXNET3_TCD_TXIDX_SHIFT 0 217115924b6SShreyas Bhatewara #define VMXNET3_TCD_TXIDX_SIZE 12 218115924b6SShreyas Bhatewara #define VMXNET3_TCD_GEN_DWORD_SHIFT 3 219d1a890faSShreyas Bhatewara 220d1a890faSShreyas Bhatewara struct Vmxnet3_TxCompDesc { 221d1a890faSShreyas Bhatewara u32 txdIdx:12; /* Index of the EOP TxDesc */ 222d1a890faSShreyas Bhatewara u32 ext1:20; 223d1a890faSShreyas Bhatewara 224115924b6SShreyas Bhatewara __le32 ext2; 225115924b6SShreyas Bhatewara __le32 ext3; 226d1a890faSShreyas Bhatewara 227d1a890faSShreyas Bhatewara u32 rsvd:24; 228d1a890faSShreyas Bhatewara u32 type:7; /* completion type */ 229d1a890faSShreyas Bhatewara u32 gen:1; /* generation bit */ 230d1a890faSShreyas Bhatewara }; 231d1a890faSShreyas Bhatewara 232d1a890faSShreyas Bhatewara struct Vmxnet3_RxDesc { 233115924b6SShreyas Bhatewara __le64 addr; 234d1a890faSShreyas Bhatewara 235115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 236115924b6SShreyas Bhatewara u32 gen:1; /* Generation bit */ 237115924b6SShreyas Bhatewara u32 rsvd:15; 238115924b6SShreyas Bhatewara u32 dtype:1; /* Descriptor type */ 239115924b6SShreyas Bhatewara u32 btype:1; /* Buffer Type */ 240115924b6SShreyas Bhatewara u32 len:14; 241115924b6SShreyas Bhatewara #else 242d1a890faSShreyas Bhatewara u32 len:14; 243d1a890faSShreyas Bhatewara u32 btype:1; /* Buffer Type */ 244d1a890faSShreyas Bhatewara u32 dtype:1; /* Descriptor type */ 245d1a890faSShreyas Bhatewara u32 rsvd:15; 246d1a890faSShreyas Bhatewara u32 gen:1; /* Generation bit */ 247115924b6SShreyas Bhatewara #endif 248d1a890faSShreyas Bhatewara u32 ext1; 249d1a890faSShreyas Bhatewara }; 250d1a890faSShreyas Bhatewara 251d1a890faSShreyas Bhatewara /* values of RXD.BTYPE */ 252d1a890faSShreyas Bhatewara #define VMXNET3_RXD_BTYPE_HEAD 0 /* head only */ 253d1a890faSShreyas Bhatewara #define VMXNET3_RXD_BTYPE_BODY 1 /* body only */ 254d1a890faSShreyas Bhatewara 255d1a890faSShreyas Bhatewara /* fields in RxDesc we access w/o using bit fields */ 256d1a890faSShreyas Bhatewara #define VMXNET3_RXD_BTYPE_SHIFT 14 257d1a890faSShreyas Bhatewara #define VMXNET3_RXD_GEN_SHIFT 31 258d1a890faSShreyas Bhatewara 259dacce2beSRonak Doshi #define VMXNET3_RCD_HDR_INNER_SHIFT 13 260dacce2beSRonak Doshi 2614c22fad7SRonak Doshi struct Vmxnet3TSInfo { 2624c22fad7SRonak Doshi u64 tsData:56; 2634c22fad7SRonak Doshi u64 tsType:4; 2644c22fad7SRonak Doshi u64 tsi:1; //bit to indicate to set ts 2654c22fad7SRonak Doshi u64 pad:3; 2664c22fad7SRonak Doshi u64 pad2; 2674c22fad7SRonak Doshi }; 2684c22fad7SRonak Doshi 2694c22fad7SRonak Doshi struct Vmxnet3_TxTSDesc { 2704c22fad7SRonak Doshi struct Vmxnet3TSInfo ts; 2714c22fad7SRonak Doshi u64 pad[14]; 2724c22fad7SRonak Doshi }; 2734c22fad7SRonak Doshi 2744c22fad7SRonak Doshi struct Vmxnet3_RxTSDesc { 2754c22fad7SRonak Doshi struct Vmxnet3TSInfo ts; 2764c22fad7SRonak Doshi u64 pad[14]; 2774c22fad7SRonak Doshi }; 2784c22fad7SRonak Doshi 279d1a890faSShreyas Bhatewara struct Vmxnet3_RxCompDesc { 280115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 281115924b6SShreyas Bhatewara u32 ext2:1; 282115924b6SShreyas Bhatewara u32 cnc:1; /* Checksum Not Calculated */ 283115924b6SShreyas Bhatewara u32 rssType:4; /* RSS hash type used */ 284115924b6SShreyas Bhatewara u32 rqID:10; /* rx queue/ring ID */ 285115924b6SShreyas Bhatewara u32 sop:1; /* Start of Packet */ 286115924b6SShreyas Bhatewara u32 eop:1; /* End of Packet */ 28760cafa03SRonak Doshi u32 ext1:2; /* bit 0: indicating v4/v6/.. is for inner header */ 28860cafa03SRonak Doshi /* bit 1: indicating rssType is based on inner header */ 289115924b6SShreyas Bhatewara u32 rxdIdx:12; /* Index of the RxDesc */ 290115924b6SShreyas Bhatewara #else 291d1a890faSShreyas Bhatewara u32 rxdIdx:12; /* Index of the RxDesc */ 29260cafa03SRonak Doshi u32 ext1:2; /* bit 0: indicating v4/v6/.. is for inner header */ 29360cafa03SRonak Doshi /* bit 1: indicating rssType is based on inner header */ 294d1a890faSShreyas Bhatewara u32 eop:1; /* End of Packet */ 295d1a890faSShreyas Bhatewara u32 sop:1; /* Start of Packet */ 296d1a890faSShreyas Bhatewara u32 rqID:10; /* rx queue/ring ID */ 297d1a890faSShreyas Bhatewara u32 rssType:4; /* RSS hash type used */ 298d1a890faSShreyas Bhatewara u32 cnc:1; /* Checksum Not Calculated */ 299d1a890faSShreyas Bhatewara u32 ext2:1; 300115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 301d1a890faSShreyas Bhatewara 302115924b6SShreyas Bhatewara __le32 rssHash; /* RSS hash value */ 303d1a890faSShreyas Bhatewara 304115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 305115924b6SShreyas Bhatewara u32 tci:16; /* Tag stripped */ 306115924b6SShreyas Bhatewara u32 ts:1; /* Tag is stripped */ 307115924b6SShreyas Bhatewara u32 err:1; /* Error */ 308115924b6SShreyas Bhatewara u32 len:14; /* data length */ 309115924b6SShreyas Bhatewara #else 310d1a890faSShreyas Bhatewara u32 len:14; /* data length */ 311d1a890faSShreyas Bhatewara u32 err:1; /* Error */ 312d1a890faSShreyas Bhatewara u32 ts:1; /* Tag is stripped */ 313d1a890faSShreyas Bhatewara u32 tci:16; /* Tag stripped */ 314115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 315d1a890faSShreyas Bhatewara 316115924b6SShreyas Bhatewara 317115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 318115924b6SShreyas Bhatewara u32 gen:1; /* generation bit */ 319115924b6SShreyas Bhatewara u32 type:7; /* completion type */ 320115924b6SShreyas Bhatewara u32 fcs:1; /* Frame CRC correct */ 321115924b6SShreyas Bhatewara u32 frg:1; /* IP Fragment */ 322115924b6SShreyas Bhatewara u32 v4:1; /* IPv4 */ 323115924b6SShreyas Bhatewara u32 v6:1; /* IPv6 */ 324115924b6SShreyas Bhatewara u32 ipc:1; /* IP Checksum Correct */ 325115924b6SShreyas Bhatewara u32 tcp:1; /* TCP packet */ 326115924b6SShreyas Bhatewara u32 udp:1; /* UDP packet */ 327115924b6SShreyas Bhatewara u32 tuc:1; /* TCP/UDP Checksum Correct */ 328115924b6SShreyas Bhatewara u32 csum:16; 329115924b6SShreyas Bhatewara #else 330d1a890faSShreyas Bhatewara u32 csum:16; 331d1a890faSShreyas Bhatewara u32 tuc:1; /* TCP/UDP Checksum Correct */ 332d1a890faSShreyas Bhatewara u32 udp:1; /* UDP packet */ 333d1a890faSShreyas Bhatewara u32 tcp:1; /* TCP packet */ 334d1a890faSShreyas Bhatewara u32 ipc:1; /* IP Checksum Correct */ 335d1a890faSShreyas Bhatewara u32 v6:1; /* IPv6 */ 336d1a890faSShreyas Bhatewara u32 v4:1; /* IPv4 */ 337d1a890faSShreyas Bhatewara u32 frg:1; /* IP Fragment */ 338d1a890faSShreyas Bhatewara u32 fcs:1; /* Frame CRC correct */ 339d1a890faSShreyas Bhatewara u32 type:7; /* completion type */ 340d1a890faSShreyas Bhatewara u32 gen:1; /* generation bit */ 341115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 342d1a890faSShreyas Bhatewara }; 343d1a890faSShreyas Bhatewara 34445dac1d6SShreyas Bhatewara struct Vmxnet3_RxCompDescExt { 34545dac1d6SShreyas Bhatewara __le32 dword1; 34645dac1d6SShreyas Bhatewara u8 segCnt; /* Number of aggregated packets */ 34745dac1d6SShreyas Bhatewara u8 dupAckCnt; /* Number of duplicate Acks */ 34845dac1d6SShreyas Bhatewara __le16 tsDelta; /* TCP timestamp difference */ 34945dac1d6SShreyas Bhatewara __le32 dword2; 35045dac1d6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 35145dac1d6SShreyas Bhatewara u32 gen:1; /* generation bit */ 35245dac1d6SShreyas Bhatewara u32 type:7; /* completion type */ 35345dac1d6SShreyas Bhatewara u32 fcs:1; /* Frame CRC correct */ 35445dac1d6SShreyas Bhatewara u32 frg:1; /* IP Fragment */ 35545dac1d6SShreyas Bhatewara u32 v4:1; /* IPv4 */ 35645dac1d6SShreyas Bhatewara u32 v6:1; /* IPv6 */ 35745dac1d6SShreyas Bhatewara u32 ipc:1; /* IP Checksum Correct */ 35845dac1d6SShreyas Bhatewara u32 tcp:1; /* TCP packet */ 35945dac1d6SShreyas Bhatewara u32 udp:1; /* UDP packet */ 36045dac1d6SShreyas Bhatewara u32 tuc:1; /* TCP/UDP Checksum Correct */ 36145dac1d6SShreyas Bhatewara u32 mss:16; 36245dac1d6SShreyas Bhatewara #else 36345dac1d6SShreyas Bhatewara u32 mss:16; 36445dac1d6SShreyas Bhatewara u32 tuc:1; /* TCP/UDP Checksum Correct */ 36545dac1d6SShreyas Bhatewara u32 udp:1; /* UDP packet */ 36645dac1d6SShreyas Bhatewara u32 tcp:1; /* TCP packet */ 36745dac1d6SShreyas Bhatewara u32 ipc:1; /* IP Checksum Correct */ 36845dac1d6SShreyas Bhatewara u32 v6:1; /* IPv6 */ 36945dac1d6SShreyas Bhatewara u32 v4:1; /* IPv4 */ 37045dac1d6SShreyas Bhatewara u32 frg:1; /* IP Fragment */ 37145dac1d6SShreyas Bhatewara u32 fcs:1; /* Frame CRC correct */ 37245dac1d6SShreyas Bhatewara u32 type:7; /* completion type */ 37345dac1d6SShreyas Bhatewara u32 gen:1; /* generation bit */ 37445dac1d6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 37545dac1d6SShreyas Bhatewara }; 37645dac1d6SShreyas Bhatewara 37745dac1d6SShreyas Bhatewara 378d1a890faSShreyas Bhatewara /* fields in RxCompDesc we access via Vmxnet3_GenericDesc.dword[3] */ 379d1a890faSShreyas Bhatewara #define VMXNET3_RCD_TUC_SHIFT 16 380d1a890faSShreyas Bhatewara #define VMXNET3_RCD_IPC_SHIFT 19 381d1a890faSShreyas Bhatewara 382d1a890faSShreyas Bhatewara /* fields in RxCompDesc we access via Vmxnet3_GenericDesc.qword[1] */ 383d1a890faSShreyas Bhatewara #define VMXNET3_RCD_TYPE_SHIFT 56 384d1a890faSShreyas Bhatewara #define VMXNET3_RCD_GEN_SHIFT 63 385d1a890faSShreyas Bhatewara 386d1a890faSShreyas Bhatewara /* csum OK for TCP/UDP pkts over IP */ 387d1a890faSShreyas Bhatewara #define VMXNET3_RCD_CSUM_OK (1 << VMXNET3_RCD_TUC_SHIFT | \ 388d1a890faSShreyas Bhatewara 1 << VMXNET3_RCD_IPC_SHIFT) 389115924b6SShreyas Bhatewara #define VMXNET3_TXD_GEN_SIZE 1 390115924b6SShreyas Bhatewara #define VMXNET3_TXD_EOP_SIZE 1 391d1a890faSShreyas Bhatewara 392d1a890faSShreyas Bhatewara /* value of RxCompDesc.rssType */ 393b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_NONE 0 394b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_IPV4 1 395b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_TCPIPV4 2 396b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_IPV6 3 397b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_TCPIPV6 4 398b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_UDPIPV4 5 399b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_UDPIPV6 6 400b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_ESPIPV4 7 401b3973bb4SRonak Doshi #define VMXNET3_RCD_RSS_TYPE_ESPIPV6 8 402d1a890faSShreyas Bhatewara 403d1a890faSShreyas Bhatewara 404d1a890faSShreyas Bhatewara /* a union for accessing all cmd/completion descriptors */ 405d1a890faSShreyas Bhatewara union Vmxnet3_GenericDesc { 406115924b6SShreyas Bhatewara __le64 qword[2]; 407115924b6SShreyas Bhatewara __le32 dword[4]; 408115924b6SShreyas Bhatewara __le16 word[8]; 409d1a890faSShreyas Bhatewara struct Vmxnet3_TxDesc txd; 410d1a890faSShreyas Bhatewara struct Vmxnet3_RxDesc rxd; 411d1a890faSShreyas Bhatewara struct Vmxnet3_TxCompDesc tcd; 412d1a890faSShreyas Bhatewara struct Vmxnet3_RxCompDesc rcd; 41345dac1d6SShreyas Bhatewara struct Vmxnet3_RxCompDescExt rcdExt; 414d1a890faSShreyas Bhatewara }; 415d1a890faSShreyas Bhatewara 416d1a890faSShreyas Bhatewara #define VMXNET3_INIT_GEN 1 417d1a890faSShreyas Bhatewara 418d1a890faSShreyas Bhatewara /* Max size of a single tx buffer */ 419d1a890faSShreyas Bhatewara #define VMXNET3_MAX_TX_BUF_SIZE (1 << 14) 420d1a890faSShreyas Bhatewara 421d1a890faSShreyas Bhatewara /* # of tx desc needed for a tx buffer size */ 422d1a890faSShreyas Bhatewara #define VMXNET3_TXD_NEEDED(size) (((size) + VMXNET3_MAX_TX_BUF_SIZE - 1) / \ 423d1a890faSShreyas Bhatewara VMXNET3_MAX_TX_BUF_SIZE) 424d1a890faSShreyas Bhatewara 425d1a890faSShreyas Bhatewara /* max # of tx descs for a non-tso pkt */ 426d1a890faSShreyas Bhatewara #define VMXNET3_MAX_TXD_PER_PKT 16 427d2857b99SRonak Doshi /* max # of tx descs for a tso pkt */ 428d2857b99SRonak Doshi #define VMXNET3_MAX_TSO_TXD_PER_PKT 24 429d1a890faSShreyas Bhatewara 430d1a890faSShreyas Bhatewara /* Max size of a single rx buffer */ 431d1a890faSShreyas Bhatewara #define VMXNET3_MAX_RX_BUF_SIZE ((1 << 14) - 1) 432d1a890faSShreyas Bhatewara /* Minimum size of a type 0 buffer */ 433d1a890faSShreyas Bhatewara #define VMXNET3_MIN_T0_BUF_SIZE 128 434d1a890faSShreyas Bhatewara #define VMXNET3_MAX_CSUM_OFFSET 1024 435d1a890faSShreyas Bhatewara 436d1a890faSShreyas Bhatewara /* Ring base address alignment */ 437d1a890faSShreyas Bhatewara #define VMXNET3_RING_BA_ALIGN 512 438d1a890faSShreyas Bhatewara #define VMXNET3_RING_BA_MASK (VMXNET3_RING_BA_ALIGN - 1) 439d1a890faSShreyas Bhatewara 440d1a890faSShreyas Bhatewara /* Ring size must be a multiple of 32 */ 441d1a890faSShreyas Bhatewara #define VMXNET3_RING_SIZE_ALIGN 32 442d1a890faSShreyas Bhatewara #define VMXNET3_RING_SIZE_MASK (VMXNET3_RING_SIZE_ALIGN - 1) 443d1a890faSShreyas Bhatewara 4443c8b3efcSShrikrishna Khare /* Tx Data Ring buffer size must be a multiple of 64 */ 4453c8b3efcSShrikrishna Khare #define VMXNET3_TXDATA_DESC_SIZE_ALIGN 64 4463c8b3efcSShrikrishna Khare #define VMXNET3_TXDATA_DESC_SIZE_MASK (VMXNET3_TXDATA_DESC_SIZE_ALIGN - 1) 4473c8b3efcSShrikrishna Khare 44850a5ce3eSShrikrishna Khare /* Rx Data Ring buffer size must be a multiple of 64 */ 44950a5ce3eSShrikrishna Khare #define VMXNET3_RXDATA_DESC_SIZE_ALIGN 64 45050a5ce3eSShrikrishna Khare #define VMXNET3_RXDATA_DESC_SIZE_MASK (VMXNET3_RXDATA_DESC_SIZE_ALIGN - 1) 45150a5ce3eSShrikrishna Khare 4524c22fad7SRonak Doshi /* Rx TS Ring buffer size must be a multiple of 64 bytes */ 4534c22fad7SRonak Doshi #define VMXNET3_RXTS_DESC_SIZE_ALIGN 64 4544c22fad7SRonak Doshi #define VMXNET3_RXTS_DESC_SIZE_MASK (VMXNET3_RXTS_DESC_SIZE_ALIGN - 1) 4554c22fad7SRonak Doshi /* Tx TS Ring buffer size must be a multiple of 64 bytes */ 4564c22fad7SRonak Doshi #define VMXNET3_TXTS_DESC_SIZE_ALIGN 64 4574c22fad7SRonak Doshi #define VMXNET3_TXTS_DESC_SIZE_MASK (VMXNET3_TXTS_DESC_SIZE_ALIGN - 1) 4584c22fad7SRonak Doshi 459d1a890faSShreyas Bhatewara /* Max ring size */ 460d1a890faSShreyas Bhatewara #define VMXNET3_TX_RING_MAX_SIZE 4096 461d1a890faSShreyas Bhatewara #define VMXNET3_TC_RING_MAX_SIZE 4096 462d1a890faSShreyas Bhatewara #define VMXNET3_RX_RING_MAX_SIZE 4096 46314112ca5SShrikrishna Khare #define VMXNET3_RX_RING2_MAX_SIZE 4096 464d1a890faSShreyas Bhatewara #define VMXNET3_RC_RING_MAX_SIZE 8192 465d1a890faSShreyas Bhatewara 4663c8b3efcSShrikrishna Khare #define VMXNET3_TXDATA_DESC_MIN_SIZE 128 4673c8b3efcSShrikrishna Khare #define VMXNET3_TXDATA_DESC_MAX_SIZE 2048 4683c8b3efcSShrikrishna Khare 46950a5ce3eSShrikrishna Khare #define VMXNET3_RXDATA_DESC_MAX_SIZE 2048 47050a5ce3eSShrikrishna Khare 4714c22fad7SRonak Doshi #define VMXNET3_TXTS_DESC_MAX_SIZE 256 4724c22fad7SRonak Doshi #define VMXNET3_RXTS_DESC_MAX_SIZE 256 4734c22fad7SRonak Doshi 474d1a890faSShreyas Bhatewara /* a list of reasons for queue stop */ 475d1a890faSShreyas Bhatewara 476d1a890faSShreyas Bhatewara enum { 477d1a890faSShreyas Bhatewara VMXNET3_ERR_NOEOP = 0x80000000, /* cannot find the EOP desc of a pkt */ 478d1a890faSShreyas Bhatewara VMXNET3_ERR_TXD_REUSE = 0x80000001, /* reuse TxDesc before tx completion */ 479d1a890faSShreyas Bhatewara VMXNET3_ERR_BIG_PKT = 0x80000002, /* too many TxDesc for a pkt */ 480d1a890faSShreyas Bhatewara VMXNET3_ERR_DESC_NOT_SPT = 0x80000003, /* descriptor type not supported */ 481d1a890faSShreyas Bhatewara VMXNET3_ERR_SMALL_BUF = 0x80000004, /* type 0 buffer too small */ 482d1a890faSShreyas Bhatewara VMXNET3_ERR_STRESS = 0x80000005, /* stress option firing in vmkernel */ 483d1a890faSShreyas Bhatewara VMXNET3_ERR_SWITCH = 0x80000006, /* mode switch failure */ 484d1a890faSShreyas Bhatewara VMXNET3_ERR_TXD_INVALID = 0x80000007, /* invalid TxDesc */ 485d1a890faSShreyas Bhatewara }; 486d1a890faSShreyas Bhatewara 487d1a890faSShreyas Bhatewara /* completion descriptor types */ 488d1a890faSShreyas Bhatewara #define VMXNET3_CDTYPE_TXCOMP 0 /* Tx Completion Descriptor */ 489d1a890faSShreyas Bhatewara #define VMXNET3_CDTYPE_RXCOMP 3 /* Rx Completion Descriptor */ 49045dac1d6SShreyas Bhatewara #define VMXNET3_CDTYPE_RXCOMP_LRO 4 /* Rx Completion Descriptor for LRO */ 491d1a890faSShreyas Bhatewara 492d1a890faSShreyas Bhatewara enum { 493d1a890faSShreyas Bhatewara VMXNET3_GOS_BITS_UNK = 0, /* unknown */ 494d1a890faSShreyas Bhatewara VMXNET3_GOS_BITS_32 = 1, 495d1a890faSShreyas Bhatewara VMXNET3_GOS_BITS_64 = 2, 496d1a890faSShreyas Bhatewara }; 497d1a890faSShreyas Bhatewara 498d1a890faSShreyas Bhatewara #define VMXNET3_GOS_TYPE_LINUX 1 499d1a890faSShreyas Bhatewara 500d1a890faSShreyas Bhatewara 501d1a890faSShreyas Bhatewara struct Vmxnet3_GOSInfo { 502115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 503115924b6SShreyas Bhatewara u32 gosMisc:10; /* other info about gos */ 504115924b6SShreyas Bhatewara u32 gosVer:16; /* gos version */ 505115924b6SShreyas Bhatewara u32 gosType:4; /* which guest */ 506115924b6SShreyas Bhatewara u32 gosBits:2; /* 32-bit or 64-bit? */ 507115924b6SShreyas Bhatewara #else 508d1a890faSShreyas Bhatewara u32 gosBits:2; /* 32-bit or 64-bit? */ 509d1a890faSShreyas Bhatewara u32 gosType:4; /* which guest */ 510d1a890faSShreyas Bhatewara u32 gosVer:16; /* gos version */ 511d1a890faSShreyas Bhatewara u32 gosMisc:10; /* other info about gos */ 512115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 513d1a890faSShreyas Bhatewara }; 514d1a890faSShreyas Bhatewara 515d1a890faSShreyas Bhatewara struct Vmxnet3_DriverInfo { 516115924b6SShreyas Bhatewara __le32 version; 517d1a890faSShreyas Bhatewara struct Vmxnet3_GOSInfo gos; 518115924b6SShreyas Bhatewara __le32 vmxnet3RevSpt; 519115924b6SShreyas Bhatewara __le32 uptVerSpt; 520d1a890faSShreyas Bhatewara }; 521d1a890faSShreyas Bhatewara 522d1a890faSShreyas Bhatewara 523dd83829eSShrikrishna Khare #define VMXNET3_REV1_MAGIC 3133079265u 524d1a890faSShreyas Bhatewara 525d1a890faSShreyas Bhatewara /* 526d1a890faSShreyas Bhatewara * QueueDescPA must be 128 bytes aligned. It points to an array of 527d1a890faSShreyas Bhatewara * Vmxnet3_TxQueueDesc followed by an array of Vmxnet3_RxQueueDesc. 528d1a890faSShreyas Bhatewara * The number of Vmxnet3_TxQueueDesc/Vmxnet3_RxQueueDesc are specified by 529d1a890faSShreyas Bhatewara * Vmxnet3_MiscConf.numTxQueues/numRxQueues, respectively. 530d1a890faSShreyas Bhatewara */ 531d1a890faSShreyas Bhatewara #define VMXNET3_QUEUE_DESC_ALIGN 128 532d1a890faSShreyas Bhatewara 533d1a890faSShreyas Bhatewara 534d1a890faSShreyas Bhatewara struct Vmxnet3_MiscConf { 535d1a890faSShreyas Bhatewara struct Vmxnet3_DriverInfo driverInfo; 536115924b6SShreyas Bhatewara __le64 uptFeatures; 537115924b6SShreyas Bhatewara __le64 ddPA; /* driver data PA */ 538115924b6SShreyas Bhatewara __le64 queueDescPA; /* queue descriptor table PA */ 539115924b6SShreyas Bhatewara __le32 ddLen; /* driver data len */ 540115924b6SShreyas Bhatewara __le32 queueDescLen; /* queue desc. table len in bytes */ 541115924b6SShreyas Bhatewara __le32 mtu; 542115924b6SShreyas Bhatewara __le16 maxNumRxSG; 543d1a890faSShreyas Bhatewara u8 numTxQueues; 544d1a890faSShreyas Bhatewara u8 numRxQueues; 545115924b6SShreyas Bhatewara __le32 reserved[4]; 546d1a890faSShreyas Bhatewara }; 547d1a890faSShreyas Bhatewara 548d1a890faSShreyas Bhatewara 549d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueConf { 550115924b6SShreyas Bhatewara __le64 txRingBasePA; 551115924b6SShreyas Bhatewara __le64 dataRingBasePA; 552115924b6SShreyas Bhatewara __le64 compRingBasePA; 553115924b6SShreyas Bhatewara __le64 ddPA; /* driver data */ 554115924b6SShreyas Bhatewara __le64 reserved; 555115924b6SShreyas Bhatewara __le32 txRingSize; /* # of tx desc */ 556115924b6SShreyas Bhatewara __le32 dataRingSize; /* # of data desc */ 557115924b6SShreyas Bhatewara __le32 compRingSize; /* # of comp desc */ 558115924b6SShreyas Bhatewara __le32 ddLen; /* size of driver data */ 559d1a890faSShreyas Bhatewara u8 intrIdx; 5603c8b3efcSShrikrishna Khare u8 _pad1[1]; 5613c8b3efcSShrikrishna Khare __le16 txDataRingDescSize; 5623c8b3efcSShrikrishna Khare u8 _pad2[4]; 563d1a890faSShreyas Bhatewara }; 564d1a890faSShreyas Bhatewara 565d1a890faSShreyas Bhatewara 566d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueConf { 567115924b6SShreyas Bhatewara __le64 rxRingBasePA[2]; 568115924b6SShreyas Bhatewara __le64 compRingBasePA; 569115924b6SShreyas Bhatewara __le64 ddPA; /* driver data */ 57050a5ce3eSShrikrishna Khare __le64 rxDataRingBasePA; 571115924b6SShreyas Bhatewara __le32 rxRingSize[2]; /* # of rx desc */ 572115924b6SShreyas Bhatewara __le32 compRingSize; /* # of rx comp desc */ 573115924b6SShreyas Bhatewara __le32 ddLen; /* size of driver data */ 574d1a890faSShreyas Bhatewara u8 intrIdx; 57550a5ce3eSShrikrishna Khare u8 _pad1[1]; 57650a5ce3eSShrikrishna Khare __le16 rxDataRingDescSize; /* size of rx data ring buffer */ 57750a5ce3eSShrikrishna Khare u8 _pad2[4]; 578d1a890faSShreyas Bhatewara }; 579d1a890faSShreyas Bhatewara 580d1a890faSShreyas Bhatewara 5814c22fad7SRonak Doshi struct Vmxnet3_LatencyConf { 5824c22fad7SRonak Doshi u16 sampleRate; 5834c22fad7SRonak Doshi u16 pad; 5844c22fad7SRonak Doshi }; 5854c22fad7SRonak Doshi 5864c22fad7SRonak Doshi struct Vmxnet3_TxQueueTSConf { 5874c22fad7SRonak Doshi __le64 txTSRingBasePA; 5884c22fad7SRonak Doshi __le16 txTSRingDescSize; /* size of tx timestamp ring buffer */ 5894c22fad7SRonak Doshi u16 pad; 5904c22fad7SRonak Doshi struct Vmxnet3_LatencyConf latencyConf; 5914c22fad7SRonak Doshi }; 5924c22fad7SRonak Doshi 5934c22fad7SRonak Doshi struct Vmxnet3_RxQueueTSConf { 5944c22fad7SRonak Doshi __le64 rxTSRingBasePA; 5954c22fad7SRonak Doshi __le16 rxTSRingDescSize; /* size of rx timestamp ring buffer */ 5964c22fad7SRonak Doshi u16 pad[3]; 5974c22fad7SRonak Doshi }; 5984c22fad7SRonak Doshi 599d1a890faSShreyas Bhatewara enum vmxnet3_intr_mask_mode { 600d1a890faSShreyas Bhatewara VMXNET3_IMM_AUTO = 0, 601d1a890faSShreyas Bhatewara VMXNET3_IMM_ACTIVE = 1, 602d1a890faSShreyas Bhatewara VMXNET3_IMM_LAZY = 2 603d1a890faSShreyas Bhatewara }; 604d1a890faSShreyas Bhatewara 605d1a890faSShreyas Bhatewara enum vmxnet3_intr_type { 606d1a890faSShreyas Bhatewara VMXNET3_IT_AUTO = 0, 607d1a890faSShreyas Bhatewara VMXNET3_IT_INTX = 1, 608d1a890faSShreyas Bhatewara VMXNET3_IT_MSI = 2, 609d1a890faSShreyas Bhatewara VMXNET3_IT_MSIX = 3 610d1a890faSShreyas Bhatewara }; 611d1a890faSShreyas Bhatewara 612d1a890faSShreyas Bhatewara #define VMXNET3_MAX_TX_QUEUES 8 613d1a890faSShreyas Bhatewara #define VMXNET3_MAX_RX_QUEUES 16 614d1a890faSShreyas Bhatewara /* addition 1 for events */ 615d1a890faSShreyas Bhatewara #define VMXNET3_MAX_INTRS 25 616d1a890faSShreyas Bhatewara 61739f9895aSRonak Doshi /* Version 6 and later will use below macros */ 61839f9895aSRonak Doshi #define VMXNET3_EXT_MAX_TX_QUEUES 32 61939f9895aSRonak Doshi #define VMXNET3_EXT_MAX_RX_QUEUES 32 62039f9895aSRonak Doshi /* addition 1 for events */ 62139f9895aSRonak Doshi #define VMXNET3_EXT_MAX_INTRS 65 62239f9895aSRonak Doshi #define VMXNET3_FIRST_SET_INTRS 64 62339f9895aSRonak Doshi 6246929fe8aSRonghua Zang /* value of intrCtrl */ 6256929fe8aSRonghua Zang #define VMXNET3_IC_DISABLE_ALL 0x1 /* bit 0 */ 6266929fe8aSRonghua Zang 627d1a890faSShreyas Bhatewara 628d1a890faSShreyas Bhatewara struct Vmxnet3_IntrConf { 629d1a890faSShreyas Bhatewara bool autoMask; 630d1a890faSShreyas Bhatewara u8 numIntrs; /* # of interrupts */ 631d1a890faSShreyas Bhatewara u8 eventIntrIdx; 632d1a890faSShreyas Bhatewara u8 modLevels[VMXNET3_MAX_INTRS]; /* moderation level for 633d1a890faSShreyas Bhatewara * each intr */ 6346929fe8aSRonghua Zang __le32 intrCtrl; 6356929fe8aSRonghua Zang __le32 reserved[2]; 636d1a890faSShreyas Bhatewara }; 637d1a890faSShreyas Bhatewara 63839f9895aSRonak Doshi struct Vmxnet3_IntrConfExt { 63939f9895aSRonak Doshi u8 autoMask; 64039f9895aSRonak Doshi u8 numIntrs; /* # of interrupts */ 64139f9895aSRonak Doshi u8 eventIntrIdx; 64239f9895aSRonak Doshi u8 reserved; 64339f9895aSRonak Doshi __le32 intrCtrl; 64439f9895aSRonak Doshi __le32 reserved1; 64539f9895aSRonak Doshi u8 modLevels[VMXNET3_EXT_MAX_INTRS]; /* moderation level for 64639f9895aSRonak Doshi * each intr 64739f9895aSRonak Doshi */ 64839f9895aSRonak Doshi u8 reserved2[3]; 64939f9895aSRonak Doshi }; 65039f9895aSRonak Doshi 651d1a890faSShreyas Bhatewara /* one bit per VLAN ID, the size is in the units of u32 */ 652d1a890faSShreyas Bhatewara #define VMXNET3_VFT_SIZE (4096 / (sizeof(u32) * 8)) 653d1a890faSShreyas Bhatewara 654d1a890faSShreyas Bhatewara 655d1a890faSShreyas Bhatewara struct Vmxnet3_QueueStatus { 656d1a890faSShreyas Bhatewara bool stopped; 657d1a890faSShreyas Bhatewara u8 _pad[3]; 658115924b6SShreyas Bhatewara __le32 error; 659d1a890faSShreyas Bhatewara }; 660d1a890faSShreyas Bhatewara 661d1a890faSShreyas Bhatewara 662d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueCtrl { 663115924b6SShreyas Bhatewara __le32 txNumDeferred; 664115924b6SShreyas Bhatewara __le32 txThreshold; 665115924b6SShreyas Bhatewara __le64 reserved; 666d1a890faSShreyas Bhatewara }; 667d1a890faSShreyas Bhatewara 668d1a890faSShreyas Bhatewara 669d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueCtrl { 670d1a890faSShreyas Bhatewara bool updateRxProd; 671d1a890faSShreyas Bhatewara u8 _pad[7]; 672115924b6SShreyas Bhatewara __le64 reserved; 673d1a890faSShreyas Bhatewara }; 674d1a890faSShreyas Bhatewara 675d1a890faSShreyas Bhatewara enum { 676d1a890faSShreyas Bhatewara VMXNET3_RXM_UCAST = 0x01, /* unicast only */ 677d1a890faSShreyas Bhatewara VMXNET3_RXM_MCAST = 0x02, /* multicast passing the filters */ 678d1a890faSShreyas Bhatewara VMXNET3_RXM_BCAST = 0x04, /* broadcast only */ 679d1a890faSShreyas Bhatewara VMXNET3_RXM_ALL_MULTI = 0x08, /* all multicast */ 680d1a890faSShreyas Bhatewara VMXNET3_RXM_PROMISC = 0x10 /* promiscuous */ 681d1a890faSShreyas Bhatewara }; 682d1a890faSShreyas Bhatewara 683d1a890faSShreyas Bhatewara struct Vmxnet3_RxFilterConf { 684115924b6SShreyas Bhatewara __le32 rxMode; /* VMXNET3_RXM_xxx */ 685115924b6SShreyas Bhatewara __le16 mfTableLen; /* size of the multicast filter table */ 686115924b6SShreyas Bhatewara __le16 _pad1; 687115924b6SShreyas Bhatewara __le64 mfTablePA; /* PA of the multicast filters table */ 688115924b6SShreyas Bhatewara __le32 vfTable[VMXNET3_VFT_SIZE]; /* vlan filter */ 689d1a890faSShreyas Bhatewara }; 690d1a890faSShreyas Bhatewara 691d1a890faSShreyas Bhatewara 692d1a890faSShreyas Bhatewara #define VMXNET3_PM_MAX_FILTERS 6 693d1a890faSShreyas Bhatewara #define VMXNET3_PM_MAX_PATTERN_SIZE 128 694d1a890faSShreyas Bhatewara #define VMXNET3_PM_MAX_MASK_SIZE (VMXNET3_PM_MAX_PATTERN_SIZE / 8) 695d1a890faSShreyas Bhatewara 6963843e515SHarvey Harrison #define VMXNET3_PM_WAKEUP_MAGIC cpu_to_le16(0x01) /* wake up on magic pkts */ 6973843e515SHarvey Harrison #define VMXNET3_PM_WAKEUP_FILTER cpu_to_le16(0x02) /* wake up on pkts matching 698d1a890faSShreyas Bhatewara * filters */ 699d1a890faSShreyas Bhatewara 700d1a890faSShreyas Bhatewara 701d1a890faSShreyas Bhatewara struct Vmxnet3_PM_PktFilter { 702d1a890faSShreyas Bhatewara u8 maskSize; 703d1a890faSShreyas Bhatewara u8 patternSize; 704d1a890faSShreyas Bhatewara u8 mask[VMXNET3_PM_MAX_MASK_SIZE]; 705d1a890faSShreyas Bhatewara u8 pattern[VMXNET3_PM_MAX_PATTERN_SIZE]; 706d1a890faSShreyas Bhatewara u8 pad[6]; 707d1a890faSShreyas Bhatewara }; 708d1a890faSShreyas Bhatewara 709d1a890faSShreyas Bhatewara 710d1a890faSShreyas Bhatewara struct Vmxnet3_PMConf { 711115924b6SShreyas Bhatewara __le16 wakeUpEvents; /* VMXNET3_PM_WAKEUP_xxx */ 712d1a890faSShreyas Bhatewara u8 numFilters; 713d1a890faSShreyas Bhatewara u8 pad[5]; 714d1a890faSShreyas Bhatewara struct Vmxnet3_PM_PktFilter filters[VMXNET3_PM_MAX_FILTERS]; 715d1a890faSShreyas Bhatewara }; 716d1a890faSShreyas Bhatewara 717d1a890faSShreyas Bhatewara 718d1a890faSShreyas Bhatewara struct Vmxnet3_VariableLenConfDesc { 719115924b6SShreyas Bhatewara __le32 confVer; 720115924b6SShreyas Bhatewara __le32 confLen; 721115924b6SShreyas Bhatewara __le64 confPA; 722d1a890faSShreyas Bhatewara }; 723d1a890faSShreyas Bhatewara 724d1a890faSShreyas Bhatewara 725d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueDesc { 726d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueCtrl ctrl; 727d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueConf conf; 728d1a890faSShreyas Bhatewara 729d1a890faSShreyas Bhatewara /* Driver read after a GET command */ 730d1a890faSShreyas Bhatewara struct Vmxnet3_QueueStatus status; 731d1a890faSShreyas Bhatewara struct UPT1_TxStats stats; 7324c22fad7SRonak Doshi struct Vmxnet3_TxQueueTSConf tsConf; 7334c22fad7SRonak Doshi u8 _pad[72]; /* 128 aligned */ 734d1a890faSShreyas Bhatewara }; 735d1a890faSShreyas Bhatewara 736d1a890faSShreyas Bhatewara 737d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueDesc { 738d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueCtrl ctrl; 739d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueConf conf; 740d1a890faSShreyas Bhatewara /* Driver read after a GET commad */ 741d1a890faSShreyas Bhatewara struct Vmxnet3_QueueStatus status; 742d1a890faSShreyas Bhatewara struct UPT1_RxStats stats; 7434c22fad7SRonak Doshi struct Vmxnet3_RxQueueTSConf tsConf; 7444c22fad7SRonak Doshi u8 __pad[72]; /* 128 aligned */ 745d1a890faSShreyas Bhatewara }; 746d1a890faSShreyas Bhatewara 747f35c7480SShrikrishna Khare struct Vmxnet3_SetPolling { 748f35c7480SShrikrishna Khare u8 enablePolling; 749f35c7480SShrikrishna Khare }; 750f35c7480SShrikrishna Khare 7514edef40eSShrikrishna Khare #define VMXNET3_COAL_STATIC_MAX_DEPTH 128 7524edef40eSShrikrishna Khare #define VMXNET3_COAL_RBC_MIN_RATE 100 7534edef40eSShrikrishna Khare #define VMXNET3_COAL_RBC_MAX_RATE 100000 7544edef40eSShrikrishna Khare 7554edef40eSShrikrishna Khare enum Vmxnet3_CoalesceMode { 7564edef40eSShrikrishna Khare VMXNET3_COALESCE_DISABLED = 0, 7574edef40eSShrikrishna Khare VMXNET3_COALESCE_ADAPT = 1, 7584edef40eSShrikrishna Khare VMXNET3_COALESCE_STATIC = 2, 7594edef40eSShrikrishna Khare VMXNET3_COALESCE_RBC = 3 7604edef40eSShrikrishna Khare }; 7614edef40eSShrikrishna Khare 7624edef40eSShrikrishna Khare struct Vmxnet3_CoalesceRbc { 7634edef40eSShrikrishna Khare u32 rbc_rate; 7644edef40eSShrikrishna Khare }; 7654edef40eSShrikrishna Khare 7664edef40eSShrikrishna Khare struct Vmxnet3_CoalesceStatic { 7674edef40eSShrikrishna Khare u32 tx_depth; 7684edef40eSShrikrishna Khare u32 tx_comp_depth; 7694edef40eSShrikrishna Khare u32 rx_depth; 7704edef40eSShrikrishna Khare }; 7714edef40eSShrikrishna Khare 7724edef40eSShrikrishna Khare struct Vmxnet3_CoalesceScheme { 7734edef40eSShrikrishna Khare enum Vmxnet3_CoalesceMode coalMode; 7744edef40eSShrikrishna Khare union { 7754edef40eSShrikrishna Khare struct Vmxnet3_CoalesceRbc coalRbc; 7764edef40eSShrikrishna Khare struct Vmxnet3_CoalesceStatic coalStatic; 7774edef40eSShrikrishna Khare } coalPara; 7784edef40eSShrikrishna Khare }; 7794edef40eSShrikrishna Khare 78047443222SShrikrishna Khare struct Vmxnet3_MemoryRegion { 78147443222SShrikrishna Khare __le64 startPA; 78247443222SShrikrishna Khare __le32 length; 78347443222SShrikrishna Khare __le16 txQueueBits; 78447443222SShrikrishna Khare __le16 rxQueueBits; 78547443222SShrikrishna Khare }; 78647443222SShrikrishna Khare 78747443222SShrikrishna Khare #define MAX_MEMORY_REGION_PER_QUEUE 16 78847443222SShrikrishna Khare #define MAX_MEMORY_REGION_PER_DEVICE 256 78947443222SShrikrishna Khare 79047443222SShrikrishna Khare struct Vmxnet3_MemRegs { 79147443222SShrikrishna Khare __le16 numRegs; 79247443222SShrikrishna Khare __le16 pad[3]; 79347443222SShrikrishna Khare struct Vmxnet3_MemoryRegion memRegs[1]; 79447443222SShrikrishna Khare }; 79547443222SShrikrishna Khare 796d3a8a9e5SRonak Doshi enum Vmxnet3_RSSField { 797d3a8a9e5SRonak Doshi VMXNET3_RSS_FIELDS_TCPIP4 = 0x0001, 798d3a8a9e5SRonak Doshi VMXNET3_RSS_FIELDS_TCPIP6 = 0x0002, 799d3a8a9e5SRonak Doshi VMXNET3_RSS_FIELDS_UDPIP4 = 0x0004, 800d3a8a9e5SRonak Doshi VMXNET3_RSS_FIELDS_UDPIP6 = 0x0008, 801d3a8a9e5SRonak Doshi VMXNET3_RSS_FIELDS_ESPIP4 = 0x0010, 802d3a8a9e5SRonak Doshi VMXNET3_RSS_FIELDS_ESPIP6 = 0x0020, 803d3a8a9e5SRonak Doshi }; 804d3a8a9e5SRonak Doshi 805c7112ebdSRonak Doshi struct Vmxnet3_RingBufferSize { 806c7112ebdSRonak Doshi __le16 ring1BufSizeType0; 807c7112ebdSRonak Doshi __le16 ring1BufSizeType1; 808c7112ebdSRonak Doshi __le16 ring2BufSizeType1; 809c7112ebdSRonak Doshi __le16 pad; 810c7112ebdSRonak Doshi }; 811c7112ebdSRonak Doshi 812f35c7480SShrikrishna Khare /* If the command data <= 16 bytes, use the shared memory directly. 813f35c7480SShrikrishna Khare * otherwise, use variable length configuration descriptor. 814f35c7480SShrikrishna Khare */ 815f35c7480SShrikrishna Khare union Vmxnet3_CmdInfo { 816f35c7480SShrikrishna Khare struct Vmxnet3_VariableLenConfDesc varConf; 817f35c7480SShrikrishna Khare struct Vmxnet3_SetPolling setPolling; 818d3a8a9e5SRonak Doshi enum Vmxnet3_RSSField setRssFields; 819c7112ebdSRonak Doshi struct Vmxnet3_RingBufferSize ringBufSize; 820f35c7480SShrikrishna Khare __le64 data[2]; 821f35c7480SShrikrishna Khare }; 822d1a890faSShreyas Bhatewara 823d1a890faSShreyas Bhatewara struct Vmxnet3_DSDevRead { 824d1a890faSShreyas Bhatewara /* read-only region for device, read by dev in response to a SET cmd */ 825d1a890faSShreyas Bhatewara struct Vmxnet3_MiscConf misc; 826d1a890faSShreyas Bhatewara struct Vmxnet3_IntrConf intrConf; 827d1a890faSShreyas Bhatewara struct Vmxnet3_RxFilterConf rxFilterConf; 828d1a890faSShreyas Bhatewara struct Vmxnet3_VariableLenConfDesc rssConfDesc; 829d1a890faSShreyas Bhatewara struct Vmxnet3_VariableLenConfDesc pmConfDesc; 830d1a890faSShreyas Bhatewara struct Vmxnet3_VariableLenConfDesc pluginConfDesc; 831d1a890faSShreyas Bhatewara }; 832d1a890faSShreyas Bhatewara 83339f9895aSRonak Doshi struct Vmxnet3_DSDevReadExt { 83439f9895aSRonak Doshi /* read-only region for device, read by dev in response to a SET cmd */ 83539f9895aSRonak Doshi struct Vmxnet3_IntrConfExt intrConfExt; 83639f9895aSRonak Doshi }; 83739f9895aSRonak Doshi 838d1a890faSShreyas Bhatewara /* All structures in DriverShared are padded to multiples of 8 bytes */ 839d1a890faSShreyas Bhatewara struct Vmxnet3_DriverShared { 840115924b6SShreyas Bhatewara __le32 magic; 841d1a890faSShreyas Bhatewara /* make devRead start at 64bit boundaries */ 84239f9895aSRonak Doshi __le32 size; /* size of DriverShared */ 843d1a890faSShreyas Bhatewara struct Vmxnet3_DSDevRead devRead; 844115924b6SShreyas Bhatewara __le32 ecr; 845f35c7480SShrikrishna Khare __le32 reserved; 846f35c7480SShrikrishna Khare union { 847f35c7480SShrikrishna Khare __le32 reserved1[4]; 848f35c7480SShrikrishna Khare union Vmxnet3_CmdInfo cmdInfo; /* only valid in the context of 849f35c7480SShrikrishna Khare * executing the relevant 850f35c7480SShrikrishna Khare * command 851f35c7480SShrikrishna Khare */ 852f35c7480SShrikrishna Khare } cu; 85339f9895aSRonak Doshi struct Vmxnet3_DSDevReadExt devReadExt; 854d1a890faSShreyas Bhatewara }; 855d1a890faSShreyas Bhatewara 856d1a890faSShreyas Bhatewara 857d1a890faSShreyas Bhatewara #define VMXNET3_ECR_RQERR (1 << 0) 858d1a890faSShreyas Bhatewara #define VMXNET3_ECR_TQERR (1 << 1) 859d1a890faSShreyas Bhatewara #define VMXNET3_ECR_LINK (1 << 2) 860d1a890faSShreyas Bhatewara #define VMXNET3_ECR_DIC (1 << 3) 861d1a890faSShreyas Bhatewara #define VMXNET3_ECR_DEBUG (1 << 4) 862d1a890faSShreyas Bhatewara 863d1a890faSShreyas Bhatewara /* flip the gen bit of a ring */ 864d1a890faSShreyas Bhatewara #define VMXNET3_FLIP_RING_GEN(gen) ((gen) = (gen) ^ 0x1) 865d1a890faSShreyas Bhatewara 866d1a890faSShreyas Bhatewara /* only use this if moving the idx won't affect the gen bit */ 867d1a890faSShreyas Bhatewara #define VMXNET3_INC_RING_IDX_ONLY(idx, ring_size) \ 868d1a890faSShreyas Bhatewara do {\ 869d1a890faSShreyas Bhatewara (idx)++;\ 870d1a890faSShreyas Bhatewara if (unlikely((idx) == (ring_size))) {\ 871d1a890faSShreyas Bhatewara (idx) = 0;\ 872d1a890faSShreyas Bhatewara } \ 873d1a890faSShreyas Bhatewara } while (0) 874d1a890faSShreyas Bhatewara 875d1a890faSShreyas Bhatewara #define VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid) \ 876d1a890faSShreyas Bhatewara (vfTable[vid >> 5] |= (1 << (vid & 31))) 877d1a890faSShreyas Bhatewara #define VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid) \ 878d1a890faSShreyas Bhatewara (vfTable[vid >> 5] &= ~(1 << (vid & 31))) 879d1a890faSShreyas Bhatewara 880d1a890faSShreyas Bhatewara #define VMXNET3_VFTABLE_ENTRY_IS_SET(vfTable, vid) \ 881d1a890faSShreyas Bhatewara ((vfTable[vid >> 5] & (1 << (vid & 31))) != 0) 882d1a890faSShreyas Bhatewara 883d1a890faSShreyas Bhatewara #define VMXNET3_MAX_MTU 9000 8848c5663e4SRonak Doshi #define VMXNET3_V6_MAX_MTU 9190 885d1a890faSShreyas Bhatewara #define VMXNET3_MIN_MTU 60 886d1a890faSShreyas Bhatewara 887d1a890faSShreyas Bhatewara #define VMXNET3_LINK_UP (10000 << 16 | 1) /* 10 Gbps, up */ 888d1a890faSShreyas Bhatewara #define VMXNET3_LINK_DOWN 0 889d1a890faSShreyas Bhatewara 8906f91f4baSRonak Doshi #define VMXNET3_DCR_ERROR 31 /* error when bit 31 of DCR is set */ 8916f91f4baSRonak Doshi #define VMXNET3_CAP_UDP_RSS 0 /* bit 0 of DCR 0 */ 8926f91f4baSRonak Doshi #define VMXNET3_CAP_ESP_RSS_IPV4 1 /* bit 1 of DCR 0 */ 8936f91f4baSRonak Doshi #define VMXNET3_CAP_GENEVE_CHECKSUM_OFFLOAD 2 /* bit 2 of DCR 0 */ 8946f91f4baSRonak Doshi #define VMXNET3_CAP_GENEVE_TSO 3 /* bit 3 of DCR 0 */ 8956f91f4baSRonak Doshi #define VMXNET3_CAP_VXLAN_CHECKSUM_OFFLOAD 4 /* bit 4 of DCR 0 */ 8966f91f4baSRonak Doshi #define VMXNET3_CAP_VXLAN_TSO 5 /* bit 5 of DCR 0 */ 8976f91f4baSRonak Doshi #define VMXNET3_CAP_GENEVE_OUTER_CHECKSUM_OFFLOAD 6 /* bit 6 of DCR 0 */ 8986f91f4baSRonak Doshi #define VMXNET3_CAP_VXLAN_OUTER_CHECKSUM_OFFLOAD 7 /* bit 7 of DCR 0 */ 8996f91f4baSRonak Doshi #define VMXNET3_CAP_PKT_STEERING_IPV4 8 /* bit 8 of DCR 0 */ 9006f91f4baSRonak Doshi #define VMXNET3_CAP_VERSION_4_MAX VMXNET3_CAP_PKT_STEERING_IPV4 9016f91f4baSRonak Doshi #define VMXNET3_CAP_ESP_RSS_IPV6 9 /* bit 9 of DCR 0 */ 9026f91f4baSRonak Doshi #define VMXNET3_CAP_VERSION_5_MAX VMXNET3_CAP_ESP_RSS_IPV6 9036f91f4baSRonak Doshi #define VMXNET3_CAP_ESP_OVER_UDP_RSS 10 /* bit 10 of DCR 0 */ 9046f91f4baSRonak Doshi #define VMXNET3_CAP_INNER_RSS 11 /* bit 11 of DCR 0 */ 9056f91f4baSRonak Doshi #define VMXNET3_CAP_INNER_ESP_RSS 12 /* bit 12 of DCR 0 */ 9066f91f4baSRonak Doshi #define VMXNET3_CAP_CRC32_HASH_FUNC 13 /* bit 13 of DCR 0 */ 9076f91f4baSRonak Doshi #define VMXNET3_CAP_VERSION_6_MAX VMXNET3_CAP_CRC32_HASH_FUNC 9086f91f4baSRonak Doshi #define VMXNET3_CAP_OAM_FILTER 14 /* bit 14 of DCR 0 */ 9096f91f4baSRonak Doshi #define VMXNET3_CAP_ESP_QS 15 /* bit 15 of DCR 0 */ 9106f91f4baSRonak Doshi #define VMXNET3_CAP_LARGE_BAR 16 /* bit 16 of DCR 0 */ 9116f91f4baSRonak Doshi #define VMXNET3_CAP_OOORX_COMP 17 /* bit 17 of DCR 0 */ 9126f91f4baSRonak Doshi #define VMXNET3_CAP_VERSION_7_MAX 18 9136f91f4baSRonak Doshi /* when new capability is introduced, update VMXNET3_CAP_MAX */ 9146f91f4baSRonak Doshi #define VMXNET3_CAP_MAX VMXNET3_CAP_VERSION_7_MAX 9156f91f4baSRonak Doshi 916*2e5010fdSRonak Doshi #define VMXNET3_OFFLOAD_TSO BIT(0) 917*2e5010fdSRonak Doshi #define VMXNET3_OFFLOAD_LRO BIT(1) 918*2e5010fdSRonak Doshi 919d1a890faSShreyas Bhatewara #endif /* _VMXNET3_DEFS_H_ */ 920