xref: /dpdk/drivers/net/hinic/base/hinic_pmd_mgmt.h (revision cb99500de915040339f294b6ad2fc8edb4085b19)
1a4957d87SZiyang Xuan /* SPDX-License-Identifier: BSD-3-Clause
2a4957d87SZiyang Xuan  * Copyright(c) 2017 Huawei Technologies Co., Ltd
3a4957d87SZiyang Xuan  */
4a4957d87SZiyang Xuan 
5a4957d87SZiyang Xuan #ifndef _HINIC_PMD_MGMT_H_
6a4957d87SZiyang Xuan #define _HINIC_PMD_MGMT_H_
7a4957d87SZiyang Xuan 
8a4957d87SZiyang Xuan #include "hinic_pmd_api_cmd.h"
9a4957d87SZiyang Xuan #include "hinic_pmd_eqs.h"
10a4957d87SZiyang Xuan 
11a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MSG_LEN_SHIFT				0
12a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MODULE_SHIFT				11
13a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SEG_LEN_SHIFT				16
14a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_NO_ACK_SHIFT				22
15a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_ASYNC_MGMT_TO_PF_SHIFT			23
16a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SEQID_SHIFT				24
17a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_LAST_SHIFT				30
18a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_DIRECTION_SHIFT			31
19a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_CMD_SHIFT				32
20a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_PCI_INTF_IDX_SHIFT			48
21a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_P2P_IDX_SHIFT				50
22a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MSG_ID_SHIFT				54
23a4957d87SZiyang Xuan 
24a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MSG_LEN_MASK				0x7FF
25a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MODULE_MASK				0x1F
26a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SEG_LEN_MASK				0x3F
27a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_NO_ACK_MASK				0x1
28a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_ASYNC_MGMT_TO_PF_MASK			0x1
29a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SEQID_MASK				0x3F
30a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_LAST_MASK				0x1
31a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_DIRECTION_MASK				0x1
32a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_CMD_MASK				0xFF
33a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_PCI_INTF_IDX_MASK			0x3
34a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_P2P_IDX_MASK				0xF
35a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MSG_ID_MASK				0x3FF
36a4957d87SZiyang Xuan 
37036b61d8SXiaoyun Wang #define HINIC_DEV_BUSY_ACTIVE_FW				0xFE
38036b61d8SXiaoyun Wang 
39a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_GET(val, member)			\
40a4957d87SZiyang Xuan 		(((val) >> HINIC_MSG_HEADER_##member##_SHIFT) & \
41a4957d87SZiyang Xuan 		HINIC_MSG_HEADER_##member##_MASK)
42a4957d87SZiyang Xuan 
43a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SET(val, member)			\
44a4957d87SZiyang Xuan 		((u64)((val) & HINIC_MSG_HEADER_##member##_MASK) << \
45a4957d87SZiyang Xuan 		HINIC_MSG_HEADER_##member##_SHIFT)
46a4957d87SZiyang Xuan 
47a4957d87SZiyang Xuan #define HINIC_MGMT_RSP_AEQN		(1)
48a4957d87SZiyang Xuan 
49a4957d87SZiyang Xuan enum hinic_msg_direction_type {
50a4957d87SZiyang Xuan 	HINIC_MSG_DIRECT_SEND	= 0,
51a4957d87SZiyang Xuan 	HINIC_MSG_RESPONSE	= 1
52a4957d87SZiyang Xuan };
53a4957d87SZiyang Xuan enum hinic_msg_segment_type {
54a4957d87SZiyang Xuan 	NOT_LAST_SEGMENT = 0,
55a4957d87SZiyang Xuan 	LAST_SEGMENT	= 1,
56a4957d87SZiyang Xuan };
57a4957d87SZiyang Xuan 
58a4957d87SZiyang Xuan enum hinic_msg_ack_type {
59a4957d87SZiyang Xuan 	HINIC_MSG_ACK = 0,
60a4957d87SZiyang Xuan 	HINIC_MSG_NO_ACK = 1,
61a4957d87SZiyang Xuan };
62a4957d87SZiyang Xuan 
63a4957d87SZiyang Xuan struct hinic_recv_msg {
64a4957d87SZiyang Xuan 	void			*msg;
65a4957d87SZiyang Xuan 	void			*buf_out;
66a4957d87SZiyang Xuan 
67a4957d87SZiyang Xuan 	u16			msg_len;
68a4957d87SZiyang Xuan 	enum hinic_mod_type	mod;
69a4957d87SZiyang Xuan 	u8			cmd;
70a4957d87SZiyang Xuan 	u16			msg_id;
71a4957d87SZiyang Xuan 	int			async_mgmt_to_pf;
72*cb99500dSGuoyang Zhou 	u8			seq_id;
73a4957d87SZiyang Xuan };
74a4957d87SZiyang Xuan 
75a4957d87SZiyang Xuan #define HINIC_COMM_SELF_CMD_MAX 8
76a4957d87SZiyang Xuan 
77a4957d87SZiyang Xuan enum comm_pf_to_mgmt_event_state {
78a4957d87SZiyang Xuan 	SEND_EVENT_START = 0,
79a4957d87SZiyang Xuan 	SEND_EVENT_TIMEOUT,
80a4957d87SZiyang Xuan 	SEND_EVENT_END,
81a4957d87SZiyang Xuan };
82a4957d87SZiyang Xuan 
83a4957d87SZiyang Xuan struct hinic_msg_pf_to_mgmt {
84a4957d87SZiyang Xuan 	struct hinic_hwdev		*hwdev;
85a4957d87SZiyang Xuan 
86ae865766SZiyang Xuan 	/* mutex for sync message */
87b8582d05SXiaoyun Wang 	pthread_mutex_t			sync_msg_mutex;
88a4957d87SZiyang Xuan 
89a4957d87SZiyang Xuan 	void				*async_msg_buf;
90a4957d87SZiyang Xuan 	void				*sync_msg_buf;
91a4957d87SZiyang Xuan 
92a4957d87SZiyang Xuan 	struct hinic_recv_msg		recv_msg_from_mgmt;
93a4957d87SZiyang Xuan 	struct hinic_recv_msg		recv_resp_msg_from_mgmt;
94a4957d87SZiyang Xuan 
95a4957d87SZiyang Xuan 	u16				async_msg_id;
96a4957d87SZiyang Xuan 	u16				sync_msg_id;
97a4957d87SZiyang Xuan 
98a4957d87SZiyang Xuan 	struct hinic_api_cmd_chain	*cmd_chain[HINIC_API_CMD_MAX];
99a4957d87SZiyang Xuan 
100a4957d87SZiyang Xuan 	struct hinic_eq *rx_aeq;
101a4957d87SZiyang Xuan };
102a4957d87SZiyang Xuan 
103a4957d87SZiyang Xuan int hinic_msg_to_mgmt_no_ack(void *hwdev, enum hinic_mod_type mod, u8 cmd,
104214164a6SXiaoyun Wang 			     void *buf_in, u16 in_size);
105a4957d87SZiyang Xuan 
106a4957d87SZiyang Xuan int hinic_comm_pf_to_mgmt_init(struct hinic_hwdev *hwdev);
107a4957d87SZiyang Xuan 
108a4957d87SZiyang Xuan void hinic_comm_pf_to_mgmt_free(struct hinic_hwdev *hwdev);
109a4957d87SZiyang Xuan 
110a4957d87SZiyang Xuan int hinic_aeq_poll_msg(struct hinic_eq *eq, u32 timeout, void *param);
111a4957d87SZiyang Xuan 
112a4957d87SZiyang Xuan int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd,
113a4957d87SZiyang Xuan 			   void *buf_in, u16 in_size,
114a4957d87SZiyang Xuan 			   void *buf_out, u16 *out_size, u32 timeout);
115a4957d87SZiyang Xuan 
116a4957d87SZiyang Xuan void hinic_dev_handle_aeq_event(struct hinic_hwdev *hwdev, void *param);
117a4957d87SZiyang Xuan 
118a4957d87SZiyang Xuan #endif /* _HINIC_PMD_MGMT_H_ */
119