From patchwork Mon Jun 26 18:06:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kalderon, Michal" X-Patchwork-Id: 9810167 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 EE35D60209 for ; Mon, 26 Jun 2017 18:11:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EC37726D05 for ; Mon, 26 Jun 2017 18:11:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E0A5628520; Mon, 26 Jun 2017 18:11:56 +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 9EAA926D05 for ; Mon, 26 Jun 2017 18:11:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751480AbdFZSLy (ORCPT ); Mon, 26 Jun 2017 14:11:54 -0400 Received: from mail-by2nam03on0056.outbound.protection.outlook.com ([104.47.42.56]:21216 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751386AbdFZSLw (ORCPT ); Mon, 26 Jun 2017 14:11:52 -0400 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=SXdUoQJ1OpMdjuDY15kyxlyvOraaVwyhrkjUL4qTB8U=; b=kaVXVs+DMcHtLmq4DUExNdcp0/8RNBr4CMSBJrQCR1X0CObBWAoivBryWxsJ1oOPsEAuuG2EJalqz6efQkab5KPA4teOL618FjqK0CYGUiGuT3rBm5ZbPh3Mx+gX84AseCihDIfaEDaiH8lDqlUBPW7qJBsNmyO/FL0yZmgP1ZM= Received: from CO2PR07CA0050.namprd07.prod.outlook.com (10.174.192.18) by BN1PR07MB421.namprd07.prod.outlook.com (10.141.59.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1199.15; Mon, 26 Jun 2017 18:11:49 +0000 Received: from BY2FFO11OLC015.protection.gbl (2a01:111:f400:7c0c::169) by CO2PR07CA0050.outlook.office365.com (2603:10b6:100::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1199.15 via Frontend Transport; Mon, 26 Jun 2017 18:11:48 +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 BY2FFO11OLC015.mail.protection.outlook.com (10.1.15.59) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1199.9 via Frontend Transport; Mon, 26 Jun 2017 18:11:48 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 26 Jun 2017 11:11:46 -0700 From: Michal Kalderon To: , , , , , , , CC: Michal Kalderon , Yuval Mintz , Ariel Elior Subject: [RFC 08/19] qed: iWARP CM add active side connect Date: Mon, 26 Jun 2017 21:06:58 +0300 Message-ID: <1498500429-22557-9-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1498500429-22557-1-git-send-email-Michal.Kalderon@cavium.com> References: <1498500429-22557-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(39450400003)(39850400002)(39400400002)(39410400002)(39840400002)(2980300002)(428002)(189002)(199003)(9170700003)(107886003)(77096006)(2950100002)(6666003)(5660300001)(356003)(50226002)(36756003)(76176999)(2906002)(478600001)(50986999)(4326008)(38730400002)(72206003)(2201001)(47776003)(106466001)(101416001)(105586002)(86362001)(54906002)(8676002)(8936002)(81166006)(305945005)(189998001)(50466002)(48376002)(5003940100001)(104016004); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR07MB421; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; MLV:sfv; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC015; 1:qJ4WomFnu0HkSFJN4SI/t7VdZaqta7iwWGIXIc+HDlJ8aY9fVu6KtXr5pSckbrI+VPuzCyL85/0S7QyBnPOkq6ZZXeYDzC8J9bQLR1FJXfNaEhgeDepQRYc/j1gj/q3HW5pgwh5bSLw8ZJXNY1mfAIzpKWRtKlz2cudaQAo6o9Cd/lMP3MhJnMBMW+0VjmL/QRcoCciB9Yx8ryJ27n4QlbQStX8KcrPBYlqqVECZbYYnAoWtPkL8fn4d8OfHogy76jHCdhwG0+dxSjMRbDcAbp6x3XkaTcj26BOP+8m2SWJUj8jMrRXwh+vZJOLxl3e7QuN2Eg34Mr6dMDTLYhQ/8UCY6G2rm+P0J/dFlSEBR8YJHMgB++soY/Iw1KYihP9oYpBBPVDG2Wo6P1FUZAUJDXZGu+KzuQ7vDDCIxMQTaC7tD9oNL/QcAIRijQN4R+DR/IYI/xVmT7a0Au5gYruEfviThfLNW6SZtSWVRaiWiXvG6y+jkrZJ5DTh+ZlyESGhCj9Hnny2CKhHgq6GL4EKeXrLFzLmfqOfiiKy+n+u9lde2TkP+CAYvOO2Ld8hNi7JmMVzJmx/GCV/YJeIYdX890YhEvr+50mUPPXjq+xXt6Z4xSaEUGW2W7uCNMky5BW6YaFbkceZXU6Bj62IEL9mnWCb/zQxJoZtP2oEHefq65rlI+cThEgI7W4cnIhRTKd/r0IgJGNoQ3LntiR6sTEry15e9t2HgwtB9bSP1hjRGhELq3rwdhcEKqTTS8jwLwO+Io1cq0Qo4Ea3udUoZqy1U+Fgv7coxKW9Y3aHbEJ1n8gQ09I4BT5krvSuFvNGPxcO24bPXXuoq1HqXn6q+nTqB5wSvIYP/cw3Q6hc12IT1hs= X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ba9dba51-2da6-4ebf-6492-08d4bcbed01a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254075)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506067)(300135500095); SRVR:BN1PR07MB421; X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB421; 3:9iG144dAalbEVTcGAz1R4hFfcvC6f5rZZMxDyFlDwgV8HZ/ol4wch3B6cYouAV8J9TN9oleN41Wgip0eITRoyVMu1inxDlKFKDL7Fzc8OP3fZKHn1lJ0A7TLAG7Vng7g/SWdfwXn3RfBCl0kHttnt4Xc0D29fmcRIOPjg97OcfOaXb1SvNKYDi51bNZGkBep8ii4P2aZHNFTaFM5/gUxQwAn9IF4RsSpdpi5/Jo3Ys99Hodr6YbFD/s9bC7WM5r09uYsgGL8payyOAoA4XoWhGIJKyLxar4uCtS18t4yD++7K8PbwdnUg9MaU8ToXDRAI8CvRf9CX6uqNSMnV9pbjURcEmyaAJ+WOlT7jEXoU38IpIXNn4yu9ahAi69eJmIx8KPqcXpKHBbvtUwdm0QR1/9W8ns+upgpeLxXc/FJorLnDKHM2hrMS/KOc6X2FXzInkEL3XMbheh00LwUizXY2ut/sfULlwC8vYZDyu0l0lix5Keauy+8sOKD/HBc0Gq3UAWhxIlq8IFTDcbFyspUtHhf4/7TUisB3+LxBbgAjF8+RYahnPVE+vNoFRUNpWltGPzp+vRGMYDvEQQgeREzK/cdF3qo5fzoNXggwsQPkDUyOr0hGHEugPg1FbcDrT4cIYdbPtLMM1TcUSy6bQ7b61ER6sq7XDkfgNgWyVdwx60N7grt3XayrjqBr/cZnRkUj6H7QRStrbq3gwi2QkOeoXkgZvRJ3tDN7bUYuXmSNUIhyJRXgODMouiUHAtgpyEHQ+GpzyeHMifOu9gWYfNrfLSmZQPywAz36t8JEgus9QUhsn/oPm9jRRtptSPrpEQo7XfGzOM3z14W4kK8d49NOZV9ycDgDdfXNFokA2IBBRe/vslmhpVIkHvRdSmfSrWOXbnkIicQHRW9LGK591tmXw== X-MS-TrafficTypeDiagnostic: BN1PR07MB421: X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB421; 25:Dai2Oqw3oxKsTiHG03H885TD9lsbmJxx3ySm7S3Yd3KBUb0/qZgO5eG7r2olfrkgU0gyB+K//tV6UMwrPGw/u19qBHW2IrupllsfiIfCigoTdZ5oFD65r8A7+epUFkxpUYI0DLo1G2GTM0DGbB4gYMjnzS/IJel9RL1rNBHsCw6bmF2Sf+q5864f1Fz/gAFvEKocnC+O35OasTXx8fHI3OefOCrixKnsa1UPTs0mtUW1CQKv3IqWaK5sa84Ui+hC8DoBXrjNLAfCKN79FlzjsoCYU71stPvJ5eTPeREu2WP5AU7p9we5DfIomMEoFLNtkM/bR1WVHqGah4u5f6brqLNpyY1qxjrnzEnXNFknDGzL9DI9AYjbQg/6oqrnXky3WiVnVOcfWvWotmH/zgnRKfuQU7eKGBCsjSM+cEmQa2jCndtdBIRQBH9gHEP+qAKMjaehDQ+iC+N5lRzD+si0ABWWbhC8PBvhh+lxSC/hykX4qBEUtttLXw7cfEEVFtMWj7RV9NuZ3IiAQ9iZrkQzQhCPp1FWkEbXW26gIy6S/DhpHWVW3GGwpf0ddj/IS+v8H/N7KJlofS7p4cGBvzMu7z/YubdCIlarQEvMYLoQHWx5Xps3CRr9uWDRuBkF2Vv4Fhe35ZhCZrCLTOiEQGq84rczdsefsUagDfLM1DkpDWylUx00l2LD5IXJtAoGg9zxft0IAnVE5vFlkASLjmQkUu6iLELCV8DP+g2xKopbTalWBU2F2bdjcqF5VeZIfNMSVvBf5W6gWZ5sG3OXfV0P2QSAVEnrnaxweE5Lmi+ngzDNeHzXyFjFp1WBPT05vBlKxqKsqaC2U7q/9YUot97p8Y4mkqRFHg0xbdg7n1XKoCrIEVeUO/xKjODnA86lM7NKeFtr2y/Pbj90g8Ha1OkGlnWCOPpgNahmoqL3shtooa 4= X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB421; 31:2Nqm4VsmhflnfMJ1FzHEbMsHKfclPVDKjmHrPtowbKSwN26Btd+kF1s2BcUT3Rquj7cWpUSj/dz2QHBfxn2Ms5qG8xsOIe6DrF2RDLrbeN1eGJMPhhsYECsyLVem2N76MScZM/3LcUPL52xOAzYXGXCkOnPRhTZartqWppR0U6iV9NWsDq/stJ9qwdJlCRB46qC65KYUMYtESQ4yhUS8xPDSMApEbiDZf1Ni0fW0IDvBaNLmSE4LhJedEqcM0Phbdj9m4yCuR2Vb7c8hn/BLO5/EocMjbn1vLiFxU0Yqj8C1I0pSCEY0BDaiK2L48GrnoOU9yynzKF+ohr5y0wyCQqgmVYEDUUvkORrO3+nhpduFW5YK2nlkoL0wZzpSeGfxB18rXCn8W5JhEaOZBUA6UFFmoQ5SlQ7ZhdapCXC+Bd0u86wDvOVi165Fkgplvl1w2XB2NltCTxxQfDFJuikZx/AvaBbW5uUJTBxZ8D9muOQM18MfOloYNIAlidMXAQ7RG4BbFP8ojWN5oLDwBsmcHJED2PJLuQeBwa3XfjxTuZ/ABEH1eeV+zvcU3MI/On2JzkbRlQiIgRA0Pg5M7ojg8zh9nGSbwwxb+yCrDxao+ail9k0QLf+CbUf6M67u3q//w8aZshLFFV2Cl5rMI4Dgi+TNtLeXTe7cJvYVE+IJGXDexL708eNf3iyTBNLLM+jNwg0BtnuUTTziE98LyO2nZw== X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB421; 20:HmldyldQFWBRpW+FpWecVST8WAjWhreau+NBrgquMvkE283ihMd0PnxGAVsArY0N0LXcCNG6YGIkrT9y6696iQ0kD5aBHzRZuBftZlwvBA7jAmNlazWBDxO1Zb8Yu8IY0n5CEJ4+h7qnvVtY+K68AmNY12L3UI4SrvGh7y4iFab8QNXva16+XmjjgsNBbYoob2R4OILAlaE0suG2hmDmILmaWqUwnYguZ/fu1JW1VJzJ6sQmyx02PNlC1ZnM+72/DT5wwmeYoG//z+wN0Y3rJ8PNpHdUdS/Vg5c98pPWeqxyNYAcxXpIPBFkDjY2nTVPjivphUapzIc4ZVWdFXug/yeQu+QihWUjAwWjY+qUFL/+6kYG9OZobKeMMOUkHtGG4dfYaGrMHHT5/JmOuQyouoHEetO6DiFu6qLLeZNdVpRmTmnEqK515ZVDuv1UdhHhZqP+RrRijmj75WhlRr1ZfbwASUNaoxrrKvnCSgByj4DFBVLeOR0n1A0JJkL3HxnA X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(21532816269658); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(13016025)(13018025)(3002001)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(6041248)(20161123562025)(20161123558100)(20161123555025)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BN1PR07MB421; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BN1PR07MB421; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR07MB421; 4:WLIuu7iWDFKepmWhH3nrKsNc590ueFSU8o3im/JwHIz?= =?us-ascii?Q?tG26b6nIx2El29Upfc0d9LuWS4EP+kktyB62HTVA/KHlzQZ7BcIeh16Yf0Uw?= =?us-ascii?Q?jKyWRZniljDLQHsfqLoS+VEy7C3hMIXCrXv1Y/iWYswASLVgPu6QruLystdc?= =?us-ascii?Q?ppyE6cHLL1EMGXS9WqPrMySpdaWFGhgbJ2NdDZtzseTuqXW99xDY0gD7Cs1d?= =?us-ascii?Q?08sfcwW3o6dpw5/jYD/sIDiFINlxjeGSrn9+kVsni+oOR3SRFzCvihu8AdUT?= =?us-ascii?Q?VCMQ0zVvpsSbv4u/kDq6c7h0IThdvVHJMRh2ffkR1MGIsTNHqhLCEpzMvkyo?= =?us-ascii?Q?T+401FPHBOd4Qd7id4tduEzzI1ora2dkk1DvGMnAYeru8z0GtMqMy66IhpMm?= =?us-ascii?Q?vjLRtNtSgZvI23/tpzXIvE+mbQeJu6kQPOgOO2amcC2PzyP8tG3NDQIGIstL?= =?us-ascii?Q?e8RJa+QC9sQYIIsgh7ym3fokZUp5BffSCV5dgU4K0/908P6mcjKDrrGr9X1l?= =?us-ascii?Q?54133v8Tgpn4mf9TUWqIc33SabtXje1acVfG87N/ZiHtpdXNwJOyPV8ysN68?= =?us-ascii?Q?yxYoufiF+AW0niBTx/ZYtyTbny86qsPpCXtc2sYBWP6Kx8s5CbyUbPcdGdJb?= =?us-ascii?Q?iqgWKUAGwtIPWOdXqaz0aS7XZrnKKofFsy+8+6dehajIXp1KR7X6WUmwArJs?= =?us-ascii?Q?/bhimTB+KQsmU7TxuMa/iJbDPvBWohEyg+D7mCNWAVHrmjSg/ELKQAiQMQdR?= =?us-ascii?Q?XAC1Th+bnZO8uTuAF1vWNJaxQpTDvF3AEzmy/9GfKrfpjmTPFSaDf04/2c9d?= =?us-ascii?Q?1DbjycyXo67u3rEASCqEoAp0cGOSkQdB/a21ya4fjZtSQM3n8uKQopSUqa8g?= =?us-ascii?Q?9ykB/N7O7/+1eHQzKooRChI/vHx80Y/ZoE1Lz20bSRz0uMxpf3UNnzFR7Epl?= =?us-ascii?Q?4XCejJ5e1GOj57pPCUTM8tTOjdecomiItyJxTg8/VzShnqqduR+pq3Zy7ew2?= =?us-ascii?Q?HbwrdHAz7w+++2uBqm7zzSJBJbI+NWjBLDgrWLnCSza3r8/Xej43N/ukvADM?= =?us-ascii?Q?wJolb23Ri0KZrd9STq0UBX03OOlH8I+4wPqwh6yQ8gYbq/Wl/m0Vxv20+8iw?= =?us-ascii?Q?9CqgyfMvi74ktNllBgPMgDucyHEpw360Em6xv50fSnRSPjSNIMz2tl4l/Wa8?= =?us-ascii?Q?ihzGZLcv2Dt2remUfRViDLExrqODRmNCaDBhH45aWqrj+pnkalu6q26PlvcA?= =?us-ascii?Q?SfhXnbDSbK+ci2nZRqCI+ahxjKgol9wYN16e9?= X-Forefront-PRVS: 0350D7A55D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR07MB421; 23:j+ZnPQ7TPyCD9tuzcDtuZ7jZ18wYs+xMLI0cBVTf2U?= =?us-ascii?Q?641j7jvLFjE4FI4c+D+gr70lR1HudTX/e+GI/axUVHbe5kxobEZdbEVR2pvx?= =?us-ascii?Q?PR05Oqx/goTaUPxpfBBOPI3rIqXxuT97kB+KiCWLXH2sITxUdKkAeetDva5c?= =?us-ascii?Q?8teg0lfZZL20OSwBmccNQgi6f9lhkGx/WQVh+WFeY4yh8fMLx0TQkxulPs6i?= =?us-ascii?Q?aa4lenWqFroNLAXAdVNtNZCWCXyHwjPDwwBGGmggDauSSzcV35ZkJsWNe9kT?= =?us-ascii?Q?nQlXRWTUIpzZSKFBMi4eyWL+UVG92mPtisAMDFZgwyRopqEnhk2whVLthMkx?= =?us-ascii?Q?zFwk9uC6G4v6ye3pPvIJE7B/bBEOybhjJ8iykO01KuxWe8NUhlfwyeAp9UuM?= =?us-ascii?Q?Sicm91qZUsJX6GDBnYGoM2gVNm/E+gbCpf0LqPhw/yVsXokmaudgfxHCFFEg?= =?us-ascii?Q?9WJHZDx1x2jmoHWUQe/JwEXNB8VuULVu9mjfWoaxA6PRlR0sXUa9j8Ikv6xj?= =?us-ascii?Q?QY3xGxd0GvqxaeCELKa3NPZale63SCax0xmxnek7AJbQj23+TRD3a8z3pxXs?= =?us-ascii?Q?UG4fo8V8cuVh1qNqsQmZlYhVEc7c/DXelSw/N+L3cQBafBxNszrxO+ADpVx1?= =?us-ascii?Q?hoRvXCIt4NMwTVpFEhJ/24VmQ1RCf06AQlE32NDDtGFsP3HcWwLPQqdmsMq8?= =?us-ascii?Q?9SbNNP1sN3csbK8MiIb7aIlAWsOCjgA9atroOkjPqbgjmV3wi1ibb3Pr3xCH?= =?us-ascii?Q?M1htgc3UWcgzYsaWIQPKdHcaOvPNK5wLfYpv23/NcDdBV5jDFEkpmc9R1Zsl?= =?us-ascii?Q?RW9Ve7Wv9Q0tID709BJ7ADA4jDG4kG+ielgKuMH7m5l/cRmsUaFJpv5tMWpU?= =?us-ascii?Q?KgGYZFI2jiBSWb32J+X5q14o8d6MgahaxYPiYwk7uNusmFBG5MaSWkGl/XsT?= =?us-ascii?Q?NxdKRSGIYmvnbSckagv2LKt5fRnPdbuts6YXI1J9d4fapIpo5R51OiGVfUrv?= =?us-ascii?Q?Rig6BMF21+3qy4Frw42Zr3wg9TrVr/5/YrNO+CLoyRFPHwEin3uHcjuYEQNk?= =?us-ascii?Q?qahQA=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR07MB421; 6:BGhSyU8p7PpTh/9cvKpDen9ABRzjEn/eSy/UziY5bB5?= =?us-ascii?Q?sSlryiska9X1YuP9V2F46SDnhHFtSlZgOzjgz31sgqmZ98qfjRdn+e+6E48Y?= =?us-ascii?Q?fxwNaHnfX8Z/hmzw8EyTpCa0iNNGVssxV3+fxwBodLTED/52ttgRGhgRzuzj?= =?us-ascii?Q?C9LtoV0UebnbbtgDZotoEVNmpF6P9bHCh8EP0LuftzJONfNlaq6PlB9w9Oma?= =?us-ascii?Q?7sbFMg9KvYvnv+vtTTADe4o2Yo0MtBLMc7NlWKZeR1zZwI1Ixb4vQ0Mi7RHx?= =?us-ascii?Q?o8JI6e7ls71JhibMxdDyVJ46IPrzV/kXJ/fCGY0vYevlO/kcFKgEQEXddDKS?= =?us-ascii?Q?MPhDWUhxErp++uPol2GiWf6RednCO8qLbnGH5wx37Ew5uVbjJYFxi5t8tGpb?= =?us-ascii?Q?Uax4zlmEx6VspYe4G1bFS1e8p2bGz7/YwU110P6lfQDNyAT+/Y3aDcKBI5p6?= =?us-ascii?Q?PWCvRjI3OPfgS5js/JDra/84Sf0y9EVaZlLMJMaqIjaruQAhCVyoUjXakXf6?= =?us-ascii?Q?PFH7/rG5Ym44QcZzxnMXUgg6ZiQttRalFbu7APHKvMS8PhbbmQEQ6/lPG4ns?= =?us-ascii?Q?JrNM1V2wGWGG9qEsLQUaQiF8IMhzAnXkiCbOcisSinq/mlMdcdBcIDXRA2kA?= =?us-ascii?Q?0XCPX5FZuDlQ4m3AfGoemmP0QL+ifdnNwJzoPvjAwOSIdeK4HoCP8Ju/2zSB?= =?us-ascii?Q?nn1ShvlCECc1BSUnSQlPv9byHxcRW0kE5j/v4LT5Zqermk52pFQPqs5/KuX7?= =?us-ascii?Q?jHu5u6vEKWZzewiMm6Cvt76zU3DoQenhNOCiciNMs92j4YL954nxK6pdsPub?= =?us-ascii?Q?HsdL5OpEvWmqAH7UhnTEUEqRznBQ1jYrGkCuoxUwPara60Pi7fxLChC/Smno?= =?us-ascii?Q?pLFmDVQbhoncGs4udLj7C5nWW68KCilTyoFgbWSk+u5VmWNA9BmuZg52SKAO?= =?us-ascii?Q?oA2aBq55f5X4qCgahDxba67lPePLv0Hrpp7q8Nt5AiWHaP2f7Y+cMWZPNWZ0?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB421; 5:VdsrwNNpsdInItCqmsHI7SA/ogUqtWW6sDBBrL+JGmBnLNpXmidr18HptnYtlj6UAFCqy/lpIJKLSw3VQgt35BRLOysO+ssp6og0I/XelZAklE/ah7aaDpCTOwitlUIw77ZJIEK5AJscOwpu0VOBbd6K0dmniRx3F6xJQCe1Fiz2x5KpPC5ll4yQMLxTi80/fbovKAyeA6gOikAnnQnOhr+xAeXTpsqy54+pvmq89BgcHKBxFyT/LrUjvm9lkGOWZmitkrvDlDjzgK1LTBkwLmDzehhdGHRo/j2zYlN/5JeRttQ52UtfZghbsQXskSyVOrJRjZADtxVtPBmrcjbDimsqhyDnFexD1OOKR6eKrgDh9B/fjTOlEHhsztwITg6dSXEO1i5h2aQNB+NqvZ2++YLJ3gNESRk5XCIyqxbdOoLcXFQWL6s/XOykOC4PWzVfG5K8PYK+u1Dnx71ziyN7pdg3+hr4ghE0jg6q3Ms5XZRRljluCJfS9DAqVQaB0gSv; 24:FUJGh6cvrNCeTVR2sfVhABoDOxMjmNzZ3uOqB7m2xqt1uIhCrmfCcPiYcJx6eutW56uJxaFMuRwfNa0BMWXC2dZFRYn+5SMuRgZRGPqY8pY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB421; 7:ehfJSrzOEAJWOacPpT1VE7bRk0+tmcfOf/wLQ0UTLZ2K1GkoH6pTcUz1DvYeRloTdstZAUTE2q6XtLmQeI7rPumCI/m8e/PSWBzdDMQ18/ix7aYaXSXAFh2iRIZYZs7vtpHPj4P44PoEgUUQFRAfYWIVxqzgHQQrHNIcRjC+Xe/boQbjX2u0s2lNNqyICFE8I/CoY15q1Hffh2660BMyEw6cGeYtD1HyBCrXPaV7A2CAwXHph/E1LITgpQf6YxQLq3IzktNW9sw9Kzr49P1tceD9xLqrCxTEhh5mJuAFL0gPDUki7xqYJf9GOiM6HCFlkxd+W+mo0ASzQgBGKt9risMi5uJIxqHnOpHFssla5aas8l+fQWSkI2jyfcpDvayyOu2qVVIYc9pBMNfEF+ygqd/X6kF0P25mOG9XZTsu2vmbKqVjjISLBdUjK9HcMzyz+a7SryXfak30vSTDK2rXXJsPEZZuM76FkrL1eMr16lj/gS0Yn6/1p8U1KNtjGqcIZtEZLl5ex8TqloFsbxyFG2X4ik2hzmVWy3ttuRlwl1IF7mVclwDvLvYJ/wkg3+uqrh3EPBATaE/h/pIIu4aRGJmciLRCu8b2l0AXsYmvdirDBFpcXyAnxgSaMtYIksB4U6T8tBE0vwX0L7bkZKVcL4FwqmYDfaLJ53VJXCBUfJrzwwKULbDWeKdt8wKGU7JUVtDrrG43pVgSig2VFVUo569LlPU4y9l3KwqAHrpjt4xNxA3ddW4zbcXkSBb464eacjdVIPWGjlXJd45hv3BsD2D68pgWKEwlCmsKqvxQBuM= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2017 18:11:48.5097 (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: BN1PR07MB421 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch implements the active side connect. Offload a connection, process MPA reply and send RTR. In some of the common passive/active functions, the active side will work in blocking mode. Signed-off-by: Michal Kalderon Signed-off-by: Yuval Mintz Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 240 ++++++++++++++++++++++++++-- drivers/net/ethernet/qlogic/qed/qed_iwarp.h | 7 + drivers/net/ethernet/qlogic/qed/qed_rdma.c | 4 + include/linux/qed/qed_rdma_if.h | 26 +++ 4 files changed, 265 insertions(+), 12 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index a6dadae..a5da9fc 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c @@ -611,7 +611,10 @@ int qed_iwarp_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) memset(&init_data, 0, sizeof(init_data)); init_data.cid = ep->tcp_cid; init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; - init_data.comp_mode = QED_SPQ_MODE_CB; + if (ep->connect_mode == TCP_CONNECT_PASSIVE) + init_data.comp_mode = QED_SPQ_MODE_CB; + else + init_data.comp_mode = QED_SPQ_MODE_EBLOCK; rc = qed_sp_init_request(p_hwfn, &p_ent, IWARP_RAMROD_CMD_ID_TCP_OFFLOAD, @@ -711,7 +714,7 @@ int qed_iwarp_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "private_data_len=%x handshake_mode=%x private_data=(%x)\n", async_data->mpa_request.ulp_data_len, - mpa_rev, *((u32 *)((u8 *)ep->ep_buffer_virt->in_pdata))); + mpa_rev, *((u32 *)(ep->ep_buffer_virt->in_pdata))); if (mpa_rev == MPA_NEGOTIATION_TYPE_ENHANCED) { /* Read ord/ird values from private data buffer */ @@ -801,7 +804,10 @@ int qed_iwarp_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) init_data.cid = reject ? ep->tcp_cid : qp->icid; init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; - init_data.comp_mode = QED_SPQ_MODE_EBLOCK; + if (ep->connect_mode == TCP_CONNECT_ACTIVE) + init_data.comp_mode = QED_SPQ_MODE_CB; + else + init_data.comp_mode = QED_SPQ_MODE_EBLOCK; rc = qed_sp_init_request(p_hwfn, &p_ent, IWARP_RAMROD_CMD_ID_MPA_OFFLOAD, @@ -890,6 +896,59 @@ int qed_iwarp_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) spin_unlock_bh(&p_hwfn->p_rdma_info->iwarp.iw_lock); } +void +qed_iwarp_parse_private_data(struct qed_hwfn *p_hwfn, struct qed_iwarp_ep *ep) +{ + struct mpa_v2_hdr *mpa_v2_params; + union async_output *async_data; + u16 mpa_ird, mpa_ord; + u8 mpa_data_size = 0; + + if (MPA_REV2(p_hwfn->p_rdma_info->iwarp.mpa_rev)) { + mpa_v2_params = + (struct mpa_v2_hdr *)(ep->ep_buffer_virt->in_pdata); + mpa_data_size = sizeof(*mpa_v2_params); + mpa_ird = ntohs(mpa_v2_params->ird); + mpa_ord = ntohs(mpa_v2_params->ord); + + ep->cm_info.ird = (u8)(mpa_ord & MPA_V2_IRD_ORD_MASK); + ep->cm_info.ord = (u8)(mpa_ird & MPA_V2_IRD_ORD_MASK); + } + async_data = &ep->ep_buffer_virt->async_output; + + ep->cm_info.private_data = ep->ep_buffer_virt->in_pdata + mpa_data_size; + ep->cm_info.private_data_len = async_data->mpa_response.ulp_data_len - + mpa_data_size; +} + +void +qed_iwarp_mpa_reply_arrived(struct qed_hwfn *p_hwfn, struct qed_iwarp_ep *ep) +{ + struct qed_iwarp_cm_event_params params; + + if (ep->connect_mode == TCP_CONNECT_PASSIVE) { + DP_NOTICE(p_hwfn, + "MPA reply event not expected on passive side!\n"); + return; + } + + params.event = QED_IWARP_EVENT_ACTIVE_MPA_REPLY; + + qed_iwarp_parse_private_data(p_hwfn, ep); + + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, + "MPA_NEGOTIATE (v%d): ORD: 0x%x IRD: 0x%x\n", + ep->mpa_rev, ep->cm_info.ord, ep->cm_info.ird); + + params.cm_info = &ep->cm_info; + params.ep_context = ep; + params.status = 0; + + ep->mpa_reply_processed = true; + + ep->event_cb(ep->cb_context, ¶ms); +} + #define QED_IWARP_CONNECT_MODE_STRING(ep) \ ((ep)->connect_mode == TCP_CONNECT_PASSIVE) ? "Passive" : "Active" @@ -902,7 +961,13 @@ int qed_iwarp_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) { struct qed_iwarp_cm_event_params params; - params.event = QED_IWARP_EVENT_PASSIVE_COMPLETE; + if (ep->connect_mode == TCP_CONNECT_ACTIVE) + params.event = QED_IWARP_EVENT_ACTIVE_COMPLETE; + else + params.event = QED_IWARP_EVENT_PASSIVE_COMPLETE; + + if (ep->connect_mode == TCP_CONNECT_ACTIVE && !ep->mpa_reply_processed) + qed_iwarp_parse_private_data(p_hwfn, ep); DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "MPA_NEGOTIATE (v%d): ORD: 0x%x IRD: 0x%x\n", @@ -977,6 +1042,102 @@ int qed_iwarp_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) } } +int qed_iwarp_connect(void *rdma_cxt, + struct qed_iwarp_connect_in *iparams, + struct qed_iwarp_connect_out *oparams) +{ + struct qed_hwfn *p_hwfn = rdma_cxt; + struct qed_iwarp_info *iwarp_info; + struct qed_iwarp_ep *ep; + u8 mpa_data_size = 0; + u8 ts_hdr_size = 0; + u32 cid; + int rc; + + if ((iparams->cm_info.ord > QED_IWARP_ORD_DEFAULT) || + (iparams->cm_info.ird > QED_IWARP_IRD_DEFAULT)) { + DP_NOTICE(p_hwfn, + "QP(0x%x) ERROR: Invalid ord(0x%x)/ird(0x%x)\n", + iparams->qp->icid, iparams->cm_info.ord, + iparams->cm_info.ird); + + return -EINVAL; + } + + iwarp_info = &p_hwfn->p_rdma_info->iwarp; + + /* Allocate ep object */ + rc = qed_iwarp_alloc_cid(p_hwfn, &cid); + if (rc) + return rc; + + rc = qed_iwarp_create_ep(p_hwfn, &ep); + if (rc) + goto err; + + ep->tcp_cid = cid; + + spin_lock_bh(&p_hwfn->p_rdma_info->iwarp.iw_lock); + list_add_tail(&ep->list_entry, &p_hwfn->p_rdma_info->iwarp.ep_list); + spin_unlock_bh(&p_hwfn->p_rdma_info->iwarp.iw_lock); + + ep->qp = iparams->qp; + ep->qp->ep = ep; + ether_addr_copy(ep->remote_mac_addr, iparams->remote_mac_addr); + ether_addr_copy(ep->local_mac_addr, iparams->local_mac_addr); + memcpy(&ep->cm_info, &iparams->cm_info, sizeof(ep->cm_info)); + + ep->cm_info.ord = iparams->cm_info.ord; + ep->cm_info.ird = iparams->cm_info.ird; + + ep->rtr_type = iwarp_info->rtr_type; + if (!iwarp_info->peer2peer) + ep->rtr_type = MPA_RTR_TYPE_NONE; + + if ((ep->rtr_type & MPA_RTR_TYPE_ZERO_READ) && (ep->cm_info.ord == 0)) + ep->cm_info.ord = 1; + + ep->mpa_rev = iwarp_info->mpa_rev; + + qed_iwarp_mpa_v2_set_private(p_hwfn, ep, &mpa_data_size); + + ep->cm_info.private_data = ep->ep_buffer_virt->out_pdata; + ep->cm_info.private_data_len = iparams->cm_info.private_data_len + + mpa_data_size; + + memcpy((u8 *)ep->ep_buffer_virt->out_pdata + mpa_data_size, + iparams->cm_info.private_data, + iparams->cm_info.private_data_len); + + if (p_hwfn->p_rdma_info->iwarp.tcp_flags & QED_IWARP_TS_EN) + ts_hdr_size = TIMESTAMP_HEADER_SIZE; + + ep->mss = iparams->mss - ts_hdr_size; + ep->mss = min_t(u16, QED_IWARP_MAX_FW_MSS, ep->mss); + + ep->event_cb = iparams->event_cb; + ep->cb_context = iparams->cb_context; + ep->connect_mode = TCP_CONNECT_ACTIVE; + + oparams->ep_context = ep; + + rc = qed_iwarp_tcp_offload(p_hwfn, ep); + + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "QP(0x%x) EP(0x%x) rc = %d\n", + iparams->qp->icid, ep->tcp_cid, rc); + + if (rc) { + qed_iwarp_destroy_ep(p_hwfn, ep, true); + goto err; + } + + return rc; +err: + qed_iwarp_cid_cleaned(p_hwfn, cid); + + return rc; +} + static struct qed_iwarp_ep *qed_iwarp_get_free_ep(struct qed_hwfn *p_hwfn) { struct qed_iwarp_ep *ep = NULL; @@ -1174,12 +1335,12 @@ void qed_iwarp_resc_free(struct qed_hwfn *p_hwfn) int qed_iwarp_accept(void *rdma_cxt, struct qed_iwarp_accept_in *iparams) { - struct qed_hwfn *p_hwfn = (struct qed_hwfn *)rdma_cxt; + struct qed_hwfn *p_hwfn = rdma_cxt; struct qed_iwarp_ep *ep; u8 mpa_data_size = 0; int rc; - ep = (struct qed_iwarp_ep *)iparams->ep_context; + ep = iparams->ep_context; if (!ep) { DP_ERR(p_hwfn, "Ep Context receive in accept is NULL\n"); return -EINVAL; @@ -1799,13 +1960,19 @@ int qed_iwarp_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) qed_iwarp_connect_complete(struct qed_hwfn *p_hwfn, struct qed_iwarp_ep *ep, u8 fw_return_code) { - /* Done with the SYN packet, post back to ll2 rx */ - qed_iwarp_ll2_post_rx(p_hwfn, ep->syn, - p_hwfn->p_rdma_info->iwarp.ll2_syn_handle); - ep->syn = NULL; + u8 ll2_syn_handle = p_hwfn->p_rdma_info->iwarp.ll2_syn_handle; - /* If connect failed - upper layer doesn't know about it */ - qed_iwarp_mpa_received(p_hwfn, ep); + if (ep->connect_mode == TCP_CONNECT_PASSIVE) { + /* Done with the SYN packet, post back to ll2 rx */ + qed_iwarp_ll2_post_rx(p_hwfn, ep->syn, ll2_syn_handle); + + ep->syn = NULL; + + /* If connect failed - upper layer doesn't know about it */ + qed_iwarp_mpa_received(p_hwfn, ep); + } else { + qed_iwarp_mpa_offload(p_hwfn, ep); + } } static inline bool @@ -1842,6 +2009,16 @@ static int qed_iwarp_async_event(struct qed_hwfn *p_hwfn, ep->tcp_cid, fw_return_code); qed_iwarp_connect_complete(p_hwfn, ep, fw_return_code); break; + /* Async event for active side only */ + case IWARP_EVENT_TYPE_ASYNC_ENHANCED_MPA_REPLY_ARRIVED: + if (!qed_iwarp_check_ep_ok(p_hwfn, ep)) + return -EINVAL; + DP_VERBOSE(p_hwfn, + QED_MSG_RDMA, + "QP(0x%x) IWARP_EVENT_TYPE_ASYNC_MPA_HANDSHAKE_MPA_REPLY_ARRIVED fw_ret_code=%d\n", + ep->cid, fw_return_code); + qed_iwarp_mpa_reply_arrived(p_hwfn, ep); + break; case IWARP_EVENT_TYPE_ASYNC_MPA_HANDSHAKE_COMPLETE: if (!qed_iwarp_check_ep_ok(p_hwfn, ep)) return -EINVAL; @@ -1918,6 +2095,45 @@ int qed_iwarp_destroy_listen(void *rdma_cxt, void *handle) return 0; } +int qed_iwarp_send_rtr(void *rdma_cxt, struct qed_iwarp_send_rtr_in *iparams) +{ + struct qed_hwfn *p_hwfn = rdma_cxt; + struct qed_sp_init_data init_data; + struct qed_spq_entry *p_ent; + struct qed_iwarp_ep *ep; + struct qed_rdma_qp *qp; + int rc; + + ep = iparams->ep_context; + if (!ep) { + DP_ERR(p_hwfn, "Ep Context receive in send_rtr is NULL\n"); + return -EINVAL; + } + + qp = ep->qp; + + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "QP(0x%x) EP(0x%x)\n", + qp->icid, ep->tcp_cid); + + memset(&init_data, 0, sizeof(init_data)); + init_data.cid = qp->icid; + init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; + init_data.comp_mode = QED_SPQ_MODE_CB; + + rc = qed_sp_init_request(p_hwfn, &p_ent, + IWARP_RAMROD_CMD_ID_MPA_OFFLOAD_SEND_RTR, + PROTOCOLID_IWARP, &init_data); + + if (rc) + return rc; + + rc = qed_spq_post(p_hwfn, p_ent, NULL); + + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "rc = 0x%x\n", rc); + + return rc; +} + void qed_iwarp_query_qp(struct qed_rdma_qp *qp, struct qed_rdma_query_qp_out_params *out_params) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h index bedac98..148ef3c 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h @@ -170,6 +170,11 @@ void qed_iwarp_query_qp(struct qed_rdma_qp *qp, struct qed_rdma_query_qp_out_params *out_params); int +qed_iwarp_connect(void *rdma_cxt, + struct qed_iwarp_connect_in *iparams, + struct qed_iwarp_connect_out *oparams); + +int qed_iwarp_create_listen(void *rdma_cxt, struct qed_iwarp_listen_in *iparams, struct qed_iwarp_listen_out *oparams); @@ -179,4 +184,6 @@ void qed_iwarp_query_qp(struct qed_rdma_qp *qp, int qed_iwarp_reject(void *rdma_cxt, struct qed_iwarp_reject_in *iparams); int qed_iwarp_destroy_listen(void *rdma_cxt, void *handle); +int qed_iwarp_send_rtr(void *rdma_cxt, struct qed_iwarp_send_rtr_in *iparams); + #endif diff --git a/drivers/net/ethernet/qlogic/qed/qed_rdma.c b/drivers/net/ethernet/qlogic/qed/qed_rdma.c index 29de915..6fb9951 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_rdma.c +++ b/drivers/net/ethernet/qlogic/qed/qed_rdma.c @@ -1772,8 +1772,12 @@ static int qed_roce_ll2_set_mac_filter(struct qed_dev *cdev, .ll2_set_fragment_of_tx_packet = &qed_ll2_set_fragment_of_tx_packet, .ll2_set_mac_filter = &qed_roce_ll2_set_mac_filter, .ll2_get_stats = &qed_ll2_get_stats, + .iwarp_connect = &qed_iwarp_connect, .iwarp_create_listen = &qed_iwarp_create_listen, .iwarp_destroy_listen = &qed_iwarp_destroy_listen, + .iwarp_accept = &qed_iwarp_accept, + .iwarp_reject = &qed_iwarp_reject, + .iwarp_send_rtr = &qed_iwarp_send_rtr, }; const struct qed_rdma_ops *qed_get_rdma_ops(void) diff --git a/include/linux/qed/qed_rdma_if.h b/include/linux/qed/qed_rdma_if.h index c4c241f..e9514a6 100644 --- a/include/linux/qed/qed_rdma_if.h +++ b/include/linux/qed/qed_rdma_if.h @@ -473,6 +473,8 @@ struct qed_rdma_counters_out_params { enum qed_iwarp_event_type { QED_IWARP_EVENT_MPA_REQUEST, /* Passive side request received */ QED_IWARP_EVENT_PASSIVE_COMPLETE, /* ack on mpa response */ + QED_IWARP_EVENT_ACTIVE_COMPLETE, /* Active side reply received */ + QED_IWARP_EVENT_ACTIVE_MPA_REPLY, }; enum qed_tcp_ip_version { @@ -503,6 +505,20 @@ struct qed_iwarp_cm_event_params { typedef int (*iwarp_event_handler) (void *context, struct qed_iwarp_cm_event_params *event); +struct qed_iwarp_connect_in { + iwarp_event_handler event_cb; + void *cb_context; + struct qed_rdma_qp *qp; + struct qed_iwarp_cm_info cm_info; + u16 mss; + u8 remote_mac_addr[ETH_ALEN]; + u8 local_mac_addr[ETH_ALEN]; +}; + +struct qed_iwarp_connect_out { + void *ep_context; +}; + struct qed_iwarp_listen_in { iwarp_event_handler event_cb; void *cb_context; /* passed to event_cb */ @@ -534,6 +550,10 @@ struct qed_iwarp_reject_in { u16 private_data_len; }; +struct qed_iwarp_send_rtr_in { + void *ep_context; +}; + struct qed_roce_ll2_header { void *vaddr; dma_addr_t baddr; @@ -640,6 +660,10 @@ struct qed_rdma_ops { int (*ll2_set_mac_filter)(struct qed_dev *cdev, u8 *old_mac_address, u8 *new_mac_address); + int (*iwarp_connect)(void *rdma_cxt, + struct qed_iwarp_connect_in *iparams, + struct qed_iwarp_connect_out *oparams); + int (*iwarp_create_listen)(void *rdma_cxt, struct qed_iwarp_listen_in *iparams, struct qed_iwarp_listen_out *oparams); @@ -652,6 +676,8 @@ struct qed_rdma_ops { int (*iwarp_destroy_listen)(void *rdma_cxt, void *handle); + int (*iwarp_send_rtr)(void *rdma_cxt, + struct qed_iwarp_send_rtr_in *iparams); }; const struct qed_rdma_ops *qed_get_rdma_ops(void);