From patchwork Mon May 22 09:39:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24436 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 4FB147CC7; Mon, 22 May 2017 11:40:26 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0080.outbound.protection.outlook.com [104.47.36.80]) by dpdk.org (Postfix) with ESMTP id 6C402325F for ; Mon, 22 May 2017 11:40:09 +0200 (CEST) Received: from DM5PR03CA0036.namprd03.prod.outlook.com (10.174.189.153) by BLUPR03MB166.namprd03.prod.outlook.com (10.255.212.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Mon, 22 May 2017 09:40:07 +0000 Received: from BN1BFFO11FD005.protection.gbl (2a01:111:f400:7c10::1:147) by DM5PR03CA0036.outlook.office365.com (2603:10b6:4:3b::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14 via Frontend Transport; Mon, 22 May 2017 09:40:07 +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 BN1BFFO11FD005.mail.protection.outlook.com (10.58.144.68) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Mon, 22 May 2017 09:40:07 +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 v4M9dk46031538; Mon, 22 May 2017 02:40:05 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 22 May 2017 15:09:20 +0530 Message-ID: <1495445969-29199-12-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com> References: <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> <1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131399196072134965; (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)(39400400002)(39410400002)(39450400003)(39860400002)(39380400002)(39840400002)(39850400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(6666003)(5660300001)(2950100002)(6916009)(50466002)(8936002)(2351001)(305945005)(76176999)(356003)(5003940100001)(48376002)(104016004)(50986999)(8656002)(4326008)(85426001)(54906002)(189998001)(47776003)(36756003)(2906002)(50226002)(106466001)(110136004)(38730400002)(105606002)(81166006)(53936002)(86362001)(498600001)(33646002)(8676002)(77096006); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR03MB166; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD005; 1:EVrszPKF4CZbcMYvhL52PoTB8uYJ7TIMMAJE9aSBIF5K3NNSK2wz4vuv09wzs2wX7Pbg3P4GmBCpTUwen5Xe3XC6eiurul6GgBVFwYMo/w7gYR0hR6cYrms02QGWhb6nkpGOGZoQfnm6SYyjS6CXsUpcM5JmT0LcjNk/AT8nTC0O1IzuJAlSiR/j/ApYoqipjbHSKBzCQlW5aV0JpXWy3AxO1uXClAOI/FcoZrNxuIHHF6CeWJoNQmwxL9ZI6OePT+Tj74dY6JTXHnVQuX6JQtru9wCuvHw+4mRIAil7ld/JUqzKGzFLrqjLEXbODN36pBNREa6WQOpCgR6RcyQNkgv1oyo5/X50qJGTMth5GMrEr37DbrXPiuyZ0dex1SrayZLo7wfEJj8Ddlb8t0uV3n+NfcjUFAZxczcxPc/b114ADH2HkFxzCX1px19t8DVkhq66QdiOO5X4rpPXcwjJZ7RNekRvsaCX2OFwFf67s24PwJODjKiBTmveORBzf9S+Zii8rYDABr+ngBeaHrJB+V1dt+P2Pu+q8HASDYO+Cok1MsrjtHCVRSHgkbmIwekeeoC00dK4z3bT7W4OrxaXwQ4IVBMgzEvi6T6v/J/3q5RKxD9wbUbwAfFiSqfOlfhLmTSgQKG32D2Gm3rJXeCu6neH/4mYNKsu6+QzcsVbhEOelVrDNU9GgIiSnkZY1PAAMonw5g80Hm+ilMlgQYBHwqMTj3cJmDG6XLDMsB17vbYLJLzSeMNkSuYsJJECNZelNRn+S8pyB3P0Gaq1yPctNA== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BLUPR03MB166: X-MS-Office365-Filtering-Correlation-Id: 9ed34f10-7d6c-4b9a-67d5-08d4a0f6881b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BLUPR03MB166; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB166; 3:3BYewidQPF3WQG7n34bZs3AjQg0mHn5TwMuBFzf1+UWBFEVPccnXpxoJdxbzBRzZUqAln1ypLMtGSzBI2qNJTweqdQALD2Ek7bCPpCeiSK0x/yiGGeiZN4CT/s+7VQNdlwE2RM+VIHgXeikoyiVsnFASLAxRmqJg7S7KBC/A59LPRMH05nHeuISkWhGd9RtlyNQ2cVER7Up0JcnvUvq/nTRVoNwm5epJ2lJa+0eCwt7DL6V3oymM8Z2SZgWSISEPh4TO0xHyvNUTughCLrKirwtxwzDXTK8F/jEo1tLI4TgWdN+QOfJMIXn2dZZPlxmy7djvmp+pN3zRiP+0ymukK8wy0rThh72GZUJKBJ0W8Go3aqkUg7QIlevFadZWQoBfL7KZnb3djUYJlr+jwg3XzASq8SVTCS7J1sj1bPvIRGE0teowTxzC4zHzO59duPPc; 25:Ek1Sa6Ai2wc66gTQ7hqpbiU/WmRB2wKoUc3LE/k7C2Jwgi5N5Ka3nhZc1rF3uw6KSLESvEuxATvRcxbSBdnMj1s9hYbsqGYGxuYrvZ09tVESk8z+z8Z++fcO4JLvKAgWas+qaQm0O2bACNFnUEtHX0cHrZIRmmjj2Z41AfWVGhxJZjPZHVRSXYAVVDp0DIRPtAG6PHwWfZfzqlJzNDMopzHpJqVGefQbdWu0jgmQUY0AbP7P9wXz+gdEVJLkQIsTDnPtYCr8VeKJXE3nxqES1IZphGauMFUPZ80J1Vv1cXcRF9JOs8URrDAKNIMRCSMGWmARawbWGdClpIrdiIk73fKQLHJ5RwuUz2kSTuUYuXDTIlnY1yZXvz7JEM16jP0TiMd9HFU29giR5muP4vU+FfPNGrs1oJa31j1OwJ1hu236rM7H94Fn1Uz9fvpLpq50ox2sUxNToZ8ICH057a3Y6IMcXJt2byW/USL2Cp2A7ws= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB166; 31:bbWHmErPcSmfVBTfc8Hd1IRli3GD7D4a6BiBkzCOuIl/7VdJMyBw6n4UbXh5kyRo/c2wwFUka1kG8+23xMKjSZV8x/7dBJXSmVtQ+jDA80aKHFfxFVGLLKFNXvEF8K1kA0Q6oYfPP25nM5/jNMpeVHSYftUEZncSNArW83UCXOEnK1PE49KBNfVHNfTgYiFJv6YUAF8oBGrllaJAXbHTuPGbyCXItXl0DjXL0A961nJZxV6/wRXmm+tziYXLsB8bnKLDtz6h7UfVl6muIOmGmg== 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)(13015025)(8121501046)(13023025)(5005006)(13024025)(13017025)(10201501046)(93006095)(93001095)(3002001)(6055026)(6096035)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123563025)(20161123565025)(20161123556025)(20161123561025)(20161123559100); SRVR:BLUPR03MB166; BCL:0; PCL:0; RULEID:(400006); SRVR:BLUPR03MB166; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB166; 4:wRnGmLw6eGeNnBEiXOneuXaj39TkNhQU/B+nxV76iFm?= ThHjZOWcDqqj14DRQe5QtB4f+2hC8YjbL1K0Q0XcLlllKmHDvQBjqGzbMwW4pOCM1RntyeEAGhM61Zs1w0GFdvHixIPEr3UIY8BpRrVjXLQ6jQsiz/YICyrcGzH8Iji34flJ7AjTOqdHkIA1iBFO6XHa/gCQg8jP8IgvX4+KlxaBsfawxWYYfvFDzBAPBBjFTsO33oNxb2qFAbgZ9nUa7E57ZzSG0jfJ6ZgGkS82J5SUZf1aQDuroBZxU1mrRlQtpHCpQIQRU2opTdrJOResMqMGLSjWu6iCJd+GYhuKNlp8EXqqBBUjDJ4tV3sFArcBpQFDJXxHhmlfQhhIN0AU8iB3rsFfX5Y9xqrKbqsUdDezpGq3a2khEjsar+qO4ufBnKSFWECn4mfFZle+JcWPLms1PEvZVJgr8a9TkfdRCojr7sMuIBx9Aho2qseyffjPPZ+6tBQuE/7JQYZj1f8lNBpyAGo4XjOYcW+F2HnYJRENV77RF7Zoo+vMBdAW+TEVC393s5YsYPQnMOxJXDONmqEN5okYcEYQlbnDcYcTxQTtgoSmk4wJA8XdaifyCDcxboRfOzflVJIzJWthMqxMaHPTmvPFT6z8cN/PVksISxc9XWR6CA95UDaXNZYEpx7KEkqZO05sl9yr8gsC7n87X/hXM+ac9lfsca6m+ki5RJX26v8aA7pPQCI7wdzhctVPFVehFimfrxQ8TwM2OyUD7vyN9eYDZfoRV0YNBcibprNKfqExFqB2odUJYX6ZvaBGdjdpVPzGL4wu7XGG5PTxte1TEySJoKeVI8jQkVUviVUaSFGDwNdfsdInRCM7xs3inyEAJX9hl/WRYuYDvRQCKkXAwAzWrwHJ9BwsRjVmCFnsfbj5XVQg7TOeA4T0ek5ILLZdbxWnWHkwHKpU0AZckkivo9vzWQkC4Mf491EdOe2WXuM0FIIqa94R9PJ11Qtg= X-Forefront-PRVS: 03152A99FF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB166; 23:8QuAIa2vOe78lpamOGjwZQT30SvjX1vU9wY+0wNoSS?= iIHa1zISeT+dY9lY+9RlSDnU8ThqsnStYBpeYTnO+35RnVktgtOVa4T76rhrA1M+ow5WGnFg12d0khxaOyKrq6tLokKeii7G3ZFFywhZaJJsTk3OuuMduEBgBHngeSpJUmzeRCf/3qr3V7puWo7M32EYs2cSK0SFtugRVXC69TrBYHkAx6fGzYq/Sg4k8l/R9h7ujjwL4bg5YiZCp5k/601ftaSndzo4qn3G1F5gD1Ws0rVSXxUvJPC30uVsFCc97NVyfiWw17OfzjlHykkVHXNpvyrd+SRa6ZBtVuFjxxP285oepc8WbYTiMZAQGZT96zKEy0qkuAhWxXzLlNlafroGF+wQO+VbGdqk/c31sDfwZqUgb3Ax4uGXFlASzs5ZlOp7+migrYEbRT9xSuIqes4feZ+z4lg0B+BtFaqYY4SzlZ8BESwW6psOUkFmZ6mXoZVtQQgW6qaNw0QbAgic+Bdtt824kFrYcgjg6VQEUythxs+4oOSJFf6p3nWlnZ7b/qpbiBWkeAzBH+2TIcvuOE6aqLDZu2TzTAVjFerE57INUKzA/DyzXnUzc+VeHoBXAaQAr/9ewdQNThkO+0/hRkrLpAgJ2hDbz70elqLyLRbljN15Bozg65+2O0TloEEjU6MinoXYK56dk3tHsphEPLfy4uX3PmO+eVbBI9eoR2QOlYmhPE0RF+jGchO+zSG6XAbnAP/Xsir3Nqp2uYcsg9USKOobdD/qvLZvojms+g5l+/p56Kcge4LXqw7UWYW3Uki7G4q+jD10YzXv5VdU12UkuM2oTOzQ9kFX8aaerMWgZzoDpo7fZwmjNjRZQ86BnX/CdV5d2oTvyuToZNfb+JNWBkaXm/6HEDQCFgcNSiYyQx1qOPRHgS9sHwjdvPhPq4DczJlPASvEOptMCrzNuis8vRLKjDpQx7SVvgQVBSsk59uWlJwl2K/MVa9ehGCWeuzJgNZ6T/b6iv0tINogKSH4dFeaCBmxxAWo+Qp27eZCPL+rmD52iukVcHCHIYP/H8MmtecS0yu1kibf+oLr1dxXAlGSAnYG80cfD3AOJ5/pOwpMCDv7GcWC9cF9evMCb4VZ0gWQUUEgAD/GQzOzNX368O6EMWsHGzmwodH5rjMbBKK2Dq0Bdin5Dq2ybKXkBQhG4hA/PsWnw8UFzvg4HbHRanqvRafQZexQGdYbkjoFPVV1vZfUKqXyza6K9LHlM= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB166; 6:yIgO5r8ej2HGPPj145w9jZ673hFCbkozfNTCIcyBmrgs6HBaJ7VCo5frNSs6XuyvJeFjln3X//zFOu0WtwcfGjPf02hFCyuMoH1CgRBCpqAlnSbN9O0nBMCtTVt4ffOUeDjFHgNzSWgyqjlNFnkfEVNopsszvorr6PGY3DIqv/ysDa6aHKAQnLh2FluPKeoLdDQhPnqSia/I1Gyk+a8Aj7q2faNPVvrZc+ZkfsjU934TQoKQDG042tQLiY0cCvgu05bdqL+ZAjhs1hDEOk4RCseV2fxTWrqqKxP5fKev3nPLdpXixuaYQR+lG1+blq54t5cgzOs5SuaXvdEUgG10XigCQHqIbiZhnA1Mkm0V3+GXYieZ4TXBoVbCHpwPVji8HGknDwcRTJr6QaP9gHi6MLkPKOorloAaKq4ioovHyYUMyfYljJu3TeSb+YSVqwQUXGv/sXB1HGsJsDIOR5Sw/fw0HF74V0KRxV+cw7artrXB26/ysEpwXIhOhiyLmmPtbKq8zEqM8KB9TU2znUJxsg==; 5:APHi4j3iEpvdvDhQhVzZSqzZqUcSfAmMBPMOu+EzMrwuNffi9Z/Gm5e7gNWlixqpl8eCxSuH/KbR212FJPNy2N5PIGOcnOfBYCDbHcjrIOxNYVjwqqqVRBa+u9h18x+q8oa2gATUQbeGbs8m7JWwRCbZfi6hQ1yehMwrY94n4+zmo6N5eTsQtcnUicP/5rjw; 24:zn08/yO1+fj4oLxZsL3AkltCcY2Wo1ufiYYATVb9omEGNyRiD+AbB/aSLFkGPKkRLtDT9Z9maD5Z9IEGrLDWHjz2b62CE4almCKKHjJ6Cu0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB166; 7:8JXgHcNlAC01jzrAYwtxGgCwO51LBAvCZ9+s7GwYcwgxUCjxYm1hVqfajJx6dh410kAXV4N20SOLLe5uD5h/Te9FwmXcO52TStyyWt9KeOBB/HyzxZdnzC/qhlH1ZiFGYGw1JoaqBm4DtN9lwTZPIL5RiJELj/by2hSu4+gDmHJSQGxH7RfZv4jMU+l2yg+2pqklXnvsDynAH6JqhZhv7PIHlG2J/9mwycaEOYoLPnKu+GioN2iQbrhVtPA5+9jVH48j/jlzWgdr44BP+1jQgdSCvrJm2fPC7xKDQ7s/kxSQujJBv840KDkzRBn/DLtYh2wcE+L+taiNkIcCogllcQ== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2017 09:40:07.0262 (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: BLUPR03MB166 Subject: [dpdk-dev] [PATCH v3 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) \