#ifndef IB_SA_H
#define IB_SA_H
#include <linux/completion.h>
#include <linux/compiler.h>
#include <linux/atomic.h>
#include <linux/netdevice.h>
#include <rdma/ib_verbs.h>
#include <rdma/ib_mad.h>
#include <rdma/ib_addr.h>
#include <rdma/opa_addr.h>
enum { … };
#define OPA_SA_CLASS_VERSION …
enum { … };
enum ib_sa_selector { … };
enum ib_sa_mc_join_states { … };
#define IB_SA_CAP_MASK2_SENDONLY_FULL_MEM_SUPPORT …
#define IB_SA_PATH_REC_SERVICE_ID …
#define IB_SA_PATH_REC_DGID …
#define IB_SA_PATH_REC_SGID …
#define IB_SA_PATH_REC_DLID …
#define IB_SA_PATH_REC_SLID …
#define IB_SA_PATH_REC_RAW_TRAFFIC …
#define IB_SA_PATH_REC_FLOW_LABEL …
#define IB_SA_PATH_REC_HOP_LIMIT …
#define IB_SA_PATH_REC_TRAFFIC_CLASS …
#define IB_SA_PATH_REC_REVERSIBLE …
#define IB_SA_PATH_REC_NUMB_PATH …
#define IB_SA_PATH_REC_PKEY …
#define IB_SA_PATH_REC_QOS_CLASS …
#define IB_SA_PATH_REC_SL …
#define IB_SA_PATH_REC_MTU_SELECTOR …
#define IB_SA_PATH_REC_MTU …
#define IB_SA_PATH_REC_RATE_SELECTOR …
#define IB_SA_PATH_REC_RATE …
#define IB_SA_PATH_REC_PACKET_LIFE_TIME_SELECTOR …
#define IB_SA_PATH_REC_PACKET_LIFE_TIME …
#define IB_SA_PATH_REC_PREFERENCE …
enum sa_path_rec_type { … };
struct sa_path_rec_ib { … };
struct sa_path_rec_roce { … };
struct sa_path_rec_opa { … };
struct sa_path_rec { … };
static inline enum ib_gid_type
sa_conv_pathrec_to_gid_type(struct sa_path_rec *rec)
{ … }
static inline enum sa_path_rec_type
sa_conv_gid_to_pathrec_type(enum ib_gid_type type)
{ … }
static inline void path_conv_opa_to_ib(struct sa_path_rec *ib,
struct sa_path_rec *opa)
{ … }
static inline void path_conv_ib_to_opa(struct sa_path_rec *opa,
struct sa_path_rec *ib)
{ … }
static inline void sa_convert_path_opa_to_ib(struct sa_path_rec *dest,
struct sa_path_rec *src)
{ … }
static inline void sa_convert_path_ib_to_opa(struct sa_path_rec *dest,
struct sa_path_rec *src)
{ … }
#define IB_SA_MCMEMBER_REC_MGID …
#define IB_SA_MCMEMBER_REC_PORT_GID …
#define IB_SA_MCMEMBER_REC_QKEY …
#define IB_SA_MCMEMBER_REC_MLID …
#define IB_SA_MCMEMBER_REC_MTU_SELECTOR …
#define IB_SA_MCMEMBER_REC_MTU …
#define IB_SA_MCMEMBER_REC_TRAFFIC_CLASS …
#define IB_SA_MCMEMBER_REC_PKEY …
#define IB_SA_MCMEMBER_REC_RATE_SELECTOR …
#define IB_SA_MCMEMBER_REC_RATE …
#define IB_SA_MCMEMBER_REC_PACKET_LIFE_TIME_SELECTOR …
#define IB_SA_MCMEMBER_REC_PACKET_LIFE_TIME …
#define IB_SA_MCMEMBER_REC_SL …
#define IB_SA_MCMEMBER_REC_FLOW_LABEL …
#define IB_SA_MCMEMBER_REC_HOP_LIMIT …
#define IB_SA_MCMEMBER_REC_SCOPE …
#define IB_SA_MCMEMBER_REC_JOIN_STATE …
#define IB_SA_MCMEMBER_REC_PROXY_JOIN …
struct ib_sa_mcmember_rec { … };
#define IB_SA_SERVICE_REC_SERVICE_ID …
#define IB_SA_SERVICE_REC_SERVICE_GID …
#define IB_SA_SERVICE_REC_SERVICE_PKEY …
#define IB_SA_SERVICE_REC_SERVICE_LEASE …
#define IB_SA_SERVICE_REC_SERVICE_KEY …
#define IB_SA_SERVICE_REC_SERVICE_NAME …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_0 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_1 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_2 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_3 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_4 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_5 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_6 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_7 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_8 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_9 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_10 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_11 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_12 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_13 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_14 …
#define IB_SA_SERVICE_REC_SERVICE_DATA8_15 …
#define IB_SA_SERVICE_REC_SERVICE_DATA16_0 …
#define IB_SA_SERVICE_REC_SERVICE_DATA16_1 …
#define IB_SA_SERVICE_REC_SERVICE_DATA16_2 …
#define IB_SA_SERVICE_REC_SERVICE_DATA16_3 …
#define IB_SA_SERVICE_REC_SERVICE_DATA16_4 …
#define IB_SA_SERVICE_REC_SERVICE_DATA16_5 …
#define IB_SA_SERVICE_REC_SERVICE_DATA16_6 …
#define IB_SA_SERVICE_REC_SERVICE_DATA16_7 …
#define IB_SA_SERVICE_REC_SERVICE_DATA32_0 …
#define IB_SA_SERVICE_REC_SERVICE_DATA32_1 …
#define IB_SA_SERVICE_REC_SERVICE_DATA32_2 …
#define IB_SA_SERVICE_REC_SERVICE_DATA32_3 …
#define IB_SA_SERVICE_REC_SERVICE_DATA64_0 …
#define IB_SA_SERVICE_REC_SERVICE_DATA64_1 …
#define IB_DEFAULT_SERVICE_LEASE …
#define IB_SA_GUIDINFO_REC_LID …
#define IB_SA_GUIDINFO_REC_BLOCK_NUM …
#define IB_SA_GUIDINFO_REC_RES1 …
#define IB_SA_GUIDINFO_REC_RES2 …
#define IB_SA_GUIDINFO_REC_GID0 …
#define IB_SA_GUIDINFO_REC_GID1 …
#define IB_SA_GUIDINFO_REC_GID2 …
#define IB_SA_GUIDINFO_REC_GID3 …
#define IB_SA_GUIDINFO_REC_GID4 …
#define IB_SA_GUIDINFO_REC_GID5 …
#define IB_SA_GUIDINFO_REC_GID6 …
#define IB_SA_GUIDINFO_REC_GID7 …
struct ib_sa_guidinfo_rec { … };
struct ib_sa_client { … };
void ib_sa_register_client(struct ib_sa_client *client);
void ib_sa_unregister_client(struct ib_sa_client *client);
struct ib_sa_query;
void ib_sa_cancel_query(int id, struct ib_sa_query *query);
int ib_sa_path_rec_get(struct ib_sa_client *client, struct ib_device *device,
u32 port_num, struct sa_path_rec *rec,
ib_sa_comp_mask comp_mask, unsigned long timeout_ms,
gfp_t gfp_mask,
void (*callback)(int status, struct sa_path_rec *resp,
unsigned int num_prs, void *context),
void *context, struct ib_sa_query **query);
struct ib_sa_multicast { … };
struct ib_sa_multicast *ib_sa_join_multicast(struct ib_sa_client *client,
struct ib_device *device,
u32 port_num,
struct ib_sa_mcmember_rec *rec,
ib_sa_comp_mask comp_mask, gfp_t gfp_mask,
int (*callback)(int status,
struct ib_sa_multicast
*multicast),
void *context);
void ib_sa_free_multicast(struct ib_sa_multicast *multicast);
int ib_sa_get_mcmember_rec(struct ib_device *device, u32 port_num,
union ib_gid *mgid, struct ib_sa_mcmember_rec *rec);
int ib_init_ah_from_mcmember(struct ib_device *device, u32 port_num,
struct ib_sa_mcmember_rec *rec,
struct net_device *ndev,
enum ib_gid_type gid_type,
struct rdma_ah_attr *ah_attr);
int ib_init_ah_attr_from_path(struct ib_device *device, u32 port_num,
struct sa_path_rec *rec,
struct rdma_ah_attr *ah_attr,
const struct ib_gid_attr *sgid_attr);
void ib_sa_pack_path(struct sa_path_rec *rec, void *attribute);
void ib_sa_unpack_path(void *attribute, struct sa_path_rec *rec);
int ib_sa_guid_info_rec_query(struct ib_sa_client *client,
struct ib_device *device, u32 port_num,
struct ib_sa_guidinfo_rec *rec,
ib_sa_comp_mask comp_mask, u8 method,
unsigned long timeout_ms, gfp_t gfp_mask,
void (*callback)(int status,
struct ib_sa_guidinfo_rec *resp,
void *context),
void *context, struct ib_sa_query **sa_query);
static inline bool sa_path_is_roce(struct sa_path_rec *rec)
{ … }
static inline bool sa_path_is_opa(struct sa_path_rec *rec)
{ … }
static inline void sa_path_set_slid(struct sa_path_rec *rec, u32 slid)
{ … }
static inline void sa_path_set_dlid(struct sa_path_rec *rec, u32 dlid)
{ … }
static inline void sa_path_set_raw_traffic(struct sa_path_rec *rec,
u8 raw_traffic)
{ … }
static inline __be32 sa_path_get_slid(struct sa_path_rec *rec)
{ … }
static inline __be32 sa_path_get_dlid(struct sa_path_rec *rec)
{ … }
static inline u8 sa_path_get_raw_traffic(struct sa_path_rec *rec)
{ … }
static inline void sa_path_set_dmac(struct sa_path_rec *rec, u8 *dmac)
{ … }
static inline void sa_path_set_dmac_zero(struct sa_path_rec *rec)
{ … }
static inline u8 *sa_path_get_dmac(struct sa_path_rec *rec)
{ … }
#endif