net: dsa: mv88e6xxx: add VTU Load/Purge operation
Add a new vtu_loadpurge operation to the chip info structure to differ the various implementations of the VTU accesses. Now that the STU handling is abstracted behind VTU operations, kill the obsolete MV88E6XXX_FLAG_STU flag. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
Tento commit je obsažen v:

odevzdal
David S. Miller

rodič
f1394b78a6
revize
0ad5daf6ba
@@ -302,6 +302,72 @@ int mv88e6352_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mv88e6185_g1_vtu_loadpurge(struct mv88e6xxx_chip *chip,
|
||||
struct mv88e6xxx_vtu_entry *entry)
|
||||
{
|
||||
u16 op = GLOBAL_VTU_OP_VTU_LOAD_PURGE;
|
||||
int err;
|
||||
|
||||
err = mv88e6xxx_g1_vtu_op_wait(chip);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mv88e6xxx_g1_vtu_vid_write(chip, entry);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (entry->valid) {
|
||||
err = mv88e6185_g1_vtu_data_write(chip, entry);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* VTU DBNum[3:0] are located in VTU Operation 3:0
|
||||
* VTU DBNum[7:4] are located in VTU Operation 11:8
|
||||
*/
|
||||
op |= entry->fid & 0x000f;
|
||||
op |= (entry->fid & 0x00f0) << 8;
|
||||
}
|
||||
|
||||
return mv88e6xxx_g1_vtu_op(chip, op);
|
||||
}
|
||||
|
||||
int mv88e6352_g1_vtu_loadpurge(struct mv88e6xxx_chip *chip,
|
||||
struct mv88e6xxx_vtu_entry *entry)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = mv88e6xxx_g1_vtu_op_wait(chip);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mv88e6xxx_g1_vtu_vid_write(chip, entry);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (entry->valid) {
|
||||
/* Write MemberTag and PortState data */
|
||||
err = mv88e6185_g1_vtu_data_write(chip, entry);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mv88e6xxx_g1_vtu_sid_write(chip, entry);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* Load STU entry */
|
||||
err = mv88e6xxx_g1_vtu_op(chip, GLOBAL_VTU_OP_STU_LOAD_PURGE);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mv88e6xxx_g1_vtu_fid_write(chip, entry);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Load/Purge VTU entry */
|
||||
return mv88e6xxx_g1_vtu_op(chip, GLOBAL_VTU_OP_VTU_LOAD_PURGE);
|
||||
}
|
||||
|
||||
int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip)
|
||||
{
|
||||
int err;
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele