From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0078.outbound.protection.outlook.com [104.47.40.78]) by dpdk.org (Postfix) with ESMTP id C59F19A06 for ; Fri, 26 May 2017 08:51:50 +0200 (CEST) Received: from BN6PR03CA0028.namprd03.prod.outlook.com (2603:10b6:404:10c::14) by BL2PR03MB164.namprd03.prod.outlook.com (2a01:111:e400:c0d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9; Fri, 26 May 2017 06:51:49 +0000 Received: from BL2FFO11FD006.protection.gbl (2a01:111:f400:7c09::165) by BN6PR03CA0028.outlook.office365.com (2603:10b6:404:10c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9 via Frontend Transport; Fri, 26 May 2017 06:51:49 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD006.mail.protection.outlook.com (10.173.161.2) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Fri, 26 May 2017 06:51:48 +0000 Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.134.28]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id v4Q6pQMa014894; Thu, 25 May 2017 23:51:46 -0700 From: Hemant Agrawal To: CC: , Date: Fri, 26 May 2017 12:21:16 +0530 Message-ID: <1495781485-2236-12-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1495781485-2236-1-git-send-email-hemant.agrawal@nxp.com> References: <1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com> <1495781485-2236-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131402551086298405; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39410400002)(39450400003)(39840400002)(39850400002)(39860400002)(39380400002)(39400400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(9170700003)(85426001)(5003940100001)(81166006)(8936002)(8656002)(54906002)(53936002)(105606002)(50466002)(2950100002)(6666003)(6916009)(498600001)(69596002)(4326008)(356003)(36756003)(48376002)(110136004)(33646002)(305945005)(106466001)(5660300001)(86362001)(50986999)(76176999)(81156014)(2906002)(8676002)(77096006)(47776003)(50226002)(2351001)(189998001)(38730400002)(104016004); DIR:OUT; SFP:1101; SCL:1; SRVR:BL2PR03MB164; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD006; 1:itIGrdI+BBsTZaU0gcOgh++PXy2e9fYB33SvIZRJ709fi6V0JXSUfq53C+towyav4bdGo0plmGj9hzjSwh8iVe6rguKTytUJpl0WwLJSXWgVrCK7TyiGp8FrRH72mcaWnlKeOuJvVXyC2ZbFo507kyZiL1HiVblqx5lUfbrHOQXFVVp71pFkx6VZyuA4sLj5GgSA0yTFTvHsiGm71aZ5Qd9l9T0EI9BepyHouVWlvbC5I1CHxC/GWbibqq/NY6vH713XfYDuaUzieksGodPLo3TLRyLkfEjUQRA+zkMeOY5DVGybMAbWx3uK8FXhMpSCrTZ1oHtm24ghWnshXyAPXErLnHS0DlRYZItjrXdP/vrqsVG8kH4Sq/HcEt8AXzGGg5JjK/ZzHjtwmCrjEj2kjJ98+ghlhVdom6B72TNqLzizhSncwjb6P666ZWvsN2x7kVnn+Ksz3hmpHwaS8aRicy48pYVf5ywwuNwscptnWfMcPPq3gJgk94+ge/tr1iKI/cYE3ulvFBb8LqTXQD+XvIa4b8YeZU02rw3vS+fmL6M/eyw/M2H3bZXoIojtIYj05hsp1EPRYu1nazifyWZJ018vjTfxa+1TotOgdtVGLim128Lb+TVPf60XZRsXUs7a8yr0tsRYHqPYOsFOr/BWx0hM1iRVz/DFvOslW1NJ4yF6KBBs55Q+nqgrTLlBSXP1q4Tp9eIfQc3hdxDK+j/lwKEQxdjvbc1v0X1doTuNwzZEYpyJW2QgMUk0z67oFAPQw+NHTY/GkpjJ4BV408G7Uw== MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL2PR03MB164: X-MS-Office365-Filtering-Correlation-Id: e56ab0d7-64eb-440c-d3c4-08d4a403ae88 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BL2PR03MB164; X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB164; 3:2+vKySQy+joizbvmUHs+7QDZUsnPctiw538uPGvoWmkFIlewLcXANeuCQjcRIYA1ClgGJuXPWyh+bURo0MuITQl+TEkrhGGvNxsKBVc0hHcszZTMCGl8t6meiVyDQAiHvxOTewtnMJApE4ppxai4IB8h0wjv2/pIYkC926ZWqkPibElTxnuvDOCaW7QEj1SCZBrG721Q3rNTZnTxFb+ZefBLsTEjRyKbD77O+9ue5wotnldE7QJmdlvPcEuX7s+GsqWI6+Ws0VDj/VSBjChECVrB+n9qw/Aul39JXTE25SWqoz0a7ZcCjA9nfjVN0accC9Qh5WtKYoIVVfRszWeO8Whq9xXsvA7U6D0d1ztr3diMc1xciF7IRq4ZdVC9EcIaeCsXQmGBjbR2F30L7dH152qJ7bmp7pyNgzR5BBbvILasAS+WJlLyTOBB6k3GLQFo; 25:RQFWYQWCaKHpu9gN9801j/341/saqf20BeLLWKEbRvuV7x2tIEX6VDVvsDB2SR9aAcivfOTcy66wsvUX90sHf1OHtLVrLmYtdKph7zHBewWCthazlDTKNubive3hD1zgC0MYAFTdi1dcec52KPVMCU1YJxTOZejgfgFX2j8mP5jA6skjOMb1ZvrEGNs9uwnbNd4Z6MFOyfZl96A3jYFLjtZoLHY9T4TTknDHLqzDXlFbR/G3PGEspwbGvEGwgENn9NaWUOOPnJVNL9wIagV0Zuf/bOnJm3TQ6GuepWiK1hxtH0Fj0c6QRVG9GhJizCYjtiPuysdCKpr4OMGQjWHu0cJscPjTxQglF5x39frd7zcUL9EoAaByH4pr9RaW8EJSQu73HrhoG81ZX7MuMOu+Fu2JCIJ3guslUTrlPec0IOUQSAzqw1B8y8VZI+8FM7kXqbrstPUK2VJvn5roa4+VCm0JFCvCVpIJOBbQ5owm2fM= X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB164; 31:NfeH2Dwkd8hXqs25C/OJLQVohCJRDbDnw0RssckHWznouDXF59w0GqynV5opMYitYPKkoUEQk6l3y1N+ZElKo1s82iKZASgwe+sC9YqU3JIFrgp+l3LAQrrtvTeoVzn7/URW9n5NbtEB3Ib8Q/O+KNu7wYui3UGjuvW6MIAuCOrdkhZh1SqNltoonPWBbINgi82b/autWWKxBH7lpm7yPYd+JOJ1U0r1kAKKjhgENy/YS2jWKsK86LdYGeSL1iAm8IMbI8VwBPQNxy6u2rFnYw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(275809806118684); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13018025)(13023025)(13024025)(8121501046)(5005006)(13015025)(13017025)(3002001)(10201501046)(93006095)(93001095)(6055026)(6096035)(20161123559100)(20161123565025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123556025)(20161123561025)(20161123563025); SRVR:BL2PR03MB164; BCL:0; PCL:0; RULEID:(400006); SRVR:BL2PR03MB164; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BL2PR03MB164; 4:+XNDi2XpMdRDEfv4Pt6+rYXsV8mF0hZJ3x7PjKN4oz5?= =?us-ascii?Q?KNUmV0rq71PMLKUhjPh3okVQcDAmznwJ+8PPZTERLVCdz37+mL0o0052xfYO?= =?us-ascii?Q?AN57LeZfnRZ2mc5S2h4Wa0NrNyCX5QG0uu6GQ2rcb56R/wz5O7CtkhXLRmDt?= =?us-ascii?Q?IH819gNoLJi3LELOdy5YstXCd4zuvSF1g3M0OGl8mRtNfFUoi84wrQVIU1FU?= =?us-ascii?Q?RkC3KWYe9aKQBGQpq74Xh+hKKcbj2mmr8f454ZcFfYcGn1RtcjIO+qrKGJw8?= =?us-ascii?Q?rxB92W5R1fDhEKDAZ+wIrqM8fBAmL2AAyz3yuQ2WG/ovk6lTionOcEtyWHtQ?= =?us-ascii?Q?HRXAKE95mm28+fyFWqE8BIYR3tLVIiyJX6lPykV5lnXIIj2KeV2OFR6MxT3A?= =?us-ascii?Q?t1oGlDxZ62N3rD33M7J9ruHJiuegbh2xieIZ8t6Nyo4hQIKihYVSmfBVvdX2?= =?us-ascii?Q?QaT3JM2iqckbhUkW+R6tI8EcmbmsEemaU2zRJ6KW9N7qeHo5zs6f7jffqKDa?= =?us-ascii?Q?t36Q8gCd6RE4DEgCQrC7FI6AZAl5NcqO1nrbmx6CTucEFI2P5eQfFuMmNGUF?= =?us-ascii?Q?04ne2RAEHRXnD7iu7hyP2UGAjuDDb8/JA0etx/25nazESHOmXHwx4ivrc353?= =?us-ascii?Q?hnVI1zI8zNxEJygXq57wHYHcf2KnrpHdXrvO4DU9gD3IuRw72GJquuTW6+Bt?= =?us-ascii?Q?9ORjyfJbadDtLDSINjwoDB2oUa8DsaKpGp+VPQennEuEPyNUx+XzbJLtHwPC?= =?us-ascii?Q?VynPxBj3+pNFDg757OZWSAH+G7AGA2T+WcC9zwrV5CBWOLzwrODK4b667O7q?= =?us-ascii?Q?V7HaaYXN7OWgnI0nzEzQbr2CgrkJt+8lL4IAuG3rMUwyCC4aE+ErkGDPcjLc?= =?us-ascii?Q?+DGS9bUKdfkF6m6ccOxYpkp5sBgIqWBVYOHNvejaEpqTKrD3LPHUvUM72eWX?= =?us-ascii?Q?WVP3cRQOJ5F+5/o8v0PgT3WenE1KeAFj7B35TnWJonMRzGaxlKvi1QW+dEDC?= =?us-ascii?Q?0xesxFVnQElW7mWLhR7d3?= X-Forefront-PRVS: 031996B7EF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BL2PR03MB164; 23:0GxqYSa7qu1RZgqcH3TJRjKAtQ5RJohF/khsM7zcSd?= =?us-ascii?Q?3+9m4M7Y1SfMhUo9s+kVxoEQPqlFO0nz+3n+JcUsCotnuE0khRbstNBRkgl0?= =?us-ascii?Q?VxDh+dTr8vHu1dBi3IttYfQxkQV31sPrctwH1I2cMnFQkAuNtRPCZAQMRgX1?= =?us-ascii?Q?9bbXs1IuKtZPhItlz+8EVD1jgstpW5IDzHso4zNvKXKwyQ1KGz/NIOZNEBt/?= =?us-ascii?Q?DxmygQr4RMd+K78vziLFcVebgL/Eus1Y5IfVicTXqqI3MCIGyzYlv7XNq095?= =?us-ascii?Q?Y1rvaVv3IX6qFvxdI409E/R3hQh7dlumJ9gr24Y08e05wpr75s0Qb1nRtf2O?= =?us-ascii?Q?vcLXMqXunBeN979Fu9QtyAAYbLAQ1B04Y0hXBbCP4ahl8AoM9Drj0KfsxR6T?= =?us-ascii?Q?hr3wwNMD8PYEZbiD8egzHDqOIuI0DXQn0q6FVdMCWBNvmn8cWDOjCq6NFMAR?= =?us-ascii?Q?X3vNSnirk+uMqtYdkW4+g+2Drk9VGyhfkbczPnW+dD+IfnzYqdsLGo+IgNqp?= =?us-ascii?Q?x1R2YNrlOPaJkgZhY+PHOuVN63QFgvsv3O9uB+pov4N4Tt6m1+uX2CpCFuV9?= =?us-ascii?Q?N0Ab+0X4vAzl74KTDvcCduDTAhDraag6WWapuRsrbFi2F7jXvrvoS96chk1e?= =?us-ascii?Q?oGCD0x7NF7d2KjgUNiPk76GBCKB+PhYbIb/NgP8CdfMFcKQwiZ9i9ZP59bfV?= =?us-ascii?Q?XGDNNyEam10UbeIf0/fm1foVIQ453xs7FIWmNF/aouyqozHDmtoV9gQFRwNJ?= =?us-ascii?Q?DxPzPkR/NaUa6kuzUvy1A0n3PX0fOPhoZFHCKhIkVztfKA2+ky+hfmvrKyAO?= =?us-ascii?Q?m4y6BcF4UX8731Qyyz7WmsCezGt+H4zly1AcvX8VLBlTJFeJMXa4BhbmWF/M?= =?us-ascii?Q?hmJkEW9ooTMgflFKQJv642x2O8+nouJxNdDf63pGEO2gOzvHu78oSt7GPy6u?= =?us-ascii?Q?yOMyGAibVI1dlaTqc8PZT9lDfvGW9YdSpdBJx39FBHsnc6BkO3S9yutFnHg4?= =?us-ascii?Q?wei2v7kIubaE7OA9Ou3SzeU8PTtaTtX9EBHs3V3sruV2GBcCk7ge3PJyKT27?= =?us-ascii?Q?rHok7m+xxqgUCUjn2+uOYrR5hCeyok77G8JW5pRVORWf5U6YLq6aUgFqwYxm?= =?us-ascii?Q?A83T2931dtASdot2i+CXOvDlGqruyV/4m4ws8uPZm1E5uwB+qFg+iOJVdbwg?= =?us-ascii?Q?TnGxhxSb3HLixqp1Xw5bbtnpwMfLWHKBQXEkyJws2db+HYCMbxawR2oks8Zt?= =?us-ascii?Q?IrfsRbWUYBHKFyPYSNfh3kLvynXd5wLlCwRC9LXIYbYNOOv7WOaejeRfpr8A?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB164; 6:W0Mp5RDVmya8njO7IQ45ibfbKiPYGDoONGTdqkV0gPgyPJksD2VqdhNMbTrbRVazq5dUKbK158VOF3LAgBLzM7AheNZMOLTlDzjwQtPSwa3NdmCUohR74/RxxwDRq+gd2ZYhGVI3IBThSMvibf3XuUWSX/DIslSFJ4qn3djKCkyrZwAPAV3HDQSBEC1yk94/u0yUWsyJTFspkZq+AoJ07QyeG5dGuXiueC9kpcbi1DScbwGTosirQdcmbMbIpzHQhTTK77GLbpHnZT0VB43iV4ivICqJ3IYQim4T6tXvaVHMyIi/UlJ477PAvf4lhDG/5mftUdPclziAEvYsZ2dt857fvatJRDU1+wXNvXgXiIkvjV2bduDwrpQswbdtczjUzdYOLCg6GkQIDliT2Omb58Qcvko/r2bzmEPjfVqb+q6mijQXzWlqUI95/MkdjPjjEZ3ccGJ1qhsk8YTQIwGr6MTMfKpj8BY4YG58kI0XOUhPksddQetfdsRC9pMWGAmcGZQQuDPXcH4JVz6RavPXcQ==; 5:diuRoD+YoLdNQZ6gPUvBSy85eauSdzMIK61AXjzhiLBRqmKz5u7D66AY/49mYYFMTVddKMM9YEClI6BkQ2vX2ngESHnDV0KmBgmrkd9GtDLw7IjqEpq92H4Kvzz63tCZeJFYnWBmVY1OIkfsts9eUprBHd4ueReToEgQFgAFgj5uZ5q47BfEdknklxijx8Gs; 24:sL8bY/V8CBEbVeIfBhgLAD9FVgN41gIqXD8CI1ahj9SvulPJqhr+DCNHqdMDDGIsOgI7JwS4d5xR6l9DxCyMGjC0oTdu4/XemDdN6P9PksE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB164; 7:23Gsu3Hlb5krxo2fZYLcMTcSexND3Rg7uFjZe3zvIQnF1Lsi2HFyLoZEKMBrO7DSyRWnv/QF8cu5oC0unPLBDAeRkkRxe2BwgETFCxQdud9qlNfu2Ibjt0k/tLZ5emGmjx4soUK08BsdBcscL0GkJ6W6IVkQPGb9ZEcpYasZN0FE7ixhnhSDNX/t8vV8DRPnl8zPOTLIHVc4yNGDCz7w+qCu1oJK1+o6TBv6GtPLXAaMje/aY7MZBRFd/uY9IAKH5nN3rw2EyXBI6BuwcUkzhyNPH6bKFKPeaq7oiVlNX/0r2DqNKRoxUIHf9PCcKZmzamlTn4DGrMteQpYjWQf2/w== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2017 06:51:48.3958 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR03MB164 Subject: [dpdk-dev] [PATCH v4 11/20] net/dpaa2: add support for MAC address filtering 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: , X-List-Received-Date: Fri, 26 May 2017 06:51:51 -0000 Signed-off-by: Hemant Agrawal --- doc/guides/nics/features/dpaa2.ini | 1 + drivers/net/dpaa2/dpaa2_ethdev.c | 81 ++++++++++++++++++++++++++++++++++++- drivers/net/dpaa2/mc/dpni.c | 76 ++++++++++++++++++++++++++++++++++ drivers/net/dpaa2/mc/fsl_dpni.h | 45 +++++++++++++++++++++ drivers/net/dpaa2/mc/fsl_dpni_cmd.h | 42 +++++++++++++++++++ 5 files changed, 244 insertions(+), 1 deletion(-) diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini index d43f404..470853c 100644 --- a/doc/guides/nics/features/dpaa2.ini +++ b/doc/guides/nics/features/dpaa2.ini @@ -8,6 +8,7 @@ Link status = Y Queue start/stop = Y MTU update = Y Promiscuous mode = Y +Unicast MAC filter = Y RSS hash = Y L3 checksum offload = Y L4 checksum offload = Y diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 0526e26..5180871 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -672,6 +672,78 @@ return 0; } +static int +dpaa2_dev_add_mac_addr(struct rte_eth_dev *dev, + struct ether_addr *addr, + __rte_unused uint32_t index, + __rte_unused uint32_t pool) +{ + int ret; + struct dpaa2_dev_priv *priv = dev->data->dev_private; + struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw; + + PMD_INIT_FUNC_TRACE(); + + if (dpni == NULL) { + RTE_LOG(ERR, PMD, "dpni is NULL"); + return -1; + } + + ret = dpni_add_mac_addr(dpni, CMD_PRI_LOW, + priv->token, addr->addr_bytes); + if (ret) + RTE_LOG(ERR, PMD, "error: Adding the MAC ADDR failed:" + " err = %d", ret); + return 0; +} + +static void +dpaa2_dev_remove_mac_addr(struct rte_eth_dev *dev, + uint32_t index) +{ + int ret; + struct dpaa2_dev_priv *priv = dev->data->dev_private; + struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw; + struct rte_eth_dev_data *data = dev->data; + struct ether_addr *macaddr; + + PMD_INIT_FUNC_TRACE(); + + macaddr = &data->mac_addrs[index]; + + if (dpni == NULL) { + RTE_LOG(ERR, PMD, "dpni is NULL"); + return; + } + + ret = dpni_remove_mac_addr(dpni, CMD_PRI_LOW, + priv->token, macaddr->addr_bytes); + if (ret) + RTE_LOG(ERR, PMD, "error: Removing the MAC ADDR failed:" + " err = %d", ret); +} + +static void +dpaa2_dev_set_mac_addr(struct rte_eth_dev *dev, + struct ether_addr *addr) +{ + int ret; + struct dpaa2_dev_priv *priv = dev->data->dev_private; + struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw; + + PMD_INIT_FUNC_TRACE(); + + if (dpni == NULL) { + RTE_LOG(ERR, PMD, "dpni is NULL"); + return; + } + + ret = dpni_set_primary_mac_addr(dpni, CMD_PRI_LOW, + priv->token, addr->addr_bytes); + + if (ret) + RTE_LOG(ERR, PMD, "error: Setting the MAC ADDR failed %d", ret); +} static void dpaa2_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) @@ -720,7 +792,11 @@ void dpaa2_dev_stats_get(struct rte_eth_dev *dev, if (retcode) goto err; - stats->ierrors = value.page_2.ingress_discarded_frames; + /* Ingress drop frame count due to configured rules */ + stats->ierrors = value.page_2.ingress_filtered_frames; + /* Ingress drop frame count due to error */ + stats->ierrors += value.page_2.ingress_discarded_frames; + stats->oerrors = value.page_2.egress_discarded_frames; stats->imissed = value.page_2.ingress_nobuffer_discards; @@ -822,6 +898,9 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) .rx_queue_release = dpaa2_dev_rx_queue_release, .tx_queue_setup = dpaa2_dev_tx_queue_setup, .tx_queue_release = dpaa2_dev_tx_queue_release, + .mac_addr_add = dpaa2_dev_add_mac_addr, + .mac_addr_remove = dpaa2_dev_remove_mac_addr, + .mac_addr_set = dpaa2_dev_set_mac_addr, }; static int diff --git a/drivers/net/dpaa2/mc/dpni.c b/drivers/net/dpaa2/mc/dpni.c index 21aedef..4cea5f2 100644 --- a/drivers/net/dpaa2/mc/dpni.c +++ b/drivers/net/dpaa2/mc/dpni.c @@ -591,6 +591,82 @@ int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io, return 0; } +int dpni_add_mac_addr(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + const uint8_t mac_addr[6]) +{ + struct mc_command cmd = { 0 }; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_ADD_MAC_ADDR, + cmd_flags, + token); + DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +} + +int dpni_remove_mac_addr(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + const uint8_t mac_addr[6]) +{ + struct mc_command cmd = { 0 }; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_REMOVE_MAC_ADDR, + cmd_flags, + token); + DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +} + +int dpni_clear_mac_filters(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + int unicast, + int multicast) +{ + struct mc_command cmd = { 0 }; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_CLR_MAC_FILTERS, + cmd_flags, + token); + DPNI_CMD_CLEAR_MAC_FILTERS(cmd, unicast, multicast); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +} + +int dpni_get_port_mac_addr(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + uint8_t mac_addr[6]) +{ + struct mc_command cmd = { 0 }; + int err; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_PORT_MAC_ADDR, + cmd_flags, + token); + + /* send command to mc*/ + err = mc_send_command(mc_io, &cmd); + if (err) + return err; + + /* retrieve response parameters */ + DPNI_RSP_GET_PORT_MAC_ADDR(cmd, mac_addr); + + return 0; +} + int dpni_set_rx_tc_dist(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token, diff --git a/drivers/net/dpaa2/mc/fsl_dpni.h b/drivers/net/dpaa2/mc/fsl_dpni.h index 8783af6..dbb3b20 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni.h +++ b/drivers/net/dpaa2/mc/fsl_dpni.h @@ -854,6 +854,51 @@ int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io, uint16_t token, uint8_t mac_addr[6]); +/** + * dpni_add_mac_addr() - Add MAC address filter + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @mac_addr: MAC address to add + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_add_mac_addr(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + const uint8_t mac_addr[6]); + +/** + * dpni_remove_mac_addr() - Remove MAC address filter + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @mac_addr: MAC address to remove + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_remove_mac_addr(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + const uint8_t mac_addr[6]); + +/** + * dpni_clear_mac_filters() - Clear all unicast and/or multicast MAC filters + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @unicast: Set to '1' to clear unicast addresses + * @multicast: Set to '1' to clear multicast addresses + * + * The primary MAC address is not cleared by this operation. + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_clear_mac_filters(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + int unicast, + int multicast); /** * dpni_get_port_mac_addr() - Retrieve MAC address associated to the physical diff --git a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h index 41a4d54..1ae734a 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h +++ b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h @@ -69,6 +69,9 @@ #define DPNI_CMDID_GET_UNICAST_PROMISC ((0x223 << 4) | (0x1)) #define DPNI_CMDID_SET_PRIM_MAC ((0x224 << 4) | (0x1)) #define DPNI_CMDID_GET_PRIM_MAC ((0x225 << 4) | (0x1)) +#define DPNI_CMDID_ADD_MAC_ADDR ((0x226 << 4) | (0x1)) +#define DPNI_CMDID_REMOVE_MAC_ADDR ((0x227 << 4) | (0x1)) +#define DPNI_CMDID_CLR_MAC_FILTERS ((0x228 << 4) | (0x1)) #define DPNI_CMDID_SET_RX_TC_DIST ((0x235 << 4) | (0x1)) @@ -273,6 +276,45 @@ MC_RSP_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ } while (0) +#define DPNI_RSP_GET_PORT_MAC_ADDR(cmd, mac_addr) \ +do { \ + MC_RSP_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ + MC_RSP_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ + MC_RSP_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ + MC_RSP_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ + MC_RSP_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ + MC_RSP_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ +} while (0) + +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr) \ +do { \ + MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ + MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ + MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ + MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ + MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ + MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ +} while (0) + +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr) \ +do { \ + MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ + MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ + MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ + MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ + MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ + MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ +} while (0) + +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_CMD_CLEAR_MAC_FILTERS(cmd, unicast, multicast) \ +do { \ + MC_CMD_OP(cmd, 0, 0, 1, int, unicast); \ + MC_CMD_OP(cmd, 0, 1, 1, int, multicast); \ +} while (0) + /* cmd, param, offset, width, type, arg_name */ #define DPNI_CMD_SET_RX_TC_DIST(cmd, tc_id, cfg) \ -- 1.9.1