}
 EXPORT_SYMBOL(b53_mdb_del);
 
-int b53_br_join(struct dsa_switch *ds, int port, struct dsa_bridge bridge)
+int b53_br_join(struct dsa_switch *ds, int port, struct dsa_bridge bridge,
+               bool *tx_fwd_offload)
 {
        struct b53_device *dev = ds->priv;
        s8 cpu_port = dsa_to_port(ds, port)->cpu_dp->index;
 
 void b53_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *data);
 int b53_get_sset_count(struct dsa_switch *ds, int port, int sset);
 void b53_get_ethtool_phy_stats(struct dsa_switch *ds, int port, uint64_t *data);
-int b53_br_join(struct dsa_switch *ds, int port, struct dsa_bridge bridge);
+int b53_br_join(struct dsa_switch *ds, int port, struct dsa_bridge bridge,
+               bool *tx_fwd_offload);
 void b53_br_leave(struct dsa_switch *ds, int port, struct dsa_bridge bridge);
 void b53_br_set_stp_state(struct dsa_switch *ds, int port, u8 state);
 void b53_br_fast_age(struct dsa_switch *ds, int port);
 
 }
 
 static int dsa_loop_port_bridge_join(struct dsa_switch *ds, int port,
-                                    struct dsa_bridge bridge)
+                                    struct dsa_bridge bridge,
+                                    bool *tx_fwd_offload)
 {
        dev_dbg(ds->dev, "%s: port: %d, bridge: %s\n",
                __func__, port, bridge.dev->name);
 
 }
 
 static int hellcreek_port_bridge_join(struct dsa_switch *ds, int port,
-                                     struct dsa_bridge bridge)
+                                     struct dsa_bridge bridge,
+                                     bool *tx_fwd_offload)
 {
        struct hellcreek *hellcreek = ds->priv;
 
 
 }
 
 static int lan9303_port_bridge_join(struct dsa_switch *ds, int port,
-                                   struct dsa_bridge bridge)
+                                   struct dsa_bridge bridge,
+                                   bool *tx_fwd_offload)
 {
        struct lan9303 *chip = ds->priv;
 
 
 }
 
 static int gswip_port_bridge_join(struct dsa_switch *ds, int port,
-                                 struct dsa_bridge bridge)
+                                 struct dsa_bridge bridge,
+                                 bool *tx_fwd_offload)
 {
        struct net_device *br = bridge.dev;
        struct gswip_priv *priv = ds->priv;
 
 EXPORT_SYMBOL_GPL(ksz_get_ethtool_stats);
 
 int ksz_port_bridge_join(struct dsa_switch *ds, int port,
-                        struct dsa_bridge bridge)
+                        struct dsa_bridge bridge,
+                        bool *tx_fwd_offload)
 {
        /* port_stp_state_set() will be called after to put the port in
         * appropriate state so there is no need to do anything.
 
 int ksz_sset_count(struct dsa_switch *ds, int port, int sset);
 void ksz_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *buf);
 int ksz_port_bridge_join(struct dsa_switch *ds, int port,
-                        struct dsa_bridge bridge);
+                        struct dsa_bridge bridge, bool *tx_fwd_offload);
 void ksz_port_bridge_leave(struct dsa_switch *ds, int port,
                           struct dsa_bridge bridge);
 void ksz_port_fast_age(struct dsa_switch *ds, int port);
 
 
 static int
 mt7530_port_bridge_join(struct dsa_switch *ds, int port,
-                       struct dsa_bridge bridge)
+                       struct dsa_bridge bridge, bool *tx_fwd_offload)
 {
        struct dsa_port *dp = dsa_to_port(ds, port), *other_dp;
        u32 port_bitmap = BIT(MT7530_CPU_PORT);
 
 }
 
 static int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
-                                     struct dsa_bridge bridge)
+                                     struct dsa_bridge bridge,
+                                     bool *tx_fwd_offload)
 {
        struct mv88e6xxx_chip *chip = ds->priv;
        int err;
 
 }
 
 static int felix_bridge_join(struct dsa_switch *ds, int port,
-                            struct dsa_bridge bridge)
+                            struct dsa_bridge bridge, bool *tx_fwd_offload)
 {
        struct ocelot *ocelot = ds->priv;
 
 
 }
 
 static int qca8k_port_bridge_join(struct dsa_switch *ds, int port,
-                                 struct dsa_bridge bridge)
+                                 struct dsa_bridge bridge,
+                                 bool *tx_fwd_offload)
 {
        struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
        int port_mask, cpu_port;
 
 
 static int
 rtl8366rb_port_bridge_join(struct dsa_switch *ds, int port,
-                          struct dsa_bridge bridge)
+                          struct dsa_bridge bridge,
+                          bool *tx_fwd_offload)
 {
        struct realtek_smi *smi = ds->priv;
        unsigned int port_bitmap = 0;
 
 }
 
 static int sja1105_bridge_join(struct dsa_switch *ds, int port,
-                              struct dsa_bridge bridge)
+                              struct dsa_bridge bridge,
+                              bool *tx_fwd_offload)
 {
        return sja1105_bridge_member(ds, port, bridge, true);
 }
 
 }
 
 static int xrs700x_bridge_join(struct dsa_switch *ds, int port,
-                              struct dsa_bridge bridge)
+                              struct dsa_bridge bridge, bool *tx_fwd_offload)
 {
        return xrs700x_bridge_common(ds, port, bridge, true);
 }
 
         */
        int     (*set_ageing_time)(struct dsa_switch *ds, unsigned int msecs);
        int     (*port_bridge_join)(struct dsa_switch *ds, int port,
-                                   struct dsa_bridge bridge);
+                                   struct dsa_bridge bridge,
+                                   bool *tx_fwd_offload);
        void    (*port_bridge_leave)(struct dsa_switch *ds, int port,
                                     struct dsa_bridge bridge);
        /* Called right after .port_bridge_join() */
 
        int tree_index;
        int sw_index;
        int port;
+       bool tx_fwd_offload;
 };
 
 /* DSA_NOTIFIER_FDB_* */
 
                if (!ds->ops->port_bridge_join)
                        return -EOPNOTSUPP;
 
-               err = ds->ops->port_bridge_join(ds, info->port, info->bridge);
+               err = ds->ops->port_bridge_join(ds, info->port, info->bridge,
+                                               &info->tx_fwd_offload);
                if (err)
                        return err;
        }