From patchwork Wed Aug 3 23:27:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adit Ranadive X-Patchwork-Id: 9262349 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 A6DFE6048B for ; Wed, 3 Aug 2016 23:36:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9704327FA1 for ; Wed, 3 Aug 2016 23:36:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8B60F2807E; Wed, 3 Aug 2016 23:36:50 +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, UPPERCASE_50_75 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 79F4C27FA1 for ; Wed, 3 Aug 2016 23:36:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932449AbcHCXgs (ORCPT ); Wed, 3 Aug 2016 19:36:48 -0400 Received: from smtp-outbound-2.vmware.com ([208.91.2.13]:37117 "EHLO smtp-outbound-2.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932493AbcHCXgp (ORCPT ); Wed, 3 Aug 2016 19:36:45 -0400 Received: from sc9-mailhost2.vmware.com (sc9-mailhost2.vmware.com [10.113.161.72]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id E456198278; Wed, 3 Aug 2016 16:28:16 -0700 (PDT) Received: from EX13-CAS-007.vmware.com (smtp-inbound.vmware.com [10.113.191.57]) by sc9-mailhost2.vmware.com (Postfix) with ESMTP id 0CD77B06CA; Wed, 3 Aug 2016 16:28:18 -0700 (PDT) Received: from EX13-CAS-001.vmware.com (10.113.191.51) by EX13-MBX-026.vmware.com (10.113.191.46) with Microsoft SMTP Server (TLS) id 15.0.1156.6; Wed, 3 Aug 2016 16:28:17 -0700 Received: from NAM03-DM3-obe.outbound.protection.outlook.com (10.113.170.11) by EX13-CAS-001.vmware.com (10.113.191.51) with Microsoft SMTP Server (TLS) id 15.0.1156.6 via Frontend Transport; Wed, 3 Aug 2016 16:28:18 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=onevmw.onmicrosoft.com; s=selector1-vmware-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Ub1Y1/6aGqVhgbWwZvJ7TT2rNgrYgqZlYo63IKo1qtI=; b=E1Ljwhk8jz6wwAnuPUJ+Fi3i3LL494Jynatt9wVcN3Sf9g7lenmHW+rLuJKkmuYzMDkhR0uQ82616q9GLR6f7cbi3aOuFHalKSlAMjEdpyOHqjqECXfZFZ1Yjj/hyjrrAt6D6QtPcc9ZnqIvqZloWZNaO1/Dxr/OkoNhO0v+zEs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aditr@vmware.com; Received: from promb-2s-dhcp95-136.eng.vmware.com (208.91.1.34) by SN2PR0501MB847.namprd05.prod.outlook.com (10.160.14.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.549.15; Wed, 3 Aug 2016 23:28:10 +0000 From: Adit Ranadive To: , , CC: Adit Ranadive , , , , Subject: [PATCH v3 02/15] IB/pvrdma: Add virtual device RDMA structures Date: Wed, 3 Aug 2016 16:27:31 -0700 Message-ID: <1470266864-16888-3-git-send-email-aditr@vmware.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1470266864-16888-1-git-send-email-aditr@vmware.com> References: <1470266864-16888-1-git-send-email-aditr@vmware.com> MIME-Version: 1.0 X-Originating-IP: [208.91.1.34] X-ClientProxiedBy: CY1PR12CA0084.namprd12.prod.outlook.com (10.163.230.52) To SN2PR0501MB847.namprd05.prod.outlook.com (10.160.14.145) X-MS-Office365-Filtering-Correlation-Id: 6c6eafc1-c611-4aee-06f5-08d3bbf5d5e0 X-Microsoft-Exchange-Diagnostics: 1; SN2PR0501MB847; 2:XooQ4hQxLzWA1Bo6or88KKEf5jkbMpaKBGD8WcoHdk6EFHzki3bLNPWlReZd3wGFOu0S9fx06+ycTayjbXRZ2QkZfYZElsJfemkZxtU/2wGh0G7zSke5Sq6Qfx/W7oSy/lEYxlT/g7jp00IKsVVksxY6youxjTYU7JBkDkLzKER18kpoN+9mmMpeGagidCJD; 3:eZ1Zghiea+liHN4I/yY/an9pY226L3yuJAXJ5sziUSyKSwLI3qyAa3UUqRVL327ETZJeTtXxCFBAfYWjNA7sBdugJEiqmZT40IwqQ0klnTbtpddkfEzoil5AlEdVnsDC; 25:CprmJt+sw2fx2uDOFz2onl2oRGnsTAwYOxcbib3dpN7cORcnN2xtDSKOsJlrb1xDQ1awxogV2+PzqGrXCk4s82ubE8of0W5RR/bLnunxg1p5wRxdt8GYq4N2/c45k6fJNrTayU0Sx8mrGuT2EU8mSNAQnIOweDOvOOV7pYv6ALHBiGit8WQ/zjenEFLbK171b436wCLb4EGlQTrPFa8gYoeKMXqWQ6G1aYMvrrzb/TGX0/hUJFiM+kZ3lXo65oygTYwmHlxeWsfQWJxiG79+SBS0+bFJgRy7LfPFlU+GxXZq+FtUgA11u3x1+Qqd2MArP2/tHXhTVaqLYgo1qAfqqY9+B2VIJpGSTIYo07IxbehtC63uUlvgG3EJ8k2ciwg8ucDo3aqYc8Toh7POjkMsRQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN2PR0501MB847; X-Microsoft-Exchange-Diagnostics: 1; SN2PR0501MB847; 31:ztrRWB9y1qf/1NMCW3fnV9BfrFvz9XJE6NFQLOBGcHcbYAaPrLT5y3yy7phON7J2q818kcBZgp+7ZMgdk6nDhiRI4PCANdgF3glblsT7Wq2dDi2MFa+WwubnRiwudn4R5gpYnU/6qsFTYyeJFq2wB/ji+c3NU9O4ntfzLF4wI4bIcQPqHr9IIW95+Shou/m46YlKYRau6CDPZa/GapKoKhZYU543WlDIVnpy64/uS5s=; 20:KzaMNT26dkV+wl8CLMTfxHfRbxsmWWaqlM91g19teXUidB+Da3a5OnmfL8mh2BM6IRGqQY0ZWqeS0EOim2lP/YSNS1piVxKhtMHTkVk7CtpzIpGgzP/D8iW2qca2yWZSqOzKkUTy/wFi1xBm+jrZGilRNs8OSTocTZN4DC1wWMvSHYX1usAwv4z+ZGybWRk143NsyrgbQwdOB48MUtbLLPf9TlKVcUzR85SqThRqqmb67qLlaY1brNA9H8K37wWq; 4:ZPNfvzmYxe12WNz2F7RExjdQS3tOc5o/m9qO7BLm49kKPQrpZ9/oTwB9osXsoMOWugdk6ZKkhZya4mncykSD+ywOZIg3lsMZeK8VEvd2qtJ/uzHbyBDy5jC+uIMtDaHMCp3jLc8JXgYz31PB4A5Tnhv+mh5W/SMR0lO8n5D4sAqFXSw0YPEmdTTvGlNpuzSAbH97cDWnxIswkWb2oiOJEAKDbSOlKyZGlyqnbeJwKtneObzypU84+NtWg0vugipvoCbf2vyapMbHjVCwo6sjzIlDLOKpL/+BDaQXlBlfpglPh/LbNSY8um8cgxdRYTSwn7qqYAf59j4+EOl8hCyPzhaYizCu3dqgFEbGeMhU1UIR9DjRtCDf5YX/pMYv80ewNnO84i4rFnNXwTh2l8xmrQh36OavkMru8yNhW0HY1iU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(61668805478150); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001); SRVR:SN2PR0501MB847; BCL:0; PCL:0; RULEID:; SRVR:SN2PR0501MB847; X-Forefront-PRVS: 00235A1EEF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(979002)(6009001)(7916002)(199003)(189002)(4001450100002)(66066001)(106356001)(189998001)(33646002)(92566002)(107886002)(5001770100001)(77096005)(229853001)(48376002)(50466002)(101416001)(97736004)(2950100001)(42186005)(586003)(47776003)(68736007)(76176999)(50986999)(4001430100002)(2906002)(105586002)(7846002)(7736002)(305945005)(81156014)(50226002)(86362001)(81166006)(8676002)(6116002)(36756003)(3846002)(5003940100001)(19580405001)(19580395003)(2201001)(4326007)(7099028)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR0501MB847; H:promb-2s-dhcp95-136.eng.vmware.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: vmware.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR0501MB847; 23:Q20oQmZ7sptjgnvPWHQwd0Wl/2CoGiMg7BLtJB26?= =?us-ascii?Q?k9hKsHixih65XGgMPrmpLaVtsVdnbSUcXaEdtEmA0jjXR5gaeBnv1bnglE9/?= =?us-ascii?Q?qBj46eHrOJwVDlF2faTIKQwGEVVJYUK+E8EvkQjwktk3dWLQvnRRXJ7fLIjy?= =?us-ascii?Q?GGzhc/kly2RHCAELpGj1OzxWVh1B6uvwg0rKhHHsMAWgO5hH8ELMiAjCyD7b?= =?us-ascii?Q?G3wRn6z5DzbDZBGkeFyLuXNEXfPspE/qEc74fIZUHmFurEW+z/xs7/8aafKl?= =?us-ascii?Q?KLYhMasShFrKLvGIFk8T/snjbjTOSSAyuiTuOGkrFesijxHLe927CjiITEDp?= =?us-ascii?Q?RvAtVP6NKOwIaggIhQgBn0VfEdzBKCiPLTuJ7znZGnPH9bTRzJ3LWV8fomYG?= =?us-ascii?Q?3AR8LRiiHmxgXS8wL+VxvMdf2xJJ4v30q2aAvnIgxo1QlaPYrZKa+HoXv6Q9?= =?us-ascii?Q?iL7iRcX9xZhM7vFEoPi/83c+Nxm3fkXSOM9McbcOLKC4NDOt9gWeSWC8htyk?= =?us-ascii?Q?UWGfOBDJWovrrd2dvNo7qM1PVreWiiB7PlTP5GLK4uJgwAmsKvDAB00Lhe48?= =?us-ascii?Q?S6WYqGmAIZqs4rexEArOtj4OKS8m+zy3cZg0aXEum5xIfSJChkarK2Lv32US?= =?us-ascii?Q?eX5Rr4CEq2fBF0HtY9WZWRmDrhfmGyHRtfdwALixtDfKs05664/W/oPqD2PH?= =?us-ascii?Q?cXTe3Ho0iJm4OyK76gHUdFLCUzNwATrhpF20rfHzbW24+QP0vY6p0wF4QYIU?= =?us-ascii?Q?4c+ENLx4SV97ploIMny0TToBffy8bIg2PdwEVsDg1UEBfcf3C4xwfbwvmjp2?= =?us-ascii?Q?41n7RUI4EWsN8DDhUhpY52xx2aaPvkV9gU6kqkubd7H2R1UJsq96Y4X0MEHb?= =?us-ascii?Q?vVtLF85Jvp+vUT+PrbOeaTi+VbGf4dCQAVWnw0RkeN2W3+ElI0l5PTld3gUH?= =?us-ascii?Q?0IcfwWNG4DuL/frtFQiscpa5FA7occAFuGJZHHlCsnDBWlzRo2hRbhNWfVoN?= =?us-ascii?Q?OQTtQ8/bZTPOVJy2I2zUE/m3XIJkIyEqV5iEhnTKrLOKwT+4Z8j28i/cqzLd?= =?us-ascii?Q?O1iqjvsdxlg2/f0OSof5IdM01u+DcHZVVr4oyGODL+obRxIslxQJ8DtTB7pQ?= =?us-ascii?Q?BkjOHOu88JkCf85JZ37stx+fLX0Rq2hdvsJw3eSFcKWFn+KLaFrSnmdH82n5?= =?us-ascii?Q?KHIhF6jopJiOqbFeXXofRq4MfbYgUzauBwAje7tuK1DU+hUBOXKGhISJ4u55?= =?us-ascii?Q?ZH9Q6nVxT7z4vPeQ1MxD1a5Hjy10awocLSgVcCCV?= X-Microsoft-Exchange-Diagnostics: 1; SN2PR0501MB847; 6:31c89bLh/7A+fsJQ8/JAB1UmSqVNn1pQhOb4uLGMluiKXDe+J5ZS1sc2w6u3oFvxliLW9m9vcYOxnVIPxUWApl03f7my3kFWe9tASyPOkIw/L1P2qjtylt7xz4s4FYjMtkd+LFL0Qx2didn5JoQbgsO5M9xGJsoxrLDfe08022NTov3VMZTpqJ3Cz9leTvc1eGRtVi7Uvvw4l+rGKkcL5Dv6bTr7/ZF985vPA8hDUq9MsBAsbHoCoVsmpsO+wD9ihnc9dKIUbOX5/4Md4CGcWdSWwW0yWx/CbX3o8+7Gzt4=; 5:Vr9dFPlG8c9HWyATRTz7UCd1OoDibBFx2sQDLuk1UsmNrGtDmxlW4ZwpGOHB99Q2qGkJthvdUhwzA8IeoTiPt2XEV2tz79uOS1c9/4oj+7x949232k7BFVk6U44G0cwxs0TQHt5MTgAgrBJ0hKFe0Q==; 24:kwZja19YPPeii+5VwYxvk8xiMw/x5bdLB6jANygGE88Q1rhWXfNm/BvI6OEomoT3OVV46iY9mdzIqQtJeDezycBOOqx+wjdAWJZ/7ONKTek=; 7:6Eab9I1GWDYN7simXiHSZg8PA8ltZj3zqG21j92BPIJtKavWieudoVXcqBRmcUi02sJgGS4Hnm6BAAHFjHT5hQqrfRkaXQN/JH/bqQda9xKWr40UGnrXdEpYKNETZOQP3TouDt5evDo4RFftHRBzCdy96PBgJ83Sz0kb+772p1gWV88o7OA8FPG7WmYkph3Z6KNjjVidMgLPY4QTWZDJ9SxKKYOt0MvcX4yInUdiuuaJNMmxVdOHcCkkeRoFJ8bD SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN2PR0501MB847; 20:U15eLF7y4XAG/13GbHtN9dqL6NVMA2nAFTER3KqwY5feqF6KFRNPBQOzJ16DJZQreaulB/ElVCBHqCgLGEFDtieNSs3G4TAdEI4DJszVeiNfMo/t9e2rLqc+XrqD+vZRSn6V/ZS9uLouicKrLL3rjf4m/g1jBsOgBNuucKRz19Q= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2016 23:28:10.8044 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR0501MB847 X-OriginatorOrg: vmware.com 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 adds the various Verbs structures that we support in the virtual RDMA device. We have re-mapped the ones from the RDMA core stack to make sure we can maintain compatibility with our backend. Changes v2->v3: - Added , to end of enums missing them. Reviewed-by: Jorgen Hansen Reviewed-by: George Zhang Reviewed-by: Aditya Sarwade Reviewed-by: Bryan Tan Signed-off-by: Adit Ranadive --- drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h | 450 +++++++++++++++++++++++++ 1 file changed, 450 insertions(+) create mode 100644 drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h diff --git a/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h new file mode 100644 index 0000000..4bef8b4 --- /dev/null +++ b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h @@ -0,0 +1,450 @@ +/* + * [PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT + * UNDER THE TERMS OF THE OpenIB.org BSD license. THE ORIGINAL LICENSE TERMS + * ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + * + * Copyright (c) 2004 Mellanox Technologies Ltd. All rights reserved. + * Copyright (c) 2004 Infinicon Corporation. All rights reserved. + * Copyright (c) 2004 Intel Corporation. All rights reserved. + * Copyright (c) 2004 Topspin Corporation. All rights reserved. + * Copyright (c) 2004 Voltaire Corporation. All rights reserved. + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2005, 2006, 2007 Cisco Systems. All rights reserved. + * Copyright (c) 2015-2016 VMware, Inc. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef __PVRDMA_IB_VERBS_H__ +#define __PVRDMA_IB_VERBS_H__ + +#include + +union pvrdma_gid { + __u8 raw[16]; + struct { + __be64 subnet_prefix; + __be64 interface_id; + } global; +}; + +enum pvrdma_link_layer { + PVRDMA_LINK_LAYER_UNSPECIFIED, + PVRDMA_LINK_LAYER_INFINIBAND, + PVRDMA_LINK_LAYER_ETHERNET, +}; + +enum pvrdma_mtu { + PVRDMA_MTU_256 = 1, + PVRDMA_MTU_512 = 2, + PVRDMA_MTU_1024 = 3, + PVRDMA_MTU_2048 = 4, + PVRDMA_MTU_4096 = 5, +}; + +static inline int pvrdma_mtu_enum_to_int(enum pvrdma_mtu mtu) +{ + switch (mtu) { + case PVRDMA_MTU_256: return 256; + case PVRDMA_MTU_512: return 512; + case PVRDMA_MTU_1024: return 1024; + case PVRDMA_MTU_2048: return 2048; + case PVRDMA_MTU_4096: return 4096; + default: return -1; + } +} + +static inline enum pvrdma_mtu pvrdma_mtu_int_to_enum(int mtu) +{ + switch (mtu) { + case 256: return PVRDMA_MTU_256; + case 512: return PVRDMA_MTU_512; + case 1024: return PVRDMA_MTU_1024; + case 2048: return PVRDMA_MTU_2048; + case 4096: + default: return PVRDMA_MTU_4096; + } +} + +enum pvrdma_port_state { + PVRDMA_PORT_NOP = 0, + PVRDMA_PORT_DOWN = 1, + PVRDMA_PORT_INIT = 2, + PVRDMA_PORT_ARMED = 3, + PVRDMA_PORT_ACTIVE = 4, + PVRDMA_PORT_ACTIVE_DEFER = 5, +}; + +enum pvrdma_port_cap_flags { + PVRDMA_PORT_SM = 1 << 1, + PVRDMA_PORT_NOTICE_SUP = 1 << 2, + PVRDMA_PORT_TRAP_SUP = 1 << 3, + PVRDMA_PORT_OPT_IPD_SUP = 1 << 4, + PVRDMA_PORT_AUTO_MIGR_SUP = 1 << 5, + PVRDMA_PORT_SL_MAP_SUP = 1 << 6, + PVRDMA_PORT_MKEY_NVRAM = 1 << 7, + PVRDMA_PORT_PKEY_NVRAM = 1 << 8, + PVRDMA_PORT_LED_INFO_SUP = 1 << 9, + PVRDMA_PORT_SM_DISABLED = 1 << 10, + PVRDMA_PORT_SYS_IMAGE_GUID_SUP = 1 << 11, + PVRDMA_PORT_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12, + PVRDMA_PORT_EXTENDED_SPEEDS_SUP = 1 << 14, + PVRDMA_PORT_CM_SUP = 1 << 16, + PVRDMA_PORT_SNMP_TUNNEL_SUP = 1 << 17, + PVRDMA_PORT_REINIT_SUP = 1 << 18, + PVRDMA_PORT_DEVICE_MGMT_SUP = 1 << 19, + PVRDMA_PORT_VENDOR_CLASS_SUP = 1 << 20, + PVRDMA_PORT_DR_NOTICE_SUP = 1 << 21, + PVRDMA_PORT_CAP_MASK_NOTICE_SUP = 1 << 22, + PVRDMA_PORT_BOOT_MGMT_SUP = 1 << 23, + PVRDMA_PORT_LINK_LATENCY_SUP = 1 << 24, + PVRDMA_PORT_CLIENT_REG_SUP = 1 << 25, + PVRDMA_PORT_IP_BASED_GIDS = 1 << 26, + PVRDMA_PORT_CAP_FLAGS_MAX = PVRDMA_PORT_IP_BASED_GIDS, +}; + +enum pvrdma_port_width { + PVRDMA_WIDTH_1X = 1, + PVRDMA_WIDTH_4X = 2, + PVRDMA_WIDTH_8X = 4, + PVRDMA_WIDTH_12X = 8, +}; + +static inline int pvrdma_width_enum_to_int(enum pvrdma_port_width width) +{ + switch (width) { + case PVRDMA_WIDTH_1X: return 1; + case PVRDMA_WIDTH_4X: return 4; + case PVRDMA_WIDTH_8X: return 8; + case PVRDMA_WIDTH_12X: return 12; + default: return -1; + } +} + +enum pvrdma_port_speed { + PVRDMA_SPEED_SDR = 1, + PVRDMA_SPEED_DDR = 2, + PVRDMA_SPEED_QDR = 4, + PVRDMA_SPEED_FDR10 = 8, + PVRDMA_SPEED_FDR = 16, + PVRDMA_SPEED_EDR = 32, +}; + +struct pvrdma_port_attr { + enum pvrdma_port_state state; + enum pvrdma_mtu max_mtu; + enum pvrdma_mtu active_mtu; + __u32 gid_tbl_len; + __u32 port_cap_flags; + __u32 max_msg_sz; + __u32 bad_pkey_cntr; + __u32 qkey_viol_cntr; + __u16 pkey_tbl_len; + __u16 lid; + __u16 sm_lid; + __u8 lmc; + __u8 max_vl_num; + __u8 sm_sl; + __u8 subnet_timeout; + __u8 init_type_reply; + __u8 active_width; + __u8 active_speed; + __u8 phys_state; + __u8 reserved[2]; +}; + +struct pvrdma_global_route { + union pvrdma_gid dgid; + __u32 flow_label; + __u8 sgid_index; + __u8 hop_limit; + __u8 traffic_class; + __u8 reserved; +}; + +struct pvrdma_grh { + __be32 version_tclass_flow; + __be16 paylen; + __u8 next_hdr; + __u8 hop_limit; + union pvrdma_gid sgid; + union pvrdma_gid dgid; +}; + +enum pvrdma_ah_flags { + PVRDMA_AH_GRH = 1, +}; + +enum pvrdma_rate { + PVRDMA_RATE_PORT_CURRENT = 0, + PVRDMA_RATE_2_5_GBPS = 2, + PVRDMA_RATE_5_GBPS = 5, + PVRDMA_RATE_10_GBPS = 3, + PVRDMA_RATE_20_GBPS = 6, + PVRDMA_RATE_30_GBPS = 4, + PVRDMA_RATE_40_GBPS = 7, + PVRDMA_RATE_60_GBPS = 8, + PVRDMA_RATE_80_GBPS = 9, + PVRDMA_RATE_120_GBPS = 10, + PVRDMA_RATE_14_GBPS = 11, + PVRDMA_RATE_56_GBPS = 12, + PVRDMA_RATE_112_GBPS = 13, + PVRDMA_RATE_168_GBPS = 14, + PVRDMA_RATE_25_GBPS = 15, + PVRDMA_RATE_100_GBPS = 16, + PVRDMA_RATE_200_GBPS = 17, + PVRDMA_RATE_300_GBPS = 18, +}; + +struct pvrdma_ah_attr { + struct pvrdma_global_route grh; + __u16 dlid; + __u16 vlan_id; + __u8 sl; + __u8 src_path_bits; + __u8 static_rate; + __u8 ah_flags; + __u8 port_num; + __u8 dmac[6]; + __u8 reserved; +}; + +enum pvrdma_wc_status { + PVRDMA_WC_SUCCESS, + PVRDMA_WC_LOC_LEN_ERR, + PVRDMA_WC_LOC_QP_OP_ERR, + PVRDMA_WC_LOC_EEC_OP_ERR, + PVRDMA_WC_LOC_PROT_ERR, + PVRDMA_WC_WR_FLUSH_ERR, + PVRDMA_WC_MW_BIND_ERR, + PVRDMA_WC_BAD_RESP_ERR, + PVRDMA_WC_LOC_ACCESS_ERR, + PVRDMA_WC_REM_INV_REQ_ERR, + PVRDMA_WC_REM_ACCESS_ERR, + PVRDMA_WC_REM_OP_ERR, + PVRDMA_WC_RETRY_EXC_ERR, + PVRDMA_WC_RNR_RETRY_EXC_ERR, + PVRDMA_WC_LOC_RDD_VIOL_ERR, + PVRDMA_WC_REM_INV_RD_REQ_ERR, + PVRDMA_WC_REM_ABORT_ERR, + PVRDMA_WC_INV_EECN_ERR, + PVRDMA_WC_INV_EEC_STATE_ERR, + PVRDMA_WC_FATAL_ERR, + PVRDMA_WC_RESP_TIMEOUT_ERR, + PVRDMA_WC_GENERAL_ERR, +}; + +enum pvrdma_wc_opcode { + PVRDMA_WC_SEND, + PVRDMA_WC_RDMA_WRITE, + PVRDMA_WC_RDMA_READ, + PVRDMA_WC_COMP_SWAP, + PVRDMA_WC_FETCH_ADD, + PVRDMA_WC_BIND_MW, + PVRDMA_WC_LSO, + PVRDMA_WC_LOCAL_INV, + PVRDMA_WC_FAST_REG_MR, + PVRDMA_WC_MASKED_COMP_SWAP, + PVRDMA_WC_MASKED_FETCH_ADD, + PVRDMA_WC_RECV = 1 << 7, + PVRDMA_WC_RECV_RDMA_WITH_IMM, +}; + +enum pvrdma_wc_flags { + PVRDMA_WC_GRH = 1 << 0, + PVRDMA_WC_WITH_IMM = 1 << 1, + PVRDMA_WC_WITH_INVALIDATE = 1 << 2, + PVRDMA_WC_IP_CSUM_OK = 1 << 3, + PVRDMA_WC_WITH_SMAC = 1 << 4, + PVRDMA_WC_WITH_VLAN = 1 << 5, + PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_VLAN, +}; + +enum pvrdma_cq_notify_flags { + PVRDMA_CQ_SOLICITED = 1 << 0, + PVRDMA_CQ_NEXT_COMP = 1 << 1, + PVRDMA_CQ_SOLICITED_MASK = PVRDMA_CQ_SOLICITED | + PVRDMA_CQ_NEXT_COMP, + PVRDMA_CQ_REPORT_MISSED_EVENTS = 1 << 2, +}; + +struct pvrdma_qp_cap { + __u32 max_send_wr; + __u32 max_recv_wr; + __u32 max_send_sge; + __u32 max_recv_sge; + __u32 max_inline_data; + __u32 reserved; +}; + +enum pvrdma_sig_type { + PVRDMA_SIGNAL_ALL_WR, + PVRDMA_SIGNAL_REQ_WR, +}; + +enum pvrdma_qp_type { + PVRDMA_QPT_SMI, + PVRDMA_QPT_GSI, + PVRDMA_QPT_RC, + PVRDMA_QPT_UC, + PVRDMA_QPT_UD, + PVRDMA_QPT_RAW_IPV6, + PVRDMA_QPT_RAW_ETHERTYPE, + PVRDMA_QPT_RAW_PACKET = 8, + PVRDMA_QPT_XRC_INI = 9, + PVRDMA_QPT_XRC_TGT, + PVRDMA_QPT_MAX, +}; + +enum pvrdma_qp_create_flags { + PVRDMA_QP_CREATE_IPOPVRDMA_UD_LSO = 1 << 0, + PVRDMA_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1, +}; + +enum pvrdma_qp_attr_mask { + PVRDMA_QP_STATE = 1 << 0, + PVRDMA_QP_CUR_STATE = 1 << 1, + PVRDMA_QP_EN_SQD_ASYNC_NOTIFY = 1 << 2, + PVRDMA_QP_ACCESS_FLAGS = 1 << 3, + PVRDMA_QP_PKEY_INDEX = 1 << 4, + PVRDMA_QP_PORT = 1 << 5, + PVRDMA_QP_QKEY = 1 << 6, + PVRDMA_QP_AV = 1 << 7, + PVRDMA_QP_PATH_MTU = 1 << 8, + PVRDMA_QP_TIMEOUT = 1 << 9, + PVRDMA_QP_RETRY_CNT = 1 << 10, + PVRDMA_QP_RNR_RETRY = 1 << 11, + PVRDMA_QP_RQ_PSN = 1 << 12, + PVRDMA_QP_MAX_QP_RD_ATOMIC = 1 << 13, + PVRDMA_QP_ALT_PATH = 1 << 14, + PVRDMA_QP_MIN_RNR_TIMER = 1 << 15, + PVRDMA_QP_SQ_PSN = 1 << 16, + PVRDMA_QP_MAX_DEST_RD_ATOMIC = 1 << 17, + PVRDMA_QP_PATH_MIG_STATE = 1 << 18, + PVRDMA_QP_CAP = 1 << 19, + PVRDMA_QP_DEST_QPN = 1 << 20, + PVRDMA_QP_ATTR_MASK_MAX = PVRDMA_QP_DEST_QPN, +}; + +enum pvrdma_qp_state { + PVRDMA_QPS_RESET, + PVRDMA_QPS_INIT, + PVRDMA_QPS_RTR, + PVRDMA_QPS_RTS, + PVRDMA_QPS_SQD, + PVRDMA_QPS_SQE, + PVRDMA_QPS_ERR, +}; + +enum pvrdma_mig_state { + PVRDMA_MIG_MIGRATED, + PVRDMA_MIG_REARM, + PVRDMA_MIG_ARMED, +}; + +enum pvrdma_mw_type { + PVRDMA_MW_TYPE_1 = 1, + PVRDMA_MW_TYPE_2 = 2, +}; + +struct pvrdma_qp_attr { + enum pvrdma_qp_state qp_state; + enum pvrdma_qp_state cur_qp_state; + enum pvrdma_mtu path_mtu; + enum pvrdma_mig_state path_mig_state; + __u32 qkey; + __u32 rq_psn; + __u32 sq_psn; + __u32 dest_qp_num; + __u32 qp_access_flags; + __u16 pkey_index; + __u16 alt_pkey_index; + __u8 en_sqd_async_notify; + __u8 sq_draining; + __u8 max_rd_atomic; + __u8 max_dest_rd_atomic; + __u8 min_rnr_timer; + __u8 port_num; + __u8 timeout; + __u8 retry_cnt; + __u8 rnr_retry; + __u8 alt_port_num; + __u8 alt_timeout; + __u8 reserved[5]; + struct pvrdma_qp_cap cap; + struct pvrdma_ah_attr ah_attr; + struct pvrdma_ah_attr alt_ah_attr; +}; + +enum pvrdma_wr_opcode { + PVRDMA_WR_RDMA_WRITE, + PVRDMA_WR_RDMA_WRITE_WITH_IMM, + PVRDMA_WR_SEND, + PVRDMA_WR_SEND_WITH_IMM, + PVRDMA_WR_RDMA_READ, + PVRDMA_WR_ATOMIC_CMP_AND_SWP, + PVRDMA_WR_ATOMIC_FETCH_AND_ADD, + PVRDMA_WR_LSO, + PVRDMA_WR_SEND_WITH_INV, + PVRDMA_WR_RDMA_READ_WITH_INV, + PVRDMA_WR_LOCAL_INV, + PVRDMA_WR_FAST_REG_MR, + PVRDMA_WR_MASKED_ATOMIC_CMP_AND_SWP, + PVRDMA_WR_MASKED_ATOMIC_FETCH_AND_ADD, + PVRDMA_WR_BIND_MW, + PVRDMA_WR_REG_SIG_MR, +}; + +enum pvrdma_send_flags { + PVRDMA_SEND_FENCE = 1 << 0, + PVRDMA_SEND_SIGNALED = 1 << 1, + PVRDMA_SEND_SOLICITED = 1 << 2, + PVRDMA_SEND_INLINE = 1 << 3, + PVRDMA_SEND_IP_CSUM = 1 << 4, + PVRDMA_SEND_FLAGS_MAX = PVRDMA_SEND_IP_CSUM, +}; + +struct pvrdma_sge { + __u64 addr; + __u32 length; + __u32 lkey; +}; + +enum pvrdma_access_flags { + PVRDMA_ACCESS_LOCAL_WRITE = 1 << 0, + PVRDMA_ACCESS_REMOTE_WRITE = 1 << 1, + PVRDMA_ACCESS_REMOTE_READ = 1 << 2, + PVRDMA_ACCESS_REMOTE_ATOMIC = 1 << 3, + PVRDMA_ACCESS_MW_BIND = 1 << 4, + PVRDMA_ZERO_BASED = 1 << 5, + PVRDMA_ACCESS_ON_DEMAND = 1 << 6, + PVRDMA_ACCESS_FLAGS_MAX = PVRDMA_ACCESS_ON_DEMAND, +}; + +#endif /* __PVRDMA_IB_VERBS_H__ */