xref: /linux/drivers/net/ethernet/stmicro/stmmac/stmmac_vlan.h (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2025, Altera Corporation
4  * stmmac VLAN(802.1Q) handling
5  */
6 
7 #ifndef __STMMAC_VLAN_H__
8 #define __STMMAC_VLAN_H__
9 
10 #include <linux/bitfield.h>
11 #include "dwxgmac2.h"
12 
13 #define VLAN_TAG			0x00000050
14 #define VLAN_TAG_DATA			0x00000054
15 #define VLAN_HASH_TABLE			0x00000058
16 #define VLAN_INCL			0x00000060
17 
18 /* MAC VLAN */
19 #define VLAN_EDVLP			BIT(26)
20 #define VLAN_VTHM			BIT(25)
21 #define VLAN_DOVLTC			BIT(20)
22 #define VLAN_ESVL			BIT(18)
23 #define VLAN_ETV			BIT(16)
24 #define VLAN_VID			GENMASK(15, 0)
25 #define VLAN_VLTI			BIT(20)
26 #define VLAN_CSVL			BIT(19)
27 #define VLAN_VLC			GENMASK(17, 16)
28 #define VLAN_VLC_SHIFT			16
29 #define VLAN_VLHT			GENMASK(15, 0)
30 
31 /* MAC VLAN Tag */
32 #define VLAN_TAG_VID			GENMASK(15, 0)
33 #define VLAN_TAG_ETV			BIT(16)
34 
35 /* MAC VLAN Tag Control */
36 #define VLAN_TAG_CTRL_OB		BIT(0)
37 #define VLAN_TAG_CTRL_CT		BIT(1)
38 #define VLAN_TAG_CTRL_OFS_MASK		GENMASK(6, 2)
39 #define VLAN_TAG_CTRL_OFS_SHIFT		2
40 #define VLAN_TAG_CTRL_EVLS_MASK		GENMASK(22, 21)
41 #define VLAN_TAG_CTRL_EVLS_SHIFT	21
42 #define VLAN_TAG_CTRL_EVLRXS		BIT(24)
43 
44 #define VLAN_TAG_STRIP_NONE		FIELD_PREP(VLAN_TAG_CTRL_EVLS_MASK, 0x0)
45 #define VLAN_TAG_STRIP_PASS		FIELD_PREP(VLAN_TAG_CTRL_EVLS_MASK, 0x1)
46 #define VLAN_TAG_STRIP_FAIL		FIELD_PREP(VLAN_TAG_CTRL_EVLS_MASK, 0x2)
47 #define VLAN_TAG_STRIP_ALL		FIELD_PREP(VLAN_TAG_CTRL_EVLS_MASK, 0x3)
48 
49 /* MAC VLAN Tag Data/Filter */
50 #define VLAN_TAG_DATA_VID		GENMASK(15, 0)
51 #define VLAN_TAG_DATA_VEN		BIT(16)
52 #define VLAN_TAG_DATA_ETV		BIT(17)
53 
54 /* MAC VLAN HW FEAT */
55 #define HW_FEATURE3			0x00000128
56 #define VLAN_HW_FEAT_NRVF		GENMASK(2, 0)
57 
58 extern const struct stmmac_vlan_ops dwmac_vlan_ops;
59 extern const struct stmmac_vlan_ops dwxgmac210_vlan_ops;
60 extern const struct stmmac_vlan_ops dwxlgmac2_vlan_ops;
61 
62 u32 stmmac_get_num_vlan(void __iomem *ioaddr);
63 
64 #endif /* __STMMAC_VLAN_H__ */
65