xref: /linux/include/rdma/ib_cache.h (revision 0afd22092df4d3473569c197e317f91face7e51b)
1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2 /*
3  * Copyright (c) 2004 Topspin Communications.  All rights reserved.
4  * Copyright (c) 2005 Intel Corporation. All rights reserved.
5  * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
6  */
7 
8 #ifndef _IB_CACHE_H
9 #define _IB_CACHE_H
10 
11 #include <rdma/ib_verbs.h>
12 
13 int rdma_query_gid(struct ib_device *device, u32 port_num, int index,
14 		   union ib_gid *gid);
15 void *rdma_read_gid_hw_context(const struct ib_gid_attr *attr);
16 const struct ib_gid_attr *rdma_find_gid(struct ib_device *device,
17 					const union ib_gid *gid,
18 					enum ib_gid_type gid_type,
19 					struct net_device *ndev);
20 const struct ib_gid_attr *rdma_find_gid_by_port(struct ib_device *ib_dev,
21 						const union ib_gid *gid,
22 						enum ib_gid_type gid_type,
23 						u32 port,
24 						struct net_device *ndev);
25 const struct ib_gid_attr *rdma_find_gid_by_filter(
26 	struct ib_device *device, const union ib_gid *gid, u32 port_num,
27 	bool (*filter)(const union ib_gid *gid, const struct ib_gid_attr *,
28 		       void *),
29 	void *context);
30 
31 int rdma_read_gid_l2_fields(const struct ib_gid_attr *attr,
32 			    u16 *vlan_id, u8 *smac);
33 struct net_device *rdma_read_gid_attr_ndev_rcu(const struct ib_gid_attr *attr);
34 
35 /**
36  * ib_get_cached_pkey - Returns a cached PKey table entry
37  * @device: The device to query.
38  * @port_num: The port number of the device to query.
39  * @index: The index into the cached PKey table to query.
40  * @pkey: The PKey value found at the specified index.
41  *
42  * ib_get_cached_pkey() fetches the specified PKey table entry stored in
43  * the local software cache.
44  */
45 int ib_get_cached_pkey(struct ib_device    *device_handle,
46 		       u32                  port_num,
47 		       int                  index,
48 		       u16                 *pkey);
49 
50 /**
51  * ib_find_cached_pkey - Returns the PKey table index where a specified
52  *   PKey value occurs.
53  * @device: The device to query.
54  * @port_num: The port number of the device to search for the PKey.
55  * @pkey: The PKey value to search for.
56  * @index: The index into the cached PKey table where the PKey was found.
57  *
58  * ib_find_cached_pkey() searches the specified PKey table in
59  * the local software cache.
60  */
61 int ib_find_cached_pkey(struct ib_device    *device,
62 			u32                  port_num,
63 			u16                  pkey,
64 			u16                 *index);
65 
66 /**
67  * ib_get_cached_lmc - Returns a cached lmc table entry
68  * @device: The device to query.
69  * @port_num: The port number of the device to query.
70  * @lmc: The lmc value for the specified port for that device.
71  *
72  * ib_get_cached_lmc() fetches the specified lmc table entry stored in
73  * the local software cache.
74  */
75 int ib_get_cached_lmc(struct ib_device *device,
76 		      u32               port_num,
77 		      u8                *lmc);
78 
79 /**
80  * ib_get_cached_port_state - Returns a cached port state table entry
81  * @device: The device to query.
82  * @port_num: The port number of the device to query.
83  * @port_state: port_state for the specified port for that device.
84  *
85  * ib_get_cached_port_state() fetches the specified port_state table entry stored in
86  * the local software cache.
87  */
88 int ib_get_cached_port_state(struct ib_device *device,
89 			     u32               port_num,
90 			      enum ib_port_state *port_active);
91 
92 bool rdma_is_zero_gid(const union ib_gid *gid);
93 const struct ib_gid_attr *rdma_get_gid_attr(struct ib_device *device,
94 					    u32 port_num, int index);
95 void rdma_put_gid_attr(const struct ib_gid_attr *attr);
96 void rdma_hold_gid_attr(const struct ib_gid_attr *attr);
97 ssize_t rdma_query_gid_table(struct ib_device *device,
98 			     struct ib_uverbs_gid_entry *entries,
99 			     size_t max_entries);
100 
101 #endif /* _IB_CACHE_H */
102