1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Linux driver for VMware's vmxnet3 ethernet NIC. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2008-2020, VMware, Inc. All Rights Reserved. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 7*4882a593Smuzhiyun * under the terms of the GNU General Public License as published by the 8*4882a593Smuzhiyun * Free Software Foundation; version 2 of the License and no later version. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but 11*4882a593Smuzhiyun * WITHOUT ANY WARRANTY; without even the implied warranty of 12*4882a593Smuzhiyun * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 13*4882a593Smuzhiyun * NON INFRINGEMENT. See the GNU General Public License for more 14*4882a593Smuzhiyun * details. 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * You should have received a copy of the GNU General Public License 17*4882a593Smuzhiyun * along with this program; if not, write to the Free Software 18*4882a593Smuzhiyun * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19*4882a593Smuzhiyun * 20*4882a593Smuzhiyun * The full GNU General Public License is included in this distribution in 21*4882a593Smuzhiyun * the file called "COPYING". 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * Maintained by: pv-drivers@vmware.com 24*4882a593Smuzhiyun * 25*4882a593Smuzhiyun */ 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #ifndef _UPT1_DEFS_H 28*4882a593Smuzhiyun #define _UPT1_DEFS_H 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun struct UPT1_TxStats { 31*4882a593Smuzhiyun u64 TSOPktsTxOK; /* TSO pkts post-segmentation */ 32*4882a593Smuzhiyun u64 TSOBytesTxOK; 33*4882a593Smuzhiyun u64 ucastPktsTxOK; 34*4882a593Smuzhiyun u64 ucastBytesTxOK; 35*4882a593Smuzhiyun u64 mcastPktsTxOK; 36*4882a593Smuzhiyun u64 mcastBytesTxOK; 37*4882a593Smuzhiyun u64 bcastPktsTxOK; 38*4882a593Smuzhiyun u64 bcastBytesTxOK; 39*4882a593Smuzhiyun u64 pktsTxError; 40*4882a593Smuzhiyun u64 pktsTxDiscard; 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun struct UPT1_RxStats { 44*4882a593Smuzhiyun u64 LROPktsRxOK; /* LRO pkts */ 45*4882a593Smuzhiyun u64 LROBytesRxOK; /* bytes from LRO pkts */ 46*4882a593Smuzhiyun /* the following counters are for pkts from the wire, i.e., pre-LRO */ 47*4882a593Smuzhiyun u64 ucastPktsRxOK; 48*4882a593Smuzhiyun u64 ucastBytesRxOK; 49*4882a593Smuzhiyun u64 mcastPktsRxOK; 50*4882a593Smuzhiyun u64 mcastBytesRxOK; 51*4882a593Smuzhiyun u64 bcastPktsRxOK; 52*4882a593Smuzhiyun u64 bcastBytesRxOK; 53*4882a593Smuzhiyun u64 pktsRxOutOfBuf; 54*4882a593Smuzhiyun u64 pktsRxError; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* interrupt moderation level */ 58*4882a593Smuzhiyun enum { 59*4882a593Smuzhiyun UPT1_IML_NONE = 0, /* no interrupt moderation */ 60*4882a593Smuzhiyun UPT1_IML_HIGHEST = 7, /* least intr generated */ 61*4882a593Smuzhiyun UPT1_IML_ADAPTIVE = 8, /* adpative intr moderation */ 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun /* values for UPT1_RSSConf.hashFunc */ 64*4882a593Smuzhiyun enum { 65*4882a593Smuzhiyun UPT1_RSS_HASH_TYPE_NONE = 0x0, 66*4882a593Smuzhiyun UPT1_RSS_HASH_TYPE_IPV4 = 0x01, 67*4882a593Smuzhiyun UPT1_RSS_HASH_TYPE_TCP_IPV4 = 0x02, 68*4882a593Smuzhiyun UPT1_RSS_HASH_TYPE_IPV6 = 0x04, 69*4882a593Smuzhiyun UPT1_RSS_HASH_TYPE_TCP_IPV6 = 0x08, 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun enum { 73*4882a593Smuzhiyun UPT1_RSS_HASH_FUNC_NONE = 0x0, 74*4882a593Smuzhiyun UPT1_RSS_HASH_FUNC_TOEPLITZ = 0x01, 75*4882a593Smuzhiyun }; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #define UPT1_RSS_MAX_KEY_SIZE 40 78*4882a593Smuzhiyun #define UPT1_RSS_MAX_IND_TABLE_SIZE 128 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun struct UPT1_RSSConf { 81*4882a593Smuzhiyun u16 hashType; 82*4882a593Smuzhiyun u16 hashFunc; 83*4882a593Smuzhiyun u16 hashKeySize; 84*4882a593Smuzhiyun u16 indTableSize; 85*4882a593Smuzhiyun u8 hashKey[UPT1_RSS_MAX_KEY_SIZE]; 86*4882a593Smuzhiyun u8 indTable[UPT1_RSS_MAX_IND_TABLE_SIZE]; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* features */ 90*4882a593Smuzhiyun enum { 91*4882a593Smuzhiyun UPT1_F_RXCSUM = cpu_to_le64(0x0001), /* rx csum verification */ 92*4882a593Smuzhiyun UPT1_F_RSS = cpu_to_le64(0x0002), 93*4882a593Smuzhiyun UPT1_F_RXVLAN = cpu_to_le64(0x0004), /* VLAN tag stripping */ 94*4882a593Smuzhiyun UPT1_F_LRO = cpu_to_le64(0x0008), 95*4882a593Smuzhiyun UPT1_F_RXINNEROFLD = cpu_to_le64(0x00010), /* Geneve/Vxlan rx csum 96*4882a593Smuzhiyun * offloading 97*4882a593Smuzhiyun */ 98*4882a593Smuzhiyun }; 99*4882a593Smuzhiyun #endif 100