1313ac35aSVenkat Duvvuru /* SPDX-License-Identifier: BSD-3-Clause 2d9e70b1dSRandy Schacher * Copyright(c) 2014-2023 Broadcom 3313ac35aSVenkat Duvvuru * All rights reserved. 4313ac35aSVenkat Duvvuru */ 5313ac35aSVenkat Duvvuru 6313ac35aSVenkat Duvvuru #ifndef _ULP_FLOW_DB_H_ 7313ac35aSVenkat Duvvuru #define _ULP_FLOW_DB_H_ 8313ac35aSVenkat Duvvuru 9313ac35aSVenkat Duvvuru #include "bnxt_ulp.h" 108ce17d56SKishore Padmanabha #include "ulp_template_db_enum.h" 11be8acb27SKishore Padmanabha #include "ulp_mapper.h" 12313ac35aSVenkat Duvvuru 1309b23f8bSKishore Padmanabha #define BNXT_FLOW_DB_DEFAULT_NUM_FLOWS 512 1409b23f8bSKishore Padmanabha #define BNXT_FLOW_DB_DEFAULT_NUM_RESOURCES 8 15313ac35aSVenkat Duvvuru 1619994cc7SKishore Padmanabha /* Defines for the fdb flag */ 1719994cc7SKishore Padmanabha #define ULP_FDB_FLAG_SHARED_SESSION 0x1 18d9e70b1dSRandy Schacher #define ULP_FDB_FLAG_SHARED_WC_SESSION 0x2 19f6e12015SKishore Padmanabha #define ULP_FDB_FLAG_SW_ONLY 0x4 20f6e12015SKishore Padmanabha #define ULP_FDB_FLAG_CRITICAL_RES 0x8 2119994cc7SKishore Padmanabha 22efcb502fSKishore Padmanabha /* 23efcb502fSKishore Padmanabha * Structure for the flow database resource information 24f63aa27dSKishore Padmanabha * The below structure is based on the below partitions 25f6e12015SKishore Padmanabha * nxt_resource_idx = dir[31],nxt_resource_idx[30:0] 26efcb502fSKishore Padmanabha */ 27313ac35aSVenkat Duvvuru struct ulp_fdb_resource_info { 28313ac35aSVenkat Duvvuru /* Points to next resource in the chained list. */ 29313ac35aSVenkat Duvvuru uint32_t nxt_resource_idx; 30f6e12015SKishore Padmanabha uint8_t resource_func; 31efcb502fSKishore Padmanabha uint8_t resource_type; 32efcb502fSKishore Padmanabha uint8_t resource_sub_type; 3319994cc7SKishore Padmanabha uint8_t fdb_flags; 34f6e12015SKishore Padmanabha uint64_t resource_hndl; 35313ac35aSVenkat Duvvuru }; 36313ac35aSVenkat Duvvuru 37313ac35aSVenkat Duvvuru /* Structure for the flow database resource information. */ 38313ac35aSVenkat Duvvuru struct bnxt_ulp_flow_tbl { 39313ac35aSVenkat Duvvuru /* Flow tbl is the resource object list for each flow id. */ 40313ac35aSVenkat Duvvuru struct ulp_fdb_resource_info *flow_resources; 41313ac35aSVenkat Duvvuru 42313ac35aSVenkat Duvvuru /* Flow table stack to track free list of resources. */ 43313ac35aSVenkat Duvvuru uint32_t *flow_tbl_stack; 44313ac35aSVenkat Duvvuru uint32_t head_index; 45313ac35aSVenkat Duvvuru uint32_t tail_index; 46313ac35aSVenkat Duvvuru 47313ac35aSVenkat Duvvuru /* Table to track the active flows. */ 4830683082SKishore Padmanabha uint64_t *active_reg_flows; 4930683082SKishore Padmanabha uint64_t *active_dflt_flows; 50313ac35aSVenkat Duvvuru uint32_t num_flows; 51313ac35aSVenkat Duvvuru uint32_t num_resources; 52313ac35aSVenkat Duvvuru }; 53313ac35aSVenkat Duvvuru 54f4a4421cSKishore Padmanabha /* Structure to maintain parent-child flow relationships */ 55f4a4421cSKishore Padmanabha struct ulp_fdb_parent_info { 56bdf4a3c6SKishore Padmanabha uint32_t valid; 57f4a4421cSKishore Padmanabha uint32_t parent_fid; 588782e4deSKishore Padmanabha uint32_t parent_ref_cnt; 59640bfd23SKishore Padmanabha uint32_t counter_acc; 60640bfd23SKishore Padmanabha uint64_t pkt_count; 61640bfd23SKishore Padmanabha uint64_t byte_count; 62f4a4421cSKishore Padmanabha uint64_t *child_fid_bitset; 63675e31d8SVenkat Duvvuru uint32_t f2_cnt; 64675e31d8SVenkat Duvvuru uint8_t tun_idx; 65f4a4421cSKishore Padmanabha }; 66f4a4421cSKishore Padmanabha 67f4a4421cSKishore Padmanabha /* Structure to maintain parent-child flow relationships */ 68f4a4421cSKishore Padmanabha struct ulp_fdb_parent_child_db { 69f4a4421cSKishore Padmanabha struct ulp_fdb_parent_info *parent_flow_tbl; 70f4a4421cSKishore Padmanabha uint32_t child_bitset_size; 71f4a4421cSKishore Padmanabha uint32_t entries_count; 72f4a4421cSKishore Padmanabha uint8_t *parent_flow_tbl_mem; 73f4a4421cSKishore Padmanabha }; 74f4a4421cSKishore Padmanabha 75313ac35aSVenkat Duvvuru /* Structure for the flow database resource information. */ 76313ac35aSVenkat Duvvuru struct bnxt_ulp_flow_db { 7730683082SKishore Padmanabha struct bnxt_ulp_flow_tbl flow_tbl; 7874bcfc06SKishore Padmanabha uint16_t *func_id_tbl; 7974bcfc06SKishore Padmanabha uint32_t func_id_tbl_size; 80f4a4421cSKishore Padmanabha struct ulp_fdb_parent_child_db parent_child_db; 81313ac35aSVenkat Duvvuru }; 82313ac35aSVenkat Duvvuru 83696843ccSMike Baucom /* flow db resource params to add resources */ 84696843ccSMike Baucom struct ulp_flow_db_res_params { 85696843ccSMike Baucom enum tf_dir direction; 86696843ccSMike Baucom enum bnxt_ulp_resource_func resource_func; 87efcb502fSKishore Padmanabha uint8_t resource_type; 88efcb502fSKishore Padmanabha uint8_t resource_sub_type; 8919994cc7SKishore Padmanabha uint8_t fdb_flags; 90efcb502fSKishore Padmanabha uint8_t critical_resource; 91696843ccSMike Baucom uint64_t resource_hndl; 92696843ccSMike Baucom }; 93696843ccSMike Baucom 94313ac35aSVenkat Duvvuru /* 95313ac35aSVenkat Duvvuru * Initialize the flow database. Memory is allocated in this 96313ac35aSVenkat Duvvuru * call and assigned to the flow database. 97313ac35aSVenkat Duvvuru * 98313ac35aSVenkat Duvvuru * ulp_ctxt [in] Ptr to ulp context 99313ac35aSVenkat Duvvuru * 100313ac35aSVenkat Duvvuru * Returns 0 on success or negative number on failure. 101313ac35aSVenkat Duvvuru */ 102313ac35aSVenkat Duvvuru int32_t ulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt); 103313ac35aSVenkat Duvvuru 104313ac35aSVenkat Duvvuru /* 105313ac35aSVenkat Duvvuru * Deinitialize the flow database. Memory is deallocated in 106313ac35aSVenkat Duvvuru * this call and all flows should have been purged before this 107313ac35aSVenkat Duvvuru * call. 108313ac35aSVenkat Duvvuru * 109313ac35aSVenkat Duvvuru * ulp_ctxt [in] Ptr to ulp context 110313ac35aSVenkat Duvvuru * 111313ac35aSVenkat Duvvuru * Returns 0 on success. 112313ac35aSVenkat Duvvuru */ 113313ac35aSVenkat Duvvuru int32_t ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt); 114313ac35aSVenkat Duvvuru 115696843ccSMike Baucom /* 1168f153057SMike Baucom * Allocate the flow database entry 1178f153057SMike Baucom * 1188f153057SMike Baucom * ulp_ctxt [in] Ptr to ulp_context 1198f153057SMike Baucom * tbl_idx [in] Specify it is regular or default flow 12074bcfc06SKishore Padmanabha * func_id [in] The function id of the device.Valid only for regular flows. 1218f153057SMike Baucom * fid [out] The index to the flow entry 1228f153057SMike Baucom * 1238f153057SMike Baucom * returns 0 on success and negative on failure. 1248f153057SMike Baucom */ 12530683082SKishore Padmanabha int32_t 12630683082SKishore Padmanabha ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, 12730683082SKishore Padmanabha enum bnxt_ulp_fdb_type flow_type, 12874bcfc06SKishore Padmanabha uint16_t func_id, 1298f153057SMike Baucom uint32_t *fid); 1308f153057SMike Baucom 1318f153057SMike Baucom /* 132696843ccSMike Baucom * Allocate the flow database entry. 133696843ccSMike Baucom * The params->critical_resource has to be set to 0 to allocate a new resource. 134696843ccSMike Baucom * 135696843ccSMike Baucom * ulp_ctxt [in] Ptr to ulp_context 136696843ccSMike Baucom * tbl_idx [in] Specify it is regular or default flow 137696843ccSMike Baucom * fid [in] The index to the flow entry 138696843ccSMike Baucom * params [in] The contents to be copied into resource 139696843ccSMike Baucom * 140696843ccSMike Baucom * returns 0 on success and negative on failure. 141696843ccSMike Baucom */ 14230683082SKishore Padmanabha int32_t 14330683082SKishore Padmanabha ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, 14430683082SKishore Padmanabha enum bnxt_ulp_fdb_type flow_type, 145696843ccSMike Baucom uint32_t fid, 146696843ccSMike Baucom struct ulp_flow_db_res_params *params); 147696843ccSMike Baucom 14805a11d7dSMike Baucom /* 14905a11d7dSMike Baucom * Free the flow database entry. 15005a11d7dSMike Baucom * The params->critical_resource has to be set to 1 to free the first resource. 15105a11d7dSMike Baucom * 15205a11d7dSMike Baucom * ulp_ctxt [in] Ptr to ulp_context 15305a11d7dSMike Baucom * tbl_idx [in] Specify it is regular or default flow 15405a11d7dSMike Baucom * fid [in] The index to the flow entry 15505a11d7dSMike Baucom * params [in/out] The contents to be copied into params. 15605a11d7dSMike Baucom * Only the critical_resource needs to be set by the caller. 15705a11d7dSMike Baucom * 15805a11d7dSMike Baucom * Returns 0 on success and negative on failure. 15905a11d7dSMike Baucom */ 16030683082SKishore Padmanabha int32_t 16130683082SKishore Padmanabha ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, 16230683082SKishore Padmanabha enum bnxt_ulp_fdb_type flow_type, 16305a11d7dSMike Baucom uint32_t fid, 16405a11d7dSMike Baucom struct ulp_flow_db_res_params *params); 16505a11d7dSMike Baucom 16605a11d7dSMike Baucom /* 16705a11d7dSMike Baucom * Free the flow database entry 16805a11d7dSMike Baucom * 16905a11d7dSMike Baucom * ulp_ctxt [in] Ptr to ulp_context 17005a11d7dSMike Baucom * tbl_idx [in] Specify it is regular or default flow 17105a11d7dSMike Baucom * fid [in] The index to the flow entry 17205a11d7dSMike Baucom * 17305a11d7dSMike Baucom * returns 0 on success and negative on failure. 17405a11d7dSMike Baucom */ 17530683082SKishore Padmanabha int32_t 17630683082SKishore Padmanabha ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, 17730683082SKishore Padmanabha enum bnxt_ulp_fdb_type tbl_idx, 17805a11d7dSMike Baucom uint32_t fid); 17905a11d7dSMike Baucom 180edc6ca0cSKishore Padmanabha /* 181cd7c298aSKishore Padmanabha *Get the flow database entry details 182cd7c298aSKishore Padmanabha * 183cd7c298aSKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 184cd7c298aSKishore Padmanabha * tbl_idx [in] Specify it is regular or default flow 185cd7c298aSKishore Padmanabha * fid [in] The index to the flow entry 186cd7c298aSKishore Padmanabha * nxt_idx [in/out] the index to the next entry 187cd7c298aSKishore Padmanabha * params [out] The contents to be copied into params. 188cd7c298aSKishore Padmanabha * 189cd7c298aSKishore Padmanabha * returns 0 on success and negative on failure. 190cd7c298aSKishore Padmanabha */ 19130683082SKishore Padmanabha int32_t 19230683082SKishore Padmanabha ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, 19330683082SKishore Padmanabha enum bnxt_ulp_fdb_type flow_type, 194cd7c298aSKishore Padmanabha uint32_t fid, 195cd7c298aSKishore Padmanabha uint32_t *nxt_idx, 196cd7c298aSKishore Padmanabha struct ulp_flow_db_res_params *params); 197cd7c298aSKishore Padmanabha 198cd7c298aSKishore Padmanabha /* 199edc6ca0cSKishore Padmanabha * Flush all flows in the flow database. 200edc6ca0cSKishore Padmanabha * 201edc6ca0cSKishore Padmanabha * ulp_ctxt [in] Ptr to ulp context 202bb7e1f17SDavid Marchand * flow_type [in] - specify default or regular 203edc6ca0cSKishore Padmanabha * 204edc6ca0cSKishore Padmanabha * returns 0 on success or negative number on failure 205edc6ca0cSKishore Padmanabha */ 20630683082SKishore Padmanabha int32_t 20730683082SKishore Padmanabha ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx, 208bb7e1f17SDavid Marchand enum bnxt_ulp_fdb_type flow_type); 209edc6ca0cSKishore Padmanabha 21074bcfc06SKishore Padmanabha /* 21174bcfc06SKishore Padmanabha * Flush all flows in the flow database that belong to a device function. 21274bcfc06SKishore Padmanabha * 21374bcfc06SKishore Padmanabha * ulp_ctxt [in] Ptr to ulp context 21474bcfc06SKishore Padmanabha * tbl_idx [in] The index to table 21574bcfc06SKishore Padmanabha * 21674bcfc06SKishore Padmanabha * returns 0 on success or negative number on failure 21774bcfc06SKishore Padmanabha */ 21874bcfc06SKishore Padmanabha int32_t 21974bcfc06SKishore Padmanabha ulp_flow_db_function_flow_flush(struct bnxt_ulp_context *ulp_ctx, 22074bcfc06SKishore Padmanabha uint16_t func_id); 22174bcfc06SKishore Padmanabha 22274bcfc06SKishore Padmanabha /* 22374bcfc06SKishore Padmanabha * Flush all flows in the flow database that are associated with the session. 22474bcfc06SKishore Padmanabha * 22574bcfc06SKishore Padmanabha * ulp_ctxt [in] Ptr to ulp context 22674bcfc06SKishore Padmanabha * 22774bcfc06SKishore Padmanabha * returns 0 on success or negative number on failure 22874bcfc06SKishore Padmanabha */ 22974bcfc06SKishore Padmanabha int32_t 23074bcfc06SKishore Padmanabha ulp_flow_db_session_flow_flush(struct bnxt_ulp_context *ulp_ctx); 23174bcfc06SKishore Padmanabha 23274bcfc06SKishore Padmanabha /* 23374bcfc06SKishore Padmanabha * Check that flow id matches the function id or not 23474bcfc06SKishore Padmanabha * 23574bcfc06SKishore Padmanabha * ulp_ctxt [in] Ptr to ulp context 23630683082SKishore Padmanabha * flow_id [in] flow id of the flow. 23774bcfc06SKishore Padmanabha * func_id [in] The func_id to be set, for reset pass zero. 23874bcfc06SKishore Padmanabha * 23974bcfc06SKishore Padmanabha * returns true on success or false on failure 24074bcfc06SKishore Padmanabha */ 24174bcfc06SKishore Padmanabha bool 24274bcfc06SKishore Padmanabha ulp_flow_db_validate_flow_func(struct bnxt_ulp_context *ulp_ctx, 24374bcfc06SKishore Padmanabha uint32_t flow_id, 24474bcfc06SKishore Padmanabha uint32_t func_id); 24574bcfc06SKishore Padmanabha 246d310d59cSKishore Padmanabha /* 247d310d59cSKishore Padmanabha * Api to get the cfa action pointer from a flow. 248d310d59cSKishore Padmanabha * 249d310d59cSKishore Padmanabha * ulp_ctxt [in] Ptr to ulp context 250d310d59cSKishore Padmanabha * flow_id [in] flow id 251d310d59cSKishore Padmanabha * cfa_action [out] The resource handle stored in the flow database 252d310d59cSKishore Padmanabha * 253d310d59cSKishore Padmanabha * returns 0 on success 254d310d59cSKishore Padmanabha */ 255d310d59cSKishore Padmanabha int32_t 256d310d59cSKishore Padmanabha ulp_default_flow_db_cfa_action_get(struct bnxt_ulp_context *ulp_ctx, 257d310d59cSKishore Padmanabha uint32_t flow_id, 258dd0191d5SShuanglin Wang uint32_t *cfa_action); 259f4a4421cSKishore Padmanabha 260f4a4421cSKishore Padmanabha /* 261bdf4a3c6SKishore Padmanabha * Set or reset the parent flow in the parent-child database 262f4a4421cSKishore Padmanabha * 263f4a4421cSKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 264bdf4a3c6SKishore Padmanabha * pc_idx [in] The index to parent child db 265bdf4a3c6SKishore Padmanabha * parent_fid [in] The flow id of the parent flow entry 266bdf4a3c6SKishore Padmanabha * set_flag [in] Use 1 for setting child, 0 to reset 267f4a4421cSKishore Padmanabha * 268bdf4a3c6SKishore Padmanabha * returns zero on success and negative on failure. 269f4a4421cSKishore Padmanabha */ 270f4a4421cSKishore Padmanabha int32_t 271bdf4a3c6SKishore Padmanabha ulp_flow_db_pc_db_parent_flow_set(struct bnxt_ulp_context *ulp_ctxt, 272bdf4a3c6SKishore Padmanabha uint32_t pc_idx, 273bdf4a3c6SKishore Padmanabha uint32_t parent_fid, 274bdf4a3c6SKishore Padmanabha uint32_t set_flag); 275f4a4421cSKishore Padmanabha 276f4a4421cSKishore Padmanabha /* 277f4a4421cSKishore Padmanabha * Set or reset the child flow in the parent-child database 278f4a4421cSKishore Padmanabha * 279f4a4421cSKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 280bdf4a3c6SKishore Padmanabha * pc_idx [in] The index to parent child db 281f4a4421cSKishore Padmanabha * child_fid [in] The flow id of the child flow entry 282f4a4421cSKishore Padmanabha * set_flag [in] Use 1 for setting child, 0 to reset 283f4a4421cSKishore Padmanabha * 284f4a4421cSKishore Padmanabha * returns zero on success and negative on failure. 285f4a4421cSKishore Padmanabha */ 286f4a4421cSKishore Padmanabha int32_t 287bdf4a3c6SKishore Padmanabha ulp_flow_db_pc_db_child_flow_set(struct bnxt_ulp_context *ulp_ctxt, 288bdf4a3c6SKishore Padmanabha uint32_t pc_idx, 289f4a4421cSKishore Padmanabha uint32_t child_fid, 290f4a4421cSKishore Padmanabha uint32_t set_flag); 291f4a4421cSKishore Padmanabha 292f4a4421cSKishore Padmanabha /* 293f4a4421cSKishore Padmanabha * Get the parent index from the parent-child database 294f4a4421cSKishore Padmanabha * 295f4a4421cSKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 296f4a4421cSKishore Padmanabha * parent_fid [in] The flow id of the parent flow entry 297f4a4421cSKishore Padmanabha * parent_idx [out] The parent index of parent flow entry 298f4a4421cSKishore Padmanabha * 299f4a4421cSKishore Padmanabha * returns zero on success and negative on failure. 300f4a4421cSKishore Padmanabha */ 301f4a4421cSKishore Padmanabha int32_t 302f4a4421cSKishore Padmanabha ulp_flow_db_parent_flow_idx_get(struct bnxt_ulp_context *ulp_ctxt, 303f4a4421cSKishore Padmanabha uint32_t parent_fid, 304f4a4421cSKishore Padmanabha uint32_t *parent_idx); 305f4a4421cSKishore Padmanabha 306f4a4421cSKishore Padmanabha /* 307f4a4421cSKishore Padmanabha * Get the next child flow in the parent-child database 308f4a4421cSKishore Padmanabha * 309f4a4421cSKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 310f4a4421cSKishore Padmanabha * parent_fid [in] The flow id of the parent flow entry 311f4a4421cSKishore Padmanabha * child_fid [in/out] The flow id of the child flow entry 312f4a4421cSKishore Padmanabha * 313f4a4421cSKishore Padmanabha * returns zero on success and negative on failure. 314f4a4421cSKishore Padmanabha * Pass child_fid as zero for first entry. 315f4a4421cSKishore Padmanabha */ 316f4a4421cSKishore Padmanabha int32_t 317f4a4421cSKishore Padmanabha ulp_flow_db_parent_child_flow_next_entry_get(struct bnxt_ulp_flow_db *flow_db, 318f4a4421cSKishore Padmanabha uint32_t parent_idx, 319f4a4421cSKishore Padmanabha uint32_t *child_fid); 320f4a4421cSKishore Padmanabha 321be8acb27SKishore Padmanabha /* 322be8acb27SKishore Padmanabha * Orphan the child flow entry 323be8acb27SKishore Padmanabha * This is called only for child flows that have 324be8acb27SKishore Padmanabha * BNXT_ULP_RESOURCE_FUNC_CHILD_FLOW resource 325be8acb27SKishore Padmanabha * 326be8acb27SKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 327be8acb27SKishore Padmanabha * flow_type [in] Specify it is regular or default flow 328be8acb27SKishore Padmanabha * fid [in] The index to the flow entry 329be8acb27SKishore Padmanabha * 330be8acb27SKishore Padmanabha * Returns 0 on success and negative on failure. 331be8acb27SKishore Padmanabha */ 332be8acb27SKishore Padmanabha int32_t 333be8acb27SKishore Padmanabha ulp_flow_db_child_flow_reset(struct bnxt_ulp_context *ulp_ctxt, 334be8acb27SKishore Padmanabha enum bnxt_ulp_fdb_type flow_type, 335be8acb27SKishore Padmanabha uint32_t fid); 336be8acb27SKishore Padmanabha 337be8acb27SKishore Padmanabha /* 338be8acb27SKishore Padmanabha * Create parent flow in the parent flow tbl 339be8acb27SKishore Padmanabha * 340be8acb27SKishore Padmanabha * parms [in] Ptr to mapper params 341be8acb27SKishore Padmanabha * 342be8acb27SKishore Padmanabha * Returns 0 on success and negative on failure. 343be8acb27SKishore Padmanabha */ 344be8acb27SKishore Padmanabha int32_t 345be8acb27SKishore Padmanabha ulp_flow_db_parent_flow_create(struct bnxt_ulp_mapper_parms *parms); 346be8acb27SKishore Padmanabha 347be8acb27SKishore Padmanabha /* 348be8acb27SKishore Padmanabha * Create child flow in the parent flow tbl 349be8acb27SKishore Padmanabha * 350be8acb27SKishore Padmanabha * parms [in] Ptr to mapper params 351be8acb27SKishore Padmanabha * 352be8acb27SKishore Padmanabha * Returns 0 on success and negative on failure. 353be8acb27SKishore Padmanabha */ 354be8acb27SKishore Padmanabha int32_t 355be8acb27SKishore Padmanabha ulp_flow_db_child_flow_create(struct bnxt_ulp_mapper_parms *parms); 356d310d59cSKishore Padmanabha 357640bfd23SKishore Padmanabha /* 358640bfd23SKishore Padmanabha * Update the parent counters 359640bfd23SKishore Padmanabha * 360640bfd23SKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 361bdf4a3c6SKishore Padmanabha * pc_idx [in] The parent flow entry idx 362640bfd23SKishore Padmanabha * packet_count [in] - packet count 363640bfd23SKishore Padmanabha * byte_count [in] - byte count 364640bfd23SKishore Padmanabha * 365640bfd23SKishore Padmanabha * returns 0 on success 366640bfd23SKishore Padmanabha */ 367640bfd23SKishore Padmanabha int32_t 368640bfd23SKishore Padmanabha ulp_flow_db_parent_flow_count_update(struct bnxt_ulp_context *ulp_ctxt, 369bdf4a3c6SKishore Padmanabha uint32_t pc_idx, 370640bfd23SKishore Padmanabha uint64_t packet_count, 371640bfd23SKishore Padmanabha uint64_t byte_count); 372640bfd23SKishore Padmanabha /* 373640bfd23SKishore Padmanabha * Get the parent accumulation counters 374640bfd23SKishore Padmanabha * 375640bfd23SKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 376bdf4a3c6SKishore Padmanabha * pc_idx [in] The parent flow entry idx 377640bfd23SKishore Padmanabha * packet_count [out] - packet count 378640bfd23SKishore Padmanabha * byte_count [out] - byte count 379640bfd23SKishore Padmanabha * 380640bfd23SKishore Padmanabha * returns 0 on success 381640bfd23SKishore Padmanabha */ 382640bfd23SKishore Padmanabha int32_t 383640bfd23SKishore Padmanabha ulp_flow_db_parent_flow_count_get(struct bnxt_ulp_context *ulp_ctxt, 3848782e4deSKishore Padmanabha uint32_t flow_id, 385bdf4a3c6SKishore Padmanabha uint32_t pc_idx, 386640bfd23SKishore Padmanabha uint64_t *packet_count, 387ddaf0afaSKishore Padmanabha uint64_t *byte_count, 388ddaf0afaSKishore Padmanabha uint8_t count_reset); 389640bfd23SKishore Padmanabha 390640bfd23SKishore Padmanabha /* 391640bfd23SKishore Padmanabha * reset the parent accumulation counters 392640bfd23SKishore Padmanabha * 393640bfd23SKishore Padmanabha * ulp_ctxt [in] Ptr to ulp_context 394640bfd23SKishore Padmanabha * 395640bfd23SKishore Padmanabha * returns none 396640bfd23SKishore Padmanabha */ 397640bfd23SKishore Padmanabha void 398640bfd23SKishore Padmanabha ulp_flow_db_parent_flow_count_reset(struct bnxt_ulp_context *ulp_ctxt); 399640bfd23SKishore Padmanabha 40019994cc7SKishore Padmanabha /* 40119994cc7SKishore Padmanabha * Set the shared bit for the flow db entry 40219994cc7SKishore Padmanabha * 40319994cc7SKishore Padmanabha * res [in] Ptr to fdb entry 404d9e70b1dSRandy Schacher * s_type [in] session flag 40519994cc7SKishore Padmanabha * 40619994cc7SKishore Padmanabha * returns none 40719994cc7SKishore Padmanabha */ 40819994cc7SKishore Padmanabha void ulp_flow_db_shared_session_set(struct ulp_flow_db_res_params *res, 409d9e70b1dSRandy Schacher enum bnxt_ulp_session_type s_type); 410d9e70b1dSRandy Schacher 411d9e70b1dSRandy Schacher /* 412dd0191d5SShuanglin Wang * get the shared bit for the flow db entry 413d9e70b1dSRandy Schacher * 414dd0191d5SShuanglin Wang * res [in] Ptr to fdb entry 415dd0191d5SShuanglin Wang * 416dd0191d5SShuanglin Wang * returns session type 417d9e70b1dSRandy Schacher */ 418d9e70b1dSRandy Schacher enum bnxt_ulp_session_type 419d9e70b1dSRandy Schacher ulp_flow_db_shared_session_get(struct ulp_flow_db_res_params *res); 420*a089734aSShuanglin Wang 421*a089734aSShuanglin Wang /* 422*a089734aSShuanglin Wang * Get the parent flow table info 423*a089734aSShuanglin Wang * 424*a089734aSShuanglin Wang * ulp_ctxt [in] Ptr to ulp_context 425*a089734aSShuanglin Wang * pc_idx [in] The index to parent child db 426*a089734aSShuanglin Wang * 427*a089734aSShuanglin Wang * returns Pointer of parent flow tbl 428*a089734aSShuanglin Wang */ 429*a089734aSShuanglin Wang struct ulp_fdb_parent_info * 430*a089734aSShuanglin Wang ulp_flow_db_pc_db_entry_get(struct bnxt_ulp_context *ulp_ctxt, 431*a089734aSShuanglin Wang uint32_t pc_idx); 432*a089734aSShuanglin Wang 433313ac35aSVenkat Duvvuru #endif /* _ULP_FLOW_DB_H_ */ 434