From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, HK_RANDOM_FROM,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4E0DCC10F27 for ; Mon, 9 Mar 2020 14:22:34 +0000 (UTC) Received: from dpdk.org (dpdk.org [92.243.14.124]) by mail.kernel.org (Postfix) with ESMTP id EB23E222C2 for ; Mon, 9 Mar 2020 14:22:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EB23E222C2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6A07E1C0B2; Mon, 9 Mar 2020 15:22:26 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id A52BE2BE6 for ; Mon, 9 Mar 2020 15:22:23 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Mar 2020 07:22:23 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,533,1574150400"; d="scan'208";a="235704311" Received: from npg-dpdk-haiyue-1.sh.intel.com ([10.67.119.213]) by orsmga008.jf.intel.com with ESMTP; 09 Mar 2020 07:22:21 -0700 From: Haiyue Wang To: dev@dpdk.org, xiaolong.ye@intel.com, qi.z.zhang@intel.com, qiming.yang@intel.com, beilei.xing@intel.com Cc: wei.zhao1@intel.com, Haiyue Wang Date: Mon, 9 Mar 2020 22:14:34 +0800 Message-Id: <20200309141437.11800-2-haiyue.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200309141437.11800-1-haiyue.wang@intel.com> References: <20200309141437.11800-1-haiyue.wang@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v1 1/4] net/iavf: stop the PCI probe in DCF mode X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" A new DCF PMD will be introduced, which runs on Intel VF hardware, and it is a pure software design to control the advance functionality (such as switch, ACL) for rest of the VFs. So if the DCF (Device Config Function) mode is specified by the devarg 'cap=dcf', then it will stop the PCI probe in the iavf PMD. Signed-off-by: Haiyue Wang --- drivers/net/iavf/iavf_ethdev.c | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index 34913f9c4..8ff26c0e7 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -1416,9 +1416,49 @@ iavf_dev_uninit(struct rte_eth_dev *dev) return 0; } +static int +handle_dcf_arg(__rte_unused const char *key, const char *value, + __rte_unused void *arg) +{ + bool *dcf = arg; + + if (arg == NULL || value == NULL) + return -EINVAL; + + if (strcmp(value, "dcf") == 0) + *dcf = true; + else + *dcf = false; + + return 0; +} + +static bool +check_cap_dcf_enable(struct rte_devargs *devargs) +{ + struct rte_kvargs *kvlist; + bool enable = false; + + if (devargs == NULL) + return false; + + kvlist = rte_kvargs_parse(devargs->args, NULL); + if (kvlist == NULL) + return false; + + rte_kvargs_process(kvlist, "cap", handle_dcf_arg, &enable); + + rte_kvargs_free(kvlist); + + return enable; +} + static int eth_iavf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev) { + if (check_cap_dcf_enable(pci_dev->device.devargs)) + return 1; /* continue to probe */ + return rte_eth_dev_pci_generic_probe(pci_dev, sizeof(struct iavf_adapter), iavf_dev_init); } @@ -1439,6 +1479,7 @@ static struct rte_pci_driver rte_iavf_pmd = { RTE_PMD_REGISTER_PCI(net_iavf, rte_iavf_pmd); RTE_PMD_REGISTER_PCI_TABLE(net_iavf, pci_id_iavf_map); RTE_PMD_REGISTER_KMOD_DEP(net_iavf, "* igb_uio | vfio-pci"); +RTE_PMD_REGISTER_PARAM_STRING(net_iavf, "cap=dcf"); RTE_INIT(iavf_init_log) { iavf_logtype_init = rte_log_register("pmd.net.iavf.init"); -- 2.25.1