From patchwork Wed Jul 6 06:14:39 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adit Ranadive X-Patchwork-Id: 9215527 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 EB0A1607D9 for ; Wed, 6 Jul 2016 06:31:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DA2A3286FA for ; Wed, 6 Jul 2016 06:31:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CE001286FC; Wed, 6 Jul 2016 06:31:37 +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 C337E286FD for ; Wed, 6 Jul 2016 06:31:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751739AbcGFGbf (ORCPT ); Wed, 6 Jul 2016 02:31:35 -0400 Received: from ex13-edg-ou-001.vmware.com ([208.91.0.189]:53393 "EHLO EX13-EDG-OU-001.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751061AbcGFGbe (ORCPT ); Wed, 6 Jul 2016 02:31:34 -0400 Received: from sc9-mailhost2.vmware.com (10.113.161.72) by EX13-EDG-OU-001.vmware.com (10.113.208.155) with Microsoft SMTP Server id 15.0.1156.6; Tue, 5 Jul 2016 23:15:05 -0700 Received: from EX13-CAS-003.vmware.com (ex13-cas-003.vmware.com [10.113.191.53]) by sc9-mailhost2.vmware.com (Postfix) with ESMTP id 3F617B0854; Tue, 5 Jul 2016 23:15:21 -0700 (PDT) Received: from EX13-CAS-003.vmware.com (10.113.191.53) by EX13-MBX-004.vmware.com (10.113.191.24) with Microsoft SMTP Server (TLS) id 15.0.1156.6; Tue, 5 Jul 2016 23:15:20 -0700 Received: from NAM03-DM3-obe.outbound.protection.outlook.com (10.113.170.11) by EX13-CAS-003.vmware.com (10.113.191.53) with Microsoft SMTP Server (TLS) id 15.0.1156.6 via Frontend Transport; Tue, 5 Jul 2016 23:15:20 -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=EtTtQHvX4qO64HmJZtuMNg3/9dZarAokanuLL0ypj7s=; b=ClmI+w1L+aiEwJy5Duy0ttF0/wVP3m3T9GP38nIVRPPJP71NcVBYaMNu80R/CTK1Z0IteGljr935UwBlr+XW4Ox7/lgI7TeSgdP8RwfqYOszajJOJqtVynSIuFNfVmVUXPk/8r51e/48avNsdWuBq9OVJrIy3xfoOpDzu46VfA0= 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 SN2PR0501MB848.namprd05.prod.outlook.com (10.160.14.146) with Microsoft SMTP Server (TLS) id 15.1.528.16; Wed, 6 Jul 2016 06:15:18 +0000 From: Adit Ranadive To: , , CC: Adit Ranadive , , , , Subject: [PATCH v1 06/15] IB/pvrdma: Add virtual device RDMA structures Date: Tue, 5 Jul 2016 23:14:39 -0700 Message-ID: <1467785688-23229-7-git-send-email-aditr@vmware.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1467785688-23229-1-git-send-email-aditr@vmware.com> References: <1467785688-23229-1-git-send-email-aditr@vmware.com> MIME-Version: 1.0 X-Originating-IP: [208.91.1.34] X-ClientProxiedBy: CO2PR11CA0028.namprd11.prod.outlook.com (10.141.242.166) To SN2PR0501MB848.namprd05.prod.outlook.com (10.160.14.146) X-MS-Office365-Filtering-Correlation-Id: 1ce2db7f-8e34-4b49-d5df-08d3a564e7a9 X-Microsoft-Exchange-Diagnostics: 1; SN2PR0501MB848; 2:pTyJuCrAQL1M/4TVulS2gVVjZq6yRee/cO7Im4DpxWKsXUuI4ygE8Pi2mw75xtcH7bH4VMqm8UcPcCYHdjD2t1CZrAE098vWSWNfYWjH1MX24dequRFnN965s1S5Nj0n9TUexnIwctPg7PViO8Cpq7M+WXOfPQApv+ouPVTR5pe4gOb/I6iBc1Wk9nNVqJYA; 3:rVMXXcnC6WvQbKLlGbtEyMdD9PmRbLNN+Gm54KY6AH7qcGmhyYE+/ixdPs5ULM7GHQlJToJX3WXYaKbeS/loF67r+3+J9Gl6VVVdZK/YlwK4KyPqb9FdKEm+vdkqHNH/; 25:Upzve7GD+vnmHf3O34QxUxkxMF1VsgMSvUx4mC9IrTr3+iHHf9S8Bp7DeXF0D9s389TiaoZgLvmbR6HzkjmIRbCVV8kZNC6TfrHh39W7ehZU64hygXFbPYRMpURSg+yOVuMnnKua1GxAD8bsJwqpdJGIWJrhbYeQgZb2NohFzdI1lrn/HU8nuisrf1T18HEDRzRoIQfKeq0X7/+OZi2s4uJ5Adcy/w0qazNMVeCqfgjFHncC/LFDK65QtRFlC8J57rPzKiznxbT6LQXx0K0Et+l3dANU2/8aCfgr0xDCWCYPWfIQY1eXShRpGIAsCW7aUizT9o4NnlxBKf20jFAu9g/eQav8cnFNXarHnG67AQE+FMUMSMKXB9lfgT53UC6SenokKL9vyB5iOrOdvsXr/HYgXbhXg85xKwvuB4Bg7iU= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN2PR0501MB848; X-Microsoft-Exchange-Diagnostics: 1; SN2PR0501MB848; 31:vcM6aUifr9ZuU4GcKt6thydBkdht/DtAfM+ljZ5KYWiip/TBfidBzbjKzmdRhjV1KXeTleWHXc5/JLuN29cxoVxNymau+eFP8VFTbjESCb6zczOFf5QwEoaf+Yc3vmTVrPu5xRcZVNP9qfNlb39vItcZxy+0pC/j9LerYElF9dUSfhAw4z4WGIHkcHweo5KnZNKemS7+Q2H6Txabx8+l6w==; 20:ztblbMajiMI5MEfDSvFz1iuurYvM8ZGxmdh9oWzlG+zuws0tEikvPr8D6aU62BfrGzAwoUs0g9pD8EKb2IcOnFYuPCyYfOPZBxKApFNPNZyGEUPLbXe9uTA3rrrlh/txv3IpXi9dcATleVfkTp9Sxoxh/A9Ymohmw1FTcwsH219YIJgSbOQzovNJz4h/DOBh6e+6GIzLE3o7Cx4jlHj04m0Eaj92ISzCDLqUStFHHtr2qst+SVDKLx2WbX/Y5rkL; 4:meuyquR5wufjXjae5SSG/NX0N2GawEsmaEBlbjeY9K+vFD5VX3MMiPh8h/RbDhvwhWDAvHehSx5F3/fs8WKrmTCxjRbEhJlvwrf0mXeuQN8lY+dHfJEce6bPHFUNAp9i7K6cowC4mKaqMb/JouYD5OfcgOupMhgrJM7wGrASRDIEzUsQwR180omE9ldRrkQ1thYXUFzRppf8sjXSmqwP/ndnpADKqnnIhY+vganp4Dw0QwKxpTrm0gIjQefXNwEwKiWLTppH7rfxodGdx+EwOLMeSgflci+8+shzTpg5HB/RGBDBgfD2M5YtMWMU9tuVrt0xaTgKH4lwOH2Orie2NIcJSvEx5p8rJbC59PyXEnBaY6vgHR03h+oL5xG8WUIIzZVyBVtp4qvsIfeVikAU8VMvvGOLLo2OZX0x4+i80A8= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(61668805478150); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001); SRVR:SN2PR0501MB848; BCL:0; PCL:0; RULEID:; SRVR:SN2PR0501MB848; X-Forefront-PRVS: 0995196AA2 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(189002)(199003)(81166006)(81156014)(4001450100002)(92566002)(86362001)(19580395003)(4001430100002)(19580405001)(7846002)(7736002)(305945005)(8676002)(105586002)(2201001)(586003)(42186005)(33646002)(106356001)(3846002)(5003940100001)(6116002)(48376002)(36756003)(50466002)(5001770100001)(97736004)(189998001)(229853001)(47776003)(66066001)(76176999)(107886002)(50986999)(68736007)(101416001)(50226002)(4326007)(2950100001)(77096005)(2906002)(7099028); DIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR0501MB848; H:promb-2s-dhcp95-136.eng.vmware.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (EX13-EDG-OU-001.vmware.com: aditr@vmware.com does not designate permitted sender hosts) Received-SPF: None (protection.outlook.com: vmware.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR0501MB848; 23:jodysIgJZFMQ/6cqcuQ4uCTpcHANUdRkihyKEw+T?= =?us-ascii?Q?y7cxnFhtjc9zf2JESYBedHrOyYe+JkLbVHoOMob3WdPKyTDjWVBvLlDjFX1D?= =?us-ascii?Q?riph6qCAYcXCrW1ayh7xpNbi0+YuNd6djM9HdPpn3mWUMqjcydBWGaLvyQvp?= =?us-ascii?Q?VlITo7/Ny6ivw7fsR7mJq7hr+5du1uOh4rRLCQ1kFMtGU5sf8fmpQ/8q1v0T?= =?us-ascii?Q?Jkh2AULX18sLTk3KC5Uj155EJqEhgteR0Lax80W0bC47fl02gSTaxWOmR1pf?= =?us-ascii?Q?Ku1QRL7MVBMSCPkQreOiFYrT/3ThBq0nDhNpBjL4sfIxqTlqWDCZoxmZQagQ?= =?us-ascii?Q?lI3qagrU6g4Lu+kYIvWZ5NzCVU+DdEEwOcwhnnXMljrTny1X+PyJPzeeF8KT?= =?us-ascii?Q?popZRlqipnciPlHn7/e2mfurc35bHdP3JwAlnlwU2YhTW6wXzGaojnlULSij?= =?us-ascii?Q?QMC4ejPu4fn5VfZDbo5STjL3Db9fJjrjH4zDWwFHybI/8mwRmsUI1lojCV7s?= =?us-ascii?Q?0k0hit6JDLBSsTESZLe0+1Vta+iewE2VbyW9qeIF2iHd2Z/zZs1QslIPYf8w?= =?us-ascii?Q?nI7VtEBg0ZYH+vJY9c0awLIvpK7MRvFKhsRfzetPotSNXnI1aiDICaXix7jl?= =?us-ascii?Q?ktqcli2SlzJjlurbnI6Jtf7Z4bJItEH3ZrdPsILC2DkG1mAydGmP4915dDck?= =?us-ascii?Q?AKxvuGEp01SoyseltT+h6AeB24NCg1sMEXNbp3MLY05Hkw7AfAA45AYHK9Kx?= =?us-ascii?Q?3lQaEhsmWWl+EqlIikv96fiz6599WowHX4dNJ8BrO2Y1NZXnfQO8b0Er7rHt?= =?us-ascii?Q?tmCd5sT6wUwoSD94Dwy3g6qR/+kea7b+doFq6lk75GufSb8oGgGePYNz1RTm?= =?us-ascii?Q?56UzyOpKzsiVSATpsK9+p6OWqjN2zs9lKBsgHuRt3/uk8Q4laB9Ckp6kfYpH?= =?us-ascii?Q?X7g9oUNZYjAYKIuXeYDP3Eym80hgU3hI1oXnzl78M1mSXV6t1yaRxRwxDKsc?= =?us-ascii?Q?NpDe1Q713JtgzHoMV2FMOsu9s/Z1Hhy2paQNa7uR82ZxNUPFo5JMDtQm0RBA?= =?us-ascii?Q?XecJjr8HPIrnPnUZyzlvp8i+3/fXrTT3lZty7KqE1LkS+ldf0qbUqFLcYBMN?= =?us-ascii?Q?o0w8VvNYLkRTI3JNcQCcFrcnUvdJzY2hq6bc/dQCal4j+6mpclifiu888FNT?= =?us-ascii?Q?9SiLTTNTdpH2RL8=3D?= X-Microsoft-Exchange-Diagnostics: 1; SN2PR0501MB848; 6:iHEUp1EFm0it8w1CIgTtd6hHNmML4BTR47PVE/Abk9vSbG8sb6xqJM7PBkGtAH+3XDVBAm/e9fYJ0x71iahQTSUDAM3FUfCsC50o0ZQ/h3YXwHZ9BK4tsC4JwAylpAaH/nquZ6TAgVLtBwTAMpDWV/fHjeqYXruN5VWM++CXrPBKy2105FZBGi1T5fMr08SQVl6g8mv2CjlHM7B9lkL05eBUAmennibUr4s4bdk/f6dXWcQE64B2Zg4GoNE+yY3gqSekBmABSn2qU558N62LdJD5Xip0Otf0LQkSgBXHrcA=; 5:5AnEGm7HsQ1Ya8Eiy641XhQPsnX3Fmr6iumyIkWpZgQCmYrrkSMQP6aUhWXPsA9QqdPK2FmTSKkvBfn60vd+g0gS9APDnVKOPUqR/PdMQuFCFBCyo5gBngFa2JChlSyv0xfMQciZnEphoH1L/FLSQQ==; 24:hUOLZE47RaIgiq/v+rRnxG5mnGR8UDUUHiCtGR7a/KAEnExEh55etHC8yVWH3Hm8zbNzWncAEm1bSFLgW11s9EYt7MKPptn9nVPV2hurNUY=; 7:ZiwGYHOqM3ji68YJwN5/n4b0B8LUnf517wnqVBCfCwo9Q4dOFgCdoNOOt3IOdx2huG0r+2u3qcEqD/+B9EkL6Hh73Ks3Xum5s5zb9ESuvOzA8WDU4twXpdLeZJkkArsc9sjEzG2Qh2Pv+sn/usubEur7iyeGbd/qAaUDY1I+i0eJHm+IpGv1/dtohyzaCdPrG026+o4OS8LdHUXavmfvIlRgOW618hMw3EMFFQL/QLnKw3Ywq2qapj0p+obh9m/b SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN2PR0501MB848; 20:/OSCFKAac9bOdy1BalxIySlgoGmBK/IUfOmn9yKWd1Gwy3nv6bbvj3epEW/fR6Ntk6WrmMqUZtZUghlQBJ8gb2iHbNXMpzfDKLvnT73bFP+D7yB/DyoeyXrYDPVD2vA8CENPQWr2KSabLRY3SMiKvhJS0wkZiHMvNx8XPXvDfjY= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2016 06:15:18.3305 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR0501MB848 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. 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..f97d43d --- /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__ */