linux/drivers/infiniband/core/core_priv.h
<<
>>
Prefs
   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.
  31 */
  32
  33#ifndef _CORE_PRIV_H
  34#define _CORE_PRIV_H
  35
  36#include <linux/list.h>
  37#include <linux/spinlock.h>
  38#include <linux/cgroup_rdma.h>
  39
  40#include <rdma/ib_verbs.h>
  41
  42#if IS_ENABLED(CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS)
  43int cma_configfs_init(void);
  44void cma_configfs_exit(void);
  45#else
  46static inline int cma_configfs_init(void)
  47{
  48        return 0;
  49}
  50
  51static inline void cma_configfs_exit(void)
  52{
  53}
  54#endif
  55struct cma_device;
  56void cma_ref_dev(struct cma_device *cma_dev);
  57void cma_deref_dev(struct cma_device *cma_dev);
  58typedef bool (*cma_device_filter)(struct ib_device *, void *);
  59struct cma_device *cma_enum_devices_by_ibdev(cma_device_filter  filter,
  60                                             void               *cookie);
  61int cma_get_default_gid_type(struct cma_device *cma_dev,
  62                             unsigned int port);
  63int cma_set_default_gid_type(struct cma_device *cma_dev,
  64                             unsigned int port,
  65                             enum ib_gid_type default_gid_type);
  66int cma_get_default_roce_tos(struct cma_device *cma_dev, unsigned int port);
  67int cma_set_default_roce_tos(struct cma_device *a_dev, unsigned int port,
  68                             u8 default_roce_tos);
  69struct ib_device *cma_get_ib_dev(struct cma_device *cma_dev);
  70
  71int  ib_device_register_sysfs(struct ib_device *device,
  72                              int (*port_callback)(struct ib_device *,
  73                                                   u8, struct kobject *));
  74void ib_device_unregister_sysfs(struct ib_device *device);
  75
  76void ib_cache_setup(void);
  77void ib_cache_cleanup(void);
  78
  79typedef void (*roce_netdev_callback)(struct ib_device *device, u8 port,
  80              struct net_device *idev, void *cookie);
  81
  82typedef int (*roce_netdev_filter)(struct ib_device *device, u8 port,
  83             struct net_device *idev, void *cookie);
  84
  85void ib_enum_roce_netdev(struct ib_device *ib_dev,
  86                         roce_netdev_filter filter,
  87                         void *filter_cookie,
  88                         roce_netdev_callback cb,
  89                         void *cookie);
  90void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
  91                              void *filter_cookie,
  92                              roce_netdev_callback cb,
  93                              void *cookie);
  94
  95enum ib_cache_gid_default_mode {
  96        IB_CACHE_GID_DEFAULT_MODE_SET,
  97        IB_CACHE_GID_DEFAULT_MODE_DELETE
  98};
  99
 100int ib_cache_gid_parse_type_str(const char *buf);
 101
 102const char *ib_cache_gid_type_str(enum ib_gid_type gid_type);
 103
 104void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port,
 105                                  struct net_device *ndev,
 106                                  unsigned long gid_type_mask,
 107                                  enum ib_cache_gid_default_mode mode);
 108
 109int ib_cache_gid_add(struct ib_device *ib_dev, u8 port,
 110                     union ib_gid *gid, struct ib_gid_attr *attr);
 111
 112int ib_cache_gid_del(struct ib_device *ib_dev, u8 port,
 113                     union ib_gid *gid, struct ib_gid_attr *attr);
 114
 115int ib_cache_gid_del_all_netdev_gids(struct ib_device *ib_dev, u8 port,
 116                                     struct net_device *ndev);
 117
 118int roce_gid_mgmt_init(void);
 119void roce_gid_mgmt_cleanup(void);
 120
 121int roce_rescan_device(struct ib_device *ib_dev);
 122unsigned long roce_gid_type_mask_support(struct ib_device *ib_dev, u8 port);
 123
 124int ib_cache_setup_one(struct ib_device *device);
 125void ib_cache_cleanup_one(struct ib_device *device);
 126void ib_cache_release_one(struct ib_device *device);
 127
 128#ifdef CONFIG_CGROUP_RDMA
 129int ib_device_register_rdmacg(struct ib_device *device);
 130void ib_device_unregister_rdmacg(struct ib_device *device);
 131
 132int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
 133                         struct ib_device *device,
 134                         enum rdmacg_resource_type resource_index);
 135
 136void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
 137                        struct ib_device *device,
 138                        enum rdmacg_resource_type resource_index);
 139#else
 140static inline int ib_device_register_rdmacg(struct ib_device *device)
 141{ return 0; }
 142
 143static inline void ib_device_unregister_rdmacg(struct ib_device *device)
 144{ }
 145
 146static inline int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
 147                                       struct ib_device *device,
 148                                       enum rdmacg_resource_type resource_index)
 149{ return 0; }
 150
 151static inline void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
 152                                      struct ib_device *device,
 153                                      enum rdmacg_resource_type resource_index)
 154{ }
 155#endif
 156
 157static inline bool rdma_is_upper_dev_rcu(struct net_device *dev,
 158                                         struct net_device *upper)
 159{
 160        return netdev_has_upper_dev_all_rcu(dev, upper);
 161}
 162
 163int addr_init(void);
 164void addr_cleanup(void);
 165
 166int ib_mad_init(void);
 167void ib_mad_cleanup(void);
 168
 169int ib_sa_init(void);
 170void ib_sa_cleanup(void);
 171
 172int ibnl_init(void);
 173void ibnl_cleanup(void);
 174
 175/**
 176 * Check if there are any listeners to the netlink group
 177 * @group: the netlink group ID
 178 * Returns 0 on success or a negative for no listeners.
 179 */
 180int ibnl_chk_listeners(unsigned int group);
 181
 182int ib_nl_handle_resolve_resp(struct sk_buff *skb,
 183                              struct netlink_callback *cb);
 184int ib_nl_handle_set_timeout(struct sk_buff *skb,
 185                             struct netlink_callback *cb);
 186int ib_nl_handle_ip_res_resp(struct sk_buff *skb,
 187                             struct netlink_callback *cb);
 188
 189#endif /* _CORE_PRIV_H */
 190