1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019-2020 Broadcom
6 #include <rte_common.h>
8 #include "tf_identifier.h"
10 #include "tf_rm_new.h"
19 static void *ident_db[TF_DIR_MAX];
22 * Init flag, set on bind and cleared on unbind
27 tf_ident_bind(struct tf *tfp,
28 struct tf_ident_cfg_parms *parms)
32 struct tf_rm_create_db_parms db_cfg = { 0 };
34 TF_CHECK_PARMS2(tfp, parms);
38 "Identifier already initialized\n");
42 db_cfg.num_elements = parms->num_elements;
44 for (i = 0; i < TF_DIR_MAX; i++) {
46 db_cfg.num_elements = parms->num_elements;
47 db_cfg.cfg = parms->cfg;
48 db_cfg.alloc_num = parms->resources->identifier_cnt[i];
49 db_cfg.rm_db = ident_db[i];
50 rc = tf_rm_create_db(tfp, &db_cfg);
53 "%s: Identifier DB creation failed\n",
65 tf_ident_unbind(struct tf *tfp __rte_unused)
69 struct tf_rm_free_db_parms fparms = { 0 };
73 /* Bail if nothing has been initialized done silent as to
74 * allow for creation cleanup.
79 for (i = 0; i < TF_DIR_MAX; i++) {
81 fparms.rm_db = ident_db[i];
82 rc = tf_rm_free_db(tfp, &fparms);
95 tf_ident_alloc(struct tf *tfp __rte_unused,
96 struct tf_ident_alloc_parms *parms)
99 struct tf_rm_allocate_parms aparms = { 0 };
101 TF_CHECK_PARMS2(tfp, parms);
105 "%s: No Identifier DBs created\n",
106 tf_dir_2_str(parms->dir));
110 /* Allocate requested element */
111 aparms.rm_db = ident_db[parms->dir];
112 aparms.db_index = parms->ident_type;
113 aparms.index = (uint32_t *)&parms->id;
114 rc = tf_rm_allocate(&aparms);
117 "%s: Failed allocate, type:%d\n",
118 tf_dir_2_str(parms->dir),
127 tf_ident_free(struct tf *tfp __rte_unused,
128 struct tf_ident_free_parms *parms)
131 struct tf_rm_is_allocated_parms aparms = { 0 };
132 struct tf_rm_free_parms fparms = { 0 };
135 TF_CHECK_PARMS2(tfp, parms);
139 "%s: No Identifier DBs created\n",
140 tf_dir_2_str(parms->dir));
144 /* Check if element is in use */
145 aparms.rm_db = ident_db[parms->dir];
146 aparms.db_index = parms->ident_type;
147 aparms.index = parms->id;
148 aparms.allocated = &allocated;
149 rc = tf_rm_is_allocated(&aparms);
155 "%s: Entry already free, type:%d, index:%d\n",
156 tf_dir_2_str(parms->dir),
162 /* Free requested element */
163 fparms.rm_db = ident_db[parms->dir];
164 fparms.db_index = parms->ident_type;
165 fparms.index = parms->id;
166 rc = tf_rm_free(&fparms);
169 "%s: Free failed, type:%d, index:%d\n",
170 tf_dir_2_str(parms->dir),