#ifndef __ECORE_HSI_INIT_TOOL__
#define __ECORE_HSI_INIT_TOOL__
#define GRC_ADDR_BITS 23
#define MAX_GRC_ADDR ((1 << GRC_ADDR_BITS) - 1)
#define ANY_PHASE_ID 0xffff
#define MAX_ZIPPED_SIZE 8192
enum chip_ids
{
CHIP_BB,
CHIP_K2,
CHIP_E5,
MAX_CHIP_IDS
};
struct fw_asserts_ram_section
{
__le16 section_ram_line_offset ;
__le16 section_ram_line_size ;
u8 list_dword_offset ;
u8 list_element_dword_size ;
u8 list_num_elements ;
u8 list_next_index_dword_offset ;
};
struct fw_ver_num
{
u8 major ;
u8 minor ;
u8 rev ;
u8 eng ;
};
struct fw_ver_info
{
__le16 tools_ver ;
u8 image_id ;
u8 reserved1;
struct fw_ver_num num ;
__le32 timestamp ;
__le32 reserved2;
};
struct fw_info
{
struct fw_ver_info ver ;
struct fw_asserts_ram_section fw_asserts_section ;
};
struct fw_info_location
{
__le32 grc_addr ;
__le32 size ;
};
enum init_modes
{
MODE_BB_A0_DEPRECATED,
MODE_BB,
MODE_K2,
MODE_ASIC,
MODE_EMUL_REDUCED,
MODE_EMUL_FULL,
MODE_FPGA,
MODE_CHIPSIM,
MODE_SF,
MODE_MF_SD,
MODE_MF_SI,
MODE_PORTS_PER_ENG_1,
MODE_PORTS_PER_ENG_2,
MODE_PORTS_PER_ENG_4,
MODE_100G,
MODE_E5,
MAX_INIT_MODES
};
enum init_phases
{
PHASE_ENGINE,
PHASE_PORT,
PHASE_PF,
PHASE_VF,
PHASE_QM_PF,
MAX_INIT_PHASES
};
enum init_split_types
{
SPLIT_TYPE_NONE,
SPLIT_TYPE_PORT,
SPLIT_TYPE_PF,
SPLIT_TYPE_PORT_PF,
SPLIT_TYPE_VF,
MAX_INIT_SPLIT_TYPES
};
struct bin_buffer_hdr
{
__le32 offset ;
__le32 length ;
};
enum bin_init_buffer_type
{
BIN_BUF_INIT_FW_VER_INFO ,
BIN_BUF_INIT_CMD ,
BIN_BUF_INIT_VAL ,
BIN_BUF_INIT_MODE_TREE ,
BIN_BUF_INIT_IRO ,
MAX_BIN_INIT_BUFFER_TYPE
};
struct init_array_raw_hdr
{
__le32 data;
#define INIT_ARRAY_RAW_HDR_TYPE_MASK 0xF
#define INIT_ARRAY_RAW_HDR_TYPE_SHIFT 0
#define INIT_ARRAY_RAW_HDR_PARAMS_MASK 0xFFFFFFF
#define INIT_ARRAY_RAW_HDR_PARAMS_SHIFT 4
};
struct init_array_standard_hdr
{
__le32 data;
#define INIT_ARRAY_STANDARD_HDR_TYPE_MASK 0xF
#define INIT_ARRAY_STANDARD_HDR_TYPE_SHIFT 0
#define INIT_ARRAY_STANDARD_HDR_SIZE_MASK 0xFFFFFFF
#define INIT_ARRAY_STANDARD_HDR_SIZE_SHIFT 4
};
struct init_array_zipped_hdr
{
__le32 data;
#define INIT_ARRAY_ZIPPED_HDR_TYPE_MASK 0xF
#define INIT_ARRAY_ZIPPED_HDR_TYPE_SHIFT 0
#define INIT_ARRAY_ZIPPED_HDR_ZIPPED_SIZE_MASK 0xFFFFFFF
#define INIT_ARRAY_ZIPPED_HDR_ZIPPED_SIZE_SHIFT 4
};
struct init_array_pattern_hdr
{
__le32 data;
#define INIT_ARRAY_PATTERN_HDR_TYPE_MASK 0xF
#define INIT_ARRAY_PATTERN_HDR_TYPE_SHIFT 0
#define INIT_ARRAY_PATTERN_HDR_PATTERN_SIZE_MASK 0xF
#define INIT_ARRAY_PATTERN_HDR_PATTERN_SIZE_SHIFT 4
#define INIT_ARRAY_PATTERN_HDR_REPETITIONS_MASK 0xFFFFFF
#define INIT_ARRAY_PATTERN_HDR_REPETITIONS_SHIFT 8
};
union init_array_hdr
{
struct init_array_raw_hdr raw ;
struct init_array_standard_hdr standard ;
struct init_array_zipped_hdr zipped ;
struct init_array_pattern_hdr pattern ;
};
enum init_array_types
{
INIT_ARR_STANDARD ,
INIT_ARR_ZIPPED ,
INIT_ARR_PATTERN ,
MAX_INIT_ARRAY_TYPES
};
struct init_callback_op
{
__le32 op_data;
#define INIT_CALLBACK_OP_OP_MASK 0xF
#define INIT_CALLBACK_OP_OP_SHIFT 0
#define INIT_CALLBACK_OP_RESERVED_MASK 0xFFFFFFF
#define INIT_CALLBACK_OP_RESERVED_SHIFT 4
__le16 callback_id ;
__le16 block_id ;
};
struct init_delay_op
{
__le32 op_data;
#define INIT_DELAY_OP_OP_MASK 0xF
#define INIT_DELAY_OP_OP_SHIFT 0
#define INIT_DELAY_OP_RESERVED_MASK 0xFFFFFFF
#define INIT_DELAY_OP_RESERVED_SHIFT 4
__le32 delay ;
};
struct init_if_mode_op
{
__le32 op_data;
#define INIT_IF_MODE_OP_OP_MASK 0xF
#define INIT_IF_MODE_OP_OP_SHIFT 0
#define INIT_IF_MODE_OP_RESERVED1_MASK 0xFFF
#define INIT_IF_MODE_OP_RESERVED1_SHIFT 4
#define INIT_IF_MODE_OP_CMD_OFFSET_MASK 0xFFFF
#define INIT_IF_MODE_OP_CMD_OFFSET_SHIFT 16
__le16 reserved2;
__le16 modes_buf_offset ;
};
struct init_if_phase_op
{
__le32 op_data;
#define INIT_IF_PHASE_OP_OP_MASK 0xF
#define INIT_IF_PHASE_OP_OP_SHIFT 0
#define INIT_IF_PHASE_OP_DMAE_ENABLE_MASK 0x1
#define INIT_IF_PHASE_OP_DMAE_ENABLE_SHIFT 4
#define INIT_IF_PHASE_OP_RESERVED1_MASK 0x7FF
#define INIT_IF_PHASE_OP_RESERVED1_SHIFT 5
#define INIT_IF_PHASE_OP_CMD_OFFSET_MASK 0xFFFF
#define INIT_IF_PHASE_OP_CMD_OFFSET_SHIFT 16
__le32 phase_data;
#define INIT_IF_PHASE_OP_PHASE_MASK 0xFF
#define INIT_IF_PHASE_OP_PHASE_SHIFT 0
#define INIT_IF_PHASE_OP_RESERVED2_MASK 0xFF
#define INIT_IF_PHASE_OP_RESERVED2_SHIFT 8
#define INIT_IF_PHASE_OP_PHASE_ID_MASK 0xFFFF
#define INIT_IF_PHASE_OP_PHASE_ID_SHIFT 16
};
enum init_mode_ops
{
INIT_MODE_OP_NOT ,
INIT_MODE_OP_OR ,
INIT_MODE_OP_AND ,
MAX_INIT_MODE_OPS
};
struct init_raw_op
{
__le32 op_data;
#define INIT_RAW_OP_OP_MASK 0xF
#define INIT_RAW_OP_OP_SHIFT 0
#define INIT_RAW_OP_PARAM1_MASK 0xFFFFFFF
#define INIT_RAW_OP_PARAM1_SHIFT 4
__le32 param2 ;
};
struct init_op_array_params
{
__le16 size ;
__le16 offset ;
};
union init_write_args
{
__le32 inline_val ;
__le32 zeros_count ;
__le32 array_offset ;
struct init_op_array_params runtime ;
};
struct init_write_op
{
__le32 data;
#define INIT_WRITE_OP_OP_MASK 0xF
#define INIT_WRITE_OP_OP_SHIFT 0
#define INIT_WRITE_OP_SOURCE_MASK 0x7
#define INIT_WRITE_OP_SOURCE_SHIFT 4
#define INIT_WRITE_OP_RESERVED_MASK 0x1
#define INIT_WRITE_OP_RESERVED_SHIFT 7
#define INIT_WRITE_OP_WIDE_BUS_MASK 0x1
#define INIT_WRITE_OP_WIDE_BUS_SHIFT 8
#define INIT_WRITE_OP_ADDRESS_MASK 0x7FFFFF
#define INIT_WRITE_OP_ADDRESS_SHIFT 9
union init_write_args args ;
};
struct init_read_op
{
__le32 op_data;
#define INIT_READ_OP_OP_MASK 0xF
#define INIT_READ_OP_OP_SHIFT 0
#define INIT_READ_OP_POLL_TYPE_MASK 0xF
#define INIT_READ_OP_POLL_TYPE_SHIFT 4
#define INIT_READ_OP_RESERVED_MASK 0x1
#define INIT_READ_OP_RESERVED_SHIFT 8
#define INIT_READ_OP_ADDRESS_MASK 0x7FFFFF
#define INIT_READ_OP_ADDRESS_SHIFT 9
__le32 expected_val ;
};
union init_op
{
struct init_raw_op raw ;
struct init_write_op write ;
struct init_read_op read ;
struct init_if_mode_op if_mode ;
struct init_if_phase_op if_phase ;
struct init_callback_op callback ;
struct init_delay_op delay ;
};
enum init_op_types
{
INIT_OP_READ ,
INIT_OP_WRITE ,
INIT_OP_IF_MODE ,
INIT_OP_IF_PHASE ,
INIT_OP_DELAY ,
INIT_OP_CALLBACK ,
MAX_INIT_OP_TYPES
};
enum init_poll_types
{
INIT_POLL_NONE ,
INIT_POLL_EQ ,
INIT_POLL_OR ,
INIT_POLL_AND ,
MAX_INIT_POLL_TYPES
};
enum init_source_types
{
INIT_SRC_INLINE ,
INIT_SRC_ZEROS ,
INIT_SRC_ARRAY ,
INIT_SRC_RUNTIME ,
MAX_INIT_SOURCE_TYPES
};
struct iro
{
__le32 base ;
__le16 m1 ;
__le16 m2 ;
__le16 m3 ;
__le16 size ;
};
#endif