1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
2*4418919fSjohnjiang  * Copyright(C) 2019 Marvell International Ltd.
3*4418919fSjohnjiang  */
4*4418919fSjohnjiang 
5*4418919fSjohnjiang #ifndef _NITROX_HAL_H_
6*4418919fSjohnjiang #define _NITROX_HAL_H_
7*4418919fSjohnjiang 
8*4418919fSjohnjiang #include <rte_cycles.h>
9*4418919fSjohnjiang #include <rte_byteorder.h>
10*4418919fSjohnjiang 
11*4418919fSjohnjiang #include "nitrox_csr.h"
12*4418919fSjohnjiang 
13*4418919fSjohnjiang union nps_pkt_slc_cnts {
14*4418919fSjohnjiang 	uint64_t u64;
15*4418919fSjohnjiang 	struct {
16*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
17*4418919fSjohnjiang 		uint64_t slc_int : 1;
18*4418919fSjohnjiang 		uint64_t uns_int : 1;
19*4418919fSjohnjiang 		uint64_t in_int : 1;
20*4418919fSjohnjiang 		uint64_t mbox_int : 1;
21*4418919fSjohnjiang 		uint64_t resend : 1;
22*4418919fSjohnjiang 		uint64_t raz : 5;
23*4418919fSjohnjiang 		uint64_t timer : 22;
24*4418919fSjohnjiang 		uint64_t cnt : 32;
25*4418919fSjohnjiang #else
26*4418919fSjohnjiang 		uint64_t cnt : 32;
27*4418919fSjohnjiang 		uint64_t timer : 22;
28*4418919fSjohnjiang 		uint64_t raz : 5;
29*4418919fSjohnjiang 		uint64_t resend : 1;
30*4418919fSjohnjiang 		uint64_t mbox_int : 1;
31*4418919fSjohnjiang 		uint64_t in_int : 1;
32*4418919fSjohnjiang 		uint64_t uns_int : 1;
33*4418919fSjohnjiang 		uint64_t slc_int : 1;
34*4418919fSjohnjiang #endif
35*4418919fSjohnjiang 	} s;
36*4418919fSjohnjiang };
37*4418919fSjohnjiang 
38*4418919fSjohnjiang union nps_pkt_slc_int_levels {
39*4418919fSjohnjiang 	uint64_t u64;
40*4418919fSjohnjiang 	struct {
41*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
42*4418919fSjohnjiang 		uint64_t bmode : 1;
43*4418919fSjohnjiang 		uint64_t raz : 9;
44*4418919fSjohnjiang 		uint64_t timet : 22;
45*4418919fSjohnjiang 		uint64_t cnt : 32;
46*4418919fSjohnjiang #else
47*4418919fSjohnjiang 		uint64_t cnt : 32;
48*4418919fSjohnjiang 		uint64_t timet : 22;
49*4418919fSjohnjiang 		uint64_t raz : 9;
50*4418919fSjohnjiang 		uint64_t bmode : 1;
51*4418919fSjohnjiang #endif
52*4418919fSjohnjiang 	} s;
53*4418919fSjohnjiang };
54*4418919fSjohnjiang 
55*4418919fSjohnjiang union nps_pkt_slc_ctl {
56*4418919fSjohnjiang 	uint64_t u64;
57*4418919fSjohnjiang 	struct {
58*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
59*4418919fSjohnjiang 		uint64_t raz : 61;
60*4418919fSjohnjiang 		uint64_t rh : 1;
61*4418919fSjohnjiang 		uint64_t z : 1;
62*4418919fSjohnjiang 		uint64_t enb : 1;
63*4418919fSjohnjiang #else
64*4418919fSjohnjiang 		uint64_t enb : 1;
65*4418919fSjohnjiang 		uint64_t z : 1;
66*4418919fSjohnjiang 		uint64_t rh : 1;
67*4418919fSjohnjiang 		uint64_t raz : 61;
68*4418919fSjohnjiang #endif
69*4418919fSjohnjiang 	} s;
70*4418919fSjohnjiang };
71*4418919fSjohnjiang 
72*4418919fSjohnjiang union nps_pkt_in_instr_ctl {
73*4418919fSjohnjiang 	uint64_t u64;
74*4418919fSjohnjiang 	struct {
75*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
76*4418919fSjohnjiang 		uint64_t raz : 62;
77*4418919fSjohnjiang 		uint64_t is64b : 1;
78*4418919fSjohnjiang 		uint64_t enb : 1;
79*4418919fSjohnjiang #else
80*4418919fSjohnjiang 		uint64_t enb : 1;
81*4418919fSjohnjiang 		uint64_t is64b : 1;
82*4418919fSjohnjiang 		uint64_t raz : 62;
83*4418919fSjohnjiang #endif
84*4418919fSjohnjiang 	} s;
85*4418919fSjohnjiang };
86*4418919fSjohnjiang 
87*4418919fSjohnjiang union nps_pkt_in_instr_rsize {
88*4418919fSjohnjiang 	uint64_t u64;
89*4418919fSjohnjiang 	struct {
90*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
91*4418919fSjohnjiang 		uint64_t raz : 32;
92*4418919fSjohnjiang 		uint64_t rsize : 32;
93*4418919fSjohnjiang #else
94*4418919fSjohnjiang 		uint64_t rsize : 32;
95*4418919fSjohnjiang 		uint64_t raz : 32;
96*4418919fSjohnjiang #endif
97*4418919fSjohnjiang 	} s;
98*4418919fSjohnjiang };
99*4418919fSjohnjiang 
100*4418919fSjohnjiang union nps_pkt_in_instr_baoff_dbell {
101*4418919fSjohnjiang 	uint64_t u64;
102*4418919fSjohnjiang 	struct {
103*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
104*4418919fSjohnjiang 		uint64_t aoff : 32;
105*4418919fSjohnjiang 		uint64_t dbell : 32;
106*4418919fSjohnjiang #else
107*4418919fSjohnjiang 		uint64_t dbell : 32;
108*4418919fSjohnjiang 		uint64_t aoff : 32;
109*4418919fSjohnjiang #endif
110*4418919fSjohnjiang 	} s;
111*4418919fSjohnjiang };
112*4418919fSjohnjiang 
113*4418919fSjohnjiang union nps_pkt_in_done_cnts {
114*4418919fSjohnjiang 	uint64_t u64;
115*4418919fSjohnjiang 	struct {
116*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
117*4418919fSjohnjiang 		uint64_t slc_int : 1;
118*4418919fSjohnjiang 		uint64_t uns_int : 1;
119*4418919fSjohnjiang 		uint64_t in_int : 1;
120*4418919fSjohnjiang 		uint64_t mbox_int : 1;
121*4418919fSjohnjiang 		uint64_t resend : 1;
122*4418919fSjohnjiang 		uint64_t raz : 27;
123*4418919fSjohnjiang 		uint64_t cnt : 32;
124*4418919fSjohnjiang #else
125*4418919fSjohnjiang 		uint64_t cnt : 32;
126*4418919fSjohnjiang 		uint64_t raz : 27;
127*4418919fSjohnjiang 		uint64_t resend : 1;
128*4418919fSjohnjiang 		uint64_t mbox_int : 1;
129*4418919fSjohnjiang 		uint64_t in_int : 1;
130*4418919fSjohnjiang 		uint64_t uns_int : 1;
131*4418919fSjohnjiang 		uint64_t slc_int : 1;
132*4418919fSjohnjiang #endif
133*4418919fSjohnjiang 	} s;
134*4418919fSjohnjiang };
135*4418919fSjohnjiang 
136*4418919fSjohnjiang union aqmq_qsz {
137*4418919fSjohnjiang 	uint64_t u64;
138*4418919fSjohnjiang 	struct {
139*4418919fSjohnjiang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
140*4418919fSjohnjiang 		uint64_t raz : 32;
141*4418919fSjohnjiang 		uint64_t host_queue_size : 32;
142*4418919fSjohnjiang #else
143*4418919fSjohnjiang 		uint64_t host_queue_size : 32;
144*4418919fSjohnjiang 		uint64_t raz : 32;
145*4418919fSjohnjiang #endif
146*4418919fSjohnjiang 	} s;
147*4418919fSjohnjiang };
148*4418919fSjohnjiang 
149*4418919fSjohnjiang enum nitrox_vf_mode {
150*4418919fSjohnjiang 	NITROX_MODE_PF = 0x0,
151*4418919fSjohnjiang 	NITROX_MODE_VF16 = 0x1,
152*4418919fSjohnjiang 	NITROX_MODE_VF32 = 0x2,
153*4418919fSjohnjiang 	NITROX_MODE_VF64 = 0x3,
154*4418919fSjohnjiang 	NITROX_MODE_VF128 = 0x4,
155*4418919fSjohnjiang };
156*4418919fSjohnjiang 
157*4418919fSjohnjiang int vf_get_vf_config_mode(uint8_t *bar_addr);
158*4418919fSjohnjiang int vf_config_mode_to_nr_queues(enum nitrox_vf_mode vf_mode);
159*4418919fSjohnjiang void setup_nps_pkt_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,
160*4418919fSjohnjiang 			      phys_addr_t raddr);
161*4418919fSjohnjiang void setup_nps_pkt_solicit_output_port(uint8_t *bar_addr, uint16_t port);
162*4418919fSjohnjiang void nps_pkt_input_ring_disable(uint8_t *bar_addr, uint16_t ring);
163*4418919fSjohnjiang void nps_pkt_solicited_port_disable(uint8_t *bar_addr, uint16_t port);
164*4418919fSjohnjiang 
165*4418919fSjohnjiang #endif /* _NITROX_HAL_H_ */
166