1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019-2020 Broadcom
6 #ifndef _TF_EXT_FLOW_HANDLE_H_
7 #define _TF_EXT_FLOW_HANDLE_H_
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
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)
29 #define TF_GET_FIELDS_FROM_FLOW_HANDLE(flow_handle, \
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); \
52 #define TF_SET_FIELDS_IN_FLOW_HANDLE(flow_handle, \
60 (flow_handle) &= ~TF_FLOW_HANDLE_MASK; \
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); \
71 ((((uint64_t)entry_num) << TF_ENTRY_NUM_FLOW_HANDLE_SFT) & \
72 TF_ENTRY_NUM_FLOW_HANDLE_MASK); \
74 ((((uint64_t)hash_type) << TF_HASH_TYPE_FLOW_HANDLE_SFT) & \
75 TF_HASH_TYPE_FLOW_HANDLE_MASK); \
77 #define TF_SET_FIELDS_IN_WH_FLOW_HANDLE TF_SET_FIELDS_IN_FLOW_HANDLE
79 #define TF_GET_INDEX_FROM_FLOW_HANDLE(flow_handle, \
82 index = (((flow_handle) & TF_INDEX_FLOW_HANDLE_MASK) >> \
83 TF_INDEX_FLOW_HANDLE_SFT); \
86 #define TF_GET_HASH_TYPE_FROM_FLOW_HANDLE(flow_handle, \
89 hash_type = (((flow_handle) & TF_HASH_TYPE_FLOW_HANDLE_MASK) >> \
90 TF_HASH_TYPE_FLOW_HANDLE_SFT); \
93 #define TF_GET_NUM_KEY_ENTRIES_FROM_FLOW_HANDLE(flow_handle, \
96 (((flow_handle) & TF_NUM_KEY_ENTRIES_FLOW_HANDLE_MASK) >> \
97 TF_NUM_KEY_ENTRIES_FLOW_HANDLE_SFT)) \
99 #define TF_GET_ENTRY_NUM_FROM_FLOW_HANDLE(flow_handle, \
102 (((flow_handle) & TF_ENTRY_NUM_FLOW_HANDLE_MASK) >> \
103 TF_ENTRY_NUM_FLOW_HANDLE_SFT)) \
106 * 32 bit Flow ID handlers
108 #define TF_GFID_FLOW_ID_MASK 0xFFFFFFF0UL
109 #define TF_GFID_FLOW_ID_SFT 4
110 #define TF_FLAG_FLOW_ID_MASK 0x00000002UL
111 #define TF_FLAG_FLOW_ID_SFT 1
112 #define TF_DIR_FLOW_ID_MASK 0x00000001UL
113 #define TF_DIR_FLOW_ID_SFT 0
115 #define TF_SET_FLOW_ID(flow_id, gfid, flag, dir) \
117 (flow_id) &= ~(TF_GFID_FLOW_ID_MASK | \
118 TF_FLAG_FLOW_ID_MASK | \
119 TF_DIR_FLOW_ID_MASK); \
120 (flow_id) |= (((gfid) << TF_GFID_FLOW_ID_SFT) & \
121 TF_GFID_FLOW_ID_MASK) | \
122 (((flag) << TF_FLAG_FLOW_ID_SFT) & \
123 TF_FLAG_FLOW_ID_MASK) | \
124 (((dir) << TF_DIR_FLOW_ID_SFT) & \
125 TF_DIR_FLOW_ID_MASK); \
128 #define TF_GET_GFID_FROM_FLOW_ID(flow_id, gfid) \
130 gfid = (((flow_id) & TF_GFID_FLOW_ID_MASK) >> \
131 TF_GFID_FLOW_ID_SFT); \
134 #define TF_GET_DIR_FROM_FLOW_ID(flow_id, dir) \
136 dir = (((flow_id) & TF_DIR_FLOW_ID_MASK) >> \
137 TF_DIR_FLOW_ID_SFT); \
140 #define TF_GET_FLAG_FROM_FLOW_ID(flow_id, flag) \
142 flag = (((flow_id) & TF_FLAG_FLOW_ID_MASK) >> \
143 TF_FLAG_FLOW_ID_SFT); \
147 * 32 bit GFID handlers
149 #define TF_HASH_INDEX_GFID_MASK 0x07FFFFFFUL
150 #define TF_HASH_INDEX_GFID_SFT 0
151 #define TF_HASH_TYPE_GFID_MASK 0x08000000UL
152 #define TF_HASH_TYPE_GFID_SFT 27
154 #define TF_GFID_TABLE_INTERNAL 0
155 #define TF_GFID_TABLE_EXTERNAL 1
157 #define TF_SET_GFID(gfid, index, type) \
159 gfid = (((index) << TF_HASH_INDEX_GFID_SFT) & \
160 TF_HASH_INDEX_GFID_MASK) | \
161 (((type) << TF_HASH_TYPE_GFID_SFT) & \
162 TF_HASH_TYPE_GFID_MASK); \
165 #define TF_GET_HASH_INDEX_FROM_GFID(gfid, index) \
167 index = (((gfid) & TF_HASH_INDEX_GFID_MASK) >> \
168 TF_HASH_INDEX_GFID_SFT); \
171 #define TF_GET_HASH_TYPE_FROM_GFID(gfid, type) \
173 type = (((gfid) & TF_HASH_TYPE_GFID_MASK) >> \
174 TF_HASH_TYPE_GFID_SFT); \
178 #endif /* _TF_EXT_FLOW_HANDLE_H_ */