The ipn3ke board FPGA and i40e BDF scan has added in ifpga_rawdev,
so it doesn't need to provide configuration for i40e port bonding.

Signed-off-by: Rosen Xu <rosen...@intel.com>
---
 drivers/net/ipn3ke/Makefile             |   2 +
 drivers/net/ipn3ke/ipn3ke_ethdev.c      | 289 ++++----------------------------
 drivers/net/ipn3ke/ipn3ke_representor.c |   7 +-
 3 files changed, 43 insertions(+), 255 deletions(-)

diff --git a/drivers/net/ipn3ke/Makefile b/drivers/net/ipn3ke/Makefile
index 8c3ae37..5478fd9 100644
--- a/drivers/net/ipn3ke/Makefile
+++ b/drivers/net/ipn3ke/Makefile
@@ -19,6 +19,8 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 CFLAGS += -I$(RTE_SDK)/drivers/bus/ifpga
+CFLAGS += -I$(RTE_SDK)/drivers/raw/ifpga_rawdev
+CFLAGS += -I$(RTE_SDK)/drivers/net/i40e
 LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
 LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs
 LDLIBS += -lrte_bus_ifpga
diff --git a/drivers/net/ipn3ke/ipn3ke_ethdev.c 
b/drivers/net/ipn3ke/ipn3ke_ethdev.c
index c226d63..363a5f1 100644
--- a/drivers/net/ipn3ke/ipn3ke_ethdev.c
+++ b/drivers/net/ipn3ke/ipn3ke_ethdev.c
@@ -19,6 +19,7 @@
 #include <rte_bus_ifpga.h>
 #include <ifpga_common.h>
 #include <ifpga_logs.h>
+#include <ifpga_rawdev.h>
 
 #include "ipn3ke_rawdev_api.h"
 #include "ipn3ke_flow.h"
@@ -241,7 +242,8 @@
                                "LineSideMACType", &mac_type);
        hw->retimer.mac_type = (int)mac_type;
 
-       IPN3KE_AFU_PMD_DEBUG("UPL_version is 0x%x\n", IPN3KE_READ_REG(hw, 0));
+       hw->acc_tm = 0;
+       hw->acc_flow = 0;
 
        if (afu_dev->id.uuid.uuid_low == IPN3KE_UUID_VBNG_LOW &&
                afu_dev->id.uuid.uuid_high == IPN3KE_UUID_VBNG_HIGH) {
@@ -259,6 +261,12 @@
                /* After reset, wait until init done */
                if (ipn3ke_vbng_init_done(hw))
                        return -1;
+
+               hw->acc_tm = 1;
+               hw->acc_flow = 1;
+
+               IPN3KE_AFU_PMD_DEBUG("UPL_version is 0x%x\n",
+                       IPN3KE_READ_REG(hw, 0));
        }
 
        if (hw->retimer.mac_type == IFPGA_RAWDEV_RETIMER_MAC_TYPE_10GE_XFI) {
@@ -323,9 +331,6 @@
                hw->flow_hw_enable = 1;
        }
 
-       hw->acc_tm = 0;
-       hw->acc_flow = 0;
-
        return 0;
 }
 
@@ -376,7 +381,11 @@ static int ipn3ke_vswitch_probe(struct rte_afu_device 
*afu_dev)
 {
        char name[RTE_ETH_NAME_MAX_LEN];
        struct ipn3ke_hw *hw;
-       int i, retval;
+       struct rte_eth_dev *i40e_eth;
+       struct ifpga_rawdev *ifpga_dev;
+       uint16_t port_id;
+       int i, j, retval;
+       char *fvl_bdf;
 
        /* check if the AFU device has been probed already */
        /* allocate shared mcp_vswitch structure */
@@ -403,7 +412,12 @@ static int ipn3ke_vswitch_probe(struct rte_afu_device 
*afu_dev)
        if (retval)
                return retval;
 
+       ifpga_dev = ifpga_rawdev_get(hw->rawdev);
+               if (!ifpga_dev)
+                       IPN3KE_AFU_PMD_ERR("failed to find ifpga_device.");
+
        /* probe representor ports */
+       j = 0;
        for (i = 0; i < hw->port_num; i++) {
                struct ipn3ke_rpst rpst = {
                        .port_id = i,
@@ -415,6 +429,22 @@ static int ipn3ke_vswitch_probe(struct rte_afu_device 
*afu_dev)
                snprintf(name, sizeof(name), "net_%s_representor_%d",
                        afu_dev->device.name, i);
 
+               for (; j < 8; j++) {
+                       fvl_bdf = ifpga_dev->fvl_bdf[j];
+                       retval = rte_eth_dev_get_port_by_name(fvl_bdf,
+                               &port_id);
+                       if (retval) {
+                               continue;
+                       } else {
+                               i40e_eth = &rte_eth_devices[port_id];
+                               rpst.i40e_pf_eth = i40e_eth;
+                               rpst.i40e_pf_eth_port_id = port_id;
+
+                               j++;
+                               break;
+                       }
+               }
+
                retval = rte_eth_dev_create(&afu_dev->device, name,
                        sizeof(struct ipn3ke_rpst), NULL, NULL,
                        ipn3ke_rpst_init, &rpst);
@@ -422,6 +452,7 @@ static int ipn3ke_vswitch_probe(struct rte_afu_device 
*afu_dev)
                if (retval)
                        IPN3KE_AFU_PMD_ERR("failed to create ipn3ke representor 
%s.",
                                                                name);
+
        }
 
        return 0;
@@ -467,254 +498,6 @@ static int ipn3ke_vswitch_remove(struct rte_afu_device 
*afu_dev)
 
 RTE_PMD_REGISTER_AFU(net_ipn3ke_afu, afu_ipn3ke_driver);
 
-static const char * const valid_args[] = {
-#define IPN3KE_AFU_NAME         "afu"
-               IPN3KE_AFU_NAME,
-#define IPN3KE_FPGA_ACCELERATION_LIST     "fpga_acc"
-               IPN3KE_FPGA_ACCELERATION_LIST,
-#define IPN3KE_I40E_PF_LIST     "i40e_pf"
-               IPN3KE_I40E_PF_LIST,
-               NULL
-};
-
-static int
-ipn3ke_cfg_parse_acc_list(const char *afu_name,
-       const char *acc_list_name)
-{
-       struct rte_afu_device *afu_dev;
-       struct ipn3ke_hw *hw;
-       const char *p_source;
-       char *p_start;
-       char name[RTE_ETH_NAME_MAX_LEN];
-
-       afu_dev = rte_ifpga_find_afu_by_name(afu_name);
-       if (!afu_dev)
-               return -1;
-       hw = afu_dev->shared.data;
-       if (!hw)
-               return -1;
-
-       p_source = acc_list_name;
-       while (*p_source) {
-               while ((*p_source == '{') || (*p_source == '|'))
-                       p_source++;
-               p_start = name;
-               while ((*p_source != '|') && (*p_source != '}'))
-                       *p_start++ = *p_source++;
-               *p_start = 0;
-               if (!strcmp(name, "tm") && hw->tm_hw_enable)
-                       hw->acc_tm = 1;
-
-               if (!strcmp(name, "flow") && hw->flow_hw_enable)
-                       hw->acc_flow = 1;
-
-               if (*p_source == '}')
-                       return 0;
-       }
-
-       return 0;
-}
-
-static int
-ipn3ke_cfg_parse_i40e_pf_ethdev(const char *afu_name,
-       const char *pf_name)
-{
-       struct rte_eth_dev *i40e_eth, *rpst_eth;
-       struct rte_afu_device *afu_dev;
-       struct ipn3ke_rpst *rpst;
-       struct ipn3ke_hw *hw;
-       const char *p_source;
-       char *p_start;
-       char name[RTE_ETH_NAME_MAX_LEN];
-       uint16_t port_id;
-       int i;
-       int ret = -1;
-
-       afu_dev = rte_ifpga_find_afu_by_name(afu_name);
-       if (!afu_dev)
-               return -1;
-       hw = afu_dev->shared.data;
-       if (!hw)
-               return -1;
-
-       p_source = pf_name;
-       for (i = 0; i < hw->port_num; i++) {
-               snprintf(name, sizeof(name), "net_%s_representor_%d",
-                       afu_name, i);
-               ret = rte_eth_dev_get_port_by_name(name, &port_id);
-               if (ret)
-                       return -1;
-               rpst_eth = &rte_eth_devices[port_id];
-               rpst = IPN3KE_DEV_PRIVATE_TO_RPST(rpst_eth);
-
-               while ((*p_source == '{') || (*p_source == '|'))
-                       p_source++;
-               p_start = name;
-               while ((*p_source != '|') && (*p_source != '}'))
-                       *p_start++ = *p_source++;
-               *p_start = 0;
-
-               ret = rte_eth_dev_get_port_by_name(name, &port_id);
-               if (ret)
-                       return -1;
-               i40e_eth = &rte_eth_devices[port_id];
-
-               rpst->i40e_pf_eth = i40e_eth;
-               rpst->i40e_pf_eth_port_id = port_id;
-
-               if ((*p_source == '}') || !(*p_source))
-                       break;
-       }
-
-       return 0;
-}
-
-static int
-ipn3ke_cfg_probe(struct rte_vdev_device *dev)
-{
-       struct rte_devargs *devargs;
-       struct rte_kvargs *kvlist = NULL;
-       char *afu_name = NULL;
-       char *acc_name = NULL;
-       char *pf_name = NULL;
-       int afu_name_en = 0;
-       int acc_list_en = 0;
-       int pf_list_en = 0;
-       int ret = -1;
-
-       devargs = dev->device.devargs;
-
-       kvlist = rte_kvargs_parse(devargs->args, valid_args);
-       if (!kvlist) {
-               IPN3KE_AFU_PMD_ERR("error when parsing param");
-               goto end;
-       }
-
-       if (rte_kvargs_count(kvlist, IPN3KE_AFU_NAME) == 1) {
-               if (rte_kvargs_process(kvlist, IPN3KE_AFU_NAME,
-                                      &rte_ifpga_get_string_arg,
-                                      &afu_name) < 0) {
-                       IPN3KE_AFU_PMD_ERR("error to parse %s",
-                                    IPN3KE_AFU_NAME);
-                       goto end;
-               } else {
-                       afu_name_en = 1;
-               }
-       }
-
-       if (rte_kvargs_count(kvlist, IPN3KE_FPGA_ACCELERATION_LIST) == 1) {
-               if (rte_kvargs_process(kvlist, IPN3KE_FPGA_ACCELERATION_LIST,
-                                      &rte_ifpga_get_string_arg,
-                                      &acc_name) < 0) {
-                       IPN3KE_AFU_PMD_ERR("error to parse %s",
-                                    IPN3KE_FPGA_ACCELERATION_LIST);
-                       goto end;
-               } else {
-                       acc_list_en = 1;
-               }
-       }
-
-       if (rte_kvargs_count(kvlist, IPN3KE_I40E_PF_LIST) == 1) {
-               if (rte_kvargs_process(kvlist, IPN3KE_I40E_PF_LIST,
-                                      &rte_ifpga_get_string_arg,
-                                      &pf_name) < 0) {
-                       IPN3KE_AFU_PMD_ERR("error to parse %s",
-                                    IPN3KE_I40E_PF_LIST);
-                       goto end;
-               } else {
-                       pf_list_en = 1;
-               }
-       }
-
-       if (!afu_name_en) {
-               IPN3KE_AFU_PMD_ERR("arg %s is mandatory for ipn3ke",
-                         IPN3KE_AFU_NAME);
-               goto end;
-       }
-
-       if (!pf_list_en) {
-               IPN3KE_AFU_PMD_ERR("arg %s is mandatory for ipn3ke",
-                         IPN3KE_I40E_PF_LIST);
-               goto end;
-       }
-
-       if (acc_list_en) {
-               ret = ipn3ke_cfg_parse_acc_list(afu_name, acc_name);
-               if (ret) {
-                       IPN3KE_AFU_PMD_ERR("arg %s parse error for ipn3ke",
-                         IPN3KE_FPGA_ACCELERATION_LIST);
-                       goto end;
-               }
-       } else {
-               IPN3KE_AFU_PMD_INFO("arg %s is optional for ipn3ke, using i40e 
acc",
-                         IPN3KE_FPGA_ACCELERATION_LIST);
-       }
-
-       ret = ipn3ke_cfg_parse_i40e_pf_ethdev(afu_name, pf_name);
-       if (ret)
-               goto end;
-end:
-       if (kvlist)
-               rte_kvargs_free(kvlist);
-       if (afu_name)
-               free(afu_name);
-       if (acc_name)
-               free(acc_name);
-
-       return ret;
-}
-
-static int
-ipn3ke_cfg_remove(struct rte_vdev_device *dev)
-{
-       struct rte_devargs *devargs;
-       struct rte_kvargs *kvlist = NULL;
-       char *afu_name = NULL;
-       struct rte_afu_device *afu_dev;
-       int ret = -1;
-
-       devargs = dev->device.devargs;
-
-       kvlist = rte_kvargs_parse(devargs->args, valid_args);
-       if (!kvlist) {
-               IPN3KE_AFU_PMD_ERR("error when parsing param");
-               goto end;
-       }
-
-       if (rte_kvargs_count(kvlist, IPN3KE_AFU_NAME) == 1) {
-               if (rte_kvargs_process(kvlist, IPN3KE_AFU_NAME,
-                                      &rte_ifpga_get_string_arg,
-                                      &afu_name) < 0) {
-                       IPN3KE_AFU_PMD_ERR("error to parse %s",
-                                    IPN3KE_AFU_NAME);
-               } else {
-                       afu_dev = rte_ifpga_find_afu_by_name(afu_name);
-                       if (!afu_dev)
-                               goto end;
-                       ret = ipn3ke_vswitch_remove(afu_dev);
-               }
-       } else {
-               IPN3KE_AFU_PMD_ERR("Remove ipn3ke_cfg %p error", dev);
-       }
-
-end:
-       if (kvlist)
-               rte_kvargs_free(kvlist);
-
-       return ret;
-}
-
-static struct rte_vdev_driver ipn3ke_cfg_driver = {
-       .probe = ipn3ke_cfg_probe,
-       .remove = ipn3ke_cfg_remove,
-};
-
-RTE_PMD_REGISTER_VDEV(ipn3ke_cfg, ipn3ke_cfg_driver);
-RTE_PMD_REGISTER_PARAM_STRING(ipn3ke_cfg,
-       "afu=<string> "
-       "fpga_acc=<string>"
-       "i40e_pf=<string>");
-
 RTE_INIT(ipn3ke_afu_init_log)
 {
        ipn3ke_afu_logtype = rte_log_register("pmd.afu.ipn3ke");
diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c 
b/drivers/net/ipn3ke/ipn3ke_representor.c
index 8300cc3..a4ee460 100644
--- a/drivers/net/ipn3ke/ipn3ke_representor.c
+++ b/drivers/net/ipn3ke/ipn3ke_representor.c
@@ -20,6 +20,7 @@
 #include <rte_rawdev_pmd.h>
 #include <rte_bus_ifpga.h>
 #include <ifpga_logs.h>
+#include <rte_pmd_i40e.h>
 
 #include "ipn3ke_rawdev_api.h"
 #include "ipn3ke_flow.h"
@@ -2906,8 +2907,10 @@ static uint16_t ipn3ke_rpst_recv_pkts(__rte_unused void 
*rx_q,
        rpst->switch_domain_id = representor_param->switch_domain_id;
        rpst->port_id = representor_param->port_id;
        rpst->hw = representor_param->hw;
-       rpst->i40e_pf_eth = NULL;
-       rpst->i40e_pf_eth_port_id = 0xFFFF;
+       rpst->i40e_pf_eth = representor_param->i40e_pf_eth;
+       rpst->i40e_pf_eth_port_id = representor_param->i40e_pf_eth_port_id;
+       if (rpst->i40e_pf_eth)
+               i40e_set_switch_dev(rpst->i40e_pf_eth, rpst->ethdev);
 
        ethdev->data->mac_addrs = rte_zmalloc("ipn3ke", RTE_ETHER_ADDR_LEN, 0);
        if (!ethdev->data->mac_addrs) {
-- 
1.8.3.1

Reply via email to