#ifndef __IW_CXGB4_H__
#define __IW_CXGB4_H__
#include <linux/mutex.h>
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/xarray.h>
#include <linux/completion.h>
#include <linux/netdevice.h>
#include <linux/sched/mm.h>
#include <linux/pci.h>
#include <linux/dma-mapping.h>
#include <linux/inet.h>
#include <linux/wait.h>
#include <linux/kref.h>
#include <linux/timer.h>
#include <linux/io.h>
#include <linux/workqueue.h>
#include <asm/byteorder.h>
#include <net/net_namespace.h>
#include <rdma/ib_verbs.h>
#include <rdma/iw_cm.h>
#include <rdma/rdma_netlink.h>
#include <rdma/iw_portmap.h>
#include <rdma/restrack.h>
#include "cxgb4.h"
#include "cxgb4_uld.h"
#include "l2t.h"
#include <rdma/cxgb4-abi.h>
#define DRV_NAME …
#define MOD …
#ifdef pr_fmt
#undef pr_fmt
#endif
#define pr_fmt(fmt) …
#include "t4.h"
#define PBL_OFF(rdev_p, a) …
#define RQT_OFF(rdev_p, a) …
static inline void *cplhdr(struct sk_buff *skb)
{ … }
#define C4IW_ID_TABLE_F_RANDOM …
#define C4IW_ID_TABLE_F_EMPTY …
struct c4iw_id_table { … };
struct c4iw_resource { … };
struct c4iw_qid_list { … };
struct c4iw_dev_ucontext { … };
enum c4iw_rdev_flags { … };
struct c4iw_stat { … };
struct c4iw_stats { … };
struct c4iw_hw_queue { … };
struct wr_log_entry { … };
struct c4iw_rdev { … };
static inline int c4iw_fatal_error(struct c4iw_rdev *rdev)
{ … }
static inline int c4iw_num_stags(struct c4iw_rdev *rdev)
{ … }
#define C4IW_WR_TO …
struct c4iw_wr_wait { … };
void _c4iw_free_wr_wait(struct kref *kref);
static inline void c4iw_put_wr_wait(struct c4iw_wr_wait *wr_waitp)
{ … }
static inline void c4iw_get_wr_wait(struct c4iw_wr_wait *wr_waitp)
{ … }
static inline void c4iw_init_wr_wait(struct c4iw_wr_wait *wr_waitp)
{ … }
static inline void _c4iw_wake_up(struct c4iw_wr_wait *wr_waitp, int ret,
bool deref)
{ … }
static inline void c4iw_wake_up_noref(struct c4iw_wr_wait *wr_waitp, int ret)
{ … }
static inline void c4iw_wake_up_deref(struct c4iw_wr_wait *wr_waitp, int ret)
{ … }
static inline int c4iw_wait_for_reply(struct c4iw_rdev *rdev,
struct c4iw_wr_wait *wr_waitp,
u32 hwtid, u32 qpid,
const char *func)
{ … }
int c4iw_ofld_send(struct c4iw_rdev *rdev, struct sk_buff *skb);
static inline int c4iw_ref_send_wait(struct c4iw_rdev *rdev,
struct sk_buff *skb,
struct c4iw_wr_wait *wr_waitp,
u32 hwtid, u32 qpid,
const char *func)
{ … }
enum db_state { … };
struct c4iw_dev { … };
struct uld_ctx { … };
static inline struct c4iw_dev *to_c4iw_dev(struct ib_device *ibdev)
{ … }
static inline struct c4iw_cq *get_chp(struct c4iw_dev *rhp, u32 cqid)
{ … }
static inline struct c4iw_qp *get_qhp(struct c4iw_dev *rhp, u32 qpid)
{ … }
extern uint c4iw_max_read_depth;
static inline int cur_max_read_depth(struct c4iw_dev *dev)
{ … }
struct c4iw_pd { … };
static inline struct c4iw_pd *to_c4iw_pd(struct ib_pd *ibpd)
{ … }
struct tpt_attributes { … };
struct c4iw_mr { … };
static inline struct c4iw_mr *to_c4iw_mr(struct ib_mr *ibmr)
{ … }
struct c4iw_mw { … };
static inline struct c4iw_mw *to_c4iw_mw(struct ib_mw *ibmw)
{ … }
struct c4iw_cq { … };
static inline struct c4iw_cq *to_c4iw_cq(struct ib_cq *ibcq)
{ … }
struct c4iw_mpa_attributes { … };
struct c4iw_qp_attributes { … };
struct c4iw_qp { … };
static inline struct c4iw_qp *to_c4iw_qp(struct ib_qp *ibqp)
{ … }
struct c4iw_srq { … };
static inline struct c4iw_srq *to_c4iw_srq(struct ib_srq *ibsrq)
{ … }
struct c4iw_ucontext { … };
static inline struct c4iw_ucontext *to_c4iw_ucontext(struct ib_ucontext *c)
{ … }
struct c4iw_mm_entry { … };
static inline struct c4iw_mm_entry *remove_mmap(struct c4iw_ucontext *ucontext,
u32 key, unsigned len)
{ … }
static inline void insert_mmap(struct c4iw_ucontext *ucontext,
struct c4iw_mm_entry *mm)
{ … }
enum c4iw_qp_attr_mask { … };
int c4iw_modify_qp(struct c4iw_dev *rhp,
struct c4iw_qp *qhp,
enum c4iw_qp_attr_mask mask,
struct c4iw_qp_attributes *attrs,
int internal);
enum c4iw_qp_state { … };
static inline int c4iw_convert_state(enum ib_qp_state ib_state)
{ … }
static inline int to_ib_qp_state(int c4iw_qp_state)
{ … }
static inline u32 c4iw_ib_to_tpt_access(int a)
{ … }
enum c4iw_mmid_state { … };
#define C4IW_NODE_DESC …
#define MPA_KEY_REQ …
#define MPA_KEY_REP …
#define MPA_MAX_PRIVATE_DATA …
#define MPA_ENHANCED_RDMA_CONN …
#define MPA_REJECT …
#define MPA_CRC …
#define MPA_MARKERS …
#define MPA_FLAGS_MASK …
#define MPA_V2_PEER2PEER_MODEL …
#define MPA_V2_ZERO_LEN_FPDU_RTR …
#define MPA_V2_RDMA_WRITE_RTR …
#define MPA_V2_RDMA_READ_RTR …
#define MPA_V2_IRD_ORD_MASK …
#define c4iw_put_ep(ep) …
#define c4iw_get_ep(ep) …
void _c4iw_free_ep(struct kref *kref);
struct mpa_message { … };
struct mpa_v2_conn_params { … };
struct terminate_message { … };
#define TERM_MAX_LENGTH …
enum c4iw_layers_types { … };
enum c4iw_rdma_ecodes { … };
enum c4iw_ddp_ecodes { … };
enum c4iw_mpa_ecodes { … };
enum c4iw_ep_state { … };
enum c4iw_ep_flags { … };
enum c4iw_ep_history { … };
enum conn_pre_alloc_buffers { … };
enum { … };
cpl_wr_size;
struct c4iw_ep_common { … };
struct c4iw_listen_ep { … };
struct c4iw_ep_stats { … };
struct c4iw_ep { … };
static inline struct c4iw_ep *to_ep(struct iw_cm_id *cm_id)
{ … }
static inline struct c4iw_listen_ep *to_listen_ep(struct iw_cm_id *cm_id)
{ … }
static inline int ocqp_supported(const struct cxgb4_lld_info *infop)
{ … }
u32 c4iw_id_alloc(struct c4iw_id_table *alloc);
void c4iw_id_free(struct c4iw_id_table *alloc, u32 obj);
int c4iw_id_table_alloc(struct c4iw_id_table *alloc, u32 start, u32 num,
u32 reserved, u32 flags);
void c4iw_id_table_free(struct c4iw_id_table *alloc);
c4iw_handler_func;
void c4iw_put_qpid(struct c4iw_rdev *rdev, u32 qpid,
struct c4iw_dev_ucontext *uctx);
u32 c4iw_get_resource(struct c4iw_id_table *id_table);
void c4iw_put_resource(struct c4iw_id_table *id_table, u32 entry);
int c4iw_init_resource(struct c4iw_rdev *rdev, u32 nr_tpt,
u32 nr_pdid, u32 nr_srqt);
int c4iw_init_ctrl_qp(struct c4iw_rdev *rdev);
int c4iw_pblpool_create(struct c4iw_rdev *rdev);
int c4iw_rqtpool_create(struct c4iw_rdev *rdev);
int c4iw_ocqp_pool_create(struct c4iw_rdev *rdev);
void c4iw_pblpool_destroy(struct c4iw_rdev *rdev);
void c4iw_rqtpool_destroy(struct c4iw_rdev *rdev);
void c4iw_ocqp_pool_destroy(struct c4iw_rdev *rdev);
void c4iw_destroy_resource(struct c4iw_resource *rscp);
int c4iw_destroy_ctrl_qp(struct c4iw_rdev *rdev);
void c4iw_register_device(struct work_struct *work);
void c4iw_unregister_device(struct c4iw_dev *dev);
int __init c4iw_cm_init(void);
void c4iw_cm_term(void);
void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev,
struct c4iw_dev_ucontext *uctx);
void c4iw_init_dev_ucontext(struct c4iw_rdev *rdev,
struct c4iw_dev_ucontext *uctx);
int c4iw_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc);
int c4iw_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,
const struct ib_send_wr **bad_wr);
int c4iw_post_receive(struct ib_qp *ibqp, const struct ib_recv_wr *wr,
const struct ib_recv_wr **bad_wr);
int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param);
int c4iw_create_listen(struct iw_cm_id *cm_id, int backlog);
int c4iw_destroy_listen(struct iw_cm_id *cm_id);
int c4iw_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param);
int c4iw_reject_cr(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len);
void c4iw_qp_add_ref(struct ib_qp *qp);
void c4iw_qp_rem_ref(struct ib_qp *qp);
struct ib_mr *c4iw_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
u32 max_num_sg);
int c4iw_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, int sg_nents,
unsigned int *sg_offset);
void c4iw_dealloc(struct uld_ctx *ctx);
struct ib_mr *c4iw_reg_user_mr(struct ib_pd *pd, u64 start,
u64 length, u64 virt, int acc,
struct ib_udata *udata);
struct ib_mr *c4iw_get_dma_mr(struct ib_pd *pd, int acc);
int c4iw_dereg_mr(struct ib_mr *ib_mr, struct ib_udata *udata);
int c4iw_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata);
void c4iw_cq_rem_ref(struct c4iw_cq *chp);
int c4iw_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
struct uverbs_attr_bundle *attrs);
int c4iw_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags);
int c4iw_modify_srq(struct ib_srq *ib_srq, struct ib_srq_attr *attr,
enum ib_srq_attr_mask srq_attr_mask,
struct ib_udata *udata);
int c4iw_destroy_srq(struct ib_srq *ib_srq, struct ib_udata *udata);
int c4iw_create_srq(struct ib_srq *srq, struct ib_srq_init_attr *attrs,
struct ib_udata *udata);
int c4iw_destroy_qp(struct ib_qp *ib_qp, struct ib_udata *udata);
int c4iw_create_qp(struct ib_qp *qp, struct ib_qp_init_attr *attrs,
struct ib_udata *udata);
int c4iw_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
int attr_mask, struct ib_udata *udata);
int c4iw_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
int attr_mask, struct ib_qp_init_attr *init_attr);
struct ib_qp *c4iw_get_qp(struct ib_device *dev, int qpn);
u32 c4iw_rqtpool_alloc(struct c4iw_rdev *rdev, int size);
void c4iw_rqtpool_free(struct c4iw_rdev *rdev, u32 addr, int size);
u32 c4iw_pblpool_alloc(struct c4iw_rdev *rdev, int size);
void c4iw_pblpool_free(struct c4iw_rdev *rdev, u32 addr, int size);
u32 c4iw_ocqp_pool_alloc(struct c4iw_rdev *rdev, int size);
void c4iw_ocqp_pool_free(struct c4iw_rdev *rdev, u32 addr, int size);
void c4iw_flush_hw_cq(struct c4iw_cq *chp, struct c4iw_qp *flush_qhp);
void c4iw_count_rcqes(struct t4_cq *cq, struct t4_wq *wq, int *count);
int c4iw_ep_disconnect(struct c4iw_ep *ep, int abrupt, gfp_t gfp);
int c4iw_flush_rq(struct t4_wq *wq, struct t4_cq *cq, int count);
int c4iw_flush_sq(struct c4iw_qp *qhp);
int c4iw_ev_handler(struct c4iw_dev *rnicp, u32 qid);
u16 c4iw_rqes_posted(struct c4iw_qp *qhp);
int c4iw_post_terminate(struct c4iw_qp *qhp, struct t4_cqe *err_cqe);
u32 c4iw_get_cqid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx);
void c4iw_put_cqid(struct c4iw_rdev *rdev, u32 qid,
struct c4iw_dev_ucontext *uctx);
u32 c4iw_get_qpid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx);
void c4iw_put_qpid(struct c4iw_rdev *rdev, u32 qid,
struct c4iw_dev_ucontext *uctx);
void c4iw_ev_dispatch(struct c4iw_dev *dev, struct t4_cqe *err_cqe);
extern struct cxgb4_client t4c_client;
extern c4iw_handler_func c4iw_handlers[NUM_CPL_CMDS];
void __iomem *c4iw_bar2_addrs(struct c4iw_rdev *rdev, unsigned int qid,
enum cxgb4_bar2_qtype qtype,
unsigned int *pbar2_qid, u64 *pbar2_pa);
int c4iw_alloc_srq_idx(struct c4iw_rdev *rdev);
void c4iw_free_srq_idx(struct c4iw_rdev *rdev, int idx);
extern void c4iw_log_wr_stats(struct t4_wq *wq, struct t4_cqe *cqe);
extern int c4iw_wr_log;
extern int db_fc_threshold;
extern int db_coalescing_threshold;
extern int use_dsgl;
void c4iw_invalidate_mr(struct c4iw_dev *rhp, u32 rkey);
void c4iw_dispatch_srq_limit_reached_event(struct c4iw_srq *srq);
void c4iw_copy_wr_to_srq(struct t4_srq *srq, union t4_recv_wr *wqe, u8 len16);
void c4iw_flush_srqidx(struct c4iw_qp *qhp, u32 srqidx);
int c4iw_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr,
const struct ib_recv_wr **bad_wr);
struct c4iw_wr_wait *c4iw_alloc_wr_wait(gfp_t gfp);
int c4iw_fill_res_mr_entry(struct sk_buff *msg, struct ib_mr *ibmr);
int c4iw_fill_res_cq_entry(struct sk_buff *msg, struct ib_cq *ibcq);
int c4iw_fill_res_qp_entry(struct sk_buff *msg, struct ib_qp *ibqp);
int c4iw_fill_res_cm_id_entry(struct sk_buff *msg, struct rdma_cm_id *cm_id);
#endif