net: dsa: mv88e6xxx: add egress mode enumeration
As for the frame mode, add a mv88e6xxx_egress_mode enumeration instead of a 16-bit register mask. Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
774439e532
commit
31bef4e90c
@ -1722,8 +1722,8 @@ static int mv88e6xxx_switch_reset(struct mv88e6xxx_chip *chip)
|
||||
}
|
||||
|
||||
static int mv88e6xxx_set_port_mode(struct mv88e6xxx_chip *chip, int port,
|
||||
enum mv88e6xxx_frame_mode frame, u16 egress,
|
||||
u16 etype)
|
||||
enum mv88e6xxx_frame_mode frame,
|
||||
enum mv88e6xxx_egress_mode egress, u16 etype)
|
||||
{
|
||||
int err;
|
||||
|
||||
@ -1747,14 +1747,14 @@ static int mv88e6xxx_set_port_mode(struct mv88e6xxx_chip *chip, int port,
|
||||
static int mv88e6xxx_set_port_mode_normal(struct mv88e6xxx_chip *chip, int port)
|
||||
{
|
||||
return mv88e6xxx_set_port_mode(chip, port, MV88E6XXX_FRAME_MODE_NORMAL,
|
||||
PORT_CONTROL_EGRESS_UNMODIFIED,
|
||||
MV88E6XXX_EGRESS_MODE_UNMODIFIED,
|
||||
PORT_ETH_TYPE_DEFAULT);
|
||||
}
|
||||
|
||||
static int mv88e6xxx_set_port_mode_dsa(struct mv88e6xxx_chip *chip, int port)
|
||||
{
|
||||
return mv88e6xxx_set_port_mode(chip, port, MV88E6XXX_FRAME_MODE_DSA,
|
||||
PORT_CONTROL_EGRESS_UNMODIFIED,
|
||||
MV88E6XXX_EGRESS_MODE_UNMODIFIED,
|
||||
PORT_ETH_TYPE_DEFAULT);
|
||||
}
|
||||
|
||||
@ -1762,7 +1762,8 @@ static int mv88e6xxx_set_port_mode_edsa(struct mv88e6xxx_chip *chip, int port)
|
||||
{
|
||||
return mv88e6xxx_set_port_mode(chip, port,
|
||||
MV88E6XXX_FRAME_MODE_ETHERTYPE,
|
||||
PORT_CONTROL_EGRESS_ADD_TAG, ETH_P_EDSA);
|
||||
MV88E6XXX_EGRESS_MODE_ETHERTYPE,
|
||||
ETH_P_EDSA);
|
||||
}
|
||||
|
||||
static int mv88e6xxx_setup_port_mode(struct mv88e6xxx_chip *chip, int port)
|
||||
|
@ -39,6 +39,13 @@
|
||||
#define MV88E6XXX_MAX_PVT_SWITCHES 32
|
||||
#define MV88E6XXX_MAX_PVT_PORTS 16
|
||||
|
||||
enum mv88e6xxx_egress_mode {
|
||||
MV88E6XXX_EGRESS_MODE_UNMODIFIED,
|
||||
MV88E6XXX_EGRESS_MODE_UNTAGGED,
|
||||
MV88E6XXX_EGRESS_MODE_TAGGED,
|
||||
MV88E6XXX_EGRESS_MODE_ETHERTYPE,
|
||||
};
|
||||
|
||||
enum mv88e6xxx_frame_mode {
|
||||
MV88E6XXX_FRAME_MODE_NORMAL,
|
||||
MV88E6XXX_FRAME_MODE_DSA,
|
||||
|
@ -425,7 +425,7 @@ int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state)
|
||||
}
|
||||
|
||||
int mv88e6xxx_port_set_egress_mode(struct mv88e6xxx_chip *chip, int port,
|
||||
u16 mode)
|
||||
enum mv88e6xxx_egress_mode mode)
|
||||
{
|
||||
int err;
|
||||
u16 reg;
|
||||
@ -435,7 +435,23 @@ int mv88e6xxx_port_set_egress_mode(struct mv88e6xxx_chip *chip, int port,
|
||||
return err;
|
||||
|
||||
reg &= ~PORT_CONTROL_EGRESS_MASK;
|
||||
reg |= mode;
|
||||
|
||||
switch (mode) {
|
||||
case MV88E6XXX_EGRESS_MODE_UNMODIFIED:
|
||||
reg |= PORT_CONTROL_EGRESS_UNMODIFIED;
|
||||
break;
|
||||
case MV88E6XXX_EGRESS_MODE_UNTAGGED:
|
||||
reg |= PORT_CONTROL_EGRESS_UNTAGGED;
|
||||
break;
|
||||
case MV88E6XXX_EGRESS_MODE_TAGGED:
|
||||
reg |= PORT_CONTROL_EGRESS_TAGGED;
|
||||
break;
|
||||
case MV88E6XXX_EGRESS_MODE_ETHERTYPE:
|
||||
reg |= PORT_CONTROL_EGRESS_ADD_TAG;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return mv88e6xxx_port_write(chip, port, PORT_CONTROL, reg);
|
||||
}
|
||||
|
@ -212,7 +212,7 @@ int mv88e6xxx_port_set_8021q_mode(struct mv88e6xxx_chip *chip, int port,
|
||||
int mv88e6095_port_tag_remap(struct mv88e6xxx_chip *chip, int port);
|
||||
int mv88e6390_port_tag_remap(struct mv88e6xxx_chip *chip, int port);
|
||||
int mv88e6xxx_port_set_egress_mode(struct mv88e6xxx_chip *chip, int port,
|
||||
u16 mode);
|
||||
enum mv88e6xxx_egress_mode mode);
|
||||
int mv88e6085_port_set_frame_mode(struct mv88e6xxx_chip *chip, int port,
|
||||
enum mv88e6xxx_frame_mode mode);
|
||||
int mv88e6351_port_set_frame_mode(struct mv88e6xxx_chip *chip, int port,
|
||||
|
Loading…
x
Reference in New Issue
Block a user