xref: /dpdk/drivers/net/hinic/base/hinic_pmd_hwdev.h (revision 1b7b9f170fcebbbd0708fab554dcb5a7badef8cf)
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