Messages in this thread | | | Date | Mon, 13 Jun 2022 12:42:19 +0300 | From | Vladimir Oltean <> | Subject | Re: [RFC Patch net-next v2 09/15] net: dsa: microchip: update fdb add/del/dump in ksz_common |
| |
On Mon, May 30, 2022 at 04:12:51PM +0530, Arun Ramadoss wrote: > This patch makes the dsa_switch_hook for fdbs to use ksz_common.c file. > And from ksz_common, individual switches fdb functions are called using > the dev->dev_ops. > > Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com> > ---
I had to jump ahead and look at the other patches to see if you plan on doing anything about the r_dyn_mac_table, r_sta_mac_table, w_sta_mac_table dev_ops which are only implemented for ksz8. They become redundant when you introduce new dev_ops for the entire FDB dump, add, del procedure.
I see those aren't touched - what's the plan there?
> drivers/net/dsa/microchip/ksz8795.c | 30 +++++++++++++++ > drivers/net/dsa/microchip/ksz9477.c | 28 +++++++------- > drivers/net/dsa/microchip/ksz_common.c | 52 +++++++++++++++----------- > drivers/net/dsa/microchip/ksz_common.h | 10 +++++ > 4 files changed, 84 insertions(+), 36 deletions(-) > > diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchip/ksz8795.c > index abd28dc44eb5..528de481b319 100644 > --- a/drivers/net/dsa/microchip/ksz8795.c > +++ b/drivers/net/dsa/microchip/ksz8795.c > @@ -958,6 +958,35 @@ static void ksz8_flush_dyn_mac_table(struct ksz_device *dev, int port) > } > } > > +static int ksz8_fdb_dump(struct ksz_device *dev, int port, > + dsa_fdb_dump_cb_t *cb, void *data) > +{ > + int ret = 0; > + u16 i = 0; > + u16 entries = 0; > + u8 timestamp = 0; > + u8 fid; > + u8 member; > + struct alu_struct alu; > + > + do { > + alu.is_static = false; > + ret = dev->dev_ops->r_dyn_mac_table(dev, i, alu.mac, &fid, > + &member, ×tamp, > + &entries); > + if (!ret && (member & BIT(port))) { > + ret = cb(alu.mac, alu.fid, alu.is_static, data); > + if (ret) > + break; > + } > + i++; > + } while (i < entries); > + if (i >= entries) > + ret = 0; > + > + return ret; > +} > + > static int ksz8_mdb_add(struct ksz_device *dev, int port, > const struct switchdev_obj_port_mdb *mdb, > struct dsa_db db) > @@ -1528,6 +1557,7 @@ static const struct ksz_dev_ops ksz8_dev_ops = { > .r_mib_pkt = ksz8_r_mib_pkt, > .freeze_mib = ksz8_freeze_mib, > .port_init_cnt = ksz8_port_init_cnt, > + .fdb_dump = ksz8_fdb_dump, > .mdb_add = ksz8_mdb_add, > .mdb_del = ksz8_mdb_del, > .vlan_filtering = ksz8_port_vlan_filtering, > diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c > index 045856656466..d70e0c32b309 100644 > --- a/drivers/net/dsa/microchip/ksz9477.c > +++ b/drivers/net/dsa/microchip/ksz9477.c > @@ -457,11 +457,10 @@ static int ksz9477_port_vlan_del(struct ksz_device *dev, int port, > return 0; > } > > -static int ksz9477_port_fdb_add(struct dsa_switch *ds, int port, > - const unsigned char *addr, u16 vid, > - struct dsa_db db) > +static int ksz9477_fdb_add(struct ksz_device *dev, int port, > + const unsigned char *addr, u16 vid, > + struct dsa_db db) > { > - struct ksz_device *dev = ds->priv; > u32 alu_table[4]; > u32 data; > int ret = 0; > @@ -515,11 +514,10 @@ static int ksz9477_port_fdb_add(struct dsa_switch *ds, int port, > return ret; > } > > -static int ksz9477_port_fdb_del(struct dsa_switch *ds, int port, > - const unsigned char *addr, u16 vid, > - struct dsa_db db) > +static int ksz9477_fdb_del(struct ksz_device *dev, int port, > + const unsigned char *addr, u16 vid, > + struct dsa_db db) > { > - struct ksz_device *dev = ds->priv; > u32 alu_table[4]; > u32 data; > int ret = 0; > @@ -606,10 +604,9 @@ static void ksz9477_convert_alu(struct alu_struct *alu, u32 *alu_table) > alu->mac[5] = alu_table[3] & 0xFF; > } > > -static int ksz9477_port_fdb_dump(struct dsa_switch *ds, int port, > - dsa_fdb_dump_cb_t *cb, void *data) > +static int ksz9477_fdb_dump(struct ksz_device *dev, int port, > + dsa_fdb_dump_cb_t *cb, void *data) > { > - struct ksz_device *dev = ds->priv; > int ret = 0; > u32 ksz_data; > u32 alu_table[4]; > @@ -1315,9 +1312,9 @@ static const struct dsa_switch_ops ksz9477_switch_ops = { > .port_vlan_filtering = ksz_port_vlan_filtering, > .port_vlan_add = ksz_port_vlan_add, > .port_vlan_del = ksz_port_vlan_del, > - .port_fdb_dump = ksz9477_port_fdb_dump, > - .port_fdb_add = ksz9477_port_fdb_add, > - .port_fdb_del = ksz9477_port_fdb_del, > + .port_fdb_dump = ksz_port_fdb_dump, > + .port_fdb_add = ksz_port_fdb_add, > + .port_fdb_del = ksz_port_fdb_del, > .port_mdb_add = ksz_port_mdb_add, > .port_mdb_del = ksz_port_mdb_del, > .port_mirror_add = ksz_port_mirror_add, > @@ -1403,6 +1400,9 @@ static const struct ksz_dev_ops ksz9477_dev_ops = { > .mirror_del = ksz9477_port_mirror_del, > .get_stp_reg = ksz9477_get_stp_reg, > .get_caps = ksz9477_get_caps, > + .fdb_dump = ksz9477_fdb_dump, > + .fdb_add = ksz9477_fdb_add, > + .fdb_del = ksz9477_fdb_del, > .mdb_add = ksz9477_mdb_add, > .mdb_del = ksz9477_mdb_del, > .shutdown = ksz9477_reset_switch, > diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c > index b9082952db0f..8f79ff1ac648 100644 > --- a/drivers/net/dsa/microchip/ksz_common.c > +++ b/drivers/net/dsa/microchip/ksz_common.c > @@ -765,32 +765,40 @@ void ksz_port_fast_age(struct dsa_switch *ds, int port) > } > EXPORT_SYMBOL_GPL(ksz_port_fast_age); > > +int ksz_port_fdb_add(struct dsa_switch *ds, int port, > + const unsigned char *addr, u16 vid, struct dsa_db db) > +{ > + struct ksz_device *dev = ds->priv; > + int ret = -EOPNOTSUPP; > + > + if (dev->dev_ops->fdb_add) > + ret = dev->dev_ops->fdb_add(dev, port, addr, vid, db); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(ksz_port_fdb_add); > + > +int ksz_port_fdb_del(struct dsa_switch *ds, int port, > + const unsigned char *addr, u16 vid, struct dsa_db db) > +{ > + struct ksz_device *dev = ds->priv; > + int ret = -EOPNOTSUPP; > + > + if (dev->dev_ops->fdb_del) > + ret = dev->dev_ops->fdb_del(dev, port, addr, vid, db); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(ksz_port_fdb_del); > + > int ksz_port_fdb_dump(struct dsa_switch *ds, int port, dsa_fdb_dump_cb_t *cb, > void *data) > { > struct ksz_device *dev = ds->priv; > - int ret = 0; > - u16 i = 0; > - u16 entries = 0; > - u8 timestamp = 0; > - u8 fid; > - u8 member; > - struct alu_struct alu; > - > - do { > - alu.is_static = false; > - ret = dev->dev_ops->r_dyn_mac_table(dev, i, alu.mac, &fid, > - &member, ×tamp, > - &entries); > - if (!ret && (member & BIT(port))) { > - ret = cb(alu.mac, alu.fid, alu.is_static, data); > - if (ret) > - break; > - } > - i++; > - } while (i < entries); > - if (i >= entries) > - ret = 0; > + int ret = -EOPNOTSUPP; > + > + if (dev->dev_ops->fdb_dump) > + ret = dev->dev_ops->fdb_dump(dev, port, cb, data); > > return ret; > } > diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/microchip/ksz_common.h > index 816581dd7f8e..133b1a257868 100644 > --- a/drivers/net/dsa/microchip/ksz_common.h > +++ b/drivers/net/dsa/microchip/ksz_common.h > @@ -192,6 +192,12 @@ struct ksz_dev_ops { > bool ingress, struct netlink_ext_ack *extack); > void (*mirror_del)(struct ksz_device *dev, int port, > struct dsa_mall_mirror_tc_entry *mirror); > + int (*fdb_add)(struct ksz_device *dev, int port, > + const unsigned char *addr, u16 vid, struct dsa_db db); > + int (*fdb_del)(struct ksz_device *dev, int port, > + const unsigned char *addr, u16 vid, struct dsa_db db); > + int (*fdb_dump)(struct ksz_device *dev, int port, > + dsa_fdb_dump_cb_t *cb, void *data); > int (*mdb_add)(struct ksz_device *dev, int port, > const struct switchdev_obj_port_mdb *mdb, > struct dsa_db db); > @@ -239,6 +245,10 @@ void ksz_port_bridge_leave(struct dsa_switch *ds, int port, > struct dsa_bridge bridge); > void ksz_port_stp_state_set(struct dsa_switch *ds, int port, u8 state); > void ksz_port_fast_age(struct dsa_switch *ds, int port); > +int ksz_port_fdb_add(struct dsa_switch *ds, int port, > + const unsigned char *addr, u16 vid, struct dsa_db db); > +int ksz_port_fdb_del(struct dsa_switch *ds, int port, > + const unsigned char *addr, u16 vid, struct dsa_db db); > int ksz_port_fdb_dump(struct dsa_switch *ds, int port, dsa_fdb_dump_cb_t *cb, > void *data); > int ksz_port_mdb_add(struct dsa_switch *ds, int port, > -- > 2.36.1 >
| |