From: Kishore Padmanabha <kishore.padmana...@broadcom.com>

Added support for socket direct feature capability so applications
can enable or disable this feature. This patch contains the template
changes.

Signed-off-by: Kishore Padmanabha <kishore.padmana...@broadcom.com>
Signed-off-by: Venkat Duvvuru <venkatkumar.duvv...@broadcom.com>
Reviewed-by: Michael Baucom <michael.bau...@broadcom.com>
Reviewed-by: Randy Schacher <stuart.schac...@broadcom.com>
---
 drivers/net/bnxt/bnxt.h                       |  13 --
 drivers/net/bnxt/bnxt_ethdev.c                | 203 ------------------
 drivers/net/bnxt/tf_ulp/bnxt_ulp.c            |  11 +-
 drivers/net/bnxt/tf_ulp/bnxt_ulp.h            |   6 +-
 drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c       |  10 +-
 .../generic_templates/ulp_template_db_enum.h  |   8 +-
 .../generic_templates/ulp_template_db_tbl.c   |   5 +-
 7 files changed, 30 insertions(+), 226 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index b9e120d94b..9bf6697006 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -1060,19 +1060,6 @@ int32_t
 bnxt_ulp_create_vfr_default_rules(struct rte_eth_dev *vfr_ethdev);
 int32_t
 bnxt_ulp_delete_vfr_default_rules(struct bnxt_representor *vfr);
-void bnxt_get_iface_mac(uint16_t port, enum bnxt_ulp_intf_type type,
-                       uint8_t *mac, uint8_t *parent_mac);
-uint16_t bnxt_get_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type);
-uint16_t bnxt_get_parent_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type);
-struct bnxt *bnxt_get_bp(uint16_t port);
-uint16_t bnxt_get_svif(uint16_t port_id, bool func_svif,
-                      enum bnxt_ulp_intf_type type);
-uint16_t bnxt_get_fw_func_id(uint16_t port, enum bnxt_ulp_intf_type type);
-uint16_t bnxt_get_parif(uint16_t port, enum bnxt_ulp_intf_type type);
-uint16_t bnxt_get_phy_port_id(uint16_t port);
-uint16_t bnxt_get_vport(uint16_t port);
-enum bnxt_ulp_intf_type
-bnxt_get_interface_type(uint16_t port);
 int bnxt_rep_dev_start_op(struct rte_eth_dev *eth_dev);
 
 void bnxt_cancel_fc_thread(struct bnxt *bp);
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index aa7e7fdc85..63d764f968 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -5068,209 +5068,6 @@ static void bnxt_config_vf_req_fwd(struct bnxt *bp)
        BNXT_HWRM_CMD_TO_FORWARD(HWRM_OEM_CMD);
 }
 
-struct bnxt *
-bnxt_get_bp(uint16_t port)
-{
-       struct bnxt *bp;
-       struct rte_eth_dev *dev;
-
-       if (!rte_eth_dev_is_valid_port(port)) {
-               PMD_DRV_LOG(ERR, "Invalid port %d\n", port);
-               return NULL;
-       }
-
-       dev = &rte_eth_devices[port];
-       if (!is_bnxt_supported(dev)) {
-               PMD_DRV_LOG(ERR, "Device %d not supported\n", port);
-               return NULL;
-       }
-
-       bp = (struct bnxt *)dev->data->dev_private;
-       if (!BNXT_TRUFLOW_EN(bp)) {
-               PMD_DRV_LOG(ERR, "TRUFLOW not enabled\n");
-               return NULL;
-       }
-
-       return bp;
-}
-
-uint16_t
-bnxt_get_svif(uint16_t port_id, bool func_svif,
-             enum bnxt_ulp_intf_type type)
-{
-       struct rte_eth_dev *eth_dev;
-       struct bnxt *bp;
-
-       eth_dev = &rte_eth_devices[port_id];
-       if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) {
-               struct bnxt_representor *vfr = eth_dev->data->dev_private;
-               if (!vfr)
-                       return 0;
-
-               if (type == BNXT_ULP_INTF_TYPE_VF_REP)
-                       return vfr->svif;
-
-               eth_dev = vfr->parent_dev;
-       }
-
-       bp = eth_dev->data->dev_private;
-
-       return func_svif ? bp->func_svif : bp->port_svif;
-}
-
-void
-bnxt_get_iface_mac(uint16_t port, enum bnxt_ulp_intf_type type,
-                  uint8_t *mac, uint8_t *parent_mac)
-{
-       struct rte_eth_dev *eth_dev;
-       struct bnxt *bp;
-
-       if (type != BNXT_ULP_INTF_TYPE_TRUSTED_VF &&
-           type != BNXT_ULP_INTF_TYPE_PF)
-               return;
-
-       eth_dev = &rte_eth_devices[port];
-       bp = eth_dev->data->dev_private;
-       memcpy(mac, bp->mac_addr, RTE_ETHER_ADDR_LEN);
-
-       if (type == BNXT_ULP_INTF_TYPE_TRUSTED_VF)
-               memcpy(parent_mac, bp->parent->mac_addr, RTE_ETHER_ADDR_LEN);
-}
-
-uint16_t
-bnxt_get_parent_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type)
-{
-       struct rte_eth_dev *eth_dev;
-       struct bnxt *bp;
-
-       if (type != BNXT_ULP_INTF_TYPE_TRUSTED_VF)
-               return 0;
-
-       eth_dev = &rte_eth_devices[port];
-       bp = eth_dev->data->dev_private;
-
-       return bp->parent->vnic;
-}
-uint16_t
-bnxt_get_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type)
-{
-       struct rte_eth_dev *eth_dev;
-       struct bnxt_vnic_info *vnic;
-       struct bnxt *bp;
-
-       eth_dev = &rte_eth_devices[port];
-       if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) {
-               struct bnxt_representor *vfr = eth_dev->data->dev_private;
-               if (!vfr)
-                       return 0;
-
-               if (type == BNXT_ULP_INTF_TYPE_VF_REP)
-                       return vfr->dflt_vnic_id;
-
-               eth_dev = vfr->parent_dev;
-       }
-
-       bp = eth_dev->data->dev_private;
-
-       vnic = BNXT_GET_DEFAULT_VNIC(bp);
-
-       return vnic->fw_vnic_id;
-}
-
-uint16_t
-bnxt_get_fw_func_id(uint16_t port, enum bnxt_ulp_intf_type type)
-{
-       struct rte_eth_dev *eth_dev;
-       struct bnxt *bp;
-
-       eth_dev = &rte_eth_devices[port];
-       if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) {
-               struct bnxt_representor *vfr = eth_dev->data->dev_private;
-               if (!vfr)
-                       return 0;
-
-               if (type == BNXT_ULP_INTF_TYPE_VF_REP)
-                       return vfr->fw_fid;
-
-               eth_dev = vfr->parent_dev;
-       }
-
-       bp = eth_dev->data->dev_private;
-
-       return bp->fw_fid;
-}
-
-enum bnxt_ulp_intf_type
-bnxt_get_interface_type(uint16_t port)
-{
-       struct rte_eth_dev *eth_dev;
-       struct bnxt *bp;
-
-       eth_dev = &rte_eth_devices[port];
-       if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev))
-               return BNXT_ULP_INTF_TYPE_VF_REP;
-
-       bp = eth_dev->data->dev_private;
-       if (BNXT_PF(bp))
-               return BNXT_ULP_INTF_TYPE_PF;
-       else if (BNXT_VF_IS_TRUSTED(bp))
-               return BNXT_ULP_INTF_TYPE_TRUSTED_VF;
-       else if (BNXT_VF(bp))
-               return BNXT_ULP_INTF_TYPE_VF;
-
-       return BNXT_ULP_INTF_TYPE_INVALID;
-}
-
-uint16_t
-bnxt_get_phy_port_id(uint16_t port_id)
-{
-       struct bnxt_representor *vfr;
-       struct rte_eth_dev *eth_dev;
-       struct bnxt *bp;
-
-       eth_dev = &rte_eth_devices[port_id];
-       if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) {
-               vfr = eth_dev->data->dev_private;
-               if (!vfr)
-                       return 0;
-
-               eth_dev = vfr->parent_dev;
-       }
-
-       bp = eth_dev->data->dev_private;
-
-       return BNXT_PF(bp) ? bp->pf->port_id : bp->parent->port_id;
-}
-
-uint16_t
-bnxt_get_parif(uint16_t port_id, enum bnxt_ulp_intf_type type)
-{
-       struct rte_eth_dev *eth_dev;
-       struct bnxt *bp;
-
-       eth_dev = &rte_eth_devices[port_id];
-       if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) {
-               struct bnxt_representor *vfr = eth_dev->data->dev_private;
-               if (!vfr)
-                       return 0;
-
-               if (type == BNXT_ULP_INTF_TYPE_VF_REP)
-                       return vfr->fw_fid - 1;
-
-               eth_dev = vfr->parent_dev;
-       }
-
-       bp = eth_dev->data->dev_private;
-
-       return BNXT_PF(bp) ? bp->fw_fid - 1 : bp->parent->fid - 1;
-}
-
-uint16_t
-bnxt_get_vport(uint16_t port_id)
-{
-       return (1 << bnxt_get_phy_port_id(port_id));
-}
-
 static void bnxt_alloc_error_recovery_info(struct bnxt *bp)
 {
        struct bnxt_error_recovery_info *info = bp->recovery_info;
diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c 
b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c
index 3083c40113..58a58a431d 100644
--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c
+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c
@@ -301,13 +301,14 @@ bnxt_ulp_tf_shared_session_resources_get(struct 
bnxt_ulp_context *ulp_ctx,
 }
 
 int32_t
-bnxt_ulp_cntxt_app_caps_init(struct bnxt_ulp_context *ulp_ctx,
+bnxt_ulp_cntxt_app_caps_init(struct bnxt *bp,
                             uint8_t app_id, uint32_t dev_id)
 {
        struct bnxt_ulp_app_capabilities_info *info;
        uint32_t num = 0;
        uint16_t i;
        bool found = false;
+       struct bnxt_ulp_context *ulp_ctx = bp->ulp_ctx;
 
        if (ULP_APP_DEV_UNSUPPORTED_ENABLED(ulp_ctx->cfg_data->ulp_flags)) {
                BNXT_TF_DBG(ERR, "APP ID %d, Device ID: 0x%x not supported.\n",
@@ -334,6 +335,12 @@ bnxt_ulp_cntxt_app_caps_init(struct bnxt_ulp_context 
*ulp_ctx,
                if (info[i].flags & BNXT_ULP_APP_CAP_UNICAST_ONLY)
                        ulp_ctx->cfg_data->ulp_flags |=
                                BNXT_ULP_APP_UNICAST_ONLY;
+               if (info[i].flags & BNXT_ULP_APP_CAP_SOCKET_DIRECT) {
+                       /* Enable socket direction only if MR is enabled in fw*/
+                       if (BNXT_MULTIROOT_EN(bp))
+                               ulp_ctx->cfg_data->ulp_flags |=
+                                       BNXT_ULP_APP_SOCKET_DIRECT;
+               }
        }
        if (!found) {
                BNXT_TF_DBG(ERR, "APP ID %d, Device ID: 0x%x not supported.\n",
@@ -837,7 +844,7 @@ ulp_ctx_init(struct bnxt *bp,
        }
        BNXT_TF_DBG(DEBUG, "Ulp initialized with app id %d\n", bp->app_id);
 
-       rc = bnxt_ulp_cntxt_app_caps_init(bp->ulp_ctx, bp->app_id, devid);
+       rc = bnxt_ulp_cntxt_app_caps_init(bp, bp->app_id, devid);
        if (rc) {
                BNXT_TF_DBG(ERR, "Unable to set caps for app(%x)/dev(%x)\n",
                            bp->app_id, devid);
diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h 
b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h
index 006df9cbc5..68f1470c61 100644
--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h
+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h
@@ -13,6 +13,7 @@
 #include "rte_version.h"
 #include "rte_ethdev.h"
 
+#include "bnxt.h"
 #include "ulp_template_db_enum.h"
 #include "ulp_tun.h"
 #include "bnxt_tf_common.h"
@@ -33,12 +34,15 @@
 #define BNXT_ULP_APP_DEV_UNSUPPORTED   0x4
 #define BNXT_ULP_HIGH_AVAIL_ENABLED    0x8
 #define BNXT_ULP_APP_UNICAST_ONLY      0x10
+#define BNXT_ULP_APP_SOCKET_DIRECT     0x20
+
 #define ULP_VF_REP_IS_ENABLED(flag)    ((flag) & BNXT_ULP_VF_REP_ENABLED)
 #define ULP_SHARED_SESSION_IS_ENABLED(flag) ((flag) &\
                                             BNXT_ULP_SHARED_SESSION_ENABLED)
 #define ULP_APP_DEV_UNSUPPORTED_ENABLED(flag)  ((flag) &\
                                                 BNXT_ULP_APP_DEV_UNSUPPORTED)
 #define ULP_HIGH_AVAIL_IS_ENABLED(flag)        ((flag) & 
BNXT_ULP_HIGH_AVAIL_ENABLED)
+#define ULP_SOCKET_DIRECT_IS_ENABLED(flag) ((flag) & 
BNXT_ULP_APP_SOCKET_DIRECT)
 
 enum bnxt_ulp_flow_mem_type {
        BNXT_ULP_FLOW_MEM_TYPE_INT = 0,
@@ -287,7 +291,7 @@ struct bnxt_ulp_app_capabilities_info *
 bnxt_ulp_app_cap_list_get(uint32_t *num_entries);
 
 int32_t
-bnxt_ulp_cntxt_app_caps_init(struct bnxt_ulp_context *ulp_ctx,
+bnxt_ulp_cntxt_app_caps_init(struct bnxt *bp,
                             uint8_t app_id, uint32_t dev_id);
 
 struct bnxt_ulp_resource_resv_info *
diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c 
b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
index 413e4c3b26..6413afdaf2 100644
--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
@@ -118,9 +118,11 @@ bnxt_ulp_init_mapper_params(struct 
bnxt_ulp_mapper_create_parms *mapper_cparms,
        ULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_FLOW_SIG_ID,
                            params->flow_sig_id);
 
+       if (bnxt_ulp_cntxt_ptr2_ulp_flags_get(params->ulp_ctx, &ulp_flags))
+               return;
+
        /* update the WC Priority flag */
-       if (!bnxt_ulp_cntxt_ptr2_ulp_flags_get(params->ulp_ctx, &ulp_flags) &&
-           ULP_HIGH_AVAIL_IS_ENABLED(ulp_flags)) {
+       if (ULP_HIGH_AVAIL_IS_ENABLED(ulp_flags)) {
                enum ulp_ha_mgr_region region = ULP_HA_REGION_LOW;
                int32_t rc;
 
@@ -132,6 +134,10 @@ bnxt_ulp_init_mapper_params(struct 
bnxt_ulp_mapper_create_parms *mapper_cparms,
                                            BNXT_ULP_CF_IDX_WC_IS_HA_HIGH_REG,
                                            1);
        }
+
+       /* Update the socket direct flag */
+       if (ULP_SOCKET_DIRECT_IS_ENABLED(ulp_flags))
+               ULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_SOCKET_DIRECT, 1);
 }
 
 /* Function to create the rte flow. */
diff --git a/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_enum.h 
b/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_enum.h
index fcd460e707..31a94c14dc 100644
--- a/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_enum.h
+++ b/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_enum.h
@@ -3,7 +3,7 @@
  * All rights reserved.
  */
 
-/* date: Thu Aug 26 17:43:36 2021 */
+/* date: Thu Sep  9 11:11:05 2021 */
 
 #ifndef ULP_TEMPLATE_DB_H_
 #define ULP_TEMPLATE_DB_H_
@@ -211,7 +211,8 @@ enum bnxt_ulp_cf_idx {
        BNXT_ULP_CF_IDX_OI_VLAN_FB_VID = 71,
        BNXT_ULP_CF_IDX_IO_VLAN_FB_VID = 72,
        BNXT_ULP_CF_IDX_II_VLAN_FB_VID = 73,
-       BNXT_ULP_CF_IDX_LAST = 74
+       BNXT_ULP_CF_IDX_SOCKET_DIRECT = 74,
+       BNXT_ULP_CF_IDX_LAST = 75
 };
 
 enum bnxt_ulp_cond_list_opc {
@@ -582,7 +583,8 @@ enum bnxt_ulp_template_type {
 enum bnxt_ulp_app_cap {
        BNXT_ULP_APP_CAP_SHARED_EN = 0x00000001,
        BNXT_ULP_APP_CAP_HOT_UPGRADE_EN = 0x00000002,
-       BNXT_ULP_APP_CAP_UNICAST_ONLY = 0x00000004
+       BNXT_ULP_APP_CAP_UNICAST_ONLY = 0x00000004,
+       BNXT_ULP_APP_CAP_SOCKET_DIRECT = 0x00000008
 };
 
 enum bnxt_ulp_fdb_resource_flags {
diff --git a/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c 
b/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c
index 84be09b368..5383e2cd70 100644
--- a/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c
+++ b/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c
@@ -3,7 +3,7 @@
  * All rights reserved.
  */
 
-/* date: Thu Aug 26 17:43:36 2021 */
+/* date: Thu Sep  9 11:11:05 2021 */
 
 #include "ulp_template_db_enum.h"
 #include "ulp_template_db_field.h"
@@ -347,7 +347,8 @@ struct bnxt_ulp_app_capabilities_info 
ulp_app_cap_info_list[] = {
        .device_id               = BNXT_ULP_DEVICE_ID_THOR,
        .flags                   = BNXT_ULP_APP_CAP_SHARED_EN |
                                   BNXT_ULP_APP_CAP_HOT_UPGRADE_EN |
-                                  BNXT_ULP_APP_CAP_UNICAST_ONLY
+                                  BNXT_ULP_APP_CAP_UNICAST_ONLY |
+                                  BNXT_ULP_APP_CAP_SOCKET_DIRECT
        },
        {
        .app_id                  = 2,
-- 
2.17.1

Reply via email to