From patchwork Fri Nov 11 08:20:03 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Madalin Bucur X-Patchwork-Id: 693596 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tFY4k69N7z9t0Z for ; Fri, 11 Nov 2016 19:29:58 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3tFY4k5QqvzDw3Z for ; Fri, 11 Nov 2016 19:29:58 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0048.outbound.protection.outlook.com [104.47.32.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3tFXsr2fXzzDvpr for ; Fri, 11 Nov 2016 19:20:32 +1100 (AEDT) Received: from CY4PR03CA0005.namprd03.prod.outlook.com (10.168.162.15) by CY4PR03MB2470.namprd03.prod.outlook.com (10.168.163.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.707.6; Fri, 11 Nov 2016 08:20:27 +0000 Received: from BL2FFO11FD046.protection.gbl (2a01:111:f400:7c09::145) by CY4PR03CA0005.outlook.office365.com (2603:10b6:903:33::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.669.12 via Frontend Transport; Fri, 11 Nov 2016 08:20:27 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; infinera.com; dkim=none (message not signed) header.d=none; infinera.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 BL2FFO11FD046.mail.protection.outlook.com (10.173.161.208) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.707.3 via Frontend Transport; Fri, 11 Nov 2016 08:20:27 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:877; Count:11 Received: from fsr-fed2164-101.ea.freescale.net (fsr-fed2164-101.ea.freescale.net [10.171.73.197]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id uAB8K7eV009839; Fri, 11 Nov 2016 01:20:24 -0700 From: Madalin Bucur To: Subject: [PATCH net-next v7 06/10] dpaa_eth: add sysfs exports Date: Fri, 11 Nov 2016 10:20:03 +0200 Message-ID: <1478852407-27420-7-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1478852407-27420-1-git-send-email-madalin.bucur@nxp.com> References: <1478852407-27420-1-git-send-email-madalin.bucur@nxp.com> X-IncomingHeaderCount: 11 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131233260281437721; (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)(7916002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(2351001)(5660300001)(77096005)(50226002)(85426001)(626004)(69596002)(110136003)(106466001)(305945005)(87936001)(104016004)(8936002)(189998001)(105606002)(356003)(97736004)(6916009)(6666003)(2950100002)(48376002)(33646002)(3450700001)(68736007)(4326007)(76176999)(50466002)(5003940100001)(50986999)(53806999)(43066003)(36756003)(7846002)(586003)(8676002)(2906002)(86362001)(47776003)(81166006)(81156014)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR03MB2470; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD046; 1:q3xEfg+pvBuWWnVBmsqTt2oTHnfxjI5ziGVAJguOKwlaEvvzMs16VWWIKD7n1aqMet0SjMmkXs/FXVbKjdFVRWzUypHBKfycU3LCEBf36BabREhkvsVifTjgj5ny8J7w+8ef53EdkLw+EuFLnEBoxVBoo26E69p+Gi6US70bCodf0rJKFHH7prCYOayw+h8K8ukGIp64dfRQsrNLLbOr0dtPJXFjcWUAuxPpEX/pWrc8nBmbFHmlZKeIeClBcklSA1ztS84q/41CA2JeTIE/eQ8XeIVkeHmgsmGHB/4F/YdNVkWUTZ+xg0U4hb9pISnNvl2lgixjZpUieYLH0+S0XBCl18ONbjjim0cLLTmMejZQSmU+WUmuY7QJDP05RMrXkAbVN01NHGnUbAbyk0uBKxZoWm+baXHJoamKhSKIgqTAxedUoNiApv32c9HQ1yfP6BxdyTnJ1fdmDy5l1IPDVQhKb4hz0ZRzVYVHwdoYyd/Ug7DRiGEnaTwckYQ8l/SFJy9c+DOmxJ1rjd4ycdpFwnjXYa8M21aXi0pTxyOZsRN///d+IUkQFYGOPn4Uz4MP2Zgv4WrI8AdIrYE0kIOoVf8sZgYJlSwj8oo4Xezz2QcUTrKNJVymN4Zg6Ss6dsdn MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2470; 2:SazktXVAg1O2nxZ7nCixfeqSljyI+60SoABBlzaoqGMV4/InY2J0uBY8NyGUSXpDG9Bp/vrmrO8z8+xEap5FgC1MV9WAQl46Q20gsp2VXdSZ2Z6WW5aFjaUuwA3bZpmvTyn40NpOOqnG74Y2g5Np6TidnX2kHe3RMItfARkqoSY=; 3:8xK6jTdCzV9JGvbiiOkDgMEbtclfj0FvljKnbw4l9pUV0MsuwerjmCPlskJyBxIkxQTCuND0gVdvRoqIV0up7F5+cZ/n32Q5RTvlP9F75ARO2UXbKsxAftI9fJ7S72HWXT/rKuV4bS6Hy1rcg4dKVUzbBGu1xpbpODd8Q/Kcv73jkK6+60+FJROOuzrST2JJDl2Id/mLp53lG56ZwNkjtUarz5exzNxgyTY4ajEvD4ZNSkPj4/TftMAnjWSG5KbB3ftn7vGd4+SGCUVjs1anww==; 25:hPLvpwUWaF8hatygQYF//+7pt9RV0uYOsMhaxcbVAXblA6xXmTVBTMNMuFu+6SeXyUw4/EAK/Y8VdS/BrbAqsJJlH5KfWpyWHPNYVL1DNaAWfY9kO5Rih4pX3olwqwNQlCJDgETnTwa9vQHNhnrQt0A3IhlFd6+nFUzFkJ6LFNGjWcps+KwWsp5Uh0q96isPhJCVuAKklLXre0T3zpfjyshaGVaFzB1f3xL1jG4P2rxDB++zmzbweMPKiiEG92NDkQEz1QybaNroEQU9eyi+T+YpmZ7rw6zjCdgP8IL4kGLK1XEg/QnazAUE6wzw7UEY2hyJxygvx2GvkYyqflRzEE85JFZ1bKHFxfgHtmldTAj5XS8a2AfwhIbLL0oA234ywD0KU036PSnCa/TpRH4FTWEm0xVeSHJAj8v/p6SHgAotXSYIvKp0kVAd+tUkuBtTiEgjWi6EQIRII9wMre3AxQ== X-MS-Office365-Filtering-Correlation-Id: 415a614c-3083-4600-9e19-08d40a0b9841 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY4PR03MB2470; X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2470; 31:2jx4Y3pwEprbB1F6WtY2B1PRmEwAbO9qKSnxL11Dg0Nk/gp4OIRsXr1zI7fTrTyNL+z7gNt0OlfxUJODdvHfv2Udm/2g9medBIjOLWnNlW1FgSdVoMLU2/Ci3RAOjwA7/h38D+RYs/r3bLv//BqytNGiKw5l4muZjvDM5zCG/QXFtkmDwpuVhMkAeuTD4QFvycrvNXx2eARLxW1RUb3NjO3XYqfJzbn3iJgJmEhrn4nP61R+kj7ehz0ejSFlmkJo5S8fJCkJP+AIVBCmBAbHpA==; 4:6seTZXDNpRCp4EfkXdwjUngWqXDJ+bl3KixwisXETGBded3TxQv4zjVGy1tVw8x5bWxCThuF2fPYRJ//ZFOZjCPY40fsu+A/ZKJTOY0ScMKH8CeRfX1Xe3epzRa6FmvuM6z68RBD1heZzgh/uEotb/wDFUbTe9iBhnhxqe/MPjDpTg/fI3xcarKn+eEJX91sWH2VSh8iSVNYpizThld4WZWPbaPLCW5HIYl5NrXRpUQgNN7gEOpqPlWPtckvH8XRb80e9UvBTJqG6TTtIXcb66MYtrkS1kRhINdytmcYBoYd6cFG9lgGF/7pNF/aPyJhXKyYgQ1EpSMP373KqyqZBbP7ALvayT7X4dFKgwLA7Mit3RsI0nm3UH8/Hr5Haa9lwAPyR29mXQhm55jKPTTt7j6Uq4wmVGzRBThDEQLR7IQEGHOK1EeqlKeRQY90im7BchrCj1AYn1jGeT8Q4X7750FmRAOK0P2TfkKe5zzDd7IzXmyMQ3RFUeZ65Gxa0fP3e5RGhP5LbbuU/FazhZkfR/yJH3VMuFhEvpJMSozb+OwCJQBLlbFdTtWOZ7MFru99 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(13015025)(13017025)(13018025)(13024025)(13023025)(8121501046)(5005006)(3002001)(10201501046)(6055026); SRVR:CY4PR03MB2470; BCL:0; PCL:0; RULEID:(400006); SRVR:CY4PR03MB2470; X-Forefront-PRVS: 012349AD1C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR03MB2470; 23:kta9HxNFS1nBGnmkxEnKp8NItNW3kIuk2YKQ+k1P5?= =?us-ascii?Q?mcutWBDdpzqXX0JUg+wk2/ukYbmKH72KbjVTmhrDY7ARxGJFMJeeQoPtQgo5?= =?us-ascii?Q?acJWb28BFNpEqcCBg7ojakcz3Ye/YOAxeMBhHsCRl+ddggJ79Sp/O7IhMEtr?= =?us-ascii?Q?lE4BMgzW2nCkO94fH8/sz84O18p1MfUZqNMG03wQkIPInOfW84gBwTE78E6S?= =?us-ascii?Q?IvoYn0PPs7CJ+9egQWmx+B+iu41wjdsZoYjhbwy5wqwdgGRs2A573oXIL6Iy?= =?us-ascii?Q?mY0n4VYsKAywUhcQcGlA+lTAzK/7BqQpbW6pc8IPXHuh+eTNweYIB5J9AN5W?= =?us-ascii?Q?+mzivIHQZL+tLXl43Sj9771SRKVoMUv+0xsxAiNth9DzCfPAIm4EBOIWzqQi?= =?us-ascii?Q?6UcScuAk97QziMTaDsRlOOQREAH/moSZujMTvdnTW2oxG+BAL3quHtTJdElZ?= =?us-ascii?Q?wYR3aocDNyZiHFV15GyoQ1ElB9zBY1zD/hvHwWz3mKywPJ3xZNZ/EEI1gSdQ?= =?us-ascii?Q?s0Ux4gsAeWgOriWet866LSvoRzRMAfM7DUkwzQ/vAeaXRKq2v+hTc4IYbyAn?= =?us-ascii?Q?UNRGYpra53moVyQ8uEaiuQppzrHwCLGRq8DPSCaRUy7fwAY7E6baK2uHZ+4m?= =?us-ascii?Q?YbCVHLwIigK/0tsOdY77nV/ew0ZXGCZrOoeLXyXRhcKovzAQ7V1o11Tcwtzv?= =?us-ascii?Q?J3UFeTfk5bujg1j25rje0c23KIOf2/P0mqGTqUJ/Z6gxaEioLvkpPSiUKkWC?= =?us-ascii?Q?wH69IdOchZKP7oUEzy8BMUaPLX7+jD3U7JHClA+SD8r4V5cxtRagttxLa/wh?= =?us-ascii?Q?Z60Ud5/12FeJhjJW6JfGmPu1EEPxjN6dqbvz5ujBKtXzPUZLfdIvFK5pjyx4?= =?us-ascii?Q?RA45shx9iAexdmic8Do9gbPQ74SMPRqIpfubjWTeZ4xqevDk2cuzNjKAgRXM?= =?us-ascii?Q?qaIUk0yd6ZEW6TjCw5xNrdOtZkn0cktuccPjqy1qS0xzsENsB3Cbdt2QMerP?= =?us-ascii?Q?4Er9GS5iqRLo+97gL9Vbtp4VV4Nt2+WmFYWvG777v/1LAjgmQZUFl4PToqGv?= =?us-ascii?Q?AT1JX8Vqs+klozW6WmLFVhIL056GAHljV6eOHaI4hiKCxO/DRd8DycBoHNmU?= =?us-ascii?Q?VVMsmsRbKSeailvHj/U2ftmNmjUoZcR3tGf6PQr20NY6PsWaps1HA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2470; 6:y432BG0TlpsVPAtPrd55HhZqqY2qaoEJ3EOo4sPBiHwVbnIs9M92Ts8YiY7cMtpz6c8D6jzWT2ctvcWq1eR5qBLNN7QNHLVLgzqnZiE/BBpUB9685zt3jV5xhyS5+oEvWADnw08hr/jDd4sB3Utrwmr+ZbVUCf07tgO/RmdHgkFvCQ6Yok/clc2Pq54MRUsKajUnieRwvPbHNz775saY5IV3FzH7DNT+X2qrkwUmEV1Cx+VYlEA6BjBAsHIBQwQjjsqUKce1bck0qyjIE9L67WlLgFTnRvQBCgq7Do4O6nTwEnGc+uS5BOaRk1AfheVj; 5:zPWW1IjaDEEzeZIN0COveOhRzOh6aYEHp6CNrdCLdjpGYbEJlXM6TYhzUZvTPGVudo9de8RmEweTsXix+hNv5vy2D+wCHecsmQSiFJerc4LhB6jYLCBu74Ibtl3TKguz9RC8VfOwxGit/OJcftVuQ7N1H1PRjwvtgpYpSm9V2pmpLq5c/l46P+CeIKAvSS4O; 24:JrDHtyzaG2K6GbB+gbpMKeEm29hSZLCIUyUq7oy6EuDCNWEqPossIplgU4KH9HPbb5mHa9Pqu4Z335h7OcTSE7GTMOZrx5w2QVjRRiYzbW8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2470; 7:xiw/CDrYwvlhS2wyin4aQgPFXxSbiMHvTNHPYKYnW5ds7PQTS2xBUWNjAb8wfByGI5dTU0qlEE2BHvcV02GDVskPChOZvFvUY9Wz60QFZa86rQ9IuusW6yHgtI/psGxekuPubxQLgmIEdtqFDF6S6O9U9nTsTsXsE+HXYntRUIasTVXyRru5IBb4fLTL8Pup8CfaYSXdF1wYav7ocYKvW5+WOgeiD/IdQE1rku8zQVgij+sPKtxdFAzUATzAZtnFvvWIbbD+gdkMC3WANsn4DP3RkdMMgNOAOQTenklDMtetFQdelb2g4WYJS3QSOH2++S/76NxYtiKNAP9mQ8TWgpViUa+FR6aKitOAiAHVj+I= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Nov 2016 08:20:27.9097 (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: CY4PR03MB2470 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: madalin.bucur@nxp.com Cc: pebolle@tiscali.nl, linux-kernel@vger.kernel.org, ppc@mindchasers.com, oss@buserror.net, joe@perches.com, linuxppc-dev@lists.ozlabs.org, davem@davemloft.net Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Export Frame Queue and Buffer Pool IDs through sysfs. Signed-off-by: Madalin Bucur --- drivers/net/ethernet/freescale/dpaa/Makefile | 2 +- drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 4 + drivers/net/ethernet/freescale/dpaa/dpaa_eth.h | 4 + .../net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c | 165 +++++++++++++++++++++ 4 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c diff --git a/drivers/net/ethernet/freescale/dpaa/Makefile b/drivers/net/ethernet/freescale/dpaa/Makefile index 43a4cfd..bfb03d4 100644 --- a/drivers/net/ethernet/freescale/dpaa/Makefile +++ b/drivers/net/ethernet/freescale/dpaa/Makefile @@ -8,4 +8,4 @@ ccflags-y += -I$(FMAN) obj-$(CONFIG_FSL_DPAA_ETH) += fsl_dpa.o -fsl_dpa-objs += dpaa_eth.o dpaa_ethtool.o +fsl_dpa-objs += dpaa_eth.o dpaa_ethtool.o dpaa_eth_sysfs.o diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index d59a08c..3a610fd 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -2635,6 +2635,8 @@ static int dpaa_eth_probe(struct platform_device *pdev) if (err < 0) goto netdev_init_failed; + dpaa_eth_sysfs_init(&net_dev->dev); + netif_info(priv, probe, net_dev, "Probed interface %s\n", net_dev->name); @@ -2680,6 +2682,8 @@ static int dpaa_remove(struct platform_device *pdev) priv = netdev_priv(net_dev); + dpaa_eth_sysfs_remove(dev); + dev_set_drvdata(dev, NULL); unregister_netdev(net_dev); diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h index 711fb06..44323e2 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h @@ -177,4 +177,8 @@ struct dpaa_priv { /* from dpaa_ethtool.c */ extern const struct ethtool_ops dpaa_ethtool_ops; + +/* from dpaa_eth_sysfs.c */ +void dpaa_eth_sysfs_remove(struct device *dev); +void dpaa_eth_sysfs_init(struct device *dev); #endif /* __DPAA_H */ diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c new file mode 100644 index 0000000..ec75d1c --- /dev/null +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c @@ -0,0 +1,165 @@ +/* Copyright 2008-2016 Freescale Semiconductor Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Freescale Semiconductor nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * + * ALTERNATIVELY, this software may be distributed under the terms of the + * GNU General Public License ("GPL") as published by the Free Software + * Foundation, either version 2 of that License or (at your option) any + * later version. + * + * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include "dpaa_eth.h" +#include "mac.h" + +static ssize_t dpaa_eth_show_addr(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct dpaa_priv *priv = netdev_priv(to_net_dev(dev)); + struct mac_device *mac_dev = priv->mac_dev; + + if (mac_dev) + return sprintf(buf, "%llx", + (unsigned long long)mac_dev->res->start); + else + return sprintf(buf, "none"); +} + +static ssize_t dpaa_eth_show_fqids(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct dpaa_priv *priv = netdev_priv(to_net_dev(dev)); + struct dpaa_fq *prev = NULL; + char *prevstr = NULL; + struct dpaa_fq *tmp; + struct dpaa_fq *fq; + u32 first_fqid = 0; + u32 last_fqid = 0; + ssize_t bytes = 0; + char *str; + int i = 0; + + list_for_each_entry_safe(fq, tmp, &priv->dpaa_fq_list, list) { + switch (fq->fq_type) { + case FQ_TYPE_RX_DEFAULT: + str = "Rx default"; + break; + case FQ_TYPE_RX_ERROR: + str = "Rx error"; + break; + case FQ_TYPE_TX_CONFIRM: + str = "Tx default confirmation"; + break; + case FQ_TYPE_TX_CONF_MQ: + str = "Tx confirmation (mq)"; + break; + case FQ_TYPE_TX_ERROR: + str = "Tx error"; + break; + case FQ_TYPE_TX: + str = "Tx"; + break; + default: + str = "Unknown"; + } + + if (prev && (abs(fq->fqid - prev->fqid) != 1 || + str != prevstr)) { + if (last_fqid == first_fqid) + bytes += sprintf(buf + bytes, + "%s: %d\n", prevstr, prev->fqid); + else + bytes += sprintf(buf + bytes, + "%s: %d - %d\n", prevstr, + first_fqid, last_fqid); + } + + if (prev && abs(fq->fqid - prev->fqid) == 1 && + str == prevstr) { + last_fqid = fq->fqid; + } else { + first_fqid = fq->fqid; + last_fqid = fq->fqid; + } + + prev = fq; + prevstr = str; + i++; + } + + if (prev) { + if (last_fqid == first_fqid) + bytes += sprintf(buf + bytes, "%s: %d\n", prevstr, + prev->fqid); + else + bytes += sprintf(buf + bytes, "%s: %d - %d\n", prevstr, + first_fqid, last_fqid); + } + + return bytes; +} + +static ssize_t dpaa_eth_show_bpids(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct dpaa_priv *priv = netdev_priv(to_net_dev(dev)); + ssize_t bytes = 0; + int i = 0; + + for (i = 0; i < DPAA_BPS_NUM; i++) + bytes += snprintf(buf + bytes, PAGE_SIZE - bytes, "%u\n", + priv->dpaa_bps[i]->bpid); + + return bytes; +} + +static struct device_attribute dpaa_eth_attrs[] = { + __ATTR(device_addr, 0444, dpaa_eth_show_addr, NULL), + __ATTR(fqids, 0444, dpaa_eth_show_fqids, NULL), + __ATTR(bpids, 0444, dpaa_eth_show_bpids, NULL), +}; + +void dpaa_eth_sysfs_init(struct device *dev) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(dpaa_eth_attrs); i++) + if (device_create_file(dev, &dpaa_eth_attrs[i])) { + dev_err(dev, "Error creating sysfs file\n"); + while (i > 0) + device_remove_file(dev, &dpaa_eth_attrs[--i]); + return; + } +} + +void dpaa_eth_sysfs_remove(struct device *dev) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(dpaa_eth_attrs); i++) + device_remove_file(dev, &dpaa_eth_attrs[i]); +}