net: dsa: qca8k: Add 802.1q VLAN support
This adds full 802.1q VLAN support to the qca8k, allowing the use of vlan_filtering and more complicated bridging setups than allowed by basic port VLAN support. Tested with a number of untagged ports with separate VLANs and then a trunk port with all the VLANs tagged on it. v3: - Pull QCA8K_PORT_VID_DEF changes into separate cleanup patch - Reverse Christmas tree notation for variable definitions - Use untagged instead of tagged for consistency v2: - Return sensible errnos on failure rather than -1 (rmk) - Style cleanups based on Florian's feedback - Silently allow VLAN 0 as device correctly treats this as no tag Signed-off-by: Jonathan McDowell <noodles@earth.li> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Acked-by: Vladimir Oltean <olteanv@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e9d204fde5
commit
69462fe6a3
@@ -128,6 +128,19 @@
|
||||
#define QCA8K_ATU_FUNC_FULL BIT(12)
|
||||
#define QCA8K_ATU_FUNC_PORT_M 0xf
|
||||
#define QCA8K_ATU_FUNC_PORT_S 8
|
||||
#define QCA8K_REG_VTU_FUNC0 0x610
|
||||
#define QCA8K_VTU_FUNC0_VALID BIT(20)
|
||||
#define QCA8K_VTU_FUNC0_IVL_EN BIT(19)
|
||||
#define QCA8K_VTU_FUNC0_EG_MODE_S(_i) (4 + (_i) * 2)
|
||||
#define QCA8K_VTU_FUNC0_EG_MODE_MASK 3
|
||||
#define QCA8K_VTU_FUNC0_EG_MODE_UNMOD 0
|
||||
#define QCA8K_VTU_FUNC0_EG_MODE_UNTAG 1
|
||||
#define QCA8K_VTU_FUNC0_EG_MODE_TAG 2
|
||||
#define QCA8K_VTU_FUNC0_EG_MODE_NOT 3
|
||||
#define QCA8K_REG_VTU_FUNC1 0x614
|
||||
#define QCA8K_VTU_FUNC1_BUSY BIT(31)
|
||||
#define QCA8K_VTU_FUNC1_VID_S 16
|
||||
#define QCA8K_VTU_FUNC1_FULL BIT(4)
|
||||
#define QCA8K_REG_GLOBAL_FW_CTRL0 0x620
|
||||
#define QCA8K_GLOBAL_FW_CTRL0_CPU_PORT_EN BIT(10)
|
||||
#define QCA8K_REG_GLOBAL_FW_CTRL1 0x624
|
||||
@@ -137,6 +150,11 @@
|
||||
#define QCA8K_GLOBAL_FW_CTRL1_UC_DP_S 0
|
||||
#define QCA8K_PORT_LOOKUP_CTRL(_i) (0x660 + (_i) * 0xc)
|
||||
#define QCA8K_PORT_LOOKUP_MEMBER GENMASK(6, 0)
|
||||
#define QCA8K_PORT_LOOKUP_VLAN_MODE GENMASK(9, 8)
|
||||
#define QCA8K_PORT_LOOKUP_VLAN_MODE_NONE (0 << 8)
|
||||
#define QCA8K_PORT_LOOKUP_VLAN_MODE_FALLBACK (1 << 8)
|
||||
#define QCA8K_PORT_LOOKUP_VLAN_MODE_CHECK (2 << 8)
|
||||
#define QCA8K_PORT_LOOKUP_VLAN_MODE_SECURE (3 << 8)
|
||||
#define QCA8K_PORT_LOOKUP_STATE_MASK GENMASK(18, 16)
|
||||
#define QCA8K_PORT_LOOKUP_STATE_DISABLED (0 << 16)
|
||||
#define QCA8K_PORT_LOOKUP_STATE_BLOCKING (1 << 16)
|
||||
@@ -180,6 +198,15 @@ enum qca8k_fdb_cmd {
|
||||
QCA8K_FDB_SEARCH = 7,
|
||||
};
|
||||
|
||||
enum qca8k_vlan_cmd {
|
||||
QCA8K_VLAN_FLUSH = 1,
|
||||
QCA8K_VLAN_LOAD = 2,
|
||||
QCA8K_VLAN_PURGE = 3,
|
||||
QCA8K_VLAN_REMOVE_PORT = 4,
|
||||
QCA8K_VLAN_NEXT = 5,
|
||||
QCA8K_VLAN_READ = 6,
|
||||
};
|
||||
|
||||
struct ar8xxx_port_status {
|
||||
int enabled;
|
||||
};
|
||||
|
Reference in New Issue
Block a user