eal: remove sys/queue.h from public headers
[dpdk.git] / drivers / net / bnxt / tf_core / tf_ext_flow_handle.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019-2021 Broadcom
3  * All rights reserved.
4  */
5
6 #ifndef _TF_EXT_FLOW_HANDLE_H_
7 #define _TF_EXT_FLOW_HANDLE_H_
8
9 #define TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK     0x00000000F0000000ULL
10 #define TF_NUM_KEY_ENTRIES_FLOW_HANDLE_SFT      28
11 #define TF_FLOW_TYPE_FLOW_HANDLE_MASK           0x00000000000000F0ULL
12 #define TF_FLOW_TYPE_FLOW_HANDLE_SFT            4
13 #define TF_FLAGS_FLOW_HANDLE_MASK               0x000000000000000FULL
14 #define TF_FLAGS_FLOW_HANDLE_SFT                0
15 #define TF_INDEX_FLOW_HANDLE_MASK               0xFFFFFFF000000000ULL
16 #define TF_INDEX_FLOW_HANDLE_SFT                36
17 #define TF_ENTRY_NUM_FLOW_HANDLE_MASK           0x0000000E00000000ULL
18 #define TF_ENTRY_NUM_FLOW_HANDLE_SFT            33
19 #define TF_HASH_TYPE_FLOW_HANDLE_MASK           0x0000000100000000ULL
20 #define TF_HASH_TYPE_FLOW_HANDLE_SFT            32
21
22 #define TF_FLAGS_FLOW_HANDLE_INTERNAL           0x2
23 #define TF_FLAGS_FLOW_HANDLE_EXTERNAL           0x0
24
25 #define TF_FLOW_HANDLE_MASK (TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK |      \
26                                 TF_FLOW_TYPE_FLOW_HANDLE_MASK |         \
27                                 TF_FLAGS_FLOW_HANDLE_MASK |             \
28                                 TF_INDEX_FLOW_HANDLE_MASK |             \
29                                 TF_ENTRY_NUM_FLOW_HANDLE_MASK |         \
30                                 TF_HASH_TYPE_FLOW_HANDLE_MASK)
31
32 #define TF_GET_FIELDS_FROM_FLOW_HANDLE(flow_handle,                     \
33                                        num_key_entries,                 \
34                                        flow_type,                       \
35                                        flags,                           \
36                                        index,                           \
37                                        entry_num,                       \
38                                        hash_type)                       \
39 do {                                                                    \
40         (num_key_entries) = \
41                 (((flow_handle) & TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK) >> \
42                  TF_NUM_KEY_ENTRIES_FLOW_HANDLE_SFT);                   \
43         (flow_type) = (((flow_handle) & TF_FLOW_TYPE_FLOW_HANDLE_MASK) >> \
44                      TF_FLOW_TYPE_FLOW_HANDLE_SFT);                     \
45         (flags) = (((flow_handle) & TF_FLAGS_FLOW_HANDLE_MASK) >>       \
46                      TF_FLAGS_FLOW_HANDLE_SFT);                         \
47         (index) = (((flow_handle) & TF_INDEX_FLOW_HANDLE_MASK) >>       \
48                      TF_INDEX_FLOW_HANDLE_SFT);                         \
49         (entry_num) = (((flow_handle) & TF_ENTRY_NUM_FLOW_HANDLE_MASK) >> \
50                      TF_ENTRY_NUM_FLOW_HANDLE_SFT);                     \
51         (hash_type) = (((flow_handle) & TF_HASH_TYPE_FLOW_HANDLE_MASK) >> \
52                      TF_HASH_TYPE_FLOW_HANDLE_SFT);                     \
53 } while (0)
54
55 #define TF_SET_FIELDS_IN_FLOW_HANDLE(flow_handle,                       \
56                                      num_key_entries,                   \
57                                      flow_type,                         \
58                                      flags,                             \
59                                      index,                             \
60                                      entry_num,                         \
61                                      hash_type)                         \
62 do {                                                                    \
63         (flow_handle) &= ~TF_FLOW_HANDLE_MASK;                          \
64         (flow_handle) |= \
65                 (((num_key_entries) << TF_NUM_KEY_ENTRIES_FLOW_HANDLE_SFT) & \
66                  TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK);                  \
67         (flow_handle) |= (((flow_type) << TF_FLOW_TYPE_FLOW_HANDLE_SFT) & \
68                         TF_FLOW_TYPE_FLOW_HANDLE_MASK);                 \
69         (flow_handle) |= (((flags) << TF_FLAGS_FLOW_HANDLE_SFT) &       \
70                         TF_FLAGS_FLOW_HANDLE_MASK);                     \
71         (flow_handle) |= ((((uint64_t)index) << TF_INDEX_FLOW_HANDLE_SFT) & \
72                         TF_INDEX_FLOW_HANDLE_MASK);                     \
73         (flow_handle) |=                                                \
74                 ((((uint64_t)entry_num) << TF_ENTRY_NUM_FLOW_HANDLE_SFT) & \
75                  TF_ENTRY_NUM_FLOW_HANDLE_MASK);                        \
76         (flow_handle) |=                                                \
77                 ((((uint64_t)hash_type) << TF_HASH_TYPE_FLOW_HANDLE_SFT) & \
78                  TF_HASH_TYPE_FLOW_HANDLE_MASK);                        \
79 } while (0)
80 #define TF_SET_FIELDS_IN_WH_FLOW_HANDLE TF_SET_FIELDS_IN_FLOW_HANDLE
81
82 #define TF_GET_INDEX_FROM_FLOW_HANDLE(flow_handle,                      \
83                                       index)                            \
84 do {                                                                    \
85         index = (((flow_handle) & TF_INDEX_FLOW_HANDLE_MASK) >>         \
86                      TF_INDEX_FLOW_HANDLE_SFT);                         \
87 } while (0)
88
89 #define TF_GET_HASH_TYPE_FROM_FLOW_HANDLE(flow_handle,                  \
90                                           hash_type)                    \
91 do {                                                                    \
92         hash_type = (((flow_handle) & TF_HASH_TYPE_FLOW_HANDLE_MASK) >> \
93                      TF_HASH_TYPE_FLOW_HANDLE_SFT);                     \
94 } while (0)
95
96 #define TF_GET_NUM_KEY_ENTRIES_FROM_FLOW_HANDLE(flow_handle,            \
97                                           num_key_entries)              \
98 do {                                                                    \
99         (num_key_entries =                                              \
100                 (((flow_handle) & TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK) >> \
101                      TF_NUM_KEY_ENTRIES_FLOW_HANDLE_SFT));              \
102 } while (0)
103
104 #define TF_GET_ENTRY_NUM_FROM_FLOW_HANDLE(flow_handle,          \
105                                           entry_num)            \
106 do {                                                                    \
107         (entry_num =                                            \
108                 (((flow_handle) & TF_ENTRY_NUM_FLOW_HANDLE_MASK) >> \
109                      TF_ENTRY_NUM_FLOW_HANDLE_SFT));            \
110 } while (0)
111
112 #define TF_GET_FLAG_FROM_FLOW_HANDLE(flow_handle, flag)         \
113         (flag = (((flow_handle) & TF_FLAGS_FLOW_HANDLE_MASK) >>\
114                      TF_FLAGS_FLOW_HANDLE_SFT))
115
116 /*
117  * 32 bit Flow ID handlers
118  */
119 #define TF_GFID_FLOW_ID_MASK            0xFFFFFFF0UL
120 #define TF_GFID_FLOW_ID_SFT             4
121 #define TF_FLAG_FLOW_ID_MASK            0x00000002UL
122 #define TF_FLAG_FLOW_ID_SFT             1
123 #define TF_DIR_FLOW_ID_MASK             0x00000001UL
124 #define TF_DIR_FLOW_ID_SFT              0
125
126 #define TF_SET_FLOW_ID(flow_id, gfid, flag, dir)                        \
127 do {                                                                    \
128         (flow_id) &= ~(TF_GFID_FLOW_ID_MASK |                           \
129                      TF_FLAG_FLOW_ID_MASK |                             \
130                      TF_DIR_FLOW_ID_MASK);                              \
131         (flow_id) |= (((gfid) << TF_GFID_FLOW_ID_SFT) &                 \
132                     TF_GFID_FLOW_ID_MASK) |                             \
133                 (((flag) << TF_FLAG_FLOW_ID_SFT) &                      \
134                  TF_FLAG_FLOW_ID_MASK) |                                \
135                 (((dir) << TF_DIR_FLOW_ID_SFT) &                        \
136                  TF_DIR_FLOW_ID_MASK);                                  \
137 } while (0)
138
139 #define TF_GET_GFID_FROM_FLOW_ID(flow_id, gfid)                         \
140 do {                                                                    \
141         gfid = (((flow_id) & TF_GFID_FLOW_ID_MASK) >>                   \
142                 TF_GFID_FLOW_ID_SFT);                                   \
143 } while (0)
144
145 #define TF_GET_DIR_FROM_FLOW_ID(flow_id, dir)                           \
146 do {                                                                    \
147         dir = (((flow_id) & TF_DIR_FLOW_ID_MASK) >>                     \
148                 TF_DIR_FLOW_ID_SFT);                                    \
149 } while (0)
150
151 #define TF_GET_FLAG_FROM_FLOW_ID(flow_id, flag)                         \
152 do {                                                                    \
153         flag = (((flow_id) & TF_FLAG_FLOW_ID_MASK) >>                   \
154                 TF_FLAG_FLOW_ID_SFT);                                   \
155 } while (0)
156
157 /*
158  * 32 bit GFID handlers
159  */
160 #define TF_HASH_INDEX_GFID_MASK 0x07FFFFFFUL
161 #define TF_HASH_INDEX_GFID_SFT  0
162 #define TF_HASH_TYPE_GFID_MASK  0x08000000UL
163 #define TF_HASH_TYPE_GFID_SFT   27
164
165 #define TF_GFID_TABLE_INTERNAL 0
166 #define TF_GFID_TABLE_EXTERNAL 1
167
168 #define TF_SET_GFID(gfid, index, type)                                  \
169 do {                                                                    \
170         gfid = (((index) << TF_HASH_INDEX_GFID_SFT) &                   \
171                 TF_HASH_INDEX_GFID_MASK) |                              \
172                 (((type) << TF_HASH_TYPE_GFID_SFT) &                    \
173                  TF_HASH_TYPE_GFID_MASK);                               \
174 } while (0)
175
176 #define TF_GET_HASH_INDEX_FROM_GFID(gfid, index)                        \
177 do {                                                                    \
178         index = (((gfid) & TF_HASH_INDEX_GFID_MASK) >>                  \
179                 TF_HASH_INDEX_GFID_SFT);                                \
180 } while (0)
181
182 #define TF_GET_HASH_TYPE_FROM_GFID(gfid, type)                          \
183 do {                                                                    \
184         type = (((gfid) & TF_HASH_TYPE_GFID_MASK) >>                    \
185                 TF_HASH_TYPE_GFID_SFT);                                 \
186 } while (0)
187
188
189 #endif /* _TF_EXT_FLOW_HANDLE_H_ */