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 Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76A08C6FA82 for ; Mon, 26 Sep 2022 07:00:58 +0000 (UTC) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 52AC14282E; Mon, 26 Sep 2022 09:00:31 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2132.outbound.protection.outlook.com [40.107.244.132]) by mails.dpdk.org (Postfix) with ESMTP id AEF2B42802 for ; Mon, 26 Sep 2022 09:00:29 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W2gRKluZRXNejn6lxWlzbMzLAL32xXjr/s1zWq6WKxo1h2DKl0359q/1fRDNloFuNwX2oBpVM9qyJZnLypvgKc8wk4CkgRIz2QQP/4pXT+wpL2RRTrs702d5iAixPomJrsewJFZoq1VAnC+yhFfj5xcic9/9Fn02s5dpPRLe/vpfqZ0M/J+QXWBEt4uQYG1hWrYSgTKR+rlUAG/rd78G0YtnShaw8Lg+O/ChGiAIGQo9TbM6rCV6pkYlzLCjUpxOpP8rlQzndq/rgH7uy3GZsDfcfBdj77VBzZFp8Q6oSpFJlrdZJm2pDdX4uRQo5zTZyRP1nnqF0GTo5GqQlDXCJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bRkGUuhLSajcrO7T7RT3v6WzgxY0ddN5pk0bv0nKcao=; b=lvXKw2wm5OHfq5pmyVS4M8DOa7dBc6pKNx6ZZr+LoYrRL49DxUT5JLUUMPwqSiNVL7Ccrbs0x0bBZx6rwWv2HLJd3e4UtRnzVaDSJ6SUQWDYbK9FAkoYUjQ5PbgD2CeCC83q1AJUIMr8MMze4DzVTfREUTiLjy9qXRE4cGjpy/D0agPoO0QXOu1ggB2Stmboed5SIQznqCITuken6KvsWXhtPWpUFs9dj5UGhaHVJZWT6jkzYfSpo4wl5I+KoKZNgduV5B/ns2mznYP4T7ju9Vn22tX/ZkEfOr0TSya4XEi5JuMoZ5MaNBndzDu2mg3RUkYjqbv6/XGrya25hIdQ0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bRkGUuhLSajcrO7T7RT3v6WzgxY0ddN5pk0bv0nKcao=; b=P9CQM8L3AwCIIzpLDKhr4A21YKrNQDNyOjzsvd/SKNMnfix3feXegEkl3Jc494NMmg+W6oNCrZeSboGpDGrrfhxBBs1HNeYT5mMVhwXXZMs9IfgSPYcpSqsdBWY0Y9B7YRM2hP3NC8ynSTQjUZJXt6vAFq6FSzds9HvIw1n+5y4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by SA1PR13MB4893.namprd13.prod.outlook.com (2603:10b6:806:18a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.14; Mon, 26 Sep 2022 07:00:28 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::779:2722:a8e5:503b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::779:2722:a8e5:503b%7]) with mapi id 15.20.5676.014; Mon, 26 Sep 2022 07:00:28 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v10 05/13] net/nfp: add flower PF setup logic Date: Mon, 26 Sep 2022 14:59:49 +0800 Message-Id: <1664175597-37248-6-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1664175597-37248-1-git-send-email-chaoyong.he@corigine.com> References: <1664175597-37248-1-git-send-email-chaoyong.he@corigine.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SG2P153CA0005.APCP153.PROD.OUTLOOK.COM (2603:1096::15) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|SA1PR13MB4893:EE_ X-MS-Office365-Filtering-Correlation-Id: 0a822a80-a050-4a28-2073-08da9f8ccb05 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IpVnxFYfI7r2wp6gfF/1iJ5FvubwzigN+Z85Y+o7njwPr+eRf6U+yMtmB4LbfPuFonVfmQgmCYtUd/vGn6BRv3IpZ5dL5cl1TirOhx+IOMTLg8QUf8dBr3ehKu7VzNhr74paggTDwNHdOaKd+0+B8Qt4bUkwuWvz/8nXbtY3qvZe93ikYJT4/XS03MFOMlmDpj2uOU6+tTiqRDiLOL5jRkFfRDbvFIxuTR1z/yAe3/Hjw8xefEI+ROIlHLtbo65bBx7dfwu0D7x2uCzcFMHUu9a4q7mvMEwya+l/KtrsMnJctjCKJYbd50VXaGUvOjObOJpARghcwFZzKv4ZXJUSOBHAJ7LRIforBEdAeeHvkXYhNSUvihwk0kiXkI2gj8ipmro+G9ThAr+MEZbSGlzcyHFU6+Nq2Su24vOkhTZrA21WenyjOwOu9MLv57sQHte0oaTaI/fyXReojSWwaiCZ18L17bRyeWZD18hig3H/nGDZOmKYxLqDmgUxpDWRqQhWg2FpBWITbIsLAXAUVbNFQAsoGmGRhVdh1Pl8953GCZuHYm9dnAnaHjV3x6TZgvElfAjO+jttsUZYtn7Ntj+zC3EqmefzMVC0WbCf5LerPcF/KrUxjQLYCMg1HHQ/bfCa3Cv2B/5hCE7tXwCuV++CgtjMJ7vFCdJuWdbpbH0g4QQhJ8S4I33sC5VyAGAktJpgAQU/EP5Kvmrw+6NoyuBtyzcLaDebwfvWi/0f/zQ0eqm6GMGEU3wJm7v70AXfwr26KukMlPHGYD7VeYSDgiPvRw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(396003)(39830400003)(136003)(376002)(346002)(451199015)(36756003)(38100700002)(38350700002)(2906002)(86362001)(44832011)(66946007)(8936002)(66556008)(66476007)(5660300002)(8676002)(4326008)(83380400001)(186003)(66574015)(6512007)(6916009)(316002)(52116002)(6666004)(2616005)(26005)(6506007)(478600001)(41300700001)(107886003)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NnFPVmRBcDVhRUEyT2hTOEpXSnVIakJiN3VMQkJycUI0aUU1aHZIcFJBWXJr?= =?utf-8?B?MzFOREFWcVluWWlzZlNzZURkWTZjemd0d2lrcDZwNlpZOEkyWFRJM3NKOUhU?= =?utf-8?B?eEFveTVQUytYUVNCOUNHL2RzbEYyZExDYm1KQWhyUVY3THkzWTRYWUI0d0F6?= =?utf-8?B?R2JIOWVZeGRmY1lJTWptZW5mKzRmbGJvVVBoeXFGVHRVd2dTOWpxZDRobEtK?= =?utf-8?B?VjBpVFdzNFlzTEtJZWxGaGN6c2xzUW1TTkRYVEVkdUJWeTVGdnZmVVBUZG9r?= =?utf-8?B?ZWlFbGZWelozb2VhT0dOeEJqRXZaVXhuT29jN2xDYXlTMmpGV2t3NzQxVUFD?= =?utf-8?B?aE9pYjFXODVWNXFJNjFPMjBxZE92UXNxdHFYTG1BaGlETTBQdUE2YUQzTk9v?= =?utf-8?B?WmpOZFJzT2RrbXlDL2RYWGlhZm45QTdmZWxSeDkwQXFyRHFGWE9NeXdzNDhp?= =?utf-8?B?Y1FNaWFrTzFLV1hSb0ZMZ21zdysxMlhMVGJZY0ZhMCt4aEFObERxT3pHZm9G?= =?utf-8?B?eUx4YVNoL0cyZlZXVk5xSWI2VmxjNHU1YXJNbnAwa2JlOFdlSkFsOVY4enhD?= =?utf-8?B?cTRrR1hXN3hDa0poR0U2bHoxNVFtT20vNklqR2JLSUIxRXppM2VGRDJSeC9n?= =?utf-8?B?UUNVM3ZzQTZqL08yWGs2cExFRUpUWmQzRUdxWjFuc2NxK1M1TDdNbkRRQnlE?= =?utf-8?B?dnJsaFo4SWlGTzFWNXZLM3JnTWVmdUF6QnpuTnczbEFLNC83c01zRCtvUHhl?= =?utf-8?B?b1Y5ZXlaNlIwQ3p0d2VZa1F1TExKenhwOWZnTDhvRE9FdjByU0NJZVppVzhi?= =?utf-8?B?Nk5RUDF0bE95VSsxNFBJSjhXUzh1Z0h4czFiOTM3ZGN2aHAwak90RUM4QmtV?= =?utf-8?B?NnpJVlBvMlVFVnNkdzJnNXg4eVpSR2F1RkZSUXdFKzdZeUtJUTZhYlFjdTdV?= =?utf-8?B?TUZHaVQ2bmdYNkZOdGZRUjg0SVB5ZVRzQzBSSGRvejZ0emNZMkJMZDJicjlY?= =?utf-8?B?azFtblNneWNRVHVUdU80UnpmcFNSQlBiQWsyL0tubmxSRVVCcmtpZWdGb2lq?= =?utf-8?B?U3h5YUlRR0NqY1dVblRXeDlzZHdxbnYxdGU0NzFCOVZzeUgwSlFaRzJUQWRv?= =?utf-8?B?NE5tSURmSHFsbzRvWm9MNk42VjV5MWNFODRmTVoveU4rTVRZSTc0V3laYzFN?= =?utf-8?B?QzUrZnpDUFFVeXpBZnQ1dGlVc2FBK0ZEK21zc2pNL004UThsT1ZYOVBib3ln?= =?utf-8?B?THB3UEdQeVRQR2JmWnlkbzlsVTlqdHZXWmhjVm96ZzdBUEw0UG9PNWllVXow?= =?utf-8?B?bS9nN2VqOTd2a1hNUkhPZzhKMDBqdUhiTmQ3bXo1b1JURzNFTmJpMzhINW1G?= =?utf-8?B?cGNnalM0M2M3andRTjFuMGZ0czE4RVNOOENjazdIM0c3bDdTT29xenNSdFI0?= =?utf-8?B?MlFUWFcrOThBa0dCa3JXMXY3V2RsSlJJN010Wjd2ZFMwUVV2dVpDWHFEaXdR?= =?utf-8?B?WUpTRHd2WkRPN1dxTUF5VWlhTFplN2c5eDV5RHA4MEs3cjN2V2QzWWJNRnhJ?= =?utf-8?B?RHEyNGRMaWx0QkFqWHdVQm90ZndHQ0lhRFpGVnpJZnpHRmIyRG1NQzBQdzNk?= =?utf-8?B?VlluVTYzZGRYQXpzYWZybUtzNTZBWTcvQmRaOFRvVUVNK2MvWXFxd1M5MGxS?= =?utf-8?B?Um9LczVCYkVJTlNlMVJ6ZVpiM2NWa0Nrck1mTTJrTEtJamdXaDdRbWZDQ0xa?= =?utf-8?B?TEx5QnA4N3UyZTlTcjFPVkV6b29RdlpHTFJQMWNCZzhHa3RJNWRjRmxnWm40?= =?utf-8?B?d0U0U2FxeGs2eVB2dTFyOGJzRUdIMWtYS2cyRWc5WlhGdEJMN3FpVTBBN1Y2?= =?utf-8?B?U0E1ZlpEdC9Ecko3ekk5WVBwME9LR2tYZlpDT0hyU2FoV1RZTnJTNndsdWYr?= =?utf-8?B?NnM2QVRyMFY5RzRLa2pHYzRPd25SUVhHUDRJMDJTQU5aRGV2c3VPYW9DTGlM?= =?utf-8?B?WCtieVRrWFpwK2NBVzFmMXE2TE9IS0Q3YThmL24wckc5S1owM1IrVXFvOXhH?= =?utf-8?B?N0ozV0l3YitLNmtEbFNKQ0FkdHB5a2xudlM0OFZXdGwweUJROUw3QjQ1OVpW?= =?utf-8?B?eDJKOW82cEgvM3BTSlZlUmRoT0NqQWc1RGJlRUIxRnZoRGhYc3BYZ2JDMGhX?= =?utf-8?B?Tnc9PQ==?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0a822a80-a050-4a28-2073-08da9f8ccb05 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2022 07:00:27.9362 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8udOwCQn8UhNuWPT+62yEdu8Vlg/0U55UbS9bMTT4+4Z64Qcu24//0J2+mL9jb7PyV5ir+n9oHNH659eeM2gbT6nnwgy1+rMI+Rl1jnM2FY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR13MB4893 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Adds the vNIC initialization logic for the flower PF vNIC. The flower firmware application exposes this vNIC for the purposes of fallback traffic in the switchdev use-case. Adds minimal dev_ops for this PF vNIC device. Because the device is being exposed externally to DPDK it needs to implements a minimal set of dev_ops. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower.c | 143 +++++++++++++++++++++++++++++++++++- drivers/net/nfp/flower/nfp_flower.h | 2 + drivers/net/nfp/nfp_common.h | 3 + 3 files changed, 145 insertions(+), 3 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 87cb922..aec9e28 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -14,12 +14,96 @@ #include "../nfp_logs.h" #include "../nfp_ctrl.h" #include "../nfp_cpp_bridge.h" +#include "../nfp_rxtx.h" +#include "../nfpcore/nfp_mip.h" +#include "../nfpcore/nfp_rtsym.h" +#include "../nfpcore/nfp_nsp.h" #include "nfp_flower.h" +#define DEFAULT_FLBUF_SIZE 9216 + +static const struct eth_dev_ops nfp_flower_pf_vnic_ops = { + .dev_infos_get = nfp_net_infos_get, + .link_update = nfp_net_link_update, + .dev_configure = nfp_net_configure, +}; + +static int +nfp_flower_init_vnic_common(struct nfp_net_hw *hw, const char *vnic_type) +{ + uint32_t start_q; + uint64_t rx_bar_off; + uint64_t tx_bar_off; + const int stride = 4; + struct nfp_pf_dev *pf_dev; + struct rte_pci_device *pci_dev; + + pf_dev = hw->pf_dev; + pci_dev = hw->pf_dev->pci_dev; + + /* NFP can not handle DMA addresses requiring more than 40 bits */ + if (rte_mem_check_dma_mask(40)) { + PMD_INIT_LOG(ERR, "Device %s can not be used: restricted dma mask to 40 bits!\n", + pci_dev->device.name); + return -ENODEV; + }; + + hw->device_id = pci_dev->id.device_id; + hw->vendor_id = pci_dev->id.vendor_id; + hw->subsystem_device_id = pci_dev->id.subsystem_device_id; + hw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id; + + PMD_INIT_LOG(DEBUG, "%s vNIC ctrl bar: %p", vnic_type, hw->ctrl_bar); + + /* Read the number of available rx/tx queues from hardware */ + hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); + hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); + + /* Work out where in the BAR the queues start */ + start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ); + tx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; + start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ); + rx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; + + hw->tx_bar = pf_dev->hw_queues + tx_bar_off; + hw->rx_bar = pf_dev->hw_queues + rx_bar_off; + + /* Get some of the read-only fields from the config BAR */ + hw->ver = nn_cfg_readl(hw, NFP_NET_CFG_VERSION); + hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); + hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); + /* Set the current MTU to the maximum supported */ + hw->mtu = hw->max_mtu; + hw->flbufsz = DEFAULT_FLBUF_SIZE; + + /* read the Rx offset configured from firmware */ + if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 2) + hw->rx_offset = NFP_NET_RX_OFFSET; + else + hw->rx_offset = nn_cfg_readl(hw, NFP_NET_CFG_RX_OFFSET_ADDR); + + hw->ctrl = 0; + hw->stride_rx = stride; + hw->stride_tx = stride; + + /* Reuse cfg queue setup function */ + nfp_net_cfg_queue_setup(hw); + + PMD_INIT_LOG(INFO, "%s vNIC max_rx_queues: %u, max_tx_queues: %u", + vnic_type, hw->max_rx_queues, hw->max_tx_queues); + + /* Initializing spinlock for reconfigs */ + rte_spinlock_init(&hw->reconfig_lock); + + return 0; +} + int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev) { + int ret; unsigned int numa_node; + struct nfp_net_hw *pf_hw; struct nfp_app_fw_flower *app_fw_flower; numa_node = rte_socket_id(); @@ -34,12 +118,65 @@ pf_dev->app_fw_priv = app_fw_flower; + /* Allocate memory for the PF AND ctrl vNIC here (hence the * 2) */ + pf_hw = rte_zmalloc_socket("nfp_pf_vnic", 2 * sizeof(struct nfp_net_adapter), + RTE_CACHE_LINE_SIZE, numa_node); + if (pf_hw == NULL) { + PMD_INIT_LOG(ERR, "Could not malloc nfp pf vnic"); + ret = -ENOMEM; + goto app_cleanup; + } + + /* Map the PF ctrl bar */ + pf_dev->ctrl_bar = nfp_rtsym_map(pf_dev->sym_tbl, "_pf0_net_bar0", + 32768, &pf_dev->ctrl_area); + if (pf_dev->ctrl_bar == NULL) { + PMD_INIT_LOG(ERR, "Cloud not map the PF vNIC ctrl bar"); + ret = -ENODEV; + goto vnic_cleanup; + } + + /* Fill in the PF vNIC and populate app struct */ + app_fw_flower->pf_hw = pf_hw; + pf_hw->ctrl_bar = pf_dev->ctrl_bar; + pf_hw->pf_dev = pf_dev; + pf_hw->cpp = pf_dev->cpp; + + ret = nfp_flower_init_vnic_common(app_fw_flower->pf_hw, "pf_vnic"); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Could not initialize flower PF vNIC"); + goto pf_cpp_area_cleanup; + } + return 0; + +pf_cpp_area_cleanup: + nfp_cpp_area_free(pf_dev->ctrl_area); +vnic_cleanup: + rte_free(pf_hw); +app_cleanup: + rte_free(app_fw_flower); + + return ret; } int -nfp_secondary_init_app_fw_flower(__rte_unused struct nfp_cpp *cpp) +nfp_secondary_init_app_fw_flower(struct nfp_cpp *cpp) { - PMD_INIT_LOG(ERR, "Flower firmware not supported"); - return -ENOTSUP; + struct rte_eth_dev *eth_dev; + const char *port_name = "pf_vnic_eth_dev"; + + PMD_INIT_LOG(DEBUG, "Secondary attaching to port %s", port_name); + + eth_dev = rte_eth_dev_attach_secondary(port_name); + if (eth_dev == NULL) { + PMD_INIT_LOG(ERR, "Secondary process attach to port %s failed", port_name); + return -ENODEV; + } + + eth_dev->process_private = cpp; + eth_dev->dev_ops = &nfp_flower_pf_vnic_ops; + rte_eth_dev_probing_finish(eth_dev); + + return 0; } diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index 8b9ef95..51e05e8 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -8,6 +8,8 @@ /* The flower application's private structure */ struct nfp_app_fw_flower { + /* Pointer to the PF vNIC */ + struct nfp_net_hw *pf_hw; }; int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev); diff --git a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h index 52dc3ca..27ea9c2 100644 --- a/drivers/net/nfp/nfp_common.h +++ b/drivers/net/nfp/nfp_common.h @@ -448,6 +448,9 @@ int nfp_net_rss_hash_conf_get(struct rte_eth_dev *dev, #define NFP_PRIV_TO_APP_FW_NIC(app_fw_priv)\ ((struct nfp_app_fw_nic *)app_fw_priv) +#define NFP_PRIV_TO_APP_FW_FLOWER(app_fw_priv)\ + ((struct nfp_app_fw_flower *)app_fw_priv) + #endif /* _NFP_COMMON_H_ */ /* * Local variables: -- 1.8.3.1