summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/stmicro/stmmac/stmmac_vlan.h
blob: c24f89a9049b88e99d3b5e73fd7e2e00dabad876 (plain)
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
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2025, Altera Corporation
 * stmmac VLAN(802.1Q) handling
 */

#ifndef __STMMAC_VLAN_H__
#define __STMMAC_VLAN_H__

#include <linux/bitfield.h>
#include "dwxgmac2.h"

#define VLAN_TAG			0x00000050
#define VLAN_TAG_DATA			0x00000054
#define VLAN_HASH_TABLE			0x00000058
#define VLAN_INCL			0x00000060

/* MAC VLAN */
#define VLAN_EDVLP			BIT(26)
#define VLAN_VTHM			BIT(25)
#define VLAN_DOVLTC			BIT(20)
#define VLAN_ESVL			BIT(18)
#define VLAN_ETV			BIT(16)
#define VLAN_VID			GENMASK(15, 0)
#define VLAN_VLTI			BIT(20)
#define VLAN_CSVL			BIT(19)
#define VLAN_VLC			GENMASK(17, 16)
#define VLAN_VLC_SHIFT			16
#define VLAN_VLHT			GENMASK(15, 0)

/* MAC VLAN Tag */
#define VLAN_TAG_VID			GENMASK(15, 0)
#define VLAN_TAG_ETV			BIT(16)

/* MAC VLAN Tag Control */
#define VLAN_TAG_CTRL_OB		BIT(0)
#define VLAN_TAG_CTRL_CT		BIT(1)
#define VLAN_TAG_CTRL_OFS_MASK		GENMASK(6, 2)
#define VLAN_TAG_CTRL_OFS_SHIFT		2
#define VLAN_TAG_CTRL_EVLS_MASK		GENMASK(22, 21)
#define VLAN_TAG_CTRL_EVLS_SHIFT	21
#define VLAN_TAG_CTRL_EVLRXS		BIT(24)

#define VLAN_TAG_STRIP_NONE		FIELD_PREP(VLAN_TAG_CTRL_EVLS_MASK, 0x0)
#define VLAN_TAG_STRIP_PASS		FIELD_PREP(VLAN_TAG_CTRL_EVLS_MASK, 0x1)
#define VLAN_TAG_STRIP_FAIL		FIELD_PREP(VLAN_TAG_CTRL_EVLS_MASK, 0x2)
#define VLAN_TAG_STRIP_ALL		FIELD_PREP(VLAN_TAG_CTRL_EVLS_MASK, 0x3)

/* MAC VLAN Tag Data/Filter */
#define VLAN_TAG_DATA_VID		GENMASK(15, 0)
#define VLAN_TAG_DATA_VEN		BIT(16)
#define VLAN_TAG_DATA_ETV		BIT(17)

/* MAC VLAN HW FEAT */
#define HW_FEATURE3			0x00000128
#define VLAN_HW_FEAT_NRVF		GENMASK(2, 0)

extern const struct stmmac_vlan_ops dwmac_vlan_ops;
extern const struct stmmac_vlan_ops dwxgmac210_vlan_ops;
extern const struct stmmac_vlan_ops dwxlgmac2_vlan_ops;

u32 stmmac_get_num_vlan(void __iomem *ioaddr);

#endif /* __STMMAC_VLAN_H__ */