root/drivers/net/ethernet/stmicro/stmmac/stmmac_vlan.h
/* 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__ */