Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751891AbdGEOWh (ORCPT ); Wed, 5 Jul 2017 10:22:37 -0400 Received: from mail-dm2gcc01on0117.outbound.protection.outlook.com ([23.103.201.117]:23776 "EHLO gcc01-dm2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751638AbdGEOWa (ORCPT ); Wed, 5 Jul 2017 10:22:30 -0400 Authentication-Results: spf=pass (sender IP is 131.225.12.125) smtp.mailfrom=fnal.gov; cern.ch; dkim=none (message not signed) header.d=none;cern.ch; dmarc=pass action=none header.from=fnal.gov; From: Pat Riehecky To: CC: , , , , Pat Riehecky Subject: [PATCH v2 02/05] drivers/fmc: hide fmc operations behind helpers Date: Wed, 5 Jul 2017 09:22:07 -0500 Message-ID: <1499264530-5859-3-git-send-email-riehecky@fnal.gov> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1499264530-5859-1-git-send-email-riehecky@fnal.gov> References: <20170705102713.GA20907@mail.gnudd.com> <1499264530-5859-1-git-send-email-riehecky@fnal.gov> X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:131.225.12.125;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(39860400002)(39450400003)(39410400002)(39840400002)(39400400002)(39850400002)(2980300002)(438002)(199003)(189002)(50226002)(107886003)(38730400002)(106466001)(2351001)(2906002)(76176999)(8676002)(5660300001)(33646002)(8936002)(50986999)(7636002)(6266002)(48376002)(50466002)(54906002)(189998001)(110136004)(5003940100001)(53416004)(7596002)(47776003)(356003)(4326008)(86362001)(305945005)(36756003)(575784001)(626005)(104016004)(6916009)(478600001)(4720700003)(6666003)(2950100002);DIR:OUT;SFP:1102;SCL:1;SRVR:CY4PR09MB1477;H:smtp-ux-prd3.fnal.gov;FPR:;SPF:Pass;MLV:sfv;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD021;1:x27NBeDGvVJhkW+TOYX4Wzfw1L5S6+GKcP+0FaQC7GkPuQVQl00e/J6/nCYy0dEStc9AD63owzmEG+0+zla4IFepRtlNSl2rWlMxpI0dJidLzCxzG1RQ+CZBebu04giERJG72O1j1z8njwdBmwhTTjWsrw0CNKvWyaXjzDZyx16Cl31fPIdkYG0UqUbOYwVOpUn1/I8rBqadJc+HGQcItmwbA3LsXLdPoQ6VDZ3pjGxXw98U+GWVk/pVCazeiUzdP0QrXnKqC1WK+rwNiyvKm1Vg8Jf0x6diKiq67Tr144VRIq+MfPsYnyKdVpmcH3Ei/tLCLV3SWlbv1LELHK1wy5Acr5Uh6q6iotXPhxUBzdNHceBENuzV8QjPuLbd979ZoYNLrwdcpYG67YXuleu8T1y/9gsOr+WJ5z7nffemcR6NsGlBfNFyXXaE5LP2NWmXYTYiLNhRpa7NdcGDqg9gt6XHZervM3oFlz/56tLHCdgvkKW/UrrmctAizNO4FuWB/l2DZwDgMg3fzOvqikqRAxAdgUGTtzD5UVcpUlNaUbEYCTYzS+fLBlEGPSjPOCgyGllznqrKePy5d0daCU528n0vFFRhNfS3X18cYksy5oCUxYO4zpogbNVH06Zz8UuBNdegPF/xlPvbm9JjwBaN6/Ank5qVq78nCduXa40ys8SnvGmVc+CBXdRl743wqU4y8A1bl/CYECiF0p453gjXgVN+sgzVMTjDulwLDKMYTLD2QW12K9M70dTuPa/jV+KTopq+aGtfBs3hLa8KBE1xCj74y0+adrAFDp8USqmAgnjnvhKzHMnRBLjl2Zh4LHAp/pr+RYDpfgi2aA1mPbvbNkY9hDr1b7xURX4ZKSyQkngys6rPjF5HL5sJIgtWxdvk MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ed5f7296-14f6-4a04-10e0-08d4c3b143a6 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(8251501002)(2017030254075)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:CY4PR09MB1477; X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;3:Et02qJ08JcST6iuB9TbGMz3D4WjHizaB0YLZlO1XJqtlkQzohb3Kag2vTqwnyteVGCPjBn+I5dX646uJaTjjoTEgERi1AcwOxop82lZxgePAOABIB01n2Z+87j/c/iknHKnsryb+AILQleuj+J1PIMjtLCNEzvr4tb8Lh+WIK4DjHuiVfp2uKESnlrrbnrZMFEV2tA5OktcU+Z+AOBQd4U1dYw9J0ulP0azG9Jt4IyUluaXn93XpmtI24P93Kq35nKCoMHjYOQ4fV/zptHrIWY6U9HqiqgO1eHsLHDfXGAAYVlC4x3yESxkYb0OXPuR8AC8jZxU48ku1J3ddVhJruFuPO9ArqaxTvjFGvixloBSv4HYhr7z2ISUnGb5EwVX1rJYdfyACAKof8dTUUyb6TIwLFGLtUQe/Q2hFkYnCdCuFZXMVu92CPCi1Zzc11myXD4nlc8t3GCc/zOjsKxxjWeV2Wo4DkTP5mVqSSzCirpEq0eWL6wRFkS3S5FjGIIPknPVhLhYhEwO8l7SIyVS4oO0V9SU8yLXF13WydEjhYc0j/gaP/0KcJ2ItrWgEFeHzjnHYkTfZaBHDfea3Vgs92ceaEF4D8fWXjKGofLDAi+0gixFRHSX1ewQ6LwafA/pM96cA1J8cKNcQCQBZxg+dY/HvVPz2vml/AOrN2ESn8fAwaWYyW+TLcIZI2EQ/47W1sBZW7TEYU4mGdJ3+ydmEa262KJRztfOPGq9DMPvXfhsE38992uGlRM1YlzuKGO82bPwcC5ufIbdon5apQogUnc2ryGEWAxI6xlsFVPsUzDksmtGNLgxV74kbLmBz7Okw38tRVyqYmaPZNoLLQEYcGSwLAinA1L7g/RtyVHNCcNBn4SaSjkeVkbsoaHWVC8hvR2H/UoQFSMqzPHyLklmiiQeyNPUylldH96+wX3S5qStLwe6wfVXCjsOYgbQv9Xc1 X-MS-TrafficTypeDiagnostic: CY4PR09MB1477:|CY4PR09MB1477: X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;25:OeQWVabeB62qgRHItRdktfFVLthPkUrhOOvjG1xFw0iCjMZU9dk2Sz4wTO0lanEeiBU7ChTaOET2myYzlIRouE/J+QLlNbp2bRGfSdlNY/kKvmDSAppWRpdKPTx5ATAdIi/5ATvwRTfoKisnGWBbi0PO3txQ4N7X2EOmfzAi+0qsowKG8i+0UwDHSi/Q9zq0Vn+C3UHGhcZODtfQu5ctcj9gWf/dPE0/LPIkkxMLZFAIO742n9RGw36W1pxjs3JWmDjsbrH3mZ5ZxPr9NQOEsfziLfGW1EuR7jg+DyZC6XP8x3PBTfdfXkVgtzy71iC79lChdQYTVb2Ex5NoUnOP1z/5PsZfB/OVb6OxdJjpbR3fEewaNdPghH+EcYuQbhtcKqyniqgWrE2eMSoJsKcAuDuRfCoWduI3IxmwPnePnu+v4lMMTtMF7l0qRMrMhnaBLzy1SHzJF4gC4zD55aHwsJRVci3jGgc8PJGa0YbQJs5aqVI/0kZr2v5Wj/p/mEMT1K1P4UAMj7dGBEIkFm//787ZlrbrUWmK4tR8Pfqn0tlLm2eLsfbNTLMJmV10k9yPlZgbP4Hs0tRMWMiwak8BJiBIh1K/E864D0qvHPKLPy58SsIbfZLKUNCs2Xxuu7vY21qDGbV/5Youj8ToLjDnN3fKzvB7vGIEKl3meJa1DdtVm5a4yieRD0o4xqqpIJpCp/vmnJgkAE+MBo5QAAdGk+vtsIV18dPToycqzq00L/f6stMoViNSaLE7fa0Pk8BDLMSYEhtHoCVBg7RNPAZ6Aj8rZuTrWFbgdCyQ4Ta2My5oaF9Ych0YzVcYhT8gGUZs5L9zbnhHRBgJBaP3T8AwcUl3K84rJxKNbIWDsw+F/K6HGum4SSCfh2YFx3S4uQUmjttdiRUHGJAZ8fH1g2lnEVUJFZV72L16NvtTm2mZOG8= X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;31:GKpe05TQPMttZHB9HKFTEsS/OXPAezjsKj4D17KbAh1DtafNwIH9Wi1xR45TmbvZOeoVLnp3iX/x85UUjSFMXBlMefiwz4xJrWs7kEz8W3y+Dbm2W72Pjtd120CuoJZnnOqI6FYUr+G4DYeSJRprQtz4WbhZQ93ApnINNwTZKAs8LsDUpwFQQrESB7oCP+rs71UL3qDqIDrjl1X7k78i+piHaiBOqjd5edeyfKhXu4TKPCrIylSud/CymMYPkxIx3RpD972tddWzrMP8mdGaqnEs0n3XDEm67Hm+2hI2EwFXmR2bVOeSSyIg4MSuWH3WxQE4y4SYdtt/wbCysx28zNBCocGVfDQRgswcwTQhkVFkWreRHtt9u7sMCSRMljd3pFR1RoDwiJM2wjEeUQI2nTu3u+mMyCVy7xx1AJxuz6QSYdxG4X6IlTVIlYtGboNho6gLcW8w65gtEru5kHSnq3pbsP33g1ViyJ/HNK8ImTBQxPjt56AK4gRG2UF1R+FucJnw6yGgJcyItNz+Q7fbFiKKAJJQNx3wobFPwcAdluU2HiJnnER3Km18mxRQi//n87Zgxx1zIh46SSSNrdjgbkia6Xom8iHi/S02m4vQvVYrxrHba80EEOYHvxnF70v+2fPEwrr2tWaVdqO9T3IxMqFCiOS3zebkfjNJ+810KZ8= X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;20:gB4Dh5J9EaI/d8yOx+mhgkklqiPpNtRWtt18DNmXEtNf55uk6dtDmBUZy1Jw3GugRa3Ae1EFx79sYplHHZYraiE/KK0qO34FFmp6W5RX3zZyq3n3LoJiCTEe3I3MPWSysKki68vOpoNC/ql6oV/bH35rLuVOq84CLUXyfkf1DmlWc1Z/47QE1cykaYC9nN3hgkI5DzkS9jBQqfmCUrx3c6DSNfJaxwUrV+uE2lF3pgQ/00eJWMX88BKFJepMR8PSztxigzubVr1Wte0vxNDrapEqttIuZuIc0EC2uBUXdDnd2cah+9M50+2ekGdtR6Y8HTy/Uj+Srgx69t3ESof91dEQLN6ZDowJJsyvYokgukj/7s1BZvsMPd3j6Wc3sqqEsboWGEmjoz/+iuR4gt70QXVLR+KxVOoBRYSjJ9rkaL3x1Omkspwcd868WiWgxjWF5Iyscmn+8L18OsgoWLpdRJt0YeBcZpAkJESNDvb5xCH3URbtgyeZGc0cjZ956KhR X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(40475595445134); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(13016025)(13018025)(8121501046)(3002001)(93006095)(93004095)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123564025)(20161123555025)(20161123560025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR09MB1477;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR09MB1477; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR09MB1477;4:qAl9mnCYFoV7YZCp2OApWFc/gOhpW4Y7amTRaCw/3/?= =?us-ascii?Q?JXl2HBA7HLBxGc3yS0GEgTosDS9pT9XBtc3kmg6kQD+JrSdjC7Wgg02m7nTz?= =?us-ascii?Q?FrExhZjheC4C9NeqRiW+/o420jH1n14ffSEf66l8ecS7nGs5dAn+xEsuAA7r?= =?us-ascii?Q?ijVb7rPf8iqQ3uOqvB5ni8/HJ4jTLwmgPqxPlUg3Q9E9nHLPp9ZaTkEfR1VG?= =?us-ascii?Q?X1w19Rl7IuCuJuNxLPmf63Zf/D9nPRffi1wVEboEQblTGbXjVSJZrco9DCaV?= =?us-ascii?Q?C0DHeWMlacDz/hTCIKt7fAgS/lZtSDl1m3RnDy96PnYEfcdLXnGuklXmmyc9?= =?us-ascii?Q?IW2jWrj3l/D+8YRN7zL/ewCArq7ZfZFoRo7pYaHcf7HHIjohfPgTa7oDQoPy?= =?us-ascii?Q?lGsQtTU7Bn4BSnLEi/B6rUHoOuVMS2LgTy9ONrNSCz7fKnJ7wl38bC2xjydB?= =?us-ascii?Q?qAUFcXOERORplD2X6akW7vrQURQeoCwbIjCpmqzFHPmjtz9v0eWeDhjK/lCZ?= =?us-ascii?Q?OzuNlzmChtiYYffWIln8qW4hTvaYLhXzEjIUrkEZsz5NebAXZ5qxL9tRJz8F?= =?us-ascii?Q?VO/s/QV9St3cDITkywEiCZULBwH8a4yB6IFHZUmjlS70MvVZCtAn5/Y4R1Zn?= =?us-ascii?Q?MkQXEcr7D5p+zsziThPzAP29Ti6voDiQQ6nY5ZuC5rpWpExqWMqnirmWAmkb?= =?us-ascii?Q?EeSoipDJdHg8Vtu/QHeyI3DV1xW5ElSQhsfzyhCxzV//XlwyWXf/2W7uW4WA?= =?us-ascii?Q?KHI9rj3ckMwRLJLyQrmIV3PJQOPnKcyDMNhEnHafS7+2+LPSdZ3Qf/3e/F7G?= =?us-ascii?Q?4/UyWu90TBaOr8+fUd2ebOnNabsaPxZi2DOfvchcIAnJqF3CJ3oaR8sQeSGD?= =?us-ascii?Q?NpxddYvWZkT44mA/B9PCX1GMCU0RpeVDbMzDHS3Ev0pJsPjR+2BojqQ3EuM4?= =?us-ascii?Q?RgWZH3M2qSpXqJv4AVHjSebuz8dj/qepFU5kqux4Q/hraHm6zUk/QEu7B7V+?= =?us-ascii?Q?R3nuGimRr3eAgFIs7GXrckm32MxNnOehPc2WrPH1ID7ePd8zshVsaWHm8U22?= =?us-ascii?Q?QagiiZevci9M0h0ZU+lAk9djDceKFm5XXD/7sssotns5TS0ouEsu7RICVlFl?= =?us-ascii?Q?rlXJoPWp7LnV0BmfXLh8wDLWe1U/QP3qKLoWBDKel1cYl84ljwyl02oHrQHE?= =?us-ascii?Q?kAZ0n5A2zGbaNxl+Fdko2SYW/nm3/EYVlvF2e2NUtp+w+ATYQr68LgVAJkfU?= =?us-ascii?Q?5zy3OwWtZicG/bKbEa5rn30gfn6j3Z5BZddP1a0y1iV+p+i0kh8AyynBtPAg?= =?us-ascii?Q?=3D=3D?= X-Forefront-PRVS: 0359162B6D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR09MB1477;23:zuSCuTpx39bm8GXcH5Zsu6T0K5bOcipy4dNEoTnXK?= =?us-ascii?Q?iOJD4yRvzZXKCjddwblcRHseGkqPexwoO2pQnGvMQMBVmW13eqLvV8Si/W+P?= =?us-ascii?Q?4ZHe4aOIYRqOhR6HBy5/+Nj+s5uFBNHBV8VEYHvnmX0U87sGgT5UzssrQiwq?= =?us-ascii?Q?iaCy/9BbHyPNWyKB9f3VjO1loU3HS73uMr8+jlaFY6CXiPMHytqksgFieGLU?= =?us-ascii?Q?GMuW7JRru7C+xUL251TsW04N27ECskkFrcCJNwwg8cdWWabM9tIn1jk87JRC?= =?us-ascii?Q?ypuLYYhIEgJc1Z9V6A7TNGeoMH8aZkr7/Yv/R5ZdsEHypzLoP6PVXkx9bIVr?= =?us-ascii?Q?JAwLrLQogf7dyU8K4qUY7/gsHQMmIvoIKm/XQg2XgFZqb2lQXbygSpxS8OaY?= =?us-ascii?Q?XcOMsdB7ppmRSEPp9+UU+4c1drJp3nTBUkBRrsYDz6UNZXURqY1rCwe7RQHA?= =?us-ascii?Q?Z3Gf/cohzd9Flvymddg9H/gom+ZdRLPldO4R6DvFDeAJDrpaJ9LSck4G5CHN?= =?us-ascii?Q?xZCIeTW1DZok0haC4c4xwPhUuWWe+CIfJwy28JgR0Z/aFdjqMjSEXeQm8qHQ?= =?us-ascii?Q?ccxDBVFJTQMBaFQiBI08s8fi5O7d9DsXU1LkBZd6MCSiqe6WuJWT+VtIPHYF?= =?us-ascii?Q?oxhqp2KrH/lDViEXyk/Og7hXihlo36lMbf4xCQxz7kLhT84qJYMG0jrnVMi3?= =?us-ascii?Q?PjnmRukdWW7SYHAtl9mErdy4TbTT/gyyNshHcYLB9007RmLs5UVvuwu8v8Jr?= =?us-ascii?Q?TV/ShR1EAo/gDmx8DqUiazDfb4FLnCgf9Mq1kncsIpe14LJW7mpL9gxJB5GD?= =?us-ascii?Q?Whm02G9MxAYkD9YqbmE7ygsFfDnh2HH4UOKcHfDCO4s8B36PZttEA+ar9DDq?= =?us-ascii?Q?jRFX9Ic/cBLj5GDl/LnPIX6jx32jOSTMgkwavInsf99WVGeR9vRJ1IfjfoGL?= =?us-ascii?Q?3p77DuT5XDJapLfx+tLUYkSy6PCmYBoaArO9OOnHBABrUHJ70mkkJlR9hlat?= =?us-ascii?Q?5FIughEh0aIuPkrBCjgVbOTGjksKkg1sdK6Nj1d+/Mf7zXEhnmVa1BDICAEJ?= =?us-ascii?Q?r6JvM9K0fk3n1qhCfJkcUPwnbD5J7X/LOuRgn32nzX1FVfAC5HUz54HRJuDx?= =?us-ascii?Q?yVvCWdLKfEmHvFvFxfzglUdjMogwrJfRY7blNVuQIiVWZUd9J0xrA=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR09MB1477;6:5C5aIsZI8pem5C+4wjDoQLHoI/lXXDJKNiUFbmdinu?= =?us-ascii?Q?yqwNt3zStS6OHZxu235fbxAHDJbKg/4AvCHaPYieDUgao8HL3gO9wuDZGcXu?= =?us-ascii?Q?8im41ZxkD7T5er0OzujvGobWS2GFUBjeNWhv89Th3GWOxmr71//XgcEPsKUB?= =?us-ascii?Q?JNl60aOIn5MxFucOY/vrZ6+WWXE3B3pS1N9jvmJNg5S1fW4FtQBucGrEJFKF?= =?us-ascii?Q?9yNLkrsQsvVMCnQT9lPSnreYNgG0k2VL9zdcZx6UIn+GnpPXf6hVlh88nEuu?= =?us-ascii?Q?wQY7r9gtVFjB+1Et9sOTOpzIS/eAcmA87/X+oG9OzznpYEEBFSJnHRYCGOSK?= =?us-ascii?Q?yGSURvGiZtXtXws+Ylpf8CswDiGK8uhPGqJaN6IXWartcza+0YnDqsYGoSMn?= =?us-ascii?Q?ZZvyxvXnkd3ISyHWLBwJIYDx7KHmSBZ7irAIHhoh4CwDt82K7WU2RVwbr7Zj?= =?us-ascii?Q?NmSEBi0IKsPxKZ8g7jDb9IuANqxJpb3FWrT5ia/lzUWTW7TaGU2VbqRn8q9l?= =?us-ascii?Q?0rMHvS5afxWp7flO17cWSL+Dugu3mr7JYmbE8o2L2mUEKhjaH3z4PsbhhQ7B?= =?us-ascii?Q?GHe0x88SRDxASWxnk8+myhjNc37nRKPteD+dkqeKYznkUxThdqkhiaTdk59C?= =?us-ascii?Q?uPTXPXaTRuPnebWy5DliTgOX1Ei39mTf5Z1Ik+FKRylNLW/bl3+eLMKdd/qs?= =?us-ascii?Q?GWYZH/BNY3k0GpSdEJnDw4hNw9YKngZuSG7BSRbSvC5E3/+kg08qifplhwiQ?= =?us-ascii?Q?9iLuDZSWlKy+vv//0WvpERvDsyUKb+96MjO58NW6rUX1DVcoTSwAlEVIEp1B?= =?us-ascii?Q?gh4ENXS57qe6TxyUCyC/vtjaOkhF0trZq+uwqiDBuDwSizaYWk6lK0XQx9ZP?= =?us-ascii?Q?R8iVTW1wfmrur5sygGEZuQMBCrYapd3p3+/4RdxCXIT0RCSUqOdDLfcbHfFY?= =?us-ascii?Q?XgAtzofaVjEBweHXfm7uf5o8VJGVDSf99Z5yVy6JF2lZQHPjawmU8bRTG1pI?= =?us-ascii?Q?ui5fj3w3HYAJd+9UnJ1o41?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;5:+1N2KUm1yYD7oX1X+wJWE8+cDQiuPBKk4JgDB2prU8+8caNzXrOSYg7+nOW8mclFkyA17THb5eJ7L2ngkuPQmYMWWyzRr8g3uWhqdKvQF3fVBXNS/euwLuUKX8BN6JCQSWK3LoAk1f7zR5wf5W1tsPbHvihsG8QL1+GHTJcxHuQbRAFZMOpkTZeO5Ut6XXzn/ArKIO3x0xw2KZ40wi/b0N/62qSG57fFnIQTYsaadkfD3ZG2DnTce0fQezKOWB7SZLhJmKwUPQWfYstkMYaVy2eYvk9it54mEnETK0URb1JDp44SZS4OmCOeYRxiWCcIJ/dTScLVvc3bHcylm+byr1uHLxqB0WsNkjUtFSh0F87H+QHvaiaybLtLgUpOTRKBK++K794/pdPbSFqglqlmV7s+gP8wI7CA5kA7j5NYHv0yjjJFstmmrQKyAGLK/kOeGdDtsJStQu9r5zSahWTXhgLtBjh1RPPCojM1msorwfCFi3zMFR1xJyxDIDGRKi+m;24:aQ/jqwYxXvaPmZlmukpybcZBvAA2UgWylPbgHW+5QdbyWiFANIoRYlAOhxJhT1g6EEiz4Duo/dINRjasy8BFby8musXWiPtkpng8YBt7jPM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;7:ZpBUVCf17g3mUMb/TiYe0TAu8qnZCmA4bHGiKZUjxLEHbiNnXFZX/IR/a0X02Cc3mWUQGX6aNkYEdBbu6sGUG5UVLyrESQDe7w2vGwKUqa5x5idpLy4qjEOw3aux7nWRvF9kLPOmN1Fmw0BV86kuvH7hL+Gb5bva2oR9UBZ9v6o5CAMVkgiMpyA44YzZyzP3pq1vDN30fbiq8rgSNW0AikwcIU1+fSQBivbcLT0gJHqiyGbIbCo9LLAt/14kgzk4MuLU1W+q8y/XXG+XrY+UOsfnHOa018YfhD0QUnZ4qSzsEA87x40wyFJQ04CIcR/oR5GHH3caWqORA5ciiVqdZzkM8i5Q7wCjIxngF3y+ZnLKVLHRYmAOmtkUG6cFboNPOfoqvfuMJX2IByXomclWeHiEaaC9SItPshPGodQhpELKMfZMakEmirrq3D1Nfh8GqjZ7DBv4KiFF099QXe6u3Zyo05Rx0tDE/rvArGFdEgk/A9Abbqaweq+AJNJfBDMt1f1Am8XlD0d/IpBSNULY0HxTs2hjxsc1+8bb7Qge7Dp5sarbb/GLdWuNYU5/mQMtRVkPAxirBvFrP2RBKSXZVE8foDnOrtGtcX9e4I1MGkKJl9EEc8Ni7MDKaMLlq7Awmvv2vFkgENHKhvjHOnm5eVvx1rdVudkUFEJx9s/mZ+5n37Yzi62nxnu7ocNUvjE240xvotAMZ8K2IEnOfoxdy/i6olWkIrIhMLyGZlOtUsKcXR6F/CadzM3J9GTSDcncd9oW3X2cwEwmkGwzEEZ+O8SLXu9FcO8dtIj/wM3IHMs= X-OriginatorOrg: fnal.gov X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2017 14:22:27.6575 (UTC) X-MS-Exchange-CrossTenant-Id: 9d5f83d3-d338-4fd3-b1c9-b7d94d70255a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=9d5f83d3-d338-4fd3-b1c9-b7d94d70255a;Ip=[131.225.12.125];Helo=[smtp-ux-prd3.fnal.gov] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR09MB1477 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 7202 Lines: 227 This gave us more freedom to change/add/remove operations without recompiling all device driver. Typically, Carrier board implement the fmc operations, so they will not use these helpers. From: Federico Vaga Signed-off-by: Federico Vaga Tested-by: Pat Riehecky --- drivers/fmc/fmc-chardev.c | 3 +-- drivers/fmc/fmc-core.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++ drivers/fmc/fmc-match.c | 2 +- drivers/fmc/fmc-trivial.c | 20 +++++++---------- drivers/fmc/fmc-write-eeprom.c | 8 +++---- include/linux/fmc.h | 18 +++++++++++++++ 6 files changed, 87 insertions(+), 19 deletions(-) diff --git a/drivers/fmc/fmc-chardev.c b/drivers/fmc/fmc-chardev.c index 38aa7c4..b3eb6a2 100644 --- a/drivers/fmc/fmc-chardev.c +++ b/drivers/fmc/fmc-chardev.c @@ -129,8 +129,7 @@ static int fc_probe(struct fmc_device *fmc) struct fc_instance *fc; - if (fmc->op->validate) - index = fmc->op->validate(fmc, &fc_drv); + index = fmc_validate(fmc, &fc_drv); if (index < 0) return -EINVAL; /* not our device: invalid */ diff --git a/drivers/fmc/fmc-core.c b/drivers/fmc/fmc-core.c index 0189518..60e568d 100644 --- a/drivers/fmc/fmc-core.c +++ b/drivers/fmc/fmc-core.c @@ -118,6 +118,61 @@ static struct bin_attribute fmc_eeprom_attr = { .write = fmc_write_eeprom, }; +int fmc_irq_request(struct fmc_device *fmc, irq_handler_t h, + char *name, int flags) +{ + if (fmc->op->irq_request) + return fmc->op->irq_request(fmc, h, name, flags); + return -EPERM; +} +EXPORT_SYMBOL(fmc_irq_request); + +void fmc_irq_free(struct fmc_device *fmc) +{ + if (fmc->op->irq_free) + fmc->op->irq_free(fmc); +} +EXPORT_SYMBOL(fmc_irq_free); + +void fmc_irq_ack(struct fmc_device *fmc) +{ + if (likely(fmc->op->irq_ack)) + fmc->op->irq_ack(fmc); +} +EXPORT_SYMBOL(fmc_irq_ack); + +int fmc_validate(struct fmc_device *fmc, struct fmc_driver *drv) +{ + if (fmc->op->validate) + return fmc->op->validate(fmc, drv); + return -EPERM; +} +EXPORT_SYMBOL(fmc_validate); + +int fmc_gpio_config(struct fmc_device *fmc, struct fmc_gpio *gpio, int ngpio) +{ + if (fmc->op->gpio_config) + return fmc->op->gpio_config(fmc, gpio, ngpio); + return -EPERM; +} +EXPORT_SYMBOL(fmc_gpio_config); + +int fmc_read_ee(struct fmc_device *fmc, int pos, void *d, int l) +{ + if (fmc->op->read_ee) + return fmc->op->read_ee(fmc, pos, d, l); + return -EPERM; +} +EXPORT_SYMBOL(fmc_read_ee); + +int fmc_write_ee(struct fmc_device *fmc, int pos, const void *d, int l) +{ + if (fmc->op->write_ee) + return fmc->op->write_ee(fmc, pos, d, l); + return -EPERM; +} +EXPORT_SYMBOL(fmc_write_ee); + /* * Functions for client modules follow */ diff --git a/drivers/fmc/fmc-match.c b/drivers/fmc/fmc-match.c index 104a5ef..a0956d1 100644 --- a/drivers/fmc/fmc-match.c +++ b/drivers/fmc/fmc-match.c @@ -63,7 +63,7 @@ int fmc_fill_id_info(struct fmc_device *fmc) if (!fmc->eeprom) return -ENOMEM; allocated = 1; - ret = fmc->op->read_ee(fmc, 0, fmc->eeprom, fmc->eeprom_len); + ret = fmc_read_ee(fmc, 0, fmc->eeprom, fmc->eeprom_len); if (ret < 0) goto out; } diff --git a/drivers/fmc/fmc-trivial.c b/drivers/fmc/fmc-trivial.c index d26a174..7c03946 100644 --- a/drivers/fmc/fmc-trivial.c +++ b/drivers/fmc/fmc-trivial.c @@ -18,7 +18,7 @@ static irqreturn_t t_handler(int irq, void *dev_id) { struct fmc_device *fmc = dev_id; - fmc->op->irq_ack(fmc); + fmc_irq_ack(fmc); dev_info(&fmc->dev, "received irq %i\n", irq); return IRQ_HANDLED; } @@ -40,25 +40,21 @@ static int t_probe(struct fmc_device *fmc) int ret; int index = 0; - if (fmc->op->validate) - index = fmc->op->validate(fmc, &t_drv); + index = fmc_validate(fmc, &t_drv); if (index < 0) return -EINVAL; /* not our device: invalid */ - ret = fmc->op->irq_request(fmc, t_handler, "fmc-trivial", IRQF_SHARED); + ret = fmc_irq_request(fmc, t_handler, "fmc-trivial", IRQF_SHARED); if (ret < 0) return ret; /* ignore error code of call below, we really don't care */ - fmc->op->gpio_config(fmc, t_gpio, ARRAY_SIZE(t_gpio)); + fmc_gpio_config(fmc, t_gpio, ARRAY_SIZE(t_gpio)); - /* Reprogram, if asked to. ESRCH == no filename specified */ - ret = -ESRCH; - if (fmc->op->reprogram) - ret = fmc->op->reprogram(fmc, &t_drv, ""); - if (ret == -ESRCH) + ret = fmc_reprogram(fmc, &t_drv, "", 0); + if (ret == -EPERM) /* programming not supported */ ret = 0; if (ret < 0) - fmc->op->irq_free(fmc); + fmc_irq_free(fmc); /* FIXME: reprogram LM32 too */ return ret; @@ -66,7 +62,7 @@ static int t_probe(struct fmc_device *fmc) static int t_remove(struct fmc_device *fmc) { - fmc->op->irq_free(fmc); + fmc_irq_free(fmc); return 0; } diff --git a/drivers/fmc/fmc-write-eeprom.c b/drivers/fmc/fmc-write-eeprom.c index aa88f02..de1c113 100644 --- a/drivers/fmc/fmc-write-eeprom.c +++ b/drivers/fmc/fmc-write-eeprom.c @@ -50,7 +50,7 @@ static int fwe_run_tlv(struct fmc_device *fmc, const struct firmware *fw, if (write) { dev_info(&fmc->dev, "write %i bytes at 0x%04x\n", thislen, thisaddr); - err = fmc->op->write_ee(fmc, thisaddr, p + 5, thislen); + err = fmc_write_ee(fmc, thisaddr, p + 5, thislen); } if (err < 0) { dev_err(&fmc->dev, "write failure @0x%04x\n", @@ -70,7 +70,7 @@ static int fwe_run_bin(struct fmc_device *fmc, const struct firmware *fw) int ret; dev_info(&fmc->dev, "programming %zi bytes\n", fw->size); - ret = fmc->op->write_ee(fmc, 0, (void *)fw->data, fw->size); + ret = fmc_write_ee(fmc, 0, (void *)fw->data, fw->size); if (ret < 0) { dev_info(&fmc->dev, "write_eeprom: error %i\n", ret); return ret; @@ -115,8 +115,8 @@ int fwe_probe(struct fmc_device *fmc) KBUILD_MODNAME); return -ENODEV; } - if (fmc->op->validate) - index = fmc->op->validate(fmc, &fwe_drv); + + index = fmc_validate(fmc, &fwe_drv); if (index < 0) { pr_err("%s: refusing device \"%s\"\n", KBUILD_MODNAME, dev_name(dev)); diff --git a/include/linux/fmc.h b/include/linux/fmc.h index a5f0aa5..8bb4a15 100644 --- a/include/linux/fmc.h +++ b/include/linux/fmc.h @@ -234,4 +234,22 @@ extern void fmc_free_id_info(struct fmc_device *fmc); extern void fmc_dump_eeprom(const struct fmc_device *fmc); extern void fmc_dump_sdb(const struct fmc_device *fmc); +/* helpers for FMC operations */ +extern int fmc_irq_request(struct fmc_device *fmc, irq_handler_t h, + char *name, int flags); +extern void fmc_irq_free(struct fmc_device *fmc); +extern void fmc_irq_ack(struct fmc_device *fmc); +extern int fmc_validate(struct fmc_device *fmc, struct fmc_driver *drv); +extern int fmc_gpio_config(struct fmc_device *fmc, struct fmc_gpio *gpio, + int ngpio); +extern int fmc_read_ee(struct fmc_device *fmc, int pos, void *d, int l); +extern int fmc_write_ee(struct fmc_device *fmc, int pos, const void *d, int l); + +/* helpers for FMC operations */ +extern int fmc_irq_request(struct fmc_device *fmc, irq_handler_t h, + char *name, int flags); +extern void fmc_irq_free(struct fmc_device *fmc); +extern void fmc_irq_ack(struct fmc_device *fmc); +extern int fmc_validate(struct fmc_device *fmc, struct fmc_driver *drv); + #endif /* __LINUX_FMC_H__ */ -- 1.8.3.1