Re: cdcd52d41e24 - main - irdma: Add RDMA driver for Intel(R) Ethernet Controller E810

From: Mitchell Horne <mhorne_at_freebsd.org>
Date: Mon, 30 May 2022 14:44:21 UTC

On 5/29/22 02:52, Ravi Pokala wrote:
> Hi Eric,
> 
> This change appears to have broken the amd64 LINT-{NOINET,NOINET6,NOIP} kernels:
> 
> LINT-NOINET
> ----------------------------------------------------------------
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1659:11: error: implicit declaration of function 'ip_ifp_find' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
>          netdev = ip_ifp_find(&init_net, htonl(addr[0]));
>                   ^
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1659:11: note: did you mean 'ip6_ifp_find'?
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../ofed/include/rdma/ib_addr_freebsd.h:64:1: note: 'ip6_ifp_find' declared here
> ip6_ifp_find(struct vnet *vnet, struct in6_addr addr, uint16_t scope_id)
> ^
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1659:9: error: incompatible integer to pointer conversion assigning to 'struct ifnet *' from 'int' [-Werror,-Wint-conversion]
>          netdev = ip_ifp_find(&init_net, htonl(addr[0]));
>                 ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 2 errors generated.
> --- irdma_cm.o ---
> ----------------------------------------------------------------
> 
> LINT-NOINET6
> ----------------------------------------------------------------
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1638:11: error: implicit declaration of function 'ip6_ifp_find' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
>          ip_dev = ip6_ifp_find(&init_net, laddr6, 0);
>                   ^
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1638:11: note: did you mean 'ip_ifp_find'?
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../ofed/include/rdma/ib_addr_freebsd.h:36:1: note: 'ip_ifp_find' declared here
> ip_ifp_find(struct vnet *vnet, uint32_t addr)
> ^
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1638:9: error: incompatible integer to pointer conversion assigning to 'struct ifnet *' from 'int' [-Werror,-Wint-conversion]
>          ip_dev = ip6_ifp_find(&init_net, laddr6, 0);
>                 ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 2 errors generated.
> --- irdma_cm.o ---
> ----------------------------------------------------------------
> 
> LINT-NOIP:
> ----------------------------------------------------------------
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1638:11: error: implicit declaration of function 'ip6_ifp_find' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
>          ip_dev = ip6_ifp_find(&init_net, laddr6, 0);
>                   ^
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1638:9: error: incompatible integer to pointer conversion assigning to 'struct ifnet *' from 'int' [-Werror,-Wint-conversion]
>          ip_dev = ip6_ifp_find(&init_net, laddr6, 0);
>                 ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1659:11: error: implicit declaration of function 'ip_ifp_find' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
>          netdev = ip_ifp_find(&init_net, htonl(addr[0]));
>                   ^
> /usr/home/rpokala/freebsd/src/clean-main/sys/modules/irdma/../../dev/irdma/irdma_cm.c:1659:9: error: incompatible integer to pointer conversion assigning to 'struct ifnet *' from 'int' [-Werror,-Wint-conversion]
>          netdev = ip_ifp_find(&init_net, htonl(addr[0]));
>                 ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 4 errors generated.
> --- irdma_cm.o ---
> ----------------------------------------------------------------
>
Hi,

I posted a fix for this, which resolves the issue for me. I will commit 
it later today if I don't hear anything back.

https://reviews.freebsd.org/D35343

Cheers,
Mitchell

> Thanks,
> 
> Ravi (rpokala@)
> 
> -----Original Message-----
> From: <owner-src-committers@freebsd.org> on behalf of Eric Joyner <erj@FreeBSD.org>
> Date: 2022-05-23, Monday at 16:54
> To: <src-committers@FreeBSD.org>, <dev-commits-src-all@FreeBSD.org>, <dev-commits-src-main@FreeBSD.org>
> Subject: git: cdcd52d41e24 - main - irdma: Add RDMA driver for Intel(R) Ethernet Controller E810
> 
>      The branch main has been updated by erj:
> 
>      URL: https://cgit.FreeBSD.org/src/commit/?id=cdcd52d41e246ba1c0fcfad0769bd691487355ef
> 
>      commit cdcd52d41e246ba1c0fcfad0769bd691487355ef
>      Author:     Bartosz Sobczak <bartosz.sobczak@intel.com>
>      AuthorDate: 2022-05-23 23:39:27 +0000
>      Commit:     Eric Joyner <erj@FreeBSD.org>
>      CommitDate: 2022-05-23 23:52:49 +0000
> 
>          irdma: Add RDMA driver for Intel(R) Ethernet Controller E810
> 
>          This is an initial commit for RDMA FreeBSD driver for Intel(R) Ethernet
>          Controller E810, called irdma.  Supporting both RoCEv2 and iWARP
>          protocols in per-PF manner, RoCEv2 being the default.
> 
>          Testing has been done using krping tool, perftest, ucmatose, rping,
>          ud_pingpong, rc_pingpong and others.
> 
>          Signed-off-by: Eric Joyner <erj@FreeBSD.org>
> 
>          Reviewed by:    #manpages (pauamma_gundo.com) [documentation]
>          MFC after:      1 week
>          Relnotes:       yes
>          Sponsored by:   Intel Corporation
>          Differential Revision:  https://reviews.freebsd.org/D34690
>      ---
>       contrib/ofed/libirdma/abi.h          |  180 ++
>       contrib/ofed/libirdma/i40e_devids.h  |   69 +
>       contrib/ofed/libirdma/i40iw_hw.h     |   64 +
>       contrib/ofed/libirdma/ice_devids.h   |   92 +
>       contrib/ofed/libirdma/irdma-abi.h    |  143 +
>       contrib/ofed/libirdma/irdma.h        |   93 +
>       contrib/ofed/libirdma/irdma_defs.h   |  554 ++++
>       contrib/ofed/libirdma/irdma_uk.c     | 1884 ++++++++++++
>       contrib/ofed/libirdma/irdma_umain.c  |  255 ++
>       contrib/ofed/libirdma/irdma_umain.h  |  218 ++
>       contrib/ofed/libirdma/irdma_user.h   |  479 +++
>       contrib/ofed/libirdma/irdma_uverbs.c | 2262 ++++++++++++++
>       contrib/ofed/libirdma/libirdma.map   |   10 +
>       contrib/ofed/libirdma/osdep.h        |  213 ++
>       lib/ofed/Makefile                    |    2 +
>       lib/ofed/libirdma/Makefile           |   23 +
>       share/man/man4/irdma.4               |  233 ++
>       share/mk/bsd.libnames.mk             |    1 +
>       share/mk/src.libnames.mk             |    3 +
>       sys/amd64/conf/NOTES                 |    3 +
>       sys/conf/files                       |   31 +
>       sys/dev/irdma/fbsd_kcompat.c         |  736 +++++
>       sys/dev/irdma/fbsd_kcompat.h         |  251 ++
>       sys/dev/irdma/ice_devids.h           |   92 +
>       sys/dev/irdma/icrdma.c               |  704 +++++
>       sys/dev/irdma/icrdma_hw.c            |  418 +++
>       sys/dev/irdma/icrdma_hw.h            |  137 +
>       sys/dev/irdma/irdma-abi.h            |  143 +
>       sys/dev/irdma/irdma.h                |  238 ++
>       sys/dev/irdma/irdma_cm.c             | 4253 +++++++++++++++++++++++++
>       sys/dev/irdma/irdma_cm.h             |  453 +++
>       sys/dev/irdma/irdma_ctrl.c           | 5644 ++++++++++++++++++++++++++++++++++
>       sys/dev/irdma/irdma_defs.h           | 2337 ++++++++++++++
>       sys/dev/irdma/irdma_hmc.c            |  734 +++++
>       sys/dev/irdma/irdma_hmc.h            |  202 ++
>       sys/dev/irdma/irdma_hw.c             | 2829 +++++++++++++++++
>       sys/dev/irdma/irdma_kcompat.c        | 1568 ++++++++++
>       sys/dev/irdma/irdma_main.h           |  589 ++++
>       sys/dev/irdma/irdma_pble.c           |  557 ++++
>       sys/dev/irdma/irdma_pble.h           |  166 +
>       sys/dev/irdma/irdma_protos.h         |  141 +
>       sys/dev/irdma/irdma_puda.c           | 1856 +++++++++++
>       sys/dev/irdma/irdma_puda.h           |  221 ++
>       sys/dev/irdma/irdma_type.h           | 1533 +++++++++
>       sys/dev/irdma/irdma_uda.c            |  318 ++
>       sys/dev/irdma/irdma_uda.h            |  120 +
>       sys/dev/irdma/irdma_uda_d.h          |  415 +++
>       sys/dev/irdma/irdma_uk.c             | 1808 +++++++++++
>       sys/dev/irdma/irdma_user.h           |  477 +++
>       sys/dev/irdma/irdma_utils.c          | 2325 ++++++++++++++
>       sys/dev/irdma/irdma_verbs.c          | 3364 ++++++++++++++++++++
>       sys/dev/irdma/irdma_verbs.h          |  313 ++
>       sys/dev/irdma/irdma_ws.c             |  447 +++
>       sys/dev/irdma/irdma_ws.h             |   74 +
>       sys/dev/irdma/osdep.h                |  247 ++
>       sys/modules/Makefile                 |    4 +
>       sys/modules/irdma/Makefile           |   23 +
>       usr.bin/ofed/libibverbs/Makefile.inc |    2 +-
>       usr.bin/ofed/librdmacm/Makefile.inc  |    2 +-
>       59 files changed, 42551 insertions(+), 2 deletions(-)
> 
>      diff --git a/contrib/ofed/libirdma/abi.h b/contrib/ofed/libirdma/abi.h
>      new file mode 100644
>      index 000000000000..ff7a2828efe0
>      --- /dev/null
>      +++ b/contrib/ofed/libirdma/abi.h
>      @@ -0,0 +1,180 @@
>      +/*-
>      + * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB
>      + *
>      + * Copyright (C) 2019 - 2020 Intel Corporation
>      + *
>      + * 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
>      + * OpenFabrics.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.
>      + */
>      +/*$FreeBSD$*/
>      +
>      +#ifndef PROVIDER_IRDMA_ABI_H
>      +#define PROVIDER_IRDMA_ABI_H
>      +
>      +#include "irdma.h"
>      +#include <infiniband/kern-abi.h>
>      +#include "irdma-abi.h"
>      +
>      +#define IRDMA_MIN_ABI_VERSION	0
>      +#define IRDMA_MAX_ABI_VERSION	5
>      +
>      +struct irdma_ualloc_pd_resp {
>      +	struct ibv_alloc_pd_resp	ibv_resp;
>      +	__u32 pd_id;
>      +	__u8 rsvd[4];
>      +
>      +};
>      +struct irdma_ucreate_cq {
>      +	struct ibv_create_cq	ibv_cmd;
>      +	__aligned_u64 user_cq_buf;
>      +	__aligned_u64 user_shadow_area;
>      +
>      +};
>      +struct irdma_ucreate_cq_resp {
>      +	struct ibv_create_cq_resp	ibv_resp;
>      +	__u32 cq_id;
>      +	__u32 cq_size;
>      +
>      +};
>      +struct irdma_ucreate_cq_ex {
>      +	struct ibv_create_cq_ex	ibv_cmd;
>      +	__aligned_u64 user_cq_buf;
>      +	__aligned_u64 user_shadow_area;
>      +
>      +};
>      +struct irdma_ucreate_cq_ex_resp {
>      +	struct ibv_create_cq_resp_ex	ibv_resp;
>      +	__u32 cq_id;
>      +	__u32 cq_size;
>      +
>      +};
>      +struct irdma_uresize_cq {
>      +	struct ibv_resize_cq	ibv_cmd;
>      +	__aligned_u64 user_cq_buffer;
>      +
>      +};
>      +struct irdma_uresize_cq_resp {
>      +	struct ibv_resize_cq_resp	ibv_resp;
>      +
>      +};
>      +struct irdma_ucreate_qp {
>      +	struct ibv_create_qp	ibv_cmd;
>      +	__aligned_u64 user_wqe_bufs;
>      +	__aligned_u64 user_compl_ctx;
>      +
>      +};
>      +struct irdma_ucreate_qp_resp {
>      +	struct ibv_create_qp_resp	ibv_resp;
>      +	__u32 qp_id;
>      +	__u32 actual_sq_size;
>      +	__u32 actual_rq_size;
>      +	__u32 irdma_drv_opt;
>      +	__u16 push_idx;
>      +	__u8 lsmm;
>      +	__u8 rsvd;
>      +	__u32 qp_caps;
>      +
>      +};
>      +struct irdma_umodify_qp_resp {
>      +	struct ibv_modify_qp_resp_ex	ibv_resp;
>      +	__aligned_u64 push_wqe_mmap_key;
>      +	__aligned_u64 push_db_mmap_key;
>      +	__u16 push_offset;
>      +	__u8 push_valid;
>      +	__u8 rd_fence_rate;
>      +	__u8 rsvd[4];
>      +
>      +};
>      +struct irdma_get_context {
>      +	struct ibv_get_context	ibv_cmd;
>      +	__u32 rsvd32;
>      +	__u8 userspace_ver;
>      +	__u8 rsvd8[3];
>      +
>      +};
>      +struct irdma_get_context_resp {
>      +	struct ibv_get_context_resp	ibv_resp;
>      +	__u32 max_pds;
>      +	__u32 max_qps;
>      +	__u32 wq_size; /* size of the WQs (SQ+RQ) in the mmaped area */
>      +	__u8 kernel_ver;
>      +	__u8 rsvd[3];
>      +	__aligned_u64 feature_flags;
>      +	__aligned_u64 db_mmap_key;
>      +	__u32 max_hw_wq_frags;
>      +	__u32 max_hw_read_sges;
>      +	__u32 max_hw_inline;
>      +	__u32 max_hw_rq_quanta;
>      +	__u32 max_hw_wq_quanta;
>      +	__u32 min_hw_cq_size;
>      +	__u32 max_hw_cq_size;
>      +	__u16 max_hw_sq_chunk;
>      +	__u8 hw_rev;
>      +	__u8 rsvd2;
>      +
>      +};
>      +struct irdma_ureg_mr {
>      +	struct ibv_reg_mr	ibv_cmd;
>      +	__u16 reg_type; /* enum irdma_memreg_type */
>      +	__u16 cq_pages;
>      +	__u16 rq_pages;
>      +	__u16 sq_pages;
>      +
>      +};
>      +struct irdma_ucreate_ah_resp {
>      +	struct ibv_create_ah_resp	ibv_resp;
>      +	__u32 ah_id;
>      +	__u8 rsvd[4];
>      +
>      +};
>      +
>      +struct irdma_modify_qp_cmd {
>      +	struct ibv_modify_qp_ex ibv_cmd;
>      +	__u8 sq_flush;
>      +	__u8 rq_flush;
>      +	__u8 rsvd[6];
>      +};
>      +
>      +struct irdma_query_device_ex {
>      +	struct ibv_query_device_ex ibv_cmd;
>      +};
>      +
>      +struct irdma_query_device_ex_resp {
>      +	struct ibv_query_device_resp_ex ibv_resp;
>      +	__u32				comp_mask;
>      +	__u32				response_length;
>      +	struct ibv_odp_caps_resp	odp_caps;
>      +	__u64				timestamp_mask;
>      +	__u64				hca_core_clock;
>      +	__u64				device_cap_flags_ex;
>      +	struct ibv_rss_caps_resp	rss_caps;
>      +	__u32				max_wq_type_rq;
>      +	__u32				raw_packet_caps;
>      +	struct ibv_tso_caps		tso_caps;
>      +};
>      +#endif /* PROVIDER_IRDMA_ABI_H */
>      diff --git a/contrib/ofed/libirdma/i40e_devids.h b/contrib/ofed/libirdma/i40e_devids.h
>      new file mode 100644
>      index 000000000000..1b0eaae95b82
>      --- /dev/null
>      +++ b/contrib/ofed/libirdma/i40e_devids.h
>      @@ -0,0 +1,69 @@
>      +/*-
>      + * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB
>      + *
>      + * Copyright (c) 2015 - 2019 Intel Corporation
>      + *
>      + * 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
>      + * OpenFabrics.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.
>      + */
>      +/*$FreeBSD$*/
>      +
>      +#ifndef I40E_DEVIDS_H
>      +#define I40E_DEVIDS_H
>      +
>      +/* Vendor ID */
>      +#define I40E_INTEL_VENDOR_ID		0x8086
>      +
>      +/* Device IDs */
>      +#define I40E_DEV_ID_SFP_XL710		0x1572
>      +#define I40E_DEV_ID_QEMU		0x1574
>      +#define I40E_DEV_ID_KX_B		0x1580
>      +#define I40E_DEV_ID_KX_C		0x1581
>      +#define I40E_DEV_ID_QSFP_A		0x1583
>      +#define I40E_DEV_ID_QSFP_B		0x1584
>      +#define I40E_DEV_ID_QSFP_C		0x1585
>      +#define I40E_DEV_ID_10G_BASE_T		0x1586
>      +#define I40E_DEV_ID_20G_KR2		0x1587
>      +#define I40E_DEV_ID_20G_KR2_A		0x1588
>      +#define I40E_DEV_ID_10G_BASE_T4		0x1589
>      +#define I40E_DEV_ID_25G_B		0x158A
>      +#define I40E_DEV_ID_25G_SFP28		0x158B
>      +#define I40E_DEV_ID_VF			0x154C
>      +#define I40E_DEV_ID_VF_HV		0x1571
>      +#define I40E_DEV_ID_X722_A0		0x374C
>      +#define I40E_DEV_ID_X722_A0_VF		0x374D
>      +#define I40E_DEV_ID_KX_X722		0x37CE
>      +#define I40E_DEV_ID_QSFP_X722		0x37CF
>      +#define I40E_DEV_ID_SFP_X722		0x37D0
>      +#define I40E_DEV_ID_1G_BASE_T_X722	0x37D1
>      +#define I40E_DEV_ID_10G_BASE_T_X722	0x37D2
>      +#define I40E_DEV_ID_SFP_I_X722		0x37D3
>      +#define I40E_DEV_ID_X722_VF		0x37CD
>      +#define I40E_DEV_ID_X722_VF_HV		0x37D9
>      +
>      +#endif /* I40E_DEVIDS_H */
>      diff --git a/contrib/ofed/libirdma/i40iw_hw.h b/contrib/ofed/libirdma/i40iw_hw.h
>      new file mode 100644
>      index 000000000000..38c7e37c35c9
>      --- /dev/null
>      +++ b/contrib/ofed/libirdma/i40iw_hw.h
>      @@ -0,0 +1,64 @@
>      +/*-
>      + * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB
>      + *
>      + * Copyright (c) 2015 - 2020 Intel Corporation
>      + *
>      + * 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
>      + * OpenFabrics.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.
>      + */
>      +/*$FreeBSD$*/
>      +
>      +#ifndef I40IW_HW_H
>      +#define I40IW_HW_H
>      +
>      +enum i40iw_device_caps_const {
>      +	I40IW_MAX_WQ_FRAGMENT_COUNT		= 3,
>      +	I40IW_MAX_SGE_RD			= 1,
>      +	I40IW_MAX_PUSH_PAGE_COUNT		= 0,
>      +	I40IW_MAX_INLINE_DATA_SIZE		= 48,
>      +	I40IW_MAX_IRD_SIZE			= 63,
>      +	I40IW_MAX_ORD_SIZE			= 127,
>      +	I40IW_MAX_WQ_ENTRIES			= 2048,
>      +	I40IW_MAX_WQE_SIZE_RQ			= 128,
>      +	I40IW_MAX_PDS				= 32768,
>      +	I40IW_MAX_STATS_COUNT			= 16,
>      +	I40IW_MAX_CQ_SIZE			= 1048575,
>      +	I40IW_MAX_OUTBOUND_MSG_SIZE		= 2147483647,
>      +	I40IW_MAX_INBOUND_MSG_SIZE		= 2147483647,
>      +};
>      +
>      +#define I40IW_QP_WQE_MIN_SIZE   32
>      +#define I40IW_QP_WQE_MAX_SIZE   128
>      +#define I40IW_QP_SW_MIN_WQSIZE  4
>      +#define I40IW_MAX_RQ_WQE_SHIFT  2
>      +#define I40IW_MAX_QUANTA_PER_WR 2
>      +
>      +#define I40IW_QP_SW_MAX_SQ_QUANTA 2048
>      +#define I40IW_QP_SW_MAX_RQ_QUANTA 16384
>      +#define I40IW_QP_SW_MAX_WQ_QUANTA 2048
>      +#endif /* I40IW_HW_H */
>      diff --git a/contrib/ofed/libirdma/ice_devids.h b/contrib/ofed/libirdma/ice_devids.h
>      new file mode 100644
>      index 000000000000..57f26bc33260
>      --- /dev/null
>      +++ b/contrib/ofed/libirdma/ice_devids.h
>      @@ -0,0 +1,92 @@
>      +/*-
>      + * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB
>      + *
>      + * Copyright (c) 2019 - 2020 Intel Corporation
>      + *
>      + * 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
>      + * OpenFabrics.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.
>      + */
>      +/*$FreeBSD$*/
>      +
>      +#ifndef ICE_DEVIDS_H
>      +#define ICE_DEVIDS_H
>      +
>      +#define PCI_VENDOR_ID_INTEL		0x8086
>      +
>      +/* Device IDs */
>      +/* Intel(R) Ethernet Connection E823-L for backplane */
>      +#define ICE_DEV_ID_E823L_BACKPLANE      0x124C
>      +/* Intel(R) Ethernet Connection E823-L for SFP */
>      +#define ICE_DEV_ID_E823L_SFP            0x124D
>      +/* Intel(R) Ethernet Connection E823-L/X557-AT 10GBASE-T */
>      +#define ICE_DEV_ID_E823L_10G_BASE_T     0x124E
>      +/* Intel(R) Ethernet Connection E823-L 1GbE */
>      +#define ICE_DEV_ID_E823L_1GBE           0x124F
>      +/* Intel(R) Ethernet Connection E823-L for QSFP */
>      +#define ICE_DEV_ID_E823L_QSFP           0x151D
>      +/* Intel(R) Ethernet Controller E810-C for backplane */
>      +#define ICE_DEV_ID_E810C_BACKPLANE      0x1591
>      +/* Intel(R) Ethernet Controller E810-C for QSFP */
>      +#define ICE_DEV_ID_E810C_QSFP           0x1592
>      +/* Intel(R) Ethernet Controller E810-C for SFP */
>      +#define ICE_DEV_ID_E810C_SFP            0x1593
>      +/* Intel(R) Ethernet Controller E810-XXV for backplane */
>      +#define ICE_DEV_ID_E810_XXV_BACKPLANE   0x1599
>      +/* Intel(R) Ethernet Controller E810-XXV for QSFP */
>      +#define ICE_DEV_ID_E810_XXV_QSFP        0x159A
>      +/* Intel(R) Ethernet Controller E810-XXV for SFP */
>      +#define ICE_DEV_ID_E810_XXV_SFP         0x159B
>      +/* Intel(R) Ethernet Connection E823-C for backplane */
>      +#define ICE_DEV_ID_E823C_BACKPLANE      0x188A
>      +/* Intel(R) Ethernet Connection E823-C for QSFP */
>      +#define ICE_DEV_ID_E823C_QSFP           0x188B
>      +/* Intel(R) Ethernet Connection E823-C for SFP */
>      +#define ICE_DEV_ID_E823C_SFP            0x188C
>      +/* Intel(R) Ethernet Connection E823-C/X557-AT 10GBASE-T */
>      +#define ICE_DEV_ID_E823C_10G_BASE_T     0x188D
>      +/* Intel(R) Ethernet Connection E823-C 1GbE */
>      +#define ICE_DEV_ID_E823C_SGMII          0x188E
>      +/* Intel(R) Ethernet Connection C822N for backplane */
>      +#define ICE_DEV_ID_C822N_BACKPLANE      0x1890
>      +/* Intel(R) Ethernet Connection C822N for QSFP */
>      +#define ICE_DEV_ID_C822N_QSFP           0x1891
>      +/* Intel(R) Ethernet Connection C822N for SFP */
>      +#define ICE_DEV_ID_C822N_SFP            0x1892
>      +/* Intel(R) Ethernet Connection E822-C/X557-AT 10GBASE-T */
>      +#define ICE_DEV_ID_E822C_10G_BASE_T     0x1893
>      +/* Intel(R) Ethernet Connection E822-C 1GbE */
>      +#define ICE_DEV_ID_E822C_SGMII          0x1894
>      +/* Intel(R) Ethernet Connection E822-L for backplane */
>      +#define ICE_DEV_ID_E822L_BACKPLANE      0x1897
>      +/* Intel(R) Ethernet Connection E822-L for SFP */
>      +#define ICE_DEV_ID_E822L_SFP            0x1898
>      +/* Intel(R) Ethernet Connection E822-L/X557-AT 10GBASE-T */
>      +#define ICE_DEV_ID_E822L_10G_BASE_T     0x1899
>      +/* Intel(R) Ethernet Connection E822-L 1GbE */
>      +#define ICE_DEV_ID_E822L_SGMII          0x189A
>      +#endif /* ICE_DEVIDS_H */
>      diff --git a/contrib/ofed/libirdma/irdma-abi.h b/contrib/ofed/libirdma/irdma-abi.h
>      new file mode 100644
>      index 000000000000..8a06198608e2
>      --- /dev/null
>      +++ b/contrib/ofed/libirdma/irdma-abi.h
>      @@ -0,0 +1,143 @@
>      +/*-
>      + * SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB)
>      + *
>      + *
>      + * Copyright (c) 2006 - 2021 Intel Corporation.  All rights reserved.
>      + * Copyright (c) 2005 Topspin Communications.  All rights reserved.
>      + * Copyright (c) 2005 Cisco Systems.  All rights reserved.
>      + * Copyright (c) 2005 Open Grid Computing, 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
>      + * OpenFabrics.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.
>      + */
>      +/*$FreeBSD$*/
>      +
>      +#ifndef IRDMA_ABI_H
>      +#define IRDMA_ABI_H
>      +
>      +#include <infiniband/types.h>
>      +
>      +/* irdma must support legacy GEN_1 i40iw kernel
>      + * and user-space whose last ABI ver is 5
>      + */
>      +#define IRDMA_ABI_VER 5
>      +
>      +enum irdma_memreg_type {
>      +	IRDMA_MEMREG_TYPE_MEM  = 0,
>      +	IRDMA_MEMREG_TYPE_QP   = 1,
>      +	IRDMA_MEMREG_TYPE_CQ   = 2,
>      +};
>      +
>      +struct irdma_alloc_ucontext_req {
>      +	__u32 rsvd32;
>      +	__u8 userspace_ver;
>      +	__u8 rsvd8[3];
>      +};
>      +
>      +struct irdma_alloc_ucontext_resp {
>      +	__u32 max_pds;
>      +	__u32 max_qps;
>      +	__u32 wq_size; /* size of the WQs (SQ+RQ) in the mmaped area */
>      +	__u8 kernel_ver;
>      +	__u8 rsvd[3];
>      +	__aligned_u64 feature_flags;
>      +	__aligned_u64 db_mmap_key;
>      +	__u32 max_hw_wq_frags;
>      +	__u32 max_hw_read_sges;
>      +	__u32 max_hw_inline;
>      +	__u32 max_hw_rq_quanta;
>      +	__u32 max_hw_wq_quanta;
>      +	__u32 min_hw_cq_size;
>      +	__u32 max_hw_cq_size;
>      +	__u16 max_hw_sq_chunk;
>      +	__u8 hw_rev;
>      +	__u8 rsvd2;
>      +};
>      +
>      +struct irdma_alloc_pd_resp {
>      +	__u32 pd_id;
>      +	__u8 rsvd[4];
>      +};
>      +
>      +struct irdma_resize_cq_req {
>      +	__aligned_u64 user_cq_buffer;
>      +};
>      +
>      +struct irdma_create_cq_req {
>      +	__aligned_u64 user_cq_buf;
>      +	__aligned_u64 user_shadow_area;
>      +};
>      +
>      +struct irdma_create_qp_req {
>      +	__aligned_u64 user_wqe_bufs;
>      +	__aligned_u64 user_compl_ctx;
>      +};
>      +
>      +struct irdma_mem_reg_req {
>      +	__u16 reg_type; /* enum irdma_memreg_type */
>      +	__u16 cq_pages;
>      +	__u16 rq_pages;
>      +	__u16 sq_pages;
>      +};
>      +
>      +struct irdma_modify_qp_req {
>      +	__u8 sq_flush;
>      +	__u8 rq_flush;
>      +	__u8 rsvd[6];
>      +};
>      +
>      +struct irdma_create_cq_resp {
>      +	__u32 cq_id;
>      +	__u32 cq_size;
>      +};
>      +
>      +struct irdma_create_qp_resp {
>      +	__u32 qp_id;
>      +	__u32 actual_sq_size;
>      +	__u32 actual_rq_size;
>      +	__u32 irdma_drv_opt;
>      +	__u16 push_idx;
>      +	__u8 lsmm;
>      +	__u8 rsvd;
>      +	__u32 qp_caps;
>      +};
>      +
>      +struct irdma_modify_qp_resp {
>      +	__aligned_u64 push_wqe_mmap_key;
>      +	__aligned_u64 push_db_mmap_key;
>      +	__u16 push_offset;
>      +	__u8 push_valid;
>      +	__u8 rd_fence_rate;
>      +	__u8 rsvd[4];
>      +};
>      +
>      +struct irdma_create_ah_resp {
>      +	__u32 ah_id;
>      +	__u8 rsvd[4];
>      +};
>      +#endif /* IRDMA_ABI_H */
>      diff --git a/contrib/ofed/libirdma/irdma.h b/contrib/ofed/libirdma/irdma.h
>      new file mode 100644
>      index 000000000000..27fa3d53d3e8
>      --- /dev/null
>      +++ b/contrib/ofed/libirdma/irdma.h
>      @@ -0,0 +1,93 @@
>      +/*-
>      + * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB
>      + *
>      + * Copyright (c) 2017 - 2021 Intel Corporation
>      + *
>      + * 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
>      + * OpenFabrics.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.
>      + */
>      +/*$FreeBSD$*/
>      +
>      +#ifndef IRDMA_H
>      +#define IRDMA_H
>      +
>      +#define RDMA_BIT2(type, a) ((u##type) 1UL << a)
>      +#define RDMA_MASK3(type, mask, shift)	((u##type) mask << shift)
>      +#define MAKEMASK(m, s) ((m) << (s))
>      +#define IRDMA_WQEALLOC_WQE_DESC_INDEX_S		20
>      +#define IRDMA_WQEALLOC_WQE_DESC_INDEX_M		(0xfff << IRDMA_WQEALLOC_WQE_DESC_INDEX_S)
>      +
>      +enum irdma_vers {
>      +	IRDMA_GEN_RSVD,
>      +	IRDMA_GEN_1,
>      +	IRDMA_GEN_2,
>      +};
>      +
>      +struct irdma_uk_attrs {
>      +	u64 feature_flags;
>      +	u32 max_hw_wq_frags;
>      +	u32 max_hw_read_sges;
>      +	u32 max_hw_inline;
>      +	u32 max_hw_rq_quanta;
>      +	u32 max_hw_wq_quanta;
>      +	u32 min_hw_cq_size;
>      +	u32 max_hw_cq_size;
>      +	u16 max_hw_sq_chunk;
>      +	u16 max_hw_wq_size;
>      +	u16 min_sw_wq_size;
>      +	u8 hw_rev;
>      +};
>      +
>      +struct irdma_hw_attrs {
>      +	struct irdma_uk_attrs uk_attrs;
>      +	u64 max_hw_outbound_msg_size;
>      +	u64 max_hw_inbound_msg_size;
>      +	u64 max_mr_size;
>      +	u32 min_hw_qp_id;
>      +	u32 min_hw_aeq_size;
>      +	u32 max_hw_aeq_size;
>      +	u32 min_hw_ceq_size;
>      +	u32 max_hw_ceq_size;
>      +	u32 max_hw_device_pages;
>      +	u32 max_hw_vf_fpm_id;
>      +	u32 first_hw_vf_fpm_id;
>      +	u32 max_hw_ird;
>      +	u32 max_hw_ord;
>      +	u32 max_hw_wqes;
>      +	u32 max_hw_pds;
>      +	u32 max_hw_ena_vf_count;
>      +	u32 max_qp_wr;
>      +	u32 max_pe_ready_count;
>      +	u32 max_done_count;
>      +	u32 max_sleep_count;
>      +	u32 max_cqp_compl_wait_time_ms;
>      +	u16 max_stat_inst;
>      +	u16 max_stat_idx;
>      +};
>      +
>      +#endif /* IRDMA_H*/
>      diff --git a/contrib/ofed/libirdma/irdma_defs.h b/contrib/ofed/libirdma/irdma_defs.h
>      new file mode 100644
>      index 000000000000..8fb9f1e2b622
>      --- /dev/null
>      +++ b/contrib/ofed/libirdma/irdma_defs.h
>      @@ -0,0 +1,554 @@
>      +/*-
>      + * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB
>      + *
>      + * Copyright (c) 2015 - 2021 Intel Corporation
>      + *
>      + * 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
>      + * OpenFabrics.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.
>      + */
>      +/*$FreeBSD$*/
>      +
>      +#ifndef IRDMA_DEFS_H
>      +#define IRDMA_DEFS_H
>      +
>      +#define IRDMA_BYTE_0		0
>      +#define IRDMA_BYTE_8		8
>      +#define IRDMA_BYTE_16		16
>      +#define IRDMA_BYTE_24		24
>      +#define IRDMA_BYTE_32		32
>      +#define IRDMA_BYTE_40		40
>      +#define IRDMA_BYTE_48		48
>      +#define IRDMA_BYTE_56		56
>      +#define IRDMA_BYTE_64		64
>      +#define IRDMA_BYTE_72		72
>      +#define IRDMA_BYTE_80		80
>      +#define IRDMA_BYTE_88		88
>      +#define IRDMA_BYTE_96		96
>      +#define IRDMA_BYTE_104		104
>      +#define IRDMA_BYTE_112		112
>      +#define IRDMA_BYTE_120		120
>      +#define IRDMA_BYTE_128		128
>      +#define IRDMA_BYTE_136		136
>      +#define IRDMA_BYTE_144		144
>      +#define IRDMA_BYTE_152		152
>      +#define IRDMA_BYTE_160		160
>      +#define IRDMA_BYTE_168		168
>      +#define IRDMA_BYTE_176		176
>      +#define IRDMA_BYTE_184		184
>      +#define IRDMA_BYTE_192		192
>      +#define IRDMA_BYTE_200		200
>      +#define IRDMA_BYTE_208		208
>      +#define IRDMA_BYTE_216		216
>      +
>      +#define IRDMA_QP_TYPE_IWARP	1
>      +#define IRDMA_QP_TYPE_UDA	2
>      +#define IRDMA_QP_TYPE_ROCE_RC	3
>      +#define IRDMA_QP_TYPE_ROCE_UD	4
>      +
>      +#define IRDMA_HW_PAGE_SIZE	4096
>      +#define IRDMA_HW_PAGE_SHIFT	12
>      +#define IRDMA_CQE_QTYPE_RQ	0
>      +#define IRDMA_CQE_QTYPE_SQ	1
>      +
>      +#define IRDMA_QP_SW_MIN_WQSIZE	8u /* in WRs*/
>      +#define IRDMA_QP_WQE_MIN_SIZE	32
>      +#define IRDMA_QP_WQE_MAX_SIZE	256
>      +#define IRDMA_QP_WQE_MIN_QUANTA 1
>      +#define IRDMA_MAX_RQ_WQE_SHIFT_GEN1 2
>      +#define IRDMA_MAX_RQ_WQE_SHIFT_GEN2 3
>      +
>      +#define IRDMA_SQ_RSVD	258
>      +#define IRDMA_RQ_RSVD	1
>      +
>      +#define IRDMA_FEATURE_RTS_AE			1ULL
>      +#define IRDMA_FEATURE_CQ_RESIZE			2ULL
>      +#define IRDMA_FEATURE_RELAX_RQ_ORDER		4ULL
>      +#define IRDMAQP_OP_RDMA_WRITE			0x00
>      +#define IRDMAQP_OP_RDMA_READ			0x01
>      +#define IRDMAQP_OP_RDMA_SEND			0x03
>      +#define IRDMAQP_OP_RDMA_SEND_INV		0x04
>      +#define IRDMAQP_OP_RDMA_SEND_SOL_EVENT		0x05
>      +#define IRDMAQP_OP_RDMA_SEND_SOL_EVENT_INV	0x06
>      +#define IRDMAQP_OP_BIND_MW			0x08
>      +#define IRDMAQP_OP_FAST_REGISTER		0x09
>      +#define IRDMAQP_OP_LOCAL_INVALIDATE		0x0a
>      +#define IRDMAQP_OP_RDMA_READ_LOC_INV		0x0b
>      +#define IRDMAQP_OP_NOP				0x0c
>      +
>      +#ifndef LS_64_1
>      +#define LS_64_1(val, bits)	((u64)(uintptr_t)(val) << (bits))
>      +#define RS_64_1(val, bits)	((u64)(uintptr_t)(val) >> (bits))
>      +#define LS_32_1(val, bits)	((u32)((val) << (bits)))
>      +#define RS_32_1(val, bits)	((u32)((val) >> (bits)))
>      +#endif
>      +#define LS_64(val, field)	(((u64)(val) << field ## _S) & (field ## _M))
>      +#define RS_64(val, field)	((u64)((val) & field ## _M) >> field ## _S)
>      +#define LS_32(val, field)	(((val) << field ## _S) & (field ## _M))
>      +#define RS_32(val, field)	(((val) & field ## _M) >> field ## _S)
>      +
>      +#define IRDMA_CQPHC_QPCTX_S 0
>      +#define IRDMA_CQPHC_QPCTX_M \
>      +	(0xffffffffffffffffULL << IRDMA_CQPHC_QPCTX_S)
>      +
>      +/* iWARP QP Doorbell shadow area */
>      +#define IRDMA_QP_DBSA_HW_SQ_TAIL_S 0
>      +#define IRDMA_QP_DBSA_HW_SQ_TAIL_M \
>      +	(0x7fffULL << IRDMA_QP_DBSA_HW_SQ_TAIL_S)
>      +
>      +/* Completion Queue Doorbell shadow area */
>      +#define IRDMA_CQ_DBSA_CQEIDX_S 0
>      +#define IRDMA_CQ_DBSA_CQEIDX_M (0xfffffULL << IRDMA_CQ_DBSA_CQEIDX_S)
>      +
>      +#define IRDMA_CQ_DBSA_SW_CQ_SELECT_S 0
>      +#define IRDMA_CQ_DBSA_SW_CQ_SELECT_M \
>      +	(0x3fffULL << IRDMA_CQ_DBSA_SW_CQ_SELECT_S)
>      +
>      +#define IRDMA_CQ_DBSA_ARM_NEXT_S 14
>      +#define IRDMA_CQ_DBSA_ARM_NEXT_M BIT_ULL(IRDMA_CQ_DBSA_ARM_NEXT_S)
>      +
>      +#define IRDMA_CQ_DBSA_ARM_NEXT_SE_S 15
>      +#define IRDMA_CQ_DBSA_ARM_NEXT_SE_M BIT_ULL(IRDMA_CQ_DBSA_ARM_NEXT_SE_S)
>      +
>      +#define IRDMA_CQ_DBSA_ARM_SEQ_NUM_S 16
>      +#define IRDMA_CQ_DBSA_ARM_SEQ_NUM_M \
>      +	(0x3ULL << IRDMA_CQ_DBSA_ARM_SEQ_NUM_S)
>      +
>      +/* CQP and iWARP Completion Queue */
>      +#define IRDMA_CQ_QPCTX_S IRDMA_CQPHC_QPCTX_S
>      +#define IRDMA_CQ_QPCTX_M IRDMA_CQPHC_QPCTX_M
>      +
>      +#define IRDMA_CQ_MINERR_S 0
>      +#define IRDMA_CQ_MINERR_M (0xffffULL << IRDMA_CQ_MINERR_S)
>      +
>      +#define IRDMA_CQ_MAJERR_S 16
>      +#define IRDMA_CQ_MAJERR_M (0xffffULL << IRDMA_CQ_MAJERR_S)
>      +
>      +#define IRDMA_CQ_WQEIDX_S 32
>      +#define IRDMA_CQ_WQEIDX_M (0x7fffULL << IRDMA_CQ_WQEIDX_S)
>      +
>      +#define IRDMA_CQ_EXTCQE_S 50
>      +#define IRDMA_CQ_EXTCQE_M BIT_ULL(IRDMA_CQ_EXTCQE_S)
>      +
>      +#define IRDMA_OOO_CMPL_S 54
>      +#define IRDMA_OOO_CMPL_M BIT_ULL(IRDMA_OOO_CMPL_S)
>      +
>      +#define IRDMA_CQ_ERROR_S 55
>      +#define IRDMA_CQ_ERROR_M BIT_ULL(IRDMA_CQ_ERROR_S)
>      +
>      +#define IRDMA_CQ_SQ_S 62
>      +#define IRDMA_CQ_SQ_M BIT_ULL(IRDMA_CQ_SQ_S)
>      +
>      +#define IRDMA_CQ_VALID_S 63
>      +#define IRDMA_CQ_VALID_M BIT_ULL(IRDMA_CQ_VALID_S)
>      +
>      +#define IRDMA_CQ_IMMVALID_S 62
>      +#define IRDMA_CQ_IMMVALID_M BIT_ULL(IRDMA_CQ_IMMVALID_S)
>      +
>      +#define IRDMA_CQ_UDSMACVALID_S 61
>      +#define IRDMA_CQ_UDSMACVALID_M BIT_ULL(IRDMA_CQ_UDSMACVALID_S)
>      +
>      +#define IRDMA_CQ_UDVLANVALID_S 60
>      +#define IRDMA_CQ_UDVLANVALID_M BIT_ULL(IRDMA_CQ_UDVLANVALID_S)
>      +
>      +#define IRDMA_CQ_UDSMAC_S 0
>      +#define IRDMA_CQ_UDSMAC_M (0xffffffffffffULL << IRDMA_CQ_UDSMAC_S)
>      +
>      +#define IRDMA_CQ_UDVLAN_S 48
>      +#define IRDMA_CQ_UDVLAN_M (0xffffULL << IRDMA_CQ_UDVLAN_S)
>      +
>      +#define IRDMA_CQ_IMMDATA_S 0
>      +#define IRDMA_CQ_IMMDATA_M (0xffffffffffffffffULL << IRDMA_CQ_IMMVALID_S)
>      +
>      +#define IRDMA_CQ_IMMDATALOW32_S 0
>      +#define IRDMA_CQ_IMMDATALOW32_M (0xffffffffULL << IRDMA_CQ_IMMDATALOW32_S)
>      +
>      +#define IRDMA_CQ_IMMDATAUP32_S 32
>      +#define IRDMA_CQ_IMMDATAUP32_M (0xffffffffULL << IRDMA_CQ_IMMDATAUP32_S)
>      +
>      +#define IRDMACQ_PAYLDLEN_S 0
>      +#define IRDMACQ_PAYLDLEN_M (0xffffffffULL << IRDMACQ_PAYLDLEN_S)
>      +
>      +#define IRDMACQ_TCPSEQNUMRTT_S 32
>      +#define IRDMACQ_TCPSEQNUMRTT_M (0xffffffffULL << IRDMACQ_TCPSEQNUMRTT_S)
>      +
>      +#define IRDMACQ_INVSTAG_S 0
>      +#define IRDMACQ_INVSTAG_M (0xffffffffULL << IRDMACQ_INVSTAG_S)
>      +
>      +#define IRDMACQ_QPID_S 32
>      +#define IRDMACQ_QPID_M (0xffffffULL << IRDMACQ_QPID_S)
>      +
>      +#define IRDMACQ_UDSRCQPN_S 0
>      +#define IRDMACQ_UDSRCQPN_M (0xffffffffULL << IRDMACQ_UDSRCQPN_S)
>      +
>      +#define IRDMACQ_PSHDROP_S 51
>      +#define IRDMACQ_PSHDROP_M BIT_ULL(IRDMACQ_PSHDROP_S)
>      +
>      +#define IRDMACQ_STAG_S 53
>      +#define IRDMACQ_STAG_M BIT_ULL(IRDMACQ_STAG_S)
>      +
>      +#define IRDMACQ_IPV4_S 53
>      +#define IRDMACQ_IPV4_M BIT_ULL(IRDMACQ_IPV4_S)
>      +
>      *** 42081 LINES SKIPPED ***
> 
>