1d9ce1917SZiyang Xuan /* SPDX-License-Identifier: BSD-3-Clause 2d9ce1917SZiyang Xuan * Copyright(c) 2017 Huawei Technologies Co., Ltd 3d9ce1917SZiyang Xuan */ 4d9ce1917SZiyang Xuan 5d9ce1917SZiyang Xuan #ifndef _HINIC_PMD_HWDEV_H_ 6d9ce1917SZiyang Xuan #define _HINIC_PMD_HWDEV_H_ 7d9ce1917SZiyang Xuan 8d9ce1917SZiyang Xuan #include "hinic_pmd_cmd.h" 9d9ce1917SZiyang Xuan 10d9ce1917SZiyang Xuan #define HINIC_PAGE_SIZE_MAX 20 11d9ce1917SZiyang Xuan 12d9ce1917SZiyang Xuan #define HINIC_MGMT_CMD_UNSUPPORTED 0xFF 13d9ce1917SZiyang Xuan #define HINIC_PF_SET_VF_ALREADY 0x4 14d9ce1917SZiyang Xuan 15d9ce1917SZiyang Xuan #define MAX_PCIE_DFX_BUF_SIZE 1024 16d9ce1917SZiyang Xuan 17ce07a121SXiaoyun Wang #define HINIC_DEV_BUSY_ACTIVE_FW 0xFE 18ce07a121SXiaoyun Wang 19d9ce1917SZiyang Xuan /* dma pool */ 20d9ce1917SZiyang Xuan struct dma_pool { 21*b8582d05SXiaoyun Wang rte_atomic32_t inuse; 22d9ce1917SZiyang Xuan size_t elem_size; 23d9ce1917SZiyang Xuan size_t align; 24d9ce1917SZiyang Xuan size_t boundary; 25d9ce1917SZiyang Xuan void *hwdev; 26d9ce1917SZiyang Xuan 27d9ce1917SZiyang Xuan char name[32]; 28d9ce1917SZiyang Xuan }; 29d9ce1917SZiyang Xuan 30d9ce1917SZiyang Xuan enum hinic_res_state { 31d9ce1917SZiyang Xuan HINIC_RES_CLEAN = 0, 32d9ce1917SZiyang Xuan HINIC_RES_ACTIVE = 1, 33d9ce1917SZiyang Xuan }; 34d9ce1917SZiyang Xuan 35d9ce1917SZiyang Xuan enum hilink_info_print_event { 36d9ce1917SZiyang Xuan HILINK_EVENT_LINK_UP = 1, 37d9ce1917SZiyang Xuan HILINK_EVENT_LINK_DOWN, 38d9ce1917SZiyang Xuan HILINK_EVENT_CABLE_PLUGGED, 39d9ce1917SZiyang Xuan HILINK_EVENT_MAX_TYPE, 40d9ce1917SZiyang Xuan }; 41d9ce1917SZiyang Xuan 42d9ce1917SZiyang Xuan struct hinic_port_link_status { 43d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 44d9ce1917SZiyang Xuan 45d9ce1917SZiyang Xuan u16 func_id; 46d9ce1917SZiyang Xuan u8 link; 47d9ce1917SZiyang Xuan u8 port_id; 48d9ce1917SZiyang Xuan }; 49d9ce1917SZiyang Xuan 50d9ce1917SZiyang Xuan enum link_err_status { 51d9ce1917SZiyang Xuan LINK_ERR_MODULE_UNRECOGENIZED, 52d9ce1917SZiyang Xuan LINK_ERR_NUM, 53d9ce1917SZiyang Xuan }; 54d9ce1917SZiyang Xuan 55d9ce1917SZiyang Xuan struct hinic_cable_plug_event { 56d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 57d9ce1917SZiyang Xuan 58d9ce1917SZiyang Xuan u16 func_id; 59d9ce1917SZiyang Xuan u8 plugged; /* 0: unplugged, 1: plugged */ 60d9ce1917SZiyang Xuan u8 port_id; 61d9ce1917SZiyang Xuan }; 62d9ce1917SZiyang Xuan 63d9ce1917SZiyang Xuan struct hinic_link_err_event { 64d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 65d9ce1917SZiyang Xuan 66d9ce1917SZiyang Xuan u16 func_id; 67d9ce1917SZiyang Xuan u8 err_type; 68d9ce1917SZiyang Xuan u8 port_id; 69d9ce1917SZiyang Xuan }; 70d9ce1917SZiyang Xuan 71d9ce1917SZiyang Xuan struct hinic_cons_idx_attr { 72d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 73d9ce1917SZiyang Xuan 74d9ce1917SZiyang Xuan u16 func_idx; 75d9ce1917SZiyang Xuan u8 dma_attr_off; 76d9ce1917SZiyang Xuan u8 pending_limit; 77d9ce1917SZiyang Xuan u8 coalescing_time; 78d9ce1917SZiyang Xuan u8 intr_en; 79d9ce1917SZiyang Xuan u16 intr_idx; 80d9ce1917SZiyang Xuan u32 l2nic_sqn; 81d9ce1917SZiyang Xuan u32 sq_id; 82d9ce1917SZiyang Xuan u64 ci_addr; 83d9ce1917SZiyang Xuan }; 84d9ce1917SZiyang Xuan 85d9ce1917SZiyang Xuan struct hinic_clear_doorbell { 86d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 87d9ce1917SZiyang Xuan 88d9ce1917SZiyang Xuan u16 func_idx; 89d9ce1917SZiyang Xuan u8 ppf_idx; 90d9ce1917SZiyang Xuan u8 rsvd1; 91d9ce1917SZiyang Xuan }; 92d9ce1917SZiyang Xuan 93d9ce1917SZiyang Xuan struct hinic_clear_resource { 94d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 95d9ce1917SZiyang Xuan 96d9ce1917SZiyang Xuan u16 func_idx; 97d9ce1917SZiyang Xuan u8 ppf_idx; 98d9ce1917SZiyang Xuan u8 rsvd1; 99d9ce1917SZiyang Xuan }; 100d9ce1917SZiyang Xuan 101d9ce1917SZiyang Xuan struct hinic_cmd_set_res_state { 102d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 103d9ce1917SZiyang Xuan 104d9ce1917SZiyang Xuan u16 func_idx; 105d9ce1917SZiyang Xuan u8 state; 106d9ce1917SZiyang Xuan u8 rsvd1; 107d9ce1917SZiyang Xuan u32 rsvd2; 108d9ce1917SZiyang Xuan }; 109d9ce1917SZiyang Xuan 110d9ce1917SZiyang Xuan struct hinic_l2nic_reset { 111d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 112d9ce1917SZiyang Xuan 113d9ce1917SZiyang Xuan u16 func_id; 114d9ce1917SZiyang Xuan u16 rsvd1; 115d9ce1917SZiyang Xuan }; 116d9ce1917SZiyang Xuan 117d9ce1917SZiyang Xuan struct hinic_page_size { 118d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 119d9ce1917SZiyang Xuan 120d9ce1917SZiyang Xuan u16 func_idx; 121d9ce1917SZiyang Xuan u8 ppf_idx; 122d9ce1917SZiyang Xuan u8 page_size; 123d9ce1917SZiyang Xuan u32 rsvd; 124d9ce1917SZiyang Xuan }; 125d9ce1917SZiyang Xuan 126d9ce1917SZiyang Xuan struct hinic_msix_config { 127d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 128d9ce1917SZiyang Xuan 129d9ce1917SZiyang Xuan u16 func_id; 130d9ce1917SZiyang Xuan u16 msix_index; 131d9ce1917SZiyang Xuan u8 pending_cnt; 132d9ce1917SZiyang Xuan u8 coalesct_timer_cnt; 133d9ce1917SZiyang Xuan u8 lli_tmier_cnt; 134d9ce1917SZiyang Xuan u8 lli_credit_cnt; 135d9ce1917SZiyang Xuan u8 resend_timer_cnt; 136d9ce1917SZiyang Xuan u8 rsvd1[3]; 137d9ce1917SZiyang Xuan }; 138d9ce1917SZiyang Xuan 139d9ce1917SZiyang Xuan /* defined by chip */ 140d9ce1917SZiyang Xuan enum hinic_fault_type { 141d9ce1917SZiyang Xuan FAULT_TYPE_CHIP, 142d9ce1917SZiyang Xuan FAULT_TYPE_UCODE, 143d9ce1917SZiyang Xuan FAULT_TYPE_MEM_RD_TIMEOUT, 144d9ce1917SZiyang Xuan FAULT_TYPE_MEM_WR_TIMEOUT, 145d9ce1917SZiyang Xuan FAULT_TYPE_REG_RD_TIMEOUT, 146d9ce1917SZiyang Xuan FAULT_TYPE_REG_WR_TIMEOUT, 147d9ce1917SZiyang Xuan FAULT_TYPE_MAX, 148d9ce1917SZiyang Xuan }; 149d9ce1917SZiyang Xuan 150d9ce1917SZiyang Xuan /* defined by chip */ 151d9ce1917SZiyang Xuan enum hinic_fault_err_level { 152d9ce1917SZiyang Xuan /* default err_level=FAULT_LEVEL_FATAL if 153d9ce1917SZiyang Xuan * type==FAULT_TYPE_MEM_RD_TIMEOUT || FAULT_TYPE_MEM_WR_TIMEOUT || 154d9ce1917SZiyang Xuan * FAULT_TYPE_REG_RD_TIMEOUT || FAULT_TYPE_REG_WR_TIMEOUT || 155d9ce1917SZiyang Xuan * FAULT_TYPE_UCODE 156d9ce1917SZiyang Xuan * other: err_level in event.chip.err_level if type==FAULT_TYPE_CHIP 157d9ce1917SZiyang Xuan */ 158d9ce1917SZiyang Xuan FAULT_LEVEL_FATAL, 159d9ce1917SZiyang Xuan FAULT_LEVEL_SERIOUS_RESET, 160d9ce1917SZiyang Xuan FAULT_LEVEL_SERIOUS_FLR, 161d9ce1917SZiyang Xuan FAULT_LEVEL_GENERAL, 162d9ce1917SZiyang Xuan FAULT_LEVEL_SUGGESTION, 163d9ce1917SZiyang Xuan FAULT_LEVEL_MAX 164d9ce1917SZiyang Xuan }; 165d9ce1917SZiyang Xuan 166d9ce1917SZiyang Xuan /* defined by chip */ 167d9ce1917SZiyang Xuan struct hinic_fault_event { 168d9ce1917SZiyang Xuan /* enum hinic_fault_type */ 169d9ce1917SZiyang Xuan u8 type; 170d9ce1917SZiyang Xuan u8 rsvd0[3]; 171d9ce1917SZiyang Xuan union { 172d9ce1917SZiyang Xuan u32 val[4]; 173d9ce1917SZiyang Xuan /* valid only type==FAULT_TYPE_CHIP */ 174d9ce1917SZiyang Xuan struct { 175d9ce1917SZiyang Xuan u8 node_id; 176d9ce1917SZiyang Xuan /* enum hinic_fault_err_level */ 177d9ce1917SZiyang Xuan u8 err_level; 178d9ce1917SZiyang Xuan u8 err_type; 179d9ce1917SZiyang Xuan u8 rsvd1; 180d9ce1917SZiyang Xuan u32 err_csr_addr; 181d9ce1917SZiyang Xuan u32 err_csr_value; 182d9ce1917SZiyang Xuan /* func_id valid only err_level==FAULT_LEVEL_SERIOUS_FLR */ 183d9ce1917SZiyang Xuan u16 func_id; 184d9ce1917SZiyang Xuan u16 rsvd2; 185d9ce1917SZiyang Xuan } chip; 186d9ce1917SZiyang Xuan 187d9ce1917SZiyang Xuan /* valid only type==FAULT_TYPE_UCODE */ 188d9ce1917SZiyang Xuan struct { 189d9ce1917SZiyang Xuan u8 cause_id; 190d9ce1917SZiyang Xuan u8 core_id; 191d9ce1917SZiyang Xuan u8 c_id; 192d9ce1917SZiyang Xuan u8 rsvd3; 193d9ce1917SZiyang Xuan u32 epc; 194d9ce1917SZiyang Xuan u32 rsvd4; 195d9ce1917SZiyang Xuan u32 rsvd5; 196d9ce1917SZiyang Xuan } ucode; 197d9ce1917SZiyang Xuan 198d9ce1917SZiyang Xuan /* valid only type==FAULT_TYPE_MEM_RD_TIMEOUT || 199d9ce1917SZiyang Xuan * FAULT_TYPE_MEM_WR_TIMEOUT 200d9ce1917SZiyang Xuan */ 201d9ce1917SZiyang Xuan struct { 202d9ce1917SZiyang Xuan u32 err_csr_ctrl; 203d9ce1917SZiyang Xuan u32 err_csr_data; 204d9ce1917SZiyang Xuan u32 ctrl_tab; 205d9ce1917SZiyang Xuan u32 mem_index; 206d9ce1917SZiyang Xuan } mem_timeout; 207d9ce1917SZiyang Xuan 208d9ce1917SZiyang Xuan /* valid only type==FAULT_TYPE_REG_RD_TIMEOUT || 209d9ce1917SZiyang Xuan * FAULT_TYPE_REG_WR_TIMEOUT 210d9ce1917SZiyang Xuan */ 211d9ce1917SZiyang Xuan struct { 212d9ce1917SZiyang Xuan u32 err_csr; 213d9ce1917SZiyang Xuan u32 rsvd6; 214d9ce1917SZiyang Xuan u32 rsvd7; 215d9ce1917SZiyang Xuan u32 rsvd8; 216d9ce1917SZiyang Xuan } reg_timeout; 217d9ce1917SZiyang Xuan } event; 218d9ce1917SZiyang Xuan }; 219d9ce1917SZiyang Xuan 220d9ce1917SZiyang Xuan struct hinic_cmd_fault_event { 221d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 222d9ce1917SZiyang Xuan 223d9ce1917SZiyang Xuan struct hinic_fault_event event; 224d9ce1917SZiyang Xuan }; 225d9ce1917SZiyang Xuan 226d9ce1917SZiyang Xuan struct hinic_mgmt_watchdog_info { 227d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 228d9ce1917SZiyang Xuan 229d9ce1917SZiyang Xuan u32 curr_time_h; 230d9ce1917SZiyang Xuan u32 curr_time_l; 231d9ce1917SZiyang Xuan u32 task_id; 232d9ce1917SZiyang Xuan u32 rsv; 233d9ce1917SZiyang Xuan 234d9ce1917SZiyang Xuan u32 reg[13]; 235d9ce1917SZiyang Xuan u32 pc; 236d9ce1917SZiyang Xuan u32 lr; 237d9ce1917SZiyang Xuan u32 cpsr; 238d9ce1917SZiyang Xuan 239d9ce1917SZiyang Xuan u32 stack_top; 240d9ce1917SZiyang Xuan u32 stack_bottom; 241d9ce1917SZiyang Xuan u32 sp; 242d9ce1917SZiyang Xuan u32 curr_used; 243d9ce1917SZiyang Xuan u32 peak_used; 244d9ce1917SZiyang Xuan u32 is_overflow; 245d9ce1917SZiyang Xuan 246d9ce1917SZiyang Xuan u32 stack_actlen; 247d9ce1917SZiyang Xuan u8 data[1024]; 248d9ce1917SZiyang Xuan }; 249d9ce1917SZiyang Xuan 250d9ce1917SZiyang Xuan struct hinic_pcie_dfx_ntc { 251d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 252d9ce1917SZiyang Xuan 253d9ce1917SZiyang Xuan int len; 254d9ce1917SZiyang Xuan u32 rsvd; 255d9ce1917SZiyang Xuan }; 256d9ce1917SZiyang Xuan 257d9ce1917SZiyang Xuan struct hinic_pcie_dfx_info { 258d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 259d9ce1917SZiyang Xuan 260d9ce1917SZiyang Xuan u8 host_id; 261d9ce1917SZiyang Xuan u8 last; 262d9ce1917SZiyang Xuan u8 rsvd[2]; 263d9ce1917SZiyang Xuan u32 offset; 264d9ce1917SZiyang Xuan 265d9ce1917SZiyang Xuan u8 data[MAX_PCIE_DFX_BUF_SIZE]; 266d9ce1917SZiyang Xuan }; 267d9ce1917SZiyang Xuan 268d9ce1917SZiyang Xuan struct ffm_intr_info { 269d9ce1917SZiyang Xuan u8 node_id; 270d9ce1917SZiyang Xuan /* error level of the interrupt source */ 271d9ce1917SZiyang Xuan u8 err_level; 272d9ce1917SZiyang Xuan /* Classification by interrupt source properties */ 273d9ce1917SZiyang Xuan u16 err_type; 274d9ce1917SZiyang Xuan u32 err_csr_addr; 275d9ce1917SZiyang Xuan u32 err_csr_value; 276d9ce1917SZiyang Xuan }; 277d9ce1917SZiyang Xuan 278d9ce1917SZiyang Xuan struct hinic_board_info { 279d9ce1917SZiyang Xuan u32 board_type; 280d9ce1917SZiyang Xuan u32 port_num; 281d9ce1917SZiyang Xuan u32 port_speed; 282d9ce1917SZiyang Xuan u32 pcie_width; 283d9ce1917SZiyang Xuan u32 host_num; 284d9ce1917SZiyang Xuan u32 pf_num; 285d9ce1917SZiyang Xuan u32 vf_total_num; 286d9ce1917SZiyang Xuan u32 tile_num; 287d9ce1917SZiyang Xuan u32 qcm_num; 288d9ce1917SZiyang Xuan u32 core_num; 289d9ce1917SZiyang Xuan u32 work_mode; 290d9ce1917SZiyang Xuan u32 service_mode; 291d9ce1917SZiyang Xuan u32 pcie_mode; 292d9ce1917SZiyang Xuan u32 cfg_addr; 293d9ce1917SZiyang Xuan u32 boot_sel; 294d9ce1917SZiyang Xuan }; 295d9ce1917SZiyang Xuan 296d9ce1917SZiyang Xuan struct hinic_comm_board_info { 297d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 298d9ce1917SZiyang Xuan 299d9ce1917SZiyang Xuan struct hinic_board_info info; 300d9ce1917SZiyang Xuan 301d9ce1917SZiyang Xuan u32 rsvd1[5]; 302d9ce1917SZiyang Xuan }; 303d9ce1917SZiyang Xuan 304d9ce1917SZiyang Xuan struct hi30_ctle_data { 305d9ce1917SZiyang Xuan u8 ctlebst[3]; 306d9ce1917SZiyang Xuan u8 ctlecmband[3]; 307d9ce1917SZiyang Xuan u8 ctlermband[3]; 308d9ce1917SZiyang Xuan u8 ctleza[3]; 309d9ce1917SZiyang Xuan u8 ctlesqh[3]; 310d9ce1917SZiyang Xuan u8 ctleactgn[3]; 311d9ce1917SZiyang Xuan u8 ctlepassgn; 312d9ce1917SZiyang Xuan }; 313d9ce1917SZiyang Xuan 314d9ce1917SZiyang Xuan struct hi30_ffe_data { 315d9ce1917SZiyang Xuan u8 PRE2; 316d9ce1917SZiyang Xuan u8 PRE1; 317d9ce1917SZiyang Xuan u8 POST1; 318d9ce1917SZiyang Xuan u8 POST2; 319d9ce1917SZiyang Xuan u8 MAIN; 320d9ce1917SZiyang Xuan }; 321d9ce1917SZiyang Xuan 322d9ce1917SZiyang Xuan enum hilink_fec_type { 323d9ce1917SZiyang Xuan HILINK_FEC_RSFEC, 324d9ce1917SZiyang Xuan HILINK_FEC_BASEFEC, 325d9ce1917SZiyang Xuan HILINK_FEC_NOFEC, 326d9ce1917SZiyang Xuan HILINK_FEC_MAX_TYPE, 327d9ce1917SZiyang Xuan }; 328d9ce1917SZiyang Xuan 329d9ce1917SZiyang Xuan enum hinic_link_port_type { 330d9ce1917SZiyang Xuan LINK_PORT_FIBRE = 1, 331d9ce1917SZiyang Xuan LINK_PORT_ELECTRIC, 332d9ce1917SZiyang Xuan LINK_PORT_COPPER, 333d9ce1917SZiyang Xuan LINK_PORT_AOC, 334d9ce1917SZiyang Xuan LINK_PORT_BACKPLANE, 335d9ce1917SZiyang Xuan LINK_PORT_BASET, 336d9ce1917SZiyang Xuan LINK_PORT_MAX_TYPE, 337d9ce1917SZiyang Xuan }; 338d9ce1917SZiyang Xuan 339d9ce1917SZiyang Xuan enum hilink_fibre_subtype { 340d9ce1917SZiyang Xuan FIBRE_SUBTYPE_SR = 1, 341d9ce1917SZiyang Xuan FIBRE_SUBTYPE_LR, 342d9ce1917SZiyang Xuan FIBRE_SUBTYPE_MAX, 343d9ce1917SZiyang Xuan }; 344d9ce1917SZiyang Xuan 345d9ce1917SZiyang Xuan struct hinic_link_info { 346d9ce1917SZiyang Xuan u8 vendor_name[16]; 347d9ce1917SZiyang Xuan /* port type: 348d9ce1917SZiyang Xuan * 1 - fiber; 2 - electric; 3 - copper; 4 - AOC; 5 - backplane; 349d9ce1917SZiyang Xuan * 6 - baseT; 0xffff - unknown 350d9ce1917SZiyang Xuan * 351d9ce1917SZiyang Xuan * port subtype: 352d9ce1917SZiyang Xuan * Only when port_type is fiber: 353d9ce1917SZiyang Xuan * 1 - SR; 2 - LR 354d9ce1917SZiyang Xuan */ 355d9ce1917SZiyang Xuan u32 port_type; 356d9ce1917SZiyang Xuan u32 port_sub_type; 357d9ce1917SZiyang Xuan u32 cable_length; 358d9ce1917SZiyang Xuan u8 cable_temp; 359d9ce1917SZiyang Xuan u8 cable_max_speed;/* 1(G)/10(G)/25(G)... */ 360d9ce1917SZiyang Xuan u8 sfp_type; /* 0 - qsfp; 1 - sfp */ 361d9ce1917SZiyang Xuan u8 rsvd0; 362d9ce1917SZiyang Xuan u32 power[4]; /* uW; if is sfp, only power[2] is valid */ 363d9ce1917SZiyang Xuan 364d9ce1917SZiyang Xuan u8 an_state; /* 0 - off; 1 - on */ 365d9ce1917SZiyang Xuan u8 fec; /* 0 - RSFEC; 1 - BASEFEC; 2 - NOFEC */ 366d9ce1917SZiyang Xuan u16 speed; /* 1(G)/10(G)/25(G)... */ 367d9ce1917SZiyang Xuan 368d9ce1917SZiyang Xuan u8 cable_absent; /* 0 - cable present; 1 - cable unpresent */ 369d9ce1917SZiyang Xuan u8 alos; /* 0 - yes; 1 - no */ 370d9ce1917SZiyang Xuan u8 rx_los; /* 0 - yes; 1 - no */ 371d9ce1917SZiyang Xuan u8 pma_status; 372d9ce1917SZiyang Xuan u32 pma_dbg_info_reg; /* pma debug info: */ 373d9ce1917SZiyang Xuan u32 pma_signal_ok_reg; /* signal ok: */ 374d9ce1917SZiyang Xuan 375d9ce1917SZiyang Xuan u32 pcs_err_blk_cnt_reg; /* error block counter: */ 376d9ce1917SZiyang Xuan u32 rf_lf_status_reg; /* RF/LF status: */ 377d9ce1917SZiyang Xuan u8 pcs_link_reg; /* pcs link: */ 378d9ce1917SZiyang Xuan u8 mac_link_reg; /* mac link: */ 379d9ce1917SZiyang Xuan u8 mac_tx_en; 380d9ce1917SZiyang Xuan u8 mac_rx_en; 381d9ce1917SZiyang Xuan u32 pcs_err_cnt; 382d9ce1917SZiyang Xuan 383d9ce1917SZiyang Xuan u8 lane_used; 384d9ce1917SZiyang Xuan u8 hi30_ffe[5]; 385d9ce1917SZiyang Xuan u8 hi30_ctle[19]; 386d9ce1917SZiyang Xuan u8 hi30_dfe[14]; 387d9ce1917SZiyang Xuan u8 rsvd4; 388d9ce1917SZiyang Xuan }; 389d9ce1917SZiyang Xuan 390d9ce1917SZiyang Xuan struct hinic_hilink_link_info { 391d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 392d9ce1917SZiyang Xuan 393d9ce1917SZiyang Xuan u16 port_id; 394d9ce1917SZiyang Xuan u8 info_type; /* 1: link up 2: link down 3 cable plugged */ 395d9ce1917SZiyang Xuan u8 rsvd1; 396d9ce1917SZiyang Xuan 397d9ce1917SZiyang Xuan struct hinic_link_info info; 398d9ce1917SZiyang Xuan 399d9ce1917SZiyang Xuan u8 rsvd2[780]; 400d9ce1917SZiyang Xuan }; 401d9ce1917SZiyang Xuan 402d9ce1917SZiyang Xuan /* dma os dependency implementation */ 403d9ce1917SZiyang Xuan struct hinic_os_dep { 404d9ce1917SZiyang Xuan /* kernel dma alloc api */ 405d9ce1917SZiyang Xuan rte_atomic32_t dma_alloc_cnt; 406d9ce1917SZiyang Xuan rte_spinlock_t dma_hash_lock; 407d9ce1917SZiyang Xuan struct rte_hash *dma_addr_hash; 408d9ce1917SZiyang Xuan }; 409d9ce1917SZiyang Xuan 410d9ce1917SZiyang Xuan struct nic_interrupt_info { 411d9ce1917SZiyang Xuan u32 lli_set; 412d9ce1917SZiyang Xuan u32 interrupt_coalesc_set; 413d9ce1917SZiyang Xuan u16 msix_index; 414d9ce1917SZiyang Xuan u8 lli_credit_limit; 415d9ce1917SZiyang Xuan u8 lli_timer_cfg; 416d9ce1917SZiyang Xuan u8 pending_limt; 417d9ce1917SZiyang Xuan u8 coalesc_timer_cfg; 418d9ce1917SZiyang Xuan u8 resend_timer_cfg; 419d9ce1917SZiyang Xuan }; 420d9ce1917SZiyang Xuan 421d9ce1917SZiyang Xuan struct hinic_sq_attr { 422d9ce1917SZiyang Xuan u8 dma_attr_off; 423d9ce1917SZiyang Xuan u8 pending_limit; 424d9ce1917SZiyang Xuan u8 coalescing_time; 425d9ce1917SZiyang Xuan u8 intr_en; 426d9ce1917SZiyang Xuan u16 intr_idx; 427d9ce1917SZiyang Xuan u32 l2nic_sqn; 428d9ce1917SZiyang Xuan /* bit[63:2] is addr's high 62bit, bit[0] is valid flag */ 429d9ce1917SZiyang Xuan u64 ci_dma_base; 430d9ce1917SZiyang Xuan }; 431d9ce1917SZiyang Xuan 432d9ce1917SZiyang Xuan struct hinic_hwdev { 433d9ce1917SZiyang Xuan struct rte_pci_device *pcidev_hdl; 434d9ce1917SZiyang Xuan u32 ffm_num; 435d9ce1917SZiyang Xuan 436d9ce1917SZiyang Xuan /* dma memory allocator */ 437d9ce1917SZiyang Xuan struct hinic_os_dep os_dep; 438d9ce1917SZiyang Xuan struct hinic_hwif *hwif; 439d9ce1917SZiyang Xuan struct cfg_mgmt_info *cfg_mgmt; 440d9ce1917SZiyang Xuan struct hinic_aeqs *aeqs; 441ce07a121SXiaoyun Wang struct hinic_mbox_func_to_func *func_to_func; 442d9ce1917SZiyang Xuan struct hinic_msg_pf_to_mgmt *pf_to_mgmt; 443d9ce1917SZiyang Xuan struct hinic_cmdqs *cmdqs; 444d9ce1917SZiyang Xuan struct hinic_nic_io *nic_io; 445d9ce1917SZiyang Xuan }; 446d9ce1917SZiyang Xuan 447d9ce1917SZiyang Xuan int hinic_osdep_init(struct hinic_hwdev *hwdev); 448d9ce1917SZiyang Xuan 449d9ce1917SZiyang Xuan void hinic_osdep_deinit(struct hinic_hwdev *hwdev); 450d9ce1917SZiyang Xuan 451d9ce1917SZiyang Xuan void dma_free_coherent_volatile(void *hwdev, size_t size, 452d9ce1917SZiyang Xuan volatile void *virt, dma_addr_t phys); 453d9ce1917SZiyang Xuan 454d9ce1917SZiyang Xuan int hinic_get_board_info(void *hwdev, struct hinic_board_info *info); 455d9ce1917SZiyang Xuan 456d9ce1917SZiyang Xuan int hinic_set_ci_table(void *hwdev, u16 q_id, struct hinic_sq_attr *attr); 457d9ce1917SZiyang Xuan 458d9ce1917SZiyang Xuan int hinic_func_rx_tx_flush(struct hinic_hwdev *hwdev); 459d9ce1917SZiyang Xuan 460d9ce1917SZiyang Xuan int hinic_set_interrupt_cfg(struct hinic_hwdev *hwdev, 461d9ce1917SZiyang Xuan struct nic_interrupt_info interrupt_info); 462d9ce1917SZiyang Xuan 463d9ce1917SZiyang Xuan int init_aeqs_msix_attr(void *hwdev); 464d9ce1917SZiyang Xuan 465d9ce1917SZiyang Xuan void hinic_comm_async_event_handle(struct hinic_hwdev *hwdev, u8 cmd, 466d9ce1917SZiyang Xuan void *buf_in, u16 in_size, 467d9ce1917SZiyang Xuan void *buf_out, u16 *out_size); 468d9ce1917SZiyang Xuan 469d9ce1917SZiyang Xuan void hinic_l2nic_async_event_handle(struct hinic_hwdev *hwdev, void *param, 470d9ce1917SZiyang Xuan u8 cmd, void *buf_in, u16 in_size, 471d9ce1917SZiyang Xuan void *buf_out, u16 *out_size); 472d9ce1917SZiyang Xuan 473d9ce1917SZiyang Xuan void hinic_hilink_async_event_handle(struct hinic_hwdev *hwdev, u8 cmd, 474d9ce1917SZiyang Xuan void *buf_in, u16 in_size, void *buf_out, 475d9ce1917SZiyang Xuan u16 *out_size); 476d9ce1917SZiyang Xuan 477d9ce1917SZiyang Xuan int hinic_init_attr_table(struct hinic_hwdev *hwdev); 478d9ce1917SZiyang Xuan 479d9ce1917SZiyang Xuan int hinic_activate_hwdev_state(struct hinic_hwdev *hwdev); 480d9ce1917SZiyang Xuan 481d9ce1917SZiyang Xuan void hinic_deactivate_hwdev_state(struct hinic_hwdev *hwdev); 482d9ce1917SZiyang Xuan 483d9ce1917SZiyang Xuan int hinic_l2nic_reset(struct hinic_hwdev *hwdev); 484d9ce1917SZiyang Xuan 485d9ce1917SZiyang Xuan int hinic_set_pagesize(void *hwdev, u8 page_size); 486d9ce1917SZiyang Xuan 487*b8582d05SXiaoyun Wang void hinic_cpu_to_be32(void *data, u32 len); 488*b8582d05SXiaoyun Wang 489*b8582d05SXiaoyun Wang void hinic_be32_to_cpu(void *data, u32 len); 490*b8582d05SXiaoyun Wang 491d9ce1917SZiyang Xuan #endif /* _HINIC_PMD_HWDEV_H_ */ 492