From patchwork Mon May 15 12:37:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24307 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 [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 261C77CB6; Mon, 15 May 2017 14:38:35 +0200 (CEST) Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0055.outbound.protection.outlook.com [104.47.41.55]) by dpdk.org (Postfix) with ESMTP id 3018B3254 for ; Mon, 15 May 2017 14:38:24 +0200 (CEST) Received: from BN6PR03CA0079.namprd03.prod.outlook.com (10.164.122.145) by DM2PR0301MB0911.namprd03.prod.outlook.com (10.160.217.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16; Mon, 15 May 2017 12:38:22 +0000 Received: from BN1AFFO11FD023.protection.gbl (2a01:111:f400:7c10::166) by BN6PR03CA0079.outlook.office365.com (2603:10b6:405:6f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16 via Frontend Transport; Mon, 15 May 2017 12:38:22 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) 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.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD023.mail.protection.outlook.com (10.58.52.83) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Mon, 15 May 2017 12:38:21 +0000 Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.134.28]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v4FCbxO0003970; Mon, 15 May 2017 05:38:20 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 15 May 2017 18:07:35 +0530 Message-ID: <1494851864-26029-13-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> References: <1492607395-5922-1-git-send-email-hemant.agrawal@nxp.com> <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131393255021536448; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39380400002)(39860400002)(39850400002)(39400400002)(39410400002)(39840400002)(39450400003)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(9170700003)(105606002)(85426001)(33646002)(86362001)(2351001)(36756003)(76176999)(2906002)(106466001)(8676002)(6666003)(50226002)(305945005)(2950100002)(5660300001)(189998001)(6916009)(356003)(5003940100001)(81166006)(47776003)(53936002)(104016004)(77096006)(4326008)(68736007)(50466002)(54906002)(50986999)(8936002)(498600001)(8656002)(48376002)(110136004)(38730400002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0911; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD023; 1:SqYP5w/UAjMv5TtGcY2rsW6ibLlHk+mzFJqrRsht84yZalOufqFjV8PWaW+ERZSSkmI5nOVKDZkIDTMFmcdhMoh9ziqp+WfNgmQEDAaun0BNY9y25HwY9c/+R9D4TkB1lBWh49l8pDFj9Zm91iYz3J1MnxTSpORFm7h9n+1e76pbTaljsG7olldHVwRiN2lDLlrlYzvmm6Retgu1IVe94B55tCz6Gnrqe7e37WHEVAwUpKQudUp4pa1ePf8PCq2RTbQOEP4+8+vZObRmiMFADnbRK8omqkur4U6CodQI3/GBk0gQjfphaugoE74SNhyZDhDF4WXtH9sO8shICOFPHDciyQJIOibjVLZrDyFmLBe/gTpy9apa9NZBBdmA9l+Tc9QNbLKcdF80gMawZckXdH2yMcNzXRl5ua/cdP3TARZ+5p5m3a8iGVlxNFb4xg7j3FyUEJDIGFeJvbVExWx2zHuVE+irnvcKwIQisSmqycD6YUiEb7UTSzdY3rv2rdQap3eSAYLyJGU9T6T9CZoEySgof9Ktd4mIWJTsQDasGJjL71i75EfieIFgD9lRzx/iaSFOjYlRez9az+exD3YR1AjKs/Aw+cUxhFIQ00KZK4z4AgpptG4sMOWEruQ1TwoaRYD9AnCVoilTVELtDuRzWVlwP1PMM4e2wN0FhsTqirEajESb9GATqmXrRVG/0EJRMoAvPgH5X7or6u+IPPo7sMWP5jj5jYRUinWxlV2mDCIcqoWE8MGAWyFKGu44sXnbcC/03DEZTxrD45R/pDOPUw== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 04fb93db-726b-469c-835f-08d49b8f45e5 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:DM2PR0301MB0911; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0911; 3:SbG2KqGckGAaZi/I3rzB8bOcX1vI2c8rG2cGHZ+5hXkhKLux4h/JKxfN9m2Es3AiHCNxBJQCjJ2Fk3UsptlIRDgn3fT8dc8uOGjDdE0sTYmqHMrRSwnIWHIPMK55ZE4VR5S7nLGfKTyOq75Am0njzvUG57m9SDEFU3ITxW5zos1Yc67UeX0qVbQkVNyZL9JxCozAdsyElrRWa1NRkp48kdD9EMA/PTWIi7gm7s3HeGNg7FaRmFghsB7PKkL4yh/2UlqmucGlwZJtDL71d72ZATsubr+xGwGqLseFr04xIBeHzO/eOEtIB1ABxcEg6aEVIJAD/H0PI0wzpHvso8BrWgUAiVb/3FkCIlbRAtCygNspAqOPregam8x2J22o5HnszFXBJ7N2qXDYmAA5U1qvx8JE/ZjbdspIb8PWJbDMKdwkrpkeYlmWNcfLV+aG+lUD; 25:WJ3aEy5zrpDsxH66P7SN5BAy38wCQvOXIx5ditywVf+I/L5WF56ARmGMYam7i0WrMMseKlCaduc+2U1WccGKvXIUMX3d00Dx0acMrF6qeKFelJo8pCKL5KTp/P6f7mcqWWigJoS6HhfdycHOo+vUh5ntn0atY5EhqkEeOaH7G28+/w6gI5MRbgiPQEpDr4yM55sAGp70iq5Kj9hGmXR8Q6RbJImYbj48ds5oIR4kGdk0zcGvW87iTyWU3JArxd3n2toqbV5x8Dkv+h8AasAI7oKCIGIw5R640aWlmLStnq6SvXw6oAGQFix1eDSyOv3LQkcb7RPY3SBttH9088U9apVYYzY5sqgZgfCCIsaG3ii5Pu54f9X/1sCuBHA7YdhYi9i6zp03QSzTRvq3MULKcQ4Etmh5o7MkXqxBt2bZDCCldlN5BjOHI3JkOzdEh1/f0/XWtnBc8sph6E5aNQI8HQ== X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0911; 31:8jfNoFPRrgu/zIPs0vB4nMesu+HINUlg1J77GukT7byO9u7yCYPZbp6xgtHNcITehqzIjFNNucCNdFlpaJeY4a/WRUgsZA/N9BmLGxqiPDc31KibnYVLjjWEbS/BSZD8Zow58J6ePpu/cVUAyhHUZfEUInEphTD5H1lZuZNsuVb4yzH7J+WMtXcibpV/tURSmme0i3gHejk/2oTlA0cATWKLLOcD1hYmRdEv4IA6F9wMshu2NFEepG4X0hwBJE8//R2PLxus7ZK+zp0NpRkVhw== 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)(13023025)(13018025)(13024025)(5005006)(8121501046)(13015025)(13017025)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123561025)(20161123565025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123556025)(20161123559100)(20161123563025); SRVR:DM2PR0301MB0911; BCL:0; PCL:0; RULEID:(400006); SRVR:DM2PR0301MB0911; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0911; 4:JocEQgDP9X0gg8T5X3SnC1qqw8wtjwxvI2RqT9QE?= b/1ti2Zf3xq1urB4DMzupkawL5Fdf0I5tFhVxf+ed4orzOJyeHMPYF/67gEtm9KrjFkZzSbUiddulTdJwPtFd6+x5wV1SpHAjby2TdnY33wOkEziTFjJAJtzlLmimxjASt47AEozhOIvTTZ0QFgn5g+GPcUiPkfh6wCwxdGsph09XiWOJc134IopSiL8CQturxsKuqGO1tkcSWWLnF/x2w81fISTKGILdHhobcAeMKRxH8DJKzO9IjAkgzQAVnGnASkk9XmUX6Is1VWtebCM9ND63Cgz4bK9PGTnlTYFs216eWTzyqjGLr/OoIzEvloqkEteNZm/Gw6y8a5AodvBY/5PhsnbGE9aDDVd2Dy/NUTebc6tfGFdZfFBtmeJfqjzqLN3TunJvR2c4W6W6D4OwXnNpXIDqA+RIT+OywNVfXBDdzIruZbFP3UGW+EQafl0kUo4qhRuM2BBXhCn82VrVnzrUi1sXdQGBkymOjR/XRGo+guANldDbDeku0/ryhQ142Oh9Ws+t0pV1oj7LTVlTx3sILPULprP1Yic+2LLM60rsbL4XzqdVSqsVIHwUbC+jEpvS1NJpbzuKnECjxAZcn5Nt4ThfypEZbeA+wTRP2qtaLY0RyR6gDyuNAwxHd2xGvr1zsujqgf5RyZNXt1oSeg8Mh/qGr2iiP6WOlVbKNWYGr611yi44bTjI/vzpsgTlvhRTU7raGUYprTf48A4CNR8HhtA2d/MFWx9bKyKY5zGraSBCDF0HEVWRFg4j4URNpTt1cFhpV5TDVK+Q/B8djkUHTho5hsqqJGqtt80O3IYIslL8wGbZByaCvAW//n9g3NQMsMq2ESVCGkegIa/NjADs1JYDkJvik/SooY/DC8CtZnrKLoxfr8OQFw8ujKjWJPvV6DgaA4rIdYm/LWuwyLFryNpoA2Nrbbz3ibDVTsQ67tYV1OdL6H7rpYn6IQjz0c= X-Forefront-PRVS: 0308EE423E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0911; 23:932rTq8Tc1CgVhZMT26Uv+jEGdRwhIXJ8kMsd4x?= paC8k4EmAHftPjI6ZtE8AKQJtNIpXWJwOtL19JumkpYTC1Z8Om/8+0IYbZMLa6tBFqmv3qk5mhFb3YYZ1iiRw0GRgq7rDWAhSG2wvv6F8I3oRwlsw9dT9/CSYK1ULiRMYFYAippZTNkbAAhTdF4e1Ox3JTFAYGljscNCfZdb7mxVcANfiAYYutF9SjH3BLdHqqHUeFQ5jGd/0BPC+CfdogSUfpJb25Hovt3g58Ya/sj31lYKed/wY7yeon7pTcEvjGjaTFdxPmN4JuaRbCdlZQF4LafF/9M/HkjWFrTSeVOfSgVwjCH9GJitTnGR5oMQWVrGSTJkY1JtvMEzVni/ebnw4zRZpXUVUDQpSS5/fS6DYwzwj8AteUhhtM9PsdgbRIsCTwGDIkCx7XhxqtVVxEduKfO77LoCxUn1qTlQW6K82+lZEIjHE5F19FUQ3cmp9z0RexHNHlDr4VEs4zZIF1ItjpKqGNoVMWkR7wB/gQtmitUrE55P4/Kt5wkKQuRZ22rkyS3BDOMmbPT2QY84zBO+Jy2k/9GfmF60aqLUZGgMGGvjppp+GBJLhr32yo+TSJmRoMvENViF4Xn1iwtgvhZYPWxeLV8Q1VfeQzCH8RnR4xupsbhQGBrqfRH9a4gjBicrXaowzoq4LR0CL8q1cvly/PyfSvvK3XHQdTywFKCWI/ba+O8DlcF8rnvN/sxLlNYT2mNIi1NhzShEAeH+n0gKVs0XvcYBPnPoQpqj0NtnCaTSbInvk+59m05PIeZgeVNmQh9P9WfW4xw8ThP+WdUDVz0TfHL85jv8FkuFDgtYzbHoYkHtO/EfxpkswASw/DZKZ2TXA/ihOpoFUZjadyI70clWBzGuggqugnaQdT5ZYJmmI8w6/4B6qVi/49E2S6ZGgm+dcAiP7xHNAN2u3/Cng2CwvjrwrDMFTibF3DyEpl86EGFhIwV9HOoJzWJLAsHdd1Bm0fmxRcxMgKK89mUXiNZ/ea2M1lHZpw+IbY951zokvlnB3IcBWSgr8SdfJ2RpdBvWF8IWS1F5POYdqE8pAqzTctcmxMQscpeEmV8a3yxDXGr7rma4Dx/d5FjDaBFEPnfp1U3z7sJAJpW8L5i/RGJmocwW6QouGWRLv6/JWOjS0qhveyv/2Rg4ZyB9E5BDWw1Y2phqmnK7pzzZ6GWl0Xc/jXPMZM11O0WlNY47T4dws3qQiXx2AVwYEPKiQr6Zmcx+93NQm5sXUKa2ZoMge X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0911; 6:T2hIVRjRmOdOLmuX4nBuLAOUSVVbLdppA6FthaacHVZ6Hfb0CCPJvM+HGkFqlYxiS5fqIlj7yEtfK4IUKTxv3EYP9K0uUbEC+BF/a3vVAPOOaH9NHoczOhZOwOMUqAIlSoPp1CJeWrabbqO+6canUMrmp9gyXgp7dvoJPe3s3tovE1te/noIrzhOalLfS0AfGItY6R91vtsFsixsmiqF7FO/8xKGz07HwRRC6vKQDUlZ++b07Oq1NBeEyZ4Z7Yfjmhg7duCb+QcNFofi4f4/LlWnZgVoLWYyPGLE+9qRslclIYdaeOtUoeLjxoO4IjDStusjLlyVpSkehCbWlmcgFwncOts8wmdSYUPAqXEPMXQdO1AvN5ItUfKekbmmHSM48yeW0b7ANURpGOhm0pZgGsBZYKTCILq84B35OTWbQ4BxpV7O48uU+fzpZX5Se5YqI5Qk3lavp/j+8WBwJQAx+1wOB60bC3oNhDaKm2HIX7Biqze47YfpPxO7Uu9yKTzqdUpq0w9hf4LBeGnnr8HTIg==; 5:iBMcvGpXlHY02vlhBsj8WEoMXZ+YDFAd46uPPs68rJ9UJHYPl/AkcLBCaPB/5TK9bFRiyjuB5IXawo0otuvCyV5BwpV0whs8Du+Bxg9+wC5n3YG3zo0Y7RuUMTJW8XUfcEGmJ4zAJBDvnwMA5AUfcUTWtxYJ7Ftvw9c2yEji1ucT122yH2MJMR4sKorPaoUw; 24:ZGw/8MJ9aMujFwgj9ALhVQoFCaRdueTS8SPhtbm1p1G70dQaUMyEvHWlGio0NHA9lOTjqMq6Nu0pN93FLyQ0Q/U7mhAIt0I8xCYsckancZQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0911; 7:MkTBvtNyQrDm8UiCHPppJCCrS4ptj1Lxk49+PfQsDAr6hkv2bEHKdJPDR1JLaX4Yv1oNyZBm1kYKnnG0+Fz6091VZaAIl564m0KRewZGJbBicn/AdvpKw1L/+6dzIc2zY2i2vaZAKb30o4azm2WzXa0j9oDB0ATl4qGfR/n72XTPCNoUxjhQswQqy4MqPsNnifBEXX58D/WQHuqrS64ujrJgJtURdRKdu3yyBb7f9NfOHhitxTOsjeRzwSMXDknkE0ajvNJiMB6E15X5fHMAMi+jSHqOTl/er4KVTvv+yjq8M5hNYHNtsK2+ZTE5DWPRVewcSx33o3xKy399KJ8X5g== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2017 12:38:21.9664 (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.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0911 Subject: [dpdk-dev] [PATCH v2 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 ad33282..38c5f3f 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 68e30df..ae18b5a 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) \