&slot,
&device);
if (rc != 4) {
- TFP_DRV_LOG(ERR,
+ /* PCI Domain not provided (optional in DPDK), thus we
+ * force domain to 0 and recheck.
+ */
+ domain = 0;
+
+ /* Check parsing of bus/slot/device */
+ rc = sscanf(parms->ctrl_chan_name,
+ "%x:%x.%d",
+ &bus,
+ &slot,
+ &device);
+ if (rc != 3) {
+ TFP_DRV_LOG(ERR,
"Failed to scan device ctrl_chan_name\n");
- return -EINVAL;
+ return -EINVAL;
+ }
}
parms->session_id.internal.domain = domain;
fparms.dir = parms->dir;
fparms.type = parms->ident_type;
fparms.id = parms->id;
+ fparms.ref_cnt = &parms->ref_cnt;
rc = dev->ops->tf_dev_free_ident(tfp, &fparms);
if (rc) {
TFP_DRV_LOG(ERR,
return 0;
}
+int
+tf_search_identifier(struct tf *tfp,
+ struct tf_search_identifier_parms *parms)
+{
+ int rc;
+ struct tf_session *tfs;
+ struct tf_dev_info *dev;
+ struct tf_ident_search_parms sparms;
+
+ TF_CHECK_PARMS2(tfp, parms);
+
+ /* Can't do static initialization due to UT enum check */
+ memset(&sparms, 0, sizeof(struct tf_ident_search_parms));
+
+ /* Retrieve the session information */
+ rc = tf_session_get_session(tfp, &tfs);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Failed to lookup session, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ /* Retrieve the device information */
+ rc = tf_session_get_device(tfs, &dev);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Failed to lookup device, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ if (dev->ops->tf_dev_search_ident == NULL) {
+ rc = -EOPNOTSUPP;
+ TFP_DRV_LOG(ERR,
+ "%s: Operation not supported, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ sparms.dir = parms->dir;
+ sparms.type = parms->ident_type;
+ sparms.search_id = parms->search_id;
+ sparms.hit = &parms->hit;
+ sparms.ref_cnt = &parms->ref_cnt;
+ rc = dev->ops->tf_dev_search_ident(tfp, &sparms);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Identifier search failed, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ return 0;
+}
+
int
tf_alloc_tcam_entry(struct tf *tfp,
struct tf_alloc_tcam_entry_parms *parms)
int rc;
struct tf_session *tfs;
struct tf_dev_info *dev;
- struct tf_tcam_alloc_parms aparms = { 0 };
+ struct tf_tcam_alloc_parms aparms;
TF_CHECK_PARMS2(tfp, parms);
+ memset(&aparms, 0, sizeof(struct tf_tcam_alloc_parms));
+
/* Retrieve the session information */
rc = tf_session_get_session(tfp, &tfs);
if (rc) {
int rc;
struct tf_session *tfs;
struct tf_dev_info *dev;
- struct tf_tcam_set_parms sparms = { 0 };
+ struct tf_tcam_set_parms sparms;
TF_CHECK_PARMS2(tfp, parms);
+ memset(&sparms, 0, sizeof(struct tf_tcam_set_parms));
+
+
/* Retrieve the session information */
rc = tf_session_get_session(tfp, &tfs);
if (rc) {
int rc;
struct tf_session *tfs;
struct tf_dev_info *dev;
- struct tf_tcam_free_parms fparms = { 0 };
+ struct tf_tcam_free_parms fparms;
TF_CHECK_PARMS2(tfp, parms);
+ memset(&fparms, 0, sizeof(struct tf_tcam_free_parms));
+
/* Retrieve the session information */
rc = tf_session_get_session(tfp, &tfs);
if (rc) {