]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/infiniband/core/core_priv.h
RDMA/netlink: Remove netlink clients infrastructure
[mirror_ubuntu-bionic-kernel.git] / drivers / infiniband / core / core_priv.h
CommitLineData
1da177e4
LT
1/*
2 * Copyright (c) 2004 Topspin Communications. 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.
1da177e4
LT
31 */
32
33#ifndef _CORE_PRIV_H
34#define _CORE_PRIV_H
35
36#include <linux/list.h>
37#include <linux/spinlock.h>
43579b5f 38#include <linux/cgroup_rdma.h>
1da177e4 39
a4d61e84 40#include <rdma/ib_verbs.h>
47a2b338
DJ
41#include <rdma/ib_mad.h>
42#include "mad_priv.h"
1da177e4 43
d291f1a6
DJ
44struct pkey_index_qp_list {
45 struct list_head pkey_index_list;
46 u16 pkey_index;
47 /* Lock to hold while iterating the qp_list. */
48 spinlock_t qp_list_lock;
49 struct list_head qp_list;
50};
1da177e4 51
045959db
MB
52#if IS_ENABLED(CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS)
53int cma_configfs_init(void);
54void cma_configfs_exit(void);
55#else
56static inline int cma_configfs_init(void)
57{
58 return 0;
59}
60
61static inline void cma_configfs_exit(void)
62{
63}
64#endif
218a773f
MB
65struct cma_device;
66void cma_ref_dev(struct cma_device *cma_dev);
67void cma_deref_dev(struct cma_device *cma_dev);
045959db
MB
68typedef bool (*cma_device_filter)(struct ib_device *, void *);
69struct cma_device *cma_enum_devices_by_ibdev(cma_device_filter filter,
70 void *cookie);
71int cma_get_default_gid_type(struct cma_device *cma_dev,
72 unsigned int port);
73int cma_set_default_gid_type(struct cma_device *cma_dev,
74 unsigned int port,
75 enum ib_gid_type default_gid_type);
89052d78
MD
76int cma_get_default_roce_tos(struct cma_device *cma_dev, unsigned int port);
77int cma_set_default_roce_tos(struct cma_device *a_dev, unsigned int port,
78 u8 default_roce_tos);
045959db 79struct ib_device *cma_get_ib_dev(struct cma_device *cma_dev);
218a773f 80
9a6edb60
RC
81int ib_device_register_sysfs(struct ib_device *device,
82 int (*port_callback)(struct ib_device *,
83 u8, struct kobject *));
1da177e4
LT
84void ib_device_unregister_sysfs(struct ib_device *device);
85
03db3a2d 86void ib_cache_setup(void);
1da177e4
LT
87void ib_cache_cleanup(void);
88
03db3a2d
MB
89typedef void (*roce_netdev_callback)(struct ib_device *device, u8 port,
90 struct net_device *idev, void *cookie);
91
92typedef int (*roce_netdev_filter)(struct ib_device *device, u8 port,
93 struct net_device *idev, void *cookie);
94
95void ib_enum_roce_netdev(struct ib_device *ib_dev,
96 roce_netdev_filter filter,
97 void *filter_cookie,
98 roce_netdev_callback cb,
99 void *cookie);
100void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
101 void *filter_cookie,
102 roce_netdev_callback cb,
103 void *cookie);
104
03db3a2d
MB
105enum ib_cache_gid_default_mode {
106 IB_CACHE_GID_DEFAULT_MODE_SET,
107 IB_CACHE_GID_DEFAULT_MODE_DELETE
108};
109
045959db
MB
110int ib_cache_gid_parse_type_str(const char *buf);
111
b39ffa1d
MB
112const char *ib_cache_gid_type_str(enum ib_gid_type gid_type);
113
03db3a2d
MB
114void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port,
115 struct net_device *ndev,
b39ffa1d 116 unsigned long gid_type_mask,
03db3a2d
MB
117 enum ib_cache_gid_default_mode mode);
118
119int ib_cache_gid_add(struct ib_device *ib_dev, u8 port,
120 union ib_gid *gid, struct ib_gid_attr *attr);
121
122int ib_cache_gid_del(struct ib_device *ib_dev, u8 port,
123 union ib_gid *gid, struct ib_gid_attr *attr);
124
125int ib_cache_gid_del_all_netdev_gids(struct ib_device *ib_dev, u8 port,
126 struct net_device *ndev);
127
128int roce_gid_mgmt_init(void);
129void roce_gid_mgmt_cleanup(void);
130
131int roce_rescan_device(struct ib_device *ib_dev);
b39ffa1d 132unsigned long roce_gid_type_mask_support(struct ib_device *ib_dev, u8 port);
03db3a2d
MB
133
134int ib_cache_setup_one(struct ib_device *device);
135void ib_cache_cleanup_one(struct ib_device *device);
136void ib_cache_release_one(struct ib_device *device);
137
43579b5f
PP
138#ifdef CONFIG_CGROUP_RDMA
139int ib_device_register_rdmacg(struct ib_device *device);
140void ib_device_unregister_rdmacg(struct ib_device *device);
141
142int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
143 struct ib_device *device,
144 enum rdmacg_resource_type resource_index);
145
146void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
147 struct ib_device *device,
148 enum rdmacg_resource_type resource_index);
149#else
150static inline int ib_device_register_rdmacg(struct ib_device *device)
151{ return 0; }
152
153static inline void ib_device_unregister_rdmacg(struct ib_device *device)
154{ }
155
156static inline int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
157 struct ib_device *device,
158 enum rdmacg_resource_type resource_index)
159{ return 0; }
160
161static inline void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
162 struct ib_device *device,
163 enum rdmacg_resource_type resource_index)
164{ }
165#endif
166
6020d7e5
MB
167static inline bool rdma_is_upper_dev_rcu(struct net_device *dev,
168 struct net_device *upper)
169{
453d3932 170 return netdev_has_upper_dev_all_rcu(dev, upper);
6020d7e5
MB
171}
172
e3f20f02
LR
173int addr_init(void);
174void addr_cleanup(void);
175
4c2cb422
MB
176int ib_mad_init(void);
177void ib_mad_cleanup(void);
178
c2e49c92
MB
179int ib_sa_init(void);
180void ib_sa_cleanup(void);
181
c9901724
LR
182int rdma_nl_init(void);
183void rdma_nl_exit(void);
233c1955
LR
184
185/**
186 * Check if there are any listeners to the netlink group
187 * @group: the netlink group ID
188 * Returns 0 on success or a negative for no listeners.
189 */
190int ibnl_chk_listeners(unsigned int group);
191
735c631a
MB
192int ib_nl_handle_resolve_resp(struct sk_buff *skb,
193 struct netlink_callback *cb);
194int ib_nl_handle_set_timeout(struct sk_buff *skb,
195 struct netlink_callback *cb);
ae43f828
MB
196int ib_nl_handle_ip_res_resp(struct sk_buff *skb,
197 struct netlink_callback *cb);
735c631a 198
883c71fe
DJ
199int ib_get_cached_subnet_prefix(struct ib_device *device,
200 u8 port_num,
201 u64 *sn_pfx);
d291f1a6
DJ
202
203#ifdef CONFIG_SECURITY_INFINIBAND
47a2b338
DJ
204int ib_security_pkey_access(struct ib_device *dev,
205 u8 port_num,
206 u16 pkey_index,
207 void *sec);
208
d291f1a6
DJ
209void ib_security_destroy_port_pkey_list(struct ib_device *device);
210
211void ib_security_cache_change(struct ib_device *device,
212 u8 port_num,
213 u64 subnet_prefix);
214
215int ib_security_modify_qp(struct ib_qp *qp,
216 struct ib_qp_attr *qp_attr,
217 int qp_attr_mask,
218 struct ib_udata *udata);
219
220int ib_create_qp_security(struct ib_qp *qp, struct ib_device *dev);
221void ib_destroy_qp_security_begin(struct ib_qp_security *sec);
222void ib_destroy_qp_security_abort(struct ib_qp_security *sec);
223void ib_destroy_qp_security_end(struct ib_qp_security *sec);
224int ib_open_shared_qp_security(struct ib_qp *qp, struct ib_device *dev);
225void ib_close_shared_qp_security(struct ib_qp_security *sec);
47a2b338
DJ
226int ib_mad_agent_security_setup(struct ib_mad_agent *agent,
227 enum ib_qp_type qp_type);
228void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent);
229int ib_mad_enforce_security(struct ib_mad_agent_private *map, u16 pkey_index);
d291f1a6 230#else
47a2b338
DJ
231static inline int ib_security_pkey_access(struct ib_device *dev,
232 u8 port_num,
233 u16 pkey_index,
234 void *sec)
235{
236 return 0;
237}
238
d291f1a6
DJ
239static inline void ib_security_destroy_port_pkey_list(struct ib_device *device)
240{
241}
242
243static inline void ib_security_cache_change(struct ib_device *device,
244 u8 port_num,
245 u64 subnet_prefix)
246{
247}
248
249static inline int ib_security_modify_qp(struct ib_qp *qp,
250 struct ib_qp_attr *qp_attr,
251 int qp_attr_mask,
252 struct ib_udata *udata)
253{
254 return qp->device->modify_qp(qp->real_qp,
255 qp_attr,
256 qp_attr_mask,
257 udata);
258}
259
260static inline int ib_create_qp_security(struct ib_qp *qp,
261 struct ib_device *dev)
262{
263 return 0;
264}
265
266static inline void ib_destroy_qp_security_begin(struct ib_qp_security *sec)
267{
268}
269
270static inline void ib_destroy_qp_security_abort(struct ib_qp_security *sec)
271{
272}
273
274static inline void ib_destroy_qp_security_end(struct ib_qp_security *sec)
275{
276}
277
278static inline int ib_open_shared_qp_security(struct ib_qp *qp,
279 struct ib_device *dev)
280{
281 return 0;
282}
283
284static inline void ib_close_shared_qp_security(struct ib_qp_security *sec)
285{
286}
47a2b338
DJ
287
288static inline int ib_mad_agent_security_setup(struct ib_mad_agent *agent,
289 enum ib_qp_type qp_type)
290{
291 return 0;
292}
293
294static inline void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent)
295{
296}
297
298static inline int ib_mad_enforce_security(struct ib_mad_agent_private *map,
299 u16 pkey_index)
300{
301 return 0;
302}
d291f1a6 303#endif
1da177e4 304#endif /* _CORE_PRIV_H */