1d1a890faSShreyas Bhatewara /* 2d1a890faSShreyas Bhatewara * Linux driver for VMware's vmxnet3 ethernet NIC. 3d1a890faSShreyas Bhatewara * 4d1a890faSShreyas Bhatewara * Copyright (C) 2008-2009, 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 * 23d1a890faSShreyas Bhatewara * Maintained by: Shreyas Bhatewara <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 */ 43d1a890faSShreyas Bhatewara VMXNET3_REG_ECR = 0x40 /* Event Cause Register */ 44d1a890faSShreyas Bhatewara }; 45d1a890faSShreyas Bhatewara 46d1a890faSShreyas Bhatewara /* BAR 0 */ 47d1a890faSShreyas Bhatewara enum { 48d1a890faSShreyas Bhatewara VMXNET3_REG_IMR = 0x0, /* Interrupt Mask Register */ 49d1a890faSShreyas Bhatewara VMXNET3_REG_TXPROD = 0x600, /* Tx Producer Index */ 50d1a890faSShreyas Bhatewara VMXNET3_REG_RXPROD = 0x800, /* Rx Producer Index for ring 1 */ 51d1a890faSShreyas Bhatewara VMXNET3_REG_RXPROD2 = 0xA00 /* Rx Producer Index for ring 2 */ 52d1a890faSShreyas Bhatewara }; 53d1a890faSShreyas Bhatewara 54d1a890faSShreyas Bhatewara #define VMXNET3_PT_REG_SIZE 4096 /* BAR 0 */ 55d1a890faSShreyas Bhatewara #define VMXNET3_VD_REG_SIZE 4096 /* BAR 1 */ 56d1a890faSShreyas Bhatewara 57d1a890faSShreyas Bhatewara #define VMXNET3_REG_ALIGN 8 /* All registers are 8-byte aligned. */ 58d1a890faSShreyas Bhatewara #define VMXNET3_REG_ALIGN_MASK 0x7 59d1a890faSShreyas Bhatewara 60d1a890faSShreyas Bhatewara /* I/O Mapped access to registers */ 61d1a890faSShreyas Bhatewara #define VMXNET3_IO_TYPE_PT 0 62d1a890faSShreyas Bhatewara #define VMXNET3_IO_TYPE_VD 1 63d1a890faSShreyas Bhatewara #define VMXNET3_IO_ADDR(type, reg) (((type) << 24) | ((reg) & 0xFFFFFF)) 64d1a890faSShreyas Bhatewara #define VMXNET3_IO_TYPE(addr) ((addr) >> 24) 65d1a890faSShreyas Bhatewara #define VMXNET3_IO_REG(addr) ((addr) & 0xFFFFFF) 66d1a890faSShreyas Bhatewara 67d1a890faSShreyas Bhatewara enum { 68d1a890faSShreyas Bhatewara VMXNET3_CMD_FIRST_SET = 0xCAFE0000, 69d1a890faSShreyas Bhatewara VMXNET3_CMD_ACTIVATE_DEV = VMXNET3_CMD_FIRST_SET, 70d1a890faSShreyas Bhatewara VMXNET3_CMD_QUIESCE_DEV, 71d1a890faSShreyas Bhatewara VMXNET3_CMD_RESET_DEV, 72d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_RX_MODE, 73d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_MAC_FILTERS, 74d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_VLAN_FILTERS, 75d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_RSSIDT, 76d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_IML, 77d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_PMCFG, 78d1a890faSShreyas Bhatewara VMXNET3_CMD_UPDATE_FEATURE, 79d1a890faSShreyas Bhatewara VMXNET3_CMD_LOAD_PLUGIN, 80d1a890faSShreyas Bhatewara 81d1a890faSShreyas Bhatewara VMXNET3_CMD_FIRST_GET = 0xF00D0000, 82d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_QUEUE_STATUS = VMXNET3_CMD_FIRST_GET, 83d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_STATS, 84d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_LINK, 85d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_PERM_MAC_LO, 86d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_PERM_MAC_HI, 87d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_DID_LO, 88d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_DID_HI, 89d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_DEV_EXTRA_INFO, 90d1a890faSShreyas Bhatewara VMXNET3_CMD_GET_CONF_INTR 91d1a890faSShreyas Bhatewara }; 92d1a890faSShreyas Bhatewara 93115924b6SShreyas Bhatewara /* 94115924b6SShreyas Bhatewara * Little Endian layout of bitfields - 95115924b6SShreyas Bhatewara * Byte 0 : 7.....len.....0 96115924b6SShreyas Bhatewara * Byte 1 : rsvd gen 13.len.8 97115924b6SShreyas Bhatewara * Byte 2 : 5.msscof.0 ext1 dtype 98115924b6SShreyas Bhatewara * Byte 3 : 13...msscof...6 99115924b6SShreyas Bhatewara * 100115924b6SShreyas Bhatewara * Big Endian layout of bitfields - 101115924b6SShreyas Bhatewara * Byte 0: 13...msscof...6 102115924b6SShreyas Bhatewara * Byte 1 : 5.msscof.0 ext1 dtype 103115924b6SShreyas Bhatewara * Byte 2 : rsvd gen 13.len.8 104115924b6SShreyas Bhatewara * Byte 3 : 7.....len.....0 105115924b6SShreyas Bhatewara * 106115924b6SShreyas Bhatewara * Thus, le32_to_cpu on the dword will allow the big endian driver to read 107115924b6SShreyas Bhatewara * the bit fields correctly. And cpu_to_le32 will convert bitfields 108115924b6SShreyas Bhatewara * bit fields written by big endian driver to format required by device. 109115924b6SShreyas Bhatewara */ 110d1a890faSShreyas Bhatewara 111115924b6SShreyas Bhatewara struct Vmxnet3_TxDesc { 112115924b6SShreyas Bhatewara __le64 addr; 113115924b6SShreyas Bhatewara 114115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 115115924b6SShreyas Bhatewara u32 msscof:14; /* MSS, checksum offset, flags */ 116115924b6SShreyas Bhatewara u32 ext1:1; 117115924b6SShreyas Bhatewara u32 dtype:1; /* descriptor type */ 118115924b6SShreyas Bhatewara u32 rsvd:1; 119115924b6SShreyas Bhatewara u32 gen:1; /* generation bit */ 120115924b6SShreyas Bhatewara u32 len:14; 121115924b6SShreyas Bhatewara #else 122d1a890faSShreyas Bhatewara u32 len:14; 123d1a890faSShreyas Bhatewara u32 gen:1; /* generation bit */ 124d1a890faSShreyas Bhatewara u32 rsvd:1; 125d1a890faSShreyas Bhatewara u32 dtype:1; /* descriptor type */ 126d1a890faSShreyas Bhatewara u32 ext1:1; 127d1a890faSShreyas Bhatewara u32 msscof:14; /* MSS, checksum offset, flags */ 128115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 129d1a890faSShreyas Bhatewara 130115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 131115924b6SShreyas Bhatewara u32 tci:16; /* Tag to Insert */ 132115924b6SShreyas Bhatewara u32 ti:1; /* VLAN Tag Insertion */ 133115924b6SShreyas Bhatewara u32 ext2:1; 134115924b6SShreyas Bhatewara u32 cq:1; /* completion request */ 135115924b6SShreyas Bhatewara u32 eop:1; /* End Of Packet */ 136115924b6SShreyas Bhatewara u32 om:2; /* offload mode */ 137115924b6SShreyas Bhatewara u32 hlen:10; /* header len */ 138115924b6SShreyas Bhatewara #else 139d1a890faSShreyas Bhatewara u32 hlen:10; /* header len */ 140d1a890faSShreyas Bhatewara u32 om:2; /* offload mode */ 141d1a890faSShreyas Bhatewara u32 eop:1; /* End Of Packet */ 142d1a890faSShreyas Bhatewara u32 cq:1; /* completion request */ 143d1a890faSShreyas Bhatewara u32 ext2:1; 144d1a890faSShreyas Bhatewara u32 ti:1; /* VLAN Tag Insertion */ 145d1a890faSShreyas Bhatewara u32 tci:16; /* Tag to Insert */ 146115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 147d1a890faSShreyas Bhatewara }; 148d1a890faSShreyas Bhatewara 149d1a890faSShreyas Bhatewara /* TxDesc.OM values */ 150d1a890faSShreyas Bhatewara #define VMXNET3_OM_NONE 0 151d1a890faSShreyas Bhatewara #define VMXNET3_OM_CSUM 2 152d1a890faSShreyas Bhatewara #define VMXNET3_OM_TSO 3 153d1a890faSShreyas Bhatewara 154d1a890faSShreyas Bhatewara /* fields in TxDesc we access w/o using bit fields */ 155d1a890faSShreyas Bhatewara #define VMXNET3_TXD_EOP_SHIFT 12 156d1a890faSShreyas Bhatewara #define VMXNET3_TXD_CQ_SHIFT 13 157d1a890faSShreyas Bhatewara #define VMXNET3_TXD_GEN_SHIFT 14 158115924b6SShreyas Bhatewara #define VMXNET3_TXD_EOP_DWORD_SHIFT 3 159115924b6SShreyas Bhatewara #define VMXNET3_TXD_GEN_DWORD_SHIFT 2 160d1a890faSShreyas Bhatewara 161d1a890faSShreyas Bhatewara #define VMXNET3_TXD_CQ (1 << VMXNET3_TXD_CQ_SHIFT) 162d1a890faSShreyas Bhatewara #define VMXNET3_TXD_EOP (1 << VMXNET3_TXD_EOP_SHIFT) 163d1a890faSShreyas Bhatewara #define VMXNET3_TXD_GEN (1 << VMXNET3_TXD_GEN_SHIFT) 164d1a890faSShreyas Bhatewara 165d1a890faSShreyas Bhatewara #define VMXNET3_HDR_COPY_SIZE 128 166d1a890faSShreyas Bhatewara 167d1a890faSShreyas Bhatewara 168d1a890faSShreyas Bhatewara struct Vmxnet3_TxDataDesc { 169d1a890faSShreyas Bhatewara u8 data[VMXNET3_HDR_COPY_SIZE]; 170d1a890faSShreyas Bhatewara }; 171d1a890faSShreyas Bhatewara 172115924b6SShreyas Bhatewara #define VMXNET3_TCD_GEN_SHIFT 31 173115924b6SShreyas Bhatewara #define VMXNET3_TCD_GEN_SIZE 1 174115924b6SShreyas Bhatewara #define VMXNET3_TCD_TXIDX_SHIFT 0 175115924b6SShreyas Bhatewara #define VMXNET3_TCD_TXIDX_SIZE 12 176115924b6SShreyas Bhatewara #define VMXNET3_TCD_GEN_DWORD_SHIFT 3 177d1a890faSShreyas Bhatewara 178d1a890faSShreyas Bhatewara struct Vmxnet3_TxCompDesc { 179d1a890faSShreyas Bhatewara u32 txdIdx:12; /* Index of the EOP TxDesc */ 180d1a890faSShreyas Bhatewara u32 ext1:20; 181d1a890faSShreyas Bhatewara 182115924b6SShreyas Bhatewara __le32 ext2; 183115924b6SShreyas Bhatewara __le32 ext3; 184d1a890faSShreyas Bhatewara 185d1a890faSShreyas Bhatewara u32 rsvd:24; 186d1a890faSShreyas Bhatewara u32 type:7; /* completion type */ 187d1a890faSShreyas Bhatewara u32 gen:1; /* generation bit */ 188d1a890faSShreyas Bhatewara }; 189d1a890faSShreyas Bhatewara 190d1a890faSShreyas Bhatewara struct Vmxnet3_RxDesc { 191115924b6SShreyas Bhatewara __le64 addr; 192d1a890faSShreyas Bhatewara 193115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 194115924b6SShreyas Bhatewara u32 gen:1; /* Generation bit */ 195115924b6SShreyas Bhatewara u32 rsvd:15; 196115924b6SShreyas Bhatewara u32 dtype:1; /* Descriptor type */ 197115924b6SShreyas Bhatewara u32 btype:1; /* Buffer Type */ 198115924b6SShreyas Bhatewara u32 len:14; 199115924b6SShreyas Bhatewara #else 200d1a890faSShreyas Bhatewara u32 len:14; 201d1a890faSShreyas Bhatewara u32 btype:1; /* Buffer Type */ 202d1a890faSShreyas Bhatewara u32 dtype:1; /* Descriptor type */ 203d1a890faSShreyas Bhatewara u32 rsvd:15; 204d1a890faSShreyas Bhatewara u32 gen:1; /* Generation bit */ 205115924b6SShreyas Bhatewara #endif 206d1a890faSShreyas Bhatewara u32 ext1; 207d1a890faSShreyas Bhatewara }; 208d1a890faSShreyas Bhatewara 209d1a890faSShreyas Bhatewara /* values of RXD.BTYPE */ 210d1a890faSShreyas Bhatewara #define VMXNET3_RXD_BTYPE_HEAD 0 /* head only */ 211d1a890faSShreyas Bhatewara #define VMXNET3_RXD_BTYPE_BODY 1 /* body only */ 212d1a890faSShreyas Bhatewara 213d1a890faSShreyas Bhatewara /* fields in RxDesc we access w/o using bit fields */ 214d1a890faSShreyas Bhatewara #define VMXNET3_RXD_BTYPE_SHIFT 14 215d1a890faSShreyas Bhatewara #define VMXNET3_RXD_GEN_SHIFT 31 216d1a890faSShreyas Bhatewara 217d1a890faSShreyas Bhatewara struct Vmxnet3_RxCompDesc { 218115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 219115924b6SShreyas Bhatewara u32 ext2:1; 220115924b6SShreyas Bhatewara u32 cnc:1; /* Checksum Not Calculated */ 221115924b6SShreyas Bhatewara u32 rssType:4; /* RSS hash type used */ 222115924b6SShreyas Bhatewara u32 rqID:10; /* rx queue/ring ID */ 223115924b6SShreyas Bhatewara u32 sop:1; /* Start of Packet */ 224115924b6SShreyas Bhatewara u32 eop:1; /* End of Packet */ 225115924b6SShreyas Bhatewara u32 ext1:2; 226115924b6SShreyas Bhatewara u32 rxdIdx:12; /* Index of the RxDesc */ 227115924b6SShreyas Bhatewara #else 228d1a890faSShreyas Bhatewara u32 rxdIdx:12; /* Index of the RxDesc */ 229d1a890faSShreyas Bhatewara u32 ext1:2; 230d1a890faSShreyas Bhatewara u32 eop:1; /* End of Packet */ 231d1a890faSShreyas Bhatewara u32 sop:1; /* Start of Packet */ 232d1a890faSShreyas Bhatewara u32 rqID:10; /* rx queue/ring ID */ 233d1a890faSShreyas Bhatewara u32 rssType:4; /* RSS hash type used */ 234d1a890faSShreyas Bhatewara u32 cnc:1; /* Checksum Not Calculated */ 235d1a890faSShreyas Bhatewara u32 ext2:1; 236115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 237d1a890faSShreyas Bhatewara 238115924b6SShreyas Bhatewara __le32 rssHash; /* RSS hash value */ 239d1a890faSShreyas Bhatewara 240115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 241115924b6SShreyas Bhatewara u32 tci:16; /* Tag stripped */ 242115924b6SShreyas Bhatewara u32 ts:1; /* Tag is stripped */ 243115924b6SShreyas Bhatewara u32 err:1; /* Error */ 244115924b6SShreyas Bhatewara u32 len:14; /* data length */ 245115924b6SShreyas Bhatewara #else 246d1a890faSShreyas Bhatewara u32 len:14; /* data length */ 247d1a890faSShreyas Bhatewara u32 err:1; /* Error */ 248d1a890faSShreyas Bhatewara u32 ts:1; /* Tag is stripped */ 249d1a890faSShreyas Bhatewara u32 tci:16; /* Tag stripped */ 250115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 251d1a890faSShreyas Bhatewara 252115924b6SShreyas Bhatewara 253115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 254115924b6SShreyas Bhatewara u32 gen:1; /* generation bit */ 255115924b6SShreyas Bhatewara u32 type:7; /* completion type */ 256115924b6SShreyas Bhatewara u32 fcs:1; /* Frame CRC correct */ 257115924b6SShreyas Bhatewara u32 frg:1; /* IP Fragment */ 258115924b6SShreyas Bhatewara u32 v4:1; /* IPv4 */ 259115924b6SShreyas Bhatewara u32 v6:1; /* IPv6 */ 260115924b6SShreyas Bhatewara u32 ipc:1; /* IP Checksum Correct */ 261115924b6SShreyas Bhatewara u32 tcp:1; /* TCP packet */ 262115924b6SShreyas Bhatewara u32 udp:1; /* UDP packet */ 263115924b6SShreyas Bhatewara u32 tuc:1; /* TCP/UDP Checksum Correct */ 264115924b6SShreyas Bhatewara u32 csum:16; 265115924b6SShreyas Bhatewara #else 266d1a890faSShreyas Bhatewara u32 csum:16; 267d1a890faSShreyas Bhatewara u32 tuc:1; /* TCP/UDP Checksum Correct */ 268d1a890faSShreyas Bhatewara u32 udp:1; /* UDP packet */ 269d1a890faSShreyas Bhatewara u32 tcp:1; /* TCP packet */ 270d1a890faSShreyas Bhatewara u32 ipc:1; /* IP Checksum Correct */ 271d1a890faSShreyas Bhatewara u32 v6:1; /* IPv6 */ 272d1a890faSShreyas Bhatewara u32 v4:1; /* IPv4 */ 273d1a890faSShreyas Bhatewara u32 frg:1; /* IP Fragment */ 274d1a890faSShreyas Bhatewara u32 fcs:1; /* Frame CRC correct */ 275d1a890faSShreyas Bhatewara u32 type:7; /* completion type */ 276d1a890faSShreyas Bhatewara u32 gen:1; /* generation bit */ 277115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 278d1a890faSShreyas Bhatewara }; 279d1a890faSShreyas Bhatewara 280d1a890faSShreyas Bhatewara /* fields in RxCompDesc we access via Vmxnet3_GenericDesc.dword[3] */ 281d1a890faSShreyas Bhatewara #define VMXNET3_RCD_TUC_SHIFT 16 282d1a890faSShreyas Bhatewara #define VMXNET3_RCD_IPC_SHIFT 19 283d1a890faSShreyas Bhatewara 284d1a890faSShreyas Bhatewara /* fields in RxCompDesc we access via Vmxnet3_GenericDesc.qword[1] */ 285d1a890faSShreyas Bhatewara #define VMXNET3_RCD_TYPE_SHIFT 56 286d1a890faSShreyas Bhatewara #define VMXNET3_RCD_GEN_SHIFT 63 287d1a890faSShreyas Bhatewara 288d1a890faSShreyas Bhatewara /* csum OK for TCP/UDP pkts over IP */ 289d1a890faSShreyas Bhatewara #define VMXNET3_RCD_CSUM_OK (1 << VMXNET3_RCD_TUC_SHIFT | \ 290d1a890faSShreyas Bhatewara 1 << VMXNET3_RCD_IPC_SHIFT) 291115924b6SShreyas Bhatewara #define VMXNET3_TXD_GEN_SIZE 1 292115924b6SShreyas Bhatewara #define VMXNET3_TXD_EOP_SIZE 1 293d1a890faSShreyas Bhatewara 294d1a890faSShreyas Bhatewara /* value of RxCompDesc.rssType */ 295d1a890faSShreyas Bhatewara enum { 296d1a890faSShreyas Bhatewara VMXNET3_RCD_RSS_TYPE_NONE = 0, 297d1a890faSShreyas Bhatewara VMXNET3_RCD_RSS_TYPE_IPV4 = 1, 298d1a890faSShreyas Bhatewara VMXNET3_RCD_RSS_TYPE_TCPIPV4 = 2, 299d1a890faSShreyas Bhatewara VMXNET3_RCD_RSS_TYPE_IPV6 = 3, 300d1a890faSShreyas Bhatewara VMXNET3_RCD_RSS_TYPE_TCPIPV6 = 4, 301d1a890faSShreyas Bhatewara }; 302d1a890faSShreyas Bhatewara 303d1a890faSShreyas Bhatewara 304d1a890faSShreyas Bhatewara /* a union for accessing all cmd/completion descriptors */ 305d1a890faSShreyas Bhatewara union Vmxnet3_GenericDesc { 306115924b6SShreyas Bhatewara __le64 qword[2]; 307115924b6SShreyas Bhatewara __le32 dword[4]; 308115924b6SShreyas Bhatewara __le16 word[8]; 309d1a890faSShreyas Bhatewara struct Vmxnet3_TxDesc txd; 310d1a890faSShreyas Bhatewara struct Vmxnet3_RxDesc rxd; 311d1a890faSShreyas Bhatewara struct Vmxnet3_TxCompDesc tcd; 312d1a890faSShreyas Bhatewara struct Vmxnet3_RxCompDesc rcd; 313d1a890faSShreyas Bhatewara }; 314d1a890faSShreyas Bhatewara 315d1a890faSShreyas Bhatewara #define VMXNET3_INIT_GEN 1 316d1a890faSShreyas Bhatewara 317d1a890faSShreyas Bhatewara /* Max size of a single tx buffer */ 318d1a890faSShreyas Bhatewara #define VMXNET3_MAX_TX_BUF_SIZE (1 << 14) 319d1a890faSShreyas Bhatewara 320d1a890faSShreyas Bhatewara /* # of tx desc needed for a tx buffer size */ 321d1a890faSShreyas Bhatewara #define VMXNET3_TXD_NEEDED(size) (((size) + VMXNET3_MAX_TX_BUF_SIZE - 1) / \ 322d1a890faSShreyas Bhatewara VMXNET3_MAX_TX_BUF_SIZE) 323d1a890faSShreyas Bhatewara 324d1a890faSShreyas Bhatewara /* max # of tx descs for a non-tso pkt */ 325d1a890faSShreyas Bhatewara #define VMXNET3_MAX_TXD_PER_PKT 16 326d1a890faSShreyas Bhatewara 327d1a890faSShreyas Bhatewara /* Max size of a single rx buffer */ 328d1a890faSShreyas Bhatewara #define VMXNET3_MAX_RX_BUF_SIZE ((1 << 14) - 1) 329d1a890faSShreyas Bhatewara /* Minimum size of a type 0 buffer */ 330d1a890faSShreyas Bhatewara #define VMXNET3_MIN_T0_BUF_SIZE 128 331d1a890faSShreyas Bhatewara #define VMXNET3_MAX_CSUM_OFFSET 1024 332d1a890faSShreyas Bhatewara 333d1a890faSShreyas Bhatewara /* Ring base address alignment */ 334d1a890faSShreyas Bhatewara #define VMXNET3_RING_BA_ALIGN 512 335d1a890faSShreyas Bhatewara #define VMXNET3_RING_BA_MASK (VMXNET3_RING_BA_ALIGN - 1) 336d1a890faSShreyas Bhatewara 337d1a890faSShreyas Bhatewara /* Ring size must be a multiple of 32 */ 338d1a890faSShreyas Bhatewara #define VMXNET3_RING_SIZE_ALIGN 32 339d1a890faSShreyas Bhatewara #define VMXNET3_RING_SIZE_MASK (VMXNET3_RING_SIZE_ALIGN - 1) 340d1a890faSShreyas Bhatewara 341d1a890faSShreyas Bhatewara /* Max ring size */ 342d1a890faSShreyas Bhatewara #define VMXNET3_TX_RING_MAX_SIZE 4096 343d1a890faSShreyas Bhatewara #define VMXNET3_TC_RING_MAX_SIZE 4096 344d1a890faSShreyas Bhatewara #define VMXNET3_RX_RING_MAX_SIZE 4096 345d1a890faSShreyas Bhatewara #define VMXNET3_RC_RING_MAX_SIZE 8192 346d1a890faSShreyas Bhatewara 347d1a890faSShreyas Bhatewara /* a list of reasons for queue stop */ 348d1a890faSShreyas Bhatewara 349d1a890faSShreyas Bhatewara enum { 350d1a890faSShreyas Bhatewara VMXNET3_ERR_NOEOP = 0x80000000, /* cannot find the EOP desc of a pkt */ 351d1a890faSShreyas Bhatewara VMXNET3_ERR_TXD_REUSE = 0x80000001, /* reuse TxDesc before tx completion */ 352d1a890faSShreyas Bhatewara VMXNET3_ERR_BIG_PKT = 0x80000002, /* too many TxDesc for a pkt */ 353d1a890faSShreyas Bhatewara VMXNET3_ERR_DESC_NOT_SPT = 0x80000003, /* descriptor type not supported */ 354d1a890faSShreyas Bhatewara VMXNET3_ERR_SMALL_BUF = 0x80000004, /* type 0 buffer too small */ 355d1a890faSShreyas Bhatewara VMXNET3_ERR_STRESS = 0x80000005, /* stress option firing in vmkernel */ 356d1a890faSShreyas Bhatewara VMXNET3_ERR_SWITCH = 0x80000006, /* mode switch failure */ 357d1a890faSShreyas Bhatewara VMXNET3_ERR_TXD_INVALID = 0x80000007, /* invalid TxDesc */ 358d1a890faSShreyas Bhatewara }; 359d1a890faSShreyas Bhatewara 360d1a890faSShreyas Bhatewara /* completion descriptor types */ 361d1a890faSShreyas Bhatewara #define VMXNET3_CDTYPE_TXCOMP 0 /* Tx Completion Descriptor */ 362d1a890faSShreyas Bhatewara #define VMXNET3_CDTYPE_RXCOMP 3 /* Rx Completion Descriptor */ 363d1a890faSShreyas Bhatewara 364d1a890faSShreyas Bhatewara enum { 365d1a890faSShreyas Bhatewara VMXNET3_GOS_BITS_UNK = 0, /* unknown */ 366d1a890faSShreyas Bhatewara VMXNET3_GOS_BITS_32 = 1, 367d1a890faSShreyas Bhatewara VMXNET3_GOS_BITS_64 = 2, 368d1a890faSShreyas Bhatewara }; 369d1a890faSShreyas Bhatewara 370d1a890faSShreyas Bhatewara #define VMXNET3_GOS_TYPE_LINUX 1 371d1a890faSShreyas Bhatewara 372d1a890faSShreyas Bhatewara 373d1a890faSShreyas Bhatewara struct Vmxnet3_GOSInfo { 374115924b6SShreyas Bhatewara #ifdef __BIG_ENDIAN_BITFIELD 375115924b6SShreyas Bhatewara u32 gosMisc:10; /* other info about gos */ 376115924b6SShreyas Bhatewara u32 gosVer:16; /* gos version */ 377115924b6SShreyas Bhatewara u32 gosType:4; /* which guest */ 378115924b6SShreyas Bhatewara u32 gosBits:2; /* 32-bit or 64-bit? */ 379115924b6SShreyas Bhatewara #else 380d1a890faSShreyas Bhatewara u32 gosBits:2; /* 32-bit or 64-bit? */ 381d1a890faSShreyas Bhatewara u32 gosType:4; /* which guest */ 382d1a890faSShreyas Bhatewara u32 gosVer:16; /* gos version */ 383d1a890faSShreyas Bhatewara u32 gosMisc:10; /* other info about gos */ 384115924b6SShreyas Bhatewara #endif /* __BIG_ENDIAN_BITFIELD */ 385d1a890faSShreyas Bhatewara }; 386d1a890faSShreyas Bhatewara 387d1a890faSShreyas Bhatewara struct Vmxnet3_DriverInfo { 388115924b6SShreyas Bhatewara __le32 version; 389d1a890faSShreyas Bhatewara struct Vmxnet3_GOSInfo gos; 390115924b6SShreyas Bhatewara __le32 vmxnet3RevSpt; 391115924b6SShreyas Bhatewara __le32 uptVerSpt; 392d1a890faSShreyas Bhatewara }; 393d1a890faSShreyas Bhatewara 394d1a890faSShreyas Bhatewara 395d1a890faSShreyas Bhatewara #define VMXNET3_REV1_MAGIC 0xbabefee1 396d1a890faSShreyas Bhatewara 397d1a890faSShreyas Bhatewara /* 398d1a890faSShreyas Bhatewara * QueueDescPA must be 128 bytes aligned. It points to an array of 399d1a890faSShreyas Bhatewara * Vmxnet3_TxQueueDesc followed by an array of Vmxnet3_RxQueueDesc. 400d1a890faSShreyas Bhatewara * The number of Vmxnet3_TxQueueDesc/Vmxnet3_RxQueueDesc are specified by 401d1a890faSShreyas Bhatewara * Vmxnet3_MiscConf.numTxQueues/numRxQueues, respectively. 402d1a890faSShreyas Bhatewara */ 403d1a890faSShreyas Bhatewara #define VMXNET3_QUEUE_DESC_ALIGN 128 404d1a890faSShreyas Bhatewara 405d1a890faSShreyas Bhatewara 406d1a890faSShreyas Bhatewara struct Vmxnet3_MiscConf { 407d1a890faSShreyas Bhatewara struct Vmxnet3_DriverInfo driverInfo; 408115924b6SShreyas Bhatewara __le64 uptFeatures; 409115924b6SShreyas Bhatewara __le64 ddPA; /* driver data PA */ 410115924b6SShreyas Bhatewara __le64 queueDescPA; /* queue descriptor table PA */ 411115924b6SShreyas Bhatewara __le32 ddLen; /* driver data len */ 412115924b6SShreyas Bhatewara __le32 queueDescLen; /* queue desc. table len in bytes */ 413115924b6SShreyas Bhatewara __le32 mtu; 414115924b6SShreyas Bhatewara __le16 maxNumRxSG; 415d1a890faSShreyas Bhatewara u8 numTxQueues; 416d1a890faSShreyas Bhatewara u8 numRxQueues; 417115924b6SShreyas Bhatewara __le32 reserved[4]; 418d1a890faSShreyas Bhatewara }; 419d1a890faSShreyas Bhatewara 420d1a890faSShreyas Bhatewara 421d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueConf { 422115924b6SShreyas Bhatewara __le64 txRingBasePA; 423115924b6SShreyas Bhatewara __le64 dataRingBasePA; 424115924b6SShreyas Bhatewara __le64 compRingBasePA; 425115924b6SShreyas Bhatewara __le64 ddPA; /* driver data */ 426115924b6SShreyas Bhatewara __le64 reserved; 427115924b6SShreyas Bhatewara __le32 txRingSize; /* # of tx desc */ 428115924b6SShreyas Bhatewara __le32 dataRingSize; /* # of data desc */ 429115924b6SShreyas Bhatewara __le32 compRingSize; /* # of comp desc */ 430115924b6SShreyas Bhatewara __le32 ddLen; /* size of driver data */ 431d1a890faSShreyas Bhatewara u8 intrIdx; 432d1a890faSShreyas Bhatewara u8 _pad[7]; 433d1a890faSShreyas Bhatewara }; 434d1a890faSShreyas Bhatewara 435d1a890faSShreyas Bhatewara 436d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueConf { 437115924b6SShreyas Bhatewara __le64 rxRingBasePA[2]; 438115924b6SShreyas Bhatewara __le64 compRingBasePA; 439115924b6SShreyas Bhatewara __le64 ddPA; /* driver data */ 440115924b6SShreyas Bhatewara __le64 reserved; 441115924b6SShreyas Bhatewara __le32 rxRingSize[2]; /* # of rx desc */ 442115924b6SShreyas Bhatewara __le32 compRingSize; /* # of rx comp desc */ 443115924b6SShreyas Bhatewara __le32 ddLen; /* size of driver data */ 444d1a890faSShreyas Bhatewara u8 intrIdx; 445d1a890faSShreyas Bhatewara u8 _pad[7]; 446d1a890faSShreyas Bhatewara }; 447d1a890faSShreyas Bhatewara 448d1a890faSShreyas Bhatewara 449d1a890faSShreyas Bhatewara enum vmxnet3_intr_mask_mode { 450d1a890faSShreyas Bhatewara VMXNET3_IMM_AUTO = 0, 451d1a890faSShreyas Bhatewara VMXNET3_IMM_ACTIVE = 1, 452d1a890faSShreyas Bhatewara VMXNET3_IMM_LAZY = 2 453d1a890faSShreyas Bhatewara }; 454d1a890faSShreyas Bhatewara 455d1a890faSShreyas Bhatewara enum vmxnet3_intr_type { 456d1a890faSShreyas Bhatewara VMXNET3_IT_AUTO = 0, 457d1a890faSShreyas Bhatewara VMXNET3_IT_INTX = 1, 458d1a890faSShreyas Bhatewara VMXNET3_IT_MSI = 2, 459d1a890faSShreyas Bhatewara VMXNET3_IT_MSIX = 3 460d1a890faSShreyas Bhatewara }; 461d1a890faSShreyas Bhatewara 462d1a890faSShreyas Bhatewara #define VMXNET3_MAX_TX_QUEUES 8 463d1a890faSShreyas Bhatewara #define VMXNET3_MAX_RX_QUEUES 16 464d1a890faSShreyas Bhatewara /* addition 1 for events */ 465d1a890faSShreyas Bhatewara #define VMXNET3_MAX_INTRS 25 466d1a890faSShreyas Bhatewara 467*6929fe8aSRonghua Zang /* value of intrCtrl */ 468*6929fe8aSRonghua Zang #define VMXNET3_IC_DISABLE_ALL 0x1 /* bit 0 */ 469*6929fe8aSRonghua Zang 470d1a890faSShreyas Bhatewara 471d1a890faSShreyas Bhatewara struct Vmxnet3_IntrConf { 472d1a890faSShreyas Bhatewara bool autoMask; 473d1a890faSShreyas Bhatewara u8 numIntrs; /* # of interrupts */ 474d1a890faSShreyas Bhatewara u8 eventIntrIdx; 475d1a890faSShreyas Bhatewara u8 modLevels[VMXNET3_MAX_INTRS]; /* moderation level for 476d1a890faSShreyas Bhatewara * each intr */ 477*6929fe8aSRonghua Zang __le32 intrCtrl; 478*6929fe8aSRonghua Zang __le32 reserved[2]; 479d1a890faSShreyas Bhatewara }; 480d1a890faSShreyas Bhatewara 481d1a890faSShreyas Bhatewara /* one bit per VLAN ID, the size is in the units of u32 */ 482d1a890faSShreyas Bhatewara #define VMXNET3_VFT_SIZE (4096 / (sizeof(u32) * 8)) 483d1a890faSShreyas Bhatewara 484d1a890faSShreyas Bhatewara 485d1a890faSShreyas Bhatewara struct Vmxnet3_QueueStatus { 486d1a890faSShreyas Bhatewara bool stopped; 487d1a890faSShreyas Bhatewara u8 _pad[3]; 488115924b6SShreyas Bhatewara __le32 error; 489d1a890faSShreyas Bhatewara }; 490d1a890faSShreyas Bhatewara 491d1a890faSShreyas Bhatewara 492d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueCtrl { 493115924b6SShreyas Bhatewara __le32 txNumDeferred; 494115924b6SShreyas Bhatewara __le32 txThreshold; 495115924b6SShreyas Bhatewara __le64 reserved; 496d1a890faSShreyas Bhatewara }; 497d1a890faSShreyas Bhatewara 498d1a890faSShreyas Bhatewara 499d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueCtrl { 500d1a890faSShreyas Bhatewara bool updateRxProd; 501d1a890faSShreyas Bhatewara u8 _pad[7]; 502115924b6SShreyas Bhatewara __le64 reserved; 503d1a890faSShreyas Bhatewara }; 504d1a890faSShreyas Bhatewara 505d1a890faSShreyas Bhatewara enum { 506d1a890faSShreyas Bhatewara VMXNET3_RXM_UCAST = 0x01, /* unicast only */ 507d1a890faSShreyas Bhatewara VMXNET3_RXM_MCAST = 0x02, /* multicast passing the filters */ 508d1a890faSShreyas Bhatewara VMXNET3_RXM_BCAST = 0x04, /* broadcast only */ 509d1a890faSShreyas Bhatewara VMXNET3_RXM_ALL_MULTI = 0x08, /* all multicast */ 510d1a890faSShreyas Bhatewara VMXNET3_RXM_PROMISC = 0x10 /* promiscuous */ 511d1a890faSShreyas Bhatewara }; 512d1a890faSShreyas Bhatewara 513d1a890faSShreyas Bhatewara struct Vmxnet3_RxFilterConf { 514115924b6SShreyas Bhatewara __le32 rxMode; /* VMXNET3_RXM_xxx */ 515115924b6SShreyas Bhatewara __le16 mfTableLen; /* size of the multicast filter table */ 516115924b6SShreyas Bhatewara __le16 _pad1; 517115924b6SShreyas Bhatewara __le64 mfTablePA; /* PA of the multicast filters table */ 518115924b6SShreyas Bhatewara __le32 vfTable[VMXNET3_VFT_SIZE]; /* vlan filter */ 519d1a890faSShreyas Bhatewara }; 520d1a890faSShreyas Bhatewara 521d1a890faSShreyas Bhatewara 522d1a890faSShreyas Bhatewara #define VMXNET3_PM_MAX_FILTERS 6 523d1a890faSShreyas Bhatewara #define VMXNET3_PM_MAX_PATTERN_SIZE 128 524d1a890faSShreyas Bhatewara #define VMXNET3_PM_MAX_MASK_SIZE (VMXNET3_PM_MAX_PATTERN_SIZE / 8) 525d1a890faSShreyas Bhatewara 526d1a890faSShreyas Bhatewara #define VMXNET3_PM_WAKEUP_MAGIC 0x01 /* wake up on magic pkts */ 527d1a890faSShreyas Bhatewara #define VMXNET3_PM_WAKEUP_FILTER 0x02 /* wake up on pkts matching 528d1a890faSShreyas Bhatewara * filters */ 529d1a890faSShreyas Bhatewara 530d1a890faSShreyas Bhatewara 531d1a890faSShreyas Bhatewara struct Vmxnet3_PM_PktFilter { 532d1a890faSShreyas Bhatewara u8 maskSize; 533d1a890faSShreyas Bhatewara u8 patternSize; 534d1a890faSShreyas Bhatewara u8 mask[VMXNET3_PM_MAX_MASK_SIZE]; 535d1a890faSShreyas Bhatewara u8 pattern[VMXNET3_PM_MAX_PATTERN_SIZE]; 536d1a890faSShreyas Bhatewara u8 pad[6]; 537d1a890faSShreyas Bhatewara }; 538d1a890faSShreyas Bhatewara 539d1a890faSShreyas Bhatewara 540d1a890faSShreyas Bhatewara struct Vmxnet3_PMConf { 541115924b6SShreyas Bhatewara __le16 wakeUpEvents; /* VMXNET3_PM_WAKEUP_xxx */ 542d1a890faSShreyas Bhatewara u8 numFilters; 543d1a890faSShreyas Bhatewara u8 pad[5]; 544d1a890faSShreyas Bhatewara struct Vmxnet3_PM_PktFilter filters[VMXNET3_PM_MAX_FILTERS]; 545d1a890faSShreyas Bhatewara }; 546d1a890faSShreyas Bhatewara 547d1a890faSShreyas Bhatewara 548d1a890faSShreyas Bhatewara struct Vmxnet3_VariableLenConfDesc { 549115924b6SShreyas Bhatewara __le32 confVer; 550115924b6SShreyas Bhatewara __le32 confLen; 551115924b6SShreyas Bhatewara __le64 confPA; 552d1a890faSShreyas Bhatewara }; 553d1a890faSShreyas Bhatewara 554d1a890faSShreyas Bhatewara 555d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueDesc { 556d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueCtrl ctrl; 557d1a890faSShreyas Bhatewara struct Vmxnet3_TxQueueConf conf; 558d1a890faSShreyas Bhatewara 559d1a890faSShreyas Bhatewara /* Driver read after a GET command */ 560d1a890faSShreyas Bhatewara struct Vmxnet3_QueueStatus status; 561d1a890faSShreyas Bhatewara struct UPT1_TxStats stats; 562d1a890faSShreyas Bhatewara u8 _pad[88]; /* 128 aligned */ 563d1a890faSShreyas Bhatewara }; 564d1a890faSShreyas Bhatewara 565d1a890faSShreyas Bhatewara 566d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueDesc { 567d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueCtrl ctrl; 568d1a890faSShreyas Bhatewara struct Vmxnet3_RxQueueConf conf; 569d1a890faSShreyas Bhatewara /* Driver read after a GET commad */ 570d1a890faSShreyas Bhatewara struct Vmxnet3_QueueStatus status; 571d1a890faSShreyas Bhatewara struct UPT1_RxStats stats; 572d1a890faSShreyas Bhatewara u8 __pad[88]; /* 128 aligned */ 573d1a890faSShreyas Bhatewara }; 574d1a890faSShreyas Bhatewara 575d1a890faSShreyas Bhatewara 576d1a890faSShreyas Bhatewara struct Vmxnet3_DSDevRead { 577d1a890faSShreyas Bhatewara /* read-only region for device, read by dev in response to a SET cmd */ 578d1a890faSShreyas Bhatewara struct Vmxnet3_MiscConf misc; 579d1a890faSShreyas Bhatewara struct Vmxnet3_IntrConf intrConf; 580d1a890faSShreyas Bhatewara struct Vmxnet3_RxFilterConf rxFilterConf; 581d1a890faSShreyas Bhatewara struct Vmxnet3_VariableLenConfDesc rssConfDesc; 582d1a890faSShreyas Bhatewara struct Vmxnet3_VariableLenConfDesc pmConfDesc; 583d1a890faSShreyas Bhatewara struct Vmxnet3_VariableLenConfDesc pluginConfDesc; 584d1a890faSShreyas Bhatewara }; 585d1a890faSShreyas Bhatewara 586d1a890faSShreyas Bhatewara /* All structures in DriverShared are padded to multiples of 8 bytes */ 587d1a890faSShreyas Bhatewara struct Vmxnet3_DriverShared { 588115924b6SShreyas Bhatewara __le32 magic; 589d1a890faSShreyas Bhatewara /* make devRead start at 64bit boundaries */ 590115924b6SShreyas Bhatewara __le32 pad; 591d1a890faSShreyas Bhatewara struct Vmxnet3_DSDevRead devRead; 592115924b6SShreyas Bhatewara __le32 ecr; 593115924b6SShreyas Bhatewara __le32 reserved[5]; 594d1a890faSShreyas Bhatewara }; 595d1a890faSShreyas Bhatewara 596d1a890faSShreyas Bhatewara 597d1a890faSShreyas Bhatewara #define VMXNET3_ECR_RQERR (1 << 0) 598d1a890faSShreyas Bhatewara #define VMXNET3_ECR_TQERR (1 << 1) 599d1a890faSShreyas Bhatewara #define VMXNET3_ECR_LINK (1 << 2) 600d1a890faSShreyas Bhatewara #define VMXNET3_ECR_DIC (1 << 3) 601d1a890faSShreyas Bhatewara #define VMXNET3_ECR_DEBUG (1 << 4) 602d1a890faSShreyas Bhatewara 603d1a890faSShreyas Bhatewara /* flip the gen bit of a ring */ 604d1a890faSShreyas Bhatewara #define VMXNET3_FLIP_RING_GEN(gen) ((gen) = (gen) ^ 0x1) 605d1a890faSShreyas Bhatewara 606d1a890faSShreyas Bhatewara /* only use this if moving the idx won't affect the gen bit */ 607d1a890faSShreyas Bhatewara #define VMXNET3_INC_RING_IDX_ONLY(idx, ring_size) \ 608d1a890faSShreyas Bhatewara do {\ 609d1a890faSShreyas Bhatewara (idx)++;\ 610d1a890faSShreyas Bhatewara if (unlikely((idx) == (ring_size))) {\ 611d1a890faSShreyas Bhatewara (idx) = 0;\ 612d1a890faSShreyas Bhatewara } \ 613d1a890faSShreyas Bhatewara } while (0) 614d1a890faSShreyas Bhatewara 615d1a890faSShreyas Bhatewara #define VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid) \ 616d1a890faSShreyas Bhatewara (vfTable[vid >> 5] |= (1 << (vid & 31))) 617d1a890faSShreyas Bhatewara #define VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid) \ 618d1a890faSShreyas Bhatewara (vfTable[vid >> 5] &= ~(1 << (vid & 31))) 619d1a890faSShreyas Bhatewara 620d1a890faSShreyas Bhatewara #define VMXNET3_VFTABLE_ENTRY_IS_SET(vfTable, vid) \ 621d1a890faSShreyas Bhatewara ((vfTable[vid >> 5] & (1 << (vid & 31))) != 0) 622d1a890faSShreyas Bhatewara 623d1a890faSShreyas Bhatewara #define VMXNET3_MAX_MTU 9000 624d1a890faSShreyas Bhatewara #define VMXNET3_MIN_MTU 60 625d1a890faSShreyas Bhatewara 626d1a890faSShreyas Bhatewara #define VMXNET3_LINK_UP (10000 << 16 | 1) /* 10 Gbps, up */ 627d1a890faSShreyas Bhatewara #define VMXNET3_LINK_DOWN 0 628d1a890faSShreyas Bhatewara 629d1a890faSShreyas Bhatewara #endif /* _VMXNET3_DEFS_H_ */ 630