]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/infiniband/core/core_priv.h
selinux lsm IB/core: Implement LSM notification system
[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>
1da177e4 41
d291f1a6
DJ
42struct pkey_index_qp_list {
43 struct list_head pkey_index_list;
44 u16 pkey_index;
45 /* Lock to hold while iterating the qp_list. */
46 spinlock_t qp_list_lock;
47 struct list_head qp_list;
48};
49
045959db
MB
50#if IS_ENABLED(CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS)
51int cma_configfs_init(void);
52void cma_configfs_exit(void);
53#else
54static inline int cma_configfs_init(void)
55{
56 return 0;
57}
58
59static inline void cma_configfs_exit(void)
60{
61}
62#endif
218a773f
MB
63struct cma_device;
64void cma_ref_dev(struct cma_device *cma_dev);
65void cma_deref_dev(struct cma_device *cma_dev);
045959db
MB
66typedef bool (*cma_device_filter)(struct ib_device *, void *);
67struct cma_device *cma_enum_devices_by_ibdev(cma_device_filter filter,
68 void *cookie);
69int cma_get_default_gid_type(struct cma_device *cma_dev,
70 unsigned int port);
71int cma_set_default_gid_type(struct cma_device *cma_dev,
72 unsigned int port,
73 enum ib_gid_type default_gid_type);
89052d78
MD
74int cma_get_default_roce_tos(struct cma_device *cma_dev, unsigned int port);
75int cma_set_default_roce_tos(struct cma_device *a_dev, unsigned int port,
76 u8 default_roce_tos);
045959db 77struct ib_device *cma_get_ib_dev(struct cma_device *cma_dev);
218a773f 78
9a6edb60
RC
79int ib_device_register_sysfs(struct ib_device *device,
80 int (*port_callback)(struct ib_device *,
81 u8, struct kobject *));
1da177e4
LT
82void ib_device_unregister_sysfs(struct ib_device *device);
83
03db3a2d 84void ib_cache_setup(void);
1da177e4
LT
85void ib_cache_cleanup(void);
86
03db3a2d
MB
87typedef void (*roce_netdev_callback)(struct ib_device *device, u8 port,
88 struct net_device *idev, void *cookie);
89
90typedef int (*roce_netdev_filter)(struct ib_device *device, u8 port,
91 struct net_device *idev, void *cookie);
92
93void ib_enum_roce_netdev(struct ib_device *ib_dev,
94 roce_netdev_filter filter,
95 void *filter_cookie,
96 roce_netdev_callback cb,
97 void *cookie);
98void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
99 void *filter_cookie,
100 roce_netdev_callback cb,
101 void *cookie);
102
03db3a2d
MB
103enum ib_cache_gid_default_mode {
104 IB_CACHE_GID_DEFAULT_MODE_SET,
105 IB_CACHE_GID_DEFAULT_MODE_DELETE
106};
107
045959db
MB
108int ib_cache_gid_parse_type_str(const char *buf);
109
b39ffa1d
MB
110const char *ib_cache_gid_type_str(enum ib_gid_type gid_type);
111
03db3a2d
MB
112void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port,
113 struct net_device *ndev,
b39ffa1d 114 unsigned long gid_type_mask,
03db3a2d
MB
115 enum ib_cache_gid_default_mode mode);
116
117int ib_cache_gid_add(struct ib_device *ib_dev, u8 port,
118 union ib_gid *gid, struct ib_gid_attr *attr);
119
120int ib_cache_gid_del(struct ib_device *ib_dev, u8 port,
121 union ib_gid *gid, struct ib_gid_attr *attr);
122
123int ib_cache_gid_del_all_netdev_gids(struct ib_device *ib_dev, u8 port,
124 struct net_device *ndev);
125
126int roce_gid_mgmt_init(void);
127void roce_gid_mgmt_cleanup(void);
128
129int roce_rescan_device(struct ib_device *ib_dev);
b39ffa1d 130unsigned long roce_gid_type_mask_support(struct ib_device *ib_dev, u8 port);
03db3a2d
MB
131
132int ib_cache_setup_one(struct ib_device *device);
133void ib_cache_cleanup_one(struct ib_device *device);
134void ib_cache_release_one(struct ib_device *device);
135
43579b5f
PP
136#ifdef CONFIG_CGROUP_RDMA
137int ib_device_register_rdmacg(struct ib_device *device);
138void ib_device_unregister_rdmacg(struct ib_device *device);
139
140int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
141 struct ib_device *device,
142 enum rdmacg_resource_type resource_index);
143
144void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
145 struct ib_device *device,
146 enum rdmacg_resource_type resource_index);
147#else
148static inline int ib_device_register_rdmacg(struct ib_device *device)
149{ return 0; }
150
151static inline void ib_device_unregister_rdmacg(struct ib_device *device)
152{ }
153
154static inline int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
155 struct ib_device *device,
156 enum rdmacg_resource_type resource_index)
157{ return 0; }
158
159static inline void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
160 struct ib_device *device,
161 enum rdmacg_resource_type resource_index)
162{ }
163#endif
164
6020d7e5
MB
165static inline bool rdma_is_upper_dev_rcu(struct net_device *dev,
166 struct net_device *upper)
167{
453d3932 168 return netdev_has_upper_dev_all_rcu(dev, upper);
6020d7e5
MB
169}
170
e3f20f02
LR
171int addr_init(void);
172void addr_cleanup(void);
173
4c2cb422
MB
174int ib_mad_init(void);
175void ib_mad_cleanup(void);
176
c2e49c92
MB
177int ib_sa_init(void);
178void ib_sa_cleanup(void);
179
735c631a
MB
180int ib_nl_handle_resolve_resp(struct sk_buff *skb,
181 struct netlink_callback *cb);
182int ib_nl_handle_set_timeout(struct sk_buff *skb,
183 struct netlink_callback *cb);
ae43f828
MB
184int ib_nl_handle_ip_res_resp(struct sk_buff *skb,
185 struct netlink_callback *cb);
735c631a 186
883c71fe
DJ
187int ib_get_cached_subnet_prefix(struct ib_device *device,
188 u8 port_num,
189 u64 *sn_pfx);
d291f1a6
DJ
190
191#ifdef CONFIG_SECURITY_INFINIBAND
192void ib_security_destroy_port_pkey_list(struct ib_device *device);
193
194void ib_security_cache_change(struct ib_device *device,
195 u8 port_num,
196 u64 subnet_prefix);
197
198int ib_security_modify_qp(struct ib_qp *qp,
199 struct ib_qp_attr *qp_attr,
200 int qp_attr_mask,
201 struct ib_udata *udata);
202
203int ib_create_qp_security(struct ib_qp *qp, struct ib_device *dev);
204void ib_destroy_qp_security_begin(struct ib_qp_security *sec);
205void ib_destroy_qp_security_abort(struct ib_qp_security *sec);
206void ib_destroy_qp_security_end(struct ib_qp_security *sec);
207int ib_open_shared_qp_security(struct ib_qp *qp, struct ib_device *dev);
208void ib_close_shared_qp_security(struct ib_qp_security *sec);
209#else
210static inline void ib_security_destroy_port_pkey_list(struct ib_device *device)
211{
212}
213
214static inline void ib_security_cache_change(struct ib_device *device,
215 u8 port_num,
216 u64 subnet_prefix)
217{
218}
219
220static inline int ib_security_modify_qp(struct ib_qp *qp,
221 struct ib_qp_attr *qp_attr,
222 int qp_attr_mask,
223 struct ib_udata *udata)
224{
225 return qp->device->modify_qp(qp->real_qp,
226 qp_attr,
227 qp_attr_mask,
228 udata);
229}
230
231static inline int ib_create_qp_security(struct ib_qp *qp,
232 struct ib_device *dev)
233{
234 return 0;
235}
236
237static inline void ib_destroy_qp_security_begin(struct ib_qp_security *sec)
238{
239}
240
241static inline void ib_destroy_qp_security_abort(struct ib_qp_security *sec)
242{
243}
244
245static inline void ib_destroy_qp_security_end(struct ib_qp_security *sec)
246{
247}
248
249static inline int ib_open_shared_qp_security(struct ib_qp *qp,
250 struct ib_device *dev)
251{
252 return 0;
253}
254
255static inline void ib_close_shared_qp_security(struct ib_qp_security *sec)
256{
257}
258#endif
1da177e4 259#endif /* _CORE_PRIV_H */