From patchwork Sat Sep 8 20:31:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 44458 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 373677CDE; Sat, 8 Sep 2018 22:32:13 +0200 (CEST) Received: from NAM04-BN3-obe.outbound.protection.outlook.com (mail-eopbgr680053.outbound.protection.outlook.com [40.107.68.53]) by dpdk.org (Postfix) with ESMTP id ADFC34CE4 for ; Sat, 8 Sep 2018 22:31:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1rUtDqO1TYqAOAOegNkNBxAUuPdOm6+gLIaJnIwC+L8=; b=gFJ88Zcc/6Lxa2Y5tKSpPOF8ms2LpI5+geAygT55E1ndzjU/TJZthbhBOL1noXUL6tBS4g0iIJfnl/EH1aBcBZARhLB4eKF4mjpZnYMctHFDuQofRZX/piW26CAusfiXIJkC1ywftsiwrDmYWiBRRm8wdJ+VLOm0M6+ut50qVOw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.1.5) by DM6PR07MB5372.namprd07.prod.outlook.com (2603:10b6:5:44::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1101.18; Sat, 8 Sep 2018 20:31:56 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Shahed Shaikh , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com Date: Sat, 8 Sep 2018 13:31:04 -0700 Message-Id: <1536438666-22184-16-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1536438666-22184-1-git-send-email-rasesh.mody@cavium.com> References: <1536438666-22184-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 X-Originating-IP: [198.186.1.5] X-ClientProxiedBy: BYAPR02CA0031.namprd02.prod.outlook.com (2603:10b6:a02:ee::44) To DM6PR07MB5372.namprd07.prod.outlook.com (2603:10b6:5:44::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9bee7515-80c6-40db-ab60-08d615ca1ee6 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:DM6PR07MB5372; X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB5372; 3:9cxQgswmrlCnw0XLUdyfcPndlg9EZfCIfEUodsx01hJgBbc4jTgCit08K6TEMsx4Vjt40hVAApHiAhcymFdqytgzXC843s1RiiUW1GJnJCw7jHZQuiI1ImuZ2hY9Hs6QjFjJNNuaicgChfyuIqwfh+R4oRtY3I5+2N7k0tazBAZ+ieygUm8nADOVrzXbK5llcw4ZfRlqJJO71+LFO4aoJL5YTO0zlxhkIM42QCom0KmanZ1242lNp1Bkla6kMDRR; 25:J4Iz7LbCBfFA2f3r4ZUfLvML47mXx4An0b0jPFk6lMZnxv+7c4jU7TmvwfmeEtb/nze7nvUqb+OojkfqYY+2IqG4AYIPMf3S9e66jicELOwMPdgpTYwQkNlryBblDAVK+Y8eyhih9Da3oGtumbSdJqcitjDlopO156gs9Pzl+f/noZKPU2rjnvskx5/qcMJ4m/anG/N5oNszJJZ8CNFwxCIzXaTfBR0V3wLK/U2TWFvpl8cUu85p4aqU4pxAbwoBHK2gd2L8FQgfY2ONPOQG6PSpvjZ2NreOErFoRIF/GXEP1lm+8wUzymglE78RruEBObq0oGq9O4UuOZCamNxs5g==; 31:Xcp2fRWOl5xE2ONN63G0av5YFalOXYUAgeeNY97S9rzktRUXai/xBVV091YA5pmFSP4qCENEejf5OUkHtoHeOVvpT5twLxEZWiJdQwHKeNVCEmIzAop6b1EACFa9AFbwb8Cayap3ffUwCeP212LMqoAEwEao9L++1REc3iAdN0BaMHdL+QVsA91yVdcPiysz77IcQy/kitldt9YXtzGjjtii3nril3DI0zADhTRs6zI= X-MS-TrafficTypeDiagnostic: DM6PR07MB5372: X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB5372; 20:3hi3eCBCWhJmQeuFwlQXK8nelZTmQijYyYmU21xzB1jRnX2RbrJZnhjXG7yQXMZxNsY2AFLgjJSa3Zujfl94QhbmBAcEFZPNo+Wn+w2MkfZQEnVN6wRmu/RODKBbLLowE6Kb5SVMLn+oishsv0DtiEE9XxYa7phSWEmltU7rPnkIOXg9i+gwlV57U1UITjxkTc7DMJdntYYUhspq6xLFl8vV+B9qLW5acL8860BfebFHA1rt+QjifDhcifGtzZiM8Aa1D0WpQAu6LeFJQ7OALAROby2tGU0WN4H85/cu95K5eiUy3/nHCWqLhfSK/3uGIT1wkebxm6NaVlQBzg+mx1U8Jcj7b40DQBfRl/Je93WU7Z4s4zsIVETrspQ4mdQgdyLuseVB4Ujq+GHj+bXqgGcRNsSypDZyyh6BtW3/90CTbAMYx7zsnbbwPO3wS0+qUF62OCQfxF9boXtfspZsxKTGBSGCLnLf/7mlCZlcMwIBwXT7/bunjDxPaffeYhBU; 4:39Hh6JvxADwSnnO1J167JrTSULtZTeckqznwi3oRcPGZvNV5Ci4kwvUuKT0FQUx69Mhp8/znxmz00BKpFDeKzcmuM18c+S66V1oi7V+wqmQBdr6xduD8HMOIIrux9fDuhctf84/nOXENALd8bagO8Z2y79KmMbY6aC8LYLyCgS05NgxRm+W7uO/ZcUmeP3kIMisZKzAVPoG2DkP+fzGswS5yLtjpXuipUIykfGw9myG52+p32Bk8J4gh3hEOI11vdoOnk81Y7I6d9sz/yVj3NC1Wjq4r3sWDD524wLE7OhTM+MEQjIZ6tDKOGRrSkg+W X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(131327999870524); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(823301075)(3002001)(10201501046)(3231311)(944501410)(52105095)(93006095)(93001095)(149027)(150027)(6041310)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699050); SRVR:DM6PR07MB5372; BCL:0; PCL:0; RULEID:; SRVR:DM6PR07MB5372; X-Forefront-PRVS: 07891BF289 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(366004)(136003)(346002)(376002)(39860400002)(199004)(189003)(4720700003)(97736004)(2351001)(106356001)(105586002)(72206003)(66066001)(47776003)(4326008)(50466002)(48376002)(25786009)(305945005)(7736002)(2361001)(8676002)(478600001)(316002)(52116002)(69596002)(107886003)(186003)(575784001)(50226002)(44832011)(16526019)(486006)(21086003)(2906002)(55016002)(26005)(8936002)(476003)(956004)(81156014)(81166006)(86362001)(5660300001)(6666003)(36756003)(16586007)(11346002)(446003)(2616005)(76176011)(3846002)(6116002)(6916009)(68736007)(386003)(51416003)(53936002)(7696005); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR07MB5372; H:cavium.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM6PR07MB5372; 23:gfdXSepcYW3wM1EAvbbu/lfgXFDeCTSBhc6NhPhOX?= D9HY0f//Htr/Q9sYCfGzNErHRjJd+DCq1WweapEIedpfJvcFhX19iHD5Nle7+m7O0dwGrs3WBr7MSIPuY8LaCE3PhHKJ3q340eG2Pd85mUGDlrukjQt29aatxX3TyzytyFs9wX8oAk1VQ/CEbINLK5bdtXF0JZWdOSF0ajIWZuKh+fpAcAVBpQZK1hbGAT9mT7qtJS9tsPWLgoE/6KoyzJyVBCzIBTajNgQatA+BisIjSa8k16NyddqENP4IuvKWlUO/KY3U59C1VQg8Ap156qPrwLsbDNOJyT1gDgx8DnERm0kZGHmyCnVWYJ2Ee4bAWdFIc5v+hL0rMe07k1jmdlJPnqK93Q6ycvlc4cvrSavcV1ycFW8AKI1hBcOmZa3xAYoOBIdGM7g0V0WWsDUCbrMYdCcJ6OAPwJjBYus8a+LDR1iV0f4otf+pMLEKzPD6qEDtla2GgX5Ekl+3FOPfz97rvUlVpIFKrVr2yd8Uk8kL6OUNl/RQvuIPiEyDJeclnhCekSTYlrpMACkHzWtOdk1E+VnInAMicuvvMi0h5JqyG4xx2+m9dLxALGUMHUxZXRqDgxoxWCBEhi7ZkxeiF4YNytmlQt62uPVh20h7xy5Ub5NUkq6IQSpMSMrIHhvIAVVNt4VgDsUc3YxM3zmmKR2IPGmZJZmlvRMLEOn5uQgGbzZKkz5qMegrbYAlr319wdS1WB+KdaxU3mmsQxiO4Z6FDbuG12d6Q3PMTJ7Q0BXbqTwag2RgYFn2LNBnd/dZvWZLzZ7agcPR7LLXAwxOcNS+E9BYi5tjJuRf4qDLRmCRpRhvP4qGjKxicplxpfYFWo49rS9zAd7e3CwjS8266B3QaePGElVp0L4ph4W7nBFyPh12wN51XkY3MYvjOVYosrQPlyd6VqFaq2AiXottYGWNX3iIH3+urRqc/D3yuJLHW519szfOstm7AyCdmFiadQN/5YddO/l5t/0nnv6i7aMkTmaM9X/QWYy974LEmerCsj1fOrMrv+rz9a+VgcuFQT1KZFuYVxysg2Ntb63SZEBM9vYL3wEj6Y50deXwvthMQGxArKBFGtdXUsf0yea8rPshmMDlvY6hR2R2kfUhnZR/W9WVex2SL4N776avWs1fo+xiqPXQoNM7Y10LFjkpvsRvmEUFt4L5RYRH5ClFcrc36oi8OIVEKPt0u4nqcuQZjoghSD4gbiDn92JzeX+93HRCoeWr5EofogVDlivhq36n7Yc9Ii0K+OOrjmuTrmzj30ubArYPzDhWSualwmqFi8xUjpiQaIt3mXN4/CVXNMjZYl+SEKf9AZG+if0z00hKg== X-Microsoft-Antispam-Message-Info: D/nqK8pubs+DXvQhkqHAUEL6rgkGf/gT7c6XRh7gcs8+Eji4osGOFqmV4UGPw9d16QAg8iqO1Rck40/aIm0p7OOCqZecNN1ff06PfbVXr06AB1UeWenFsNtFK6GjfSBQ4EiwO/jQzOfGSNeK8cMcz0gUwA4so4RgcyFWY2aXO1BZNqJ4QzSsGGUamB7wpy5Qmz9Yw1dx9A/p+f1dLzuVawh+K9y7OQTRsLco57XdJUbhnzRiu9EswWJm5CMTjEhhqBc1bpHWec7IWBhAfSSUi5fIMn+UK50Lz+p5LlfW/liDaUpxcHLuMVokC8zwG5WHH56gbJCc+N98TMHDt1wteQyhH7pZvL0iR0wuU5w/YzA= X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB5372; 6:sLakpzLQIFtbk+CPeUmkDKj+vwKM1usLWjXf3xnzXq8wU95aGBpx/0xIv1Wcf208B+jonkkeqq5Co1cjytaX8u8b3JLqG2VkNaN10yNgtbt8BWEmmMgps9+KFl5oEumZpmfaYruM8I19KcrefeaOQkwsIPufDPfFiCM20AhGiClm7IG5m1GJ2EY5EWf9ybgnma7iOdpnapB/avf/agyM+BzSL4yrbG88a7x6EozJ8jHEpq4MelaZm0X0JK73Dy1smLzu9LC64SMnZfbB+tAB/HRT3qWiQB1yozKDd3PqJox6qS+J7cIN+2/Xa9JKGI/dSXI8AmdALn2KCcjjrvHJkZ0n+WIKP9Q7aLeNkLbUIBVJKDhB/BE/f2rWqiTxSQpQ9y31+SjNVUtC2b6exi7YOJkXFZ4Qf3PMY8F69C1xUe4bnpqjfkex5/6Om4SJD0h6DYG1TijiV9ClKtIV2PwVUA==; 5:TpPhpkIg/NuDvZ+WaOGcllg9KZb/z6kcQ+uqULtQRSqJ2jfICspJ/Fzx1Vu1GYxdz78NfncgH1aigWrhFYK0JRLFZLJDDr9vDU1C/dDrsktfAtkJYuEzhS3BAgltZFMeeNltcMo3oe/LuNsn2nns1WfI/usTHoB2mV2xip7A3Ck=; 7:qBlu6NPFM9dJUD4oaJoeJ7b6ZNbd00iIoPqpw2sBzXl/JQjK0neTNQXrTU8jXlVIKHl0mfTZFVNuE9GUZLb+J9WDMKdytF8hq1bQWVgQsSlDz+kG3uss/E6+jUEidYMxJJLscPREufPoizka3lMYD9jwndFdzKNiGKDjPFs6enZpyNlAVNJyv/WJPL3wwrYX4+w0N2iJD1IwEHj5XZh4c2mWcGEl2NjiUZNHcgLs+ojDL886YNWGYKzkUl/E1sWS SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2018 20:31:56.2389 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9bee7515-80c6-40db-ab60-08d615ca1ee6 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR07MB5372 Subject: [dpdk-dev] [PATCH 15/17] net/qede: add support for Rx descriptor status X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Shahed Shaikh This patch implement eth_dev_ops->rx_descriptor_status callback. Walk through receive completion ring to calculate receive descriptors used by firmware and then provide the status of offset accordingly. Signed-off-by: Shahed Shaikh --- drivers/net/qede/qede_ethdev.c | 2 + drivers/net/qede/qede_rxtx.c | 81 ++++++++++++++++++++++++++++++++++++++++ drivers/net/qede/qede_rxtx.h | 2 + 3 files changed, 85 insertions(+) diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 259eb45..322400c 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -2300,6 +2300,7 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) .dev_infos_get = qede_dev_info_get, .rx_queue_setup = qede_rx_queue_setup, .rx_queue_release = qede_rx_queue_release, + .rx_descriptor_status = qede_rx_descriptor_status, .tx_queue_setup = qede_tx_queue_setup, .tx_queue_release = qede_tx_queue_release, .dev_start = qede_dev_start, @@ -2341,6 +2342,7 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) .dev_infos_get = qede_dev_info_get, .rx_queue_setup = qede_rx_queue_setup, .rx_queue_release = qede_rx_queue_release, + .rx_descriptor_status = qede_rx_descriptor_status, .tx_queue_setup = qede_tx_queue_setup, .tx_queue_release = qede_tx_queue_release, .dev_start = qede_dev_start, diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index 675c0a0..8a4772f 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -2151,3 +2151,84 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) { return 0; } + + +/* this function does a fake walk through over completion queue + * to calculate number of BDs used by HW. + * At the end, it restores the state of completion queue. + */ +static uint16_t +qede_parse_fp_cqe(struct qede_rx_queue *rxq) +{ + uint16_t hw_comp_cons, sw_comp_cons, bd_count = 0; + union eth_rx_cqe *cqe, *orig_cqe = NULL; + + hw_comp_cons = rte_le_to_cpu_16(*rxq->hw_cons_ptr); + sw_comp_cons = ecore_chain_get_cons_idx(&rxq->rx_comp_ring); + + if (hw_comp_cons == sw_comp_cons) + return 0; + + /* Get the CQE from the completion ring */ + cqe = (union eth_rx_cqe *)ecore_chain_consume(&rxq->rx_comp_ring); + orig_cqe = cqe; + + while (sw_comp_cons != hw_comp_cons) { + switch (cqe->fast_path_regular.type) { + case ETH_RX_CQE_TYPE_REGULAR: + bd_count += cqe->fast_path_regular.bd_num; + break; + case ETH_RX_CQE_TYPE_TPA_END: + bd_count += cqe->fast_path_tpa_end.num_of_bds; + break; + default: + break; + } + + cqe = + (union eth_rx_cqe *)ecore_chain_consume(&rxq->rx_comp_ring); + sw_comp_cons = ecore_chain_get_cons_idx(&rxq->rx_comp_ring); + } + + /* revert comp_ring to original state */ + ecore_chain_set_cons(&rxq->rx_comp_ring, sw_comp_cons, orig_cqe); + + return bd_count; +} + +int +qede_rx_descriptor_status(void *p_rxq, uint16_t offset) +{ + uint16_t hw_bd_cons, sw_bd_cons, sw_bd_prod; + uint16_t produced, consumed; + struct qede_rx_queue *rxq = p_rxq; + + if (offset > rxq->nb_rx_desc) + return -EINVAL; + + sw_bd_cons = ecore_chain_get_cons_idx(&rxq->rx_bd_ring); + sw_bd_prod = ecore_chain_get_prod_idx(&rxq->rx_bd_ring); + + /* find BDs used by HW from completion queue elements */ + hw_bd_cons = sw_bd_cons + qede_parse_fp_cqe(rxq); + + if (hw_bd_cons < sw_bd_cons) + /* wraparound case */ + consumed = (0xffff - sw_bd_cons) + hw_bd_cons; + else + consumed = hw_bd_cons - sw_bd_cons; + + if (offset <= consumed) + return RTE_ETH_RX_DESC_DONE; + + if (sw_bd_prod < sw_bd_cons) + /* wraparound case */ + produced = (0xffff - sw_bd_cons) + sw_bd_prod; + else + produced = sw_bd_prod - sw_bd_cons; + + if (offset <= produced) + return RTE_ETH_RX_DESC_AVAIL; + + return RTE_ETH_RX_DESC_UNAVAIL; +} diff --git a/drivers/net/qede/qede_rxtx.h b/drivers/net/qede/qede_rxtx.h index 8bd8d1c..d3a41e9 100644 --- a/drivers/net/qede/qede_rxtx.h +++ b/drivers/net/qede/qede_rxtx.h @@ -276,6 +276,8 @@ uint16_t qede_rxtx_pkts_dummy(void *p_rxq, void qede_stop_queues(struct rte_eth_dev *eth_dev); int qede_calc_rx_buf_size(struct rte_eth_dev *dev, uint16_t mbufsz, uint16_t max_frame_size); +int +qede_rx_descriptor_status(void *rxq, uint16_t offset); /* Fastpath resource alloc/dealloc helpers */ int qede_alloc_fp_resc(struct qede_dev *qdev);