From patchwork Tue Mar 9 16:08:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ed Czeck X-Patchwork-Id: 88753 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 353B4A056A; Tue, 9 Mar 2021 17:08:30 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 56A6322A4A4; Tue, 9 Mar 2021 17:08:29 +0100 (CET) Received: from mail-qv1-f54.google.com (mail-qv1-f54.google.com [209.85.219.54]) by mails.dpdk.org (Postfix) with ESMTP id 2DEA74068A for ; Tue, 9 Mar 2021 17:08:28 +0100 (CET) Received: by mail-qv1-f54.google.com with SMTP id k7so6636517qvo.6 for ; Tue, 09 Mar 2021 08:08:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4PEex+9NsT1PJWcLe+/kjEa+XgDUT5Y3skR323ABv/E=; b=2BUr8rO3oU4a/nxUamftNfJLG+8Sv8RoU9/dA14EPWrXd95vyE6eyos1ABZ/6jFkmC rLsLrJZjj26xQ/85CO7jmfhgG/Y/gW28S2A4XYaBXSoLCOPMyfu7S0LW69agTmpymGid 78FK6ESw5v7XsbYtNw+Y30x2IWe7JMST4gi2go1WFT0plysqmMxFmNh6pGmYA3+ngvPo x3sV/4TJ/cDHz6QVWZekGfbVPr6WQVTcz5eJmxQa+BtIjd32uTBZo2ioi/BIbc5JmxnS V2gNsjDT1kH1MweR5VFZ9K9Yj8cMI8uGLQvwLQIplP+Rb0Zn17IVHd5qaihplpsuCrxt 5dgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4PEex+9NsT1PJWcLe+/kjEa+XgDUT5Y3skR323ABv/E=; b=SQhta3U+SBmjnfBd3v+W+lvuNxE0kC48NmGSgSr0xJyaYIJuhU7L+RIbcSd538v5Qb 9jGhDObwjJAeWPfctCZw6nx3q+uBRHy5E2NqTF0jPVloj8J+uf8iXUABhDm97xRt1bCX gQiVnhzbCht/vrzO3pOMSB7R4iUGkoBbAwLzM4gJjclLC7B88nnvLJr0qYDmvbp3uqXL JlcbgfCHi7G1kdn0l6/oqKWtBuMsOlfR9N3jRqHJjRzgs/2x/Tgf/D0gJMfa8ksFsbgZ xEmih5IKCF6wXgN5Fik2jPh418FaLX993Cz44rGhjut0+GwDi7EwDcs8t6tLsbGmoVF5 YpFA== X-Gm-Message-State: AOAM533h+le+lB6kCryjp70pRGZPOJjw64wi0LyBxXZLn4v8U7gOosB3 91kz/+WW6ao39wMWB9e/992bKWBDSNzB1Q== X-Google-Smtp-Source: ABdhPJzeUCw122Ou5M4apJSRXIhQILP6ATdhC6R3eSrjg5r2k3rTwmi2rdGBtJCl1ADw0WQooSnepQ== X-Received: by 2002:ad4:4dc6:: with SMTP id cw6mr4460679qvb.31.1615306107186; Tue, 09 Mar 2021 08:08:27 -0800 (PST) Received: from z390.czeck.local (pool-72-74-133-40.bstnma.fios.verizon.net. [72.74.133.40]) by smtp.gmail.com with ESMTPSA id j24sm10376407qka.67.2021.03.09.08.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Mar 2021 08:08:26 -0800 (PST) From: Ed Czeck To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, john.miller@atomicrules.com, stable@dpdk.org Date: Tue, 9 Mar 2021 11:08:13 -0500 Message-Id: <20210309160818.3553-1-ed.czeck@atomicrules.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210304165637.24658-1-ed.czeck@atomicrules.com> References: <20210304165637.24658-1-ed.czeck@atomicrules.com> Subject: [dpdk-dev] [PATCH v4 1/6] net/ark: update pkt director initial state 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 Sender: "dev" Fixes: b33ccdb17f55 ("net/ark: provide API for hardware modules MPU RQP and pktdir") Cc: stable@dpdk.org Signed-off-by: Ed Czeck --- drivers/net/ark/ark_ethdev.c | 1 + drivers/net/ark/ark_pktdir.c | 2 +- drivers/net/ark/ark_pktdir.h | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index ef650a465..477e1de02 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -321,6 +321,7 @@ eth_ark_dev_init(struct rte_eth_dev *dev) ark->rqpacing = (struct ark_rqpace_t *)(ark->bar0 + ARK_RCPACING_BASE); ark->started = 0; + ark->pkt_dir_v = ARK_PKT_DIR_INIT_VAL; ARK_PMD_LOG(INFO, "Sys Ctrl Const = 0x%x HW Commit_ID: %08x\n", ark->sysctrl.t32[4], diff --git a/drivers/net/ark/ark_pktdir.c b/drivers/net/ark/ark_pktdir.c index 25e121831..dbfd2924b 100644 --- a/drivers/net/ark/ark_pktdir.c +++ b/drivers/net/ark/ark_pktdir.c @@ -22,7 +22,7 @@ ark_pktdir_init(void *base) return inst; } inst->regs = (struct ark_pkt_dir_regs *)base; - inst->regs->ctrl = 0x00110110; /* POR state */ + inst->regs->ctrl = ARK_PKT_DIR_INIT_VAL; /* POR state */ return inst; } diff --git a/drivers/net/ark/ark_pktdir.h b/drivers/net/ark/ark_pktdir.h index 4afd128f9..b5577cebb 100644 --- a/drivers/net/ark/ark_pktdir.h +++ b/drivers/net/ark/ark_pktdir.h @@ -7,7 +7,7 @@ #include -#define ARK_PKTDIR_BASE_ADR 0xa0000 +#define ARK_PKT_DIR_INIT_VAL 0x0110 typedef void *ark_pkt_dir_t; From patchwork Tue Mar 9 16:08:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ed Czeck X-Patchwork-Id: 88754 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7B603A0567; Tue, 9 Mar 2021 17:08:37 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7EB1D22A497; Tue, 9 Mar 2021 17:08:30 +0100 (CET) Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by mails.dpdk.org (Postfix) with ESMTP id EA6484068A for ; Tue, 9 Mar 2021 17:08:28 +0100 (CET) Received: by mail-qt1-f170.google.com with SMTP id h26so6238902qtm.5 for ; Tue, 09 Mar 2021 08:08:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xJZ+Xd5FQHgOjjbnjut3Da7ZflfSGJ/M0eR6q2Y/uqE=; b=oqMkQbwk/H6bMpkG7bd/2ty/qyneAsP0cuBfF1NduYD/9UlKGVaaXcRZGCot7wvezA wGQNvHAYfuGzqWdTA78yv/atC7fytPfoN5LfKssmmmIaxoEOyhS1/KHznglWzEmFIwMd fnSbyZ1yyVklOqt0iMXkB/JBuiYv10fxkapAPrRBr1xc8MCoJqhN0HdeEhWGnnIhND8u LiSWDsSHckSTc++fX6Bln3ebK4KHgys9wj4c1UbW8Yu27CJ8BD29dniOkCDDM+ZFtrct mSApMvc+NLB1Eo9FaB6UKPhqZvunHuz6eQWG3Bx0a9fIWEDTTAL/BsODfI9N8dReEBGG pJEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xJZ+Xd5FQHgOjjbnjut3Da7ZflfSGJ/M0eR6q2Y/uqE=; b=ENuSm87maBUyrJsrVnVhM0JPjKKev/IqrArNmfO76w10fjlT/HNnKCRoQZJogHb+p0 JOmVIdXQGTQPJc9iviR3+96XG+09vqdZOjybppgkcfjxKK77ZsGF4H4XaVsXt1xKg+BG 26fv4/Ocvy+SUMqm8b43DZqR8PuGUquhFGbZBheEGkiqu7sr9jE7JE45o/x43tA458Ng zu1jAYBpvWs2LC7INXfiF9Z26ZEgXkmg6bgq72b4PzldXxST8Anp8dw1HqsF0VeiSI26 4ca3aAGiPRwGt5DP/OufcgQN89YH1SmBdv4REgyLyCkF//vHwzDkNVMMYtcxvg4epNKy J/5w== X-Gm-Message-State: AOAM5316ZxkjG7p5JZk83q8Z6L35MbHLSHzz2u5uspgOVY/Rm9isvH8S Z0Osp8NSzhRaUf27AV+V5h3q6IbsaGodvQ== X-Google-Smtp-Source: ABdhPJw1OgEj26pNoGn0Gs/KM1KOVGJUQwSoiYKkvr+2KPxhE+BscmHlU+/Bn8uxJkm9lZlvrvTPFA== X-Received: by 2002:ac8:3984:: with SMTP id v4mr24746177qte.90.1615306108112; Tue, 09 Mar 2021 08:08:28 -0800 (PST) Received: from z390.czeck.local (pool-72-74-133-40.bstnma.fios.verizon.net. [72.74.133.40]) by smtp.gmail.com with ESMTPSA id j24sm10376407qka.67.2021.03.09.08.08.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Mar 2021 08:08:27 -0800 (PST) From: Ed Czeck To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, john.miller@atomicrules.com, stable@dpdk.org Date: Tue, 9 Mar 2021 11:08:14 -0500 Message-Id: <20210309160818.3553-2-ed.czeck@atomicrules.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210309160818.3553-1-ed.czeck@atomicrules.com> References: <20210304165637.24658-1-ed.czeck@atomicrules.com> <20210309160818.3553-1-ed.czeck@atomicrules.com> Subject: [dpdk-dev] [PATCH v4 2/6] net/ark: refactor Rx buffer recovery 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 Sender: "dev" Allocate mbufs for Rx path in bulk of at least 64 buffers to improve performance. Allow recovery even without a Rx operation to support lack of buffers in pool. Fixes: be410a861598 ("net/ark: add recovery for lack of mbufs") Cc: stable@dpdk.org Signed-off-by: Ed Czeck --- drivers/net/ark/ark_ethdev_rx.c | 49 ++++++++------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index d29d3db78..8e55b851a 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -26,9 +26,6 @@ static uint32_t eth_ark_rx_jumbo(struct ark_rx_queue *queue, struct rte_mbuf *mbuf0, uint32_t cons_index); static inline int eth_ark_rx_seed_mbufs(struct ark_rx_queue *queue); -static int eth_ark_rx_seed_recovery(struct ark_rx_queue *queue, - uint32_t *pnb, - struct rte_mbuf **mbufs); /* ************************************************************************* */ struct ark_rx_queue { @@ -54,7 +51,7 @@ struct ark_rx_queue { /* The queue Index is used within the dpdk device structures */ uint16_t queue_index; - uint32_t last_cons; + uint32_t unused; /* separate cache line */ /* second cache line - fields only used in slow path */ @@ -105,9 +102,8 @@ static inline void eth_ark_rx_update_cons_index(struct ark_rx_queue *queue, uint32_t cons_index) { queue->cons_index = cons_index; - eth_ark_rx_seed_mbufs(queue); - if (((cons_index - queue->last_cons) >= 64U)) { - queue->last_cons = cons_index; + if ((cons_index + queue->queue_size - queue->seed_index) >= 64U) { + eth_ark_rx_seed_mbufs(queue); ark_mpu_set_producer(queue->mpu, queue->seed_index); } } @@ -321,9 +317,7 @@ eth_ark_recv_pkts(void *rx_queue, break; } - if (unlikely(nb != 0)) - /* report next free to FPGA */ - eth_ark_rx_update_cons_index(queue, cons_index); + eth_ark_rx_update_cons_index(queue, cons_index); return nb; } @@ -458,11 +452,13 @@ eth_ark_rx_seed_mbufs(struct ark_rx_queue *queue) int status = rte_pktmbuf_alloc_bulk(queue->mb_pool, mbufs, nb); if (unlikely(status != 0)) { - /* Try to recover from lack of mbufs in pool */ - status = eth_ark_rx_seed_recovery(queue, &nb, mbufs); - if (unlikely(status != 0)) { - return -1; - } + ARK_PMD_LOG(NOTICE, + "Could not allocate %u mbufs from pool" + " for RX queue %u;" + " %u free buffers remaining in queue\n", + nb, queue->queue_index, + queue->seed_index - queue->cons_index); + return -1; } if (ARK_DEBUG_CORE) { /* DEBUG */ @@ -511,29 +507,6 @@ eth_ark_rx_seed_mbufs(struct ark_rx_queue *queue) return 0; } -int -eth_ark_rx_seed_recovery(struct ark_rx_queue *queue, - uint32_t *pnb, - struct rte_mbuf **mbufs) -{ - int status = -1; - - /* Ignore small allocation failures */ - if (*pnb <= 64) - return -1; - - *pnb = 64U; - status = rte_pktmbuf_alloc_bulk(queue->mb_pool, mbufs, *pnb); - if (status != 0) { - ARK_PMD_LOG(NOTICE, - "ARK: Could not allocate %u mbufs from pool for RX queue %u;" - " %u free buffers remaining in queue\n", - *pnb, queue->queue_index, - queue->seed_index - queue->cons_index); - } - return status; -} - void eth_ark_rx_dump_queue(struct rte_eth_dev *dev, uint16_t queue_id, const char *msg) From patchwork Tue Mar 9 16:08:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ed Czeck X-Patchwork-Id: 88755 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1F109A0567; Tue, 9 Mar 2021 17:08:45 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BA7C822A4BB; Tue, 9 Mar 2021 17:08:32 +0100 (CET) Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) by mails.dpdk.org (Postfix) with ESMTP id 15D6C22A458 for ; Tue, 9 Mar 2021 17:08:30 +0100 (CET) Received: by mail-qt1-f175.google.com with SMTP id w60so5711581qte.0 for ; Tue, 09 Mar 2021 08:08:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=fs6oMBaMFvr0+pfh6IG4Lu6xkvXjkmEPck08KAan+dI=; b=WR+6QNAGLO2QIieotDzbjTSZ9h7ufJ+D2Jr9/Sf4wsJ5v8QajUZQPcmCTYpinxrLfa pQkt34chW0+JrhIuFSGRD1ARaPZJ0sxvK18ev5a9j87I12Ah9JDspYcmE7CScMfP+m7S B/bAkcn709WEvjLAc52T93OwcoGqBn9RNMnha/pZjb1Q32ruw0ofvsEnR8L3/prCMSsY StqgWW6peVkIr60oNnThjMP3YOkWuBd86QRPqpMlC8zJkf/ru8ra7W4swX44NsihflJt uwVXNDjJIE2uZl+feCJUrJ14tA7IIr22E/lEjgwDawUjCtV30E2kiZByNSlbrEcczdyO DExw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=fs6oMBaMFvr0+pfh6IG4Lu6xkvXjkmEPck08KAan+dI=; b=t3yf8Hu63cZ5R2bz0NlutKq12RnwoFLRG3/H4Gu35iiNNyU5U4PKksqoqRe1jQb+Zx fdYNAOaoQqxsBbPGFdXh3JO/+i7BL6vl+Pa4bqaaGVGvuVVYk3EcgQimCq6w/d/w9Zgn VY+C2xLb8g5X5F1p3RLjffitZLNlzx01cYgv0BgH2OOUgRKzOp1bwpuBFmKeWBi/wXPa e3JO/A7icg6NAEuvxk3hY/u6OyIGa2B3WdgPqoYppHTIFuA4zBQI+rCmcLXlDRjP3s/9 N8kO0FgzKR8htuLyHsIe+N92nPkOjS6Giw8qNQ5jh1F7J6mehpIy9vWdKpUMU8s9oLkT t8hw== X-Gm-Message-State: AOAM5333fUnnbTlOvs5IHcsvcj0P4Rf+bhaTaNSUoblg6EywvRWOMfrU WxK+eN/4VwlgI7e3o/WRl24Vg49RntFj6w== X-Google-Smtp-Source: ABdhPJwjO8BFkSVQCNRMzcgxwLZ+GivkTz+JtDtF4Y9OQRFWRGkhOwp6258/UxMzRukRvoo+GI/8lg== X-Received: by 2002:ac8:4681:: with SMTP id g1mr26875151qto.190.1615306108980; Tue, 09 Mar 2021 08:08:28 -0800 (PST) Received: from z390.czeck.local (pool-72-74-133-40.bstnma.fios.verizon.net. [72.74.133.40]) by smtp.gmail.com with ESMTPSA id j24sm10376407qka.67.2021.03.09.08.08.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Mar 2021 08:08:28 -0800 (PST) From: Ed Czeck To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, john.miller@atomicrules.com Date: Tue, 9 Mar 2021 11:08:15 -0500 Message-Id: <20210309160818.3553-3-ed.czeck@atomicrules.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210309160818.3553-1-ed.czeck@atomicrules.com> References: <20210304165637.24658-1-ed.czeck@atomicrules.com> <20210309160818.3553-1-ed.czeck@atomicrules.com> Subject: [dpdk-dev] [PATCH v4 3/6] net/ark: update internal structs to reflect FPGA updates 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 Sender: "dev" - New PCIe IDs using net/ark driver - Update Version IDs and structures specified by hardware - New internal descriptor status for TX - Adjust data placement in RX operations, headroom in retained for segmented mbufs Signed-off-by: Ed Czeck --- doc/guides/nics/ark.rst | 5 ++ drivers/net/ark/ark_ddm.c | 18 +++-- drivers/net/ark/ark_ddm.h | 22 +++--- drivers/net/ark/ark_ethdev.c | 5 ++ drivers/net/ark/ark_ethdev_rx.c | 6 +- drivers/net/ark/ark_ethdev_tx.c | 122 +++++++++++++++++++------------- drivers/net/ark/ark_udm.c | 2 + drivers/net/ark/ark_udm.h | 13 ++-- 8 files changed, 123 insertions(+), 70 deletions(-) diff --git a/doc/guides/nics/ark.rst b/doc/guides/nics/ark.rst index 18434c7a4..dcccfee26 100644 --- a/doc/guides/nics/ark.rst +++ b/doc/guides/nics/ark.rst @@ -155,6 +155,11 @@ ARK PMD supports the following Arkville RTL PCIe instances including: * ``1d6c:100d`` - AR-ARKA-FX0 [Arkville 32B DPDK Data Mover] * ``1d6c:100e`` - AR-ARKA-FX1 [Arkville 64B DPDK Data Mover] +* ``1d6c:100f`` - AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Versal] +* ``1d6c:1010`` - AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex] +* ``1d6c:1017`` - AR-ARK-FX1 [Arkville 64B Multi-Homed Primary Endpoint] +* ``1d6c:1018`` - AR-ARK-FX1 [Arkville 64B Multi-Homed Secondary Endpoint] +* ``1d6c:1019`` - AR-ARK-FX1 [Arkville 64B Multi-Homed Tertiary Endpoint] Supported Operating Systems --------------------------- diff --git a/drivers/net/ark/ark_ddm.c b/drivers/net/ark/ark_ddm.c index 91d1179d8..232137157 100644 --- a/drivers/net/ark/ark_ddm.c +++ b/drivers/net/ark/ark_ddm.c @@ -7,6 +7,8 @@ #include "ark_logs.h" #include "ark_ddm.h" +static_assert(sizeof(union ark_tx_meta) == 8, "Unexpected struct size ark_tx_meta"); + /* ************************************************************************* */ int ark_ddm_verify(struct ark_ddm_t *ddm) @@ -19,18 +21,26 @@ ark_ddm_verify(struct ark_ddm_t *ddm) } hw_const = ddm->cfg.const0; + if (hw_const == ARK_DDM_CONST3) + return 0; + if (hw_const == ARK_DDM_CONST1) { ARK_PMD_LOG(ERR, "ARK: DDM module is version 1, " "PMD expects version 2\n"); return -1; - } else if (hw_const != ARK_DDM_CONST2) { + } + + if (hw_const == ARK_DDM_CONST2) { ARK_PMD_LOG(ERR, - "ARK: DDM module not found as expected 0x%08x\n", - ddm->cfg.const0); + "ARK: DDM module is version 2, " + "PMD expects version 3\n"); return -1; } - return 0; + ARK_PMD_LOG(ERR, + "ARK: DDM module not found as expected 0x%08x\n", + ddm->cfg.const0); + return -1; } void diff --git a/drivers/net/ark/ark_ddm.h b/drivers/net/ark/ark_ddm.h index 5456b4b5c..687ff2519 100644 --- a/drivers/net/ark/ark_ddm.h +++ b/drivers/net/ark/ark_ddm.h @@ -16,17 +16,22 @@ * there is minimal documentation. */ -/* struct defining Tx meta data -- fixed in FPGA -- 16 bytes */ -struct ark_tx_meta { +/* struct defining Tx meta data -- fixed in FPGA -- 8 bytes */ +union ark_tx_meta { uint64_t physaddr; - uint32_t user1; - uint16_t data_len; /* of this MBUF */ + struct { + uint32_t usermeta0; + uint32_t usermeta1; + }; + struct { + uint16_t data_len; /* of this MBUF */ #define ARK_DDM_EOP 0x01 #define ARK_DDM_SOP 0x02 - uint8_t flags; /* bit 0 indicates last mbuf in chain. */ - uint8_t reserved[1]; -}; - + uint8_t flags; + uint8_t meta_cnt; + uint32_t user1; + }; +} __rte_packed; /* * DDM core hardware structures @@ -35,6 +40,7 @@ struct ark_tx_meta { */ #define ARK_DDM_CFG 0x0000 /* Set unique HW ID for hardware version */ +#define ARK_DDM_CONST3 (0x334d4444) #define ARK_DDM_CONST2 (0x324d4444) #define ARK_DDM_CONST1 (0xfacecafe) diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 477e1de02..95546a891 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -95,6 +95,11 @@ static const char * const valid_arguments[] = { static const struct rte_pci_id pci_id_ark_map[] = { {RTE_PCI_DEVICE(0x1d6c, 0x100d)}, {RTE_PCI_DEVICE(0x1d6c, 0x100e)}, + {RTE_PCI_DEVICE(0x1d6c, 0x100f)}, + {RTE_PCI_DEVICE(0x1d6c, 0x1010)}, + {RTE_PCI_DEVICE(0x1d6c, 0x1017)}, + {RTE_PCI_DEVICE(0x1d6c, 0x1018)}, + {RTE_PCI_DEVICE(0x1d6c, 0x1019)}, {.vendor_id = 0, /* sentinel */ }, }; diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index 8e55b851a..21a9af41a 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -60,7 +60,6 @@ struct ark_rx_queue { volatile uint32_t prod_index; /* step 2 filled by FPGA */ } __rte_cache_aligned; - /* ************************************************************************* */ static int eth_ark_rx_hw_setup(struct rte_eth_dev *dev, @@ -265,7 +264,6 @@ eth_ark_recv_pkts(void *rx_queue, /* META DATA embedded in headroom */ meta = RTE_PTR_ADD(mbuf->buf_addr, ARK_RX_META_OFFSET); - mbuf->port = meta->port; mbuf->pkt_len = meta->pkt_len; mbuf->data_len = meta->pkt_len; /* set timestamp if enabled at least on one device */ @@ -346,8 +344,7 @@ eth_ark_rx_jumbo(struct ark_rx_queue *queue, /* HW guarantees that the data does not exceed prod_index! */ while (remaining != 0) { data_len = RTE_MIN(remaining, - RTE_MBUF_DEFAULT_DATAROOM + - RTE_PKTMBUF_HEADROOM); + RTE_MBUF_DEFAULT_DATAROOM); remaining -= data_len; segments += 1; @@ -356,7 +353,6 @@ eth_ark_rx_jumbo(struct ark_rx_queue *queue, mbuf_prev->next = mbuf; mbuf_prev = mbuf; mbuf->data_len = data_len; - mbuf->data_off = 0; cons_index += 1; } diff --git a/drivers/net/ark/ark_ethdev_tx.c b/drivers/net/ark/ark_ethdev_tx.c index 612d918e3..00e5dbf7c 100644 --- a/drivers/net/ark/ark_ethdev_tx.c +++ b/drivers/net/ark/ark_ethdev_tx.c @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright (c) 2015-2018 Atomic Rules LLC + * Copyright (c) 2015-2021 Atomic Rules LLC */ #include @@ -23,7 +23,7 @@ /* ************************************************************************* */ struct ark_tx_queue { - struct ark_tx_meta *meta_q; + union ark_tx_meta *meta_q; struct rte_mbuf **bufs; /* handles for hw objects */ @@ -37,8 +37,8 @@ struct ark_tx_queue { uint32_t queue_mask; /* 3 indexes to the paired data rings. */ - uint32_t prod_index; /* where to put the next one */ - uint32_t free_index; /* mbuf has been freed */ + int32_t prod_index; /* where to put the next one */ + int32_t free_index; /* mbuf has been freed */ /* The queue Id is used to identify the HW Q */ uint16_t phys_qid; @@ -47,14 +47,15 @@ struct ark_tx_queue { uint32_t pad[1]; - /* second cache line - fields only used in slow path */ + /* second cache line - fields written by device */ RTE_MARKER cacheline1 __rte_cache_min_aligned; - uint32_t cons_index; /* hw is done, can be freed */ + volatile int32_t cons_index; /* hw is done, can be freed */ } __rte_cache_aligned; /* Forward declarations */ -static uint32_t eth_ark_tx_jumbo(struct ark_tx_queue *queue, - struct rte_mbuf *mbuf); +static int eth_ark_tx_jumbo(struct ark_tx_queue *queue, + struct rte_mbuf *mbuf, + uint32_t *user_meta, uint8_t meta_cnt); static int eth_ark_tx_hw_queue_config(struct ark_tx_queue *queue); static void free_completed_tx(struct ark_tx_queue *queue); @@ -66,16 +67,44 @@ ark_tx_hw_queue_stop(struct ark_tx_queue *queue) /* ************************************************************************* */ static inline void -eth_ark_tx_meta_from_mbuf(struct ark_tx_meta *meta, - const struct rte_mbuf *mbuf, - uint8_t flags) +eth_ark_tx_desc_fill(struct ark_tx_queue *queue, + struct rte_mbuf *mbuf, + uint8_t flags, + uint32_t *user_meta, + uint8_t meta_cnt /* 0 to 5 */ + ) { - meta->physaddr = rte_mbuf_data_iova(mbuf); - meta->user1 = rte_pmd_ark_mbuf_tx_userdata_get(mbuf); + uint32_t tx_idx; + union ark_tx_meta *meta; + uint8_t m; + + /* Header */ + tx_idx = queue->prod_index & queue->queue_mask; + meta = &queue->meta_q[tx_idx]; meta->data_len = rte_pktmbuf_data_len(mbuf); meta->flags = flags; + meta->meta_cnt = meta_cnt / 2; + meta->user1 = meta_cnt ? (*user_meta++) : 0; + queue->prod_index++; + + queue->bufs[tx_idx] = mbuf; + + /* 1 or 2 user meta data entries, user words 1,2 and 3,4 */ + for (m = 1; m < meta_cnt; m += 2) { + tx_idx = queue->prod_index & queue->queue_mask; + meta = &queue->meta_q[tx_idx]; + meta->usermeta0 = *user_meta++; + meta->usermeta1 = *user_meta++; + queue->prod_index++; + } + + tx_idx = queue->prod_index & queue->queue_mask; + meta = &queue->meta_q[tx_idx]; + meta->physaddr = rte_mbuf_data_iova(mbuf); + queue->prod_index++; } + /* ************************************************************************* */ uint16_t eth_ark_xmit_pkts_noop(void *vtxq __rte_unused, @@ -91,12 +120,12 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { struct ark_tx_queue *queue; struct rte_mbuf *mbuf; - struct ark_tx_meta *meta; + uint32_t user_meta; - uint32_t idx; - uint32_t prod_index_limit; int stat; + int32_t prod_index_limit; uint16_t nb; + uint8_t user_len = 1; const uint32_t min_pkt_len = ARK_MIN_TX_PKTLEN; queue = (struct ark_tx_queue *)vtxq; @@ -104,10 +133,11 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) /* free any packets after the HW is done with them */ free_completed_tx(queue); - prod_index_limit = queue->queue_size + queue->free_index; + /* leave 4 elements mpu data */ + prod_index_limit = queue->queue_size + queue->free_index - 4; for (nb = 0; - (nb < nb_pkts) && (queue->prod_index != prod_index_limit); + (nb < nb_pkts) && (prod_index_limit - queue->prod_index) > 0; ++nb) { mbuf = tx_pkts[nb]; @@ -133,19 +163,16 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) memset(appended, 0, to_add); } + user_meta = rte_pmd_ark_mbuf_tx_userdata_get(mbuf); if (unlikely(mbuf->nb_segs != 1)) { - stat = eth_ark_tx_jumbo(queue, mbuf); + stat = eth_ark_tx_jumbo(queue, mbuf, + &user_meta, user_len); if (unlikely(stat != 0)) break; /* Queue is full */ } else { - idx = queue->prod_index & queue->queue_mask; - queue->bufs[idx] = mbuf; - meta = &queue->meta_q[idx]; - eth_ark_tx_meta_from_mbuf(meta, - mbuf, - ARK_DDM_SOP | - ARK_DDM_EOP); - queue->prod_index++; + eth_ark_tx_desc_fill(queue, mbuf, + ARK_DDM_SOP | ARK_DDM_EOP, + &user_meta, user_len); } } @@ -173,32 +200,28 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) } /* ************************************************************************* */ -static uint32_t -eth_ark_tx_jumbo(struct ark_tx_queue *queue, struct rte_mbuf *mbuf) +static int +eth_ark_tx_jumbo(struct ark_tx_queue *queue, struct rte_mbuf *mbuf, + uint32_t *user_meta, uint8_t meta_cnt) { struct rte_mbuf *next; - struct ark_tx_meta *meta; - uint32_t free_queue_space; - uint32_t idx; + int32_t free_queue_space; uint8_t flags = ARK_DDM_SOP; free_queue_space = queue->queue_mask - (queue->prod_index - queue->free_index); - if (unlikely(free_queue_space < mbuf->nb_segs)) + /* We need up to 4 mbufs for first header and 2 for subsequent ones */ + if (unlikely(free_queue_space < (2 + (2 * mbuf->nb_segs)))) return -1; while (mbuf != NULL) { next = mbuf->next; - - idx = queue->prod_index & queue->queue_mask; - queue->bufs[idx] = mbuf; - meta = &queue->meta_q[idx]; - flags |= (next == NULL) ? ARK_DDM_EOP : 0; - eth_ark_tx_meta_from_mbuf(meta, mbuf, flags); - queue->prod_index++; + + eth_ark_tx_desc_fill(queue, mbuf, flags, user_meta, meta_cnt); flags &= ~ARK_DDM_SOP; /* drop SOP flags */ + meta_cnt = 0; /* Meta only on SOP */ mbuf = next; } @@ -227,6 +250,9 @@ eth_ark_tx_queue_setup(struct rte_eth_dev *dev, return -1; } + /* Each packet requires at least 2 mpu elements - double desc count */ + nb_desc = 2 * nb_desc; + /* Allocate queue struct */ queue = rte_zmalloc_socket("Ark_txqueue", sizeof(struct ark_tx_queue), @@ -248,7 +274,7 @@ eth_ark_tx_queue_setup(struct rte_eth_dev *dev, queue->meta_q = rte_zmalloc_socket("Ark_txqueue meta", - nb_desc * sizeof(struct ark_tx_meta), + nb_desc * sizeof(union ark_tx_meta), 64, socket_id); queue->bufs = @@ -289,7 +315,7 @@ eth_ark_tx_hw_queue_config(struct ark_tx_queue *queue) uint32_t write_interval_ns; /* Verify HW -- MPU */ - if (ark_mpu_verify(queue->mpu, sizeof(struct ark_tx_meta))) + if (ark_mpu_verify(queue->mpu, sizeof(union ark_tx_meta))) return -1; queue_base = rte_malloc_virt2iova(queue); @@ -391,19 +417,19 @@ static void free_completed_tx(struct ark_tx_queue *queue) { struct rte_mbuf *mbuf; - struct ark_tx_meta *meta; - uint32_t top_index; + union ark_tx_meta *meta; + int32_t top_index; top_index = queue->cons_index; /* read once */ - while (queue->free_index != top_index) { + while ((top_index - queue->free_index) > 0) { meta = &queue->meta_q[queue->free_index & queue->queue_mask]; - mbuf = queue->bufs[queue->free_index & queue->queue_mask]; - if (likely((meta->flags & ARK_DDM_SOP) != 0)) { + mbuf = queue->bufs[queue->free_index & + queue->queue_mask]; /* ref count of the mbuf is checked in this call. */ rte_pktmbuf_free(mbuf); } - queue->free_index++; + queue->free_index += (meta->meta_cnt + 2); } } diff --git a/drivers/net/ark/ark_udm.c b/drivers/net/ark/ark_udm.c index a740d36d4..28c4500a2 100644 --- a/drivers/net/ark/ark_udm.c +++ b/drivers/net/ark/ark_udm.c @@ -7,6 +7,8 @@ #include "ark_logs.h" #include "ark_udm.h" +static_assert(sizeof(struct ark_rx_meta) == 32, "Unexpected struct size ark_rx_meta"); + int ark_udm_verify(struct ark_udm_t *udm) { diff --git a/drivers/net/ark/ark_udm.h b/drivers/net/ark/ark_udm.h index 5846c825b..ea92d4b6e 100644 --- a/drivers/net/ark/ark_udm.h +++ b/drivers/net/ark/ark_udm.h @@ -15,14 +15,15 @@ * there is minimal documentation. */ -/* Meta data structure apssed from FPGA, must match layout in FPGA */ +/* Meta data structure passed from FPGA, must match layout in FPGA + * -- 32 bytes + */ struct ark_rx_meta { uint64_t timestamp; uint64_t user_data; - uint8_t port; - uint8_t dst_queue; + uint8_t reserved[14]; uint16_t pkt_len; -}; +} __rte_packed; /* * UDM hardware structures @@ -32,7 +33,9 @@ struct ark_rx_meta { #define ARK_RX_WRITE_TIME_NS 2500 #define ARK_UDM_SETUP 0 -#define ARK_UDM_CONST 0xbACECACE +#define ARK_UDM_CONST2 0xbACECACE +#define ARK_UDM_CONST3 0x334d4455 +#define ARK_UDM_CONST ARK_UDM_CONST3 struct ark_udm_setup_t { uint32_t r0; uint32_t r4; From patchwork Tue Mar 9 16:08:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ed Czeck X-Patchwork-Id: 88756 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A8992A0567; Tue, 9 Mar 2021 17:08:53 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0C70F22A4D6; Tue, 9 Mar 2021 17:08:34 +0100 (CET) Received: from mail-qv1-f47.google.com (mail-qv1-f47.google.com [209.85.219.47]) by mails.dpdk.org (Postfix) with ESMTP id DF57422A4B3 for ; Tue, 9 Mar 2021 17:08:30 +0100 (CET) Received: by mail-qv1-f47.google.com with SMTP id 2so6655182qvd.0 for ; Tue, 09 Mar 2021 08:08:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xwgXgW+WjtLCJD4aj/mR9uwHkSAEl7AIUgLsoGp+bzE=; b=YgVYTa73ELGDXrQpgojgampuXK3PmdGeAimvS+BudukmgA+5z0KRuM247kInx9zzGS vqxn403w5IYfl2MYlIV83dyeaboOsiSWNqoWyj168L0g7loxRAUFraeQAY+TWKhatP1R 7NjhKUX4de63yUXOwsQRJB+yuABYzLtOKXOxiPEV31XapmPSvG7zSz6fECcMSaBXYHzY zyRANshhGyPotyGzythHybTIO9g2aghBzMvrng3DLEB20isuPKwS6d2AoOzCIpmhTaZu rQ3gu9ErKe9FdNr10F4GZNtZ7Tx4PXI6Bp7/XvI+LvcyAzTQM62BG6+8m5zCjMdKgYl4 0amA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xwgXgW+WjtLCJD4aj/mR9uwHkSAEl7AIUgLsoGp+bzE=; b=b7tDRLmR3/MiQKq7OpXRd9bgOYJ778FlkiBCBMb8BNJ9es5C1ak7hEqRtl7nK40CIk y7gHAj8IwoDnHTQSFYnrvVG2OCMCI5K3Hm2IgeDcar6rHPv3UOrjMrPinLmKYLnsb8sx bTFkAq396M/kXELUD94Y0PasLoXaIfmGDTbV4N4sVx8bKyUm3tUcmSCff7iHxzkbqAfB H/VN5nuoebfo8/fPgjMMvEHYTPdPg3m5ukFR79thJpNSSdjyLIichaBjjil5rirux5jN YJxgxEYKqZdlBwjCOFr1fhxXr6DUPzsPz/A2pTVr3QYgxJO4VT6SJAihauLlPuLk8yHA co2A== X-Gm-Message-State: AOAM532vid1jtaWTx7pyBauT9fxMtiM2p8izeL2F9oQPWhitDKzjm4TI WraxUWl0hJp4qp8+aqNxrC73Gp9+HKxNXg== X-Google-Smtp-Source: ABdhPJztdvBJw2wvzXFJ+krojisx0C+tlb0YCxxCR7GkFT1cXq5rliWc0WZxXcc7MWsv9p3kjInKXA== X-Received: by 2002:a0c:f950:: with SMTP id i16mr25746189qvo.54.1615306109915; Tue, 09 Mar 2021 08:08:29 -0800 (PST) Received: from z390.czeck.local (pool-72-74-133-40.bstnma.fios.verizon.net. [72.74.133.40]) by smtp.gmail.com with ESMTPSA id j24sm10376407qka.67.2021.03.09.08.08.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Mar 2021 08:08:29 -0800 (PST) From: Ed Czeck To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, john.miller@atomicrules.com Date: Tue, 9 Mar 2021 11:08:16 -0500 Message-Id: <20210309160818.3553-4-ed.czeck@atomicrules.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210309160818.3553-1-ed.czeck@atomicrules.com> References: <20210304165637.24658-1-ed.czeck@atomicrules.com> <20210309160818.3553-1-ed.czeck@atomicrules.com> Subject: [dpdk-dev] [PATCH v4 4/6] net/ark: cleanup ark dynamic extension interface 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 Sender: "dev" - Rename extension functions with rte_pmd_ark prefix - Move extension prototype to rte_pmd_ark.h - Update local function documentation Signed-off-by: Ed Czeck --- v3: - split function rename from previous commit v4: - reorder patches renaming before adding --- drivers/net/ark/ark_ethdev.c | 32 ++--- drivers/net/ark/ark_ext.h | 90 ------------ drivers/net/ark/rte_pmd_ark.h | 251 +++++++++++++++++++++++++++++++++- 3 files changed, 263 insertions(+), 110 deletions(-) delete mode 100644 drivers/net/ark/ark_ext.h diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 95546a891..5282534d3 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -193,58 +193,58 @@ check_for_ext(struct ark_adapter *ark) /* Get the entry points */ ark->user_ext.dev_init = (void *(*)(struct rte_eth_dev *, void *, int)) - dlsym(ark->d_handle, "dev_init"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_init"); ARK_PMD_LOG(DEBUG, "device ext init pointer = %p\n", ark->user_ext.dev_init); ark->user_ext.dev_get_port_count = (int (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "dev_get_port_count"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_get_port_count"); ark->user_ext.dev_uninit = (void (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "dev_uninit"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_uninit"); ark->user_ext.dev_configure = (int (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "dev_configure"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_configure"); ark->user_ext.dev_start = (int (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "dev_start"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_start"); ark->user_ext.dev_stop = (void (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "dev_stop"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_stop"); ark->user_ext.dev_close = (void (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "dev_close"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_close"); ark->user_ext.link_update = (int (*)(struct rte_eth_dev *, int, void *)) - dlsym(ark->d_handle, "link_update"); + dlsym(ark->d_handle, "rte_pmd_ark_link_update"); ark->user_ext.dev_set_link_up = (int (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "dev_set_link_up"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_set_link_up"); ark->user_ext.dev_set_link_down = (int (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "dev_set_link_down"); + dlsym(ark->d_handle, "rte_pmd_ark_dev_set_link_down"); ark->user_ext.stats_get = (int (*)(struct rte_eth_dev *, struct rte_eth_stats *, void *)) - dlsym(ark->d_handle, "stats_get"); + dlsym(ark->d_handle, "rte_pmd_ark_stats_get"); ark->user_ext.stats_reset = (void (*)(struct rte_eth_dev *, void *)) - dlsym(ark->d_handle, "stats_reset"); + dlsym(ark->d_handle, "rte_pmd_ark_stats_reset"); ark->user_ext.mac_addr_add = (void (*)(struct rte_eth_dev *, struct rte_ether_addr *, uint32_t, uint32_t, void *)) - dlsym(ark->d_handle, "mac_addr_add"); + dlsym(ark->d_handle, "rte_pmd_ark_mac_addr_add"); ark->user_ext.mac_addr_remove = (void (*)(struct rte_eth_dev *, uint32_t, void *)) - dlsym(ark->d_handle, "mac_addr_remove"); + dlsym(ark->d_handle, "rte_pmd_ark_mac_addr_remove"); ark->user_ext.mac_addr_set = (void (*)(struct rte_eth_dev *, struct rte_ether_addr *, void *)) - dlsym(ark->d_handle, "mac_addr_set"); + dlsym(ark->d_handle, "rte_pmd_ark_mac_addr_set"); ark->user_ext.set_mtu = (int (*)(struct rte_eth_dev *, uint16_t, void *)) - dlsym(ark->d_handle, "set_mtu"); + dlsym(ark->d_handle, "rte_pmd_ark_set_mtu"); return found; } diff --git a/drivers/net/ark/ark_ext.h b/drivers/net/ark/ark_ext.h deleted file mode 100644 index 821fb55bb..000000000 --- a/drivers/net/ark/ark_ext.h +++ /dev/null @@ -1,90 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright (c) 2015-2018 Atomic Rules LLC - */ - -#ifndef _ARK_EXT_H_ -#define _ARK_EXT_H_ - -#include - -/* - * This is the template file for users who which to define a dynamic - * extension to the Arkville PMD. User's who create an extension - * should include this file and define the necessary and desired - * functions. - * Only 1 function is required for an extension, dev_init(); all other - * functions prototyped in this file are optional. - */ - -/* - * Called post PMD init. - * The implementation returns its private data that gets passed into - * all other functions as user_data - * The ARK extension implementation MUST implement this function - */ -void *dev_init(struct rte_eth_dev *dev, void *a_bar, int port_id); - -/* Called during device shutdown */ -void dev_uninit(struct rte_eth_dev *dev, void *user_data); - -/* This call is optional and allows the - * extension to specify the number of supported ports. - */ -uint8_t dev_get_port_count(struct rte_eth_dev *dev, - void *user_data); - -/* - * The following functions are optional and are directly mapped - * from the DPDK PMD ops structure. - * Each function if implemented is called after the ARK PMD - * implementation executes. - */ - -int dev_configure(struct rte_eth_dev *dev, - void *user_data); - -int dev_start(struct rte_eth_dev *dev, - void *user_data); - -void dev_stop(struct rte_eth_dev *dev, - void *user_data); - -void dev_close(struct rte_eth_dev *dev, - void *user_data); - -int link_update(struct rte_eth_dev *dev, - int wait_to_complete, - void *user_data); - -int dev_set_link_up(struct rte_eth_dev *dev, - void *user_data); - -int dev_set_link_down(struct rte_eth_dev *dev, - void *user_data); - -int stats_get(struct rte_eth_dev *dev, - struct rte_eth_stats *stats, - void *user_data); - -void stats_reset(struct rte_eth_dev *dev, - void *user_data); - -void mac_addr_add(struct rte_eth_dev *dev, - struct rte_ether_addr *macadr, - uint32_t index, - uint32_t pool, - void *user_data); - -void mac_addr_remove(struct rte_eth_dev *dev, - uint32_t index, - void *user_data); - -void mac_addr_set(struct rte_eth_dev *dev, - struct rte_ether_addr *mac_addr, - void *user_data); - -int set_mtu(struct rte_eth_dev *dev, - uint16_t size, - void *user_data); - -#endif diff --git a/drivers/net/ark/rte_pmd_ark.h b/drivers/net/ark/rte_pmd_ark.h index 6f26d66b1..0f24a347d 100644 --- a/drivers/net/ark/rte_pmd_ark.h +++ b/drivers/net/ark/rte_pmd_ark.h @@ -1,18 +1,24 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright (c) 2020 Atomic Rules LLC + * Copyright (c) 2020-2021 Atomic Rules LLC */ #ifndef RTE_PMD_ARK_H #define RTE_PMD_ARK_H +#include +#include + +#include +struct rte_eth_dev; +struct rte_mbuf; +struct rte_ether_addr; +struct rte_eth_stats; + /** * @file * ARK driver-specific API */ -#include -#include - #ifndef RTE_PMD_ARK_TX_USERDATA_ENABLE #define RTE_PMD_ARK_TX_USERDATA_ENABLE 0 #endif @@ -122,4 +128,241 @@ rte_pmd_ark_mbuf_rx_userdata_set(struct rte_mbuf *mbuf, #endif } +/* The following section lists function prototypes for Arkville's + * dynamic PMD extension. User's who create an extension + * must include this file and define the necessary and desired + * functions. Only 1 function is required for an extension, + * rte_pmd_ark_dev_init(); all other functions prototypes in this + * section are optional. + * See documentation for compiling and use of extensions. + */ + +/** + * Extension prototype, required implementation if extensions are used. + * Called during device probe to initialize the user structure + * passed to other extension functions. This is called once for each + * port of the device. + * + * @param dev + * current device. + * @param a_bar + * access to PCIe device bar (application bar) and hence access to + * user's portion of FPGA. + * @param port_id + * port identifier. + * @return user_data + * which will be passed to other extension functions. + */ +void *rte_pmd_ark_dev_init(struct rte_eth_dev *dev, void *a_bar, int port_id); + +/** + * Extension prototype, optional implementation. + * Called during device uninit. + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + */ +void rte_pmd_ark_dev_uninit(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during device probe to change the port count from 1. + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +uint8_t dev_get_port_count(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_configure(). + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +int rte_pmd_ark_dev_configure(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_start(). + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +int rte_pmd_ark_dev_start(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_stop(). + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +void rte_pmd_ark_dev_stop(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_close(). + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +void rte_pmd_ark_dev_close(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during link_update status event. + * + * @param dev + * current device. + * @param wait_to_complete + * argument from update event. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +int rte_pmd_ark_link_update(struct rte_eth_dev *dev, + int wait_to_complete, + void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_set_link_up(). + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +int rte_pmd_ark_dev_set_link_up(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_set_link_down(). + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +int rte_pmd_ark_dev_set_link_down(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_stats_get(); allows updates to the stats + * struct in addition Ark's PMD operations. + * + * @param dev + * current device. + * @param stats + * statistics struct already populated by Ark PMD. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +int rte_pmd_ark_stats_get(struct rte_eth_dev *dev, + struct rte_eth_stats *stats, + void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_stats_reset(). + * + * @param dev + * current device. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +void rte_pmd_ark_stats_reset(struct rte_eth_dev *dev, void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_mac_addr_add(). + * + * @param dev + * current device. + * @param macaddr + * The MAC address to add + * @param index + * The index into the MAC address array. + * @param pool + * VMDq pool index from caller + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +void rte_pmd_ark_mac_addr_add(struct rte_eth_dev *dev, + struct rte_ether_addr *macaddr, + uint32_t index, + uint32_t pool, + void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_mac_addr_remove(). + * + * @param dev + * current device. + * @param index + * The index into the MAC address array. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +void rte_pmd_ark_mac_addr_remove(struct rte_eth_dev *dev, + uint32_t index, + void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_default_mac_addr_set(). + * + * @param dev + * current device. + * @param mac_addr + * The new default MAC address. + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +void rte_pmd_ark_mac_addr_set(struct rte_eth_dev *dev, + struct rte_ether_addr *mac_addr, + void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_dev_set_mtu(). + * + * @param dev + * current device. + * @param size + * The MTU to be applied + * @param user_data + * user argument from dev_init() call. + * @return (0) if successful. + */ +int rte_pmd_ark_set_mtu(struct rte_eth_dev *dev, + uint16_t size, + void *user_data); + #endif /* RTE_PMD_ARK_H */ From patchwork Tue Mar 9 16:08:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ed Czeck X-Patchwork-Id: 88757 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E11C7A0567; Tue, 9 Mar 2021 17:09:04 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C84AE22A4EE; Tue, 9 Mar 2021 17:08:35 +0100 (CET) Received: from mail-qv1-f51.google.com (mail-qv1-f51.google.com [209.85.219.51]) by mails.dpdk.org (Postfix) with ESMTP id 0D7AC22A4B3 for ; Tue, 9 Mar 2021 17:08:32 +0100 (CET) Received: by mail-qv1-f51.google.com with SMTP id r5so6620344qvv.9 for ; Tue, 09 Mar 2021 08:08:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nHdfdiNHzOGxPp5Z2Nu+d1y+G9NXAnbkGv7PIuaaYQI=; b=T5QpLZWLMs6HHxEc/kyp44YrQBPi3RX2dG4naDbhY7UJUR/hGa2ih92Uw/ZD90JdTv zqcE3vzZOpo3HBZA3km4tuQ1Zg5nBu73Kzz/xSZGM1KTgNwF8dWA1DhQG2RLPToZFYMS IZ0qzSYghjL++qfdz2ZXsMw840QiyN6tP16BSOD2WFFCq788cs0Ik6qgboA7r4Tu2Tca X70/p8tQ8M/+REHDH2HpV8k4xX1Z6oY0oR67XmfOeaMmjWSS23oNMn/Es2OcTyZlz6Wk nc+Tv038kyK/Cre0sVHd8vQW0lS6D5YyQQrTtei/mt8Rb/xLtCOKYEP8Dvh8CGmDSrKa uBPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nHdfdiNHzOGxPp5Z2Nu+d1y+G9NXAnbkGv7PIuaaYQI=; b=K1JQqloRuimWfSxmny26lSerx2gZSbSXN53P0ZuYiniv9r5/7z6im1CwUDPmY+ng3m w+5ZH79WbqpICoca7wLyxMX3UvgB0I7TKfFZR0CZYxK54iBGctoxkCRhS3QHl/1p+aLm hVJ2ha2bVFg+TXMc2VvFKcWkULjWvO5+f8p146zdOMUD31Wz5WYrJ9yT42qDHebtXvzM guLjQI1FCWtEakR3TkApjXLnvRQmSLdkchuLxfY3QI3L+Q9hoDPyrEUCYpSXS7bN0AJ3 SzleSF/D7MmLnwpvUpY9OaZ/zg8cYWnsC4M/RminfaelSpWLS20VjzIu9DbyD5C4t/sp ZKjQ== X-Gm-Message-State: AOAM53077a7CpyVTLjApf0OVH9t5sCFfCEYRHTpi5BGmPvJF6UsWxOnz 7Ve9+K1e+Txk0cJxFTOjNZrdsZGOQYgPbA== X-Google-Smtp-Source: ABdhPJwkT+CSC0isXUsYsLT/lPgrf1WVeZJMApC+xB9hjHO0wREZPltBYKq3FuvNHYCiixP+dPiuMg== X-Received: by 2002:a05:6214:f69:: with SMTP id iy9mr26309396qvb.15.1615306110837; Tue, 09 Mar 2021 08:08:30 -0800 (PST) Received: from z390.czeck.local (pool-72-74-133-40.bstnma.fios.verizon.net. [72.74.133.40]) by smtp.gmail.com with ESMTPSA id j24sm10376407qka.67.2021.03.09.08.08.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Mar 2021 08:08:30 -0800 (PST) From: Ed Czeck To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, john.miller@atomicrules.com Date: Tue, 9 Mar 2021 11:08:17 -0500 Message-Id: <20210309160818.3553-5-ed.czeck@atomicrules.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210309160818.3553-1-ed.czeck@atomicrules.com> References: <20210304165637.24658-1-ed.czeck@atomicrules.com> <20210309160818.3553-1-ed.czeck@atomicrules.com> Subject: [dpdk-dev] [PATCH v4 5/6] net/ark: generalize meta data between FPGA and PMD 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 Sender: "dev" In this commit we generalize the movement of user-specified meta data between mbufs and FPGA AXIS tuser fields using user-defined hook functions. - Previous use of PMD dynfields are removed - Hook function added to ark_user_ext - Add hook function calls in Rx and Tx paths - Update guide with example of hook function use - Add release notes Signed-off-by: Ed Czeck --- v3: - split function rename to separate commit v4: - reorder patches renaming before adding - --- doc/guides/nics/ark.rst | 139 ++++++++++++++++++++++- doc/guides/rel_notes/release_21_05.rst | 11 ++ drivers/net/ark/ark_ethdev.c | 58 +--------- drivers/net/ark/ark_ethdev_rx.c | 27 +++-- drivers/net/ark/ark_ethdev_rx.h | 3 - drivers/net/ark/ark_ethdev_tx.c | 23 ++-- drivers/net/ark/ark_global.h | 20 ++++ drivers/net/ark/ark_udm.h | 5 +- drivers/net/ark/rte_pmd_ark.h | 151 +++++++------------------ drivers/net/ark/version.map | 7 -- 10 files changed, 249 insertions(+), 195 deletions(-) diff --git a/doc/guides/nics/ark.rst b/doc/guides/nics/ark.rst index dcccfee26..bcc3babd5 100644 --- a/doc/guides/nics/ark.rst +++ b/doc/guides/nics/ark.rst @@ -1,5 +1,5 @@ .. SPDX-License-Identifier: BSD-3-Clause - Copyright (c) 2015-2017 Atomic Rules LLC + Copyright (c) 2015-2021 Atomic Rules LLC All rights reserved. ARK Poll Mode Driver @@ -130,6 +130,141 @@ Configuration Information be offloaded or remain in host software. +Dynamic PMD Extension +--------------------- + +Dynamic PMD extensions allow users to customize net/ark functionality +using their own code. Arkville RTL and this PMD support high-throughput data +movement, and these extensions allow PMD support for users' FPGA +features. +Dynamic PMD extensions operate by having users supply a shared object +file which is loaded by Arkville PMD during initialization. The +object file contains extension (or hook) functions that are registered +and then called during PMD operations. + +The allowable set of extension functions are defined and documented in +``rte_pmd_ark.h``, only the initialization function, +``rte_pmd_ark_dev_init()``, is required; all others are optional. The +following sections give a small extension example along with +instructions for compiling and using the extension. + + +Extension Example +^^^^^^^^^^^^^^^^^ + +The following example shows an extension which populates mbuf fields +during RX from user meta data coming from FPGA hardware. + +.. code-block:: c + + #include + #include + #include + #include + + /* Global structure passed to extension/hook functions */ + struct ark_user_extension { + int timestamp_dynfield_offset; + }; + + /* RX tuser field based on user's hardware */ + struct user_rx_meta { + uint64_t timestamp; + uint32_t rss; + } __rte_packed; + + /* Create ark_user_extension object for use in other hook functions */ + void *rte_pmd_ark_dev_init(struct rte_eth_dev * dev, + void * abar, int port_id ) + { + RTE_SET_USED(dev); + RTE_SET_USED(abar); + fprintf(stderr, "Called Arkville user extension for port %u\n", + port_id); + + struct ark_user_extension *xdata = rte_zmalloc("macExtS", + sizeof(struct ark_user_extension), 64); + if (!xdata) + return NULL; + + /* register dynfield for rx timestamp */ + rte_mbuf_dyn_rx_timestamp_register(&xdata->timestamp_dynfield_offset, + NULL); + + fprintf(stderr, "timestamp fields offset in extension is %d\n", + xdata->timestamp_dynfield_offset); + return xdata; + } + + /* uninitialization */ + void rte_pmd_ark_dev_uninit(struct rte_eth_dev * dev, void *user_data) + { + rte_free(user_data); + } + + /* Hook function -- called for each RX packet + * Extract RX timestamp and RSS from meta and place in mbuf + */ + void rte_pmd_ark_rx_user_meta_hook(struct rte_mbuf *mbuf, + const uint32_t *meta, + void *user_data) + { + struct ark_user_extension *xdata = user_data; + struct user_rx_meta *user_rx = (struct user_rx_meta*)meta; + *RTE_MBUF_DYNFIELD(mbuf, xdata->timestamp_dynfield_offset, uint64_t*) = + user_rx->timestamp; + mbuf->hash.rss = user_rx->rss; + } + + +Compiling Extension +^^^^^^^^^^^^^^^^^^^ + +It is recommended to the compile the extension code with +``-Wmissing-prototypes`` flag to insure correct function types. Typical +DPDK options will also be needed. + + +An example command line is give below + +.. code-block:: console + + cc `pkg-config --cflags libdpdk` \ + -O3 -DALLOW_EXPERIMENTAL_API -fPIC -Wall -Wmissing-prototypes -c \ + -o pmd_net_ark_ext.o pmd_net_ark_ext.c + # Linking + cc -o libfx1_100g_ext.so.1 -shared \ + `pkg-config --libs libdpdk` \ + -Wl,--unresolved-symbols=ignore-all \ + -Wl,-soname,libpmd_net_ark_ext.so.1 pmd_net_ark_ext.o + +In a ``Makefile`` this would be + +.. code-block:: Makefile + + CFLAGS += $(shell pkg-config --cflags libdpdk) + CFLAGS += -O3 -DALLOW_EXPERIMENTAL_API -fPIC -Wall -Wmissing-prototypes + # Linking + LDFLAGS += $(shell pkg-config --libs libdpdk) + LDFLAGS += -Wl,--unresolved-symbols=ignore-all -Wl,-soname,libpmd_net_ark_ext.so.1 + +The application must be linked with the ``-export-dynamic`` flags if any +DPDK or application specific code will called from the extension. + + +Enabling Extension +^^^^^^^^^^^^^^^^^^ + +The extensions are enabled in the application through the use of an +environment variable ``ARK_EXT_PATH`` This variable points to the lib +extension file generated above. For example: + +.. code-block:: console + + export ARK_EXT_PATH=$(PWD)/libpmd_net_ark_ext.so.1 + testpmd ... + + Building DPDK ------------- @@ -144,6 +279,8 @@ documentation that comes with DPDK suite `. To build with a non-zero minimum tx packet length, set the above macro in your CFLAGS environment prior to the meson build step. I.e., +.. code-block:: console + export CFLAGS="-DRTE_LIBRTE_ARK_MIN_TX_PKTLEN=60" meson build diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst index 5aa9ed7db..4789bf782 100644 --- a/doc/guides/rel_notes/release_21_05.rst +++ b/doc/guides/rel_notes/release_21_05.rst @@ -55,6 +55,17 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Updated Arkville PMD driver.** + + Updated Arkville net driver with new features and improvements, including: + + * Generalized passing meta data between PMD and FPGA, allowing up to 20 + bytes of user specified information in RX and TX paths. + + * Updated dynamic PMD extensions API using standardized names. + + * Added support for new Atomic Rules PCI device IDs ``0x100f, 0x1010, 0x1017, + 0x1018, 0x1019``. Removed Items ------------- diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 5282534d3..bdebfdba4 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -79,12 +79,6 @@ static int eth_ark_set_mtu(struct rte_eth_dev *dev, uint16_t size); #define ARK_TX_MAX_QUEUE (4096 * 4) #define ARK_TX_MIN_QUEUE (256) -uint64_t ark_timestamp_rx_dynflag; -int ark_timestamp_dynfield_offset = -1; - -int rte_pmd_ark_rx_userdata_dynfield_offset = -1; -int rte_pmd_ark_tx_userdata_dynfield_offset = -1; - static const char * const valid_arguments[] = { ARK_PKTGEN_ARG, ARK_PKTCHKR_ARG, @@ -245,6 +239,12 @@ check_for_ext(struct ark_adapter *ark) (int (*)(struct rte_eth_dev *, uint16_t, void *)) dlsym(ark->d_handle, "rte_pmd_ark_set_mtu"); + ark->user_ext.rx_user_meta_hook = + (rx_user_meta_hook_fn)dlsym(ark->d_handle, + "rte_pmd_ark_rx_user_meta_hook"); + ark->user_ext.tx_user_meta_hook = + (tx_user_meta_hook_fn)dlsym(ark->d_handle, + "rte_pmd_ark_tx_user_meta_hook"); return found; } @@ -257,16 +257,6 @@ eth_ark_dev_init(struct rte_eth_dev *dev) int ret; int port_count = 1; int p; - static const struct rte_mbuf_dynfield ark_tx_userdata_dynfield_desc = { - .name = RTE_PMD_ARK_TX_USERDATA_DYNFIELD_NAME, - .size = sizeof(rte_pmd_ark_tx_userdata_t), - .align = __alignof__(rte_pmd_ark_tx_userdata_t), - }; - static const struct rte_mbuf_dynfield ark_rx_userdata_dynfield_desc = { - .name = RTE_PMD_ARK_RX_USERDATA_DYNFIELD_NAME, - .size = sizeof(rte_pmd_ark_rx_userdata_t), - .align = __alignof__(rte_pmd_ark_rx_userdata_t), - }; ark->eth_dev = dev; @@ -277,30 +267,6 @@ eth_ark_dev_init(struct rte_eth_dev *dev) if (ret) return ret; - /* Extra mbuf fields for user data */ - if (RTE_PMD_ARK_TX_USERDATA_ENABLE) { - rte_pmd_ark_tx_userdata_dynfield_offset = - rte_mbuf_dynfield_register(&ark_tx_userdata_dynfield_desc); - if (rte_pmd_ark_tx_userdata_dynfield_offset < 0) { - ARK_PMD_LOG(ERR, - "Failed to register mbuf field for tx userdata\n"); - return -rte_errno; - } - ARK_PMD_LOG(INFO, "Registered TX-meta dynamic field at %d\n", - rte_pmd_ark_tx_userdata_dynfield_offset); - } - if (RTE_PMD_ARK_RX_USERDATA_ENABLE) { - rte_pmd_ark_rx_userdata_dynfield_offset = - rte_mbuf_dynfield_register(&ark_rx_userdata_dynfield_desc); - if (rte_pmd_ark_rx_userdata_dynfield_offset < 0) { - ARK_PMD_LOG(ERR, - "Failed to register mbuf field for rx userdata\n"); - return -rte_errno; - } - ARK_PMD_LOG(INFO, "Registered RX-meta dynamic field at %d\n", - rte_pmd_ark_rx_userdata_dynfield_offset); - } - pci_dev = RTE_ETH_DEV_TO_PCI(dev); rte_eth_copy_pci_info(dev, pci_dev); dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; @@ -561,18 +527,6 @@ static int eth_ark_dev_configure(struct rte_eth_dev *dev) { struct ark_adapter *ark = dev->data->dev_private; - int ret; - - if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_TIMESTAMP) { - ret = rte_mbuf_dyn_rx_timestamp_register( - &ark_timestamp_dynfield_offset, - &ark_timestamp_rx_dynflag); - if (ret != 0) { - ARK_PMD_LOG(ERR, - "Failed to register Rx timestamp field/flag\n"); - return -rte_errno; - } - } eth_ark_dev_set_link_up(dev); if (ark->user_ext.dev_configure) diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index 21a9af41a..48ea48404 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -39,6 +39,9 @@ struct ark_rx_queue { struct ark_udm_t *udm; struct ark_mpu_t *mpu; + rx_user_meta_hook_fn rx_user_meta_hook; + void *ext_user_data; + uint32_t queue_size; uint32_t queue_mask; @@ -53,8 +56,7 @@ struct ark_rx_queue { uint32_t unused; - /* separate cache line */ - /* second cache line - fields only used in slow path */ + /* next cache line - fields written by device */ RTE_MARKER cacheline1 __rte_cache_min_aligned; volatile uint32_t prod_index; /* step 2 filled by FPGA */ @@ -167,6 +169,8 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, queue->queue_index = queue_idx; queue->queue_size = nb_desc; queue->queue_mask = nb_desc - 1; + queue->rx_user_meta_hook = ark->user_ext.rx_user_meta_hook; + queue->ext_user_data = ark->user_data[dev->data->port_id]; queue->reserve_q = rte_zmalloc_socket("Ark_rx_queue mbuf", @@ -243,8 +247,11 @@ eth_ark_recv_pkts(void *rx_queue, struct ark_rx_queue *queue; register uint32_t cons_index, prod_index; uint16_t nb; + uint16_t i; struct rte_mbuf *mbuf; + struct rte_mbuf **pmbuf; struct ark_rx_meta *meta; + rx_user_meta_hook_fn rx_user_meta_hook; queue = (struct ark_rx_queue *)rx_queue; if (unlikely(queue == 0)) @@ -253,6 +260,8 @@ eth_ark_recv_pkts(void *rx_queue, return 0; prod_index = queue->prod_index; cons_index = queue->cons_index; + if (prod_index == cons_index) + return 0; nb = 0; while (prod_index != cons_index) { @@ -266,13 +275,6 @@ eth_ark_recv_pkts(void *rx_queue, mbuf->pkt_len = meta->pkt_len; mbuf->data_len = meta->pkt_len; - /* set timestamp if enabled at least on one device */ - if (ark_timestamp_rx_dynflag > 0) { - *RTE_MBUF_DYNFIELD(mbuf, ark_timestamp_dynfield_offset, - rte_mbuf_timestamp_t *) = meta->timestamp; - mbuf->ol_flags |= ark_timestamp_rx_dynflag; - } - rte_pmd_ark_mbuf_rx_userdata_set(mbuf, meta->user_data); if (ARK_DEBUG_CORE) { /* debug sanity checks */ if ((meta->pkt_len > (1024 * 16)) || @@ -315,6 +317,13 @@ eth_ark_recv_pkts(void *rx_queue, break; } + rx_user_meta_hook = queue->rx_user_meta_hook; + for (pmbuf = rx_pkts, i = 0; rx_user_meta_hook && i < nb; i++) { + mbuf = *pmbuf++; + meta = RTE_PTR_ADD(mbuf->buf_addr, ARK_RX_META_OFFSET); + rx_user_meta_hook(mbuf, meta->user_meta, queue->ext_user_data); + } + eth_ark_rx_update_cons_index(queue, cons_index); return nb; diff --git a/drivers/net/ark/ark_ethdev_rx.h b/drivers/net/ark/ark_ethdev_rx.h index 33c1f2c95..c8dc340a8 100644 --- a/drivers/net/ark/ark_ethdev_rx.h +++ b/drivers/net/ark/ark_ethdev_rx.h @@ -11,9 +11,6 @@ #include #include -extern uint64_t ark_timestamp_rx_dynflag; -extern int ark_timestamp_dynfield_offset; - int eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, diff --git a/drivers/net/ark/ark_ethdev_tx.c b/drivers/net/ark/ark_ethdev_tx.c index 00e5dbf7c..d6e8345b2 100644 --- a/drivers/net/ark/ark_ethdev_tx.c +++ b/drivers/net/ark/ark_ethdev_tx.c @@ -33,6 +33,9 @@ struct ark_tx_queue { /* Stats HW tracks bytes and packets, need to count send errors */ uint64_t tx_errors; + tx_user_meta_hook_fn tx_user_meta_hook; + void *ext_user_data; + uint32_t queue_size; uint32_t queue_mask; @@ -45,9 +48,7 @@ struct ark_tx_queue { /* The queue Index within the dpdk device structures */ uint16_t queue_index; - uint32_t pad[1]; - - /* second cache line - fields written by device */ + /* next cache line - fields written by device */ RTE_MARKER cacheline1 __rte_cache_min_aligned; volatile int32_t cons_index; /* hw is done, can be freed */ } __rte_cache_aligned; @@ -120,15 +121,17 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { struct ark_tx_queue *queue; struct rte_mbuf *mbuf; - uint32_t user_meta; + uint32_t user_meta[5]; int stat; int32_t prod_index_limit; uint16_t nb; - uint8_t user_len = 1; + uint8_t user_len = 0; const uint32_t min_pkt_len = ARK_MIN_TX_PKTLEN; + tx_user_meta_hook_fn tx_user_meta_hook; queue = (struct ark_tx_queue *)vtxq; + tx_user_meta_hook = queue->tx_user_meta_hook; /* free any packets after the HW is done with them */ free_completed_tx(queue); @@ -163,16 +166,18 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) memset(appended, 0, to_add); } - user_meta = rte_pmd_ark_mbuf_tx_userdata_get(mbuf); + if (tx_user_meta_hook) + tx_user_meta_hook(mbuf, user_meta, &user_len, + queue->ext_user_data); if (unlikely(mbuf->nb_segs != 1)) { stat = eth_ark_tx_jumbo(queue, mbuf, - &user_meta, user_len); + user_meta, user_len); if (unlikely(stat != 0)) break; /* Queue is full */ } else { eth_ark_tx_desc_fill(queue, mbuf, ARK_DDM_SOP | ARK_DDM_EOP, - &user_meta, user_len); + user_meta, user_len); } } @@ -271,6 +276,8 @@ eth_ark_tx_queue_setup(struct rte_eth_dev *dev, queue->phys_qid = qidx; queue->queue_index = queue_idx; dev->data->tx_queues[queue_idx] = queue; + queue->tx_user_meta_hook = ark->user_ext.tx_user_meta_hook; + queue->ext_user_data = ark->user_data[dev->data->port_id]; queue->meta_q = rte_zmalloc_socket("Ark_txqueue meta", diff --git a/drivers/net/ark/ark_global.h b/drivers/net/ark/ark_global.h index 91726ecc2..6f9b3013d 100644 --- a/drivers/net/ark/ark_global.h +++ b/drivers/net/ark/ark_global.h @@ -57,6 +57,23 @@ void *v; \ } name + +/* Extension hooks for extraction and placement of user meta data + * during RX an TX operations. These functions are the bridge + * between the mbuf struct and the tuser fields on the AXIS + * interfaces in the FPGA + */ +/* RX hook populates mbuf fields from user defined *meta up to 20 bytes */ +typedef void (*rx_user_meta_hook_fn)(struct rte_mbuf *mbuf, + const uint32_t *meta, + void *ext_user_data); +/* TX hook poplulate *meta, with up to 20 bytes. meta_cnt + * returns the number of uint32_t words populated, 0 to 5 + */ +typedef void (*tx_user_meta_hook_fn)(const struct rte_mbuf *mbuf, + uint32_t *meta, uint8_t *meta_cnt, + void *ext_user_data); + struct ark_user_ext { void *(*dev_init)(struct rte_eth_dev *, void *abar, int port_id); void (*dev_uninit)(struct rte_eth_dev *, void *); @@ -79,6 +96,9 @@ struct ark_user_ext { void (*mac_addr_set)(struct rte_eth_dev *, struct rte_ether_addr *, void *); int (*set_mtu)(struct rte_eth_dev *, uint16_t, void *); + /* user meta, hook functions */ + rx_user_meta_hook_fn rx_user_meta_hook; + tx_user_meta_hook_fn tx_user_meta_hook; }; struct ark_adapter { diff --git a/drivers/net/ark/ark_udm.h b/drivers/net/ark/ark_udm.h index ea92d4b6e..4e51a5e82 100644 --- a/drivers/net/ark/ark_udm.h +++ b/drivers/net/ark/ark_udm.h @@ -19,9 +19,8 @@ * -- 32 bytes */ struct ark_rx_meta { - uint64_t timestamp; - uint64_t user_data; - uint8_t reserved[14]; + uint32_t user_meta[5]; /* user defined based on fpga code */ + uint8_t reserved[10]; uint16_t pkt_len; } __rte_packed; diff --git a/drivers/net/ark/rte_pmd_ark.h b/drivers/net/ark/rte_pmd_ark.h index 0f24a347d..7c093711f 100644 --- a/drivers/net/ark/rte_pmd_ark.h +++ b/drivers/net/ark/rte_pmd_ark.h @@ -5,9 +5,6 @@ #ifndef RTE_PMD_ARK_H #define RTE_PMD_ARK_H -#include -#include - #include struct rte_eth_dev; struct rte_mbuf; @@ -19,115 +16,6 @@ struct rte_eth_stats; * ARK driver-specific API */ -#ifndef RTE_PMD_ARK_TX_USERDATA_ENABLE -#define RTE_PMD_ARK_TX_USERDATA_ENABLE 0 -#endif - -#ifndef RTE_PMD_ARK_RX_USERDATA_ENABLE -#define RTE_PMD_ARK_RX_USERDATA_ENABLE 0 -#endif - -typedef uint32_t rte_pmd_ark_tx_userdata_t; -typedef uint64_t rte_pmd_ark_rx_userdata_t; - -extern int rte_pmd_ark_tx_userdata_dynfield_offset; -extern int rte_pmd_ark_rx_userdata_dynfield_offset; - -/** mbuf dynamic field for custom Tx ARK data */ -#define RTE_PMD_ARK_TX_USERDATA_DYNFIELD_NAME "rte_net_ark_dynfield_tx_userdata" -/** mbuf dynamic field for custom Rx ARK data */ -#define RTE_PMD_ARK_RX_USERDATA_DYNFIELD_NAME "rte_net_ark_dynfield_rx_userdata" - -/** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * - * Read Tx user data from mbuf. - * - * @param mbuf Structure to read from. - * @return user data - */ -__rte_experimental -static inline rte_pmd_ark_tx_userdata_t -rte_pmd_ark_mbuf_tx_userdata_get(const struct rte_mbuf *mbuf) -{ -#if RTE_PMD_ARK_TX_USERDATA_ENABLE - return *RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_tx_userdata_dynfield_offset, - rte_pmd_ark_tx_userdata_t *); -#else - RTE_SET_USED(mbuf); - return 0; -#endif -} - -/** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * - * Write Tx user data to mbuf. - * - * @param mbuf Structure to write into. - * @param data User data. - */ -__rte_experimental -static inline void -rte_pmd_ark_mbuf_tx_userdata_set(struct rte_mbuf *mbuf, - rte_pmd_ark_tx_userdata_t data) -{ -#if RTE_PMD_ARK_TX_USERDATA_ENABLE - *RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_tx_userdata_dynfield_offset, - rte_pmd_ark_tx_userdata_t *) = data; -#else - RTE_SET_USED(mbuf); - RTE_SET_USED(data); -#endif -} - -/** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * - * Read Rx user data from mbuf. - * - * @param mbuf Structure to read from. - * @return user data - */ -__rte_experimental -static inline rte_pmd_ark_rx_userdata_t -rte_pmd_ark_mbuf_rx_userdata_get(const struct rte_mbuf *mbuf) -{ -#if RTE_PMD_ARK_RX_USERDATA_ENABLE - return *RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_rx_userdata_dynfield_offset, - rte_pmd_ark_rx_userdata_t *); -#else - RTE_SET_USED(mbuf); - return 0; -#endif -} - -/** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * - * Write Rx user data to mbuf. - * - * @param mbuf Structure to write into. - * @param data User data. - */ -__rte_experimental -static inline void -rte_pmd_ark_mbuf_rx_userdata_set(struct rte_mbuf *mbuf, - rte_pmd_ark_rx_userdata_t data) -{ -#if RTE_PMD_ARK_RX_USERDATA_ENABLE - *RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_rx_userdata_dynfield_offset, - rte_pmd_ark_rx_userdata_t *) = data; -#else - RTE_SET_USED(mbuf); - RTE_SET_USED(data); -#endif -} - /* The following section lists function prototypes for Arkville's * dynamic PMD extension. User's who create an extension * must include this file and define the necessary and desired @@ -365,4 +253,43 @@ int rte_pmd_ark_set_mtu(struct rte_eth_dev *dev, uint16_t size, void *user_data); +/** + * Extension prototype, optional implementation. + * Called during rte_eth_rx_burst() for each packet. This extension + * function allows the transfer of meta data from the user's FPGA to + * mbuf fields. + * + * @param mbuf + * The newly received mbuf + * @param meta + * The meta data from the user, up to 20 bytes. The + * underlying data in the PMD is of type uint32_t meta[5]; + * @param user_data + * user argument from dev_init() call. + */ +void rte_pmd_ark_rx_user_meta_hook(struct rte_mbuf *mbuf, + const uint32_t *meta, + void *user_data); + +/** + * Extension prototype, optional implementation. + * Called during rte_eth_tx_burst() for each packet. This extension + * function allows the transfer of data from the mbuf to the user's + * FPGA. Up to 20 bytes (5 32-bit words) are transferable + * + * @param mbuf + * The mbuf about to be transmitted. + * @param meta + * The meta data to be populate by this call. The + * underlying in the PMD is of type uint32_t meta[5]; + * @param meta_cnt + * The count in 32-bit words of the meta data populated, 0 to 5. + * @param user_data + * user argument from dev_init() call. + */ +void rte_pmd_ark_tx_user_meta_hook(const struct rte_mbuf *mbuf, + uint32_t *meta, + uint8_t *meta_cnt, + void *user_data); + #endif /* RTE_PMD_ARK_H */ diff --git a/drivers/net/ark/version.map b/drivers/net/ark/version.map index 954bea679..4a76d1d52 100644 --- a/drivers/net/ark/version.map +++ b/drivers/net/ark/version.map @@ -1,10 +1,3 @@ DPDK_21 { local: *; }; - -EXPERIMENTAL { - global: - - rte_pmd_ark_tx_userdata_dynfield_offset; - rte_pmd_ark_rx_userdata_dynfield_offset; -}; From patchwork Tue Mar 9 16:08:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ed Czeck X-Patchwork-Id: 88758 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5D537A0567; Tue, 9 Mar 2021 17:09:14 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1012E22A4D7; Tue, 9 Mar 2021 17:08:37 +0100 (CET) Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) by mails.dpdk.org (Postfix) with ESMTP id 61A004068A for ; Tue, 9 Mar 2021 17:08:32 +0100 (CET) Received: by mail-qv1-f43.google.com with SMTP id 2so6655227qvd.0 for ; Tue, 09 Mar 2021 08:08:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SZeMSIp/WdQNbNjA2/O9hwQIUMRv3Ot8pKRwPk06kWs=; b=hl1gq8J0qO4xxB/WT9LTZ3janIeqwPClQojoRLlgRiu2ZNlKoCgqnEXWBiynSLYxRo guec1iVphtBI5+PjY8JjVerE8wnvHstz+JWIK82TQZuucE1Nb4IhCJ3afhaoW4Hh4dpS VXfzxh0DUIHWEiJTqYy2Lajy4px0nQ7jfcPkOrOscksXfOoOaIPbOHK+ZP56t3zOj32v 0PwidoWIBzp1tKSsdxE7eZ83kWaEgZWOTdHu2jO48lJLcF1TPcieUYVRd1is9pk0PeRa HRkcG2zho2JYKRXTTopxGUaU6XnOTQz5C7b1JdFR374qIHG6Vj/fNEgUvorE3iC7Glf7 5fow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=SZeMSIp/WdQNbNjA2/O9hwQIUMRv3Ot8pKRwPk06kWs=; b=YJcJ4r7m2B/doSuQeYZHGF7hGvWrJCaafK872oOJ0YKMnD12Cx4/pNhArQOP4NoIOS A11UdKcxfg+zZsXOv0YxrOtjkKwkYij7HZMyElkQu2FhMNa5Gqkr0s3H+4UAS/TlU4s0 paTUE6ao9F2p8QoykxieX0ch+Zn99nhNeY6Z44i3Ih11FrCjtx+7yQmmPLuujQfqMirt OlGa2rDHKx1aWQDc9VNMUX6JWaicW1aQIQN/E/jLj/vDic3mhPb+JPpt9SqxEdrqBz/3 qw80dlRDSM1TJIsFMx6TqtdZsvWSQah+zJcuVl20E9D6nl/NO0sgo4jhgL7OiSYGQjjL 6YBw== X-Gm-Message-State: AOAM532EU4SMK6cCUuWGQB9OWc/nD/Kwxk3x3OyfVEvNk9BvgA+D3HCO hc02Pj9vSxn9GkEN1zuaZsmNF3I6C+4AYg== X-Google-Smtp-Source: ABdhPJy8vGnfJnOX4Kse3nl2DfZ0Er6tjeXIO4/8ll3maa1cfqHrsdNaR301QmuD2eNKR4HrnxN+ow== X-Received: by 2002:a0c:aa44:: with SMTP id e4mr26070842qvb.49.1615306111611; Tue, 09 Mar 2021 08:08:31 -0800 (PST) Received: from z390.czeck.local (pool-72-74-133-40.bstnma.fios.verizon.net. [72.74.133.40]) by smtp.gmail.com with ESMTPSA id j24sm10376407qka.67.2021.03.09.08.08.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Mar 2021 08:08:31 -0800 (PST) From: Ed Czeck To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, john.miller@atomicrules.com Date: Tue, 9 Mar 2021 11:08:18 -0500 Message-Id: <20210309160818.3553-6-ed.czeck@atomicrules.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210309160818.3553-1-ed.czeck@atomicrules.com> References: <20210304165637.24658-1-ed.czeck@atomicrules.com> <20210309160818.3553-1-ed.czeck@atomicrules.com> Subject: [dpdk-dev] [PATCH v4 6/6] net/ark: localize internal packet generator code 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 Sender: "dev" remove unnecessary includes no functional changes Signed-off-by: Ed Czeck --- drivers/net/ark/ark_ethdev.c | 17 ++--------------- drivers/net/ark/ark_pktchkr.c | 4 ---- drivers/net/ark/ark_pktgen.c | 20 ++++++++++++++------ drivers/net/ark/ark_pktgen.h | 1 + 4 files changed, 17 insertions(+), 25 deletions(-) diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index bdebfdba4..9a5835d70 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -535,20 +535,6 @@ eth_ark_dev_configure(struct rte_eth_dev *dev) return 0; } -static void * -delay_pg_start(void *arg) -{ - struct ark_adapter *ark = (struct ark_adapter *)arg; - - /* This function is used exclusively for regression testing, We - * perform a blind sleep here to ensure that the external test - * application has time to setup the test before we generate packets - */ - usleep(100000); - ark_pktgen_run(ark->pg); - return NULL; -} - static int eth_ark_dev_start(struct rte_eth_dev *dev) { @@ -583,7 +569,8 @@ eth_ark_dev_start(struct rte_eth_dev *dev) /* Delay packet generatpr start allow the hardware to be ready * This is only used for sanity checking with internal generator */ - if (pthread_create(&thread, NULL, delay_pg_start, ark)) { + if (pthread_create(&thread, NULL, + ark_pktgen_delay_start, ark->pg)) { ARK_PMD_LOG(ERR, "Could not create pktgen " "starter thread\n"); return -1; diff --git a/drivers/net/ark/ark_pktchkr.c b/drivers/net/ark/ark_pktchkr.c index 0f2d31e5b..84bb567a4 100644 --- a/drivers/net/ark/ark_pktchkr.c +++ b/drivers/net/ark/ark_pktchkr.c @@ -2,13 +2,9 @@ * Copyright (c) 2015-2018 Atomic Rules LLC */ -#include -#include -#include #include #include -#include #include #include "ark_pktchkr.h" diff --git a/drivers/net/ark/ark_pktgen.c b/drivers/net/ark/ark_pktgen.c index ac4322a35..28a44f754 100644 --- a/drivers/net/ark/ark_pktgen.c +++ b/drivers/net/ark/ark_pktgen.c @@ -2,15 +2,9 @@ * Copyright (c) 2015-2018 Atomic Rules LLC */ -#include -#include -#include #include #include -#include - -#include #include #include "ark_pktgen.h" @@ -470,3 +464,17 @@ ark_pktgen_setup(ark_pkt_gen_t handle) ark_pktgen_run(handle); } } + +void * +ark_pktgen_delay_start(void *arg) +{ + struct ark_pkt_gen_inst *inst = (struct ark_pkt_gen_inst *)arg; + + /* This function is used exclusively for regression testing, We + * perform a blind sleep here to ensure that the external test + * application has time to setup the test before we generate packets + */ + usleep(100000); + ark_pktgen_run(inst); + return NULL; +} diff --git a/drivers/net/ark/ark_pktgen.h b/drivers/net/ark/ark_pktgen.h index c61dfee6d..7147fe1bd 100644 --- a/drivers/net/ark/ark_pktgen.h +++ b/drivers/net/ark/ark_pktgen.h @@ -75,5 +75,6 @@ void ark_pktgen_set_hdr_dW(ark_pkt_gen_t handle, uint32_t *hdr); void ark_pktgen_set_start_offset(ark_pkt_gen_t handle, uint32_t x); void ark_pktgen_parse(char *argv); void ark_pktgen_setup(ark_pkt_gen_t handle); +void *ark_pktgen_delay_start(void *arg); #endif