xref: /linux/include/rdma/ib_cache.h (revision d87c25e8f4051f813762da6a182c57f246b17441)
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_find_exact_cached_pkey - Returns the PKey table index where a specified
68  *   PKey value occurs. Comparison uses the FULL 16 bits (incl membership bit)
69  * @device: The device to query.
70  * @port_num: The port number of the device to search for the PKey.
71  * @pkey: The PKey value to search for.
72  * @index: The index into the cached PKey table where the PKey was found.
73  *
74  * ib_find_exact_cached_pkey() searches the specified PKey table in
75  * the local software cache.
76  */
77 int ib_find_exact_cached_pkey(struct ib_device    *device,
78 			      u32                  port_num,
79 			      u16                  pkey,
80 			      u16                 *index);
81 
82 /**
83  * ib_get_cached_lmc - Returns a cached lmc table entry
84  * @device: The device to query.
85  * @port_num: The port number of the device to query.
86  * @lmc: The lmc value for the specified port for that device.
87  *
88  * ib_get_cached_lmc() fetches the specified lmc table entry stored in
89  * the local software cache.
90  */
91 int ib_get_cached_lmc(struct ib_device *device,
92 		      u32               port_num,
93 		      u8                *lmc);
94 
95 /**
96  * ib_get_cached_port_state - Returns a cached port state table entry
97  * @device: The device to query.
98  * @port_num: The port number of the device to query.
99  * @port_state: port_state for the specified port for that device.
100  *
101  * ib_get_cached_port_state() fetches the specified port_state table entry stored in
102  * the local software cache.
103  */
104 int ib_get_cached_port_state(struct ib_device *device,
105 			     u32               port_num,
106 			      enum ib_port_state *port_active);
107 
108 bool rdma_is_zero_gid(const union ib_gid *gid);
109 const struct ib_gid_attr *rdma_get_gid_attr(struct ib_device *device,
110 					    u32 port_num, int index);
111 void rdma_put_gid_attr(const struct ib_gid_attr *attr);
112 void rdma_hold_gid_attr(const struct ib_gid_attr *attr);
113 ssize_t rdma_query_gid_table(struct ib_device *device,
114 			     struct ib_uverbs_gid_entry *entries,
115 			     size_t max_entries);
116 
117 #endif /* _IB_CACHE_H */
118