2026-01-29 22:25:33 +08:00

860 lines
26 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright(c) 2021 Huawei Technologies Co., Ltd */
#ifndef HINIC3_HW_H
#define HINIC3_HW_H
#include "mpu_inband_cmd.h"
#include "mpu_inband_cmd_defs.h"
#include "hinic3_crm.h"
#ifndef BIG_ENDIAN
#define BIG_ENDIAN 0x4321
#endif
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN 0x1234
#endif
#ifdef BYTE_ORDER
#undef BYTE_ORDER
#endif
/* X86 */
#define BYTE_ORDER LITTLE_ENDIAN
/* to use 0-level CLA, page size must be: SQ 16B(wqe) * 64k(max_q_depth) */
#define HINIC3_DEFAULT_WQ_PAGE_SIZE 0x100000
#define HINIC3_HW_WQ_PAGE_SIZE 0x1000
#define HINIC3_MAX_WQ_PAGE_SIZE_ORDER 8
#define SPU_HOST_ID 4
enum hinic3_channel_id {
HINIC3_CHANNEL_DEFAULT,
HINIC3_CHANNEL_COMM,
HINIC3_CHANNEL_NIC,
HINIC3_CHANNEL_ROCE,
HINIC3_CHANNEL_TOE,
HINIC3_CHANNEL_FC,
HINIC3_CHANNEL_OVS,
HINIC3_CHANNEL_DSW,
HINIC3_CHANNEL_MIG,
HINIC3_CHANNEL_CRYPT,
HINIC3_CHANNEL_MAX = 32,
};
struct hinic3_cmd_buf {
void *buf;
dma_addr_t dma_addr;
u16 size;
/* Usage count, USERS DO NOT USE */
atomic_t ref_cnt;
};
enum hinic3_aeq_type {
HINIC3_HW_INTER_INT = 0,
HINIC3_MBX_FROM_FUNC = 1,
HINIC3_MSG_FROM_MGMT_CPU = 2,
HINIC3_API_RSP = 3,
HINIC3_API_CHAIN_STS = 4,
HINIC3_MBX_SEND_RSLT = 5,
HINIC3_MAX_AEQ_EVENTS
};
enum hinic3_aeq_sw_type {
HINIC3_STATELESS_EVENT = 0,
HINIC3_STATEFUL_EVENT = 1,
HINIC3_MAX_AEQ_SW_EVENTS
};
enum hinic3_hwdev_init_state {
HINIC3_HWDEV_NONE_INITED = 0,
HINIC3_HWDEV_MGMT_INITED,
HINIC3_HWDEV_MBOX_INITED,
HINIC3_HWDEV_CMDQ_INITED,
};
enum hinic3_ceq_event {
HINIC3_NON_L2NIC_SCQ,
HINIC3_NON_L2NIC_ECQ,
HINIC3_NON_L2NIC_NO_CQ_EQ,
HINIC3_CMDQ,
HINIC3_L2NIC_SQ,
HINIC3_L2NIC_RQ,
HINIC3_MAX_CEQ_EVENTS,
};
enum hinic3_mbox_seg_errcode {
MBOX_ERRCODE_NO_ERRORS = 0,
/* VF send the mailbox data to the wrong destination functions */
MBOX_ERRCODE_VF_TO_WRONG_FUNC = 0x100,
/* PPF send the mailbox data to the wrong destination functions */
MBOX_ERRCODE_PPF_TO_WRONG_FUNC = 0x200,
/* PF send the mailbox data to the wrong destination functions */
MBOX_ERRCODE_PF_TO_WRONG_FUNC = 0x300,
/* The mailbox data size is set to all zero */
MBOX_ERRCODE_ZERO_DATA_SIZE = 0x400,
/* The sender function attribute has not been learned by hardware */
MBOX_ERRCODE_UNKNOWN_SRC_FUNC = 0x500,
/* The receiver function attr has not been learned by hardware */
MBOX_ERRCODE_UNKNOWN_DES_FUNC = 0x600,
};
struct hinic3_ceq_info {
u32 q_len;
u32 page_size;
u16 elem_size;
u16 num_pages;
u32 num_elem_in_pg;
};
typedef void (*hinic3_aeq_hwe_cb)(void *pri_handle, u8 *data, u8 size);
typedef u8 (*hinic3_aeq_swe_cb)(void *pri_handle, u8 event, u8 *data);
typedef void (*hinic3_ceq_event_cb)(void *pri_handle, u32 ceqe_data);
typedef int (*hinic3_vf_mbox_cb)(void *pri_handle,
u16 cmd, void *buf_in, u16 in_size, void *buf_out, u16 *out_size);
typedef int (*hinic3_pf_mbox_cb)(void *pri_handle,
u16 vf_id, u16 cmd, void *buf_in, u16 in_size, void *buf_out, u16 *out_size);
typedef int (*hinic3_ppf_mbox_cb)(void *pri_handle, u16 pf_idx,
u16 vf_id, u16 cmd, void *buf_in, u16 in_size, void *buf_out, u16 *out_size);
typedef int (*hinic3_pf_recv_from_ppf_mbox_cb)(void *pri_handle,
u16 cmd, void *buf_in, u16 in_size, void *buf_out, u16 *out_size);
/**
* @brief hinic3_aeq_register_hw_cb - register aeq hardware callback
* @param hwdev: device pointer to hwdev
* @param event: event type
* @param hwe_cb: callback function
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_aeq_register_hw_cb(void *hwdev, void *pri_handle,
enum hinic3_aeq_type event, hinic3_aeq_hwe_cb hwe_cb);
/**
* @brief hinic3_aeq_unregister_hw_cb - unregister aeq hardware callback
* @param hwdev: device pointer to hwdev
* @param event: event type
**/
void hinic3_aeq_unregister_hw_cb(void *hwdev, enum hinic3_aeq_type event);
/**
* @brief hinic3_aeq_register_swe_cb - register aeq soft event callback
* @param hwdev: device pointer to hwdev
* @pri_handle: the pointer to private invoker device
* @param event: event type
* @param aeq_swe_cb: callback function
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_aeq_register_swe_cb(void *hwdev, void *pri_handle, enum hinic3_aeq_sw_type event,
hinic3_aeq_swe_cb aeq_swe_cb);
/**
* @brief hinic3_aeq_unregister_swe_cb - unregister aeq soft event callback
* @param hwdev: device pointer to hwdev
* @param event: event type
**/
void hinic3_aeq_unregister_swe_cb(void *hwdev, enum hinic3_aeq_sw_type event);
/**
* @brief hinic3_ceq_register_cb - register ceq callback
* @param hwdev: device pointer to hwdev
* @param event: event type
* @param callback: callback function
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_ceq_register_cb(void *hwdev, void *pri_handle, enum hinic3_ceq_event event,
hinic3_ceq_event_cb callback);
/**
* @brief hinic3_ceq_unregister_cb - unregister ceq callback
* @param hwdev: device pointer to hwdev
* @param event: event type
**/
void hinic3_ceq_unregister_cb(void *hwdev, enum hinic3_ceq_event event);
/**
* @brief hinic3_register_ppf_mbox_cb - ppf register mbox msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param pri_handle: private data will be used by the callback
* @param callback: callback function
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_register_ppf_mbox_cb(void *hwdev, u8 mod, void *pri_handle,
hinic3_ppf_mbox_cb callback);
/**
* @brief hinic3_register_pf_mbox_cb - pf register mbox msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param pri_handle: private data will be used by the callback
* @param callback: callback function
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_register_pf_mbox_cb(void *hwdev, u8 mod, void *pri_handle,
hinic3_pf_mbox_cb callback);
/**
* @brief hinic3_register_vf_mbox_cb - vf register mbox msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param pri_handle: private data will be used by the callback
* @param callback: callback function
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_register_vf_mbox_cb(void *hwdev, u8 mod, void *pri_handle,
hinic3_vf_mbox_cb callback);
/**
* @brief hinic3_unregister_ppf_mbox_cb - ppf unregister mbox msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
**/
void hinic3_unregister_ppf_mbox_cb(void *hwdev, u8 mod);
/**
* @brief hinic3_unregister_pf_mbox_cb - pf register mbox msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
**/
void hinic3_unregister_pf_mbox_cb(void *hwdev, u8 mod);
/**
* @brief hinic3_unregister_vf_mbox_cb - pf register mbox msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
**/
void hinic3_unregister_vf_mbox_cb(void *hwdev, u8 mod);
/**
* @brief hinic3_unregister_ppf_to_pf_mbox_cb - unregister mbox msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
**/
void hinic3_unregister_ppf_to_pf_mbox_cb(void *hwdev, u8 mod);
typedef void (*hinic3_mgmt_msg_cb)(void *pri_handle,
u16 cmd, void *buf_in, u16 in_size,
void *buf_out, u16 *out_size);
/**
* @brief hinic3_register_service_adapter - register mgmt msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param pri_handle: private data will be used by the callback
* @param callback: callback function
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_register_mgmt_msg_cb(void *hwdev, u8 mod, void *pri_handle,
hinic3_mgmt_msg_cb callback);
/**
* @brief hinic3_unregister_mgmt_msg_cb - unregister mgmt msg callback
* @param hwdev: device pointer to hwdev
* @param mod: mod type
**/
void hinic3_unregister_mgmt_msg_cb(void *hwdev, u8 mod);
/**
* @brief hinic3_register_service_adapter - register service adapter
* @param hwdev: device pointer to hwdev
* @param service_adapter: service adapter
* @param type: service type
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_register_service_adapter(void *hwdev, void *service_adapter,
enum hinic3_service_type type);
/**
* @brief hinic3_unregister_service_adapter - unregister service adapter
* @param hwdev: device pointer to hwdev
* @param type: service type
**/
void hinic3_unregister_service_adapter(void *hwdev,
enum hinic3_service_type type);
/**
* @brief hinic3_get_service_adapter - get service adapter
* @param hwdev: device pointer to hwdev
* @param type: service type
* @retval non-zero: success
* @retval null: failure
**/
void *hinic3_get_service_adapter(void *hwdev, enum hinic3_service_type type);
/**
* @brief hinic3_alloc_db_phy_addr - alloc doorbell & direct wqe pyhsical addr
* @param hwdev: device pointer to hwdev
* @param db_base: pointer to alloc doorbell base address
* @param dwqe_base: pointer to alloc direct base address
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_alloc_db_phy_addr(void *hwdev, u64 *db_base, u64 *dwqe_base);
/**
* @brief hinic3_free_db_phy_addr - free doorbell & direct wqe physical address
* @param hwdev: device pointer to hwdev
* @param db_base: pointer to free doorbell base address
* @param dwqe_base: pointer to free direct base address
**/
void hinic3_free_db_phy_addr(void *hwdev, u64 db_base, u64 dwqe_base);
/**
* @brief hinic3_alloc_db_addr - alloc doorbell & direct wqe
* @param hwdev: device pointer to hwdev
* @param db_base: pointer to alloc doorbell base address
* @param dwqe_base: pointer to alloc direct base address
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_alloc_db_addr(void *hwdev, void __iomem **db_base,
void __iomem **dwqe_base);
/**
* @brief hinic3_free_db_addr - free doorbell & direct wqe
* @param hwdev: device pointer to hwdev
* @param db_base: pointer to free doorbell base address
* @param dwqe_base: pointer to free direct base address
**/
void hinic3_free_db_addr(void *hwdev, const void __iomem *db_base,
void __iomem *dwqe_base);
/**
* @brief hinic3_alloc_db_phy_addr - alloc physical doorbell & direct wqe
* @param hwdev: device pointer to hwdev
* @param db_base: pointer to alloc doorbell base address
* @param dwqe_base: pointer to alloc direct base address
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_alloc_db_phy_addr(void *hwdev, u64 *db_base, u64 *dwqe_base);
/**
* @brief hinic3_free_db_phy_addr - free physical doorbell & direct wqe
* @param hwdev: device pointer to hwdev
* @param db_base: free doorbell base address
* @param dwqe_base: free direct base address
**/
void hinic3_free_db_phy_addr(void *hwdev, u64 db_base, u64 dwqe_base);
/**
* @brief hinic3_set_root_ctxt - set root context
* @param hwdev: device pointer to hwdev
* @param rq_depth: rq depth
* @param sq_depth: sq depth
* @param rx_buf_sz: rx buffer size
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_set_root_ctxt(void *hwdev, u32 rq_depth, u32 sq_depth,
int rx_buf_sz, u16 channel);
/**
* @brief hinic3_clean_root_ctxt - clean root context
* @param hwdev: device pointer to hwdev
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_clean_root_ctxt(void *hwdev, u16 channel);
/**
* @brief hinic3_alloc_cmd_buf - alloc cmd buffer
* @param hwdev: device pointer to hwdev
* @retval non-zero: success
* @retval null: failure
**/
struct hinic3_cmd_buf *hinic3_alloc_cmd_buf(void *hwdev);
/**
* @brief hinic3_free_cmd_buf - free cmd buffer
* @param hwdev: device pointer to hwdev
* @param cmd_buf: cmd buffer to free
**/
void hinic3_free_cmd_buf(void *hwdev, struct hinic3_cmd_buf *cmd_buf);
/**
* hinic3_sm_ctr_rd16 - small single 16 counter read
* @hwdev: the hardware device
* @node: the node id
* @ctr_id: counter id
* @value: read counter value ptr
* Return: 0 - success, negative - failure
**/
int hinic3_sm_ctr_rd16(void *hwdev, u8 node, u8 instance, u32 ctr_id, u16 *value);
/**
* @brief hinic3_sm_ctr_rd32 - small single 32 counter read
* @param hwdev: device pointer to hwdev
* @param node: the node id
* @param instance: instance id
* @param ctr_id: counter id
* @param value: read counter value ptr
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_sm_ctr_rd32(void *hwdev, u8 node, u8 instance, u32 ctr_id,
u32 *value);
/**
* @brief hinic3_sm_ctr_rd32_clear - small single 32 counter read clear
* @param hwdev: device pointer to hwdev
* @param node: the node id
* @param instance: instance id
* @param ctr_id: counter id
* @param value: read counter value ptr
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_sm_ctr_rd32_clear(void *hwdev, u8 node, u8 instance,
u32 ctr_id, u32 *value);
/**
* @brief hinic3_sm_ctr_rd64_pair - big pair 128 counter read
* @param hwdev: device pointer to hwdev
* @param node: the node id
* @param instance: instance id
* @param ctr_id: counter id
* @param value1: read counter value ptr
* @param value2: read counter value ptr
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_sm_ctr_rd64_pair(void *hwdev, u8 node, u8 instance,
u32 ctr_id, u64 *value1, u64 *value2);
/**
* hinic3_sm_ctr_rd64_pair_clear - big pair 128 counter read
* @hwdev: the hardware device
* @node: the node id
* @ctr_id: counter id
* @value1: read counter value ptr
* @value2: read counter value ptr
* Return: 0 - success, negative - failure
**/
int hinic3_sm_ctr_rd64_pair_clear(void *hwdev, u8 node, u8 instance,
u32 ctr_id, u64 *value1, u64 *value2);
/**
* @brief hinic3_sm_ctr_rd64 - big counter 64 read
* @param hwdev: device pointer to hwdev
* @param node: the node id
* @param instance: instance id
* @param ctr_id: counter id
* @param value: read counter value ptr
* @retval zero: success
* @retval non-zero: failure
**/
int hinic3_sm_ctr_rd64(void *hwdev, u8 node, u8 instance, u32 ctr_id,
u64 *value);
/**
* hinic3_sm_ctr_rd64_clear - big counter 64 read
* @hwdev: the hardware device
* @node: the node id
* @ctr_id: counter id
* @value: read counter value ptr
* Return: 0 - success, negative - failure
**/
int hinic3_sm_ctr_rd64_clear(void *hwdev, u8 node, u8 instance,
u32 ctr_id, u64 *value);
/**
* @brief hinic3_api_csr_rd32 - read 32 byte csr
* @param hwdev: device pointer to hwdev
* @param dest: hardware node id
* @param addr: reg address
* @param val: reg value
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_api_csr_rd32(void *hwdev, u8 dest, u32 addr, u32 *val);
/**
* @brief hinic3_api_csr_wr32 - write 32 byte csr
* @param hwdev: device pointer to hwdev
* @param dest: hardware node id
* @param addr: reg address
* @param val: reg value
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_api_csr_wr32(void *hwdev, u8 dest, u32 addr, u32 val);
/**
* @brief hinic3_api_csr_rd64 - read 64 byte csr
* @param hwdev: device pointer to hwdev
* @param dest: hardware node id
* @param addr: reg address
* @param val: reg value
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_api_csr_rd64(void *hwdev, u8 dest, u32 addr, u64 *val);
/**
* @brief hinic3_dbg_get_hw_stats - get hardware stats
* @param hwdev: device pointer to hwdev
* @param hw_stats: pointer to memory caller to alloc
* @param out_size: out size
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_dbg_get_hw_stats(const void *hwdev, u8 *hw_stats, const u32 *out_size);
/**
* @brief hinic3_dbg_clear_hw_stats - clear hardware stats
* @param hwdev: device pointer to hwdev
* @retval clear hardware size
*/
u16 hinic3_dbg_clear_hw_stats(void *hwdev);
/**
* @brief hinic3_get_chip_fault_stats - get chip fault stats
* @param hwdev: device pointer to hwdev
* @param chip_fault_stats: pointer to memory caller to alloc
* @param offset: offset
*/
void hinic3_get_chip_fault_stats(const void *hwdev, u8 *chip_fault_stats,
u32 offset);
/**
* @brief hinic3_msg_to_mgmt_sync - msg to management cpu
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param in_size: in buffer size
* @param buf_out: message buffer out
* @param out_size: out buffer size
* @param timeout: timeout
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_msg_to_mgmt_sync(void *hwdev, u8 mod, u16 cmd, void *buf_in,
u16 in_size, void *buf_out, u16 *out_size,
u32 timeout, u16 channel);
/**
* @brief hinic3_msg_to_mgmt_async - msg to management cpu async
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param in_size: in buffer size
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*
* The function does not sleep inside, allowing use in irq context
*/
int hinic3_msg_to_mgmt_async(void *hwdev, u8 mod, u16 cmd, void *buf_in,
u16 in_size, u16 channel);
/**
* @brief hinic3_msg_to_mgmt_no_ack - msg to management cpu don't need no ack
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param in_size: in buffer size
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*
* The function will sleep inside, and it is not allowed to be used in
* interrupt context
*/
int hinic3_msg_to_mgmt_no_ack(void *hwdev, u8 mod, u16 cmd, void *buf_in,
u16 in_size, u16 channel);
int hinic3_msg_to_mgmt_api_chain_async(void *hwdev, u8 mod, u16 cmd,
const void *buf_in, u16 in_size);
int hinic3_msg_to_mgmt_api_chain_sync(void *hwdev, u8 mod, u16 cmd,
void *buf_in, u16 in_size, void *buf_out,
u16 *out_size, u32 timeout);
/**
* @brief hinic3_mbox_to_pf - vf mbox message to pf
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param in_size: in buffer size
* @param buf_out: message buffer out
* @param out_size: out buffer size
* @param timeout: timeout
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_mbox_to_pf(void *hwdev, u8 mod, u16 cmd, void *buf_in,
u16 in_size, void *buf_out, u16 *out_size,
u32 timeout, u16 channel);
/**
* @brief hinic3_mbox_to_vf - mbox message to vf
* @param hwdev: device pointer to hwdev
* @param vf_id: vf index
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param in_size: in buffer size
* @param buf_out: message buffer out
* @param out_size: out buffer size
* @param timeout: timeout
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_mbox_to_vf(void *hwdev, u16 vf_id, u8 mod, u16 cmd, void *buf_in,
u16 in_size, void *buf_out, u16 *out_size, u32 timeout,
u16 channel);
/**
* @brief hinic3_mbox_to_vf_no_ack - mbox message to vf no ack
* @param hwdev: device pointer to hwdev
* @param vf_id: vf index
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param in_size: in buffer size
* @param buf_out: message buffer out
* @param out_size: out buffer size
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_mbox_to_vf_no_ack(void *hwdev, u16 vf_id, u8 mod, u16 cmd, void *buf_in,
u16 in_size, void *buf_out, u16 *out_size, u16 channel);
int hinic3_clp_to_mgmt(void *hwdev, u8 mod, u16 cmd, const void *buf_in,
u16 in_size, void *buf_out, u16 *out_size);
/**
* @brief hinic3_cmdq_async - cmdq asynchronous message
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_cmdq_async(void *hwdev, u8 mod, u8 cmd, struct hinic3_cmd_buf *buf_in, u16 channel);
/**
* @brief hinic3_cmdq_async_cos - cmdq asynchronous message by cos
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param cos_id: cos id
* @param buf_in: message buffer in
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_cmdq_async_cos(void *hwdev, u8 mod, u8 cmd, u8 cos_id,
struct hinic3_cmd_buf *buf_in, u16 channel);
/**
* @brief hinic3_cmdq_detail_resp - cmdq direct message response
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param out_param: message out
* @param timeout: timeout
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_cmdq_direct_resp(void *hwdev, u8 mod, u8 cmd,
struct hinic3_cmd_buf *buf_in,
u64 *out_param, u32 timeout, u16 channel);
/**
* @brief hinic3_cmdq_detail_resp - cmdq detail message response
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param buf_in: message buffer in
* @param buf_out: message buffer out
* @param out_param: inline output data
* @param timeout: timeout
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_cmdq_detail_resp(void *hwdev, u8 mod, u8 cmd,
struct hinic3_cmd_buf *buf_in,
struct hinic3_cmd_buf *buf_out,
u64 *out_param, u32 timeout, u16 channel);
/**
* @brief hinic3_cmdq_detail_resp - cmdq detail message response
* @param hwdev: device pointer to hwdev
* @param mod: mod type
* @param cmd: cmd
* @param cos_id: cos id
* @param buf_in: message buffer in
* @param buf_out: message buffer out
* @param out_param: inline output data
* @param timeout: timeout
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_cos_id_detail_resp(void *hwdev, u8 mod, u8 cmd, u8 cos_id,
struct hinic3_cmd_buf *buf_in,
struct hinic3_cmd_buf *buf_out,
u64 *out_param, u32 timeout, u16 channel);
/**
* @brief hinic3_ppf_tmr_start - start ppf timer
* @param hwdev: device pointer to hwdev
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_ppf_tmr_start(void *hwdev);
/**
* @brief hinic3_ppf_tmr_stop - stop ppf timer
* @param hwdev: device pointer to hwdev
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_ppf_tmr_stop(void *hwdev);
/**
* @brief hinic3_func_tmr_bitmap_set - set timer bitmap status
* @param hwdev: device pointer to hwdev
* @param func_id: global function index
* @param enable: 0-disable, 1-enable
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_func_tmr_bitmap_set(void *hwdev, u16 func_id, bool en);
/**
* @brief hinic3_get_board_info - get board info
* @param hwdev: device pointer to hwdev
* @param info: board info
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_get_board_info(void *hwdev, struct hinic3_board_info *info,
u16 channel);
/**
* @brief hinic3_set_wq_page_size - set work queue page size
* @param hwdev: device pointer to hwdev
* @param func_idx: function id
* @param page_size: page size
* @param channel: channel id
* @retval zero: success
* @retval non-zero: failure
*/
int hinic3_set_wq_page_size(void *hwdev, u16 func_idx, u32 page_size,
u16 channel);
/**
* @brief hinic3_event_callback - evnet callback to notify service driver
* @param hwdev: device pointer to hwdev
* @param event: event info to service driver
*/
void hinic3_event_callback(void *hwdev, struct hinic3_event_info *event);
/**
* @brief hinic3_dbg_lt_rd_16byte - liner table read
* @param hwdev: device pointer to hwdev
* @param dest: destine id
* @param instance: instance id
* @param lt_index: liner table index id
* @param data: data
*/
int hinic3_dbg_lt_rd_16byte(void *hwdev, u8 dest, u8 instance,
u32 lt_index, u8 *data);
/**
* @brief hinic3_dbg_lt_wr_16byte_mask - liner table write
* @param hwdev: device pointer to hwdev
* @param dest: destine id
* @param instance: instance id
* @param lt_index: liner table index id
* @param data: data
* @param mask: mask
*/
int hinic3_dbg_lt_wr_16byte_mask(void *hwdev, u8 dest, u8 instance,
u32 lt_index, u8 *data, u16 mask);
/**
* @brief hinic3_link_event_stats - link event stats
* @param hwdev: device pointer to hwdev
* @param link: link status
*/
void hinic3_link_event_stats(void *dev, u8 link);
/**
* @brief hinic3_get_hw_pf_infos - get pf infos
* @param hwdev: device pointer to hwdev
* @param infos: pf infos
* @param channel: channel id
*/
int hinic3_get_hw_pf_infos(void *hwdev, struct hinic3_hw_pf_infos *infos,
u16 channel);
/**
* @brief hinic3_func_reset - reset func
* @param hwdev: device pointer to hwdev
* @param func_id: global function index
* @param reset_flag: reset flag
* @param channel: channel id
*/
int hinic3_func_reset(void *dev, u16 func_id, u64 reset_flag, u16 channel);
int hinic3_get_ppf_timer_cfg(void *hwdev);
int hinic3_set_bdf_ctxt(void *hwdev, u8 bus, u8 device, u8 function);
int hinic3_init_func_mbox_msg_channel(void *hwdev, u16 num_func);
int hinic3_ppf_ht_gpa_init(void *dev);
void hinic3_ppf_ht_gpa_deinit(void *dev);
int hinic3_get_sml_table_info(void *hwdev, u32 tbl_id, u8 *node_id, u8 *instance_id);
int hinic3_mbox_ppf_to_host(void *hwdev, u8 mod, u16 cmd, u8 host_id,
void *buf_in, u16 in_size, void *buf_out,
u16 *out_size, u32 timeout, u16 channel);
void hinic3_force_complete_all(void *dev);
int hinic3_get_ceq_page_phy_addr(void *hwdev, u16 q_id,
u16 page_idx, u64 *page_phy_addr);
int hinic3_set_ceq_irq_disable(void *hwdev, u16 q_id);
int hinic3_get_ceq_info(void *hwdev, u16 q_id, struct hinic3_ceq_info *ceq_info);
int hinic3_init_single_ceq_status(void *hwdev, u16 q_id);
void hinic3_set_api_stop(void *hwdev);
int hinic3_activate_firmware(void *hwdev, u8 cfg_index);
int hinic3_switch_config(void *hwdev, u8 cfg_index);
#endif