diff options
Diffstat (limited to 'include/rdma')
-rw-r--r-- | include/rdma/ib_addr.h | 114 | ||||
-rw-r--r-- | include/rdma/ib_cache.h | 13 | ||||
-rw-r--r-- | include/rdma/ib_cm.h | 26 | ||||
-rw-r--r-- | include/rdma/ib_marshall.h | 50 | ||||
-rw-r--r-- | include/rdma/ib_sa.h | 7 | ||||
-rw-r--r-- | include/rdma/ib_smi.h | 36 | ||||
-rw-r--r-- | include/rdma/ib_user_cm.h | 86 | ||||
-rw-r--r-- | include/rdma/ib_user_sa.h | 60 | ||||
-rw-r--r-- | include/rdma/ib_user_verbs.h | 80 | ||||
-rw-r--r-- | include/rdma/ib_verbs.h | 22 | ||||
-rw-r--r-- | include/rdma/rdma_cm.h | 256 | ||||
-rw-r--r-- | include/rdma/rdma_cm_ib.h | 47 |
12 files changed, 687 insertions, 110 deletions
diff --git a/include/rdma/ib_addr.h b/include/rdma/ib_addr.h new file mode 100644 index 000000000000..fcb5ba87dcc5 --- /dev/null +++ b/include/rdma/ib_addr.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005 Voltaire Inc. All rights reserved. | ||
3 | * Copyright (c) 2005 Intel Corporation. All rights reserved. | ||
4 | * | ||
5 | * This Software is licensed under one of the following licenses: | ||
6 | * | ||
7 | * 1) under the terms of the "Common Public License 1.0" a copy of which is | ||
8 | * available from the Open Source Initiative, see | ||
9 | * http://www.opensource.org/licenses/cpl.php. | ||
10 | * | ||
11 | * 2) under the terms of the "The BSD License" a copy of which is | ||
12 | * available from the Open Source Initiative, see | ||
13 | * http://www.opensource.org/licenses/bsd-license.php. | ||
14 | * | ||
15 | * 3) under the terms of the "GNU General Public License (GPL) Version 2" a | ||
16 | * copy of which is available from the Open Source Initiative, see | ||
17 | * http://www.opensource.org/licenses/gpl-license.php. | ||
18 | * | ||
19 | * Licensee has the right to choose one of the above licenses. | ||
20 | * | ||
21 | * Redistributions of source code must retain the above copyright | ||
22 | * notice and one of the license notices. | ||
23 | * | ||
24 | * Redistributions in binary form must reproduce both the above copyright | ||
25 | * notice, one of the license notices in the documentation | ||
26 | * and/or other materials provided with the distribution. | ||
27 | * | ||
28 | */ | ||
29 | |||
30 | #if !defined(IB_ADDR_H) | ||
31 | #define IB_ADDR_H | ||
32 | |||
33 | #include <linux/in.h> | ||
34 | #include <linux/in6.h> | ||
35 | #include <linux/netdevice.h> | ||
36 | #include <linux/socket.h> | ||
37 | #include <rdma/ib_verbs.h> | ||
38 | |||
39 | struct rdma_dev_addr { | ||
40 | unsigned char src_dev_addr[MAX_ADDR_LEN]; | ||
41 | unsigned char dst_dev_addr[MAX_ADDR_LEN]; | ||
42 | unsigned char broadcast[MAX_ADDR_LEN]; | ||
43 | enum ib_node_type dev_type; | ||
44 | }; | ||
45 | |||
46 | /** | ||
47 | * rdma_translate_ip - Translate a local IP address to an RDMA hardware | ||
48 | * address. | ||
49 | */ | ||
50 | int rdma_translate_ip(struct sockaddr *addr, struct rdma_dev_addr *dev_addr); | ||
51 | |||
52 | /** | ||
53 | * rdma_resolve_ip - Resolve source and destination IP addresses to | ||
54 | * RDMA hardware addresses. | ||
55 | * @src_addr: An optional source address to use in the resolution. If a | ||
56 | * source address is not provided, a usable address will be returned via | ||
57 | * the callback. | ||
58 | * @dst_addr: The destination address to resolve. | ||
59 | * @addr: A reference to a data location that will receive the resolved | ||
60 | * addresses. The data location must remain valid until the callback has | ||
61 | * been invoked. | ||
62 | * @timeout_ms: Amount of time to wait for the address resolution to complete. | ||
63 | * @callback: Call invoked once address resolution has completed, timed out, | ||
64 | * or been canceled. A status of 0 indicates success. | ||
65 | * @context: User-specified context associated with the call. | ||
66 | */ | ||
67 | int rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr, | ||
68 | struct rdma_dev_addr *addr, int timeout_ms, | ||
69 | void (*callback)(int status, struct sockaddr *src_addr, | ||
70 | struct rdma_dev_addr *addr, void *context), | ||
71 | void *context); | ||
72 | |||
73 | void rdma_addr_cancel(struct rdma_dev_addr *addr); | ||
74 | |||
75 | static inline int ip_addr_size(struct sockaddr *addr) | ||
76 | { | ||
77 | return addr->sa_family == AF_INET6 ? | ||
78 | sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in); | ||
79 | } | ||
80 | |||
81 | static inline u16 ib_addr_get_pkey(struct rdma_dev_addr *dev_addr) | ||
82 | { | ||
83 | return ((u16)dev_addr->broadcast[8] << 8) | (u16)dev_addr->broadcast[9]; | ||
84 | } | ||
85 | |||
86 | static inline void ib_addr_set_pkey(struct rdma_dev_addr *dev_addr, u16 pkey) | ||
87 | { | ||
88 | dev_addr->broadcast[8] = pkey >> 8; | ||
89 | dev_addr->broadcast[9] = (unsigned char) pkey; | ||
90 | } | ||
91 | |||
92 | static inline union ib_gid *ib_addr_get_sgid(struct rdma_dev_addr *dev_addr) | ||
93 | { | ||
94 | return (union ib_gid *) (dev_addr->src_dev_addr + 4); | ||
95 | } | ||
96 | |||
97 | static inline void ib_addr_set_sgid(struct rdma_dev_addr *dev_addr, | ||
98 | union ib_gid *gid) | ||
99 | { | ||
100 | memcpy(dev_addr->src_dev_addr + 4, gid, sizeof *gid); | ||
101 | } | ||
102 | |||
103 | static inline union ib_gid *ib_addr_get_dgid(struct rdma_dev_addr *dev_addr) | ||
104 | { | ||
105 | return (union ib_gid *) (dev_addr->dst_dev_addr + 4); | ||
106 | } | ||
107 | |||
108 | static inline void ib_addr_set_dgid(struct rdma_dev_addr *dev_addr, | ||
109 | union ib_gid *gid) | ||
110 | { | ||
111 | memcpy(dev_addr->dst_dev_addr + 4, gid, sizeof *gid); | ||
112 | } | ||
113 | |||
114 | #endif /* IB_ADDR_H */ | ||
diff --git a/include/rdma/ib_cache.h b/include/rdma/ib_cache.h index 5bf9834f7dca..f179d233ffc3 100644 --- a/include/rdma/ib_cache.h +++ b/include/rdma/ib_cache.h | |||
@@ -102,4 +102,17 @@ int ib_find_cached_pkey(struct ib_device *device, | |||
102 | u16 pkey, | 102 | u16 pkey, |
103 | u16 *index); | 103 | u16 *index); |
104 | 104 | ||
105 | /** | ||
106 | * ib_get_cached_lmc - Returns a cached lmc table entry | ||
107 | * @device: The device to query. | ||
108 | * @port_num: The port number of the device to query. | ||
109 | * @lmc: The lmc value for the specified port for that device. | ||
110 | * | ||
111 | * ib_get_cached_lmc() fetches the specified lmc table entry stored in | ||
112 | * the local software cache. | ||
113 | */ | ||
114 | int ib_get_cached_lmc(struct ib_device *device, | ||
115 | u8 port_num, | ||
116 | u8 *lmc); | ||
117 | |||
105 | #endif /* _IB_CACHE_H */ | 118 | #endif /* _IB_CACHE_H */ |
diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h index 0a9fcd59eb43..c9b4738be9d6 100644 --- a/include/rdma/ib_cm.h +++ b/include/rdma/ib_cm.h | |||
@@ -32,7 +32,7 @@ | |||
32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
33 | * SOFTWARE. | 33 | * SOFTWARE. |
34 | * | 34 | * |
35 | * $Id: ib_cm.h 2730 2005-06-28 16:43:03Z sean.hefty $ | 35 | * $Id: ib_cm.h 4311 2005-12-05 18:42:01Z sean.hefty $ |
36 | */ | 36 | */ |
37 | #if !defined(IB_CM_H) | 37 | #if !defined(IB_CM_H) |
38 | #define IB_CM_H | 38 | #define IB_CM_H |
@@ -102,7 +102,8 @@ enum ib_cm_data_size { | |||
102 | IB_CM_APR_INFO_LENGTH = 72, | 102 | IB_CM_APR_INFO_LENGTH = 72, |
103 | IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE = 216, | 103 | IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE = 216, |
104 | IB_CM_SIDR_REP_PRIVATE_DATA_SIZE = 136, | 104 | IB_CM_SIDR_REP_PRIVATE_DATA_SIZE = 136, |
105 | IB_CM_SIDR_REP_INFO_LENGTH = 72 | 105 | IB_CM_SIDR_REP_INFO_LENGTH = 72, |
106 | IB_CM_COMPARE_SIZE = 64 | ||
106 | }; | 107 | }; |
107 | 108 | ||
108 | struct ib_cm_id; | 109 | struct ib_cm_id; |
@@ -238,7 +239,6 @@ struct ib_cm_sidr_rep_event_param { | |||
238 | u32 qpn; | 239 | u32 qpn; |
239 | void *info; | 240 | void *info; |
240 | u8 info_len; | 241 | u8 info_len; |
241 | |||
242 | }; | 242 | }; |
243 | 243 | ||
244 | struct ib_cm_event { | 244 | struct ib_cm_event { |
@@ -317,6 +317,15 @@ void ib_destroy_cm_id(struct ib_cm_id *cm_id); | |||
317 | 317 | ||
318 | #define IB_SERVICE_ID_AGN_MASK __constant_cpu_to_be64(0xFF00000000000000ULL) | 318 | #define IB_SERVICE_ID_AGN_MASK __constant_cpu_to_be64(0xFF00000000000000ULL) |
319 | #define IB_CM_ASSIGN_SERVICE_ID __constant_cpu_to_be64(0x0200000000000000ULL) | 319 | #define IB_CM_ASSIGN_SERVICE_ID __constant_cpu_to_be64(0x0200000000000000ULL) |
320 | #define IB_CMA_SERVICE_ID __constant_cpu_to_be64(0x0000000001000000ULL) | ||
321 | #define IB_CMA_SERVICE_ID_MASK __constant_cpu_to_be64(0xFFFFFFFFFF000000ULL) | ||
322 | #define IB_SDP_SERVICE_ID __constant_cpu_to_be64(0x0000000000010000ULL) | ||
323 | #define IB_SDP_SERVICE_ID_MASK __constant_cpu_to_be64(0xFFFFFFFFFFFF0000ULL) | ||
324 | |||
325 | struct ib_cm_compare_data { | ||
326 | u8 data[IB_CM_COMPARE_SIZE]; | ||
327 | u8 mask[IB_CM_COMPARE_SIZE]; | ||
328 | }; | ||
320 | 329 | ||
321 | /** | 330 | /** |
322 | * ib_cm_listen - Initiates listening on the specified service ID for | 331 | * ib_cm_listen - Initiates listening on the specified service ID for |
@@ -330,10 +339,12 @@ void ib_destroy_cm_id(struct ib_cm_id *cm_id); | |||
330 | * range of service IDs. If set to 0, the service ID is matched | 339 | * range of service IDs. If set to 0, the service ID is matched |
331 | * exactly. This parameter is ignored if %service_id is set to | 340 | * exactly. This parameter is ignored if %service_id is set to |
332 | * IB_CM_ASSIGN_SERVICE_ID. | 341 | * IB_CM_ASSIGN_SERVICE_ID. |
342 | * @compare_data: This parameter is optional. It specifies data that must | ||
343 | * appear in the private data of a connection request for the specified | ||
344 | * listen request. | ||
333 | */ | 345 | */ |
334 | int ib_cm_listen(struct ib_cm_id *cm_id, | 346 | int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id, __be64 service_mask, |
335 | __be64 service_id, | 347 | struct ib_cm_compare_data *compare_data); |
336 | __be64 service_mask); | ||
337 | 348 | ||
338 | struct ib_cm_req_param { | 349 | struct ib_cm_req_param { |
339 | struct ib_sa_path_rec *primary_path; | 350 | struct ib_sa_path_rec *primary_path; |
@@ -535,7 +546,6 @@ struct ib_cm_sidr_req_param { | |||
535 | const void *private_data; | 546 | const void *private_data; |
536 | u8 private_data_len; | 547 | u8 private_data_len; |
537 | u8 max_cm_retries; | 548 | u8 max_cm_retries; |
538 | u16 pkey; | ||
539 | }; | 549 | }; |
540 | 550 | ||
541 | /** | 551 | /** |
@@ -559,7 +569,7 @@ struct ib_cm_sidr_rep_param { | |||
559 | }; | 569 | }; |
560 | 570 | ||
561 | /** | 571 | /** |
562 | * ib_send_cm_sidr_rep - Sends a service ID resolution request to the | 572 | * ib_send_cm_sidr_rep - Sends a service ID resolution reply to the |
563 | * remote node. | 573 | * remote node. |
564 | * @cm_id: Communication identifier associated with the received service ID | 574 | * @cm_id: Communication identifier associated with the received service ID |
565 | * resolution request. | 575 | * resolution request. |
diff --git a/include/rdma/ib_marshall.h b/include/rdma/ib_marshall.h new file mode 100644 index 000000000000..66bf4d7d0dfb --- /dev/null +++ b/include/rdma/ib_marshall.h | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This software is available to you under a choice of one of two | ||
5 | * licenses. You may choose to be licensed under the terms of the GNU | ||
6 | * General Public License (GPL) Version 2, available from the file | ||
7 | * COPYING in the main directory of this source tree, or the | ||
8 | * OpenIB.org BSD license below: | ||
9 | * | ||
10 | * Redistribution and use in source and binary forms, with or | ||
11 | * without modification, are permitted provided that the following | ||
12 | * conditions are met: | ||
13 | * | ||
14 | * - Redistributions of source code must retain the above | ||
15 | * copyright notice, this list of conditions and the following | ||
16 | * disclaimer. | ||
17 | * | ||
18 | * - Redistributions in binary form must reproduce the above | ||
19 | * copyright notice, this list of conditions and the following | ||
20 | * disclaimer in the documentation and/or other materials | ||
21 | * provided with the distribution. | ||
22 | * | ||
23 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
24 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
25 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
26 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
27 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
28 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
29 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
30 | * SOFTWARE. | ||
31 | */ | ||
32 | |||
33 | #if !defined(IB_USER_MARSHALL_H) | ||
34 | #define IB_USER_MARSHALL_H | ||
35 | |||
36 | #include <rdma/ib_verbs.h> | ||
37 | #include <rdma/ib_sa.h> | ||
38 | #include <rdma/ib_user_verbs.h> | ||
39 | #include <rdma/ib_user_sa.h> | ||
40 | |||
41 | void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst, | ||
42 | struct ib_qp_attr *src); | ||
43 | |||
44 | void ib_copy_path_rec_to_user(struct ib_user_path_rec *dst, | ||
45 | struct ib_sa_path_rec *src); | ||
46 | |||
47 | void ib_copy_path_rec_from_user(struct ib_sa_path_rec *dst, | ||
48 | struct ib_user_path_rec *src); | ||
49 | |||
50 | #endif /* IB_USER_MARSHALL_H */ | ||
diff --git a/include/rdma/ib_sa.h b/include/rdma/ib_sa.h index ad63c215efe5..c99e4420fd7e 100644 --- a/include/rdma/ib_sa.h +++ b/include/rdma/ib_sa.h | |||
@@ -370,5 +370,12 @@ ib_sa_mcmember_rec_delete(struct ib_device *device, u8 port_num, | |||
370 | context, query); | 370 | context, query); |
371 | } | 371 | } |
372 | 372 | ||
373 | /** | ||
374 | * ib_init_ah_from_path - Initialize address handle attributes based on an SA | ||
375 | * path record. | ||
376 | */ | ||
377 | int ib_init_ah_from_path(struct ib_device *device, u8 port_num, | ||
378 | struct ib_sa_path_rec *rec, | ||
379 | struct ib_ah_attr *ah_attr); | ||
373 | 380 | ||
374 | #endif /* IB_SA_H */ | 381 | #endif /* IB_SA_H */ |
diff --git a/include/rdma/ib_smi.h b/include/rdma/ib_smi.h index 87f60737f695..f29af135ba83 100644 --- a/include/rdma/ib_smi.h +++ b/include/rdma/ib_smi.h | |||
@@ -85,6 +85,42 @@ struct ib_smp { | |||
85 | #define IB_SMP_ATTR_LED_INFO __constant_htons(0x0031) | 85 | #define IB_SMP_ATTR_LED_INFO __constant_htons(0x0031) |
86 | #define IB_SMP_ATTR_VENDOR_MASK __constant_htons(0xFF00) | 86 | #define IB_SMP_ATTR_VENDOR_MASK __constant_htons(0xFF00) |
87 | 87 | ||
88 | struct ib_port_info { | ||
89 | __be64 mkey; | ||
90 | __be64 gid_prefix; | ||
91 | __be16 lid; | ||
92 | __be16 sm_lid; | ||
93 | __be32 cap_mask; | ||
94 | __be16 diag_code; | ||
95 | __be16 mkey_lease_period; | ||
96 | u8 local_port_num; | ||
97 | u8 link_width_enabled; | ||
98 | u8 link_width_supported; | ||
99 | u8 link_width_active; | ||
100 | u8 linkspeed_portstate; /* 4 bits, 4 bits */ | ||
101 | u8 portphysstate_linkdown; /* 4 bits, 4 bits */ | ||
102 | u8 mkeyprot_resv_lmc; /* 2 bits, 3, 3 */ | ||
103 | u8 linkspeedactive_enabled; /* 4 bits, 4 bits */ | ||
104 | u8 neighbormtu_mastersmsl; /* 4 bits, 4 bits */ | ||
105 | u8 vlcap_inittype; /* 4 bits, 4 bits */ | ||
106 | u8 vl_high_limit; | ||
107 | u8 vl_arb_high_cap; | ||
108 | u8 vl_arb_low_cap; | ||
109 | u8 inittypereply_mtucap; /* 4 bits, 4 bits */ | ||
110 | u8 vlstallcnt_hoqlife; /* 3 bits, 5 bits */ | ||
111 | u8 operationalvl_pei_peo_fpi_fpo; /* 4 bits, 1, 1, 1, 1 */ | ||
112 | __be16 mkey_violations; | ||
113 | __be16 pkey_violations; | ||
114 | __be16 qkey_violations; | ||
115 | u8 guid_cap; | ||
116 | u8 clientrereg_resv_subnetto; /* 1 bit, 2 bits, 5 */ | ||
117 | u8 resv_resptimevalue; /* 3 bits, 5 bits */ | ||
118 | u8 localphyerrors_overrunerrors; /* 4 bits, 4 bits */ | ||
119 | __be16 max_credit_hint; | ||
120 | u8 resv; | ||
121 | u8 link_roundtrip_latency[3]; | ||
122 | }; | ||
123 | |||
88 | static inline u8 | 124 | static inline u8 |
89 | ib_get_smp_direction(struct ib_smp *smp) | 125 | ib_get_smp_direction(struct ib_smp *smp) |
90 | { | 126 | { |
diff --git a/include/rdma/ib_user_cm.h b/include/rdma/ib_user_cm.h index 19be116047f6..066c20b7cdfb 100644 --- a/include/rdma/ib_user_cm.h +++ b/include/rdma/ib_user_cm.h | |||
@@ -30,13 +30,13 @@ | |||
30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
31 | * SOFTWARE. | 31 | * SOFTWARE. |
32 | * | 32 | * |
33 | * $Id: ib_user_cm.h 2576 2005-06-09 17:00:30Z libor $ | 33 | * $Id: ib_user_cm.h 4019 2005-11-11 00:33:09Z sean.hefty $ |
34 | */ | 34 | */ |
35 | 35 | ||
36 | #ifndef IB_USER_CM_H | 36 | #ifndef IB_USER_CM_H |
37 | #define IB_USER_CM_H | 37 | #define IB_USER_CM_H |
38 | 38 | ||
39 | #include <linux/types.h> | 39 | #include <rdma/ib_user_sa.h> |
40 | 40 | ||
41 | #define IB_USER_CM_ABI_VERSION 4 | 41 | #define IB_USER_CM_ABI_VERSION 4 |
42 | 42 | ||
@@ -110,58 +110,6 @@ struct ib_ucm_init_qp_attr { | |||
110 | __u32 qp_state; | 110 | __u32 qp_state; |
111 | }; | 111 | }; |
112 | 112 | ||
113 | struct ib_ucm_ah_attr { | ||
114 | __u8 grh_dgid[16]; | ||
115 | __u32 grh_flow_label; | ||
116 | __u16 dlid; | ||
117 | __u16 reserved; | ||
118 | __u8 grh_sgid_index; | ||
119 | __u8 grh_hop_limit; | ||
120 | __u8 grh_traffic_class; | ||
121 | __u8 sl; | ||
122 | __u8 src_path_bits; | ||
123 | __u8 static_rate; | ||
124 | __u8 is_global; | ||
125 | __u8 port_num; | ||
126 | }; | ||
127 | |||
128 | struct ib_ucm_init_qp_attr_resp { | ||
129 | __u32 qp_attr_mask; | ||
130 | __u32 qp_state; | ||
131 | __u32 cur_qp_state; | ||
132 | __u32 path_mtu; | ||
133 | __u32 path_mig_state; | ||
134 | __u32 qkey; | ||
135 | __u32 rq_psn; | ||
136 | __u32 sq_psn; | ||
137 | __u32 dest_qp_num; | ||
138 | __u32 qp_access_flags; | ||
139 | |||
140 | struct ib_ucm_ah_attr ah_attr; | ||
141 | struct ib_ucm_ah_attr alt_ah_attr; | ||
142 | |||
143 | /* ib_qp_cap */ | ||
144 | __u32 max_send_wr; | ||
145 | __u32 max_recv_wr; | ||
146 | __u32 max_send_sge; | ||
147 | __u32 max_recv_sge; | ||
148 | __u32 max_inline_data; | ||
149 | |||
150 | __u16 pkey_index; | ||
151 | __u16 alt_pkey_index; | ||
152 | __u8 en_sqd_async_notify; | ||
153 | __u8 sq_draining; | ||
154 | __u8 max_rd_atomic; | ||
155 | __u8 max_dest_rd_atomic; | ||
156 | __u8 min_rnr_timer; | ||
157 | __u8 port_num; | ||
158 | __u8 timeout; | ||
159 | __u8 retry_cnt; | ||
160 | __u8 rnr_retry; | ||
161 | __u8 alt_port_num; | ||
162 | __u8 alt_timeout; | ||
163 | }; | ||
164 | |||
165 | struct ib_ucm_listen { | 113 | struct ib_ucm_listen { |
166 | __be64 service_id; | 114 | __be64 service_id; |
167 | __be64 service_mask; | 115 | __be64 service_mask; |
@@ -180,28 +128,6 @@ struct ib_ucm_private_data { | |||
180 | __u8 reserved[3]; | 128 | __u8 reserved[3]; |
181 | }; | 129 | }; |
182 | 130 | ||
183 | struct ib_ucm_path_rec { | ||
184 | __u8 dgid[16]; | ||
185 | __u8 sgid[16]; | ||
186 | __be16 dlid; | ||
187 | __be16 slid; | ||
188 | __u32 raw_traffic; | ||
189 | __be32 flow_label; | ||
190 | __u32 reversible; | ||
191 | __u32 mtu; | ||
192 | __be16 pkey; | ||
193 | __u8 hop_limit; | ||
194 | __u8 traffic_class; | ||
195 | __u8 numb_path; | ||
196 | __u8 sl; | ||
197 | __u8 mtu_selector; | ||
198 | __u8 rate_selector; | ||
199 | __u8 rate; | ||
200 | __u8 packet_life_time_selector; | ||
201 | __u8 packet_life_time; | ||
202 | __u8 preference; | ||
203 | }; | ||
204 | |||
205 | struct ib_ucm_req { | 131 | struct ib_ucm_req { |
206 | __u32 id; | 132 | __u32 id; |
207 | __u32 qpn; | 133 | __u32 qpn; |
@@ -274,7 +200,7 @@ struct ib_ucm_sidr_req { | |||
274 | __be64 sid; | 200 | __be64 sid; |
275 | __u64 data; | 201 | __u64 data; |
276 | __u64 path; | 202 | __u64 path; |
277 | __u16 pkey; | 203 | __u16 reserved_pkey; |
278 | __u8 len; | 204 | __u8 len; |
279 | __u8 max_cm_retries; | 205 | __u8 max_cm_retries; |
280 | __u8 reserved[4]; | 206 | __u8 reserved[4]; |
@@ -304,8 +230,8 @@ struct ib_ucm_event_get { | |||
304 | }; | 230 | }; |
305 | 231 | ||
306 | struct ib_ucm_req_event_resp { | 232 | struct ib_ucm_req_event_resp { |
307 | struct ib_ucm_path_rec primary_path; | 233 | struct ib_user_path_rec primary_path; |
308 | struct ib_ucm_path_rec alternate_path; | 234 | struct ib_user_path_rec alternate_path; |
309 | __be64 remote_ca_guid; | 235 | __be64 remote_ca_guid; |
310 | __u32 remote_qkey; | 236 | __u32 remote_qkey; |
311 | __u32 remote_qpn; | 237 | __u32 remote_qpn; |
@@ -349,7 +275,7 @@ struct ib_ucm_mra_event_resp { | |||
349 | }; | 275 | }; |
350 | 276 | ||
351 | struct ib_ucm_lap_event_resp { | 277 | struct ib_ucm_lap_event_resp { |
352 | struct ib_ucm_path_rec path; | 278 | struct ib_user_path_rec path; |
353 | }; | 279 | }; |
354 | 280 | ||
355 | struct ib_ucm_apr_event_resp { | 281 | struct ib_ucm_apr_event_resp { |
diff --git a/include/rdma/ib_user_sa.h b/include/rdma/ib_user_sa.h new file mode 100644 index 000000000000..659120157e14 --- /dev/null +++ b/include/rdma/ib_user_sa.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This software is available to you under a choice of one of two | ||
5 | * licenses. You may choose to be licensed under the terms of the GNU | ||
6 | * General Public License (GPL) Version 2, available from the file | ||
7 | * COPYING in the main directory of this source tree, or the | ||
8 | * OpenIB.org BSD license below: | ||
9 | * | ||
10 | * Redistribution and use in source and binary forms, with or | ||
11 | * without modification, are permitted provided that the following | ||
12 | * conditions are met: | ||
13 | * | ||
14 | * - Redistributions of source code must retain the above | ||
15 | * copyright notice, this list of conditions and the following | ||
16 | * disclaimer. | ||
17 | * | ||
18 | * - Redistributions in binary form must reproduce the above | ||
19 | * copyright notice, this list of conditions and the following | ||
20 | * disclaimer in the documentation and/or other materials | ||
21 | * provided with the distribution. | ||
22 | * | ||
23 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
24 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
25 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
26 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
27 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
28 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
29 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
30 | * SOFTWARE. | ||
31 | */ | ||
32 | |||
33 | #ifndef IB_USER_SA_H | ||
34 | #define IB_USER_SA_H | ||
35 | |||
36 | #include <linux/types.h> | ||
37 | |||
38 | struct ib_user_path_rec { | ||
39 | __u8 dgid[16]; | ||
40 | __u8 sgid[16]; | ||
41 | __be16 dlid; | ||
42 | __be16 slid; | ||
43 | __u32 raw_traffic; | ||
44 | __be32 flow_label; | ||
45 | __u32 reversible; | ||
46 | __u32 mtu; | ||
47 | __be16 pkey; | ||
48 | __u8 hop_limit; | ||
49 | __u8 traffic_class; | ||
50 | __u8 numb_path; | ||
51 | __u8 sl; | ||
52 | __u8 mtu_selector; | ||
53 | __u8 rate_selector; | ||
54 | __u8 rate; | ||
55 | __u8 packet_life_time_selector; | ||
56 | __u8 packet_life_time; | ||
57 | __u8 preference; | ||
58 | }; | ||
59 | |||
60 | #endif /* IB_USER_SA_H */ | ||
diff --git a/include/rdma/ib_user_verbs.h b/include/rdma/ib_user_verbs.h index 338ed4333063..7b5372010f4b 100644 --- a/include/rdma/ib_user_verbs.h +++ b/include/rdma/ib_user_verbs.h | |||
@@ -32,7 +32,7 @@ | |||
32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
33 | * SOFTWARE. | 33 | * SOFTWARE. |
34 | * | 34 | * |
35 | * $Id: ib_user_verbs.h 2708 2005-06-24 17:27:21Z roland $ | 35 | * $Id: ib_user_verbs.h 4019 2005-11-11 00:33:09Z sean.hefty $ |
36 | */ | 36 | */ |
37 | 37 | ||
38 | #ifndef IB_USER_VERBS_H | 38 | #ifndef IB_USER_VERBS_H |
@@ -323,6 +323,64 @@ struct ib_uverbs_destroy_cq_resp { | |||
323 | __u32 async_events_reported; | 323 | __u32 async_events_reported; |
324 | }; | 324 | }; |
325 | 325 | ||
326 | struct ib_uverbs_global_route { | ||
327 | __u8 dgid[16]; | ||
328 | __u32 flow_label; | ||
329 | __u8 sgid_index; | ||
330 | __u8 hop_limit; | ||
331 | __u8 traffic_class; | ||
332 | __u8 reserved; | ||
333 | }; | ||
334 | |||
335 | struct ib_uverbs_ah_attr { | ||
336 | struct ib_uverbs_global_route grh; | ||
337 | __u16 dlid; | ||
338 | __u8 sl; | ||
339 | __u8 src_path_bits; | ||
340 | __u8 static_rate; | ||
341 | __u8 is_global; | ||
342 | __u8 port_num; | ||
343 | __u8 reserved; | ||
344 | }; | ||
345 | |||
346 | struct ib_uverbs_qp_attr { | ||
347 | __u32 qp_attr_mask; | ||
348 | __u32 qp_state; | ||
349 | __u32 cur_qp_state; | ||
350 | __u32 path_mtu; | ||
351 | __u32 path_mig_state; | ||
352 | __u32 qkey; | ||
353 | __u32 rq_psn; | ||
354 | __u32 sq_psn; | ||
355 | __u32 dest_qp_num; | ||
356 | __u32 qp_access_flags; | ||
357 | |||
358 | struct ib_uverbs_ah_attr ah_attr; | ||
359 | struct ib_uverbs_ah_attr alt_ah_attr; | ||
360 | |||
361 | /* ib_qp_cap */ | ||
362 | __u32 max_send_wr; | ||
363 | __u32 max_recv_wr; | ||
364 | __u32 max_send_sge; | ||
365 | __u32 max_recv_sge; | ||
366 | __u32 max_inline_data; | ||
367 | |||
368 | __u16 pkey_index; | ||
369 | __u16 alt_pkey_index; | ||
370 | __u8 en_sqd_async_notify; | ||
371 | __u8 sq_draining; | ||
372 | __u8 max_rd_atomic; | ||
373 | __u8 max_dest_rd_atomic; | ||
374 | __u8 min_rnr_timer; | ||
375 | __u8 port_num; | ||
376 | __u8 timeout; | ||
377 | __u8 retry_cnt; | ||
378 | __u8 rnr_retry; | ||
379 | __u8 alt_port_num; | ||
380 | __u8 alt_timeout; | ||
381 | __u8 reserved[5]; | ||
382 | }; | ||
383 | |||
326 | struct ib_uverbs_create_qp { | 384 | struct ib_uverbs_create_qp { |
327 | __u64 response; | 385 | __u64 response; |
328 | __u64 user_handle; | 386 | __u64 user_handle; |
@@ -541,26 +599,6 @@ struct ib_uverbs_post_srq_recv_resp { | |||
541 | __u32 bad_wr; | 599 | __u32 bad_wr; |
542 | }; | 600 | }; |
543 | 601 | ||
544 | struct ib_uverbs_global_route { | ||
545 | __u8 dgid[16]; | ||
546 | __u32 flow_label; | ||
547 | __u8 sgid_index; | ||
548 | __u8 hop_limit; | ||
549 | __u8 traffic_class; | ||
550 | __u8 reserved; | ||
551 | }; | ||
552 | |||
553 | struct ib_uverbs_ah_attr { | ||
554 | struct ib_uverbs_global_route grh; | ||
555 | __u16 dlid; | ||
556 | __u8 sl; | ||
557 | __u8 src_path_bits; | ||
558 | __u8 static_rate; | ||
559 | __u8 is_global; | ||
560 | __u8 port_num; | ||
561 | __u8 reserved; | ||
562 | }; | ||
563 | |||
564 | struct ib_uverbs_create_ah { | 602 | struct ib_uverbs_create_ah { |
565 | __u64 response; | 603 | __u64 response; |
566 | __u64 user_handle; | 604 | __u64 user_handle; |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 6bbf1b364400..ee1f3a355666 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -260,7 +260,8 @@ enum ib_event_type { | |||
260 | IB_EVENT_SM_CHANGE, | 260 | IB_EVENT_SM_CHANGE, |
261 | IB_EVENT_SRQ_ERR, | 261 | IB_EVENT_SRQ_ERR, |
262 | IB_EVENT_SRQ_LIMIT_REACHED, | 262 | IB_EVENT_SRQ_LIMIT_REACHED, |
263 | IB_EVENT_QP_LAST_WQE_REACHED | 263 | IB_EVENT_QP_LAST_WQE_REACHED, |
264 | IB_EVENT_CLIENT_REREGISTER | ||
264 | }; | 265 | }; |
265 | 266 | ||
266 | struct ib_event { | 267 | struct ib_event { |
@@ -696,8 +697,12 @@ struct ib_ucontext { | |||
696 | struct ib_uobject { | 697 | struct ib_uobject { |
697 | u64 user_handle; /* handle given to us by userspace */ | 698 | u64 user_handle; /* handle given to us by userspace */ |
698 | struct ib_ucontext *context; /* associated user context */ | 699 | struct ib_ucontext *context; /* associated user context */ |
700 | void *object; /* containing object */ | ||
699 | struct list_head list; /* link to context's list */ | 701 | struct list_head list; /* link to context's list */ |
700 | u32 id; /* index into kernel idr */ | 702 | u32 id; /* index into kernel idr */ |
703 | struct kref ref; | ||
704 | struct rw_semaphore mutex; /* protects .live */ | ||
705 | int live; | ||
701 | }; | 706 | }; |
702 | 707 | ||
703 | struct ib_umem { | 708 | struct ib_umem { |
@@ -827,6 +832,7 @@ struct ib_cache { | |||
827 | struct ib_event_handler event_handler; | 832 | struct ib_event_handler event_handler; |
828 | struct ib_pkey_cache **pkey_cache; | 833 | struct ib_pkey_cache **pkey_cache; |
829 | struct ib_gid_cache **gid_cache; | 834 | struct ib_gid_cache **gid_cache; |
835 | u8 *lmc_cache; | ||
830 | }; | 836 | }; |
831 | 837 | ||
832 | struct ib_device { | 838 | struct ib_device { |
@@ -1086,6 +1092,20 @@ int ib_dealloc_pd(struct ib_pd *pd); | |||
1086 | struct ib_ah *ib_create_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr); | 1092 | struct ib_ah *ib_create_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr); |
1087 | 1093 | ||
1088 | /** | 1094 | /** |
1095 | * ib_init_ah_from_wc - Initializes address handle attributes from a | ||
1096 | * work completion. | ||
1097 | * @device: Device on which the received message arrived. | ||
1098 | * @port_num: Port on which the received message arrived. | ||
1099 | * @wc: Work completion associated with the received message. | ||
1100 | * @grh: References the received global route header. This parameter is | ||
1101 | * ignored unless the work completion indicates that the GRH is valid. | ||
1102 | * @ah_attr: Returned attributes that can be used when creating an address | ||
1103 | * handle for replying to the message. | ||
1104 | */ | ||
1105 | int ib_init_ah_from_wc(struct ib_device *device, u8 port_num, struct ib_wc *wc, | ||
1106 | struct ib_grh *grh, struct ib_ah_attr *ah_attr); | ||
1107 | |||
1108 | /** | ||
1089 | * ib_create_ah_from_wc - Creates an address handle associated with the | 1109 | * ib_create_ah_from_wc - Creates an address handle associated with the |
1090 | * sender of the specified work completion. | 1110 | * sender of the specified work completion. |
1091 | * @pd: The protection domain associated with the address handle. | 1111 | * @pd: The protection domain associated with the address handle. |
diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h new file mode 100644 index 000000000000..402c63d7226b --- /dev/null +++ b/include/rdma/rdma_cm.h | |||
@@ -0,0 +1,256 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005 Voltaire Inc. All rights reserved. | ||
3 | * Copyright (c) 2005 Intel Corporation. All rights reserved. | ||
4 | * | ||
5 | * This Software is licensed under one of the following licenses: | ||
6 | * | ||
7 | * 1) under the terms of the "Common Public License 1.0" a copy of which is | ||
8 | * available from the Open Source Initiative, see | ||
9 | * http://www.opensource.org/licenses/cpl.php. | ||
10 | * | ||
11 | * 2) under the terms of the "The BSD License" a copy of which is | ||
12 | * available from the Open Source Initiative, see | ||
13 | * http://www.opensource.org/licenses/bsd-license.php. | ||
14 | * | ||
15 | * 3) under the terms of the "GNU General Public License (GPL) Version 2" a | ||
16 | * copy of which is available from the Open Source Initiative, see | ||
17 | * http://www.opensource.org/licenses/gpl-license.php. | ||
18 | * | ||
19 | * Licensee has the right to choose one of the above licenses. | ||
20 | * | ||
21 | * Redistributions of source code must retain the above copyright | ||
22 | * notice and one of the license notices. | ||
23 | * | ||
24 | * Redistributions in binary form must reproduce both the above copyright | ||
25 | * notice, one of the license notices in the documentation | ||
26 | * and/or other materials provided with the distribution. | ||
27 | * | ||
28 | */ | ||
29 | |||
30 | #if !defined(RDMA_CM_H) | ||
31 | #define RDMA_CM_H | ||
32 | |||
33 | #include <linux/socket.h> | ||
34 | #include <linux/in6.h> | ||
35 | #include <rdma/ib_addr.h> | ||
36 | #include <rdma/ib_sa.h> | ||
37 | |||
38 | /* | ||
39 | * Upon receiving a device removal event, users must destroy the associated | ||
40 | * RDMA identifier and release all resources allocated with the device. | ||
41 | */ | ||
42 | enum rdma_cm_event_type { | ||
43 | RDMA_CM_EVENT_ADDR_RESOLVED, | ||
44 | RDMA_CM_EVENT_ADDR_ERROR, | ||
45 | RDMA_CM_EVENT_ROUTE_RESOLVED, | ||
46 | RDMA_CM_EVENT_ROUTE_ERROR, | ||
47 | RDMA_CM_EVENT_CONNECT_REQUEST, | ||
48 | RDMA_CM_EVENT_CONNECT_RESPONSE, | ||
49 | RDMA_CM_EVENT_CONNECT_ERROR, | ||
50 | RDMA_CM_EVENT_UNREACHABLE, | ||
51 | RDMA_CM_EVENT_REJECTED, | ||
52 | RDMA_CM_EVENT_ESTABLISHED, | ||
53 | RDMA_CM_EVENT_DISCONNECTED, | ||
54 | RDMA_CM_EVENT_DEVICE_REMOVAL, | ||
55 | }; | ||
56 | |||
57 | enum rdma_port_space { | ||
58 | RDMA_PS_SDP = 0x0001, | ||
59 | RDMA_PS_TCP = 0x0106, | ||
60 | RDMA_PS_UDP = 0x0111, | ||
61 | RDMA_PS_SCTP = 0x0183 | ||
62 | }; | ||
63 | |||
64 | struct rdma_addr { | ||
65 | struct sockaddr src_addr; | ||
66 | u8 src_pad[sizeof(struct sockaddr_in6) - | ||
67 | sizeof(struct sockaddr)]; | ||
68 | struct sockaddr dst_addr; | ||
69 | u8 dst_pad[sizeof(struct sockaddr_in6) - | ||
70 | sizeof(struct sockaddr)]; | ||
71 | struct rdma_dev_addr dev_addr; | ||
72 | }; | ||
73 | |||
74 | struct rdma_route { | ||
75 | struct rdma_addr addr; | ||
76 | struct ib_sa_path_rec *path_rec; | ||
77 | int num_paths; | ||
78 | }; | ||
79 | |||
80 | struct rdma_cm_event { | ||
81 | enum rdma_cm_event_type event; | ||
82 | int status; | ||
83 | void *private_data; | ||
84 | u8 private_data_len; | ||
85 | }; | ||
86 | |||
87 | struct rdma_cm_id; | ||
88 | |||
89 | /** | ||
90 | * rdma_cm_event_handler - Callback used to report user events. | ||
91 | * | ||
92 | * Notes: Users may not call rdma_destroy_id from this callback to destroy | ||
93 | * the passed in id, or a corresponding listen id. Returning a | ||
94 | * non-zero value from the callback will destroy the passed in id. | ||
95 | */ | ||
96 | typedef int (*rdma_cm_event_handler)(struct rdma_cm_id *id, | ||
97 | struct rdma_cm_event *event); | ||
98 | |||
99 | struct rdma_cm_id { | ||
100 | struct ib_device *device; | ||
101 | void *context; | ||
102 | struct ib_qp *qp; | ||
103 | rdma_cm_event_handler event_handler; | ||
104 | struct rdma_route route; | ||
105 | enum rdma_port_space ps; | ||
106 | u8 port_num; | ||
107 | }; | ||
108 | |||
109 | /** | ||
110 | * rdma_create_id - Create an RDMA identifier. | ||
111 | * | ||
112 | * @event_handler: User callback invoked to report events associated with the | ||
113 | * returned rdma_id. | ||
114 | * @context: User specified context associated with the id. | ||
115 | * @ps: RDMA port space. | ||
116 | */ | ||
117 | struct rdma_cm_id *rdma_create_id(rdma_cm_event_handler event_handler, | ||
118 | void *context, enum rdma_port_space ps); | ||
119 | |||
120 | void rdma_destroy_id(struct rdma_cm_id *id); | ||
121 | |||
122 | /** | ||
123 | * rdma_bind_addr - Bind an RDMA identifier to a source address and | ||
124 | * associated RDMA device, if needed. | ||
125 | * | ||
126 | * @id: RDMA identifier. | ||
127 | * @addr: Local address information. Wildcard values are permitted. | ||
128 | * | ||
129 | * This associates a source address with the RDMA identifier before calling | ||
130 | * rdma_listen. If a specific local address is given, the RDMA identifier will | ||
131 | * be bound to a local RDMA device. | ||
132 | */ | ||
133 | int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr); | ||
134 | |||
135 | /** | ||
136 | * rdma_resolve_addr - Resolve destination and optional source addresses | ||
137 | * from IP addresses to an RDMA address. If successful, the specified | ||
138 | * rdma_cm_id will be bound to a local device. | ||
139 | * | ||
140 | * @id: RDMA identifier. | ||
141 | * @src_addr: Source address information. This parameter may be NULL. | ||
142 | * @dst_addr: Destination address information. | ||
143 | * @timeout_ms: Time to wait for resolution to complete. | ||
144 | */ | ||
145 | int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr, | ||
146 | struct sockaddr *dst_addr, int timeout_ms); | ||
147 | |||
148 | /** | ||
149 | * rdma_resolve_route - Resolve the RDMA address bound to the RDMA identifier | ||
150 | * into route information needed to establish a connection. | ||
151 | * | ||
152 | * This is called on the client side of a connection. | ||
153 | * Users must have first called rdma_resolve_addr to resolve a dst_addr | ||
154 | * into an RDMA address before calling this routine. | ||
155 | */ | ||
156 | int rdma_resolve_route(struct rdma_cm_id *id, int timeout_ms); | ||
157 | |||
158 | /** | ||
159 | * rdma_create_qp - Allocate a QP and associate it with the specified RDMA | ||
160 | * identifier. | ||
161 | * | ||
162 | * QPs allocated to an rdma_cm_id will automatically be transitioned by the CMA | ||
163 | * through their states. | ||
164 | */ | ||
165 | int rdma_create_qp(struct rdma_cm_id *id, struct ib_pd *pd, | ||
166 | struct ib_qp_init_attr *qp_init_attr); | ||
167 | |||
168 | /** | ||
169 | * rdma_destroy_qp - Deallocate the QP associated with the specified RDMA | ||
170 | * identifier. | ||
171 | * | ||
172 | * Users must destroy any QP associated with an RDMA identifier before | ||
173 | * destroying the RDMA ID. | ||
174 | */ | ||
175 | void rdma_destroy_qp(struct rdma_cm_id *id); | ||
176 | |||
177 | /** | ||
178 | * rdma_init_qp_attr - Initializes the QP attributes for use in transitioning | ||
179 | * to a specified QP state. | ||
180 | * @id: Communication identifier associated with the QP attributes to | ||
181 | * initialize. | ||
182 | * @qp_attr: On input, specifies the desired QP state. On output, the | ||
183 | * mandatory and desired optional attributes will be set in order to | ||
184 | * modify the QP to the specified state. | ||
185 | * @qp_attr_mask: The QP attribute mask that may be used to transition the | ||
186 | * QP to the specified state. | ||
187 | * | ||
188 | * Users must set the @qp_attr->qp_state to the desired QP state. This call | ||
189 | * will set all required attributes for the given transition, along with | ||
190 | * known optional attributes. Users may override the attributes returned from | ||
191 | * this call before calling ib_modify_qp. | ||
192 | * | ||
193 | * Users that wish to have their QP automatically transitioned through its | ||
194 | * states can associate a QP with the rdma_cm_id by calling rdma_create_qp(). | ||
195 | */ | ||
196 | int rdma_init_qp_attr(struct rdma_cm_id *id, struct ib_qp_attr *qp_attr, | ||
197 | int *qp_attr_mask); | ||
198 | |||
199 | struct rdma_conn_param { | ||
200 | const void *private_data; | ||
201 | u8 private_data_len; | ||
202 | u8 responder_resources; | ||
203 | u8 initiator_depth; | ||
204 | u8 flow_control; | ||
205 | u8 retry_count; /* ignored when accepting */ | ||
206 | u8 rnr_retry_count; | ||
207 | /* Fields below ignored if a QP is created on the rdma_cm_id. */ | ||
208 | u8 srq; | ||
209 | u32 qp_num; | ||
210 | enum ib_qp_type qp_type; | ||
211 | }; | ||
212 | |||
213 | /** | ||
214 | * rdma_connect - Initiate an active connection request. | ||
215 | * | ||
216 | * Users must have resolved a route for the rdma_cm_id to connect with | ||
217 | * by having called rdma_resolve_route before calling this routine. | ||
218 | */ | ||
219 | int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param); | ||
220 | |||
221 | /** | ||
222 | * rdma_listen - This function is called by the passive side to | ||
223 | * listen for incoming connection requests. | ||
224 | * | ||
225 | * Users must have bound the rdma_cm_id to a local address by calling | ||
226 | * rdma_bind_addr before calling this routine. | ||
227 | */ | ||
228 | int rdma_listen(struct rdma_cm_id *id, int backlog); | ||
229 | |||
230 | /** | ||
231 | * rdma_accept - Called to accept a connection request or response. | ||
232 | * @id: Connection identifier associated with the request. | ||
233 | * @conn_param: Information needed to establish the connection. This must be | ||
234 | * provided if accepting a connection request. If accepting a connection | ||
235 | * response, this parameter must be NULL. | ||
236 | * | ||
237 | * Typically, this routine is only called by the listener to accept a connection | ||
238 | * request. It must also be called on the active side of a connection if the | ||
239 | * user is performing their own QP transitions. | ||
240 | */ | ||
241 | int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param); | ||
242 | |||
243 | /** | ||
244 | * rdma_reject - Called to reject a connection request or response. | ||
245 | */ | ||
246 | int rdma_reject(struct rdma_cm_id *id, const void *private_data, | ||
247 | u8 private_data_len); | ||
248 | |||
249 | /** | ||
250 | * rdma_disconnect - This function disconnects the associated QP and | ||
251 | * transitions it into the error state. | ||
252 | */ | ||
253 | int rdma_disconnect(struct rdma_cm_id *id); | ||
254 | |||
255 | #endif /* RDMA_CM_H */ | ||
256 | |||
diff --git a/include/rdma/rdma_cm_ib.h b/include/rdma/rdma_cm_ib.h new file mode 100644 index 000000000000..e8c3af1804d4 --- /dev/null +++ b/include/rdma/rdma_cm_ib.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2006 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This Software is licensed under one of the following licenses: | ||
5 | * | ||
6 | * 1) under the terms of the "Common Public License 1.0" a copy of which is | ||
7 | * available from the Open Source Initiative, see | ||
8 | * http://www.opensource.org/licenses/cpl.php. | ||
9 | * | ||
10 | * 2) under the terms of the "The BSD License" a copy of which is | ||
11 | * available from the Open Source Initiative, see | ||
12 | * http://www.opensource.org/licenses/bsd-license.php. | ||
13 | * | ||
14 | * 3) under the terms of the "GNU General Public License (GPL) Version 2" a | ||
15 | * copy of which is available from the Open Source Initiative, see | ||
16 | * http://www.opensource.org/licenses/gpl-license.php. | ||
17 | * | ||
18 | * Licensee has the right to choose one of the above licenses. | ||
19 | * | ||
20 | * Redistributions of source code must retain the above copyright | ||
21 | * notice and one of the license notices. | ||
22 | * | ||
23 | * Redistributions in binary form must reproduce both the above copyright | ||
24 | * notice, one of the license notices in the documentation | ||
25 | * and/or other materials provided with the distribution. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | #if !defined(RDMA_CM_IB_H) | ||
30 | #define RDMA_CM_IB_H | ||
31 | |||
32 | #include <rdma/rdma_cm.h> | ||
33 | |||
34 | /** | ||
35 | * rdma_set_ib_paths - Manually sets the path records used to establish a | ||
36 | * connection. | ||
37 | * @id: Connection identifier associated with the request. | ||
38 | * @path_rec: Reference to the path record | ||
39 | * | ||
40 | * This call permits a user to specify routing information for rdma_cm_id's | ||
41 | * bound to Infiniband devices. It is called on the client side of a | ||
42 | * connection and replaces the call to rdma_resolve_route. | ||
43 | */ | ||
44 | int rdma_set_ib_paths(struct rdma_cm_id *id, | ||
45 | struct ib_sa_path_rec *path_rec, int num_paths); | ||
46 | |||
47 | #endif /* RDMA_CM_IB_H */ | ||