root/usr/src/uts/intel/io/vmxnet3s/upt1_defs.h
/*
 * Copyright (C) 2007 VMware, Inc. All rights reserved.
 *
 * The contents of this file are subject to the terms of the Common
 * Development and Distribution License (the "License") version 1.0
 * and no later version.  You may not use this file except in
 * compliance with the License.
 *
 * You can obtain a copy of the License at
 *         http://www.opensource.org/licenses/cddl1.php
 *
 * See the License for the specific language governing permissions
 * and limitations under the License.
 */

/*
 * upt1_defs.h
 *
 *      Definitions for UPTv1
 *
 *      Some of the defs are duplicated in vmkapi_net_upt.h, because
 *      vmkapi_net_upt.h cannot distribute with OSS yet and vmkapi headers can
 *      only include vmkapi headers. Make sure they are kept in sync!
 */

#ifndef _UPT1_DEFS_H_
#define _UPT1_DEFS_H_

#define UPT1_MAX_TX_QUEUES      64
#define UPT1_MAX_RX_QUEUES      64

#define UPT1_MAX_INTRS (UPT1_MAX_TX_QUEUES + UPT1_MAX_RX_QUEUES)

#pragma pack(1)
typedef struct UPT1_TxStats {
        uint64_t        TSOPktsTxOK;  /* TSO pkts post-segmentation */
        uint64_t        TSOBytesTxOK;
        uint64_t        ucastPktsTxOK;
        uint64_t        ucastBytesTxOK;
        uint64_t        mcastPktsTxOK;
        uint64_t        mcastBytesTxOK;
        uint64_t        bcastPktsTxOK;
        uint64_t        bcastBytesTxOK;
        uint64_t        pktsTxError;
        uint64_t        pktsTxDiscard;
} UPT1_TxStats;
#pragma pack()

#pragma pack(1)
typedef struct UPT1_RxStats {
        uint64_t        LROPktsRxOK;    /* LRO pkts */
        uint64_t        LROBytesRxOK;   /* bytes from LRO pkts */
        /* the following counters are for pkts from the wire, i.e., pre-LRO */
        uint64_t        ucastPktsRxOK;
        uint64_t        ucastBytesRxOK;
        uint64_t        mcastPktsRxOK;
        uint64_t        mcastBytesRxOK;
        uint64_t        bcastPktsRxOK;
        uint64_t        bcastBytesRxOK;
        uint64_t        pktsRxOutOfBuf;
        uint64_t        pktsRxError;
} UPT1_RxStats;
#pragma pack()

/* interrupt moderation level */
#define UPT1_IML_NONE           0 /* no interrupt moderation */
#define UPT1_IML_HIGHEST        7 /* least intr generated */
#define UPT1_IML_ADAPTIVE       8 /* adpative intr moderation */

/* values for UPT1_RSSConf.hashFunc */
#define UPT1_RSS_HASH_TYPE_NONE         0x0
#define UPT1_RSS_HASH_TYPE_IPV4         0x01
#define UPT1_RSS_HASH_TYPE_TCP_IPV4     0x02
#define UPT1_RSS_HASH_TYPE_IPV6         0x04
#define UPT1_RSS_HASH_TYPE_TCP_IPV6     0x08

#define UPT1_RSS_HASH_FUNC_NONE         0x0
#define UPT1_RSS_HASH_FUNC_TOEPLITZ     0x01

#define UPT1_RSS_MAX_KEY_SIZE           40
#define UPT1_RSS_MAX_IND_TABLE_SIZE     128

#pragma pack(1)
typedef struct UPT1_RSSConf {
        uint16_t        hashType;
        uint16_t        hashFunc;
        uint16_t        hashKeySize;
        uint16_t        indTableSize;
        uint8_t         hashKey[UPT1_RSS_MAX_KEY_SIZE];
        uint8_t         indTable[UPT1_RSS_MAX_IND_TABLE_SIZE];
} UPT1_RSSConf;
#pragma pack()

/* features */
#define UPT1_F_RXCSUM   0x0001  /* rx csum verification */
#define UPT1_F_RSS      0x0002
#define UPT1_F_RXVLAN   0x0004  /* VLAN tag stripping */
#define UPT1_F_LRO      0x0008

#endif  /* _UPT1_DEFS_H_ */