1 | /* |
2 | * Copyright (c) 2005 Voltaire Inc. All rights reserved. |
3 | * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved. |
4 | * Copyright (c) 1999-2005, Mellanox Technologies, Inc. All rights reserved. |
5 | * Copyright (c) 2005-2006 Intel Corporation. All rights reserved. |
6 | * |
7 | * This software is available to you under a choice of one of two |
8 | * licenses. You may choose to be licensed under the terms of the GNU |
9 | * General Public License (GPL) Version 2, available from the file |
10 | * COPYING in the main directory of this source tree, or the |
11 | * OpenIB.org BSD license below: |
12 | * |
13 | * Redistribution and use in source and binary forms, with or |
14 | * without modification, are permitted provided that the following |
15 | * conditions are met: |
16 | * |
17 | * - Redistributions of source code must retain the above |
18 | * copyright notice, this list of conditions and the following |
19 | * disclaimer. |
20 | * |
21 | * - Redistributions in binary form must reproduce the above |
22 | * copyright notice, this list of conditions and the following |
23 | * disclaimer in the documentation and/or other materials |
24 | * provided with the distribution. |
25 | * |
26 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
27 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
28 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
29 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
30 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
31 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
32 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
33 | * SOFTWARE. |
34 | */ |
35 | |
36 | #ifndef _CMA_PRIV_H |
37 | #define _CMA_PRIV_H |
38 | |
39 | enum rdma_cm_state { |
40 | RDMA_CM_IDLE, |
41 | RDMA_CM_ADDR_QUERY, |
42 | RDMA_CM_ADDR_RESOLVED, |
43 | RDMA_CM_ROUTE_QUERY, |
44 | RDMA_CM_ROUTE_RESOLVED, |
45 | RDMA_CM_CONNECT, |
46 | RDMA_CM_DISCONNECT, |
47 | RDMA_CM_ADDR_BOUND, |
48 | RDMA_CM_LISTEN, |
49 | RDMA_CM_DEVICE_REMOVAL, |
50 | RDMA_CM_DESTROYING |
51 | }; |
52 | |
53 | struct rdma_id_private { |
54 | struct rdma_cm_id id; |
55 | |
56 | struct rdma_bind_list *bind_list; |
57 | struct hlist_node node; |
58 | union { |
59 | struct list_head device_item; /* On cma_device->id_list */ |
60 | struct list_head listen_any_item; /* On listen_any_list */ |
61 | }; |
62 | union { |
63 | /* On rdma_id_private->listen_list */ |
64 | struct list_head listen_item; |
65 | struct list_head listen_list; |
66 | }; |
67 | struct list_head id_list_entry; |
68 | struct cma_device *cma_dev; |
69 | struct list_head mc_list; |
70 | |
71 | int internal_id; |
72 | enum rdma_cm_state state; |
73 | spinlock_t lock; |
74 | struct mutex qp_mutex; |
75 | |
76 | struct completion comp; |
77 | refcount_t refcount; |
78 | struct mutex handler_mutex; |
79 | |
80 | int backlog; |
81 | int timeout_ms; |
82 | struct ib_sa_query *query; |
83 | int query_id; |
84 | union { |
85 | struct ib_cm_id *ib; |
86 | struct iw_cm_id *iw; |
87 | } cm_id; |
88 | |
89 | u32 seq_num; |
90 | u32 qkey; |
91 | u32 qp_num; |
92 | u32 options; |
93 | u8 srq; |
94 | u8 tos; |
95 | u8 tos_set:1; |
96 | u8 timeout_set:1; |
97 | u8 min_rnr_timer_set:1; |
98 | u8 reuseaddr; |
99 | u8 afonly; |
100 | u8 timeout; |
101 | u8 min_rnr_timer; |
102 | u8 used_resolve_ip; |
103 | enum ib_gid_type gid_type; |
104 | |
105 | /* |
106 | * Internal to RDMA/core, don't use in the drivers |
107 | */ |
108 | struct rdma_restrack_entry res; |
109 | struct rdma_ucm_ece ece; |
110 | }; |
111 | |
112 | #if IS_ENABLED(CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS) |
113 | int cma_configfs_init(void); |
114 | void cma_configfs_exit(void); |
115 | #else |
116 | static inline int cma_configfs_init(void) |
117 | { |
118 | return 0; |
119 | } |
120 | |
121 | static inline void cma_configfs_exit(void) |
122 | { |
123 | } |
124 | #endif |
125 | |
126 | void cma_dev_get(struct cma_device *dev); |
127 | void cma_dev_put(struct cma_device *dev); |
128 | typedef bool (*cma_device_filter)(struct ib_device *, void *); |
129 | struct cma_device *cma_enum_devices_by_ibdev(cma_device_filter filter, |
130 | void *cookie); |
131 | int cma_get_default_gid_type(struct cma_device *dev, u32 port); |
132 | int cma_set_default_gid_type(struct cma_device *dev, u32 port, |
133 | enum ib_gid_type default_gid_type); |
134 | int cma_get_default_roce_tos(struct cma_device *dev, u32 port); |
135 | int cma_set_default_roce_tos(struct cma_device *dev, u32 port, |
136 | u8 default_roce_tos); |
137 | struct ib_device *cma_get_ib_dev(struct cma_device *dev); |
138 | |
139 | #endif /* _CMA_PRIV_H */ |
140 | |