New upstream version 18.02
[deb_dpdk.git] / drivers / net / octeontx / octeontx_rxtx.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Cavium, Inc
3  */
4
5 #ifndef __OCTEONTX_RXTX_H__
6 #define __OCTEONTX_RXTX_H__
7
8 #include <rte_ethdev_driver.h>
9
10 #ifndef __hot
11 #define __hot   __attribute__((hot))
12 #endif
13
14 /* Packet type table */
15 #define PTYPE_SIZE      OCCTX_PKI_LTYPE_LAST
16
17 static const uint32_t __rte_cache_aligned
18 ptype_table[PTYPE_SIZE][PTYPE_SIZE][PTYPE_SIZE] = {
19         [LC_NONE][LE_NONE][LF_NONE] = RTE_PTYPE_UNKNOWN,
20         [LC_NONE][LE_NONE][LF_IPSEC_ESP] = RTE_PTYPE_UNKNOWN,
21         [LC_NONE][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L4_FRAG,
22         [LC_NONE][LE_NONE][LF_IPCOMP] = RTE_PTYPE_UNKNOWN,
23         [LC_NONE][LE_NONE][LF_TCP] = RTE_PTYPE_L4_TCP,
24         [LC_NONE][LE_NONE][LF_UDP] = RTE_PTYPE_L4_UDP,
25         [LC_NONE][LE_NONE][LF_GRE] = RTE_PTYPE_TUNNEL_GRE,
26         [LC_NONE][LE_NONE][LF_UDP_GENEVE] = RTE_PTYPE_TUNNEL_GENEVE,
27         [LC_NONE][LE_NONE][LF_UDP_VXLAN] = RTE_PTYPE_TUNNEL_VXLAN,
28         [LC_NONE][LE_NONE][LF_NVGRE] = RTE_PTYPE_TUNNEL_NVGRE,
29
30         [LC_IPV4][LE_NONE][LF_NONE] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_UNKNOWN,
31         [LC_IPV4][LE_NONE][LF_IPSEC_ESP] =
32                                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L3_IPV4,
33         [LC_IPV4][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_FRAG,
34         [LC_IPV4][LE_NONE][LF_IPCOMP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_UNKNOWN,
35         [LC_IPV4][LE_NONE][LF_TCP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP,
36         [LC_IPV4][LE_NONE][LF_UDP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP,
37         [LC_IPV4][LE_NONE][LF_GRE] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_GRE,
38         [LC_IPV4][LE_NONE][LF_UDP_GENEVE] =
39                                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_GENEVE,
40         [LC_IPV4][LE_NONE][LF_UDP_VXLAN] =
41                                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_VXLAN,
42         [LC_IPV4][LE_NONE][LF_NVGRE] =
43                                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_NVGRE,
44
45         [LC_IPV4_OPT][LE_NONE][LF_NONE] =
46                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_UNKNOWN,
47         [LC_IPV4_OPT][LE_NONE][LF_IPSEC_ESP] =
48                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L3_IPV4,
49         [LC_IPV4_OPT][LE_NONE][LF_IPFRAG] =
50                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_FRAG,
51         [LC_IPV4_OPT][LE_NONE][LF_IPCOMP] =
52                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_UNKNOWN,
53         [LC_IPV4_OPT][LE_NONE][LF_TCP] =
54                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_TCP,
55         [LC_IPV4_OPT][LE_NONE][LF_UDP] =
56                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_UDP,
57         [LC_IPV4_OPT][LE_NONE][LF_GRE] =
58                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_GRE,
59         [LC_IPV4_OPT][LE_NONE][LF_UDP_GENEVE] =
60                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_GENEVE,
61         [LC_IPV4_OPT][LE_NONE][LF_UDP_VXLAN] =
62                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_VXLAN,
63         [LC_IPV4_OPT][LE_NONE][LF_NVGRE] =
64                                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_NVGRE,
65
66         [LC_IPV6][LE_NONE][LF_NONE] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_UNKNOWN,
67         [LC_IPV6][LE_NONE][LF_IPSEC_ESP] =
68                                 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L3_IPV4,
69         [LC_IPV6][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_FRAG,
70         [LC_IPV6][LE_NONE][LF_IPCOMP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_UNKNOWN,
71         [LC_IPV6][LE_NONE][LF_TCP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP,
72         [LC_IPV6][LE_NONE][LF_UDP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP,
73         [LC_IPV6][LE_NONE][LF_GRE] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_GRE,
74         [LC_IPV6][LE_NONE][LF_UDP_GENEVE] =
75                                 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_GENEVE,
76         [LC_IPV6][LE_NONE][LF_UDP_VXLAN] =
77                                 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_VXLAN,
78         [LC_IPV6][LE_NONE][LF_NVGRE] =
79                                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_NVGRE,
80         [LC_IPV6_OPT][LE_NONE][LF_NONE] =
81                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_UNKNOWN,
82         [LC_IPV6_OPT][LE_NONE][LF_IPSEC_ESP] =
83                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L3_IPV4,
84         [LC_IPV6_OPT][LE_NONE][LF_IPFRAG] =
85                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_FRAG,
86         [LC_IPV6_OPT][LE_NONE][LF_IPCOMP] =
87                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_UNKNOWN,
88         [LC_IPV6_OPT][LE_NONE][LF_TCP] =
89                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP,
90         [LC_IPV6_OPT][LE_NONE][LF_UDP] =
91                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP,
92         [LC_IPV6_OPT][LE_NONE][LF_GRE] =
93                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_GRE,
94         [LC_IPV6_OPT][LE_NONE][LF_UDP_GENEVE] =
95                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_GENEVE,
96         [LC_IPV6_OPT][LE_NONE][LF_UDP_VXLAN] =
97                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_VXLAN,
98         [LC_IPV6_OPT][LE_NONE][LF_NVGRE] =
99                                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_NVGRE,
100
101 };
102
103 uint16_t
104 octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts);
105
106 uint16_t
107 octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
108
109 #endif /* __OCTEONTX_RXTX_H__ */