From patchwork Tue Dec 6 20:30:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9463241 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id AB30160236 for ; Tue, 6 Dec 2016 20:31:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9C43F284C4 for ; Tue, 6 Dec 2016 20:31:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9105D284DD; Tue, 6 Dec 2016 20:31:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2E2AC284C4 for ; Tue, 6 Dec 2016 20:31:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752682AbcLFUbq (ORCPT ); Tue, 6 Dec 2016 15:31:46 -0500 Received: from mail-bl2nam02on0086.outbound.protection.outlook.com ([104.47.38.86]:9600 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752569AbcLFUb1 (ORCPT ); Tue, 6 Dec 2016 15:31:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=B8H3Rio7m6gWL51b0CR5fD3Mvjl2CNPw3u1qvHnvuuQ=; b=hXmmfK5vEq5AaVzV0pD6ajePwWvVLm8Y9heZlU03HzNqTOXo9rjjuuQMDqUj9KYz/pcAu7GLkJWc1O8ApsMVQX3yA0pZcthnpz4HDMpOwQ/qhKFtvExH4rT0Srvl/mADSdbMtUBs8UzXrYck8T3/nf04iTCl8N4zCrCTULmfDlU= Received: from SN1PR0701CA0015.namprd07.prod.outlook.com (10.162.96.25) by BN1PR07MB023.namprd07.prod.outlook.com (10.255.225.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.761.9; Tue, 6 Dec 2016 20:31:23 +0000 Received: from BN1BFFO11FD018.protection.gbl (2a01:111:f400:7c10::1:134) by SN1PR0701CA0015.outlook.office365.com (2a01:111:e400:5173::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.761.9 via Frontend Transport; Tue, 6 Dec 2016 20:31:22 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1BFFO11FD018.mail.protection.outlook.com (10.58.144.81) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.734.4 via Frontend Transport; Tue, 6 Dec 2016 20:31:22 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1139; Count:15 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.309.2; Tue, 6 Dec 2016 12:30:54 -0800 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id uB6KUs7Q002399; Tue, 6 Dec 2016 12:30:54 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id uB6KUskh002398; Tue, 6 Dec 2016 12:30:54 -0800 From: Himanshu Madhani To: , CC: , , Subject: [PATCH 15/22] qla2xxx: Rename qlini_mode parameter Date: Tue, 6 Dec 2016 12:30:44 -0800 Message-ID: <1481056251-2310-16-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1481056251-2310-1-git-send-email-himanshu.madhani@cavium.com> References: <1481056251-2310-1-git-send-email-himanshu.madhani@cavium.com> MIME-Version: 1.0 X-IncomingHeaderCount: 15 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(428002)(189002)(199003)(106466001)(6666003)(38730400001)(39410400001)(4001430100002)(39450400002)(2950100002)(101416001)(69596002)(356003)(86362001)(8936002)(7846002)(36756003)(5001770100001)(80596001)(305945005)(33646002)(105586002)(2906002)(4326007)(4720700003)(107886002)(50226002)(42186005)(50466002)(81156014)(5003940100001)(8676002)(5660300001)(48376002)(81166006)(626004)(50986999)(189998001)(76176999)(39840400001)(39850400001)(92566002)(47776003)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR07MB023; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD018; 1:MxuQF0qvrcdhRq29t99zuEHJxQsBElpgbTYGrHssZfBJAd5wrurhNdQHBxsfu2DoSFjRaJSM+z44Y6MlybI9ZhbOFZglif+NN7IihUis/mm4DfPJ2uXZTyC8k8AQ8W1g/OLCiacmEStOl48jlN+Z3hMGt3TgAQ+hijO1m7IVgAEhKcmEku1cPB7wwDRMucqgAsiLakWYi9xfqSGcBWqGwBXox8gKghzCqOeDJcLqziVv9gvdaJmNAkuooHB1ul+BXomvGIy4nQAscgL5Zv9MounW5WjGuB3i9FXWEXl7xHDIUxUoKVYqHFs3d2+frfNImvuWgtZqXi7tkREtZARe/IY5oeLnhVgScSv3gY4xX2tucFBLWulxRk0OGQggz4phUx9NQDwpk7KapqseKqbjZ9IpRegVUayga4CSd3Dyk8I/UER2TQJzzcCNpcLwJTox1oaqdqjras0zPkR4IYxr/EaPakI4fJuRTpHY3epy57edyMAAmhdHYGSAvAVdNT8bRvKTA0xFaMGBiYK0SW9+iw== X-MS-Office365-Filtering-Correlation-Id: 70055b6e-f802-4609-9498-08d41e16d7e1 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN1PR07MB023; X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB023; 3:TaIxDCofkthAfayuYGQaB4dYrkaIbfrody4Q9VhW3pKFfS5f66creTta5qoaPvmwcTraqQ+uIyxfJZWYtX75CvEikkTFLBAcQGZzJAKzbKCiScRFLTz35FMS7z4W43l3RhXxg1moXt0eCMm6BpQRUZ7cIML8PpKGBB4ESK9j6iO+34qD6Cbp7OTvSAV9aXzGRS2mJ1kgRwxFOZnA/1YEoXtrfOtIQDf9z1wmcYNZsmfhGAQL0liJCT9JxMJDPZPoWL6XSxyjIzT2lTP9A66EyyyGXgplTcx+bBL4VoHVUswDUpkwIlIYYUAHqFU9pykcnwDZ7U8jvJb6fByC8zo+lXlEglxP3otOk68S20YVWq4= X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB023; 25:3ChTwI6QH2y87Y7TbQA8oWgw7cH3S/V5S3hP0wCIXfX0fpr/+ihMK+KkV0yx2jy34XEMK13e0WlRUTOncGLCUzvpScfIMHa1SMMowRpFCCuIyLJGuLxVHUxrAhkwIM0KrOaigwPCGCa7r52hrkB26sOLAkShOcpVuwohlCFULtPUW6XblhQuki5G33krUnwOJhPhgIDZ0nGZ8Fe04H9BfX6dgFtRpUVQlBCit8GFEph9eWZFMczCkFRXK24xJshLYSmzYWUUVKHZpArZi+v8T7d+zPV1sVILq+lkAh2q3+YeDLo8kcjpFOwoZC1nEi3+yuA+c+dmgahYYCGc/HdZ6fntLC9aWcTg2zpET1v081zoc+8SuA9MV85i6xuYEyTU41qEPHNMmtyqDusY601rYQyWY1fjWc2IFwjlx5An31qPvoBXVelu9VtV6nnDJYpls0RJSV3RSu82oXtIHyE4l7JhBcu7JhfXpVllemC86JxSzRJT4PWxX2A3MgY3arch1bgus6UJIRhimYjxYQbevuC142zDJmBgiZa2ecCVv8oiW/dqIlCXb6X7p+gm2t0cWTUeJkZLwujoOzdOBd5qxfDpe/xSfr8UvNtj0ChDDLpQxzQNgZVdPvki8Hry4rr8LoUXmsUAubwaDDJb0NmFKPiiogR+sQFP1wsae//lo2hL6fCMTehE+Mlhm0y81KIbcIdLDsJOMZqUhun6Q0DKbUPEQc6m3jcYJhWH53f6w2hvPyNNsV2F9HRkvfVtkvSHoM5rAhivc8S4Jhe+MoqhVAFvBTlW7IaxwiTCkEb43MzZSNh/BjVYj3d8vVx0JgPYVFxPvPjOw2v/GxEB1+PgDPBH2u8sSEHtt2KYy7h0jJqZaw9/MJN6d/HuUsS601oA X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB023; 31:wS0lSJbnmf3htg3e6LywAjTMdO1yE6hP9HopOk2hhvKSRDbhDYXKCL3wORflNVr2Bp8ZIXIPuHGPM2QVgwzy7JgiJ6wici5+KYTgS2UO8fEfex2+sBQtPVEAmd1csQOTQgnTA8Lqodglbe/evo5KdKwTXkoW3MamJBfl5ZcRnjiypwW00IC3TedvxTWlaKnhJ/ieQWzZKbzozTqGPvpMyk0QQdebtVZ0dES9k9N57TGo+ybO5OkhRmADrlyqxAPeyw9FmYbDjyx1EhHVkLVNxpzyM3fcbDR776s6ycD4TbE=; 20:i1QfgcprOhA9Nw7Il9htlbPQzJRcX94xKAcB/DTf5zSs0xK5tQoG6hTL+t8RurTJrp+YPAyMznv+kkRgGMiL8n9oZJlM8GAFG+zxaTpG+gfoWq4d76Fi8AFFIW4jBMCLi3r+HFGDbB4pmLkSUxz7F3K3F/Jvg5K47k7qRi2d++FTC6o35RV8SXstE8hU5cRWwD2PH5QD/jJEtODG39dl2C40PbcAN05e+uAMk9tQ9PpT3nz7BnuPivpSxxHUdFaEY92eTEs0Q65Z4xMsqEDbk5Q3lGqF3JWN9yjLU9NLhWp9C6jkzpSv8tYAr2UaDKpsrzBQKsxug+FXAwpOlD5OtSIaw6+Xk1YGKDj8Bz84CkeOdHUEBMp9GjV/H4BitwaFWeXhHz8VAOOxlb2UZ0MzRx18Z3Ic5LhJGtkr0AT9OjQS9tNKRol+5lkAomXMQ2UpOyAdBxr8bImSjJdWTv3IYZTLlS820U5H89jIldHmeYO+FR4ktK2N6gqMszdPbMpn X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(13023025)(13024025)(13015025)(13017025)(13018025)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(6072148); SRVR:BN1PR07MB023; BCL:0; PCL:0; RULEID:; SRVR:BN1PR07MB023; X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB023; 4:lrmY6pze2BPjRWzw0KcMsBXrbTvaEhH9SkkglpE+6eGmwNCH+jBOotj+uXxpFgIqmKIm8rBfPMX0PjrH+q3UKPtZVKn46QDFtncC0yOEa3ANvO9cWTr4eNvuiVk7pLVqdqscnKdYAR0gt9RLukXy5/vakbibgyIQO3sXugErK2VUU1FxCeIvW5CgSXTKYM1oZS9Mz0WvxEX4ypidj9kSQd9onkztrfh/tlJGejlppxuxS3s/TU8pzL1WpXPYkiKWKrEJk83QUOmW01O8IRYtjhWM8iAoh5L0fHuAQ3f5JXPeTMl6PsIN4WRjwrZykd+pMGjydEro4thKzcLnVnskP0rJrEMx/r5p2+qt+2ZfLnw7y4GP+W6EcukwP/+R541xwvdvjDIFx8FYdK0R/0OGRkg5TVKlyt5z4lIdpvgqxv+tvfub71GB01oadwkM1n0Kaz6chs3A0GpbVj/fIRHns7uMKWcltO2UHNUriLLsK83FYQnEWN8J2IPf74CYLGYvnduyGFbY50hJ4D17/me70L5CkskBWxB1/mv4eqcdTf8zpg2X/TLbWWTDt4vpZovPfvnfIluHc+PCeZVG7932LdXd0/CPMiYapRYDPPCbV/7bb9YEd5PM2Dx+rUOGMQaEWQja68fgGGNxfVwyYB+cwLdvs/uuSRbTejxDSpV8qKQ= X-Forefront-PRVS: 01480965DA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR07MB023; 23:zCWUQLf+cWnQ4erLFtZbf23JJCmxGkjGF+BdXecGrz?= =?us-ascii?Q?KI02ICNGXjUtfzki45kDOhGdFD8ezimHoK5ipw44LDw3MoaV6cLjUvV7T32G?= =?us-ascii?Q?Tgc3sntnJ3iq3DKSyN/us1uyq7CeFLNZdSzcxUYMEKdbftC9WAtMf8AWf1Gt?= =?us-ascii?Q?AIZMeGVPVkwKWYo6AAk9pPfLQRiYelJrobqiBbzTBQkpFnZARX8xDwU5Q91l?= =?us-ascii?Q?mkALMA4RZTxKQlhh0PaHdEmDWv58kZb8jZ9lqiZEGpMnscwowyXlNH1MY6Wx?= =?us-ascii?Q?cqF3yIf+kgX0HZ59inyL7N/3gJActv6hYHZsXskb3jvmPOLl/fTvGoFTDoPx?= =?us-ascii?Q?p/RVJkhWn1Fl2YeSldxlLD0dYRdm6jzYmfo8uVFWZrXE+yYQue0T85gz4M2n?= =?us-ascii?Q?NGTPkBA6e1R5rvQVUp2+jZGYrr2V2G2u/bCmPT5UTOo4SHukU7WQBB/8Wnuv?= =?us-ascii?Q?wdeIwCcNs4g94z1KIK2ZsFLJj8cM10ZrrlhGJfPVc+6BiFIlT6Bion4hJMbb?= =?us-ascii?Q?dz9YLknle376H0hTnoaVT2tn1OYlC6/H4qF8y54PtL8plFkkKX7WjvSTjcm+?= =?us-ascii?Q?E1Q96TxnDiGZeNQXezOQHNQx1DnGjOzBFA0uWD0FGeTvgBW2ISlnOCOq/K3g?= =?us-ascii?Q?hjD6JY/2bPPyN+2/9F/Iee/cgbyhheunA09jeHByrFXrcjhGwEjXV1AGMmZF?= =?us-ascii?Q?BR+/fgw7Q3zsA4W8eHheDtNPEdfxegKlCQX1gjxHVT483ARoRfjtAFF5V7li?= =?us-ascii?Q?ati0Ah3SBxJAagxvx+27cfZG7clbkbRQvPF505PIB1EJtabanUFN8K1mpk1m?= =?us-ascii?Q?1J2ut1v2aym77W43PiE3DMmLrB7/OBGxAJi2C048gjZQpvPwJhynT/mMUj9a?= =?us-ascii?Q?n+7UQcAUlv9hv1ZOnrvBdFomPtpZZSXXaVj54kFNO7yDHGguNkRQDN4Lu4wi?= =?us-ascii?Q?eM6/Q+m6nEMDt0lofuHpOMQQbN/rHylteHEY/G4xHk66+emI+EfZX/hlWBE/?= =?us-ascii?Q?5TxawFIpu+7EQGzZRTgVKfGpbTFEPmAYg3BuXHpoNlE971zlCvuNYGeFFOn2?= =?us-ascii?Q?xujcFAcctOdTyYYieFoWURzEDctNhVB6CNQtJdEKG1QzNkvnn+05J6Q0I2oL?= =?us-ascii?Q?JGcYwiTM6oLXNxMgkdvbZlo+KaO3YT+of4SY1qioDmGfYNJ6HK0Yi9yxI3/w?= =?us-ascii?Q?FoFvAFregL92g=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB023; 6:Rs9/He1N4o34qVyBcCcdz5Dv3G/yZvFOqzqXFd8jMzD46uNJ9+DKis8W+eogTSVyPaPIwUscpYb6fI5OquUMwzaAUEvkIdjF6Z8UpCdLYD3rw7BlDokp8Nr+GUDJQraidVE1oD/ZVtUsyqtk3pQJ/3aLGvZMmcwVypaVso3SllSXnWmmYkSTuVlOz7Qdb52axDrKUaxOBtExt+SRPlNja4h3w6AH/QYMngOWhqZjZjXVS7DITZ2C6JNwKipt1uGuS9F/LZejfKz/weIq4qQNSegn95kx+7qD8nabs9LWzpm0gBSysIMNbildjqpjFnKOHr/xKOmYBBTzTCULum8Fy2Vauk3TvbT0dn8OWjrwaz9wp2u2OpqXWGkRc9qQuEMTrhVSf+NZ6b7xeORcGDUIvcuwTsyGWiVmh4nVHGvuxJM=; 5:EM6NrOHYQmxtgtMYxC90DvdA2XJxv/euMIGKKDaGiQUfZ0j6OuvUbV9OnbJ6nYOl4/A1iL9AiMcikdwpaUf4eQXda3Ai7Kp06nZ3xCJxnBTySugr0F9kusKcvcS8boVfvZrQeVWyUGtZom6+vgdXSQ==; 24:CHm5A+F/a3ntOGxoZWGim++PuKPIE5VQE2NAgZkhYAf8+SXYy/2zUVL6DcZS+1I2q8Zo18G9L33plLHnbwv7Y8MYEaCCtyYQ1709Kmgjn10= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB023; 7:A+VTZgeAj1r+AhdDc4poOkEHWUHp58i3ICIBNdKoWRfjZSKHYs0bqrGpCWztcKeuJfJwxZeJizlmKwnLE/syE5z97RBng+XgJQaW1BGzu8r0+OTkj28iBNxmZjUdlpK2IvngYZfLdsSw2LhhPrsZ9C3qgg9H4NWNNCyYZpnCb/lm4gCbJ8z/Qf7BdMGgHM4rLzvOb6In7G1Kk2lmqs2+WMOMAIFMVX9EP72XvVazNeaj8hMYlxkQvfJrajR/rbS2vhwyrNeeIH+VBSDiXljcdqzpaOp/o5g1lx27j27w32OyoTuaXqUizt1/Nlv7twndR1ZiKYUdzDm+cSr6yb3qnesQrsswP+/HVP8aR7BSlH6dMZvoM0fv1OfR/Wegd/TAKfrpNeEEANCAuDm4arc32WVBFXDDq0SAWK1ynm/3obQCNf1I9bK0nrTRLqSF7DL9Y1UOOiQxwq0WLqtk49KGaw== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2016 20:31:22.2649 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR07MB023 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Quinn Tran Qlogic's adapter is able to behave in multiple modes: initiator, target, exclusive/either, and dual/both. This patch renames the qlini_mode -> qlop_mode and allow different setting for each port and exchange resource control. Usage: modprobe qla2xxx qlop_mode=dual_mode echo 95 > /sys/class/scsi_host//ql_dm_tgt_ex_pct echo dual_mode > /sys/class/scsi_host//f_qlop_mode echo ini_mode > /sys/class/scsi_host//f_qlop_mode Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_attr.c | 351 ++++++++++++++++++++++++++++++++++++++ drivers/scsi/qla2xxx/qla_def.h | 4 + drivers/scsi/qla2xxx/qla_gbl.h | 4 + drivers/scsi/qla2xxx/qla_os.c | 4 + drivers/scsi/qla2xxx/qla_target.c | 117 ++++++------- drivers/scsi/qla2xxx/qla_target.h | 22 +-- 6 files changed, 425 insertions(+), 77 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index f48b76c..d8b77aa 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -1504,6 +1504,351 @@ ha->pep_version[0], ha->pep_version[1], ha->pep_version[2]); } + +static ssize_t +qla2x00_tgt_ex_pct_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); + int len = 0; + + if (ql2x_op_mode == QLA2XXX_OP_MODE_INITIATOR) { + len += scnprintf(buf + len, PAGE_SIZE-len, + "This option is not supported. Driver need to be loaded with " + "non-initiator mode (qlop_mode)"); + return len; + } + + len += scnprintf(buf + len, PAGE_SIZE-len, + "target exchange percentage: new %d : current: %d\n\n", + vha->u_tgt_ex_pct, vha->tgt_ex_pct); + + len += scnprintf(buf + len, PAGE_SIZE-len, + "Please (re)set operating mode via \"f_qlop_mode\" to load new setting\n"); + return len; +} + +static ssize_t +qla2x00_tgt_ex_pct_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); + int val = 0; + + if (ql2x_op_mode == QLA2XXX_OP_MODE_INITIATOR) + goto out; + + if (sscanf(buf, "%d", &val) != 1) + return -EINVAL; + + if (val > 100) + val = 100; + else if (val < 0) + val = 0; + + vha->u_tgt_ex_pct = val; +out: + return strlen(buf); +} + +static ssize_t +qla2x00_opmode_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); + int len = 0; + + if (ql2x_op_mode == QLA2XXX_OP_MODE_INITIATOR) { + len += scnprintf(buf + len, PAGE_SIZE-len, + "This option is not supported. Driver need to be loaded with " + "non-initiator mode (qlop_mode)"); + return len; + } + + len += scnprintf(buf + len, PAGE_SIZE-len, + "Supported options: exclusive | tgt_mode | ini_mode | dual_mode\n"); + + /* --- */ + len += scnprintf(buf + len, PAGE_SIZE-len, "Current selection: "); + + switch (vha->qlop_mode) { + case QLA2XXX_OP_MODE_EXCLUSIVE: + len += scnprintf(buf + len, PAGE_SIZE-len, + QLA2XXX_OP_MODE_STR_EXCLUSIVE); + break; + case QLA2XXX_OP_MODE_TARGET: + len += scnprintf(buf + len, PAGE_SIZE-len, + QLA2XXX_OP_MODE_STR_TARGET); + break; + case QLA2XXX_OP_MODE_INITIATOR: + len += scnprintf(buf + len, PAGE_SIZE-len, + QLA2XXX_OP_MODE_STR_INITIATOR); + break; + case QLA2XXX_OP_MODE_DUAL: + len += scnprintf(buf + len, PAGE_SIZE-len, + QLA2XXX_OP_MODE_STR_DUAL); + break; + } + len += scnprintf(buf + len, PAGE_SIZE-len, "\n"); + + return len; +} + + +void qla_adj_tgt_exch_pct(scsi_qla_host_t *vha, int op) +{ + /* reserve a few exchange for FW for mgt. */ + switch (op) { + case QLA2XXX_OP_MODE_TARGET: + vha->u_tgt_ex_pct = MAX_TGT_EXCH_PCT; + break; + + case QLA2XXX_OP_MODE_EXCLUSIVE: + if (qla_tgt_mode_enabled(vha) || + qla_dual_mode_enabled(vha)) { + vha->u_tgt_ex_pct = MAX_TGT_EXCH_PCT; + } else + vha->u_tgt_ex_pct = 0; + break; + + case QLA2XXX_OP_MODE_INITIATOR: + /* target mode does not need any exchange reserve. */ + vha->u_tgt_ex_pct = 0; + break; + + case QLA2XXX_OP_MODE_DUAL: + if (vha->u_tgt_ex_pct >= 100) + vha->u_tgt_ex_pct = MAX_TGT_EXCH_PCT; + + if (vha->u_tgt_ex_pct <= 0) + vha->u_tgt_ex_pct = MIN_TGT_EXCH_PCT; + break; + } +} + +static +int qla_set_opmode(scsi_qla_host_t *vha, int op) +{ + int rc = 0; + enum { + NO_ACTION, + MODE_CHANGE_ACCEPT, + MODE_CHANGE_NO_ACTION, + TARGET_STILL_ACTIVE, + }; + int action = NO_ACTION; + int set_mode = 0; + + qla_adj_tgt_exch_pct(vha, op); + + switch (vha->qlop_mode) { + case QLA2XXX_OP_MODE_TARGET: + switch (op) { + case QLA2XXX_OP_MODE_TARGET: + if (qla_tgt_mode_enabled(vha)) { + if (vha->tgt_ex_pct != vha->u_tgt_ex_pct) + action = MODE_CHANGE_ACCEPT; + } else { + action = MODE_CHANGE_NO_ACTION; + } + break; + + case QLA2XXX_OP_MODE_EXCLUSIVE: + if (qla_tgt_mode_enabled(vha)) { + if (vha->tgt_ex_pct != vha->u_tgt_ex_pct) + action = MODE_CHANGE_ACCEPT; + else + action = MODE_CHANGE_NO_ACTION; + } else { + action = MODE_CHANGE_ACCEPT; + } + break; + + case QLA2XXX_OP_MODE_DUAL: + action = MODE_CHANGE_ACCEPT; + /* active_mode is target only, reset it to dual */ + if (qla_tgt_mode_enabled(vha)) + set_mode = 1; + break; + + case QLA2XXX_OP_MODE_INITIATOR: + if (qla_tgt_mode_enabled(vha)) + action = TARGET_STILL_ACTIVE; + else + action = MODE_CHANGE_ACCEPT; + break; + } + break; + + case QLA2XXX_OP_MODE_EXCLUSIVE: + switch (op) { + case QLA2XXX_OP_MODE_EXCLUSIVE: + if (qla_tgt_mode_enabled(vha)) { + if (vha->tgt_ex_pct != vha->u_tgt_ex_pct) + action = MODE_CHANGE_ACCEPT; + else + action = NO_ACTION; + } else { + action = NO_ACTION; + } + break; + + case QLA2XXX_OP_MODE_TARGET: + if (qla_tgt_mode_enabled(vha)) { + if (vha->tgt_ex_pct != vha->u_tgt_ex_pct) + action = MODE_CHANGE_ACCEPT; + else + action = MODE_CHANGE_NO_ACTION; + } else { + action = MODE_CHANGE_NO_ACTION; + } + break; + + case QLA2XXX_OP_MODE_DUAL: /* exclusive -> dual */ + if (qla_tgt_mode_enabled(vha)) { + action = MODE_CHANGE_ACCEPT; + set_mode = 1; + } else { + action = MODE_CHANGE_NO_ACTION; + } + break; + + case QLA2XXX_OP_MODE_INITIATOR: + if (qla_tgt_mode_enabled(vha)) + action = TARGET_STILL_ACTIVE; + else + action = MODE_CHANGE_NO_ACTION; + break; + } + break; + + case QLA2XXX_OP_MODE_INITIATOR: + switch (op) { + case QLA2XXX_OP_MODE_INITIATOR: + action = NO_ACTION; + break; + default: + action = MODE_CHANGE_NO_ACTION; + break; + } + break; + + case QLA2XXX_OP_MODE_DUAL: + switch (op) { + case QLA2XXX_OP_MODE_DUAL: + if (qla_tgt_mode_enabled(vha) || + qla_dual_mode_enabled(vha)) { + if (vha->tgt_ex_pct != vha->u_tgt_ex_pct) + action = MODE_CHANGE_ACCEPT; + else + action = NO_ACTION; + } else { + action = MODE_CHANGE_NO_ACTION; + } + break; + + case QLA2XXX_OP_MODE_TARGET: + if (qla_tgt_mode_enabled(vha) || + qla_dual_mode_enabled(vha)) { + /* turning off initiator mode */ + set_mode = 1; + action = MODE_CHANGE_ACCEPT; + } else { + action = MODE_CHANGE_NO_ACTION; + } + break; + + case QLA2XXX_OP_MODE_EXCLUSIVE: + if (qla_tgt_mode_enabled(vha) || + qla_dual_mode_enabled(vha)) { + set_mode = 1; + action = MODE_CHANGE_ACCEPT; + } else { + action = MODE_CHANGE_NO_ACTION; + } + break; + + case QLA2XXX_OP_MODE_INITIATOR: + if (qla_tgt_mode_enabled(vha) || + qla_dual_mode_enabled(vha)) + action = TARGET_STILL_ACTIVE; + else + action = MODE_CHANGE_NO_ACTION; + } + break; + } + + switch (action) { + case MODE_CHANGE_ACCEPT: + ql_log(ql_log_warn, vha, 0xffff, + "Mode change accepted %d|%d exch pct %d|%d.\n", + vha->qlop_mode, op, + vha->tgt_ex_pct, vha->u_tgt_ex_pct); + vha->qlop_mode = op; + vha->tgt_ex_pct = vha->u_tgt_ex_pct; + if (set_mode) + qlt_set_mode(vha); + + set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); + break; + + case MODE_CHANGE_NO_ACTION: + ql_log(ql_log_warn, vha, 0xffff, + "Mode is set. No action taken. %d|%d pct %d|%d.\n", + vha->qlop_mode, op, + vha->tgt_ex_pct, vha->u_tgt_ex_pct); + vha->tgt_ex_pct = vha->u_tgt_ex_pct; + vha->qlop_mode = op; + break; + + case TARGET_STILL_ACTIVE: + ql_log(ql_log_warn, vha, 0xffff, + "Target Mode is active. Unable to change Mode.\n"); + break; + + case NO_ACTION: + default: + ql_log(ql_log_warn, vha, 0xffff, + "Mode unchange. No action taken. %d|%d pct %d|%d.\n", + vha->qlop_mode, op, + vha->tgt_ex_pct, vha->u_tgt_ex_pct); + break; + } + + return rc; +} + +static ssize_t +qla2x00_opmode_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); + char op_mode[16]; + int op; + + + if (ql2x_op_mode == QLA2XXX_OP_MODE_INITIATOR) + return -EINVAL; + + memset(op_mode,0,16); + if (sscanf(buf, "%15s", op_mode) != 1) + return -EINVAL; + + if (strcasecmp(op_mode, QLA2XXX_OP_MODE_STR_EXCLUSIVE) == 0) + op = QLA2XXX_OP_MODE_EXCLUSIVE; + else if (strcasecmp(op_mode, QLA2XXX_OP_MODE_STR_TARGET) == 0) + op = QLA2XXX_OP_MODE_TARGET; + else if (strcasecmp(op_mode, QLA2XXX_OP_MODE_STR_INITIATOR) == 0) + op = QLA2XXX_OP_MODE_INITIATOR; + else if (strcasecmp(op_mode, QLA2XXX_OP_MODE_STR_DUAL) == 0) + op = QLA2XXX_OP_MODE_DUAL; + else + return -EINVAL; + + qla_set_opmode(vha, op); + return strlen(buf); +} + static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL); static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL); @@ -1549,6 +1894,10 @@ static DEVICE_ATTR(allow_cna_fw_dump, S_IRUGO | S_IWUSR, qla2x00_allow_cna_fw_dump_show, qla2x00_allow_cna_fw_dump_store); static DEVICE_ATTR(pep_version, S_IRUGO, qla2x00_pep_version_show, NULL); +static DEVICE_ATTR(f_qlop_mode, S_IRUGO | S_IWUSR, + qla2x00_opmode_show, qla2x00_opmode_store); +static DEVICE_ATTR(ql_dm_tgt_ex_pct, S_IRUGO | S_IWUSR, + qla2x00_tgt_ex_pct_show, qla2x00_tgt_ex_pct_store); struct device_attribute *qla2x00_host_attrs[] = { &dev_attr_driver_version, @@ -1583,6 +1932,8 @@ struct device_attribute *qla2x00_host_attrs[] = { &dev_attr_fw_dump_size, &dev_attr_allow_cna_fw_dump, &dev_attr_pep_version, + &dev_attr_f_qlop_mode, + &dev_attr_ql_dm_tgt_ex_pct, NULL, }; diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 09da61f..85beab6 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -4017,6 +4017,10 @@ struct qla_tgt_counters { /* Count of active session/fcport */ int fcport_count; wait_queue_head_t fcport_waitQ; + int qlop_mode; + int tgt_ex_pct, u_tgt_ex_pct; +#define MAX_TGT_EXCH_PCT 99 +#define MIN_TGT_EXCH_PCT 1 } scsi_qla_host_t; struct qla27xx_image_status { diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 944f37a..bc2bf57 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -140,8 +140,10 @@ int qla24xx_post_newsess_work(struct scsi_qla_host *, port_id_t *, extern int ql2xexlogins; extern int ql2xexchoffld; extern int ql2xfwholdabts; +extern int ql_dm_tgt_ex_pct; extern struct workqueue_struct *qla_wq; + extern int qla2x00_loop_reset(scsi_qla_host_t *); extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int); extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum @@ -645,6 +647,7 @@ extern int qla2x00_echo_test(scsi_qla_host_t *, extern int qla24xx_update_all_fcp_prio(scsi_qla_host_t *); extern int qla24xx_fcp_prio_cfg_valid(scsi_qla_host_t *, struct qla_fcp_prio_cfg *, uint8_t); +extern void qla_adj_tgt_exch_pct(scsi_qla_host_t *vha, int op); /* * Global Function Prototypes in qla_dfs.c source file. @@ -849,5 +852,6 @@ void qlt_plogi_ack_link(struct scsi_qla_host *, qlt_plogi_ack_t *, extern struct fc_port *qlt_find_sess_invalidate_other(scsi_qla_host_t *, uint64_t wwn, port_id_t port_id, uint16_t loop_id, struct fc_port **); void qla24xx_delete_sess_fn(struct work_struct *); +void qlt_set_mode(struct scsi_qla_host *); #endif /* _QLA_GBL_H */ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 18795c3..845527d 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -4301,6 +4301,10 @@ struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *sht, vha->host = host; vha->host_no = host->host_no; vha->hw = ha; + vha->qlop_mode = ql2x_op_mode; + vha->u_tgt_ex_pct = ql_dm_tgt_ex_pct; + qla_adj_tgt_exch_pct(vha, ql2x_op_mode); + vha->tgt_ex_pct = vha->u_tgt_ex_pct; INIT_LIST_HEAD(&vha->vp_fcports); INIT_LIST_HEAD(&vha->work_list); diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index cc24d1a..089f4ce 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -45,26 +45,26 @@ MODULE_PARM_DESC(ql2xtgt_tape_enable, "Enables Sequence level error recovery (aka FC Tape). Default is 0 - no SLER. 1 - Enable SLER."); -static char *qlini_mode = QLA2XXX_INI_MODE_STR_ENABLED; -module_param(qlini_mode, charp, S_IRUGO); -MODULE_PARM_DESC(qlini_mode, - "Determines when initiator mode will be enabled. Possible values: " +static char *qlop_mode = QLA2XXX_OP_MODE_STR_INITIATOR; +module_param(qlop_mode, charp, S_IRUGO); +MODULE_PARM_DESC(qlop_mode, + "Determines operating mode. Possible values: " "\"exclusive\" - initiator mode will be enabled on load, " "disabled on enabling target mode and then on disabling target mode " "enabled back; " - "\"disabled\" - initiator mode will never be enabled; " - "\"dual\" - Initiator Modes will be enabled. Target Mode can be activated " - "when ready " - "\"enabled\" (default) - initiator mode will always stay enabled."); + "\"tgt_mode\" - Target mode only. Initiator mode will never be enabled; " + "\"dual_mode\" - Initiator Modes will be enabled. Target Mode can be " + "activated when ready; " + "\"ini_mode\" (default) - initiator mode will always stay enabled."); -static int ql_dm_tgt_ex_pct = 50; +int ql_dm_tgt_ex_pct = 50; module_param(ql_dm_tgt_ex_pct, int, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(ql_dm_tgt_ex_pct, - "For Dual Mode (qlini_mode=dual), this parameter determines " + "For Dual Mode (qlop_mode=dual_mode), this parameter determines " "the percentage of exchanges/cmds FW will allocate resources " "for Target mode."); -int ql2x_ini_mode = QLA2XXX_INI_MODE_EXCLUSIVE; +int ql2x_op_mode = QLA2XXX_OP_MODE_EXCLUSIVE; static int temp_sam_status = SAM_STAT_BUSY; @@ -6579,17 +6579,17 @@ void qlt_lport_deregister(struct scsi_qla_host *vha) EXPORT_SYMBOL(qlt_lport_deregister); /* Must be called under HW lock */ -static void qlt_set_mode(struct scsi_qla_host *vha) +void qlt_set_mode(struct scsi_qla_host *vha) { - switch (ql2x_ini_mode) { - case QLA2XXX_INI_MODE_DISABLED: - case QLA2XXX_INI_MODE_EXCLUSIVE: + switch (vha->qlop_mode) { + case QLA2XXX_OP_MODE_TARGET: + case QLA2XXX_OP_MODE_EXCLUSIVE: vha->host->active_mode = MODE_TARGET; break; - case QLA2XXX_INI_MODE_ENABLED: + case QLA2XXX_OP_MODE_INITIATOR: vha->host->active_mode = MODE_UNKNOWN; break; - case QLA2XXX_INI_MODE_DUAL: + case QLA2XXX_OP_MODE_DUAL: vha->host->active_mode = MODE_DUAL; break; @@ -6601,15 +6601,15 @@ static void qlt_set_mode(struct scsi_qla_host *vha) /* Must be called under HW lock */ static void qlt_clear_mode(struct scsi_qla_host *vha) { - switch (ql2x_ini_mode) { - case QLA2XXX_INI_MODE_DISABLED: + switch (vha->qlop_mode) { + case QLA2XXX_OP_MODE_TARGET: vha->host->active_mode = MODE_UNKNOWN; break; - case QLA2XXX_INI_MODE_EXCLUSIVE: + case QLA2XXX_OP_MODE_EXCLUSIVE: vha->host->active_mode = MODE_INITIATOR; break; - case QLA2XXX_INI_MODE_ENABLED: - case QLA2XXX_INI_MODE_DUAL: + case QLA2XXX_OP_MODE_INITIATOR: + case QLA2XXX_OP_MODE_DUAL: vha->host->active_mode = MODE_INITIATOR; break; default: @@ -6844,23 +6844,16 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) ha->tgt.saved_set = 1; } - if (qla_tgt_mode_enabled(vha)) { - nv->exchange_count = cpu_to_le16(0xFFFF); - } else { /* dual */ - if (ql_dm_tgt_ex_pct > 100) { - ql_dm_tgt_ex_pct = 50; - } else if (ql_dm_tgt_ex_pct == 100) { - /* leave some for FW */ - ql_dm_tgt_ex_pct = 95; - } + if (vha->tgt_ex_pct <= 0) + vha->tgt_ex_pct = MIN_TGT_EXCH_PCT; - tmp = ha->orig_fw_xcb_count * ql_dm_tgt_ex_pct; - tmp = tmp/100; - if (tmp > 0xffff) - tmp = 0xffff; - t = tmp & 0xffff; - nv->exchange_count = cpu_to_le16(t); - } + tmp = ha->orig_fw_xcb_count * vha->tgt_ex_pct; + tmp = tmp/100; + if (tmp > 0xffff) + tmp = 0xffff; + t = tmp & 0xffff; + + nv->exchange_count = cpu_to_le16(t); /* Enable target mode */ nv->firmware_options_1 |= cpu_to_le32(BIT_4); @@ -6966,24 +6959,16 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) ha->tgt.saved_set = 1; } - if (qla_tgt_mode_enabled(vha)) { - nv->exchange_count = cpu_to_le16(0xFFFF); - } else { /* dual */ - if (ql_dm_tgt_ex_pct > 100) { - ql_dm_tgt_ex_pct = 50; - } else if (ql_dm_tgt_ex_pct == 100) { - /* leave some for FW */ - ql_dm_tgt_ex_pct = 95; - } + if (vha->tgt_ex_pct <= 0) + vha->tgt_ex_pct = MIN_TGT_EXCH_PCT; - tmp = ha->orig_fw_xcb_count * ql_dm_tgt_ex_pct; - tmp = tmp/100; - if (tmp > 0xffff) - tmp = 0xffff; + tmp = ha->orig_fw_xcb_count * vha->tgt_ex_pct; + tmp = tmp/100; + if (tmp > 0xffff) + tmp = 0xffff; + t = tmp & 0xffff; - t = tmp & 0xffff; - nv->exchange_count = cpu_to_le16(t); - } + nv->exchange_count = cpu_to_le16(t); /* Enable target mode */ nv->firmware_options_1 |= cpu_to_le32(BIT_4); @@ -7258,16 +7243,16 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) } } -static int __init qlt_parse_ini_mode(void) +static int __init qlt_parse_operating_mode(void) { - if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_EXCLUSIVE) == 0) - ql2x_ini_mode = QLA2XXX_INI_MODE_EXCLUSIVE; - else if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_DISABLED) == 0) - ql2x_ini_mode = QLA2XXX_INI_MODE_DISABLED; - else if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_ENABLED) == 0) - ql2x_ini_mode = QLA2XXX_INI_MODE_ENABLED; - else if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_DUAL) == 0) - ql2x_ini_mode = QLA2XXX_INI_MODE_DUAL; + if (strcasecmp(qlop_mode, QLA2XXX_OP_MODE_STR_EXCLUSIVE) == 0) + ql2x_op_mode = QLA2XXX_OP_MODE_EXCLUSIVE; + else if (strcasecmp(qlop_mode, QLA2XXX_OP_MODE_STR_TARGET) == 0) + ql2x_op_mode = QLA2XXX_OP_MODE_TARGET; + else if (strcasecmp(qlop_mode, QLA2XXX_OP_MODE_STR_INITIATOR) == 0) + ql2x_op_mode = QLA2XXX_OP_MODE_INITIATOR; + else if (strcasecmp(qlop_mode, QLA2XXX_OP_MODE_STR_DUAL) == 0) + ql2x_op_mode = QLA2XXX_OP_MODE_DUAL; else return false; @@ -7278,9 +7263,9 @@ int __init qlt_init(void) { int ret; - if (!qlt_parse_ini_mode()) { + if (!qlt_parse_operating_mode()) { ql_log(ql_log_fatal, NULL, 0xe06b, - "qlt_parse_ini_mode() failed\n"); + "qlt_parse_operating_mode() failed\n"); return -EINVAL; } @@ -7309,7 +7294,7 @@ int __init qlt_init(void) /* * Return 1 to signal that initiator-mode is being disabled */ - return (ql2x_ini_mode == QLA2XXX_INI_MODE_DISABLED) ? 1 : 0; + return (ql2x_op_mode == QLA2XXX_OP_MODE_TARGET) ? 1 : 0; out_plogi_cachep: kmem_cache_destroy(qla_tgt_plogi_cachep); diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h index 90b056e..507b8d9 100644 --- a/drivers/scsi/qla2xxx/qla_target.h +++ b/drivers/scsi/qla2xxx/qla_target.h @@ -42,15 +42,15 @@ */ #define QLA2XXX_INITIATOR_MAGIC 57222 -#define QLA2XXX_INI_MODE_STR_EXCLUSIVE "exclusive" -#define QLA2XXX_INI_MODE_STR_DISABLED "disabled" -#define QLA2XXX_INI_MODE_STR_ENABLED "enabled" -#define QLA2XXX_INI_MODE_STR_DUAL "dual" +#define QLA2XXX_OP_MODE_STR_EXCLUSIVE "exclusive" +#define QLA2XXX_OP_MODE_STR_TARGET "tgt_mode" +#define QLA2XXX_OP_MODE_STR_INITIATOR "ini_mode" +#define QLA2XXX_OP_MODE_STR_DUAL "dual_mode" -#define QLA2XXX_INI_MODE_EXCLUSIVE 0 -#define QLA2XXX_INI_MODE_DISABLED 1 -#define QLA2XXX_INI_MODE_ENABLED 2 -#define QLA2XXX_INI_MODE_DUAL 3 +#define QLA2XXX_OP_MODE_EXCLUSIVE 0 +#define QLA2XXX_OP_MODE_TARGET 1 +#define QLA2XXX_OP_MODE_INITIATOR 2 +#define QLA2XXX_OP_MODE_DUAL 3 #define QLA2XXX_COMMAND_COUNT_INIT 250 #define QLA2XXX_IMMED_NOTIFY_COUNT_INIT 250 @@ -1111,9 +1111,9 @@ extern int qlt_lport_register(void *, u64, u64, u64, * is not set. Right now, ha value is ignored. */ #define QLA_TGT_MODE_ENABLED() \ - ((ql2x_ini_mode != QLA2XXX_INI_MODE_ENABLED) || \ - (ql2x_ini_mode == QLA2XXX_INI_MODE_DUAL)) -extern int ql2x_ini_mode; + (ql2x_op_mode != QLA2XXX_OP_MODE_INITIATOR) + +extern int ql2x_op_mode; static inline bool qla_tgt_mode_enabled(struct scsi_qla_host *ha) {