1/*
2 * Copyright (c) 2004 Mellanox Technologies Ltd.  All rights reserved.
3 * Copyright (c) 2004 Infinicon Corporation.  All rights reserved.
4 * Copyright (c) 2004 Intel Corporation.  All rights reserved.
5 * Copyright (c) 2004 Topspin Corporation.  All rights reserved.
6 * Copyright (c) 2004 Voltaire Corporation.  All rights reserved.
7 * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
8 * Copyright (c) 2005, 2006, 2007 Cisco Systems.  All rights reserved.
9 *
10 * This software is available to you under a choice of one of two
11 * licenses.  You may choose to be licensed under the terms of the GNU
12 * General Public License (GPL) Version 2, available from the file
13 * COPYING in the main directory of this source tree, or the
14 * OpenIB.org BSD license below:
15 *
16 *     Redistribution and use in source and binary forms, with or
17 *     without modification, are permitted provided that the following
18 *     conditions are met:
19 *
20 *      - Redistributions of source code must retain the above
21 *        copyright notice, this list of conditions and the following
22 *        disclaimer.
23 *
24 *      - Redistributions in binary form must reproduce the above
25 *        copyright notice, this list of conditions and the following
26 *        disclaimer in the documentation and/or other materials
27 *        provided with the distribution.
28 *
29 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
30 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
31 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
32 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
33 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
34 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
35 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
36 * SOFTWARE.
37 *
38 * $Id: ib_verbs.h 1349 2004-12-16 21:09:43Z roland $
39 *
40 * $FreeBSD$
41 */
42
43
44#if !defined(IB_VERBS_H)
45#define IB_VERBS_H
46
47#include <contrib/rdma/types.h>
48#include <sys/lock.h>
49#include <sys/mutex.h>
50
51struct rdma_scatterlist {
52	void *page;
53	unsigned int length;
54	unsigned int offset;
55};
56struct vm_object;
57
58union ib_gid {
59	u8	raw[16];
60	struct {
61		__be64	subnet_prefix;
62		__be64	interface_id;
63	} global;
64};
65
66enum rdma_node_type {
67	/* IB values map to NodeInfo:NodeType. */
68	RDMA_NODE_IB_CA 	= 1,
69	RDMA_NODE_IB_SWITCH,
70	RDMA_NODE_IB_ROUTER,
71	RDMA_NODE_RNIC
72};
73
74enum rdma_transport_type {
75	RDMA_TRANSPORT_IB,
76	RDMA_TRANSPORT_IWARP
77};
78
79enum rdma_transport_type
80rdma_node_get_transport(enum rdma_node_type node_type);
81
82enum ib_device_cap_flags {
83	IB_DEVICE_RESIZE_MAX_WR		= 1,
84	IB_DEVICE_BAD_PKEY_CNTR		= (1<<1),
85	IB_DEVICE_BAD_QKEY_CNTR		= (1<<2),
86	IB_DEVICE_RAW_MULTI		= (1<<3),
87	IB_DEVICE_AUTO_PATH_MIG		= (1<<4),
88	IB_DEVICE_CHANGE_PHY_PORT	= (1<<5),
89	IB_DEVICE_UD_AV_PORT_ENFORCE	= (1<<6),
90	IB_DEVICE_CURR_QP_STATE_MOD	= (1<<7),
91	IB_DEVICE_SHUTDOWN_PORT		= (1<<8),
92	IB_DEVICE_INIT_TYPE		= (1<<9),
93	IB_DEVICE_PORT_ACTIVE_EVENT	= (1<<10),
94	IB_DEVICE_SYS_IMAGE_GUID	= (1<<11),
95	IB_DEVICE_RC_RNR_NAK_GEN	= (1<<12),
96	IB_DEVICE_SRQ_RESIZE		= (1<<13),
97	IB_DEVICE_N_NOTIFY_CQ		= (1<<14),
98	IB_DEVICE_ZERO_STAG		= (1<<15),
99	IB_DEVICE_SEND_W_INV		= (1<<16),
100	IB_DEVICE_MEM_WINDOW		= (1<<17)
101};
102
103enum ib_atomic_cap {
104	IB_ATOMIC_NONE,
105	IB_ATOMIC_HCA,
106	IB_ATOMIC_GLOB
107};
108
109struct ib_device_attr {
110	u64			fw_ver;
111	__be64			sys_image_guid;
112	u64			max_mr_size;
113	u64			page_size_cap;
114	u32			vendor_id;
115	u32			vendor_part_id;
116	u32			hw_ver;
117	int			max_qp;
118	int			max_qp_wr;
119	int			device_cap_flags;
120	int			max_sge;
121	int			max_sge_rd;
122	int			max_cq;
123	int			max_cqe;
124	int			max_mr;
125	int			max_pd;
126	int			max_qp_rd_atom;
127	int			max_ee_rd_atom;
128	int			max_res_rd_atom;
129	int			max_qp_init_rd_atom;
130	int			max_ee_init_rd_atom;
131	enum ib_atomic_cap	atomic_cap;
132	int			max_ee;
133	int			max_rdd;
134	int			max_mw;
135	int			max_raw_ipv6_qp;
136	int			max_raw_ethy_qp;
137	int			max_mcast_grp;
138	int			max_mcast_qp_attach;
139	int			max_total_mcast_qp_attach;
140	int			max_ah;
141	int			max_fmr;
142	int			max_map_per_fmr;
143	int			max_srq;
144	int			max_srq_wr;
145	int			max_srq_sge;
146	u16			max_pkeys;
147	u8			local_ca_ack_delay;
148};
149
150enum ib_mtu {
151	IB_MTU_256  = 1,
152	IB_MTU_512  = 2,
153	IB_MTU_1024 = 3,
154	IB_MTU_2048 = 4,
155	IB_MTU_4096 = 5
156};
157
158static inline int ib_mtu_enum_to_int(enum ib_mtu mtu)
159{
160	switch (mtu) {
161	case IB_MTU_256:  return  256;
162	case IB_MTU_512:  return  512;
163	case IB_MTU_1024: return 1024;
164	case IB_MTU_2048: return 2048;
165	case IB_MTU_4096: return 4096;
166	default: 	  return -1;
167	}
168}
169
170enum ib_port_state {
171	IB_PORT_NOP		= 0,
172	IB_PORT_DOWN		= 1,
173	IB_PORT_INIT		= 2,
174	IB_PORT_ARMED		= 3,
175	IB_PORT_ACTIVE		= 4,
176	IB_PORT_ACTIVE_DEFER	= 5
177};
178
179enum ib_port_cap_flags {
180	IB_PORT_SM				= 1 <<  1,
181	IB_PORT_NOTICE_SUP			= 1 <<  2,
182	IB_PORT_TRAP_SUP			= 1 <<  3,
183	IB_PORT_OPT_IPD_SUP                     = 1 <<  4,
184	IB_PORT_AUTO_MIGR_SUP			= 1 <<  5,
185	IB_PORT_SL_MAP_SUP			= 1 <<  6,
186	IB_PORT_MKEY_NVRAM			= 1 <<  7,
187	IB_PORT_PKEY_NVRAM			= 1 <<  8,
188	IB_PORT_LED_INFO_SUP			= 1 <<  9,
189	IB_PORT_SM_DISABLED			= 1 << 10,
190	IB_PORT_SYS_IMAGE_GUID_SUP		= 1 << 11,
191	IB_PORT_PKEY_SW_EXT_PORT_TRAP_SUP	= 1 << 12,
192	IB_PORT_CM_SUP				= 1 << 16,
193	IB_PORT_SNMP_TUNNEL_SUP			= 1 << 17,
194	IB_PORT_REINIT_SUP			= 1 << 18,
195	IB_PORT_DEVICE_MGMT_SUP			= 1 << 19,
196	IB_PORT_VENDOR_CLASS_SUP		= 1 << 20,
197	IB_PORT_DR_NOTICE_SUP			= 1 << 21,
198	IB_PORT_CAP_MASK_NOTICE_SUP		= 1 << 22,
199	IB_PORT_BOOT_MGMT_SUP			= 1 << 23,
200	IB_PORT_LINK_LATENCY_SUP		= 1 << 24,
201	IB_PORT_CLIENT_REG_SUP			= 1 << 25
202};
203
204enum ib_port_width {
205	IB_WIDTH_1X	= 1,
206	IB_WIDTH_4X	= 2,
207	IB_WIDTH_8X	= 4,
208	IB_WIDTH_12X	= 8
209};
210
211static inline int ib_width_enum_to_int(enum ib_port_width width)
212{
213	switch (width) {
214	case IB_WIDTH_1X:  return  1;
215	case IB_WIDTH_4X:  return  4;
216	case IB_WIDTH_8X:  return  8;
217	case IB_WIDTH_12X: return 12;
218	default: 	  return -1;
219	}
220}
221
222struct ib_port_attr {
223	enum ib_port_state	state;
224	enum ib_mtu		max_mtu;
225	enum ib_mtu		active_mtu;
226	int			gid_tbl_len;
227	u32			port_cap_flags;
228	u32			max_msg_sz;
229	u32			bad_pkey_cntr;
230	u32			qkey_viol_cntr;
231	u16			pkey_tbl_len;
232	u16			lid;
233	u16			sm_lid;
234	u8			lmc;
235	u8			max_vl_num;
236	u8			sm_sl;
237	u8			subnet_timeout;
238	u8			init_type_reply;
239	u8			active_width;
240	u8			active_speed;
241	u8                      phys_state;
242};
243
244enum ib_device_modify_flags {
245	IB_DEVICE_MODIFY_SYS_IMAGE_GUID	= 1 << 0,
246	IB_DEVICE_MODIFY_NODE_DESC	= 1 << 1
247};
248
249struct ib_device_modify {
250	u64	sys_image_guid;
251	char	node_desc[64];
252};
253
254enum ib_port_modify_flags {
255	IB_PORT_SHUTDOWN		= 1,
256	IB_PORT_INIT_TYPE		= (1<<2),
257	IB_PORT_RESET_QKEY_CNTR		= (1<<3)
258};
259
260struct ib_port_modify {
261	u32	set_port_cap_mask;
262	u32	clr_port_cap_mask;
263	u8	init_type;
264};
265
266enum ib_event_type {
267	IB_EVENT_CQ_ERR,
268	IB_EVENT_QP_FATAL,
269	IB_EVENT_QP_REQ_ERR,
270	IB_EVENT_QP_ACCESS_ERR,
271	IB_EVENT_COMM_EST,
272	IB_EVENT_SQ_DRAINED,
273	IB_EVENT_PATH_MIG,
274	IB_EVENT_PATH_MIG_ERR,
275	IB_EVENT_DEVICE_FATAL,
276	IB_EVENT_PORT_ACTIVE,
277	IB_EVENT_PORT_ERR,
278	IB_EVENT_LID_CHANGE,
279	IB_EVENT_PKEY_CHANGE,
280	IB_EVENT_SM_CHANGE,
281	IB_EVENT_SRQ_ERR,
282	IB_EVENT_SRQ_LIMIT_REACHED,
283	IB_EVENT_QP_LAST_WQE_REACHED,
284	IB_EVENT_CLIENT_REREGISTER
285};
286
287enum dma_data_direction {
288        DMA_BIDIRECTIONAL = 0,
289        DMA_TO_DEVICE = 1,
290        DMA_FROM_DEVICE = 2,
291        DMA_NONE = 3,
292};
293
294struct ib_event {
295	struct ib_device	*device;
296	union {
297		struct ib_cq	*cq;
298		struct ib_qp	*qp;
299		struct ib_srq	*srq;
300		u8		port_num;
301	} element;
302	enum ib_event_type	event;
303};
304
305struct ib_event_handler {
306	struct ib_device *device;
307	void            (*handler)(struct ib_event_handler *, struct ib_event *);
308	TAILQ_ENTRY(ib_event_handler) list;
309};
310
311#define INIT_IB_EVENT_HANDLER(_ptr, _device, _handler)		\
312	do {							\
313		(_ptr)->device  = _device;			\
314		(_ptr)->handler = _handler;			\
315	} while (0)
316
317struct ib_global_route {
318	union ib_gid	dgid;
319	u32		flow_label;
320	u8		sgid_index;
321	u8		hop_limit;
322	u8		traffic_class;
323};
324
325struct ib_grh {
326	__be32		version_tclass_flow;
327	__be16		paylen;
328	u8		next_hdr;
329	u8		hop_limit;
330	union ib_gid	sgid;
331	union ib_gid	dgid;
332};
333
334enum {
335	IB_MULTICAST_QPN = 0xffffff
336};
337
338#define IB_LID_PERMISSIVE	__constant_htons(0xFFFF)
339
340enum ib_ah_flags {
341	IB_AH_GRH	= 1
342};
343
344enum ib_rate {
345	IB_RATE_PORT_CURRENT = 0,
346	IB_RATE_2_5_GBPS = 2,
347	IB_RATE_5_GBPS   = 5,
348	IB_RATE_10_GBPS  = 3,
349	IB_RATE_20_GBPS  = 6,
350	IB_RATE_30_GBPS  = 4,
351	IB_RATE_40_GBPS  = 7,
352	IB_RATE_60_GBPS  = 8,
353	IB_RATE_80_GBPS  = 9,
354	IB_RATE_120_GBPS = 10
355};
356
357/**
358 * ib_rate_to_mult - Convert the IB rate enum to a multiple of the
359 * base rate of 2.5 Gbit/sec.  For example, IB_RATE_5_GBPS will be
360 * converted to 2, since 5 Gbit/sec is 2 * 2.5 Gbit/sec.
361 * @rate: rate to convert.
362 */
363int ib_rate_to_mult(enum ib_rate rate);
364
365/**
366 * mult_to_ib_rate - Convert a multiple of 2.5 Gbit/sec to an IB rate
367 * enum.
368 * @mult: multiple to convert.
369 */
370enum ib_rate mult_to_ib_rate(int mult);
371
372struct ib_ah_attr {
373	struct ib_global_route	grh;
374	u16			dlid;
375	u8			sl;
376	u8			src_path_bits;
377	u8			static_rate;
378	u8			ah_flags;
379	u8			port_num;
380};
381
382enum ib_wc_status {
383	IB_WC_SUCCESS,
384	IB_WC_LOC_LEN_ERR,
385	IB_WC_LOC_QP_OP_ERR,
386	IB_WC_LOC_EEC_OP_ERR,
387	IB_WC_LOC_PROT_ERR,
388	IB_WC_WR_FLUSH_ERR,
389	IB_WC_MW_BIND_ERR,
390	IB_WC_BAD_RESP_ERR,
391	IB_WC_LOC_ACCESS_ERR,
392	IB_WC_REM_INV_REQ_ERR,
393	IB_WC_REM_ACCESS_ERR,
394	IB_WC_REM_OP_ERR,
395	IB_WC_RETRY_EXC_ERR,
396	IB_WC_RNR_RETRY_EXC_ERR,
397	IB_WC_LOC_RDD_VIOL_ERR,
398	IB_WC_REM_INV_RD_REQ_ERR,
399	IB_WC_REM_ABORT_ERR,
400	IB_WC_INV_EECN_ERR,
401	IB_WC_INV_EEC_STATE_ERR,
402	IB_WC_FATAL_ERR,
403	IB_WC_RESP_TIMEOUT_ERR,
404	IB_WC_GENERAL_ERR
405};
406
407enum ib_wc_opcode {
408	IB_WC_SEND,
409	IB_WC_RDMA_WRITE,
410	IB_WC_RDMA_READ,
411	IB_WC_COMP_SWAP,
412	IB_WC_FETCH_ADD,
413	IB_WC_BIND_MW,
414/*
415 * Set value of IB_WC_RECV so consumers can test if a completion is a
416 * receive by testing (opcode & IB_WC_RECV).
417 */
418	IB_WC_RECV			= 1 << 7,
419	IB_WC_RECV_RDMA_WITH_IMM
420};
421
422enum ib_wc_flags {
423	IB_WC_GRH		= 1,
424	IB_WC_WITH_IMM		= (1<<1)
425};
426
427struct ib_wc {
428	u64			wr_id;
429	enum ib_wc_status	status;
430	enum ib_wc_opcode	opcode;
431	u32			vendor_err;
432	u32			byte_len;
433	struct ib_qp	       *qp;
434	__be32			imm_data;
435	u32			src_qp;
436	int			wc_flags;
437	u16			pkey_index;
438	u16			slid;
439	u8			sl;
440	u8			dlid_path_bits;
441	u8			port_num;	/* valid only for DR SMPs on switches */
442};
443
444enum ib_cq_notify_flags {
445	IB_CQ_SOLICITED			= 1 << 0,
446	IB_CQ_NEXT_COMP			= 1 << 1,
447	IB_CQ_SOLICITED_MASK		= IB_CQ_SOLICITED | IB_CQ_NEXT_COMP,
448	IB_CQ_REPORT_MISSED_EVENTS	= 1 << 2,
449};
450
451enum ib_srq_attr_mask {
452	IB_SRQ_MAX_WR	= 1 << 0,
453	IB_SRQ_LIMIT	= 1 << 1,
454};
455
456struct ib_srq_attr {
457	u32	max_wr;
458	u32	max_sge;
459	u32	srq_limit;
460};
461
462struct ib_srq_init_attr {
463	void		      (*event_handler)(struct ib_event *, void *);
464	void		       *srq_context;
465	struct ib_srq_attr	attr;
466};
467
468struct ib_qp_cap {
469	u32	max_send_wr;
470	u32	max_recv_wr;
471	u32	max_send_sge;
472	u32	max_recv_sge;
473	u32	max_inline_data;
474};
475
476enum ib_sig_type {
477	IB_SIGNAL_ALL_WR,
478	IB_SIGNAL_REQ_WR
479};
480
481enum ib_qp_type {
482	/*
483	 * IB_QPT_SMI and IB_QPT_GSI have to be the first two entries
484	 * here (and in that order) since the MAD layer uses them as
485	 * indices into a 2-entry table.
486	 */
487	IB_QPT_SMI,
488	IB_QPT_GSI,
489
490	IB_QPT_RC,
491	IB_QPT_UC,
492	IB_QPT_UD,
493	IB_QPT_RAW_IPV6,
494	IB_QPT_RAW_ETY
495};
496
497struct ib_qp_init_attr {
498	void                  (*event_handler)(struct ib_event *, void *);
499	void		       *qp_context;
500	struct ib_cq	       *send_cq;
501	struct ib_cq	       *recv_cq;
502	struct ib_srq	       *srq;
503	struct ib_qp_cap	cap;
504	enum ib_sig_type	sq_sig_type;
505	enum ib_qp_type		qp_type;
506	u8			port_num; /* special QP types only */
507};
508
509enum ib_rnr_timeout {
510	IB_RNR_TIMER_655_36 =  0,
511	IB_RNR_TIMER_000_01 =  1,
512	IB_RNR_TIMER_000_02 =  2,
513	IB_RNR_TIMER_000_03 =  3,
514	IB_RNR_TIMER_000_04 =  4,
515	IB_RNR_TIMER_000_06 =  5,
516	IB_RNR_TIMER_000_08 =  6,
517	IB_RNR_TIMER_000_12 =  7,
518	IB_RNR_TIMER_000_16 =  8,
519	IB_RNR_TIMER_000_24 =  9,
520	IB_RNR_TIMER_000_32 = 10,
521	IB_RNR_TIMER_000_48 = 11,
522	IB_RNR_TIMER_000_64 = 12,
523	IB_RNR_TIMER_000_96 = 13,
524	IB_RNR_TIMER_001_28 = 14,
525	IB_RNR_TIMER_001_92 = 15,
526	IB_RNR_TIMER_002_56 = 16,
527	IB_RNR_TIMER_003_84 = 17,
528	IB_RNR_TIMER_005_12 = 18,
529	IB_RNR_TIMER_007_68 = 19,
530	IB_RNR_TIMER_010_24 = 20,
531	IB_RNR_TIMER_015_36 = 21,
532	IB_RNR_TIMER_020_48 = 22,
533	IB_RNR_TIMER_030_72 = 23,
534	IB_RNR_TIMER_040_96 = 24,
535	IB_RNR_TIMER_061_44 = 25,
536	IB_RNR_TIMER_081_92 = 26,
537	IB_RNR_TIMER_122_88 = 27,
538	IB_RNR_TIMER_163_84 = 28,
539	IB_RNR_TIMER_245_76 = 29,
540	IB_RNR_TIMER_327_68 = 30,
541	IB_RNR_TIMER_491_52 = 31
542};
543
544enum ib_qp_attr_mask {
545	IB_QP_STATE			= 1,
546	IB_QP_CUR_STATE			= (1<<1),
547	IB_QP_EN_SQD_ASYNC_NOTIFY	= (1<<2),
548	IB_QP_ACCESS_FLAGS		= (1<<3),
549	IB_QP_PKEY_INDEX		= (1<<4),
550	IB_QP_PORT			= (1<<5),
551	IB_QP_QKEY			= (1<<6),
552	IB_QP_AV			= (1<<7),
553	IB_QP_PATH_MTU			= (1<<8),
554	IB_QP_TIMEOUT			= (1<<9),
555	IB_QP_RETRY_CNT			= (1<<10),
556	IB_QP_RNR_RETRY			= (1<<11),
557	IB_QP_RQ_PSN			= (1<<12),
558	IB_QP_MAX_QP_RD_ATOMIC		= (1<<13),
559	IB_QP_ALT_PATH			= (1<<14),
560	IB_QP_MIN_RNR_TIMER		= (1<<15),
561	IB_QP_SQ_PSN			= (1<<16),
562	IB_QP_MAX_DEST_RD_ATOMIC	= (1<<17),
563	IB_QP_PATH_MIG_STATE		= (1<<18),
564	IB_QP_CAP			= (1<<19),
565	IB_QP_DEST_QPN			= (1<<20)
566};
567
568enum ib_qp_state {
569	IB_QPS_RESET,
570	IB_QPS_INIT,
571	IB_QPS_RTR,
572	IB_QPS_RTS,
573	IB_QPS_SQD,
574	IB_QPS_SQE,
575	IB_QPS_ERR
576};
577
578enum ib_mig_state {
579	IB_MIG_MIGRATED,
580	IB_MIG_REARM,
581	IB_MIG_ARMED
582};
583
584struct ib_qp_attr {
585	enum ib_qp_state	qp_state;
586	enum ib_qp_state	cur_qp_state;
587	enum ib_mtu		path_mtu;
588	enum ib_mig_state	path_mig_state;
589	u32			qkey;
590	u32			rq_psn;
591	u32			sq_psn;
592	u32			dest_qp_num;
593	int			qp_access_flags;
594	struct ib_qp_cap	cap;
595	struct ib_ah_attr	ah_attr;
596	struct ib_ah_attr	alt_ah_attr;
597	u16			pkey_index;
598	u16			alt_pkey_index;
599	u8			en_sqd_async_notify;
600	u8			sq_draining;
601	u8			max_rd_atomic;
602	u8			max_dest_rd_atomic;
603	u8			min_rnr_timer;
604	u8			port_num;
605	u8			timeout;
606	u8			retry_cnt;
607	u8			rnr_retry;
608	u8			alt_port_num;
609	u8			alt_timeout;
610};
611
612enum ib_wr_opcode {
613	IB_WR_RDMA_WRITE,
614	IB_WR_RDMA_WRITE_WITH_IMM,
615	IB_WR_SEND,
616	IB_WR_SEND_WITH_IMM,
617	IB_WR_RDMA_READ,
618	IB_WR_ATOMIC_CMP_AND_SWP,
619	IB_WR_ATOMIC_FETCH_AND_ADD
620};
621
622enum ib_send_flags {
623	IB_SEND_FENCE		= 1,
624	IB_SEND_SIGNALED	= (1<<1),
625	IB_SEND_SOLICITED	= (1<<2),
626	IB_SEND_INLINE		= (1<<3)
627};
628
629struct ib_sge {
630	u64	addr;
631	u32	length;
632	u32	lkey;
633};
634
635struct ib_send_wr {
636	struct ib_send_wr      *next;
637	u64			wr_id;
638	struct ib_sge	       *sg_list;
639	int			num_sge;
640	enum ib_wr_opcode	opcode;
641	int			send_flags;
642	__be32			imm_data;
643	union {
644		struct {
645			u64	remote_addr;
646			u32	rkey;
647		} rdma;
648		struct {
649			u64	remote_addr;
650			u64	compare_add;
651			u64	swap;
652			u32	rkey;
653		} atomic;
654		struct {
655			struct ib_ah *ah;
656			u32	remote_qpn;
657			u32	remote_qkey;
658			u16	pkey_index; /* valid for GSI only */
659			u8	port_num;   /* valid for DR SMPs on switch only */
660		} ud;
661	} wr;
662};
663
664struct ib_recv_wr {
665	struct ib_recv_wr      *next;
666	u64			wr_id;
667	struct ib_sge	       *sg_list;
668	int			num_sge;
669};
670
671enum ib_access_flags {
672	IB_ACCESS_LOCAL_WRITE	= 1,
673	IB_ACCESS_REMOTE_WRITE	= (1<<1),
674	IB_ACCESS_REMOTE_READ	= (1<<2),
675	IB_ACCESS_REMOTE_ATOMIC	= (1<<3),
676	IB_ACCESS_MW_BIND	= (1<<4)
677};
678
679struct ib_phys_buf {
680	u64      addr;
681	u64      size;
682};
683
684struct ib_mr_attr {
685	struct ib_pd	*pd;
686	u64		device_virt_addr;
687	u64		size;
688	int		mr_access_flags;
689	u32		lkey;
690	u32		rkey;
691};
692
693enum ib_mr_rereg_flags {
694	IB_MR_REREG_TRANS	= 1,
695	IB_MR_REREG_PD		= (1<<1),
696	IB_MR_REREG_ACCESS	= (1<<2)
697};
698
699struct ib_mw_bind {
700	struct ib_mr   *mr;
701	u64		wr_id;
702	u64		addr;
703	u32		length;
704	int		send_flags;
705	int		mw_access_flags;
706};
707
708struct ib_fmr_attr {
709	int	max_pages;
710	int	max_maps;
711	u8	page_shift;
712};
713
714/*
715 * XXX can this really be on 7 different lists at once?
716 *
717 */
718struct ib_ucontext {
719	struct ib_device       *device;
720	TAILQ_ENTRY(ib_ucontext)	pd_list;
721	TAILQ_ENTRY(ib_ucontext)	mr_list;
722	TAILQ_ENTRY(ib_ucontext)	mw_list;
723	TAILQ_ENTRY(ib_ucontext)	cq_list;
724	TAILQ_ENTRY(ib_ucontext)	qp_list;
725	TAILQ_ENTRY(ib_ucontext)	srq_list;
726	TAILQ_ENTRY(ib_ucontext)	ah_list;
727	int			closing;
728};
729
730struct ib_uobject {
731	u64			user_handle;	/* handle given to us by userspace */
732	struct ib_ucontext     *context;	/* associated user context */
733	void		       *object;		/* containing object */
734	TAILQ_ENTRY(ib_uobject)	entry;		/* link to context's list */
735	u32			id;		/* index into kernel idr */
736	volatile uint32_t	ref;
737	struct mtx	        lock;		/* protects .live */
738	int			live;
739};
740
741struct ib_udata {
742	void	*inbuf;
743	void	*outbuf;
744	size_t	inlen;
745	size_t	outlen;
746};
747
748#define IB_UMEM_MAX_PAGE_CHUNK						\
749	((PAGE_SIZE - offsetof(struct ib_umem_chunk, page_list)) /	\
750	 ((void *) &((struct ib_umem_chunk *) 0)->page_list[1] -	\
751	  (void *) &((struct ib_umem_chunk *) 0)->page_list[0]))
752
753struct ib_pd {
754	struct ib_device       *device;
755	struct ib_uobject      *uobject;
756	volatile int      	usecnt; /* count all resources */
757};
758
759struct ib_ah {
760	struct ib_device	*device;
761	struct ib_pd		*pd;
762	struct ib_uobject	*uobject;
763};
764
765typedef void (*ib_comp_handler)(struct ib_cq *cq, void *cq_context);
766
767struct ib_cq {
768	struct ib_device       *device;
769	struct ib_uobject      *uobject;
770	ib_comp_handler   	comp_handler;
771	void                  (*event_handler)(struct ib_event *, void *);
772	void *            	cq_context;
773	int               	cqe;
774	volatile int          	usecnt; /* count number of work queues */
775};
776
777struct ib_srq {
778	struct ib_device       *device;
779	struct ib_pd	       *pd;
780	struct ib_uobject      *uobject;
781	void		      (*event_handler)(struct ib_event *, void *);
782	void		       *srq_context;
783	volatile int		usecnt;
784};
785
786struct ib_qp {
787	struct ib_device       *device;
788	struct ib_pd	       *pd;
789	struct ib_cq	       *send_cq;
790	struct ib_cq	       *recv_cq;
791	struct ib_srq	       *srq;
792	struct ib_uobject      *uobject;
793	void                  (*event_handler)(struct ib_event *, void *);
794	void		       *qp_context;
795	u32			qp_num;
796	enum ib_qp_type		qp_type;
797};
798
799struct ib_mr {
800	struct ib_device  *device;
801	struct ib_pd	  *pd;
802	struct ib_uobject *uobject;
803	u32		   lkey;
804	u32		   rkey;
805	volatile int	   usecnt; /* count number of MWs */
806};
807
808struct ib_mw {
809	struct ib_device	*device;
810	struct ib_pd		*pd;
811	struct ib_uobject	*uobject;
812	u32			rkey;
813};
814
815
816struct ib_fmr {
817	struct ib_device	*device;
818	struct ib_pd		*pd;
819	TAILQ_ENTRY(ib_fmr)	entry;
820	u32			lkey;
821	u32			rkey;
822};
823
824TAILQ_HEAD(ib_fmr_list_head, ib_fmr);
825
826struct ib_mad;
827struct ib_grh;
828
829enum ib_process_mad_flags {
830	IB_MAD_IGNORE_MKEY	= 1,
831	IB_MAD_IGNORE_BKEY	= 2,
832	IB_MAD_IGNORE_ALL	= IB_MAD_IGNORE_MKEY | IB_MAD_IGNORE_BKEY
833};
834
835enum ib_mad_result {
836	IB_MAD_RESULT_FAILURE  = 0,      /* (!SUCCESS is the important flag) */
837	IB_MAD_RESULT_SUCCESS  = 1 << 0, /* MAD was successfully processed   */
838	IB_MAD_RESULT_REPLY    = 1 << 1, /* Reply packet needs to be sent    */
839	IB_MAD_RESULT_CONSUMED = 1 << 2  /* Packet consumed: stop processing */
840};
841
842#define IB_DEVICE_NAME_MAX 64
843
844struct ib_cache {
845	struct mtx              lock;
846	struct ib_event_handler event_handler;
847	struct ib_pkey_cache  **pkey_cache;
848	struct ib_gid_cache   **gid_cache;
849	u8                     *lmc_cache;
850};
851
852struct ib_dma_mapping_ops {
853	int		(*mapping_error)(struct ib_device *dev,
854					 u64 dma_addr);
855	u64		(*map_single)(struct ib_device *dev,
856				      void *ptr, size_t size,
857				      enum dma_data_direction direction);
858	void		(*unmap_single)(struct ib_device *dev,
859					u64 addr, size_t size,
860					enum dma_data_direction direction);
861	u64		(*map_page)(struct ib_device *dev,
862				    void *page, unsigned long offset,
863				    size_t size,
864				    enum dma_data_direction direction);
865	void		(*unmap_page)(struct ib_device *dev,
866				      u64 addr, size_t size,
867				      enum dma_data_direction direction);
868	int		(*map_sg)(struct ib_device *dev,
869				  struct rdma_scatterlist *sg, int nents,
870				  enum dma_data_direction direction);
871	void		(*unmap_sg)(struct ib_device *dev,
872				    struct rdma_scatterlist *sg, int nents,
873				    enum dma_data_direction direction);
874	u64		(*dma_address)(struct ib_device *dev,
875				       struct rdma_scatterlist *sg);
876	unsigned int	(*dma_len)(struct ib_device *dev,
877				   struct rdma_scatterlist *sg);
878	void		(*sync_single_for_cpu)(struct ib_device *dev,
879					       u64 dma_handle,
880					       size_t size,
881				               enum dma_data_direction dir);
882	void		(*sync_single_for_device)(struct ib_device *dev,
883						  u64 dma_handle,
884						  size_t size,
885						  enum dma_data_direction dir);
886	void		*(*alloc_coherent)(struct ib_device *dev,
887					   size_t size,
888					   u64 *dma_handle,
889					   int flag);
890	void		(*free_coherent)(struct ib_device *dev,
891					 size_t size, void *cpu_addr,
892					 u64 dma_handle);
893};
894
895struct iw_cm_verbs;
896
897struct ib_device {
898	struct device                *dma_device;
899
900	char                          name[IB_DEVICE_NAME_MAX];
901
902	TAILQ_HEAD(, ib_event_handler) event_handler_list;
903	struct mtx                    event_handler_lock;
904
905        TAILQ_ENTRY(ib_device)        core_list;
906        TAILQ_HEAD(, ib_client_data)  client_data_list;
907	struct mtx                    client_data_lock;
908
909	struct ib_cache               cache;
910	int                          *pkey_tbl_len;
911	int                          *gid_tbl_len;
912
913	u32                           flags;
914
915	int			      num_comp_vectors;
916
917	struct iw_cm_verbs	     *iwcm;
918
919	int		           (*query_device)(struct ib_device *device,
920						   struct ib_device_attr *device_attr);
921	int		           (*query_port)(struct ib_device *device,
922						 u8 port_num,
923						 struct ib_port_attr *port_attr);
924	int		           (*query_gid)(struct ib_device *device,
925						u8 port_num, int index,
926						union ib_gid *gid);
927	int		           (*query_pkey)(struct ib_device *device,
928						 u8 port_num, u16 index, u16 *pkey);
929	int		           (*modify_device)(struct ib_device *device,
930						    int device_modify_mask,
931						    struct ib_device_modify *device_modify);
932	int		           (*modify_port)(struct ib_device *device,
933						  u8 port_num, int port_modify_mask,
934						  struct ib_port_modify *port_modify);
935	struct ib_ucontext *       (*alloc_ucontext)(struct ib_device *device,
936						     struct ib_udata *udata);
937	int                        (*dealloc_ucontext)(struct ib_ucontext *context);
938	int                        (*mmap)(struct ib_ucontext *context,
939					   struct vm_object *vma);
940	struct ib_pd *             (*alloc_pd)(struct ib_device *device,
941					       struct ib_ucontext *context,
942					       struct ib_udata *udata);
943	int                        (*dealloc_pd)(struct ib_pd *pd);
944	struct ib_ah *             (*create_ah)(struct ib_pd *pd,
945						struct ib_ah_attr *ah_attr);
946	int                        (*modify_ah)(struct ib_ah *ah,
947						struct ib_ah_attr *ah_attr);
948	int                        (*query_ah)(struct ib_ah *ah,
949					       struct ib_ah_attr *ah_attr);
950	int                        (*destroy_ah)(struct ib_ah *ah);
951	struct ib_srq *            (*create_srq)(struct ib_pd *pd,
952						 struct ib_srq_init_attr *srq_init_attr,
953						 struct ib_udata *udata);
954	int                        (*modify_srq)(struct ib_srq *srq,
955						 struct ib_srq_attr *srq_attr,
956						 enum ib_srq_attr_mask srq_attr_mask,
957						 struct ib_udata *udata);
958	int                        (*query_srq)(struct ib_srq *srq,
959						struct ib_srq_attr *srq_attr);
960	int                        (*destroy_srq)(struct ib_srq *srq);
961	int                        (*post_srq_recv)(struct ib_srq *srq,
962						    struct ib_recv_wr *recv_wr,
963						    struct ib_recv_wr **bad_recv_wr);
964	struct ib_qp *             (*create_qp)(struct ib_pd *pd,
965						struct ib_qp_init_attr *qp_init_attr,
966						struct ib_udata *udata);
967	int                        (*modify_qp)(struct ib_qp *qp,
968						struct ib_qp_attr *qp_attr,
969						int qp_attr_mask,
970						struct ib_udata *udata);
971	int                        (*query_qp)(struct ib_qp *qp,
972					       struct ib_qp_attr *qp_attr,
973					       int qp_attr_mask,
974					       struct ib_qp_init_attr *qp_init_attr);
975	int                        (*destroy_qp)(struct ib_qp *qp);
976	int                        (*post_send)(struct ib_qp *qp,
977						struct ib_send_wr *send_wr,
978						struct ib_send_wr **bad_send_wr);
979	int                        (*post_recv)(struct ib_qp *qp,
980						struct ib_recv_wr *recv_wr,
981						struct ib_recv_wr **bad_recv_wr);
982	struct ib_cq *             (*create_cq)(struct ib_device *device, int cqe,
983						int comp_vector,
984						struct ib_ucontext *context,
985						struct ib_udata *udata);
986	int                        (*destroy_cq)(struct ib_cq *cq);
987	int                        (*resize_cq)(struct ib_cq *cq, int cqe,
988						struct ib_udata *udata);
989	int                        (*poll_cq)(struct ib_cq *cq, int num_entries,
990					      struct ib_wc *wc);
991	int                        (*peek_cq)(struct ib_cq *cq, int wc_cnt);
992	int                        (*req_notify_cq)(struct ib_cq *cq,
993						    enum ib_cq_notify_flags flags);
994	int                        (*req_ncomp_notif)(struct ib_cq *cq,
995						      int wc_cnt);
996	struct ib_mr *             (*get_dma_mr)(struct ib_pd *pd,
997						 int mr_access_flags);
998	struct ib_mr *             (*reg_phys_mr)(struct ib_pd *pd,
999						  struct ib_phys_buf *phys_buf_array,
1000						  int num_phys_buf,
1001						  int mr_access_flags,
1002						  u64 *iova_start);
1003	struct ib_mr *             (*reg_user_mr)(struct ib_pd *pd,
1004						  u64 start, u64 length,
1005						  u64 virt_addr,
1006						  int mr_access_flags,
1007						  struct ib_udata *udata);
1008	int                        (*query_mr)(struct ib_mr *mr,
1009					       struct ib_mr_attr *mr_attr);
1010	int                        (*dereg_mr)(struct ib_mr *mr);
1011	int                        (*rereg_phys_mr)(struct ib_mr *mr,
1012						    int mr_rereg_mask,
1013						    struct ib_pd *pd,
1014						    struct ib_phys_buf *phys_buf_array,
1015						    int num_phys_buf,
1016						    int mr_access_flags,
1017						    u64 *iova_start);
1018	struct ib_mw *             (*alloc_mw)(struct ib_pd *pd);
1019	int                        (*bind_mw)(struct ib_qp *qp,
1020					      struct ib_mw *mw,
1021					      struct ib_mw_bind *mw_bind);
1022	int                        (*dealloc_mw)(struct ib_mw *mw);
1023	struct ib_fmr *	           (*alloc_fmr)(struct ib_pd *pd,
1024						int mr_access_flags,
1025						struct ib_fmr_attr *fmr_attr);
1026	int		           (*map_phys_fmr)(struct ib_fmr *fmr,
1027						   u64 *page_list, int list_len,
1028						   u64 iova);
1029	int		           (*unmap_fmr)(struct ib_fmr_list_head *fmr_list);
1030	int		           (*dealloc_fmr)(struct ib_fmr *fmr);
1031	int                        (*attach_mcast)(struct ib_qp *qp,
1032						   union ib_gid *gid,
1033						   u16 lid);
1034	int                        (*detach_mcast)(struct ib_qp *qp,
1035						   union ib_gid *gid,
1036						   u16 lid);
1037	int                        (*process_mad)(struct ib_device *device,
1038						  int process_mad_flags,
1039						  u8 port_num,
1040						  struct ib_wc *in_wc,
1041						  struct ib_grh *in_grh,
1042						  struct ib_mad *in_mad,
1043						  struct ib_mad *out_mad);
1044
1045	struct ib_dma_mapping_ops   *dma_ops;
1046
1047	struct module               *owner;
1048#ifdef notyet
1049	struct class_device          class_dev;
1050	struct kobject               ports_parent;
1051	struct list_head             port_list;
1052#endif
1053	enum {
1054		IB_DEV_UNINITIALIZED,
1055		IB_DEV_REGISTERED,
1056		IB_DEV_UNREGISTERED
1057	}                            reg_state;
1058
1059	u64			     uverbs_cmd_mask;
1060	int			     uverbs_abi_ver;
1061
1062	char			     node_desc[64];
1063	__be64			     node_guid;
1064	u8                           node_type;
1065	u8                           phys_port_cnt;
1066};
1067
1068struct ib_client {
1069	char  *name;
1070	void (*add)   (struct ib_device *);
1071	void (*remove)(struct ib_device *);
1072	TAILQ_ENTRY(ib_client) list;
1073};
1074
1075struct ib_device *ib_alloc_device(size_t size);
1076void ib_dealloc_device(struct ib_device *device);
1077
1078int ib_register_device   (struct ib_device *device);
1079void ib_unregister_device(struct ib_device *device);
1080
1081int ib_register_client   (struct ib_client *client);
1082void ib_unregister_client(struct ib_client *client);
1083
1084void *ib_get_client_data(struct ib_device *device, struct ib_client *client);
1085void  ib_set_client_data(struct ib_device *device, struct ib_client *client,
1086			 void *data);
1087
1088static inline int ib_copy_from_udata(void *dest, struct ib_udata *udata, size_t len)
1089{
1090	return copyin(udata->inbuf, dest, len);
1091}
1092
1093static inline int ib_copy_to_udata(struct ib_udata *udata, void *src, size_t len)
1094{
1095	return copyout(src, udata->outbuf, len);
1096}
1097
1098/**
1099 * ib_modify_qp_is_ok - Check that the supplied attribute mask
1100 * contains all required attributes and no attributes not allowed for
1101 * the given QP state transition.
1102 * @cur_state: Current QP state
1103 * @next_state: Next QP state
1104 * @type: QP type
1105 * @mask: Mask of supplied QP attributes
1106 *
1107 * This function is a helper function that a low-level driver's
1108 * modify_qp method can use to validate the consumer's input.  It
1109 * checks that cur_state and next_state are valid QP states, that a
1110 * transition from cur_state to next_state is allowed by the IB spec,
1111 * and that the attribute mask supplied is allowed for the transition.
1112 */
1113int ib_modify_qp_is_ok(enum ib_qp_state cur_state, enum ib_qp_state next_state,
1114		       enum ib_qp_type type, enum ib_qp_attr_mask mask);
1115
1116int ib_register_event_handler  (struct ib_event_handler *event_handler);
1117int ib_unregister_event_handler(struct ib_event_handler *event_handler);
1118void ib_dispatch_event(struct ib_event *event);
1119
1120int ib_query_device(struct ib_device *device,
1121		    struct ib_device_attr *device_attr);
1122
1123int ib_query_port(struct ib_device *device,
1124		  u8 port_num, struct ib_port_attr *port_attr);
1125
1126int ib_query_gid(struct ib_device *device,
1127		 u8 port_num, int index, union ib_gid *gid);
1128
1129int ib_query_pkey(struct ib_device *device,
1130		  u8 port_num, u16 index, u16 *pkey);
1131
1132int ib_modify_device(struct ib_device *device,
1133		     int device_modify_mask,
1134		     struct ib_device_modify *device_modify);
1135
1136int ib_modify_port(struct ib_device *device,
1137		   u8 port_num, int port_modify_mask,
1138		   struct ib_port_modify *port_modify);
1139
1140int ib_find_gid(struct ib_device *device, union ib_gid *gid,
1141		u8 *port_num, u16 *index);
1142
1143int ib_find_pkey(struct ib_device *device,
1144		 u8 port_num, u16 pkey, u16 *index);
1145
1146/**
1147 * ib_alloc_pd - Allocates an unused protection domain.
1148 * @device: The device on which to allocate the protection domain.
1149 *
1150 * A protection domain object provides an association between QPs, shared
1151 * receive queues, address handles, memory regions, and memory windows.
1152 */
1153struct ib_pd *ib_alloc_pd(struct ib_device *device);
1154
1155/**
1156 * ib_dealloc_pd - Deallocates a protection domain.
1157 * @pd: The protection domain to deallocate.
1158 */
1159int ib_dealloc_pd(struct ib_pd *pd);
1160
1161/**
1162 * ib_create_ah - Creates an address handle for the given address vector.
1163 * @pd: The protection domain associated with the address handle.
1164 * @ah_attr: The attributes of the address vector.
1165 *
1166 * The address handle is used to reference a local or global destination
1167 * in all UD QP post sends.
1168 */
1169struct ib_ah *ib_create_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr);
1170
1171/**
1172 * ib_init_ah_from_wc - Initializes address handle attributes from a
1173 *   work completion.
1174 * @device: Device on which the received message arrived.
1175 * @port_num: Port on which the received message arrived.
1176 * @wc: Work completion associated with the received message.
1177 * @grh: References the received global route header.  This parameter is
1178 *   ignored unless the work completion indicates that the GRH is valid.
1179 * @ah_attr: Returned attributes that can be used when creating an address
1180 *   handle for replying to the message.
1181 */
1182int ib_init_ah_from_wc(struct ib_device *device, u8 port_num, struct ib_wc *wc,
1183		       struct ib_grh *grh, struct ib_ah_attr *ah_attr);
1184
1185/**
1186 * ib_create_ah_from_wc - Creates an address handle associated with the
1187 *   sender of the specified work completion.
1188 * @pd: The protection domain associated with the address handle.
1189 * @wc: Work completion information associated with a received message.
1190 * @grh: References the received global route header.  This parameter is
1191 *   ignored unless the work completion indicates that the GRH is valid.
1192 * @port_num: The outbound port number to associate with the address.
1193 *
1194 * The address handle is used to reference a local or global destination
1195 * in all UD QP post sends.
1196 */
1197struct ib_ah *ib_create_ah_from_wc(struct ib_pd *pd, struct ib_wc *wc,
1198				   struct ib_grh *grh, u8 port_num);
1199
1200/**
1201 * ib_modify_ah - Modifies the address vector associated with an address
1202 *   handle.
1203 * @ah: The address handle to modify.
1204 * @ah_attr: The new address vector attributes to associate with the
1205 *   address handle.
1206 */
1207int ib_modify_ah(struct ib_ah *ah, struct ib_ah_attr *ah_attr);
1208
1209/**
1210 * ib_query_ah - Queries the address vector associated with an address
1211 *   handle.
1212 * @ah: The address handle to query.
1213 * @ah_attr: The address vector attributes associated with the address
1214 *   handle.
1215 */
1216int ib_query_ah(struct ib_ah *ah, struct ib_ah_attr *ah_attr);
1217
1218/**
1219 * ib_destroy_ah - Destroys an address handle.
1220 * @ah: The address handle to destroy.
1221 */
1222int ib_destroy_ah(struct ib_ah *ah);
1223
1224/**
1225 * ib_create_srq - Creates a SRQ associated with the specified protection
1226 *   domain.
1227 * @pd: The protection domain associated with the SRQ.
1228 * @srq_init_attr: A list of initial attributes required to create the
1229 *   SRQ.  If SRQ creation succeeds, then the attributes are updated to
1230 *   the actual capabilities of the created SRQ.
1231 *
1232 * srq_attr->max_wr and srq_attr->max_sge are read the determine the
1233 * requested size of the SRQ, and set to the actual values allocated
1234 * on return.  If ib_create_srq() succeeds, then max_wr and max_sge
1235 * will always be at least as large as the requested values.
1236 */
1237struct ib_srq *ib_create_srq(struct ib_pd *pd,
1238			     struct ib_srq_init_attr *srq_init_attr);
1239
1240/**
1241 * ib_modify_srq - Modifies the attributes for the specified SRQ.
1242 * @srq: The SRQ to modify.
1243 * @srq_attr: On input, specifies the SRQ attributes to modify.  On output,
1244 *   the current values of selected SRQ attributes are returned.
1245 * @srq_attr_mask: A bit-mask used to specify which attributes of the SRQ
1246 *   are being modified.
1247 *
1248 * The mask may contain IB_SRQ_MAX_WR to resize the SRQ and/or
1249 * IB_SRQ_LIMIT to set the SRQ's limit and request notification when
1250 * the number of receives queued drops below the limit.
1251 */
1252int ib_modify_srq(struct ib_srq *srq,
1253		  struct ib_srq_attr *srq_attr,
1254		  enum ib_srq_attr_mask srq_attr_mask);
1255
1256/**
1257 * ib_query_srq - Returns the attribute list and current values for the
1258 *   specified SRQ.
1259 * @srq: The SRQ to query.
1260 * @srq_attr: The attributes of the specified SRQ.
1261 */
1262int ib_query_srq(struct ib_srq *srq,
1263		 struct ib_srq_attr *srq_attr);
1264
1265/**
1266 * ib_destroy_srq - Destroys the specified SRQ.
1267 * @srq: The SRQ to destroy.
1268 */
1269int ib_destroy_srq(struct ib_srq *srq);
1270
1271/**
1272 * ib_post_srq_recv - Posts a list of work requests to the specified SRQ.
1273 * @srq: The SRQ to post the work request on.
1274 * @recv_wr: A list of work requests to post on the receive queue.
1275 * @bad_recv_wr: On an immediate failure, this parameter will reference
1276 *   the work request that failed to be posted on the QP.
1277 */
1278static inline int ib_post_srq_recv(struct ib_srq *srq,
1279				   struct ib_recv_wr *recv_wr,
1280				   struct ib_recv_wr **bad_recv_wr)
1281{
1282	return srq->device->post_srq_recv(srq, recv_wr, bad_recv_wr);
1283}
1284
1285/**
1286 * ib_create_qp - Creates a QP associated with the specified protection
1287 *   domain.
1288 * @pd: The protection domain associated with the QP.
1289 * @qp_init_attr: A list of initial attributes required to create the
1290 *   QP.  If QP creation succeeds, then the attributes are updated to
1291 *   the actual capabilities of the created QP.
1292 */
1293struct ib_qp *ib_create_qp(struct ib_pd *pd,
1294			   struct ib_qp_init_attr *qp_init_attr);
1295
1296/**
1297 * ib_modify_qp - Modifies the attributes for the specified QP and then
1298 *   transitions the QP to the given state.
1299 * @qp: The QP to modify.
1300 * @qp_attr: On input, specifies the QP attributes to modify.  On output,
1301 *   the current values of selected QP attributes are returned.
1302 * @qp_attr_mask: A bit-mask used to specify which attributes of the QP
1303 *   are being modified.
1304 */
1305int ib_modify_qp(struct ib_qp *qp,
1306		 struct ib_qp_attr *qp_attr,
1307		 int qp_attr_mask);
1308
1309/**
1310 * ib_query_qp - Returns the attribute list and current values for the
1311 *   specified QP.
1312 * @qp: The QP to query.
1313 * @qp_attr: The attributes of the specified QP.
1314 * @qp_attr_mask: A bit-mask used to select specific attributes to query.
1315 * @qp_init_attr: Additional attributes of the selected QP.
1316 *
1317 * The qp_attr_mask may be used to limit the query to gathering only the
1318 * selected attributes.
1319 */
1320int ib_query_qp(struct ib_qp *qp,
1321		struct ib_qp_attr *qp_attr,
1322		int qp_attr_mask,
1323		struct ib_qp_init_attr *qp_init_attr);
1324
1325/**
1326 * ib_destroy_qp - Destroys the specified QP.
1327 * @qp: The QP to destroy.
1328 */
1329int ib_destroy_qp(struct ib_qp *qp);
1330
1331/**
1332 * ib_post_send - Posts a list of work requests to the send queue of
1333 *   the specified QP.
1334 * @qp: The QP to post the work request on.
1335 * @send_wr: A list of work requests to post on the send queue.
1336 * @bad_send_wr: On an immediate failure, this parameter will reference
1337 *   the work request that failed to be posted on the QP.
1338 */
1339static inline int ib_post_send(struct ib_qp *qp,
1340			       struct ib_send_wr *send_wr,
1341			       struct ib_send_wr **bad_send_wr)
1342{
1343	return qp->device->post_send(qp, send_wr, bad_send_wr);
1344}
1345
1346/**
1347 * ib_post_recv - Posts a list of work requests to the receive queue of
1348 *   the specified QP.
1349 * @qp: The QP to post the work request on.
1350 * @recv_wr: A list of work requests to post on the receive queue.
1351 * @bad_recv_wr: On an immediate failure, this parameter will reference
1352 *   the work request that failed to be posted on the QP.
1353 */
1354static inline int ib_post_recv(struct ib_qp *qp,
1355			       struct ib_recv_wr *recv_wr,
1356			       struct ib_recv_wr **bad_recv_wr)
1357{
1358	return qp->device->post_recv(qp, recv_wr, bad_recv_wr);
1359}
1360
1361/**
1362 * ib_create_cq - Creates a CQ on the specified device.
1363 * @device: The device on which to create the CQ.
1364 * @comp_handler: A user-specified callback that is invoked when a
1365 *   completion event occurs on the CQ.
1366 * @event_handler: A user-specified callback that is invoked when an
1367 *   asynchronous event not associated with a completion occurs on the CQ.
1368 * @cq_context: Context associated with the CQ returned to the user via
1369 *   the associated completion and event handlers.
1370 * @cqe: The minimum size of the CQ.
1371 * @comp_vector - Completion vector used to signal completion events.
1372 *     Must be >= 0 and < context->num_comp_vectors.
1373 *
1374 * Users can examine the cq structure to determine the actual CQ size.
1375 */
1376struct ib_cq *ib_create_cq(struct ib_device *device,
1377			   ib_comp_handler comp_handler,
1378			   void (*event_handler)(struct ib_event *, void *),
1379			   void *cq_context, int cqe, int comp_vector);
1380
1381/**
1382 * ib_resize_cq - Modifies the capacity of the CQ.
1383 * @cq: The CQ to resize.
1384 * @cqe: The minimum size of the CQ.
1385 *
1386 * Users can examine the cq structure to determine the actual CQ size.
1387 */
1388int ib_resize_cq(struct ib_cq *cq, int cqe);
1389
1390/**
1391 * ib_destroy_cq - Destroys the specified CQ.
1392 * @cq: The CQ to destroy.
1393 */
1394int ib_destroy_cq(struct ib_cq *cq);
1395
1396/**
1397 * ib_poll_cq - poll a CQ for completion(s)
1398 * @cq:the CQ being polled
1399 * @num_entries:maximum number of completions to return
1400 * @wc:array of at least @num_entries &struct ib_wc where completions
1401 *   will be returned
1402 *
1403 * Poll a CQ for (possibly multiple) completions.  If the return value
1404 * is < 0, an error occurred.  If the return value is >= 0, it is the
1405 * number of completions returned.  If the return value is
1406 * non-negative and < num_entries, then the CQ was emptied.
1407 */
1408static inline int ib_poll_cq(struct ib_cq *cq, int num_entries,
1409			     struct ib_wc *wc)
1410{
1411	return cq->device->poll_cq(cq, num_entries, wc);
1412}
1413
1414/**
1415 * ib_peek_cq - Returns the number of unreaped completions currently
1416 *   on the specified CQ.
1417 * @cq: The CQ to peek.
1418 * @wc_cnt: A minimum number of unreaped completions to check for.
1419 *
1420 * If the number of unreaped completions is greater than or equal to wc_cnt,
1421 * this function returns wc_cnt, otherwise, it returns the actual number of
1422 * unreaped completions.
1423 */
1424int ib_peek_cq(struct ib_cq *cq, int wc_cnt);
1425
1426/**
1427 * ib_req_notify_cq - Request completion notification on a CQ.
1428 * @cq: The CQ to generate an event for.
1429 * @flags:
1430 *   Must contain exactly one of %IB_CQ_SOLICITED or %IB_CQ_NEXT_COMP
1431 *   to request an event on the next solicited event or next work
1432 *   completion at any type, respectively. %IB_CQ_REPORT_MISSED_EVENTS
1433 *   may also be |ed in to request a hint about missed events, as
1434 *   described below.
1435 *
1436 * Return Value:
1437 *    < 0 means an error occurred while requesting notification
1438 *   == 0 means notification was requested successfully, and if
1439 *        IB_CQ_REPORT_MISSED_EVENTS was passed in, then no events
1440 *        were missed and it is safe to wait for another event.  In
1441 *        this case is it guaranteed that any work completions added
1442 *        to the CQ since the last CQ poll will trigger a completion
1443 *        notification event.
1444 *    > 0 is only returned if IB_CQ_REPORT_MISSED_EVENTS was passed
1445 *        in.  It means that the consumer must poll the CQ again to
1446 *        make sure it is empty to avoid missing an event because of a
1447 *        race between requesting notification and an entry being
1448 *        added to the CQ.  This return value means it is possible
1449 *        (but not guaranteed) that a work completion has been added
1450 *        to the CQ since the last poll without triggering a
1451 *        completion notification event.
1452 */
1453static inline int ib_req_notify_cq(struct ib_cq *cq,
1454				   enum ib_cq_notify_flags flags)
1455{
1456	return cq->device->req_notify_cq(cq, flags);
1457}
1458
1459/**
1460 * ib_req_ncomp_notif - Request completion notification when there are
1461 *   at least the specified number of unreaped completions on the CQ.
1462 * @cq: The CQ to generate an event for.
1463 * @wc_cnt: The number of unreaped completions that should be on the
1464 *   CQ before an event is generated.
1465 */
1466static inline int ib_req_ncomp_notif(struct ib_cq *cq, int wc_cnt)
1467{
1468	return cq->device->req_ncomp_notif ?
1469		cq->device->req_ncomp_notif(cq, wc_cnt) :
1470		ENOSYS;
1471}
1472
1473/**
1474 * ib_get_dma_mr - Returns a memory region for system memory that is
1475 *   usable for DMA.
1476 * @pd: The protection domain associated with the memory region.
1477 * @mr_access_flags: Specifies the memory access rights.
1478 *
1479 * Note that the ib_dma_*() functions defined below must be used
1480 * to create/destroy addresses used with the Lkey or Rkey returned
1481 * by ib_get_dma_mr().
1482 */
1483struct ib_mr *ib_get_dma_mr(struct ib_pd *pd, int mr_access_flags);
1484#ifdef notyet
1485/**
1486 * ib_dma_mapping_error - check a DMA addr for error
1487 * @dev: The device for which the dma_addr was created
1488 * @dma_addr: The DMA address to check
1489 */
1490static inline int ib_dma_mapping_error(struct ib_device *dev, u64 dma_addr)
1491{
1492	if (dev->dma_ops)
1493		return dev->dma_ops->mapping_error(dev, dma_addr);
1494	return dma_mapping_error(dma_addr);
1495}
1496
1497/**
1498 * ib_dma_map_single - Map a kernel virtual address to DMA address
1499 * @dev: The device for which the dma_addr is to be created
1500 * @cpu_addr: The kernel virtual address
1501 * @size: The size of the region in bytes
1502 * @direction: The direction of the DMA
1503 */
1504static inline u64 ib_dma_map_single(struct ib_device *dev,
1505				    void *cpu_addr, size_t size,
1506				    enum dma_data_direction direction)
1507{
1508	if (dev->dma_ops)
1509		return dev->dma_ops->map_single(dev, cpu_addr, size, direction);
1510	return dma_map_single(dev->dma_device, cpu_addr, size, direction);
1511}
1512
1513/**
1514 * ib_dma_unmap_single - Destroy a mapping created by ib_dma_map_single()
1515 * @dev: The device for which the DMA address was created
1516 * @addr: The DMA address
1517 * @size: The size of the region in bytes
1518 * @direction: The direction of the DMA
1519 */
1520static inline void ib_dma_unmap_single(struct ib_device *dev,
1521				       u64 addr, size_t size,
1522				       enum dma_data_direction direction)
1523{
1524	if (dev->dma_ops)
1525		dev->dma_ops->unmap_single(dev, addr, size, direction);
1526	else
1527		dma_unmap_single(dev->dma_device, addr, size, direction);
1528}
1529
1530/**
1531 * ib_dma_map_page - Map a physical page to DMA address
1532 * @dev: The device for which the dma_addr is to be created
1533 * @page: The page to be mapped
1534 * @offset: The offset within the page
1535 * @size: The size of the region in bytes
1536 * @direction: The direction of the DMA
1537 */
1538static inline u64 ib_dma_map_page(struct ib_device *dev,
1539				  struct page *page,
1540				  unsigned long offset,
1541				  size_t size,
1542					 enum dma_data_direction direction)
1543{
1544	if (dev->dma_ops)
1545		return dev->dma_ops->map_page(dev, page, offset, size, direction);
1546	return dma_map_page(dev->dma_device, page, offset, size, direction);
1547}
1548
1549/**
1550 * ib_dma_unmap_page - Destroy a mapping created by ib_dma_map_page()
1551 * @dev: The device for which the DMA address was created
1552 * @addr: The DMA address
1553 * @size: The size of the region in bytes
1554 * @direction: The direction of the DMA
1555 */
1556static inline void ib_dma_unmap_page(struct ib_device *dev,
1557				     u64 addr, size_t size,
1558				     enum dma_data_direction direction)
1559{
1560	if (dev->dma_ops)
1561		dev->dma_ops->unmap_page(dev, addr, size, direction);
1562	else
1563		dma_unmap_page(dev->dma_device, addr, size, direction);
1564}
1565
1566/**
1567 * ib_dma_map_sg - Map a scatter/gather list to DMA addresses
1568 * @dev: The device for which the DMA addresses are to be created
1569 * @sg: The array of scatter/gather entries
1570 * @nents: The number of scatter/gather entries
1571 * @direction: The direction of the DMA
1572 */
1573static inline int ib_dma_map_sg(struct ib_device *dev,
1574				struct rdma_scatterlist *sg, int nents,
1575				enum dma_data_direction direction)
1576{
1577	if (dev->dma_ops)
1578		return dev->dma_ops->map_sg(dev, sg, nents, direction);
1579	return dma_map_sg(dev->dma_device, sg, nents, direction);
1580}
1581
1582/**
1583 * ib_dma_unmap_sg - Unmap a scatter/gather list of DMA addresses
1584 * @dev: The device for which the DMA addresses were created
1585 * @sg: The array of scatter/gather entries
1586 * @nents: The number of scatter/gather entries
1587 * @direction: The direction of the DMA
1588 */
1589static inline void ib_dma_unmap_sg(struct ib_device *dev,
1590				   struct rdma_scatterlist *sg, int nents,
1591				   enum dma_data_direction direction)
1592{
1593	if (dev->dma_ops)
1594		dev->dma_ops->unmap_sg(dev, sg, nents, direction);
1595	else
1596		dma_unmap_sg(dev->dma_device, sg, nents, direction);
1597}
1598
1599/**
1600 * ib_sg_dma_address - Return the DMA address from a scatter/gather entry
1601 * @dev: The device for which the DMA addresses were created
1602 * @sg: The scatter/gather entry
1603 */
1604static inline u64 ib_sg_dma_address(struct ib_device *dev,
1605				    struct rdma_scatterlist *sg)
1606{
1607	if (dev->dma_ops)
1608		return dev->dma_ops->dma_address(dev, sg);
1609	return sg_dma_address(sg);
1610}
1611
1612/**
1613 * ib_sg_dma_len - Return the DMA length from a scatter/gather entry
1614 * @dev: The device for which the DMA addresses were created
1615 * @sg: The scatter/gather entry
1616 */
1617static inline unsigned int ib_sg_dma_len(struct ib_device *dev,
1618					 struct rdma_scatterlist *sg)
1619{
1620	if (dev->dma_ops)
1621		return dev->dma_ops->dma_len(dev, sg);
1622	return sg_dma_len(sg);
1623}
1624
1625/**
1626 * ib_dma_sync_single_for_cpu - Prepare DMA region to be accessed by CPU
1627 * @dev: The device for which the DMA address was created
1628 * @addr: The DMA address
1629 * @size: The size of the region in bytes
1630 * @dir: The direction of the DMA
1631 */
1632static inline void ib_dma_sync_single_for_cpu(struct ib_device *dev,
1633					      u64 addr,
1634					      size_t size,
1635					      enum dma_data_direction dir)
1636{
1637	if (dev->dma_ops)
1638		dev->dma_ops->sync_single_for_cpu(dev, addr, size, dir);
1639	else
1640		dma_sync_single_for_cpu(dev->dma_device, addr, size, dir);
1641}
1642
1643/**
1644 * ib_dma_sync_single_for_device - Prepare DMA region to be accessed by device
1645 * @dev: The device for which the DMA address was created
1646 * @addr: The DMA address
1647 * @size: The size of the region in bytes
1648 * @dir: The direction of the DMA
1649 */
1650static inline void ib_dma_sync_single_for_device(struct ib_device *dev,
1651						 u64 addr,
1652						 size_t size,
1653						 enum dma_data_direction dir)
1654{
1655	if (dev->dma_ops)
1656		dev->dma_ops->sync_single_for_device(dev, addr, size, dir);
1657	else
1658		dma_sync_single_for_device(dev->dma_device, addr, size, dir);
1659}
1660
1661/**
1662 * ib_dma_alloc_coherent - Allocate memory and map it for DMA
1663 * @dev: The device for which the DMA address is requested
1664 * @size: The size of the region to allocate in bytes
1665 * @dma_handle: A pointer for returning the DMA address of the region
1666 * @flag: memory allocator flags
1667 */
1668static inline void *ib_dma_alloc_coherent(struct ib_device *dev,
1669					   size_t size,
1670					   u64 *dma_handle,
1671					   gfp_t flag)
1672{
1673	if (dev->dma_ops)
1674		return dev->dma_ops->alloc_coherent(dev, size, dma_handle, flag);
1675	else {
1676		dma_addr_t handle;
1677		void *ret;
1678
1679		ret = dma_alloc_coherent(dev->dma_device, size, &handle, flag);
1680		*dma_handle = handle;
1681		return ret;
1682	}
1683}
1684
1685/**
1686 * ib_dma_free_coherent - Free memory allocated by ib_dma_alloc_coherent()
1687 * @dev: The device for which the DMA addresses were allocated
1688 * @size: The size of the region
1689 * @cpu_addr: the address returned by ib_dma_alloc_coherent()
1690 * @dma_handle: the DMA address returned by ib_dma_alloc_coherent()
1691 */
1692static inline void ib_dma_free_coherent(struct ib_device *dev,
1693					size_t size, void *cpu_addr,
1694					u64 dma_handle)
1695{
1696	if (dev->dma_ops)
1697		dev->dma_ops->free_coherent(dev, size, cpu_addr, dma_handle);
1698	else
1699		dma_free_coherent(dev->dma_device, size, cpu_addr, dma_handle);
1700}
1701#endif
1702/**
1703 * ib_reg_phys_mr - Prepares a virtually addressed memory region for use
1704 *   by an HCA.
1705 * @pd: The protection domain associated assigned to the registered region.
1706 * @phys_buf_array: Specifies a list of physical buffers to use in the
1707 *   memory region.
1708 * @num_phys_buf: Specifies the size of the phys_buf_array.
1709 * @mr_access_flags: Specifies the memory access rights.
1710 * @iova_start: The offset of the region's starting I/O virtual address.
1711 */
1712struct ib_mr *ib_reg_phys_mr(struct ib_pd *pd,
1713			     struct ib_phys_buf *phys_buf_array,
1714			     int num_phys_buf,
1715			     int mr_access_flags,
1716			     u64 *iova_start);
1717
1718/**
1719 * ib_rereg_phys_mr - Modifies the attributes of an existing memory region.
1720 *   Conceptually, this call performs the functions deregister memory region
1721 *   followed by register physical memory region.  Where possible,
1722 *   resources are reused instead of deallocated and reallocated.
1723 * @mr: The memory region to modify.
1724 * @mr_rereg_mask: A bit-mask used to indicate which of the following
1725 *   properties of the memory region are being modified.
1726 * @pd: If %IB_MR_REREG_PD is set in mr_rereg_mask, this field specifies
1727 *   the new protection domain to associated with the memory region,
1728 *   otherwise, this parameter is ignored.
1729 * @phys_buf_array: If %IB_MR_REREG_TRANS is set in mr_rereg_mask, this
1730 *   field specifies a list of physical buffers to use in the new
1731 *   translation, otherwise, this parameter is ignored.
1732 * @num_phys_buf: If %IB_MR_REREG_TRANS is set in mr_rereg_mask, this
1733 *   field specifies the size of the phys_buf_array, otherwise, this
1734 *   parameter is ignored.
1735 * @mr_access_flags: If %IB_MR_REREG_ACCESS is set in mr_rereg_mask, this
1736 *   field specifies the new memory access rights, otherwise, this
1737 *   parameter is ignored.
1738 * @iova_start: The offset of the region's starting I/O virtual address.
1739 */
1740int ib_rereg_phys_mr(struct ib_mr *mr,
1741		     int mr_rereg_mask,
1742		     struct ib_pd *pd,
1743		     struct ib_phys_buf *phys_buf_array,
1744		     int num_phys_buf,
1745		     int mr_access_flags,
1746		     u64 *iova_start);
1747
1748/**
1749 * ib_query_mr - Retrieves information about a specific memory region.
1750 * @mr: The memory region to retrieve information about.
1751 * @mr_attr: The attributes of the specified memory region.
1752 */
1753int ib_query_mr(struct ib_mr *mr, struct ib_mr_attr *mr_attr);
1754
1755/**
1756 * ib_dereg_mr - Deregisters a memory region and removes it from the
1757 *   HCA translation table.
1758 * @mr: The memory region to deregister.
1759 */
1760int ib_dereg_mr(struct ib_mr *mr);
1761
1762/**
1763 * ib_alloc_mw - Allocates a memory window.
1764 * @pd: The protection domain associated with the memory window.
1765 */
1766struct ib_mw *ib_alloc_mw(struct ib_pd *pd);
1767
1768/**
1769 * ib_bind_mw - Posts a work request to the send queue of the specified
1770 *   QP, which binds the memory window to the given address range and
1771 *   remote access attributes.
1772 * @qp: QP to post the bind work request on.
1773 * @mw: The memory window to bind.
1774 * @mw_bind: Specifies information about the memory window, including
1775 *   its address range, remote access rights, and associated memory region.
1776 */
1777static inline int ib_bind_mw(struct ib_qp *qp,
1778			     struct ib_mw *mw,
1779			     struct ib_mw_bind *mw_bind)
1780{
1781	/* XXX reference counting in corresponding MR? */
1782	return mw->device->bind_mw ?
1783		mw->device->bind_mw(qp, mw, mw_bind) :
1784		ENOSYS;
1785}
1786
1787/**
1788 * ib_dealloc_mw - Deallocates a memory window.
1789 * @mw: The memory window to deallocate.
1790 */
1791int ib_dealloc_mw(struct ib_mw *mw);
1792
1793/**
1794 * ib_alloc_fmr - Allocates a unmapped fast memory region.
1795 * @pd: The protection domain associated with the unmapped region.
1796 * @mr_access_flags: Specifies the memory access rights.
1797 * @fmr_attr: Attributes of the unmapped region.
1798 *
1799 * A fast memory region must be mapped before it can be used as part of
1800 * a work request.
1801 */
1802struct ib_fmr *ib_alloc_fmr(struct ib_pd *pd,
1803			    int mr_access_flags,
1804			    struct ib_fmr_attr *fmr_attr);
1805
1806/**
1807 * ib_map_phys_fmr - Maps a list of physical pages to a fast memory region.
1808 * @fmr: The fast memory region to associate with the pages.
1809 * @page_list: An array of physical pages to map to the fast memory region.
1810 * @list_len: The number of pages in page_list.
1811 * @iova: The I/O virtual address to use with the mapped region.
1812 */
1813static inline int ib_map_phys_fmr(struct ib_fmr *fmr,
1814				  u64 *page_list, int list_len,
1815				  u64 iova)
1816{
1817	return fmr->device->map_phys_fmr(fmr, page_list, list_len, iova);
1818}
1819
1820/**
1821 * ib_unmap_fmr - Removes the mapping from a list of fast memory regions.
1822 * @fmr_list: A linked list of fast memory regions to unmap.
1823 */
1824int ib_unmap_fmr(struct ib_fmr_list_head *fmr_list);
1825
1826/**
1827 * ib_dealloc_fmr - Deallocates a fast memory region.
1828 * @fmr: The fast memory region to deallocate.
1829 */
1830int ib_dealloc_fmr(struct ib_fmr *fmr);
1831
1832/**
1833 * ib_attach_mcast - Attaches the specified QP to a multicast group.
1834 * @qp: QP to attach to the multicast group.  The QP must be type
1835 *   IB_QPT_UD.
1836 * @gid: Multicast group GID.
1837 * @lid: Multicast group LID in host byte order.
1838 *
1839 * In order to send and receive multicast packets, subnet
1840 * administration must have created the multicast group and configured
1841 * the fabric appropriately.  The port associated with the specified
1842 * QP must also be a member of the multicast group.
1843 */
1844int ib_attach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid);
1845
1846/**
1847 * ib_detach_mcast - Detaches the specified QP from a multicast group.
1848 * @qp: QP to detach from the multicast group.
1849 * @gid: Multicast group GID.
1850 * @lid: Multicast group LID in host byte order.
1851 */
1852int ib_detach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid);
1853
1854#endif /* IB_VERBS_H */
1855