#ifndef _CP_HSI_H
#define _CP_HSI_H
#define CP_HSI_OFFSET 0x4
typedef struct _fio_dbg_b_t {
u8_t cpu_src;
u8_t is_read;
u16_t fio_addr;
u32_t fio_data;
}fio_dbg_b_t;
typedef struct _fio_dbg_l_t {
u16_t fio_addr;
u8_t is_read;
u8_t cpu_src;
u32_t fio_data;
}fio_dbg_l_t;
#if defined(LITTLE_ENDIAN)
typedef fio_dbg_l_t fio_dbg_t;
#elif defined(BIG_ENDIAN)
typedef fio_dbg_b_t fio_dbg_t;
#endif
typedef struct _cp_hsi_t {
fw_version_t version;
u32_t fw_doorbell;
#define KWQ_READY (1<<0)
#define KWQ1_READY (1<<1)
#define KWQ2_READY (1<<2)
#define KWQ3_READY (1<<3)
u32_t iscsi_sq_size;
u32_t cp_cpq_kwq[2];
u32_t iscsi_xinan_unit;
u32_t pg_ctx_map;
u64_t volatile idle_count;
u32_t iscsi_sq_wqes_per_page;
u32_t iscsi_sq_num_pages;
u32_t cp_gen_bd_max;
u32_t iscsi_teton_l4_cmd_offset;
u32_t iscsi_teton_l5_offset;
u32_t iscsi_teton_l5_cmd_offset;
u32_t iscsi_task_offset;
u32_t iscsi_r2tq_offset;
u32_t iscsi_max_num_of_tasks;
u32_t iscsi_max_num_of_ccells;
u32_t iscsi_dbg_ctx_addr_h;
u32_t iscsi_dbg_ctx_addr_l;
u32_t iscsi_dbg_ctx_cid;
u32_t iscsi_ctx_map;
u32_t num_tcp_nagle_allow;
u32_t timer_scan_freq;
u32_t iscsi_max_conn;
u32_t num_kwqe_limit;
u32_t idle_ts_period;
u32_t toe_ofld_retx_cnt;
fio_dbg_t fio_dbg_info;
u32_t l2_cid_cnt;
u32_t unused;
}cp_hsi_t;
#define CP_HSI_OFFSETOFF(m) (OFFSETOF(cp_hsi_t,m) + 0x10)
#define CP_HSI_SIZEOF(m) (sizeof (((cp_hsi_t *)0)->m))
#define TEST_CP_HSI(){ \
if (0){ \
1/(CP_HSI_OFFSETOFF(version) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x000) && \
CP_HSI_OFFSETOFF(fw_doorbell) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x010) && \
CP_HSI_OFFSETOFF(iscsi_sq_size) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x014) && \
CP_HSI_OFFSETOFF(cp_cpq_kwq[0]) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x018) && \
CP_HSI_OFFSETOFF(cp_cpq_kwq[1]) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x01c) && \
CP_HSI_OFFSETOFF(iscsi_xinan_unit) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x020) && \
CP_HSI_OFFSETOFF(pg_ctx_map) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x024) && \
CP_HSI_OFFSETOFF(idle_count) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x028) && \
CP_HSI_OFFSETOFF(iscsi_sq_wqes_per_page) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x030) && \
CP_HSI_OFFSETOFF(iscsi_sq_num_pages) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x034) && \
CP_HSI_OFFSETOFF(cp_gen_bd_max) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x038) && \
CP_HSI_OFFSETOFF(iscsi_teton_l4_cmd_offset) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x03c) && \
CP_HSI_OFFSETOFF(iscsi_teton_l5_offset) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x040) && \
CP_HSI_OFFSETOFF(iscsi_teton_l5_cmd_offset) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x044) && \
CP_HSI_OFFSETOFF(iscsi_task_offset) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x048) && \
CP_HSI_OFFSETOFF(iscsi_r2tq_offset) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x04c) && \
CP_HSI_OFFSETOFF(iscsi_max_num_of_tasks) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x050) && \
CP_HSI_OFFSETOFF(iscsi_max_num_of_ccells) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x054) && \
CP_HSI_OFFSETOFF(iscsi_dbg_ctx_addr_h) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x058) && \
CP_HSI_OFFSETOFF(iscsi_dbg_ctx_addr_l) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x05c) && \
CP_HSI_OFFSETOFF(iscsi_dbg_ctx_cid) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x060) && \
CP_HSI_OFFSETOFF(iscsi_ctx_map) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x064) && \
CP_HSI_OFFSETOFF(num_tcp_nagle_allow) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x068) && \
CP_HSI_OFFSETOFF(timer_scan_freq) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x06c) && \
CP_HSI_OFFSETOFF(iscsi_max_conn) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x070) && \
CP_HSI_OFFSETOFF(num_kwqe_limit) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x074) && \
CP_HSI_OFFSETOFF(idle_ts_period) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x078) && \
CP_HSI_OFFSETOFF(toe_ofld_retx_cnt) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x07c) && \
CP_HSI_OFFSETOFF(fio_dbg_info) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x080) && \
CP_HSI_OFFSETOFF(l2_cid_cnt) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x088) && \
CP_HSI_OFFSETOFF(unused) == (CP_HSI_OFFSET * sizeof(u32_t) + 0x08C) && \
CP_HSI_OFFSETOFF(unused)+CP_HSI_SIZEOF(unused) == (CP_HSI_OFFSET * sizeof(u32_t) + sizeof(cp_hsi_t)));}}
#endif