xref: /dpdk/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h (revision f48cd6c6)
1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
2  *
3  * Copyright 2013-2016 Freescale Semiconductor Inc.
4  * Copyright 2018-2021 NXP
5  *
6  */
7 #ifndef _FSL_DPDMUX_CMD_H
8 #define _FSL_DPDMUX_CMD_H
9 
10 /* DPDMUX Version */
11 #define DPDMUX_VER_MAJOR		6
12 #define DPDMUX_VER_MINOR		9
13 
14 #define DPDMUX_CMD_BASE_VERSION		1
15 #define DPDMUX_CMD_VERSION_2		2
16 #define DPDMUX_CMD_VERSION_3		3
17 #define DPDMUX_CMD_VERSION_4		4
18 #define DPDMUX_CMD_ID_OFFSET		4
19 
20 #define DPDMUX_CMD(id)	(((id) << DPDMUX_CMD_ID_OFFSET) |\
21 				DPDMUX_CMD_BASE_VERSION)
22 #define DPDMUX_CMD_V2(id) (((id) << DPDMUX_CMD_ID_OFFSET) | \
23 				DPDMUX_CMD_VERSION_2)
24 #define DPDMUX_CMD_V3(id)	(((id) << DPDMUX_CMD_ID_OFFSET) |\
25 				DPDMUX_CMD_VERSION_3)
26 #define DPDMUX_CMD_V4(id)	(((id) << DPDMUX_CMD_ID_OFFSET) |\
27 				DPDMUX_CMD_VERSION_4)
28 
29 /* Command IDs */
30 #define DPDMUX_CMDID_CLOSE			DPDMUX_CMD(0x800)
31 #define DPDMUX_CMDID_OPEN			DPDMUX_CMD(0x806)
32 #define DPDMUX_CMDID_CREATE			DPDMUX_CMD_V4(0x906)
33 #define DPDMUX_CMDID_DESTROY			DPDMUX_CMD(0x986)
34 #define DPDMUX_CMDID_GET_API_VERSION		DPDMUX_CMD(0xa06)
35 
36 #define DPDMUX_CMDID_ENABLE			DPDMUX_CMD(0x002)
37 #define DPDMUX_CMDID_DISABLE			DPDMUX_CMD(0x003)
38 #define DPDMUX_CMDID_GET_ATTR			DPDMUX_CMD_V3(0x004)
39 #define DPDMUX_CMDID_RESET			DPDMUX_CMD(0x005)
40 #define DPDMUX_CMDID_IS_ENABLED			DPDMUX_CMD(0x006)
41 #define DPDMUX_CMDID_SET_MAX_FRAME_LENGTH	DPDMUX_CMD(0x0a1)
42 #define DPDMUX_CMDID_GET_MAX_FRAME_LENGTH	DPDMUX_CMD(0x0a2)
43 
44 #define DPDMUX_CMDID_UL_RESET_COUNTERS		DPDMUX_CMD(0x0a3)
45 
46 #define DPDMUX_CMDID_IF_SET_ACCEPTED_FRAMES	DPDMUX_CMD(0x0a7)
47 #define DPDMUX_CMDID_IF_GET_ATTR		DPDMUX_CMD(0x0a8)
48 #define DPDMUX_CMDID_IF_ENABLE			DPDMUX_CMD(0x0a9)
49 #define DPDMUX_CMDID_IF_DISABLE			DPDMUX_CMD(0x0aa)
50 
51 #define DPDMUX_CMDID_IF_ADD_L2_RULE		DPDMUX_CMD(0x0b0)
52 #define DPDMUX_CMDID_IF_REMOVE_L2_RULE		DPDMUX_CMD(0x0b1)
53 #define DPDMUX_CMDID_IF_GET_COUNTER		DPDMUX_CMD(0x0b2)
54 #define DPDMUX_CMDID_IF_SET_LINK_CFG		DPDMUX_CMD_V2(0x0b3)
55 #define DPDMUX_CMDID_IF_GET_LINK_STATE		DPDMUX_CMD_V2(0x0b4)
56 
57 #define DPDMUX_CMDID_SET_CUSTOM_KEY		DPDMUX_CMD(0x0b5)
58 #define DPDMUX_CMDID_ADD_CUSTOM_CLS_ENTRY	DPDMUX_CMD_V2(0x0b6)
59 #define DPDMUX_CMDID_REMOVE_CUSTOM_CLS_ENTRY	DPDMUX_CMD(0x0b7)
60 
61 #define DPDMUX_CMDID_IF_SET_DEFAULT		DPDMUX_CMD(0x0b8)
62 #define DPDMUX_CMDID_IF_GET_DEFAULT		DPDMUX_CMD(0x0b9)
63 
64 #define DPDMUX_CMDID_SET_RESETABLE		DPDMUX_CMD(0x0ba)
65 #define DPDMUX_CMDID_GET_RESETABLE		DPDMUX_CMD(0x0bb)
66 #define DPDMUX_CMDID_SET_ERRORS_BEHAVIOR	DPDMUX_CMD(0x0bf)
67 
68 #define DPDMUX_MASK(field)        \
69 	GENMASK(DPDMUX_##field##_SHIFT + DPDMUX_##field##_SIZE - 1, \
70 		DPDMUX_##field##_SHIFT)
71 #define dpdmux_set_field(var, field, val) \
72 	((var) |= (((val) << DPDMUX_##field##_SHIFT) & DPDMUX_MASK(field)))
73 #define dpdmux_get_field(var, field)      \
74 	(((var) & DPDMUX_MASK(field)) >> DPDMUX_##field##_SHIFT)
75 
76 #pragma pack(push, 1)
77 struct dpdmux_cmd_open {
78 	uint32_t dpdmux_id;
79 };
80 
81 struct dpdmux_cmd_create {
82 	uint8_t method;
83 	uint8_t manip;
84 	uint16_t num_ifs;
85 	uint16_t default_if;
86 	uint16_t pad;
87 
88 	uint16_t adv_max_dmat_entries;
89 	uint16_t adv_max_mc_groups;
90 	uint16_t adv_max_vlan_ids;
91 	uint16_t mem_size;
92 
93 	uint64_t options;
94 };
95 
96 struct dpdmux_cmd_destroy {
97 	uint32_t dpdmux_id;
98 };
99 
100 #define DPDMUX_ENABLE_SHIFT	0
101 #define DPDMUX_ENABLE_SIZE	1
102 #define DPDMUX_IS_DEFAULT_SHIFT		1
103 #define DPDMUX_IS_DEFAULT_SIZE		1
104 
105 struct dpdmux_rsp_is_enabled {
106 	uint8_t en;
107 };
108 
109 struct dpdmux_rsp_get_attr {
110 	uint8_t method;
111 	uint8_t manip;
112 	uint16_t num_ifs;
113 	uint16_t mem_size;
114 	uint16_t default_if;
115 
116 	uint64_t pad1;
117 
118 	uint32_t id;
119 	uint32_t pad2;
120 
121 	uint64_t options;
122 	uint16_t max_dmat_entries;
123 	uint16_t max_mc_groups;
124 	uint16_t max_vlan_ids;
125 };
126 
127 struct dpdmux_cmd_set_max_frame_length {
128 	uint16_t max_frame_length;
129 };
130 
131 struct dpdmux_cmd_get_max_frame_len {
132 	uint16_t if_id;
133 };
134 
135 struct dpdmux_rsp_get_max_frame_len {
136 	uint16_t max_len;
137 };
138 
139 #define DPDMUX_ACCEPTED_FRAMES_TYPE_SHIFT	0
140 #define DPDMUX_ACCEPTED_FRAMES_TYPE_SIZE	4
141 #define DPDMUX_UNACCEPTED_FRAMES_ACTION_SHIFT	4
142 #define DPDMUX_UNACCEPTED_FRAMES_ACTION_SIZE	4
143 
144 struct dpdmux_cmd_if_set_accepted_frames {
145 	uint16_t if_id;
146 	uint8_t frames_options;
147 };
148 
149 struct dpdmux_cmd_if {
150 	uint16_t if_id;
151 };
152 
153 struct dpdmux_rsp_if_get_attr {
154 	uint8_t pad[3];
155 	uint8_t enabled;
156 	uint8_t pad1[3];
157 	uint8_t accepted_frames_type;
158 	uint32_t rate;
159 };
160 
161 struct dpdmux_cmd_if_l2_rule {
162 	uint16_t if_id;
163 	uint8_t mac_addr5;
164 	uint8_t mac_addr4;
165 	uint8_t mac_addr3;
166 	uint8_t mac_addr2;
167 	uint8_t mac_addr1;
168 	uint8_t mac_addr0;
169 
170 	uint32_t pad;
171 	uint16_t vlan_id;
172 };
173 
174 struct dpdmux_cmd_if_get_counter {
175 	uint16_t if_id;
176 	uint8_t counter_type;
177 };
178 
179 struct dpdmux_rsp_if_get_counter {
180 	uint64_t pad;
181 	uint64_t counter;
182 };
183 
184 struct dpdmux_cmd_if_set_link_cfg {
185 	uint16_t if_id;
186 	uint16_t pad[3];
187 
188 	uint32_t rate;
189 	uint32_t pad1;
190 
191 	uint64_t options;
192 	uint64_t advertising;
193 };
194 
195 struct dpdmux_cmd_if_get_link_state {
196 	uint16_t if_id;
197 };
198 
199 #define DPDMUX_UP_SHIFT				0
200 #define DPDMUX_UP_SIZE				1
201 #define DPDMUX_STATE_VALID_SHIFT	1
202 #define DPDMUX_STATE_VALID_SIZE		1
203 struct dpdmux_rsp_if_get_link_state {
204 	uint32_t pad;
205 	uint8_t up;
206 	uint8_t pad1[3];
207 
208 	uint32_t rate;
209 	uint32_t pad2;
210 
211 	uint64_t options;
212 	uint64_t supported;
213 	uint64_t advertising;
214 };
215 
216 struct dpdmux_rsp_get_api_version {
217 	uint16_t major;
218 	uint16_t minor;
219 };
220 
221 struct dpdmux_set_custom_key {
222 	uint64_t pad[6];
223 	uint64_t key_cfg_iova;
224 };
225 
226 struct dpdmux_cmd_add_custom_cls_entry {
227 	uint8_t pad[3];
228 	uint8_t key_size;
229 	uint16_t entry_index;
230 	uint16_t dest_if;
231 	uint64_t key_iova;
232 	uint64_t mask_iova;
233 };
234 
235 struct dpdmux_cmd_remove_custom_cls_entry {
236 	uint8_t pad[3];
237 	uint8_t key_size;
238 	uint32_t pad1;
239 	uint64_t key_iova;
240 	uint64_t mask_iova;
241 };
242 
243 #define DPDMUX_SKIP_RESET_FLAGS_SHIFT    0
244 #define DPDMUX_SKIP_RESET_FLAGS_SIZE     3
245 
246 struct dpdmux_cmd_set_skip_reset_flags {
247 	uint8_t skip_reset_flags;
248 };
249 
250 struct dpdmux_rsp_get_skip_reset_flags {
251 	uint8_t skip_reset_flags;
252 };
253 
254 #define DPDMUX_ERROR_ACTION_SHIFT		0
255 #define DPDMUX_ERROR_ACTION_SIZE		4
256 
257 struct dpdmux_cmd_set_errors_behavior {
258 	uint32_t errors;
259 	uint16_t flags;
260 	uint16_t if_id;
261 };
262 
263 #pragma pack(pop)
264 #endif /* _FSL_DPDMUX_CMD_H */
265