From patchwork Sun Jul 2 07:29:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kalderon, Michal" X-Patchwork-Id: 9821073 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 341E86035F for ; Sun, 2 Jul 2017 07:34:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 202042821F for ; Sun, 2 Jul 2017 07:34:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 11A6728334; Sun, 2 Jul 2017 07:34:16 +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 AB5FF2821F for ; Sun, 2 Jul 2017 07:34:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752043AbdGBHeN (ORCPT ); Sun, 2 Jul 2017 03:34:13 -0400 Received: from mail-bl2nam02on0066.outbound.protection.outlook.com ([104.47.38.66]:21997 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751707AbdGBHeL (ORCPT ); Sun, 2 Jul 2017 03:34:11 -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=gQf3HIPcCyt3a/wgIbHb+v9J0IfhtuweMP5nZVl2nvs=; b=O5WHC72b6umI22dlg70dOsKiYL11uXf6HmxppoXsnRM9y8kjR3OcI2Qv9XieGYPHTK8ArwOofqlnTmIBsp3p0AAn79z33atrDDzaoVekcecF2/pyR4D3g6eHgE+XHE7N6tgv4+PXA+VA0oECyn0dh0KhFm5j36Aoz6y5ULrYi0I= Received: from SN1PR0701CA0065.namprd07.prod.outlook.com (10.163.126.33) by BN3PR0701MB1108.namprd07.prod.outlook.com (10.160.114.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1220.11; Sun, 2 Jul 2017 07:34:09 +0000 Received: from BN1AFFO11FD027.protection.gbl (2a01:111:f400:7c10::190) by SN1PR0701CA0065.outlook.office365.com (2a01:111:e400:52fd::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1220.11 via Frontend Transport; Sun, 2 Jul 2017 07:34:08 +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 BN1AFFO11FD027.mail.protection.outlook.com (10.58.52.87) 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; Sun, 2 Jul 2017 07:34:08 +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; Sun, 2 Jul 2017 00:33:56 -0700 From: Michal Kalderon To: , , , , , , , CC: Michal Kalderon , Yuval Mintz , Ariel Elior Subject: [PATCH net-next 08/12] qed: iWARP CM add active side connect Date: Sun, 2 Jul 2017 10:29:28 +0300 Message-ID: <1498980572-29519-9-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1498980572-29519-1-git-send-email-Michal.Kalderon@cavium.com> References: <1498980572-29519-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)(39830400002)(39400400002)(39410400002)(39450400003)(2980300002)(428002)(189002)(199003)(9170700003)(105586002)(38730400002)(626005)(8936002)(81166006)(106466001)(107886003)(478600001)(77096006)(54906002)(101416001)(50466002)(50226002)(8676002)(356003)(5003940100001)(4326008)(104016004)(5660300001)(189998001)(50986999)(2950100002)(76176999)(72206003)(86362001)(305945005)(2906002)(6666003)(36756003)(47776003)(2201001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR0701MB1108; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; MLV:sfv; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD027; 1:0I0Sc3aN3MV69TLC1e46FfEHFgysuVhzXBbE2WzZJv2lw/GfIEtDHgWnwwIJa+cReEpN8RaRoCpcxIB3vENUFp7A4XhOWsNu2TE/219LMiJIG0pKlv0a4GQLQvcFvtiELWKDuFhGoGx3XV0APGwggwen8p7nwXC1af9g9t8tz8X6C85MkQs4H66oGsZZSE9qdbP8UrEuwjDr3mzZSOC0OIrcqmZ4z4rGUQcmtQSp7+C/+euCD6GVtuK84z2G7CxACCC5HsVhuA0oEGQ7uMsdtY4Xf4YTnTac8scEh9bHzaiBPPvgP/We4mjE7hYefKslApd4g2a5RSMMtvsCchilL2VkQOlR/AGzz28S2xxYW8y5kRKnG5rPDwbw9xWUrIPCtHu+QkFNz3IkYfKVbRwM26BxCOfzS03yN35nskJd3jcS335oNqfNLkxtZFxTi52jyyYoYHRv+yfNGIUALwTWnfiqW2J+qc7jOed5TZ7FLMqDb89D5zoShkSG86XHF1yacxuCqZBZHjom45/9LJzZXbSemRnHAS2P0bajKK276Vi3GeMQSNkiAd1qqDkNnEdoPrK3SJGHaEJIe+Cqt/po4yaF71lSO0VzmEqDK6A5QGmQir+fr6i0/JirFUwBPzhth2kS4CD12MYKHDZ8n8d+Y7uoDjR7lx15P/7JgriTuoBbGWKzMosOXaVQ0yYGtWAmln/GD/9dNbHbg2KbYfxGG+5fmywUAOHn0POJvL+VOVGcMktbS3x/3dEaY/wF/a3U7WxIOK/ED8dHfH2gXbO8ZGYzjGYrwtEyKwN8gw00uHbCYfAfvCVfQYv76IYX68MEVRL6XOnBOvjRrIN3BrQSamRnnkKf3WoDhbryOZ+3rkw= X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 848be636-6410-4ff2-394c-08d4c11cb9b7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254075)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:BN3PR0701MB1108; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1108; 3:iGhwkXBnjx8QWl0uxiD07bNFcM6Xn0g/MjQqyQNbdGGBmv1SwWM64nAd9cVpTE7ElumUCWuegB+fNX+YYZG+IKxyFYGaqiMv5wdMxKL2KOZyy8cS23Rs5HUPjeoATgTkHAXsw9RoGeCuvUD3mVQLInXhay+3iApPT04HhcQ4rHHQAUecsZVWF72t9A2Yu1ELmkJJPHeBs38zEIXoa7ibX/j0IjVlo2Q7gvBrRxVLms+deFc3TDfOggr00lyYlFKXANKgKaVs9CldYHEAC8ekITKC+AnnnOaSObCFS8eUkMUaayQGZ6hssf7U3S74DXcS7pQUMNC2yZE0YpjhIEku7pfpv6QL+Z9V9IupXtHmXV0OU48wLZTreARk6zx6ehYNxfx9FwU3+a2fNkt2V/gPlHNXs6lyXefQvS3KFdsOXQ+4fVKEWb4/gO7TU5E6VlT5doT6JlLipGcG2NF46sPUxXUrs5YHYlHnPAwxV3iYgemO9MTS1ohPa1RvJGFES74Qfovo3pm8WVOciFl1pQUpUtoY4xEWnlLGZFOJSH7yaQmzLXGZPkCK9SY8GprtNtSKEEcoHxTrsp7Qrc3+3l3gN82SuiW9Pr8H4bamMZNqMX2A92FkiLHmw03L1aNObpTw61fqA016+BT1qRTktBQGOAIyFrJL+wH/TXK703L5MA1vjQdr9q/CBX01XQhOqP6qVJvGwis4D2xmOtFdau03gH6gByphdAqV6AWoUcaQYVod6ooEPTZrXcTuMz3myQL/jHGfKwE1v+rEZMOFFbzjIzBR2NIrSQgwpORlrv3JKwNYwGDIt452neq7XO0SThe5fzqa7LsEGyryhL5hMDHiw9RltPLYyRpTIevDNA+l95a66mtXxkMR4mmSOngi8NG50nHqN2kPu4JaBqAoe1/L6hLIyR4SpTnI/9vLwpxy DgpZA9ZuT5cbaYIa82vNloBE X-MS-TrafficTypeDiagnostic: BN3PR0701MB1108: X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1108; 25:s/MeEd4/cd5qzIOuJr+llfs4GEbMHz/1EQ1V2puDn8XT3HTYUdRrDhhyglXQdeI0v57DoK3O3F0dKNxnHmsRBmomRmaPJVJn5ExZj/QYRZLz5Lq5qE6Tm+cUt30O5PTfgxnTu86s3/1ViDmX4NQAkU6FUEfPSvj7rGGjrVVsdWJ657aA5ltTAKVelHMG+7hZkkuhE5sDTAcVMgzo09F7NZkBczmop8VQms4pdubUMIqdqSSXEXOSLB2JRCDFPBl2LMTYzf+tfSV9mqNx3O1uZnyriN68o6OryRH3v2aDIAgLHUeC62uagMZvQ8cKHXT/f9bB4szS2c/TRMGJCV1U2MIF1bFXSA8D4B2cenS+CoZBTqGBAYb+/o9R9VqYa9YHDfLTmMZvbfcBultxmi7llMlqzycmMktPTX67sHGlBmk0Fa+17y1x9qlJBe5uNaTMzC+d6b82nQJmlYUcNoapBUZsZoS+AKdrNzOIoZxoV2tg1GMA0no2egcn1hbMjt6WokUCg0PNCJWeUAwuTJ11mco6sVz4J178LllEYyAaVvV6PLxvXfA0WBZPkU/DzROmCVrGzy+9HvOdp7Rxl7qv+xjxmu4Y8HEgY13gamGdEjRMgXkvUOoKUPgekgQHHWkMWS2WnCUEBTDxhu3Qnj318M+Q+xVnXIA1MDckSbTOLBe5MYn/PIXOYHFNgSrT4hDfcd3qGPregluJMmHXZdsK3HThl+9g6NqroFO8EU8lk2gg7TG75yzilTa4v1DT1D0z6eAF4O6KnhHgXJRoB+Yrl0COOaDG9lM0TvANCuOWXzimS/OfUi4KCYBDwHV+5nh1P2LtVgrMCsQm/kGM6GIYC2rSEA9LW3DSwBqxkM47JF56qL47gy8peSHV82xYszcwYEojSGymqFxFyLxVOtTVbIhiCEOMzPfWOQpBhy4 2bls= X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1108; 31:3ImrOvAjxy2D9iOum1WlQECZcJBg8/t6sFOyqmAzB08NJqlawVoxf6PPnAgRkeKNRf833HTde6h9q5d9gx3hqXAy65PcdIynVa5yghKXezIOvPv4BeanIW2RshshRevEdHATcAJuKbcQa/I3VTgke6B+l/jm/YGwCxLX0amPw+7tYs6BnloislftbZSrkrUCf150h9umNMwjx9eoqY6Udtnsn6wrHnB5NvHCkRFRcsCqdR3HxO+utcXFn7XU/QahQgO70/FRATJXMX+8h/0nOKhbV91HKVEKUDhpagXepjHLYxboPW/pkqznhmKwj9VIVC5Xdsu31zAkS8Y/H8ZVlNk0yDAfsvd8xZNd7kvHUK5KHxA98KYw8OYfo0LOsx8TfVGxfzUGDcPcxmMEeKhHfvOOpsgFensMYIgzIKjjXXwsyShYeX7l4oz17xyJpqzrBEpuXbWLM41aY6X8cHqxarTELSMMJijKQe6AE3a2rXQl1/Hjz+ihkSKEd5u8jCKhe4zzIwvCEhe9bUS6L01WkHsaVbYUJhQAAuyVe3LQRUN9fiWj6XjM0yCzGxx/W2rswvynjkWEnp27SxYGQ5iKWPwxDKlmGVVUqmAVI2csgfH63oNnMpWIg0+0AsqrsTrsYWdKgJMOh/BPpDfLV4+9LYlx0gqiJrqWk/eVIlSsFrXLWRfKUeaVxPB+VjhHQ1nBSBsmuRtdWjqm4iHQPrig6A== X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1108; 20:hPy68sAtP8S3f1iwDN1QcXUpiet8ZpI2DL8pRQcD6EW00P2pJJVIK/nnJAdySef10Wtg1zUDLzUwH2ZAt7HTUWeVqdond14wZPZGX8ipVS1eQDV/01mr0n4+HDrlr4fBXFja9hCyNXZIOyIWDH0K6YDvkAf/ShcAGu6OC2LOVe+y0lYRSlzaJpYF6qrxioA8Baj2xI393yVTcUglc+LP0EVgtV4a32VKexjWkVPn+lW/Z3Kb+uQZH+fStxdz/ckIBma+AYB9BHT1ze69PRpfXNZIs74gT0GvZej6MkZ8f1vPqyw22W1Twhwqb7JO3coQ5y7ykgF2LWeyivPodEVfxHz9QoZHCpieh1shJic4Sufg9gmsWIu8fcsH1StZhcZojBFPQQkVYUxL7I0+bTZq/4lDJ58WAVfMW5F5FtVv63CaC1j7YUCx8VEKG8QTi/I179R7UjSqB8o2LtYWCuXnwy2hc3jcDsBMHvvLPHS3E9wajiD2pftbwbYCa0FOI5fI 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)(13018025)(8121501046)(5005006)(13016025)(100000703101)(100105400095)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123562025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BN3PR0701MB1108; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BN3PR0701MB1108; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0701MB1108; 4:ckmOPkYQ6tIav83uA0B6+y4f4x+O+MxgkEaqiN2K?= =?us-ascii?Q?h4Ql+b/t7ChPQv3yCxv/ii0LwG+11IrYehYUI81RuDWuPyjYJddc7IoHBdej?= =?us-ascii?Q?wjwauxZ1JT8RzO/GBLkq42qdfzpw5tiT2Ri9o8SCX4alRxCTRjr3weD5kR9h?= =?us-ascii?Q?zNT85bnAbM2AbTwwpyG5x6jYmqP0nH42i7nQ67kPex1BSVNjemMCVHMsJ7C9?= =?us-ascii?Q?5/2hHP21kPSsR4OS0R1tPqjwNEy/vzEDO6lfk7wNxlUhKUqqwXnGnx7wZ3+i?= =?us-ascii?Q?OYglGVrng8wkMCZGJVb6NSbOiAdivYSbJyFlMzhS31gwmpLXOALA+nKhKz9A?= =?us-ascii?Q?w+mtB1KkSfZx2HgO3LksbVoSczjt2llLBjk4JH3H0eF3BDtC8z4dYuR4ppjC?= =?us-ascii?Q?g1ndd3JkFBjF5m/6zm/uc7XU7evsNYXMtSSs5lcC+wQIsXxvXt6INxyHw9OM?= =?us-ascii?Q?RxSofwGh7eFDDzP127u+s9uEvsLu979E0gfqFRYlJzi087sz4bSpMHeWlBaf?= =?us-ascii?Q?RIhumktEQ0EMFYFi8wsJMB2QeFVk+g+kRDjVX9jXEEhguZEqUnxFQgqJN2WA?= =?us-ascii?Q?mLcIrpbq8JxYeDS/DNlM0xt+ASZGpcm2vYBfI9G8IewluU/bZ52nNp63dqc+?= =?us-ascii?Q?R6BkaGw/KNLPYMSEhppztsTg/ObuY+wamSQ+02onQ5ZMyHcFt85D/hlteDK2?= =?us-ascii?Q?oW1HffzW4b/nh02qntAS/5IjxxZEaMnzAf+0IQdEbzclMVil6JlJsDKtH81u?= =?us-ascii?Q?Kllffchb/dAeI3iCKeFkHqQy5MaBMfqRu6ErUxoPgZ3FxptSwYsz+UMNpspd?= =?us-ascii?Q?uA29wnItNQwP2Pt9ceiV1Uc2pzQD7cDcU7RpmtqoIoJVdFdig/sRxrmcEa5Z?= =?us-ascii?Q?GMoqqS/wlH29lsbN7cQCDGjghixfpxQSOmwB87mJ2v9Z59XFQ1eIbYC1uwg2?= =?us-ascii?Q?rw/pKgCS8SDlsy8vvMQ2LydIKcKzcmRmM6Bc0f+pUlkFZUcHLTpa0EUW3uU2?= =?us-ascii?Q?1bo/93bYumFy5qZvvCSXyL9+jsnEEx/pZeWgBnj5mEC59INQP7hHy24gq2M6?= =?us-ascii?Q?Xqcj/02DrO4R86uK9U+XowyGaUTpZ5vqV7idT2XTAahIEqMlcZMktBt7Wyn7?= =?us-ascii?Q?GvWnbTX8QgG74JnleKqZNH0nDfBVXboHtl/lEt8WrHVbnyaNg991I35COqAs?= =?us-ascii?Q?gZw4NSq3QULiBEZTSmLcHjlPcfZutz9tLtpq/j98xiMwE+ozD90R62zyVWMP?= =?us-ascii?Q?UxNx+l6vosFPcZ+urZJ+KM1POBQXCPmcC+QdMOnp?= X-Forefront-PRVS: 03569407CC X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0701MB1108; 23:EK5cscTYQmjaSpgHiaIaj1wHsofflK0kTYgmtdR?= =?us-ascii?Q?NDs3fVPhEwT0bDIFHsGn4tyQGWQ+bZVX2y6H4zErO3vddEV0cmA1N/nT2kgo?= =?us-ascii?Q?lXw5lqkjASc4MaJW+aSyJW4aaFq8gYYlM/XghvDeAfe/4UfqCh1i4ANOqwtb?= =?us-ascii?Q?jkEWLRbtYTsbxdsuZebNJDQNHolBoxP4mRfq/aHhgUaYbLmWHAhiX9XkrJOo?= =?us-ascii?Q?tXj8bP+7Z927StJjhUxVKpewWaDKG3CIJ+/gtAy8qRYfUH5zrdMF7cn7+SaA?= =?us-ascii?Q?dmcRGWSKGHNDOWZ2wabRJpzprl3/cEBYjNE02JM7r0BylJ9/Y54vUFwYmaXe?= =?us-ascii?Q?ekCu/MoGeY3NHfMclRh4AARkQ4llnqo0BwZE3fqTdEsIfxL2uc4UBUtvJBno?= =?us-ascii?Q?bX2CHJuIhm8zBbISsN4VcZ3Tcl6ySa33TTcRS0CXdqoLSga+8D3gpWs/g89J?= =?us-ascii?Q?LxoPAnIzn38Y3d7K59SR5uahq4wfmIE87q5oqSfqvytGt0G75xwhAuGIoNRL?= =?us-ascii?Q?I7c8lswvW+2YAdATHgoaW50ve4mz02+CxSZs+/84vx5hXdxxvcvzhTSx3AU0?= =?us-ascii?Q?OErLJGztjGNtvLH69bcOI20uLZFClwe6UkojWpnf/4SfEtLTcAWUvAnRsGl6?= =?us-ascii?Q?U73F1GpdWav9Z0BazvcOT7r6aEymzf+TF7+dSb0BErphlZNUNyUj3PgDpwIM?= =?us-ascii?Q?whg/HKdao9LRcm5ltDBP6BnNLjuxJzkrKzfGsbus9eIZ2j75nQqNztVqhwur?= =?us-ascii?Q?DmZvErtLd7Lo7YfkDR5rC5QxuKeOFGO7COZb/C2mmDVN5d9JEWN/f+Rd1eHk?= =?us-ascii?Q?R3e9OkOfn0NLhy8l7j19pOI+Eg5NWslNCw/7w8k9ZFZd7iL3wxyslC16Pot5?= =?us-ascii?Q?6M7PQEbX1Eny/b50wrBRDT9AWEWM5Sf+GzofpJkunViBeWvNE68osJCYiu6V?= =?us-ascii?Q?3NSbXlxvWizKlRKXJXRA2fnvEukc3zZvFKKa58RPEffxnGt040HDuh99xSnJ?= =?us-ascii?Q?Lw+Re+x6OogBKUoHf01T3SyMk1Kvx2xGamV6jnbXJzMDd5g=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0701MB1108; 6:3AV5EBTTFWrAD+A9pmKBoaTWUW8sT9I4oZ/GasTp?= =?us-ascii?Q?dgnK2iX6zISG7mUm7j4vrulnxAssBJaXTb1VVh8LBVwPf8yq+IYEt8clgEmu?= =?us-ascii?Q?f52m/qrGdSMjuLg2BuTD/nJhLZL22S5LYk75awj5+KMQ87MuC0n2ujJbPqR+?= =?us-ascii?Q?YW6EsVGAwPNXIBypAUhLlr2dQY5RIISsvoTvQi3tuG47e9BP8G66UgWKw1dc?= =?us-ascii?Q?5Ei6v9YPtnZwnJhXoyLv3bLe7nlzmk5/Ev1lXcqPlHYGoBtrnqTMsDB6nwA5?= =?us-ascii?Q?yWyANdsxxssg1LiX77pzoUhsB6B5U/7C83AcN7upnZdDnVXTGw1LAek3FkRc?= =?us-ascii?Q?12GqKFwi8euotgIVA8gb7PmpmBLhjKLUc8gf1XZJXgU1//JKY8pMO2yk/6e+?= =?us-ascii?Q?QfMO1G5h0FtDAIbDoxqO2Pvh6owmX8rUd4FwOkk/LbPds+aj6odw1RoEN2T0?= =?us-ascii?Q?puhDG1TLeS6SyxSdyqPL1/YYCL0x0KA1k8gObMOd+O4KNHrIereSWBALLzXm?= =?us-ascii?Q?Fv7A0etNkrJMltx4cFhyY1Kuxm3G5TJ1a5MPmerC9IxBOfNMO3cWSJLnKoET?= =?us-ascii?Q?OjMGwmNR5fRQWB8/sM6JPNEO/3UzRJQU9RZWRQkVTwgTQARZ4jIioRwY9S3n?= =?us-ascii?Q?HeMqsdt+LQDDstzT+z4KVVpRHeXbjRlsFOIyh0Nf3D0V95nVVRT+W94oMQd2?= =?us-ascii?Q?pJo8TBRDJY7AtGISpukSy0AFnN2bD4DX4WEe5tb3cdLMJcabRWrZOHdHaX3Q?= =?us-ascii?Q?fG62rUbpoU1QOkQUKbKaGJnez8gvB+emrwTDYAn70slWk2GYVMlT95uy5OJI?= =?us-ascii?Q?XSb9/v28bixx945XIF3nJl9VsczFE0hi4Blv4MbffitXR/qHajK/gc1mk1Mp?= =?us-ascii?Q?e7+XoFn/jmiBBN17qmSPpFP/QFy3J+9mrdKOKsADq1oVJjerCSMQ/B9E9RbS?= =?us-ascii?Q?u/urLXqwaJ4MPj7tLm8Bk6fW82M1qu/F4EbZg2+BptQ43sN8bMXAzbqSTW+C?= =?us-ascii?Q?3Z8=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1108; 5:MZVSzKO3eyPwW9ZJ09LsVTK0ilJfWDmA2yvmiFY7uPbVucK9IF2NpilX2wR2HjHAe7uByBE+VkH/FkWUYsxLlyXLyi1Gov275zme1ZHtyFGksRXXi4qTcFXlY4M8dgx76Bkv1fssbBfup7hShLix2vUQivFnLxVfKjQE0nxs4qN9S7YGleWVwaA5NZcU0WFjHpFqG6A59Shl8+5LYD0wNcwRFVV7ybH7Khbcb2YkX+D4aHzkTdzasfQ5Z7oYTQYcFRYYo0ux90UFs7q/PcRYvfKCT0P5071ywm8LEq+FaFjKfwZhCf9Dg7fHxcjunMiHCFq4XFVGpxe3mBEggATw6IQhZLiL7RESmiEtIvedjuZurVKvFH9atjbiENzejiu9dTqycdJrKX1eOUDdWvwpyIggiwJmUCSfFqrxAH4i0XRC9qEoqVHmRDq5ICpsueeChPWd4G2UHM76oMPr7FZMYj2SnY172pSKYZ9n9lWNkcoWpqPpotHjFHEsaGVAe69r; 24:0j+MsbVWBilcCoB6+E4B1LRa4nuGMUmu5hyrYgFmRZvdVVet8IW3BU89HAMi5BLKLNv/wn40Lfj0PDra18FjC3BYdH/2wqpa7ZO4Db1/fMk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1108; 7:0wtGocj0s2LXPcUtv0TzosVbsteqAHxQJOaPA//vNA2SC2gvWvdpGU6ZqRyzaYhM4GkcuVdmxWKx1pWIF/LBDeLg1eLFi6z34SPT11JVJA3dqYsO+m58FGpDDSod2e6AdwsGMyXZNXW4lJS5Leky18MOBY5LCDkGZx8a973F/NAvMvgEwJiNK4r3mUOoMjpmcZKsDksoX5ia6dx4iTcVsnZRUK8wxr80WhpIMUZrSFzFPiQ4gxT/JugV7T7iShjogJMuvES6uCNVttIlGfV5EEcpJXnvHWMvPGlNxcXotFBjND7xVazki/OO+Cc1AjicS4IeMghah0mclW+lTeIcHrhN/ez1Qd6dwTbYwWa2LWnAgOwBEAB+TZ3zlDLenttno7TNJFhqQZOdlkcVq1zUx+Z2+jG+/r6qCDsN3slbzN8CQJasptsfBLt/7+9Harejrik/OIg9jyBl1NkQ42WyA/egeXjCRKUo1DsFf9G9PV4Cls0zabarhY5Cii4WcKj7ID5GTGnwImgpmgbPDn9rB0MGGBndBbQIZN7P1vPEY6tezaQ9SHLmALrP7DubBtYeOFirEL+HeLo63saJoW9FQ80fDhmF69ztrbUQujUApZ8feJ+pClhGTKOezJh33wYMxR1hBlnvlQcMoMTWAyT76z+KuBYTTkP88St+BLwscAafLauJdrkwUOmcQnHN6VpUA1jkWuTvpuJ0L7/P2n8otDQSo3zp7HMX6nUMfJs1eYYzItYvSDjCEw1yk7gwXeyCPRGJtvozf4rlvfJ4jngABvGx2geUO/5fF0E9zwd8rb4= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2017 07:34:08.1688 (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: BN3PR0701MB1108 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);