net/bnxt: fix build with gcc 10 default no-common
[dpdk.git] / drivers / net / bnxt / tf_core / tf_ext_flow_handle.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019-2020 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_FLOW_HANDLE_MASK (TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK |      \
23                                 TF_FLOW_TYPE_FLOW_HANDLE_MASK |         \
24                                 TF_FLAGS_FLOW_HANDLE_MASK |             \
25                                 TF_INDEX_FLOW_HANDLE_MASK |             \
26                                 TF_ENTRY_NUM_FLOW_HANDLE_MASK |         \
27                                 TF_HASH_TYPE_FLOW_HANDLE_MASK)
28
29 #define TF_GET_FIELDS_FROM_FLOW_HANDLE(flow_handle,                     \
30                                        num_key_entries,                 \
31                                        flow_type,                       \
32                                        flags,                           \
33                                        index,                           \
34                                        entry_num,                       \
35                                        hash_type)                       \
36 do {                                                                    \
37         (num_key_entries) = \
38                 (((flow_handle) & TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK) >> \
39                  TF_NUM_KEY_ENTRIES_FLOW_HANDLE_SFT);                   \
40         (flow_type) = (((flow_handle) & TF_FLOW_TYPE_FLOW_HANDLE_MASK) >> \
41                      TF_FLOW_TYPE_FLOW_HANDLE_SFT);                     \
42         (flags) = (((flow_handle) & TF_FLAGS_FLOW_HANDLE_MASK) >>       \
43                      TF_FLAGS_FLOW_HANDLE_SFT);                         \
44         (index) = (((flow_handle) & TF_INDEX_FLOW_HANDLE_MASK) >>       \
45                      TF_INDEX_FLOW_HANDLE_SFT);                         \
46         (entry_num) = (((flow_handle) & TF_ENTRY_NUM_FLOW_HANDLE_MASK) >> \
47                      TF_ENTRY_NUM_FLOW_HANDLE_SFT);                     \
48         (hash_type) = (((flow_handle) & TF_HASH_TYPE_FLOW_HANDLE_MASK) >> \
49                      TF_HASH_TYPE_FLOW_HANDLE_SFT);                     \
50 } while (0)
51
52 #define TF_SET_FIELDS_IN_FLOW_HANDLE(flow_handle,                       \
53                                      num_key_entries,                   \
54                                      flow_type,                         \
55                                      flags,                             \
56                                      index,                             \
57                                      entry_num,                         \
58                                      hash_type)                         \
59 do {                                                                    \
60         (flow_handle) &= ~TF_FLOW_HANDLE_MASK;                          \
61         (flow_handle) |= \
62                 (((num_key_entries) << TF_NUM_KEY_ENTRIES_FLOW_HANDLE_SFT) & \
63                  TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK);                  \
64         (flow_handle) |= (((flow_type) << TF_FLOW_TYPE_FLOW_HANDLE_SFT) & \
65                         TF_FLOW_TYPE_FLOW_HANDLE_MASK);                 \
66         (flow_handle) |= (((flags) << TF_FLAGS_FLOW_HANDLE_SFT) &       \
67                         TF_FLAGS_FLOW_HANDLE_MASK);                     \
68         (flow_handle) |= ((((uint64_t)index) << TF_INDEX_FLOW_HANDLE_SFT) & \
69                         TF_INDEX_FLOW_HANDLE_MASK);                     \
70         (flow_handle) |=                                                \
71                 ((((uint64_t)entry_num) << TF_ENTRY_NUM_FLOW_HANDLE_SFT) & \
72                  TF_ENTRY_NUM_FLOW_HANDLE_MASK);                        \
73         (flow_handle) |=                                                \
74                 ((((uint64_t)hash_type) << TF_HASH_TYPE_FLOW_HANDLE_SFT) & \
75                  TF_HASH_TYPE_FLOW_HANDLE_MASK);                        \
76 } while (0)
77 #define TF_SET_FIELDS_IN_WH_FLOW_HANDLE TF_SET_FIELDS_IN_FLOW_HANDLE
78
79 #define TF_GET_INDEX_FROM_FLOW_HANDLE(flow_handle,                      \
80                                       index)                            \
81 do {                                                                    \
82         index = (((flow_handle) & TF_INDEX_FLOW_HANDLE_MASK) >>         \
83                      TF_INDEX_FLOW_HANDLE_SFT);                         \
84 } while (0)
85
86 #define TF_GET_HASH_TYPE_FROM_FLOW_HANDLE(flow_handle,                  \
87                                           hash_type)                    \
88 do {                                                                    \
89         hash_type = (((flow_handle) & TF_HASH_TYPE_FLOW_HANDLE_MASK) >> \
90                      TF_HASH_TYPE_FLOW_HANDLE_SFT);                     \
91 } while (0)
92
93 /*
94  * 32 bit Flow ID handlers
95  */
96 #define TF_GFID_FLOW_ID_MASK            0xFFFFFFF0UL
97 #define TF_GFID_FLOW_ID_SFT             4
98 #define TF_FLAG_FLOW_ID_MASK            0x00000002UL
99 #define TF_FLAG_FLOW_ID_SFT             1
100 #define TF_DIR_FLOW_ID_MASK             0x00000001UL
101 #define TF_DIR_FLOW_ID_SFT              0
102
103 #define TF_SET_FLOW_ID(flow_id, gfid, flag, dir)                        \
104 do {                                                                    \
105         (flow_id) &= ~(TF_GFID_FLOW_ID_MASK |                           \
106                      TF_FLAG_FLOW_ID_MASK |                             \
107                      TF_DIR_FLOW_ID_MASK);                              \
108         (flow_id) |= (((gfid) << TF_GFID_FLOW_ID_SFT) &                 \
109                     TF_GFID_FLOW_ID_MASK) |                             \
110                 (((flag) << TF_FLAG_FLOW_ID_SFT) &                      \
111                  TF_FLAG_FLOW_ID_MASK) |                                \
112                 (((dir) << TF_DIR_FLOW_ID_SFT) &                        \
113                  TF_DIR_FLOW_ID_MASK);                                  \
114 } while (0)
115
116 #define TF_GET_GFID_FROM_FLOW_ID(flow_id, gfid)                         \
117 do {                                                                    \
118         gfid = (((flow_id) & TF_GFID_FLOW_ID_MASK) >>                   \
119                 TF_GFID_FLOW_ID_SFT);                                   \
120 } while (0)
121
122 #define TF_GET_DIR_FROM_FLOW_ID(flow_id, dir)                           \
123 do {                                                                    \
124         dir = (((flow_id) & TF_DIR_FLOW_ID_MASK) >>                     \
125                 TF_DIR_FLOW_ID_SFT);                                    \
126 } while (0)
127
128 #define TF_GET_FLAG_FROM_FLOW_ID(flow_id, flag)                         \
129 do {                                                                    \
130         flag = (((flow_id) & TF_FLAG_FLOW_ID_MASK) >>                   \
131                 TF_FLAG_FLOW_ID_SFT);                                   \
132 } while (0)
133
134 /*
135  * 32 bit GFID handlers
136  */
137 #define TF_HASH_INDEX_GFID_MASK 0x07FFFFFFUL
138 #define TF_HASH_INDEX_GFID_SFT  0
139 #define TF_HASH_TYPE_GFID_MASK  0x08000000UL
140 #define TF_HASH_TYPE_GFID_SFT   27
141
142 #define TF_GFID_TABLE_INTERNAL 0
143 #define TF_GFID_TABLE_EXTERNAL 1
144
145 #define TF_SET_GFID(gfid, index, type)                                  \
146 do {                                                                    \
147         gfid = (((index) << TF_HASH_INDEX_GFID_SFT) &                   \
148                 TF_HASH_INDEX_GFID_MASK) |                              \
149                 (((type) << TF_HASH_TYPE_GFID_SFT) &                    \
150                  TF_HASH_TYPE_GFID_MASK);                               \
151 } while (0)
152
153 #define TF_GET_HASH_INDEX_FROM_GFID(gfid, index)                        \
154 do {                                                                    \
155         index = (((gfid) & TF_HASH_INDEX_GFID_MASK) >>                  \
156                 TF_HASH_INDEX_GFID_SFT);                                \
157 } while (0)
158
159 #define TF_GET_HASH_TYPE_FROM_GFID(gfid, type)                          \
160 do {                                                                    \
161         type = (((gfid) & TF_HASH_TYPE_GFID_MASK) >>                    \
162                 TF_HASH_TYPE_GFID_SFT);                                 \
163 } while (0)
164
165
166 #endif /* _TF_EXT_FLOW_HANDLE_H_ */