|
@@ -2899,6 +2899,17 @@ static int mv88e6xxx_setup(struct dsa_switch *ds)
|
|
|
goto unlock;
|
|
|
}
|
|
|
|
|
|
+ /* Some generations have the configuration of sending reserved
|
|
|
+ * management frames to the CPU in global2, others in
|
|
|
+ * global1. Hence it does not fit the two setup functions
|
|
|
+ * above.
|
|
|
+ */
|
|
|
+ if (chip->info->ops->mgmt_rsvd2cpu) {
|
|
|
+ err = chip->info->ops->mgmt_rsvd2cpu(chip);
|
|
|
+ if (err)
|
|
|
+ goto unlock;
|
|
|
+ }
|
|
|
+
|
|
|
unlock:
|
|
|
mutex_unlock(&chip->reg_lock);
|
|
|
|
|
@@ -3221,6 +3232,7 @@ static const struct mv88e6xxx_ops mv88e6085_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6095_ops = {
|
|
@@ -3237,6 +3249,7 @@ static const struct mv88e6xxx_ops mv88e6095_ops = {
|
|
|
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
|
|
|
.stats_get_strings = mv88e6095_stats_get_strings,
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6097_ops = {
|
|
@@ -3257,6 +3270,7 @@ static const struct mv88e6xxx_ops mv88e6097_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6123_ops = {
|
|
@@ -3275,6 +3289,7 @@ static const struct mv88e6xxx_ops mv88e6123_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6131_ops = {
|
|
@@ -3295,6 +3310,7 @@ static const struct mv88e6xxx_ops mv88e6131_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6161_ops = {
|
|
@@ -3315,6 +3331,7 @@ static const struct mv88e6xxx_ops mv88e6161_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6165_ops = {
|
|
@@ -3331,6 +3348,7 @@ static const struct mv88e6xxx_ops mv88e6165_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6171_ops = {
|
|
@@ -3352,6 +3370,7 @@ static const struct mv88e6xxx_ops mv88e6171_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6172_ops = {
|
|
@@ -3375,6 +3394,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6175_ops = {
|
|
@@ -3396,6 +3416,7 @@ static const struct mv88e6xxx_ops mv88e6175_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6176_ops = {
|
|
@@ -3419,6 +3440,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6185_ops = {
|
|
@@ -3437,6 +3459,7 @@ static const struct mv88e6xxx_ops mv88e6185_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6190_ops = {
|
|
@@ -3459,6 +3482,7 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
|
|
|
.stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6390_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6390_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6190x_ops = {
|
|
@@ -3481,6 +3505,7 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
|
|
|
.stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6390_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6390_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6191_ops = {
|
|
@@ -3503,6 +3528,7 @@ static const struct mv88e6xxx_ops mv88e6191_ops = {
|
|
|
.stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6390_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6390_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6240_ops = {
|
|
@@ -3526,6 +3552,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6290_ops = {
|
|
@@ -3548,6 +3575,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
|
|
|
.stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6390_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6390_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6320_ops = {
|
|
@@ -3570,6 +3598,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
|
|
|
.stats_get_stats = mv88e6320_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6321_ops = {
|
|
@@ -3613,6 +3642,7 @@ static const struct mv88e6xxx_ops mv88e6350_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6351_ops = {
|
|
@@ -3634,6 +3664,7 @@ static const struct mv88e6xxx_ops mv88e6351_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6352_ops = {
|
|
@@ -3657,6 +3688,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
|
|
|
.stats_get_stats = mv88e6095_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6095_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6095_g2_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6390_ops = {
|
|
@@ -3679,6 +3711,7 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
|
|
|
.stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6390_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6390_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
|
@@ -3701,6 +3734,7 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
|
|
.stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6390_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6390_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6391_ops = {
|
|
@@ -3723,6 +3757,7 @@ static const struct mv88e6xxx_ops mv88e6391_ops = {
|
|
|
.stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
.g1_set_cpu_port = mv88e6390_g1_set_cpu_port,
|
|
|
.g1_set_egress_port = mv88e6390_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
};
|
|
|
|
|
|
static int mv88e6xxx_verify_madatory_ops(struct mv88e6xxx_chip *chip,
|