119 lines
2.9 KiB
C
119 lines
2.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
// Copyright (c) 2020-2022 Hisilicon Limited.
|
|
|
|
#ifndef __HNS3_ROH_CMDQ_H__
|
|
#define __HNS3_ROH_CMDQ_H__
|
|
|
|
#include "hns3_common.h"
|
|
|
|
#define HNS3_ROH_MAILBOX_SIZE 4096
|
|
#define HNS3_ROH_CMDQ_DESC_NUM 3
|
|
#define HNS3_ROH_CMDQ_TX_TIMEOUT 30000
|
|
|
|
#define HNS3_ROH_MAX_CMD_NUM 32
|
|
|
|
#define HNS3_ROH_CMDQ_CSQ_DESC_NUM 1024
|
|
#define HNS3_ROH_CMDQ_CRQ_DESC_NUM 1024
|
|
|
|
#define HNS3_ROH_CMD_FLAG_IN BIT(0)
|
|
#define HNS3_ROH_CMD_FLAG_OUT BIT(1)
|
|
#define HNS3_ROH_CMD_FLAG_NEXT BIT(2)
|
|
#define HNS3_ROH_CMD_FLAG_WR BIT(3)
|
|
#define HNS3_ROH_CMD_FLAG_NO_INTR BIT(4)
|
|
#define HNS3_ROH_CMD_FLAG_ERR_INTR BIT(5)
|
|
|
|
enum { HNS3_ROH_CMDQ_CRQ = 0, HNS3_ROH_CMDQ_CSQ };
|
|
|
|
enum hns3_roh_opcode_type {
|
|
HNS3_ROH_OPC_GET_INTR_INFO = 0x0023,
|
|
HNS3_ROH_OPC_QUERY_PORT_LINK_STATUS = 0x038a,
|
|
HNS3_ROH_OPC_SET_EID = 0x9001,
|
|
HNS3_ROH_OPC_QUERY_MIB_PUBLIC = 0x9005,
|
|
HNS3_ROH_OPC_QUERY_MIB_PRIVATE = 0x9006,
|
|
};
|
|
|
|
struct hns3_roh_errcode {
|
|
u32 imp_errcode;
|
|
int common_errno;
|
|
};
|
|
|
|
enum hns3_roh_cmd_return_status {
|
|
HNS3_ROH_CMD_EXEC_SUCCESS = 0,
|
|
HNS3_ROH_CMD_NO_AUTH = 1,
|
|
HNS3_ROH_CMD_NOT_SUPPORTED = 2,
|
|
HNS3_ROH_CMD_QUEUE_FULL = 3,
|
|
HNS3_ROH_CMD_NEXT_ERR = 4,
|
|
HNS3_ROH_CMD_UNEXE_ERR = 5,
|
|
HNS3_ROH_CMD_PARA_ERR = 6,
|
|
HNS3_ROH_CMD_RESULT_ERR = 7,
|
|
HNS3_ROH_CMD_TIMEOUT = 8,
|
|
HNS3_ROH_CMD_HILINK_ERR = 9,
|
|
HNS3_ROH_CMD_QUEUE_ILLEGAL = 10,
|
|
HNS3_ROH_CMD_INVALID = 11,
|
|
};
|
|
|
|
enum hns3_roh_mbx_opcode {
|
|
HNS3_ROH_MBX_PUSH_LINK_STATUS = 201 /* (M7 -> PF) get port link status */
|
|
};
|
|
|
|
struct hns3_roh_get_intr_info {
|
|
__le16 tqp_num;
|
|
__le16 packet_buffer_cell_cnt;
|
|
__le16 msixcap_localid_ba_nic;
|
|
__le16 msixcap_localid_number_nic;
|
|
__le16 pf_intr_vector_number_roce;
|
|
__le16 pf_own_fun_number;
|
|
__le16 tx_pkt_buffer_cell_cnt;
|
|
__le16 delay_value_cell_num;
|
|
__le16 tqp_number_1k;
|
|
__le16 pf_intr_vector_number_roh;
|
|
u8 rsv[4];
|
|
};
|
|
|
|
struct hns3_roh_set_eid_info {
|
|
__le32 base_eid;
|
|
__le32 num_eid;
|
|
u8 rsv[16];
|
|
};
|
|
|
|
struct hns3_roh_query_link_status_info {
|
|
__le32 query_link_status;
|
|
u8 rsv[20];
|
|
};
|
|
|
|
#define HNS3_ROH_MBX_MAX_MSG_SIZE 14
|
|
|
|
struct hns3_roh_vf_to_pf_msg {
|
|
u8 code;
|
|
struct {
|
|
u8 subcode;
|
|
u8 data[HNS3_ROH_MBX_MAX_MSG_SIZE];
|
|
};
|
|
};
|
|
|
|
struct hns3_roh_mbx_vf_to_pf_cmd {
|
|
u8 rsv;
|
|
u8 mbx_src_vfid; /* Auto filled by IMP */
|
|
u8 mbx_need_resp;
|
|
u8 rsv1;
|
|
u8 msg_len;
|
|
u8 rsv2[3];
|
|
struct hns3_roh_vf_to_pf_msg msg;
|
|
};
|
|
|
|
static inline void hns3_roh_mbx_ring_ptr_move_crq(struct hns3_roh_cmdq_ring *crq)
|
|
{
|
|
crq->next_to_use = (crq->next_to_use + 1) % crq->desc_num;
|
|
}
|
|
|
|
int hns3_roh_cmdq_init(struct hns3_roh_device *hroh_dev);
|
|
void hns3_roh_cmdq_exit(struct hns3_roh_device *hroh_dev);
|
|
int hns3_roh_cmdq_send(struct hns3_roh_device *hroh_dev,
|
|
struct hns3_roh_desc *desc, int num);
|
|
void hns3_roh_cmdq_setup_basic_desc(struct hns3_roh_desc *desc,
|
|
enum hns3_roh_opcode_type opcode, bool is_read);
|
|
int hns3_roh_get_link_status(struct hns3_roh_device *hroh_dev, u32 *link_status);
|
|
void hns3_roh_update_link_status(struct hns3_roh_device *hroh_dev);
|
|
|
|
#endif /* __HNS3_ROH_CMDQ_H__ */
|