1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24  */
25 
26 #ifndef	_SYS_IB_CLIENTS_OF_SOL_OFS_SOL_IB_CMA_H
27 #define	_SYS_IB_CLIENTS_OF_SOL_OFS_SOL_IB_CMA_H
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #include <sys/types.h>
34 #include <sys/modctl.h>
35 #include <sys/errno.h>
36 #include <sys/stat.h>
37 #include <sys/ddi.h>
38 #include <sys/sunddi.h>
39 #include <sys/modctl.h>
40 #include <sys/file.h>
41 #include <sys/ib/ibtl/ibvti.h>
42 
43 /* Global qkey for UDP QPs and multicast groups. */
44 #define	RDMA_UDP_QKEY 0x01234567
45 
46 typedef struct {
47 	uint64_t		dev_node_guid;
48 	uint8_t			dev_port_num;
49 	uint16_t		dev_pkey_ix;
50 	ib_pkey_t		dev_pkey;
51 	ib_gid_t		dev_sgid;
52 	ibt_ip_addr_t		dev_ipaddr;
53 } ibcma_dev_t;
54 
55 #define	IBCMA_LOCAL_ADDR_SET_FLAG	0x01
56 #define	IBCMA_REMOTE_ADDR_SET_FLAG	0x02
57 #define	IBCMA_LOCAL_ADDR_IFADDRANY	0x10
58 
59 typedef struct ibcma_chan_s {
60 	/* Pathinfo for CM ID */
61 	ibt_path_info_t		*chan_pathp;
62 	uint8_t			chan_numpaths;
63 	size_t			chan_path_size;
64 
65 	/* Address & Service ID for CM ID */
66 	ibt_ip_addr_t		chan_local_addr;
67 	ibt_ip_addr_t		chan_remote_addr;
68 	in_port_t		chan_port;
69 	ib_svc_id_t		chan_sid;
70 	uint8_t			chan_addr_flag;
71 
72 	/* RC REQ information */
73 	struct rdma_cm_id	*chan_req_idp;	/* Chan created for Req */
74 	ibt_adds_vect_t		chan_rcreq_addr;
75 	ib_qpn_t		chan_rcreq_qpn;
76 	uint8_t			chan_rcreq_ra_in;
77 	ibt_ofuvcm_req_data_t	chan_rtr_data;
78 
79 	/* QP Information for CM ID */
80 	uint8_t			chan_qpmodifyflag;
81 
82 	/* Local device Information */
83 	ibcma_dev_t		*chan_devp;
84 
85 	/* Multicast list for the CM ID */
86 	genlist_t		chan_mcast_list;
87 	int			chan_mcast_cnt;
88 } ibcma_chan_t;
89 
90 typedef struct ibcma_mcast_s {
91 	struct rdma_cm_id	*mcast_idp;
92 	void			*mcast_ctx;
93 	struct sockaddr_in6	mcast_addr;
94 	ib_gid_t		mcast_gid;
95 } ibcma_mcast_t;
96 
97 #ifdef __cplusplus
98 }
99 #endif
100 
101 #endif /* _SYS_IB_CLIENTS_OF_SOL_OFS_SOL_IB_CMA_H */
102