hifc/hifc/hifc_cqm_object.h

245 lines
5.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Huawei Hifc PCI Express Linux driver
* Copyright(c) 2017 Huawei Technologies Co., Ltd
*
*/
#ifndef __CQM_OBJECT_H__
#define __CQM_OBJECT_H__
#define CLA_TABLE_PAGE_ORDER (0)
#define CQM_4K_PAGE_ORDER (0)
#define CQM_CQ_DEPTH_MAX (32768)
#define CQM_CQ_DEPTH_MIN (256)
#define CQM_BAT_SIZE_FT_PF (192)
#define CQM_WQE_WF_LINK 1
#define CQM_WQE_WF_NORMAL 0
#define CQM_QUEUE_LINK_MODE 0
#define CQM_QUEUE_RING_MODE 1
#define CQM_4K_PAGE_SIZE 4096
#define CQM_SUCCESS 0
#define CQM_FAIL -1
#define CQM_QUEUE_TOE_SRQ_LINK_MODE 2
#define CQM_CMD_TIMEOUT 10000 /*ms*/
#define CQM_INDEX_INVALID ~(0U)
#define CQM_INDEX_RESERVED (0xfffff) /* reserved by cqm alloc */
enum cqm_bat_entry_type_e {
CQM_BAT_ENTRY_T_CFG = 0,
CQM_BAT_ENTRY_T_HASH,
CQM_BAT_ENTRY_T_QPC,
CQM_BAT_ENTRY_T_SCQC,
CQM_BAT_ENTRY_T_SRQC,
CQM_BAT_ENTRY_T_MPT,
CQM_BAT_ENTRY_T_GID,
CQM_BAT_ENTRY_T_LUN,
CQM_BAT_ENTRY_T_TASKMAP,
CQM_BAT_ENTRY_T_L3I,
CQM_BAT_ENTRY_T_CHILDC,
CQM_BAT_ENTRY_T_TIMER,
CQM_BAT_ENTRY_T_XID2CID,
CQM_BAT_ENTRY_T_REORDER,
CQM_BAT_ENTRY_T_INVALID = 0xff,
};
enum cqm_cmd_type_e {
CQM_CMD_T_INVALID = 0,
CQM_CMD_T_BAT_UPDATE,
CQM_CMD_T_CLA_UPDATE,
CQM_CMD_T_BLOOMFILTER_SET,
CQM_CMD_T_BLOOMFILTER_CLEAR,
CQM_CMD_T_COMPACT_SRQ_UPDATE,
CQM_CMD_T_CLA_CACHE_INVALID,
CQM_CMD_T_BLOOMFILTER_INIT,
QM_CMD_T_MAX
};
/*linkwqe*/
#define CQM_LINK_WQE_CTRLSL_VALUE 2
#define CQM_LINK_WQE_LP_VALID 1
#define CQM_LINK_WQE_LP_INVALID 0
#define CQM_LINK_WQE_OWNER_VALID 1
#define CQM_LINK_WQE_OWNER_INVALID 0
/*CLA update mode*/
#define CQM_CLA_RECORD_NEW_GPA 0
#define CQM_CLA_DEL_GPA_WITHOUT_CACHE_INVALID 1
#define CQM_CLA_DEL_GPA_WITH_CACHE_INVALID 2
#define CQM_CLA_LVL_0 0
#define CQM_CLA_LVL_1 1
#define CQM_CLA_LVL_2 2
#define CQM_MAX_INDEX_BIT 19
#define CQM_CHIP_CACHELINE 256
enum cqm_cmd_ack_type_e {
CQM_CMD_ACK_TYPE_CMDQ = 0, /* ack: write back to cmdq */
CQM_CMD_ACK_TYPE_SHARE_CQN = 1, /* ack report scq by root ctx ctx */
CQM_CMD_ACK_TYPE_APP_CQN = 2 /* ack report scq by parent ctx */
};
struct cqm_bat_entry_cfg_s {
u32 cur_conn_num_h_4 :4;
u32 rsv1 :4;
u32 max_conn_num :20;
u32 rsv2 :4;
u32 max_conn_cache :10;
u32 rsv3 :6;
u32 cur_conn_num_l_16 :16;
u32 bloom_filter_addr :16;
u32 cur_conn_cache :10;
u32 rsv4 :6;
u32 bucket_num :16;
u32 bloom_filter_len :16;
};
#define CQM_BAT_NO_BYPASS_CACHE 0
#define CQM_BAT_ENTRY_SIZE_256 0
#define CQM_BAT_ENTRY_SIZE_512 1
#define CQM_BAT_ENTRY_SIZE_1024 2
struct cqm_bat_entry_standerd_s {
u32 entry_size :2;
u32 rsv1 :6;
u32 max_number :20;
u32 rsv2 :4;
u32 cla_gpa_h :32;
u32 cla_gpa_l :32;
u32 rsv3 :8;
u32 z :5;
u32 y :5;
u32 x :5;
u32 rsv24 :1;
u32 bypass :1;
u32 cla_level :2;
u32 rsv5 :5;
};
struct cqm_bat_entry_taskmap_s {
u32 gpa0_h;
u32 gpa0_l;
u32 gpa1_h;
u32 gpa1_l;
u32 gpa2_h;
u32 gpa2_l;
u32 gpa3_h;
u32 gpa3_l;
};
struct cqm_cla_cache_invalid_cmd_s {
u32 gpa_h;
u32 gpa_l;
u32 cache_size;/* CLA cache size=4096B */
};
struct cqm_cla_update_cmd_s {
/* need to update gpa addr */
u32 gpa_h;
u32 gpa_l;
/* update value */
u32 value_h;
u32 value_l;
};
struct cqm_bat_update_cmd_s {
#define CQM_BAT_MAX_SIZE 256
u32 offset; /* byte offset,16Byte aligned */
u32 byte_len; /* max size: 256byte */
u8 data[CQM_BAT_MAX_SIZE];
};
struct cqm_handle_s;
struct cqm_linkwqe_s {
u32 rsv1 :14;
u32 wf :1;
u32 rsv2 :14;
u32 ctrlsl :2;
u32 o :1;
u32 rsv3 :31;
u32 lp :1;
u32 next_page_gpa_h;
u32 next_page_gpa_l;
u32 next_buffer_addr_h;
u32 next_buffer_addr_l;
};
struct cqm_srq_linkwqe_s {
struct cqm_linkwqe_s linkwqe;
/*add by wss for srq*/
u32 current_buffer_gpa_h;
u32 current_buffer_gpa_l;
u32 current_buffer_addr_h;
u32 current_buffer_addr_l;
u32 fast_link_page_addr_h;
u32 fast_link_page_addr_l;
u32 fixed_next_buffer_addr_h;
u32 fixed_next_buffer_addr_l;
};
union cqm_linkwqe_first_64b_s {
struct cqm_linkwqe_s basic_linkwqe;
u32 value[16];
};
struct cqm_linkwqe_second_64b_s {
u32 rsvd0[4];
u32 rsvd1[4];
union {
struct {
u32 rsvd0[3];
u32 rsvd1 :29;
u32 toe_o :1;
u32 resvd2 :2;
} bs;
u32 value[4];
} third_16B;
union {
struct {
u32 rsvd0[2];
u32 rsvd1 :31;
u32 ifoe_o :1;
u32 rsvd2;
} bs;
u32 value[4];
} forth_16B;
};
struct cqm_linkwqe_128b_s {
union cqm_linkwqe_first_64b_s first_64b;
struct cqm_linkwqe_second_64b_s second_64b;
};
s32 cqm_bat_init(struct cqm_handle_s *cqm_handle);
void cqm_bat_uninit(struct cqm_handle_s *cqm_handle);
s32 cqm_cla_init(struct cqm_handle_s *cqm_handle);
void cqm_cla_uninit(struct cqm_handle_s *cqm_handle);
s32 cqm_bitmap_init(struct cqm_handle_s *cqm_handle);
void cqm_bitmap_uninit(struct cqm_handle_s *cqm_handle);
s32 cqm_object_table_init(struct cqm_handle_s *cqm_handle);
void cqm_object_table_uninit(struct cqm_handle_s *cqm_handle);
#endif /* __CQM_OBJECT_H__ */