1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2014-2019 Broadcom
6 #ifndef _ULP_FLOW_DB_H_
7 #define _ULP_FLOW_DB_H_
10 #include "ulp_template_db.h"
12 #define BNXT_FLOW_DB_DEFAULT_NUM_FLOWS 128
13 #define BNXT_FLOW_DB_DEFAULT_NUM_RESOURCES 5
15 /* Structure for the flow database resource information. */
16 struct ulp_fdb_resource_info {
17 /* Points to next resource in the chained list. */
18 uint32_t nxt_resource_idx;
20 uint64_t resource_em_handle;
22 uint32_t resource_type;
23 uint32_t resource_hndl;
28 /* Structure for the flow database resource information. */
29 struct bnxt_ulp_flow_tbl {
30 /* Flow tbl is the resource object list for each flow id. */
31 struct ulp_fdb_resource_info *flow_resources;
33 /* Flow table stack to track free list of resources. */
34 uint32_t *flow_tbl_stack;
38 /* Table to track the active flows. */
39 uint64_t *active_flow_tbl;
41 uint32_t num_resources;
44 /* Flow database supports two tables. */
45 enum bnxt_ulp_flow_db_tables {
46 BNXT_ULP_REGULAR_FLOW_TABLE,
47 BNXT_ULP_DEFAULT_FLOW_TABLE,
48 BNXT_ULP_FLOW_TABLE_MAX
51 /* Structure for the flow database resource information. */
52 struct bnxt_ulp_flow_db {
53 struct bnxt_ulp_flow_tbl flow_tbl[BNXT_ULP_FLOW_TABLE_MAX];
54 uint16_t *func_id_tbl;
55 uint32_t func_id_tbl_size;
58 /* flow db resource params to add resources */
59 struct ulp_flow_db_res_params {
60 enum tf_dir direction;
61 enum bnxt_ulp_resource_func resource_func;
62 uint64_t resource_hndl;
63 uint32_t resource_type;
64 uint32_t critical_resource;
68 * Initialize the flow database. Memory is allocated in this
69 * call and assigned to the flow database.
71 * ulp_ctxt [in] Ptr to ulp context
73 * Returns 0 on success or negative number on failure.
75 int32_t ulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt);
78 * Deinitialize the flow database. Memory is deallocated in
79 * this call and all flows should have been purged before this
82 * ulp_ctxt [in] Ptr to ulp context
84 * Returns 0 on success.
86 int32_t ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt);
89 * Allocate the flow database entry
91 * ulp_ctxt [in] Ptr to ulp_context
92 * tbl_idx [in] Specify it is regular or default flow
93 * func_id [in] The function id of the device.Valid only for regular flows.
94 * fid [out] The index to the flow entry
96 * returns 0 on success and negative on failure.
98 int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,
99 enum bnxt_ulp_flow_db_tables tbl_idx,
104 * Allocate the flow database entry.
105 * The params->critical_resource has to be set to 0 to allocate a new resource.
107 * ulp_ctxt [in] Ptr to ulp_context
108 * tbl_idx [in] Specify it is regular or default flow
109 * fid [in] The index to the flow entry
110 * params [in] The contents to be copied into resource
112 * returns 0 on success and negative on failure.
114 int32_t ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt,
115 enum bnxt_ulp_flow_db_tables tbl_idx,
117 struct ulp_flow_db_res_params *params);
120 * Free the flow database entry.
121 * The params->critical_resource has to be set to 1 to free the first resource.
123 * ulp_ctxt [in] Ptr to ulp_context
124 * tbl_idx [in] Specify it is regular or default flow
125 * fid [in] The index to the flow entry
126 * params [in/out] The contents to be copied into params.
127 * Only the critical_resource needs to be set by the caller.
129 * Returns 0 on success and negative on failure.
131 int32_t ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt,
132 enum bnxt_ulp_flow_db_tables tbl_idx,
134 struct ulp_flow_db_res_params *params);
137 * Free the flow database entry
139 * ulp_ctxt [in] Ptr to ulp_context
140 * tbl_idx [in] Specify it is regular or default flow
141 * fid [in] The index to the flow entry
143 * returns 0 on success and negative on failure.
145 int32_t ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt,
146 enum bnxt_ulp_flow_db_tables tbl_idx,
150 *Get the flow database entry details
152 * ulp_ctxt [in] Ptr to ulp_context
153 * tbl_idx [in] Specify it is regular or default flow
154 * fid [in] The index to the flow entry
155 * nxt_idx [in/out] the index to the next entry
156 * params [out] The contents to be copied into params.
158 * returns 0 on success and negative on failure.
160 int32_t ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt,
161 enum bnxt_ulp_flow_db_tables tbl_idx,
164 struct ulp_flow_db_res_params *params);
167 * Flush all flows in the flow database.
169 * ulp_ctxt [in] Ptr to ulp context
170 * tbl_idx [in] The index to table
172 * returns 0 on success or negative number on failure
174 int32_t ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx,
178 * Flush all flows in the flow database that belong to a device function.
180 * ulp_ctxt [in] Ptr to ulp context
181 * tbl_idx [in] The index to table
183 * returns 0 on success or negative number on failure
186 ulp_flow_db_function_flow_flush(struct bnxt_ulp_context *ulp_ctx,
190 * Flush all flows in the flow database that are associated with the session.
192 * ulp_ctxt [in] Ptr to ulp context
194 * returns 0 on success or negative number on failure
197 ulp_flow_db_session_flow_flush(struct bnxt_ulp_context *ulp_ctx);
200 * Check that flow id matches the function id or not
202 * ulp_ctxt [in] Ptr to ulp context
203 * flow_db [in] Ptr to flow table
204 * func_id [in] The func_id to be set, for reset pass zero.
206 * returns true on success or false on failure
209 ulp_flow_db_validate_flow_func(struct bnxt_ulp_context *ulp_ctx,
213 #endif /* _ULP_FLOW_DB_H_ */