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