xref: /freebsd/sys/dev/irdma/fbsd_kcompat.h (revision 5b5f7d0e77a9eee73eb5d596f43aef4e1a3674d8)
1cdcd52d4SBartosz Sobczak /*-
2cdcd52d4SBartosz Sobczak  * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB
3cdcd52d4SBartosz Sobczak  *
401fbb869SBartosz Sobczak  * Copyright (c) 2021 - 2023 Intel Corporation
5cdcd52d4SBartosz Sobczak  *
6cdcd52d4SBartosz Sobczak  * This software is available to you under a choice of one of two
7cdcd52d4SBartosz Sobczak  * licenses.  You may choose to be licensed under the terms of the GNU
8cdcd52d4SBartosz Sobczak  * General Public License (GPL) Version 2, available from the file
9cdcd52d4SBartosz Sobczak  * COPYING in the main directory of this source tree, or the
10cdcd52d4SBartosz Sobczak  * OpenFabrics.org BSD license below:
11cdcd52d4SBartosz Sobczak  *
12cdcd52d4SBartosz Sobczak  *   Redistribution and use in source and binary forms, with or
13cdcd52d4SBartosz Sobczak  *   without modification, are permitted provided that the following
14cdcd52d4SBartosz Sobczak  *   conditions are met:
15cdcd52d4SBartosz Sobczak  *
16cdcd52d4SBartosz Sobczak  *    - Redistributions of source code must retain the above
17cdcd52d4SBartosz Sobczak  *	copyright notice, this list of conditions and the following
18cdcd52d4SBartosz Sobczak  *	disclaimer.
19cdcd52d4SBartosz Sobczak  *
20cdcd52d4SBartosz Sobczak  *    - Redistributions in binary form must reproduce the above
21cdcd52d4SBartosz Sobczak  *	copyright notice, this list of conditions and the following
22cdcd52d4SBartosz Sobczak  *	disclaimer in the documentation and/or other materials
23cdcd52d4SBartosz Sobczak  *	provided with the distribution.
24cdcd52d4SBartosz Sobczak  *
25cdcd52d4SBartosz Sobczak  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26cdcd52d4SBartosz Sobczak  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27cdcd52d4SBartosz Sobczak  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28cdcd52d4SBartosz Sobczak  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29cdcd52d4SBartosz Sobczak  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30cdcd52d4SBartosz Sobczak  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31cdcd52d4SBartosz Sobczak  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32cdcd52d4SBartosz Sobczak  * SOFTWARE.
33cdcd52d4SBartosz Sobczak  */
34cdcd52d4SBartosz Sobczak 
35cdcd52d4SBartosz Sobczak #ifndef FBSD_KCOMPAT_H
36cdcd52d4SBartosz Sobczak #define FBSD_KCOMPAT_H
37cdcd52d4SBartosz Sobczak #include "ice_rdma.h"
38cdcd52d4SBartosz Sobczak 
39cdcd52d4SBartosz Sobczak #define TASKLET_DATA_TYPE	unsigned long
40cdcd52d4SBartosz Sobczak #define TASKLET_FUNC_TYPE	void (*)(TASKLET_DATA_TYPE)
41cdcd52d4SBartosz Sobczak 
4235105900SBartosz Sobczak #ifndef tasklet_setup
43cdcd52d4SBartosz Sobczak #define tasklet_setup(tasklet, callback)				\
44cdcd52d4SBartosz Sobczak 	tasklet_init((tasklet), (TASKLET_FUNC_TYPE)(callback),		\
45cdcd52d4SBartosz Sobczak 		      (TASKLET_DATA_TYPE)(tasklet))
4635105900SBartosz Sobczak #endif
47f2978460SBjoern A. Zeeb #ifndef from_tasklet
48cdcd52d4SBartosz Sobczak #define from_tasklet(var, callback_tasklet, tasklet_fieldname) \
49cdcd52d4SBartosz Sobczak 	container_of(callback_tasklet, typeof(*var), tasklet_fieldname)
50f2978460SBjoern A. Zeeb #endif
51cdcd52d4SBartosz Sobczak #define IRDMA_SET_RDMA_OBJ_SIZE(ib_struct, drv_struct, member)    \
52cdcd52d4SBartosz Sobczak 	(sizeof(struct drv_struct) +                              \
53cdcd52d4SBartosz Sobczak 	 BUILD_BUG_ON_ZERO(offsetof(struct drv_struct, member)) + \
54cdcd52d4SBartosz Sobczak 	 BUILD_BUG_ON_ZERO(                                       \
55cdcd52d4SBartosz Sobczak 		!__same_type(((struct drv_struct *)NULL)->member, \
56cdcd52d4SBartosz Sobczak                                       struct ib_struct)))
57777e472cSBartosz Sobczak 
58cdcd52d4SBartosz Sobczak #define set_ibdev_dma_device(ibdev, dev) \
59cdcd52d4SBartosz Sobczak 	ibdev.dma_device = (dev)
60cdcd52d4SBartosz Sobczak #define set_max_sge(props, rf)  \
61cdcd52d4SBartosz Sobczak 	((props)->max_sge = (rf)->sc_dev.hw_attrs.uk_attrs.max_hw_wq_frags)
62cdcd52d4SBartosz Sobczak #define kmap(pg) page_address(pg)
63cdcd52d4SBartosz Sobczak #define kmap_local_page(pg) page_address(pg)
64cdcd52d4SBartosz Sobczak #define kunmap(pg)
65cdcd52d4SBartosz Sobczak #define kunmap_local(pg)
66cdcd52d4SBartosz Sobczak 
67cdcd52d4SBartosz Sobczak #define IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION IB_CQ_FLAGS_TIMESTAMP_COMPLETION
68cdcd52d4SBartosz Sobczak #ifndef IB_QP_ATTR_STANDARD_BITS
69cdcd52d4SBartosz Sobczak #define IB_QP_ATTR_STANDARD_BITS GENMASK(20, 0)
70cdcd52d4SBartosz Sobczak #endif
71cdcd52d4SBartosz Sobczak 
72cdcd52d4SBartosz Sobczak #define IRDMA_QOS_MODE_VLAN 0x0
73cdcd52d4SBartosz Sobczak #define IRDMA_QOS_MODE_DSCP 0x1
74cdcd52d4SBartosz Sobczak 
75777e472cSBartosz Sobczak #define IRDMA_VER_LEN 24
76777e472cSBartosz Sobczak 
77cdcd52d4SBartosz Sobczak void kc_set_roce_uverbs_cmd_mask(struct irdma_device *iwdev);
78cdcd52d4SBartosz Sobczak void kc_set_rdma_uverbs_cmd_mask(struct irdma_device *iwdev);
79cdcd52d4SBartosz Sobczak 
80cdcd52d4SBartosz Sobczak struct irdma_tunable_info {
81cdcd52d4SBartosz Sobczak 	struct sysctl_ctx_list irdma_sysctl_ctx;
82cdcd52d4SBartosz Sobczak 	struct sysctl_oid *irdma_sysctl_tree;
8301fbb869SBartosz Sobczak 	struct sysctl_oid *sws_sysctl_tree;
84777e472cSBartosz Sobczak 	char drv_ver[IRDMA_VER_LEN];
85cdcd52d4SBartosz Sobczak 	u8 roce_ena;
86cdcd52d4SBartosz Sobczak };
87cdcd52d4SBartosz Sobczak 
irdma_iw_query_pkey(struct ib_device * ibdev,u8 port,u16 index,u16 * pkey)88cdcd52d4SBartosz Sobczak static inline int irdma_iw_query_pkey(struct ib_device *ibdev, u8 port, u16 index,
89cdcd52d4SBartosz Sobczak 				      u16 *pkey)
90cdcd52d4SBartosz Sobczak {
91cdcd52d4SBartosz Sobczak 	*pkey = 0;
92cdcd52d4SBartosz Sobczak 	return 0;
93cdcd52d4SBartosz Sobczak }
94cdcd52d4SBartosz Sobczak 
cq_validate_flags(u32 flags,u8 hw_rev)95cdcd52d4SBartosz Sobczak static inline int cq_validate_flags(u32 flags, u8 hw_rev)
96cdcd52d4SBartosz Sobczak {
97cdcd52d4SBartosz Sobczak 	/* GEN1 does not support CQ create flags */
98cdcd52d4SBartosz Sobczak 	if (hw_rev == IRDMA_GEN_1)
99cdcd52d4SBartosz Sobczak 		return flags ? -EOPNOTSUPP : 0;
100cdcd52d4SBartosz Sobczak 
101cdcd52d4SBartosz Sobczak 	return flags & ~IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION ? -EOPNOTSUPP : 0;
102cdcd52d4SBartosz Sobczak }
irdma_next_pbl_addr(u64 * pbl,struct irdma_pble_info ** pinfo,u32 * idx)103cdcd52d4SBartosz Sobczak static inline u64 *irdma_next_pbl_addr(u64 *pbl, struct irdma_pble_info **pinfo,
104cdcd52d4SBartosz Sobczak 				       u32 *idx)
105cdcd52d4SBartosz Sobczak {
106cdcd52d4SBartosz Sobczak 	*idx += 1;
107cdcd52d4SBartosz Sobczak 	if (!(*pinfo) || *idx != (*pinfo)->cnt)
108cdcd52d4SBartosz Sobczak 		return ++pbl;
109cdcd52d4SBartosz Sobczak 	*idx = 0;
110cdcd52d4SBartosz Sobczak 	(*pinfo)++;
111cdcd52d4SBartosz Sobczak 
112cdcd52d4SBartosz Sobczak 	return (*pinfo)->addr;
113cdcd52d4SBartosz Sobczak }
114bc3a013cSBartosz Sobczak 
115bc3a013cSBartosz Sobczak static inline struct vnet *
irdma_cmid_to_vnet(struct iw_cm_id * cm_id)116bc3a013cSBartosz Sobczak irdma_cmid_to_vnet(struct iw_cm_id *cm_id)
117bc3a013cSBartosz Sobczak {
118bc3a013cSBartosz Sobczak 	struct rdma_cm_id *rdma_id;
119bc3a013cSBartosz Sobczak 
120bc3a013cSBartosz Sobczak 	if (!cm_id)
121bc3a013cSBartosz Sobczak 		return &init_net;
122bc3a013cSBartosz Sobczak 
123bc3a013cSBartosz Sobczak 	rdma_id = (struct rdma_cm_id *)cm_id->context;
124bc3a013cSBartosz Sobczak 
125bc3a013cSBartosz Sobczak 	return rdma_id->route.addr.dev_addr.net;
126bc3a013cSBartosz Sobczak }
127bc3a013cSBartosz Sobczak 
128cdcd52d4SBartosz Sobczak int irdma_create_cq(struct ib_cq *ibcq,
129cdcd52d4SBartosz Sobczak 		    const struct ib_cq_init_attr *attr,
130cdcd52d4SBartosz Sobczak 		    struct ib_udata *udata);
131cdcd52d4SBartosz Sobczak struct ib_qp *irdma_create_qp(struct ib_pd *ibpd,
132cdcd52d4SBartosz Sobczak 			      struct ib_qp_init_attr *init_attr,
133cdcd52d4SBartosz Sobczak 			      struct ib_udata *udata);
134cdcd52d4SBartosz Sobczak int irdma_create_ah(struct ib_ah *ib_ah,
135cdcd52d4SBartosz Sobczak 		    struct ib_ah_attr *attr, u32 flags,
136cdcd52d4SBartosz Sobczak 		    struct ib_udata *udata);
137cdcd52d4SBartosz Sobczak int irdma_create_ah_stub(struct ib_ah *ib_ah,
138cdcd52d4SBartosz Sobczak 			 struct ib_ah_attr *attr, u32 flags,
139cdcd52d4SBartosz Sobczak 			 struct ib_udata *udata);
140cdcd52d4SBartosz Sobczak void irdma_ether_copy(u8 *dmac, struct ib_ah_attr *attr);
141cdcd52d4SBartosz Sobczak void irdma_destroy_ah(struct ib_ah *ibah, u32 flags);
142cdcd52d4SBartosz Sobczak void irdma_destroy_ah_stub(struct ib_ah *ibah, u32 flags);
143cdcd52d4SBartosz Sobczak int irdma_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata);
144cdcd52d4SBartosz Sobczak int irdma_dereg_mr(struct ib_mr *ib_mr, struct ib_udata *udata);
14535105900SBartosz Sobczak int ib_get_eth_speed(struct ib_device *dev, u32 port_num, u8 *speed, u8 *width);
146cdcd52d4SBartosz Sobczak enum rdma_link_layer irdma_get_link_layer(struct ib_device *ibdev,
147cdcd52d4SBartosz Sobczak 					  u8 port_num);
148cdcd52d4SBartosz Sobczak int irdma_roce_port_immutable(struct ib_device *ibdev, u8 port_num,
149cdcd52d4SBartosz Sobczak 			      struct ib_port_immutable *immutable);
150cdcd52d4SBartosz Sobczak int irdma_iw_port_immutable(struct ib_device *ibdev, u8 port_num,
151cdcd52d4SBartosz Sobczak 			    struct ib_port_immutable *immutable);
152cdcd52d4SBartosz Sobczak int irdma_query_gid(struct ib_device *ibdev, u8 port, int index,
153cdcd52d4SBartosz Sobczak 		    union ib_gid *gid);
154cdcd52d4SBartosz Sobczak int irdma_query_gid_roce(struct ib_device *ibdev, u8 port, int index,
155cdcd52d4SBartosz Sobczak 			 union ib_gid *gid);
156cdcd52d4SBartosz Sobczak int irdma_query_pkey(struct ib_device *ibdev, u8 port, u16 index,
157cdcd52d4SBartosz Sobczak 		     u16 *pkey);
158cdcd52d4SBartosz Sobczak int irdma_query_port(struct ib_device *ibdev, u8 port,
159cdcd52d4SBartosz Sobczak 		     struct ib_port_attr *props);
160cdcd52d4SBartosz Sobczak struct rdma_hw_stats *irdma_alloc_hw_stats(struct ib_device *ibdev, u8 port_num);
161cdcd52d4SBartosz Sobczak int irdma_get_hw_stats(struct ib_device *ibdev,
162cdcd52d4SBartosz Sobczak 		       struct rdma_hw_stats *stats, u8 port_num,
163cdcd52d4SBartosz Sobczak 		       int index);
164cdcd52d4SBartosz Sobczak 
16535105900SBartosz Sobczak void irdma_request_reset(struct irdma_pci_f *rf);
166cdcd52d4SBartosz Sobczak int irdma_register_qset(struct irdma_sc_vsi *vsi,
167cdcd52d4SBartosz Sobczak 			struct irdma_ws_node *tc_node);
168cdcd52d4SBartosz Sobczak void irdma_unregister_qset(struct irdma_sc_vsi *vsi,
169cdcd52d4SBartosz Sobczak 			   struct irdma_ws_node *tc_node);
170cdcd52d4SBartosz Sobczak void ib_unregister_device(struct ib_device *ibdev);
171cdcd52d4SBartosz Sobczak void irdma_disassociate_ucontext(struct ib_ucontext *context);
172cdcd52d4SBartosz Sobczak int kc_irdma_set_roce_cm_info(struct irdma_qp *iwqp,
173cdcd52d4SBartosz Sobczak 			      struct ib_qp_attr *attr,
174cdcd52d4SBartosz Sobczak 			      u16 *vlan_id);
175cdcd52d4SBartosz Sobczak 
176cdcd52d4SBartosz Sobczak void kc_set_loc_seq_num_mss(struct irdma_cm_node *cm_node);
177777e472cSBartosz Sobczak u16 kc_rdma_get_udp_sport(u32 fl, u32 lqpn, u32 rqpn);
178cdcd52d4SBartosz Sobczak 
179cdcd52d4SBartosz Sobczak void irdma_get_dev_fw_str(struct ib_device *dev, char *str, size_t str_len);
180cdcd52d4SBartosz Sobczak 
181cdcd52d4SBartosz Sobczak int irdma_modify_port(struct ib_device *ibdev, u8 port, int mask,
182cdcd52d4SBartosz Sobczak 		      struct ib_port_modify *props);
183cdcd52d4SBartosz Sobczak int irdma_get_dst_mac(struct irdma_cm_node *cm_node, struct sockaddr *dst_sin,
184cdcd52d4SBartosz Sobczak 		      u8 *dst_mac);
185cdcd52d4SBartosz Sobczak int irdma_resolve_neigh_lpb_chk(struct irdma_device *iwdev, struct irdma_cm_node *cm_node,
186cdcd52d4SBartosz Sobczak 				struct irdma_cm_info *cm_info);
187cdcd52d4SBartosz Sobczak int irdma_addr_resolve_neigh(struct irdma_cm_node *cm_node, u32 dst_ip,
188cdcd52d4SBartosz Sobczak 			     int arpindex);
189cdcd52d4SBartosz Sobczak int irdma_addr_resolve_neigh_ipv6(struct irdma_cm_node *cm_node, u32 *dest,
190cdcd52d4SBartosz Sobczak 				  int arpindex);
191cdcd52d4SBartosz Sobczak void irdma_dcqcn_tunables_init(struct irdma_pci_f *rf);
19201fbb869SBartosz Sobczak void irdma_sysctl_settings(struct irdma_pci_f *rf);
19301fbb869SBartosz Sobczak void irdma_sw_stats_tunables_init(struct irdma_pci_f *rf);
194cdcd52d4SBartosz Sobczak u32 irdma_create_stag(struct irdma_device *iwdev);
195cdcd52d4SBartosz Sobczak void irdma_free_stag(struct irdma_device *iwdev, u32 stag);
196cdcd52d4SBartosz Sobczak 
197777e472cSBartosz Sobczak int irdma_hwdereg_mr(struct ib_mr *ib_mr);
198777e472cSBartosz Sobczak int irdma_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start, u64 len,
199777e472cSBartosz Sobczak 			u64 virt, int new_access, struct ib_pd *new_pd,
200777e472cSBartosz Sobczak 			struct ib_udata *udata);
201cdcd52d4SBartosz Sobczak struct irdma_mr;
202cdcd52d4SBartosz Sobczak struct irdma_cq;
203cdcd52d4SBartosz Sobczak struct irdma_cq_buf;
204cdcd52d4SBartosz Sobczak struct ib_mr *irdma_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
205cdcd52d4SBartosz Sobczak 			     u32 max_num_sg, struct ib_udata *udata);
206777e472cSBartosz Sobczak int irdma_hwreg_mr(struct irdma_device *iwdev, struct irdma_mr *iwmr,
207777e472cSBartosz Sobczak 		   u16 access);
208777e472cSBartosz Sobczak struct ib_mr *irdma_rereg_mr_trans(struct irdma_mr *iwmr, u64 start, u64 len,
209777e472cSBartosz Sobczak 				   u64 virt, struct ib_udata *udata);
210cdcd52d4SBartosz Sobczak int irdma_hw_alloc_mw(struct irdma_device *iwdev, struct irdma_mr *iwmr);
211cdcd52d4SBartosz Sobczak struct ib_mw *irdma_alloc_mw(struct ib_pd *pd, enum ib_mw_type type,
212cdcd52d4SBartosz Sobczak 			     struct ib_udata *udata);
213cdcd52d4SBartosz Sobczak int irdma_hw_alloc_stag(struct irdma_device *iwdev, struct irdma_mr *iwmr);
214cdcd52d4SBartosz Sobczak void irdma_cq_free_rsrc(struct irdma_pci_f *rf, struct irdma_cq *iwcq);
215cdcd52d4SBartosz Sobczak int irdma_validate_qp_attrs(struct ib_qp_init_attr *init_attr,
216cdcd52d4SBartosz Sobczak 			    struct irdma_device *iwdev);
217cdcd52d4SBartosz Sobczak void irdma_setup_virt_qp(struct irdma_device *iwdev,
218cdcd52d4SBartosz Sobczak 			 struct irdma_qp *iwqp,
219cdcd52d4SBartosz Sobczak 			 struct irdma_qp_init_info *init_info);
220cdcd52d4SBartosz Sobczak int irdma_setup_kmode_qp(struct irdma_device *iwdev,
221cdcd52d4SBartosz Sobczak 			 struct irdma_qp *iwqp,
222cdcd52d4SBartosz Sobczak 			 struct irdma_qp_init_info *info,
223cdcd52d4SBartosz Sobczak 			 struct ib_qp_init_attr *init_attr);
224777e472cSBartosz Sobczak int irdma_setup_umode_qp(struct ib_udata *udata,
225777e472cSBartosz Sobczak 			 struct irdma_device *iwdev,
226777e472cSBartosz Sobczak 			 struct irdma_qp *iwqp,
227777e472cSBartosz Sobczak 			 struct irdma_qp_init_info *info,
228777e472cSBartosz Sobczak 			 struct ib_qp_init_attr *init_attr);
229cdcd52d4SBartosz Sobczak void irdma_roce_fill_and_set_qpctx_info(struct irdma_qp *iwqp,
230cdcd52d4SBartosz Sobczak 					struct irdma_qp_host_ctx_info *ctx_info);
231cdcd52d4SBartosz Sobczak void irdma_iw_fill_and_set_qpctx_info(struct irdma_qp *iwqp,
232cdcd52d4SBartosz Sobczak 				      struct irdma_qp_host_ctx_info *ctx_info);
233cdcd52d4SBartosz Sobczak int irdma_cqp_create_qp_cmd(struct irdma_qp *iwqp);
234cdcd52d4SBartosz Sobczak void irdma_dealloc_push_page(struct irdma_pci_f *rf,
235*5b5f7d0eSBartosz Sobczak 			     struct irdma_qp *iwqp);
236cdcd52d4SBartosz Sobczak int irdma_process_resize_list(struct irdma_cq *iwcq, struct irdma_device *iwdev,
237cdcd52d4SBartosz Sobczak 			      struct irdma_cq_buf *lcqe_buf);
238cdcd52d4SBartosz Sobczak void irdma_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata);
239cdcd52d4SBartosz Sobczak int irdma_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata);
240cdcd52d4SBartosz Sobczak void irdma_dealloc_ucontext(struct ib_ucontext *context);
241cdcd52d4SBartosz Sobczak int irdma_alloc_pd(struct ib_pd *pd, struct ib_udata *udata);
242cdcd52d4SBartosz Sobczak void irdma_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata);
243cdcd52d4SBartosz Sobczak int irdma_add_gid(struct ib_device *, u8, unsigned int, const union ib_gid *,
244cdcd52d4SBartosz Sobczak 		  const struct ib_gid_attr *, void **);
245cdcd52d4SBartosz Sobczak int irdma_del_gid(struct ib_device *, u8, unsigned int, void **);
246cdcd52d4SBartosz Sobczak struct ib_device *ib_device_get_by_netdev(struct ifnet *ndev, int driver_id);
247cdcd52d4SBartosz Sobczak void ib_device_put(struct ib_device *device);
248cdcd52d4SBartosz Sobczak void ib_unregister_device_put(struct ib_device *device);
249cdcd52d4SBartosz Sobczak enum ib_mtu ib_mtu_int_to_enum(int mtu);
250cdcd52d4SBartosz Sobczak struct irdma_pbl *irdma_get_pbl(unsigned long va, struct list_head *pbl_list);
251cdcd52d4SBartosz Sobczak void irdma_clean_cqes(struct irdma_qp *iwqp, struct irdma_cq *iwcq);
252cdcd52d4SBartosz Sobczak void irdma_remove_push_mmap_entries(struct irdma_qp *iwqp);
253cdcd52d4SBartosz Sobczak 
254cdcd52d4SBartosz Sobczak struct irdma_ucontext;
255cdcd52d4SBartosz Sobczak void irdma_del_memlist(struct irdma_mr *iwmr, struct irdma_ucontext *ucontext);
256cdcd52d4SBartosz Sobczak void irdma_copy_user_pgaddrs(struct irdma_mr *iwmr, u64 *pbl,
257cdcd52d4SBartosz Sobczak 			     enum irdma_pble_level level);
258cdcd52d4SBartosz Sobczak void irdma_reg_ipaddr_event_cb(struct irdma_pci_f *rf);
259cdcd52d4SBartosz Sobczak void irdma_dereg_ipaddr_event_cb(struct irdma_pci_f *rf);
260cdcd52d4SBartosz Sobczak 
261cdcd52d4SBartosz Sobczak /* Introduced in this series https://lore.kernel.org/linux-rdma/0-v2-270386b7e60b+28f4-umem_1_jgg@nvidia.com/
262cdcd52d4SBartosz Sobczak  * An irdma version helper doing same for older functions with difference that iova is passed in
263cdcd52d4SBartosz Sobczak  * as opposed to derived from umem->iova.
264cdcd52d4SBartosz Sobczak  */
irdma_ib_umem_num_dma_blocks(struct ib_umem * umem,unsigned long pgsz,u64 iova)265cdcd52d4SBartosz Sobczak static inline size_t irdma_ib_umem_num_dma_blocks(struct ib_umem *umem, unsigned long pgsz, u64 iova)
266cdcd52d4SBartosz Sobczak {
267cdcd52d4SBartosz Sobczak 	/* some older OFED distros do not have ALIGN_DOWN */
268cdcd52d4SBartosz Sobczak #ifndef ALIGN_DOWN
269cdcd52d4SBartosz Sobczak #define ALIGN_DOWN(x, a)	ALIGN((x) - ((a) - 1), (a))
270cdcd52d4SBartosz Sobczak #endif
271cdcd52d4SBartosz Sobczak 
272cdcd52d4SBartosz Sobczak 	return (size_t)((ALIGN(iova + umem->length, pgsz) -
273cdcd52d4SBartosz Sobczak 			 ALIGN_DOWN(iova, pgsz))) / pgsz;
274cdcd52d4SBartosz Sobczak }
275cdcd52d4SBartosz Sobczak 
addrconf_addr_eui48(u8 * deui,const char * const addr)27635105900SBartosz Sobczak static inline void addrconf_addr_eui48(u8 *deui, const char *const addr)
27735105900SBartosz Sobczak {
27835105900SBartosz Sobczak 	memcpy(deui, addr, 3);
27935105900SBartosz Sobczak 	deui[3] = 0xFF;
28035105900SBartosz Sobczak 	deui[4] = 0xFE;
28135105900SBartosz Sobczak 	memcpy(deui + 5, addr + 3, 3);
28235105900SBartosz Sobczak 	deui[0] ^= 2;
28335105900SBartosz Sobczak }
28435105900SBartosz Sobczak 
285cdcd52d4SBartosz Sobczak #endif /* FBSD_KCOMPAT_H */
286