New upstream version 18.11-rc3
[deb_dpdk.git] / drivers / net / octeontx / base / octeontx_pki_var.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Cavium, Inc
3  */
4
5 #ifndef __OCTEONTX_PKI_VAR_H__
6 #define __OCTEONTX_PKI_VAR_H__
7
8 #include <rte_byteorder.h>
9
10 #define OCTTX_PACKET_WQE_SKIP                   128
11 #define OCTTX_PACKET_FIRST_SKIP_MAXREGVAL       496
12 #define OCTTX_PACKET_FIRST_SKIP_MAXLEN          512
13 #define OCTTX_PACKET_FIRST_SKIP_ADJUST(x)                               \
14                 (RTE_MIN(x, OCTTX_PACKET_FIRST_SKIP_MAXREGVAL))
15 #define OCTTX_PACKET_FIRST_SKIP_SUM(p)                                  \
16                                 (OCTTX_PACKET_WQE_SKIP                  \
17                                 + rte_pktmbuf_priv_size(p)              \
18                                 + RTE_PKTMBUF_HEADROOM)
19 #define OCTTX_PACKET_FIRST_SKIP(p)                                      \
20         OCTTX_PACKET_FIRST_SKIP_ADJUST(OCTTX_PACKET_FIRST_SKIP_SUM(p))
21 #define OCTTX_PACKET_LATER_SKIP         128
22
23 /* WQE descriptor */
24 typedef union octtx_wqe_s {
25         uint64_t        w[6];
26
27         struct {
28 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
29                 struct {
30                         uint64_t        pknd : 6;
31                         uint64_t        rsvd0 : 10;
32                         uint64_t        style : 8;
33                         uint64_t        bufs : 8;
34                         uint64_t        chan : 12;
35                         uint64_t        apad : 3;
36                         uint64_t        rsvd1 : 1;
37                         uint64_t        aura : 12;
38                         uint64_t        rsvd2 : 4;
39                 } w0;
40
41                 struct {
42                         uint64_t        tag :   32;
43                         uint64_t        tt :    2;
44                         uint64_t        grp :   10;
45                         uint64_t        rsvd0 : 2;
46                         uint64_t        rsvd1 : 2;
47                         uint64_t        len :   16;
48                 } w1;
49
50                 struct {
51                         uint64_t        op_code : 8;
52                         uint64_t        err_lev : 3;
53                         uint64_t        raw     : 1;
54                         uint64_t        l2m     : 1;
55                         uint64_t        l2b     : 1;
56                         uint64_t        l3m     : 1;
57                         uint64_t        l3b     : 1;
58                         uint64_t        l3fr    : 1;
59                         uint64_t        pf1     : 1;
60                         uint64_t        pf2     : 1;
61                         uint64_t        pf3     : 1;
62                         uint64_t        pf4     : 1;
63                         uint64_t        sh      : 1;
64                         uint64_t        vs      : 1;
65                         uint64_t        vv      : 1;
66                         uint64_t        rsvd0   : 8;
67                         uint64_t        lae     : 1;
68                         uint64_t        lbty    : 5;
69                         uint64_t        lcty    : 5;
70                         uint64_t        ldty    : 5;
71                         uint64_t        lety    : 5;
72                         uint64_t        lfty    : 5;
73                         uint64_t        lgty    : 5;
74                         uint64_t        sw      : 1;
75                 } w2;
76
77                 struct {
78                         uint64_t        addr;   /* Byte addr of start-of-pkt */
79                 } w3;
80
81                 struct {
82                         uint64_t        laptr : 8;
83                         uint64_t        lbptr : 8;
84                         uint64_t        lcptr : 8;
85                         uint64_t        ldprt : 8;
86                         uint64_t        leptr : 8;
87                         uint64_t        lfptr : 8;
88                         uint64_t        lgptr : 8;
89                         uint64_t        vlptr : 8;
90                 } w4;
91
92                 struct {
93                         uint64_t        rsvd0 : 47;
94                         uint64_t        dwd : 1;
95                         uint64_t        size : 16;
96                 } w5;
97 #else
98                 struct {
99                         uint64_t        rsvd2 : 4;
100                         uint64_t        aura : 12;
101                         uint64_t        rsvd1 : 1;
102                         uint64_t        apad : 3;
103                         uint64_t        chan : 12;
104                         uint64_t        bufs : 8;
105                         uint64_t        style : 8;
106                         uint64_t        rsvd0 : 10;
107                         uint64_t        pknd : 6;
108                 } w0;
109
110                 struct {
111                         uint64_t        len :   16;
112                         uint64_t        rsvd1 : 2;
113                         uint64_t        rsvd0 : 2;
114                         uint64_t        grp :   10;
115                         uint64_t        tt :    2;
116                         uint64_t        tag :   32;
117                 } w1;
118
119                 struct {
120                         uint64_t        sw      : 1;
121                         uint64_t        lgty    : 5;
122                         uint64_t        lfty    : 5;
123                         uint64_t        lety    : 5;
124                         uint64_t        ldty    : 5;
125                         uint64_t        lcty    : 5;
126                         uint64_t        lbty    : 5;
127                         uint64_t        lae     : 1;
128                         uint64_t        rsvd0   : 8;
129                         uint64_t        vv      : 1;
130                         uint64_t        vs      : 1;
131                         uint64_t        sh      : 1;
132                         uint64_t        pf4     : 1;
133                         uint64_t        pf3     : 1;
134                         uint64_t        pf2     : 1;
135                         uint64_t        pf1     : 1;
136                         uint64_t        l3fr    : 1;
137                         uint64_t        l3b     : 1;
138                         uint64_t        l3m     : 1;
139                         uint64_t        l2b     : 1;
140                         uint64_t        l2m     : 1;
141                         uint64_t        raw     : 1;
142         uint64_t        err_lev : 3;
143                         uint64_t        op_code : 8;
144                 } w2;
145
146                 struct {
147                         uint64_t        addr;   /* Byte addr of start-of-pkt */
148                 } w3;
149
150                 struct {
151                         uint64_t        vlptr : 8;
152                         uint64_t        lgptr : 8;
153                         uint64_t        lfptr : 8;
154                         uint64_t        leptr : 8;
155                         uint64_t        ldprt : 8;
156                         uint64_t        lcptr : 8;
157                         uint64_t        lbptr : 8;
158                         uint64_t        laptr : 8;
159                 } w4;
160 #endif
161         } s;
162
163 } __rte_packed octtx_wqe_t;
164
165 enum occtx_pki_ltype_e {
166         OCCTX_PKI_LTYPE_NONE            = 0,
167         OCCTX_PKI_LTYPE_ENET            = 1,
168         OCCTX_PKI_LTYPE_VLAN            = 2,
169         OCCTX_PKI_LTYPE_SNAP_PAYLD      = 5,
170         OCCTX_PKI_LTYPE_ARP             = 6,
171         OCCTX_PKI_LTYPE_RARP            = 7,
172         OCCTX_PKI_LTYPE_IP4             = 8,
173         OCCTX_PKI_LTYPE_IP4_OPT         = 9,
174         OCCTX_PKI_LTYPE_IP6             = 0xa,
175         OCCTX_PKI_LTYPE_IP6_OPT         = 0xb,
176         OCCTX_PKI_LTYPE_IPSEC_ESP       = 0xc,
177         OCCTX_PKI_LTYPE_IPFRAG          = 0xd,
178         OCCTX_PKI_LTYPE_IPCOMP          = 0xe,
179         OCCTX_PKI_LTYPE_TCP             = 0x10,
180         OCCTX_PKI_LTYPE_UDP             = 0x11,
181         OCCTX_PKI_LTYPE_SCTP            = 0x12,
182         OCCTX_PKI_LTYPE_UDP_VXLAN       = 0x13,
183         OCCTX_PKI_LTYPE_GRE             = 0x14,
184         OCCTX_PKI_LTYPE_NVGRE           = 0x15,
185         OCCTX_PKI_LTYPE_GTP             = 0x16,
186         OCCTX_PKI_LTYPE_UDP_GENEVE      = 0x17,
187         OCCTX_PKI_LTYPE_SW28            = 0x1c,
188         OCCTX_PKI_LTYPE_SW29            = 0x1d,
189         OCCTX_PKI_LTYPE_SW30            = 0x1e,
190         OCCTX_PKI_LTYPE_SW31            = 0x1f,
191         OCCTX_PKI_LTYPE_LAST
192 };
193
194 enum lc_type_e {
195         LC_NONE         = OCCTX_PKI_LTYPE_NONE,
196         LC_IPV4         = OCCTX_PKI_LTYPE_IP4,
197         LC_IPV4_OPT     = OCCTX_PKI_LTYPE_IP4_OPT,
198         LC_IPV6         = OCCTX_PKI_LTYPE_IP6,
199         LC_IPV6_OPT     = OCCTX_PKI_LTYPE_IP6_OPT,
200 };
201
202 enum le_type_e {
203         LE_NONE         = OCCTX_PKI_LTYPE_NONE,
204 };
205
206 enum lf_type_e {
207         LF_NONE         = OCCTX_PKI_LTYPE_NONE,
208         LF_IPSEC_ESP    = OCCTX_PKI_LTYPE_IPSEC_ESP,
209         LF_IPFRAG       = OCCTX_PKI_LTYPE_IPFRAG,
210         LF_IPCOMP       = OCCTX_PKI_LTYPE_IPCOMP,
211         LF_TCP          = OCCTX_PKI_LTYPE_TCP,
212         LF_UDP          = OCCTX_PKI_LTYPE_UDP,
213         LF_GRE          = OCCTX_PKI_LTYPE_GRE,
214         LF_UDP_GENEVE   = OCCTX_PKI_LTYPE_UDP_GENEVE,
215         LF_UDP_VXLAN    = OCCTX_PKI_LTYPE_UDP_VXLAN,
216         LF_NVGRE        = OCCTX_PKI_LTYPE_NVGRE,
217 };
218 #endif /* __OCTEONTX_PKI_VAR_H__ */