nicvf_ethdev.h revision a41e6ff1
1/*
2 *   BSD LICENSE
3 *
4 *   Copyright (C) Cavium networks Ltd. 2016.
5 *
6 *   Redistribution and use in source and binary forms, with or without
7 *   modification, are permitted provided that the following conditions
8 *   are met:
9 *
10 *     * Redistributions of source code must retain the above copyright
11 *       notice, this list of conditions and the following disclaimer.
12 *     * Redistributions in binary form must reproduce the above copyright
13 *       notice, this list of conditions and the following disclaimer in
14 *       the documentation and/or other materials provided with the
15 *       distribution.
16 *     * Neither the name of Cavium networks nor the names of its
17 *       contributors may be used to endorse or promote products derived
18 *       from this software without specific prior written permission.
19 *
20 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#ifndef __THUNDERX_NICVF_ETHDEV_H__
34#define __THUNDERX_NICVF_ETHDEV_H__
35
36#include <rte_ethdev.h>
37
38#define THUNDERX_NICVF_PMD_VERSION      "1.0"
39#define THUNDERX_REG_BYTES		8
40
41#define NICVF_INTR_POLL_INTERVAL_MS	50
42#define NICVF_HALF_DUPLEX		0x00
43#define NICVF_FULL_DUPLEX		0x01
44#define NICVF_UNKNOWN_DUPLEX		0xff
45
46#define NICVF_RSS_OFFLOAD_PASS1 ( \
47	ETH_RSS_PORT | \
48	ETH_RSS_IPV4 | \
49	ETH_RSS_NONFRAG_IPV4_TCP | \
50	ETH_RSS_NONFRAG_IPV4_UDP | \
51	ETH_RSS_IPV6 | \
52	ETH_RSS_NONFRAG_IPV6_TCP | \
53	ETH_RSS_NONFRAG_IPV6_UDP)
54
55#define NICVF_RSS_OFFLOAD_TUNNEL ( \
56	ETH_RSS_VXLAN | \
57	ETH_RSS_GENEVE | \
58	ETH_RSS_NVGRE)
59
60#define NICVF_DEFAULT_RX_FREE_THRESH    224
61#define NICVF_DEFAULT_TX_FREE_THRESH    224
62#define NICVF_TX_FREE_MPOOL_THRESH      16
63#define NICVF_MAX_RX_FREE_THRESH        1024
64#define NICVF_MAX_TX_FREE_THRESH        1024
65
66#define VLAN_TAG_SIZE                   4	/* 802.3ac tag */
67
68static inline struct nicvf *
69nicvf_pmd_priv(struct rte_eth_dev *eth_dev)
70{
71	return eth_dev->data->dev_private;
72}
73
74static inline uint64_t
75nicvf_mempool_phy_offset(struct rte_mempool *mp)
76{
77	struct rte_mempool_memhdr *hdr;
78
79	hdr = STAILQ_FIRST(&mp->mem_list);
80	assert(hdr != NULL);
81	return (uint64_t)((uintptr_t)hdr->addr - hdr->phys_addr);
82}
83
84static inline uint16_t
85nicvf_mbuff_meta_length(struct rte_mbuf *mbuf)
86{
87	return (uint16_t)((uintptr_t)mbuf->buf_addr - (uintptr_t)mbuf);
88}
89
90/*
91 * Simple phy2virt functions assuming mbufs are in a single huge page
92 * V = P + offset
93 * P = V - offset
94 */
95static inline uintptr_t
96nicvf_mbuff_phy2virt(phys_addr_t phy, uint64_t mbuf_phys_off)
97{
98	return (uintptr_t)(phy + mbuf_phys_off);
99}
100
101static inline uintptr_t
102nicvf_mbuff_virt2phy(uintptr_t virt, uint64_t mbuf_phys_off)
103{
104	return (phys_addr_t)(virt - mbuf_phys_off);
105}
106
107#endif /* __THUNDERX_NICVF_ETHDEV_H__  */
108