Message ID | 20220530104257.21485-10-arun.ramadoss@microchip.com (mailing list archive) |
---|---|
State | RFC |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: dsa: microchip: common spi probe for the ksz series switches | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Clearly marked for net-next |
netdev/fixes_present | success | Fixes tag not required for -next series |
netdev/subject_prefix | success | Link |
netdev/cover_letter | success | Series has a cover letter |
netdev/patch_count | success | Link |
netdev/header_inline | success | No static functions without inline keyword in header files |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/cc_maintainers | success | CCed 11 of 11 maintainers |
netdev/build_clang | success | Errors and warnings before: 0 this patch: 0 |
netdev/module_param | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/check_selftest | success | No net selftest shell script |
netdev/verify_fixes | success | No Fixes tag |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 187 lines checked |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/source_inline | success | Was 0 now: 0 |
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 >
On Mon, 2022-06-13 at 12:42 +0300, Vladimir Oltean wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you > know the content is safe > > 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? Yes, static & dynamic table access becomes reduntant and used only for ksz8. I will remove it from the ksz_dev_ops structure. > > > > -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_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 > >
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,
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> --- 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(-)