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