162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB */
262306a36Sopenharmony_ci/* Copyright (c) 2015 - 2021 Intel Corporation */
362306a36Sopenharmony_ci#ifndef IRDMA_OSDEP_H
462306a36Sopenharmony_ci#define IRDMA_OSDEP_H
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <linux/pci.h>
762306a36Sopenharmony_ci#include <linux/bitfield.h>
862306a36Sopenharmony_ci#include <linux/net/intel/iidc.h>
962306a36Sopenharmony_ci#include <crypto/hash.h>
1062306a36Sopenharmony_ci#include <rdma/ib_verbs.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define STATS_TIMER_DELAY	60000
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cistruct irdma_dma_info {
1562306a36Sopenharmony_ci	dma_addr_t *dmaaddrs;
1662306a36Sopenharmony_ci};
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cistruct irdma_dma_mem {
1962306a36Sopenharmony_ci	void *va;
2062306a36Sopenharmony_ci	dma_addr_t pa;
2162306a36Sopenharmony_ci	u32 size;
2262306a36Sopenharmony_ci} __packed;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistruct irdma_virt_mem {
2562306a36Sopenharmony_ci	void *va;
2662306a36Sopenharmony_ci	u32 size;
2762306a36Sopenharmony_ci} __packed;
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct irdma_sc_vsi;
3062306a36Sopenharmony_cistruct irdma_sc_dev;
3162306a36Sopenharmony_cistruct irdma_sc_qp;
3262306a36Sopenharmony_cistruct irdma_puda_buf;
3362306a36Sopenharmony_cistruct irdma_puda_cmpl_info;
3462306a36Sopenharmony_cistruct irdma_update_sds_info;
3562306a36Sopenharmony_cistruct irdma_hmc_fcn_info;
3662306a36Sopenharmony_cistruct irdma_manage_vf_pble_info;
3762306a36Sopenharmony_cistruct irdma_hw;
3862306a36Sopenharmony_cistruct irdma_pci_f;
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistruct ib_device *to_ibdev(struct irdma_sc_dev *dev);
4162306a36Sopenharmony_civoid irdma_ieq_mpa_crc_ae(struct irdma_sc_dev *dev, struct irdma_sc_qp *qp);
4262306a36Sopenharmony_cienum irdma_status_code irdma_vf_wait_vchnl_resp(struct irdma_sc_dev *dev);
4362306a36Sopenharmony_cibool irdma_vf_clear_to_send(struct irdma_sc_dev *dev);
4462306a36Sopenharmony_civoid irdma_add_dev_ref(struct irdma_sc_dev *dev);
4562306a36Sopenharmony_civoid irdma_put_dev_ref(struct irdma_sc_dev *dev);
4662306a36Sopenharmony_ciint irdma_ieq_check_mpacrc(struct shash_desc *desc, void *addr, u32 len,
4762306a36Sopenharmony_ci			   u32 val);
4862306a36Sopenharmony_cistruct irdma_sc_qp *irdma_ieq_get_qp(struct irdma_sc_dev *dev,
4962306a36Sopenharmony_ci				     struct irdma_puda_buf *buf);
5062306a36Sopenharmony_civoid irdma_send_ieq_ack(struct irdma_sc_qp *qp);
5162306a36Sopenharmony_civoid irdma_ieq_update_tcpip_info(struct irdma_puda_buf *buf, u16 len,
5262306a36Sopenharmony_ci				 u32 seqnum);
5362306a36Sopenharmony_civoid irdma_free_hash_desc(struct shash_desc *hash_desc);
5462306a36Sopenharmony_ciint irdma_init_hash_desc(struct shash_desc **hash_desc);
5562306a36Sopenharmony_ciint irdma_puda_get_tcpip_info(struct irdma_puda_cmpl_info *info,
5662306a36Sopenharmony_ci			      struct irdma_puda_buf *buf);
5762306a36Sopenharmony_ciint irdma_cqp_sds_cmd(struct irdma_sc_dev *dev,
5862306a36Sopenharmony_ci		      struct irdma_update_sds_info *info);
5962306a36Sopenharmony_ciint irdma_cqp_manage_hmc_fcn_cmd(struct irdma_sc_dev *dev,
6062306a36Sopenharmony_ci				 struct irdma_hmc_fcn_info *hmcfcninfo,
6162306a36Sopenharmony_ci				 u16 *pmf_idx);
6262306a36Sopenharmony_ciint irdma_cqp_query_fpm_val_cmd(struct irdma_sc_dev *dev,
6362306a36Sopenharmony_ci				struct irdma_dma_mem *val_mem, u8 hmc_fn_id);
6462306a36Sopenharmony_ciint irdma_cqp_commit_fpm_val_cmd(struct irdma_sc_dev *dev,
6562306a36Sopenharmony_ci				 struct irdma_dma_mem *val_mem, u8 hmc_fn_id);
6662306a36Sopenharmony_ciint irdma_alloc_query_fpm_buf(struct irdma_sc_dev *dev,
6762306a36Sopenharmony_ci			      struct irdma_dma_mem *mem);
6862306a36Sopenharmony_civoid *irdma_remove_cqp_head(struct irdma_sc_dev *dev);
6962306a36Sopenharmony_civoid irdma_term_modify_qp(struct irdma_sc_qp *qp, u8 next_state, u8 term,
7062306a36Sopenharmony_ci			  u8 term_len);
7162306a36Sopenharmony_civoid irdma_terminate_done(struct irdma_sc_qp *qp, int timeout_occurred);
7262306a36Sopenharmony_civoid irdma_terminate_start_timer(struct irdma_sc_qp *qp);
7362306a36Sopenharmony_civoid irdma_terminate_del_timer(struct irdma_sc_qp *qp);
7462306a36Sopenharmony_civoid irdma_hw_stats_start_timer(struct irdma_sc_vsi *vsi);
7562306a36Sopenharmony_civoid irdma_hw_stats_stop_timer(struct irdma_sc_vsi *vsi);
7662306a36Sopenharmony_civoid wr32(struct irdma_hw *hw, u32 reg, u32 val);
7762306a36Sopenharmony_ciu32 rd32(struct irdma_hw *hw, u32 reg);
7862306a36Sopenharmony_ciu64 rd64(struct irdma_hw *hw, u32 reg);
7962306a36Sopenharmony_ciint irdma_map_vm_page_list(struct irdma_hw *hw, void *va, dma_addr_t *pg_dma,
8062306a36Sopenharmony_ci			   u32 pg_cnt);
8162306a36Sopenharmony_civoid irdma_unmap_vm_page_list(struct irdma_hw *hw, dma_addr_t *pg_dma, u32 pg_cnt);
8262306a36Sopenharmony_ci#endif /* IRDMA_OSDEP_H */
83