1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (c) 2026 David Yang
*/
#ifndef _YT_TC_H
#define _YT_TC_H
#include <net/dsa.h>
#include <net/pkt_cls.h>
#define YT921X_ACLn_ACT(n) (0x1c0000 + 0x10 * (n))
#define YT921X_ACL_ACTc_STAG_M GENMASK(26, 25)
#define YT921X_ACL_ACTc_STAG(x) FIELD_PREP(YT921X_ACL_ACTc_STAG_M, (x))
#define YT921X_ACL_ACTc_STAG_DONTCARE YT921X_ACL_ACTc_STAG(0)
#define YT921X_ACL_ACTc_STAG_UNTAG YT921X_ACL_ACTc_STAG(1)
#define YT921X_ACL_ACTc_STAG_TAG YT921X_ACL_ACTc_STAG(2)
#define YT921X_ACL_ACTc_STAG_KEEP YT921X_ACL_ACTc_STAG(3)
#define YT921X_ACL_ACTc_CTAG_M GENMASK(24, 23)
#define YT921X_ACL_ACTc_CTAG(x) FIELD_PREP(YT921X_ACL_ACTc_CTAG_M, (x))
#define YT921X_ACL_ACTc_CTAG_DONTCARE YT921X_ACL_ACTc_CTAG(0)
#define YT921X_ACL_ACTc_CTAG_UNTAG YT921X_ACL_ACTc_CTAG(1)
#define YT921X_ACL_ACTc_CTAG_TAG YT921X_ACL_ACTc_CTAG(2)
#define YT921X_ACL_ACTc_CTAG_KEEP YT921X_ACL_ACTc_CTAG(3)
#define YT921X_ACL_ACTc_FWD_M GENMASK(22, 21)
#define YT921X_ACL_ACTc_FWD(x) FIELD_PREP(YT921X_ACL_ACTc_FWD_M, (x))
#define YT921X_ACL_ACTc_FWD_FWD YT921X_ACL_ACTc_FWD(0)
#define YT921X_ACL_ACTc_FWD_COPY YT921X_ACL_ACTc_FWD(1)
#define YT921X_ACL_ACTc_FWD_REDIR YT921X_ACL_ACTc_FWD(2)
#define YT921X_ACL_ACTc_FWD_TRAP YT921X_ACL_ACTc_FWD(3)
#define YT921X_ACL_ACTc_FWD_REDIR_DPORTS_M GENMASK(20, 10)
#define YT921X_ACL_ACTc_FWD_REDIR_DPORTS(x) FIELD_PREP(YT921X_ACL_ACTc_FWD_REDIR_DPORTS_M, (x))
#define YT921X_ACL_ACTc_FWD_REDIR_DPORTn(port) BIT((port) + 10)
#define YT921X_ACL_ACTc_FWD_EN BIT(9)
#define YT921X_ACL_ACTc_SDEI BIT(8)
#define YT921X_ACL_ACTc_SDEI_REPLACE BIT(7)
#define YT921X_ACL_ACTc_SPRI_M GENMASK(6, 4)
#define YT921X_ACL_ACTc_SPRI(x) FIELD_PREP(YT921X_ACL_ACTc_SPRI_M, (x))
#define YT921X_ACL_ACTc_SPRI_REPLACE BIT(3)
#define YT921X_ACL_ACTbc_SVID_M GENMASK_ULL(34, 23)
#define YT921X_ACL_ACTbc_SVID(x) FIELD_PREP(YT921X_ACL_ACTbc_SVID_M, (x))
#define YT921X_ACL_ACTb_SVID_REPLACE BIT(22)
#define YT921X_ACL_ACTb_CDEI BIT(21)
#define YT921X_ACL_ACTb_CDEI_REPLACE BIT(20)
#define YT921X_ACL_ACTb_CPRI_M GENMASK(19, 17)
#define YT921X_ACL_ACTb_CPRI(x) FIELD_PREP(YT921X_ACL_ACTb_CPRI_M, (x))
#define YT921X_ACL_ACTb_CPRI_REPLACE BIT(16)
#define YT921X_ACL_ACTb_CVID_M GENMASK(15, 4)
#define YT921X_ACL_ACTb_CVID(x) FIELD_PREP(YT921X_ACL_ACTb_CVID_M, (x))
#define YT921X_ACL_ACTb_CVID_REPLACE BIT(3)
#define YT921X_ACL_ACTb_PRIO_M GENMASK(2, 0)
#define YT921X_ACL_ACTb_PRIO(x) FIELD_PREP(YT921X_ACL_ACTb_PRIO_M, (x))
#define YT921X_ACL_ACTa_PRIO_EN BIT(31)
#define YT921X_ACL_ACTa_COLOR_M GENMASK(30, 29)
#define YT921X_ACL_ACTa_COLOR(x) FIELD_PREP(YT921X_ACL_ACTa_COLOR_M, (x))
#define YT921X_ACL_ACTa_COLOR_GREEN YT921X_ACL_ACTa_COLOR(0)
#define YT921X_ACL_ACTa_COLOR_YELLOW YT921X_ACL_ACTa_COLOR(1)
#define YT921X_ACL_ACTa_COLOR_RED YT921X_ACL_ACTa_COLOR(2)
#define YT921X_ACL_ACTa_COLOR_EN BIT(28)
#define YT921X_ACL_ACTa_DSCP_M GENMASK(27, 22)
#define YT921X_ACL_ACTa_DSCP(x) FIELD_PREP(YT921X_ACL_ACTa_DSCP_M, (x))
#define YT921X_ACL_ACTa_DSCP_REPLACE BIT(21)
#define YT921X_ACL_ACTa_METER_ID_M GENMASK(20, 15)
#define YT921X_ACL_ACTa_METER_ID(x) FIELD_PREP(YT921X_ACL_ACTa_METER_ID_M, (x))
#define YT921X_ACL_ACTa_METER_EN BIT(14)
#define YT921X_ACL_ACTa_MIRROR_EN BIT(13)
#define YT921X_ACL_ACTa_FLOWSTAT_EN BIT(12)
#define YT921X_ACL_ACTa_FLOWSTAT_ID_M GENMASK(11, 6)
#define YT921X_ACL_ACTa_FLOWSTAT_ID(x) FIELD_PREP(YT921X_ACL_ACTa_FLOWSTAT_ID_M, (x))
#define YT921X_ACL_ACTa_GPIO_EN BIT(5)
#define YT921X_ACL_ACTa_GPIO_PIN_M GENMASK(4, 1)
#define YT921X_ACL_ACTa_GPIO_PIN(x) FIELD_PREP(YT921X_ACL_ACTa_GPIO_PIN_M, (x))
#define YT921X_ACL_ACTa_INTR_EN BIT(0)
#define YT921X_ACL_BLK_KEEP 0x201000
#define YT921X_ACL_BLK_KEEP_GRPIDn_M(bin) (7 << (4 * (bin) + 1))
#define YT921X_ACL_BLK_KEEP_GRPIDn(bin, x) ((x) << (4 * (bin) + 1))
#define YT921X_ACL_BLK_KEEP_KEEPn(bin) BIT(4 * (bin))
#define YT921X_ACL_PORT 0x202000
#define YT921X_ACL_PORT_PORTS_M GENMASK(10, 0)
#define YT921X_ACL_PORT_PORTS(x) FIELD_PREP(YT921X_ACL_PORT_PORTS_M, (x))
#define YT921X_ACL_PORT_PORTn(port) BIT(port)
#define YT921X_ACL_BLK_CMD 0x202004
#define YT921X_ACL_BLK_CMD_BLKID_M GENMASK(6, 1)
#define YT921X_ACL_BLK_CMD_BLKID(x) FIELD_PREP(YT921X_ACL_BLK_CMD_BLKID_M, (x))
#define YT921X_ACL_BLK_CMD_MODIFY BIT(0)
#define YT921X_ACLn_ENTRY(blk) (0x203000 + 4 * (blk))
#define YT921X_ACL_ENTRY_GRPIDm_M(bin) (7 << (4 * (bin) + 1))
#define YT921X_ACL_ENTRY_GRPIDm(bin, x) ((x) << (4 * (bin) + 1))
#define YT921X_ACL_ENTRY_ENm(bin) BIT(4 * (bin))
#define YT921X_ACLn_KEYm(blk, bin) (0x204000 + 0x200 * (bin) + 8 * (blk))
#define YT921X_ACL_KEYb_ORD_M GENMASK(29, 21)
#define YT921X_ACL_KEYb_ORD(x) FIELD_PREP(YT921X_ACL_KEYb_ORD_M, (x))
#define YT921X_ACL_KEYb_SPORTS_M GENMASK(20, 10)
#define YT921X_ACL_KEYb_SPORTS(x) FIELD_PREP(YT921X_ACL_KEYb_SPORTS_M, (x))
#define YT921X_ACL_KEYb_SPORTn(port) BIT((port) + 10)
#define YT921X_ACL_KEYb_REVERSE BIT(9) /* reverse match */
#define YT921X_ACL_KEYb_TYPE_M GENMASK(8, 4)
#define YT921X_ACL_KEYb_TYPE(x) FIELD_PREP(YT921X_ACL_KEYb_TYPE_M, (x))
/* KEY_* fields need no masks */
#define YT921X_ACLn_MASKm(blk, bin) (0x205000 + 0x200 * (bin) + 8 * (blk))
enum yt921x_acl_type {
YT921X_ACL_TYPE_NA,
YT921X_ACL_TYPE_MAC_DA0,
YT921X_ACL_TYPE_MAC_SA0,
YT921X_ACL_TYPE_MAC_DA1_SA1,
YT921X_ACL_TYPE_VLAN,
YT921X_ACL_TYPE_VTAG,
YT921X_ACL_TYPE_IPV4_DA,
YT921X_ACL_TYPE_IPV4_SA,
YT921X_ACL_TYPE_IPV6_DA0,
YT921X_ACL_TYPE_IPV6_DA1,
YT921X_ACL_TYPE_IPV6_DA2,
YT921X_ACL_TYPE_IPV6_DA3,
YT921X_ACL_TYPE_IPV6_SA0,
YT921X_ACL_TYPE_IPV6_SA1,
YT921X_ACL_TYPE_IPV6_SA2,
YT921X_ACL_TYPE_IPV6_SA3,
YT921X_ACL_TYPE_MISC,
YT921X_ACL_TYPE_L4,
/* Each User Defined Filter entry contains 2 UDF windows (UDF_CTRL 2i
* and 2i+1)
*/
YT921X_ACL_TYPE_UDF0,
YT921X_ACL_TYPE_UDF1,
YT921X_ACL_TYPE_UDF2,
YT921X_ACL_TYPE_UDF3,
YT921X_ACL_TYPE_UDF4,
YT921X_ACL_TYPE_UDF5,
YT921X_ACL_TYPE_UDF6,
YT921X_ACL_TYPE_UDF7,
YT921X_ACL_TYPE_ETHERTYPE,
YT921X_ACL_TYPE_NUM
};
/* Range: turn KEY:MASK into MIN:MAX */
#define YT921X_ACL_BINb_MAC_xA0_L3_TYPE_M GENMASK(3, 0)
#define YT921X_ACL_BINb_MAC_xA0_L3_TYPE(x) FIELD_PREP(YT921X_ACL_BINb_MAC_xA0_L3_TYPE_M, (x))
#define YT921X_ACL_BINa_MAC_xA0_MAC_xA0_M GENMASK(31, 0)
#define YT921X_ACL_BINb_MAC_DA1_SA1_L2_TYPE_M GENMASK(2, 0)
#define YT921X_ACL_BINb_MAC_DA1_SA1_L2_TYPE(x) FIELD_PREP(YT921X_ACL_BINb_MAC_DA1_SA1_L2_TYPE_M, (x))
#define YT921X_ACL_BINa_MAC_DA1_SA1_MAC_DA1_M GENMASK(31, 16)
#define YT921X_ACL_BINa_MAC_DA1_SA1_MAC_SA1_M GENMASK(15, 0)
#define YT921X_ACL_KEYb_VLAN_SVID_RANGE_EN BIT(31)
#define YT921X_ACL_KEYb_VLAN_CVID_RANGE_EN BIT(30)
#define YT921X_ACL_BINb_VLAN_CDEI BIT(3)
#define YT921X_ACL_BINb_VLAN_CPRI_M GENMASK(2, 0)
#define YT921X_ACL_BINb_VLAN_CPRI(x) FIELD_PREP(YT921X_ACL_BINb_VLAN_CPRI_M, (x))
#define YT921X_ACL_BINa_VLAN_CTAG_FMT_M GENMASK(31, 30)
#define YT921X_ACL_BINa_VLAN_CTAG_FMT(x) FIELD_PREP(YT921X_ACL_BINa_VLAN_CTAG_FMT_M, (x))
#define YT921X_ACL_BINa_VLAN_SDEI BIT(29)
#define YT921X_ACL_BINa_VLAN_SPRI_M GENMASK(28, 26)
#define YT921X_ACL_BINa_VLAN_SPRI(x) FIELD_PREP(YT921X_ACL_BINa_VLAN_SPRI_M, (x))
#define YT921X_ACL_BINa_VLAN_STAG_FMT_M GENMASK(25, 24)
#define YT921X_ACL_BINa_VLAN_STAG_FMT(x) FIELD_PREP(YT921X_ACL_BINa_VLAN_STAG_FMT_M, (x))
#define YT921X_ACL_BINa_VLAN_SVID_M GENMASK(23, 12)
#define YT921X_ACL_BINa_VLAN_SVID(x) FIELD_PREP(YT921X_ACL_BINa_VLAN_SVID_M, (x))
#define YT921X_ACL_BINa_VLAN_CVID_M GENMASK(11, 0)
#define YT921X_ACL_BINa_VLAN_CVID(x) FIELD_PREP(YT921X_ACL_BINa_VLAN_CVID_M, (x))
#define YT921X_ACL_KEYb_VTAG_SVID_RANGE_EN BIT(31)
#define YT921X_ACL_KEYb_VTAG_CVID_RANGE_EN BIT(30)
#define YT921X_ACL_BINa_VTAG_CDEI BIT(31)
#define YT921X_ACL_BINa_VTAG_CPRI_M GENMASK(30, 28)
#define YT921X_ACL_BINa_VTAG_CPRI(x) FIELD_PREP(YT921X_ACL_BINa_VTAG_CPRI_M, (x))
#define YT921X_ACL_BINa_VTAG_SDEI BIT(27)
#define YT921X_ACL_BINa_VTAG_SPRI_M GENMASK(26, 24)
#define YT921X_ACL_BINa_VTAG_SPRI(x) FIELD_PREP(YT921X_ACL_BINa_VTAG_SPRI_M, (x))
#define YT921X_ACL_BINa_VTAG_SVID_M GENMASK(23, 12)
#define YT921X_ACL_BINa_VTAG_SVID(x) FIELD_PREP(YT921X_ACL_BINa_VTAG_SVID_M, (x))
#define YT921X_ACL_BINa_VTAG_CVID_M GENMASK(11, 0)
#define YT921X_ACL_BINa_VTAG_CVID(x) FIELD_PREP(YT921X_ACL_BINa_VTAG_CVID_M, (x))
#define YT921X_ACL_KEYb_IPV4_ADDR_RANGE_EN BIT(30)
#define YT921X_ACL_BINb_IPV4_FRAG BIT(3)
#define YT921X_ACL_BINb_IPV4_L4_TYPE_M GENMASK(2, 0)
#define YT921X_ACL_BINb_IPV4_L4_TYPE(x) FIELD_PREP(YT921X_ACL_BINb_IPV4_L4_TYPE_M, (x))
#define YT921X_ACL_BINa_IPV4_ADDR_M GENMASK(31, 0)
#define YT921X_ACL_BINb_IPV6_L4_TYPE_M GENMASK(2, 0)
#define YT921X_ACL_BINb_IPV6_L4_TYPE(x) FIELD_PREP(YT921X_ACL_BINb_IPV6_L4_TYPE_M, (x))
#define YT921X_ACL_BINa_IPV6_ADDRx_M GENMASK(31, 0)
#define YT921X_ACL_BINb_IPV6_xA1_IP_OPTION BIT(3)
#define YT921X_ACL_BINb_IPV6_xA2_FIRST_FRAG BIT(3)
#define YT921X_ACL_KEYb_IPV6_xA3_ADDR_RANGE_EN BIT(30)
#define YT921X_ACL_BINb_IPV6_xA3_FRAG BIT(3)
#define YT921X_ACL_BINb_MISC_FRAG BIT(3)
#define YT921X_ACL_BINb_MISC_L4_TYPE_M GENMASK(2, 0)
#define YT921X_ACL_BINb_MISC_L4_TYPE(x) FIELD_PREP(YT921X_ACL_BINb_MISC_L4_TYPE_M, (x))
#define YT921X_ACL_BINa_MISC_PPPOE_FLAG BIT(30)
#define YT921X_ACL_BINa_MISC_FIRST_FRAG BIT(29)
#define YT921X_ACL_BINa_MISC_IP_OPTION BIT(28)
#define YT921X_ACL_BINa_MISC_TCP_FLAGS_M GENMASK(27, 20)
#define YT921X_ACL_BINa_MISC_TCP_FLAGS(x) FIELD_PREP(YT921X_ACL_BINa_MISC_TCP_FLAGS_M, (x))
#define YT921X_ACL_BINa_MISC_IP_PROTO_M GENMASK(19, 12)
#define YT921X_ACL_BINa_MISC_IP_PROTO(x) FIELD_PREP(YT921X_ACL_BINa_MISC_IP_PROTO_M, (x))
#define YT921X_ACL_BINa_MISC_TOS_M GENMASK(11, 4)
#define YT921X_ACL_BINa_MISC_TOS(x) FIELD_PREP(YT921X_ACL_BINa_MISC_TOS_M, (x))
#define YT921X_ACL_BINa_MISC_L3_TYPE_M GENMASK(3, 0)
#define YT921X_ACL_BINa_MISC_L3_TYPE(x) FIELD_PREP(YT921X_ACL_BINa_MISC_L3_TYPE_M, (x))
#define YT921X_ACL_KEYb_L4_DPORT_RANGE_EN BIT(31)
#define YT921X_ACL_KEYb_L4_SPORT_RANGE_EN BIT(30)
#define YT921X_ACL_BINb_L4_FRAG BIT(3)
#define YT921X_ACL_BINb_L4_TYPE_M GENMASK(2, 0)
#define YT921X_ACL_BINb_L4_TYPE(x) FIELD_PREP(YT921X_ACL_BINb_L4_TYPE_M, (x))
#define YT921X_ACL_BINa_L4_DPORT_M GENMASK(31, 16)
#define YT921X_ACL_BINa_L4_SPORT_M GENMASK(15, 0)
#define YT921X_ACL_BINb_UDF_IS_IGMP BIT(0)
#define YT921X_ACL_BINa_UDF_UDF0_M GENMASK(31, 16)
#define YT921X_ACL_BINa_UDF_UDF0(x) FIELD_PREP(YT921X_ACL_BINa_UDF_UDF0_M, (x))
#define YT921X_ACL_BINa_UDF_UDF1_M GENMASK(15, 0)
#define YT921X_ACL_BINa_UDF_UDF1(x) FIELD_PREP(YT921X_ACL_BINa_UDF_UDF1_M, (x))
#define YT921X_ACL_KEYb_ETHERTYPE_ETHERTYPE_RANGE_EN BIT(30)
#define YT921X_ACL_BINb_ETHERTYPE_L4_TYPE_M GENMASK(2, 0)
#define YT921X_ACL_BINb_ETHERTYPE_L4_TYPE(x) FIELD_PREP(YT921X_ACL_BINb_ETHERTYPE_L4_TYPE_M, (x))
#define YT921X_ACL_BINa_ETHERTYPE_ETHERTYPE_M GENMASK(15, 0)
#define YT921X_ACL_BINa_ETHERTYPE_ETHERTYPE(x) FIELD_PREP(YT921X_ACL_BINa_ETHERTYPE_ETHERTYPE_M, (x))
enum yt921x_l2_type {
YT921X_L2_TYPE_ETH,
YT921X_L2_TYPE_ETHV2,
YT921X_L2_TYPE_ETHSAP,
YT921X_L2_TYPE_ETHSNAP,
};
enum yt921x_l3_type {
YT921X_L3_TYPE_OTHER,
YT921X_L3_TYPE_IPV4,
YT921X_L3_TYPE_IPV6,
YT921X_L3_TYPE_ARP,
YT921X_L3_TYPE_LLDP,
YT921X_L3_TYPE_PAE,
YT921X_L3_TYPE_ERP,
YT921X_L3_TYPE_SLOW_PROTOCOL,
};
enum yt921x_l4_type {
YT921X_L4_TYPE_OTHER,
YT921X_L4_TYPE_TCP,
YT921X_L4_TYPE_UDP,
YT921X_L4_TYPE_UDPLITE,
YT921X_L4_TYPE_ICMP,
YT921X_L4_TYPE_IGMP,
YT921X_L4_TYPE_MLD,
YT921X_L4_TYPE_ND,
};
#define YT921X_UDFn_CTRL(x) (0x210094 + 4 * (x))
#define YT921X_UDF_CTRL_UDF_TYPE_M GENMASK(8, 7)
#define YT921X_UDF_CTRL_UDF_TYPE(x) FIELD_PREP(YT921X_UDF_CTRL_UDF_TYPE_M, (x))
#define YT921X_UDF_CTRL_UDF_OFFSET_M GENMASK(6, 0)
#define YT921X_UDF_CTRL_UDF_OFFSET(x) FIELD_PREP(YT921X_UDF_CTRL_UDF_OFFSET_M, (x))
enum yt921x_udf_type {
YT921X_UDF_TYPE_L2,
YT921X_UDF_TYPE_L3,
YT921X_UDF_TYPE_L4,
};
#define YT921X_PORTn_RATE(port) (0x220000 + 4 * (port))
#define YT921X_PORT_RATE_GAP_VALUE GENMASK(4, 0) /* default 20 */
#define YT921X_METER_SLOT 0x220104
#define YT921X_METER_SLOT_SLOT_M GENMASK(11, 0)
#define YT921X_PORTn_METER(port) (0x220108 + 4 * (port))
#define YT921X_PORT_METER_EN BIT(4)
#define YT921X_PORT_METER_ID_M GENMASK(3, 0)
#define YT921X_PORT_METER_ID(x) FIELD_PREP(YT921X_PORT_METER_ID_M, (x))
#define YT921X_METERn_CTRL(x) (0x220800 + 0x10 * (x))
#define YT921X_METER_CTRLc_METER_EN BIT(14)
#define YT921X_METER_CTRLc_TOKEN_OVERFLOW_EN BIT(13) /* RFC4115: yellow use unused green bw */
#define YT921X_METER_CTRLc_DROP_M GENMASK(12, 11)
#define YT921X_METER_CTRLc_DROP(x) FIELD_PREP(YT921X_METER_CTRLc_DROP_M, (x))
#define YT921X_METER_CTRLc_DROP_GYR YT921X_METER_CTRLc_DROP(0)
#define YT921X_METER_CTRLc_DROP_YR YT921X_METER_CTRLc_DROP(1)
#define YT921X_METER_CTRLc_DROP_R YT921X_METER_CTRLc_DROP(2)
#define YT921X_METER_CTRLc_DROP_NONE YT921X_METER_CTRLc_DROP(3)
#define YT921X_METER_CTRLc_COLOR_BLIND BIT(10)
#define YT921X_METER_CTRLc_UNIT_M GENMASK(9, 7)
#define YT921X_METER_CTRLc_UNIT(x) FIELD_PREP(YT921X_METER_CTRLc_UNIT_M, (x))
#define YT921X_METER_CTRLc_BYTE_MODE_INCLUDE_GAP BIT(6) /* +GAP_VALUE bytes each packet */
#define YT921X_METER_CTRLc_PKT_MODE BIT(5) /* 0: byte rate mode */
#define YT921X_METER_CTRLc_RFC2698 BIT(4) /* 0: RFC4115 */
#define YT921X_METER_CTRLbc_CBS_M GENMASK_ULL(35, 20)
#define YT921X_METER_CTRLbc_CBS(x) FIELD_PREP(YT921X_METER_CTRLbc_CBS_M, (x))
#define YT921X_METER_CTRLb_CIR_M GENMASK(19, 2)
#define YT921X_METER_CTRLb_CIR(x) FIELD_PREP(YT921X_METER_CTRLb_CIR_M, (x))
#define YT921X_METER_CTRLab_EBS_M GENMASK_ULL(33, 18)
#define YT921X_METER_CTRLab_EBS(x) FIELD_PREP(YT921X_METER_CTRLab_EBS_M, (x))
#define YT921X_METER_CTRLa_EIR_M GENMASK(17, 0)
#define YT921X_METER_CTRLa_EIR(x) FIELD_PREP(YT921X_METER_CTRLa_EIR_M, (x))
#define YT921X_METERn_STAT(x) (0x221000 + 8 * (x))
#define YT921X_MIRROR 0x300300
#define YT921X_MIRROR_IGR_PORTS_M GENMASK(26, 16)
#define YT921X_MIRROR_IGR_PORTS(x) FIELD_PREP(YT921X_MIRROR_IGR_PORTS_M, (x))
#define YT921X_MIRROR_IGR_PORTn(port) BIT((port) + 16)
#define YT921X_MIRROR_EGR_PORTS_M GENMASK(14, 4)
#define YT921X_MIRROR_EGR_PORTS(x) FIELD_PREP(YT921X_MIRROR_EGR_PORTS_M, (x))
#define YT921X_MIRROR_EGR_PORTn(port) BIT((port) + 4)
#define YT921X_MIRROR_PORT_M GENMASK(3, 0)
#define YT921X_MIRROR_PORT(x) FIELD_PREP(YT921X_MIRROR_PORT_M, (x))
#define YT921X_PORT_SHAPE_SLOT 0x34000c
#define YT921X_PORT_SHAPE_SLOT_SLOT_M GENMASK(11, 0)
#define YT921X_PORTn_SHAPE_CTRL(port) (0x354000 + 8 * (port))
#define YT921X_PORT_SHAPE_CTRLb_EN BIT(4)
#define YT921X_PORT_SHAPE_CTRLb_PKT_MODE BIT(3) /* 0: byte rate mode */
#define YT921X_PORT_SHAPE_CTRLb_UNIT_M GENMASK(2, 0)
#define YT921X_PORT_SHAPE_CTRLb_UNIT(x) FIELD_PREP(YT921X_PORT_SHAPE_CTRLb_UNIT_M, (x))
#define YT921X_PORT_SHAPE_CTRLa_CBS_M GENMASK(31, 18)
#define YT921X_PORT_SHAPE_CTRLa_CBS(x) FIELD_PREP(YT921X_PORT_SHAPE_CTRLa_CBS_M, (x))
#define YT921X_PORT_SHAPE_CTRLa_CIR_M GENMASK(17, 0)
#define YT921X_PORT_SHAPE_CTRLa_CIR(x) FIELD_PREP(YT921X_PORT_SHAPE_CTRLa_CIR_M, (x))
#define YT921X_PORTn_SHAPE_STAT(port) (0x356000 + 4 * (port))
#define YT921X_TOKEN_BYTE_C 1 /* 1 token = 2^1 byte */
#define YT921X_TOKEN_PKT_C -6 /* 1 token = 2^-6 packets */
#define YT921X_TOKEN_RATE_C -15
#define YT921X_METER_SLOT_MIN 80
#define YT921X_METER_UNIT_MAX ((1 << 3) - 1)
#define YT921X_METER_CIR_MAX ((1 << 18) - 1)
#define YT921X_METER_CBS_MAX ((1 << 16) - 1)
#define YT921X_PORT_SHAPE_SLOT_MIN 80
#define YT921X_SHAPE_UNIT_MAX ((1 << 3) - 1)
#define YT921X_SHAPE_CIR_MAX ((1 << 18) - 1)
#define YT921X_SHAPE_CBS_MAX ((1 << 14) - 1)
#define YT921X_ACL_ENT_PER_BLK 8
#define YT921X_ACL_NUM 384
#define YT921X_ACL_ORD_NUM 512
struct yt921x_acl_entry {
u32 key[2];
u32 mask[2];
};
struct yt921x_acl_rule {
unsigned long tag;
enum tc_setup_type type;
u32 action[3];
bool sw_assisted;
u8 mask;
struct yt921x_acl_entry entries[YT921X_ACL_ENT_PER_BLK];
};
struct yt921x_acl_blk {
struct yt921x_acl_rule *rules[YT921X_ACL_ENT_PER_BLK];
};
void yt921x_dsa_port_policer_del(struct dsa_switch *ds, int port);
int
yt921x_dsa_port_policer_add(struct dsa_switch *ds, int port,
const struct flow_action_police *police,
struct netlink_ext_ack *extack);
int
yt921x_dsa_port_setup_tc(struct dsa_switch *ds, int port,
enum tc_setup_type type, void *type_data);
int
yt921x_dsa_cls_flower_del(struct dsa_switch *ds, int port,
struct flow_cls_offload *cls, bool ingress);
int
yt921x_dsa_cls_flower_add(struct dsa_switch *ds, int port,
struct flow_cls_offload *cls, bool ingress);
void
yt921x_dsa_port_mirror_del(struct dsa_switch *ds, int port,
struct dsa_mall_mirror_tc_entry *mirror);
int
yt921x_dsa_port_mirror_add(struct dsa_switch *ds, int port,
struct dsa_mall_mirror_tc_entry *mirror,
bool ingress, struct netlink_ext_ack *extack);
int yt921x_chip_setup_tc(struct yt921x_priv *priv);
int yt921x_chip_setup_acl(struct yt921x_priv *priv);
#endif
|