net: dsa: mv88e6xxx: add egress mode enumeration
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>
Thu, 8 Jun 2017 22:34:09 +0000 (18:34 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Jun 2017 16:10:57 +0000 (12:10 -0400)
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>
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/mv88e6xxx/chip.h
drivers/net/dsa/mv88e6xxx/port.c
drivers/net/dsa/mv88e6xxx/port.h

index bf7ad2e8b4d77fce91fd5aa3e9917f90cb8f76d4..b610429f7516c2a17c64aa085d3df22e9cbbb7b8 100644 (file)
@@ -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)
index 98c24af977fd674710bb59a22878781efde3c0c8..fb7dea33a44ad0b9593c183a7ded92e31b26d7fb 100644 (file)
 #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,
index fc09b26f9b49fa15c0a82f9fbee816dd0cdaa0c3..09e17131a6bdc174aff2d4dcbea04edb2ad9d404 100644 (file)
@@ -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);
 }
index 4f5e1ccfadc65da8dadab9c3ee7d9cce803cbcf8..1de200074e21c39a4ba49a1bc5880a93a01c9e40 100644 (file)
@@ -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,