1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Huawei Technologies Co., Ltd
5 #ifndef _HINIC_PMD_MGMT_H_
6 #define _HINIC_PMD_MGMT_H_
8 #include "hinic_pmd_api_cmd.h"
9 #include "hinic_pmd_eqs.h"
11 #define HINIC_MSG_HEADER_MSG_LEN_SHIFT 0
12 #define HINIC_MSG_HEADER_MODULE_SHIFT 11
13 #define HINIC_MSG_HEADER_SEG_LEN_SHIFT 16
14 #define HINIC_MSG_HEADER_NO_ACK_SHIFT 22
15 #define HINIC_MSG_HEADER_ASYNC_MGMT_TO_PF_SHIFT 23
16 #define HINIC_MSG_HEADER_SEQID_SHIFT 24
17 #define HINIC_MSG_HEADER_LAST_SHIFT 30
18 #define HINIC_MSG_HEADER_DIRECTION_SHIFT 31
19 #define HINIC_MSG_HEADER_CMD_SHIFT 32
20 #define HINIC_MSG_HEADER_PCI_INTF_IDX_SHIFT 48
21 #define HINIC_MSG_HEADER_P2P_IDX_SHIFT 50
22 #define HINIC_MSG_HEADER_MSG_ID_SHIFT 54
24 #define HINIC_MSG_HEADER_MSG_LEN_MASK 0x7FF
25 #define HINIC_MSG_HEADER_MODULE_MASK 0x1F
26 #define HINIC_MSG_HEADER_SEG_LEN_MASK 0x3F
27 #define HINIC_MSG_HEADER_NO_ACK_MASK 0x1
28 #define HINIC_MSG_HEADER_ASYNC_MGMT_TO_PF_MASK 0x1
29 #define HINIC_MSG_HEADER_SEQID_MASK 0x3F
30 #define HINIC_MSG_HEADER_LAST_MASK 0x1
31 #define HINIC_MSG_HEADER_DIRECTION_MASK 0x1
32 #define HINIC_MSG_HEADER_CMD_MASK 0xFF
33 #define HINIC_MSG_HEADER_PCI_INTF_IDX_MASK 0x3
34 #define HINIC_MSG_HEADER_P2P_IDX_MASK 0xF
35 #define HINIC_MSG_HEADER_MSG_ID_MASK 0x3FF
37 #define HINIC_DEV_BUSY_ACTIVE_FW 0xFE
39 #define HINIC_MSG_HEADER_GET(val, member) \
40 (((val) >> HINIC_MSG_HEADER_##member##_SHIFT) & \
41 HINIC_MSG_HEADER_##member##_MASK)
43 #define HINIC_MSG_HEADER_SET(val, member) \
44 ((u64)((val) & HINIC_MSG_HEADER_##member##_MASK) << \
45 HINIC_MSG_HEADER_##member##_SHIFT)
47 #define HINIC_MGMT_RSP_AEQN (1)
49 enum hinic_msg_direction_type {
50 HINIC_MSG_DIRECT_SEND = 0,
51 HINIC_MSG_RESPONSE = 1
53 enum hinic_msg_segment_type {
58 enum hinic_msg_ack_type {
63 struct hinic_recv_msg {
68 enum hinic_mod_type mod;
75 #define HINIC_COMM_SELF_CMD_MAX 8
77 enum comm_pf_to_mgmt_event_state {
83 struct hinic_msg_pf_to_mgmt {
84 struct hinic_hwdev *hwdev;
86 /* mutex for sync message */
87 pthread_mutex_t sync_msg_mutex;
92 struct hinic_recv_msg recv_msg_from_mgmt;
93 struct hinic_recv_msg recv_resp_msg_from_mgmt;
98 struct hinic_api_cmd_chain *cmd_chain[HINIC_API_CMD_MAX];
100 struct hinic_eq *rx_aeq;
103 int hinic_msg_to_mgmt_no_ack(void *hwdev, enum hinic_mod_type mod, u8 cmd,
104 void *buf_in, u16 in_size, void *buf_out,
107 int hinic_comm_pf_to_mgmt_init(struct hinic_hwdev *hwdev);
109 void hinic_comm_pf_to_mgmt_free(struct hinic_hwdev *hwdev);
111 int hinic_aeq_poll_msg(struct hinic_eq *eq, u32 timeout, void *param);
113 int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd,
114 void *buf_in, u16 in_size,
115 void *buf_out, u16 *out_size, u32 timeout);
117 void hinic_dev_handle_aeq_event(struct hinic_hwdev *hwdev, void *param);
119 #endif /* _HINIC_PMD_MGMT_H_ */