#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/log2.h>
#include <linux/dma-mapping.h>
#include <linux/if_ether.h>
#include <rdma/ib_verbs.h>
#include <rdma/ib_user_verbs.h>
#include <rdma/ib_cache.h>
#include "ocrdma.h"
#include "ocrdma_hw.h"
#include "ocrdma_verbs.h"
#include "ocrdma_ah.h"
enum mbx_status { … };
enum additional_status { … };
enum cqe_status { … };
static inline void *ocrdma_get_eqe(struct ocrdma_eq *eq)
{ … }
static inline void ocrdma_eq_inc_tail(struct ocrdma_eq *eq)
{ … }
static inline void *ocrdma_get_mcqe(struct ocrdma_dev *dev)
{ … }
static inline void ocrdma_mcq_inc_tail(struct ocrdma_dev *dev)
{ … }
static inline struct ocrdma_mqe *ocrdma_get_mqe(struct ocrdma_dev *dev)
{ … }
static inline void ocrdma_mq_inc_head(struct ocrdma_dev *dev)
{ … }
static inline void *ocrdma_get_mqe_rsp(struct ocrdma_dev *dev)
{ … }
enum ib_qp_state get_ibqp_state(enum ocrdma_qp_state qps)
{ … }
static enum ocrdma_qp_state get_ocrdma_qp_state(enum ib_qp_state qps)
{ … }
static int ocrdma_get_mbx_errno(u32 status)
{ … }
char *port_speed_string(struct ocrdma_dev *dev)
{ … }
static int ocrdma_get_mbx_cqe_errno(u16 cqe_status)
{ … }
void ocrdma_ring_cq_db(struct ocrdma_dev *dev, u16 cq_id, bool armed,
bool solicited, u16 cqe_popped)
{ … }
static void ocrdma_ring_mq_db(struct ocrdma_dev *dev)
{ … }
static void ocrdma_ring_eq_db(struct ocrdma_dev *dev, u16 eq_id,
bool arm, bool clear_int, u16 num_eqe)
{ … }
static void ocrdma_init_mch(struct ocrdma_mbx_hdr *cmd_hdr,
u8 opcode, u8 subsys, u32 cmd_len)
{ … }
static void *ocrdma_init_emb_mqe(u8 opcode, u32 cmd_len)
{ … }
static void ocrdma_free_q(struct ocrdma_dev *dev, struct ocrdma_queue_info *q)
{ … }
static int ocrdma_alloc_q(struct ocrdma_dev *dev,
struct ocrdma_queue_info *q, u16 len, u16 entry_size)
{ … }
static void ocrdma_build_q_pages(struct ocrdma_pa *q_pa, int cnt,
dma_addr_t host_pa, int hw_page_size)
{ … }
static int ocrdma_mbx_delete_q(struct ocrdma_dev *dev,
struct ocrdma_queue_info *q, int queue_type)
{ … }
static int ocrdma_mbx_create_eq(struct ocrdma_dev *dev, struct ocrdma_eq *eq)
{ … }
static int ocrdma_create_eq(struct ocrdma_dev *dev,
struct ocrdma_eq *eq, u16 q_len)
{ … }
int ocrdma_get_irq(struct ocrdma_dev *dev, struct ocrdma_eq *eq)
{ … }
static void _ocrdma_destroy_eq(struct ocrdma_dev *dev, struct ocrdma_eq *eq)
{ … }
static void ocrdma_destroy_eq(struct ocrdma_dev *dev, struct ocrdma_eq *eq)
{ … }
static void ocrdma_destroy_eqs(struct ocrdma_dev *dev)
{ … }
static int ocrdma_mbx_mq_cq_create(struct ocrdma_dev *dev,
struct ocrdma_queue_info *cq,
struct ocrdma_queue_info *eq)
{ … }
static u32 ocrdma_encoded_q_len(int q_len)
{ … }
static int ocrdma_mbx_create_mq(struct ocrdma_dev *dev,
struct ocrdma_queue_info *mq,
struct ocrdma_queue_info *cq)
{ … }
static int ocrdma_create_mq(struct ocrdma_dev *dev)
{ … }
static void ocrdma_destroy_mq(struct ocrdma_dev *dev)
{ … }
static void ocrdma_process_qpcat_error(struct ocrdma_dev *dev,
struct ocrdma_qp *qp)
{ … }
static void ocrdma_dispatch_ibevent(struct ocrdma_dev *dev,
struct ocrdma_ae_mcqe *cqe)
{ … }
static void ocrdma_process_grp5_aync(struct ocrdma_dev *dev,
struct ocrdma_ae_mcqe *cqe)
{ … }
static void ocrdma_process_link_state(struct ocrdma_dev *dev,
struct ocrdma_ae_mcqe *cqe)
{ … }
static void ocrdma_process_acqe(struct ocrdma_dev *dev, void *ae_cqe)
{ … }
static void ocrdma_process_mcqe(struct ocrdma_dev *dev, struct ocrdma_mcqe *cqe)
{ … }
static int ocrdma_mq_cq_handler(struct ocrdma_dev *dev, u16 cq_id)
{ … }
static struct ocrdma_cq *_ocrdma_qp_buddy_cq_handler(struct ocrdma_dev *dev,
struct ocrdma_cq *cq, bool sq)
{ … }
static void ocrdma_qp_buddy_cq_handler(struct ocrdma_dev *dev,
struct ocrdma_cq *cq)
{ … }
static void ocrdma_qp_cq_handler(struct ocrdma_dev *dev, u16 cq_idx)
{ … }
static void ocrdma_cq_handler(struct ocrdma_dev *dev, u16 cq_id)
{ … }
static irqreturn_t ocrdma_irq_handler(int irq, void *handle)
{ … }
static void ocrdma_post_mqe(struct ocrdma_dev *dev, struct ocrdma_mqe *cmd)
{ … }
static int ocrdma_wait_mqe_cmpl(struct ocrdma_dev *dev)
{ … }
static int ocrdma_mbx_cmd(struct ocrdma_dev *dev, struct ocrdma_mqe *mqe)
{ … }
static int ocrdma_nonemb_mbx_cmd(struct ocrdma_dev *dev, struct ocrdma_mqe *mqe,
void *payload_va)
{ … }
static void ocrdma_get_attr(struct ocrdma_dev *dev,
struct ocrdma_dev_attr *attr,
struct ocrdma_mbx_query_config *rsp)
{ … }
static int ocrdma_check_fw_config(struct ocrdma_dev *dev,
struct ocrdma_fw_conf_rsp *conf)
{ … }
static int ocrdma_mbx_query_fw_ver(struct ocrdma_dev *dev)
{ … }
static int ocrdma_mbx_query_fw_config(struct ocrdma_dev *dev)
{ … }
int ocrdma_mbx_rdma_stats(struct ocrdma_dev *dev, bool reset)
{ … }
static int ocrdma_mbx_get_ctrl_attribs(struct ocrdma_dev *dev)
{ … }
static int ocrdma_mbx_query_dev(struct ocrdma_dev *dev)
{ … }
int ocrdma_mbx_get_link_speed(struct ocrdma_dev *dev, u8 *lnk_speed,
u8 *lnk_state)
{ … }
static int ocrdma_mbx_get_phy_info(struct ocrdma_dev *dev)
{ … }
int ocrdma_mbx_alloc_pd(struct ocrdma_dev *dev, struct ocrdma_pd *pd)
{ … }
int ocrdma_mbx_dealloc_pd(struct ocrdma_dev *dev, struct ocrdma_pd *pd)
{ … }
static int ocrdma_mbx_alloc_pd_range(struct ocrdma_dev *dev)
{ … }
static void ocrdma_mbx_dealloc_pd_range(struct ocrdma_dev *dev)
{ … }
void ocrdma_alloc_pd_pool(struct ocrdma_dev *dev)
{ … }
static void ocrdma_free_pd_pool(struct ocrdma_dev *dev)
{ … }
static int ocrdma_build_q_conf(u32 *num_entries, int entry_size,
int *num_pages, int *page_size)
{ … }
static int ocrdma_mbx_create_ah_tbl(struct ocrdma_dev *dev)
{ … }
static void ocrdma_mbx_delete_ah_tbl(struct ocrdma_dev *dev)
{ … }
static u16 ocrdma_bind_eq(struct ocrdma_dev *dev)
{ … }
static void ocrdma_unbind_eq(struct ocrdma_dev *dev, u16 eq_id)
{ … }
int ocrdma_mbx_create_cq(struct ocrdma_dev *dev, struct ocrdma_cq *cq,
int entries, int dpp_cq, u16 pd_id)
{ … }
void ocrdma_mbx_destroy_cq(struct ocrdma_dev *dev, struct ocrdma_cq *cq)
{ … }
int ocrdma_mbx_alloc_lkey(struct ocrdma_dev *dev, struct ocrdma_hw_mr *hwmr,
u32 pdid, int addr_check)
{ … }
int ocrdma_mbx_dealloc_lkey(struct ocrdma_dev *dev, int fr_mr, u32 lkey)
{ … }
static int ocrdma_mbx_reg_mr(struct ocrdma_dev *dev, struct ocrdma_hw_mr *hwmr,
u32 pdid, u32 pbl_cnt, u32 pbe_size, u32 last)
{ … }
static int ocrdma_mbx_reg_mr_cont(struct ocrdma_dev *dev,
struct ocrdma_hw_mr *hwmr, u32 pbl_cnt,
u32 pbl_offset, u32 last)
{ … }
int ocrdma_reg_mr(struct ocrdma_dev *dev,
struct ocrdma_hw_mr *hwmr, u32 pdid, int acc)
{ … }
bool ocrdma_is_qp_in_sq_flushlist(struct ocrdma_cq *cq, struct ocrdma_qp *qp)
{ … }
bool ocrdma_is_qp_in_rq_flushlist(struct ocrdma_cq *cq, struct ocrdma_qp *qp)
{ … }
void ocrdma_flush_qp(struct ocrdma_qp *qp)
{ … }
static void ocrdma_init_hwq_ptr(struct ocrdma_qp *qp)
{ … }
int ocrdma_qp_state_change(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state,
enum ib_qp_state *old_ib_state)
{ … }
static u32 ocrdma_set_create_qp_mbx_access_flags(struct ocrdma_qp *qp)
{ … }
static int ocrdma_set_create_qp_sq_cmd(struct ocrdma_create_qp_req *cmd,
struct ib_qp_init_attr *attrs,
struct ocrdma_qp *qp)
{ … }
static int ocrdma_set_create_qp_rq_cmd(struct ocrdma_create_qp_req *cmd,
struct ib_qp_init_attr *attrs,
struct ocrdma_qp *qp)
{ … }
static void ocrdma_set_create_qp_dpp_cmd(struct ocrdma_create_qp_req *cmd,
struct ocrdma_pd *pd,
struct ocrdma_qp *qp,
u8 enable_dpp_cq, u16 dpp_cq_id)
{ … }
static int ocrdma_set_create_qp_ird_cmd(struct ocrdma_create_qp_req *cmd,
struct ocrdma_qp *qp)
{ … }
static void ocrdma_get_create_qp_rsp(struct ocrdma_create_qp_rsp *rsp,
struct ocrdma_qp *qp,
struct ib_qp_init_attr *attrs,
u16 *dpp_offset, u16 *dpp_credit_lmt)
{ … }
int ocrdma_mbx_create_qp(struct ocrdma_qp *qp, struct ib_qp_init_attr *attrs,
u8 enable_dpp_cq, u16 dpp_cq_id, u16 *dpp_offset,
u16 *dpp_credit_lmt)
{ … }
int ocrdma_mbx_query_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp,
struct ocrdma_qp_params *param)
{ … }
static int ocrdma_set_av_params(struct ocrdma_qp *qp,
struct ocrdma_modify_qp *cmd,
struct ib_qp_attr *attrs,
int attr_mask)
{ … }
static int ocrdma_set_qp_params(struct ocrdma_qp *qp,
struct ocrdma_modify_qp *cmd,
struct ib_qp_attr *attrs, int attr_mask)
{ … }
int ocrdma_mbx_modify_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp,
struct ib_qp_attr *attrs, int attr_mask)
{ … }
int ocrdma_mbx_destroy_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp)
{ … }
int ocrdma_mbx_create_srq(struct ocrdma_dev *dev, struct ocrdma_srq *srq,
struct ib_srq_init_attr *srq_attr,
struct ocrdma_pd *pd)
{ … }
int ocrdma_mbx_modify_srq(struct ocrdma_srq *srq, struct ib_srq_attr *srq_attr)
{ … }
int ocrdma_mbx_query_srq(struct ocrdma_srq *srq, struct ib_srq_attr *srq_attr)
{ … }
void ocrdma_mbx_destroy_srq(struct ocrdma_dev *dev, struct ocrdma_srq *srq)
{ … }
static int ocrdma_mbx_get_dcbx_config(struct ocrdma_dev *dev, u32 ptype,
struct ocrdma_dcbx_cfg *dcbxcfg)
{ … }
#define OCRDMA_MAX_SERVICE_LEVEL_INDEX …
#define OCRDMA_DEFAULT_SERVICE_LEVEL …
static int ocrdma_parse_dcbxcfg_rsp(struct ocrdma_dev *dev, int ptype,
struct ocrdma_dcbx_cfg *dcbxcfg,
u8 *srvc_lvl)
{ … }
void ocrdma_init_service_level(struct ocrdma_dev *dev)
{ … }
int ocrdma_alloc_av(struct ocrdma_dev *dev, struct ocrdma_ah *ah)
{ … }
void ocrdma_free_av(struct ocrdma_dev *dev, struct ocrdma_ah *ah)
{ … }
static int ocrdma_create_eqs(struct ocrdma_dev *dev)
{ … }
static int ocrdma_mbx_modify_eqd(struct ocrdma_dev *dev, struct ocrdma_eq *eq,
int num)
{ … }
static int ocrdma_modify_eqd(struct ocrdma_dev *dev, struct ocrdma_eq *eq,
int num)
{ … }
void ocrdma_eqd_set_task(struct work_struct *work)
{ … }
int ocrdma_init_hw(struct ocrdma_dev *dev)
{ … }
void ocrdma_cleanup_hw(struct ocrdma_dev *dev)
{ … }