net: dsa: mv88e6xxx: Support policy entries in the VTU
A VTU entry with policy enabled is used in combination with a port's VTU policy setting to override normal switching behavior for frames assigned to the entry's VID. A typical example is to Treat all frames in a particular VLAN as control traffic, and trap them to the CPU. In which case the relevant user port's VTU policy would be set to TRAP. Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7af4a361a6
commit
bb03b280e0
|
@ -179,6 +179,7 @@ struct mv88e6xxx_vtu_entry {
|
|||
u16 fid;
|
||||
u8 sid;
|
||||
bool valid;
|
||||
bool policy;
|
||||
u8 member[DSA_MAX_PORTS];
|
||||
u8 state[DSA_MAX_PORTS];
|
||||
};
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
|
||||
/* Offset 0x02: VTU FID Register */
|
||||
#define MV88E6352_G1_VTU_FID 0x02
|
||||
#define MV88E6352_G1_VTU_FID_VID_POLICY 0x1000
|
||||
#define MV88E6352_G1_VTU_FID_MASK 0x0fff
|
||||
|
||||
/* Offset 0x03: VTU SID Register */
|
||||
|
|
|
@ -27,7 +27,7 @@ static int mv88e6xxx_g1_vtu_fid_read(struct mv88e6xxx_chip *chip,
|
|||
return err;
|
||||
|
||||
entry->fid = val & MV88E6352_G1_VTU_FID_MASK;
|
||||
|
||||
entry->policy = !!(val & MV88E6352_G1_VTU_FID_VID_POLICY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,9 @@ static int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip,
|
|||
{
|
||||
u16 val = entry->fid & MV88E6352_G1_VTU_FID_MASK;
|
||||
|
||||
if (entry->policy)
|
||||
val |= MV88E6352_G1_VTU_FID_VID_POLICY;
|
||||
|
||||
return mv88e6xxx_g1_write(chip, MV88E6352_G1_VTU_FID, val);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue