List the registered dsa_switch structures in a "ds" member of the
dsa_switch_tree structure. This allows the drivers to easily iterate on
the DSA switch structures of their related DSA tree.

Signed-off-by: Vivien Didelot <vivien.dide...@savoirfairelinux.com>
---
 include/net/dsa.h | 9 +++++++++
 net/dsa/dsa.c     | 3 +++
 2 files changed, 12 insertions(+)

diff --git a/include/net/dsa.h b/include/net/dsa.h
index 389227d..85fac8a 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -32,11 +32,16 @@ enum dsa_tag_protocol {
 #define DSA_MAX_SWITCHES       4
 #define DSA_MAX_PORTS          12
 
+
+#define dsa_tree_for_each_switch(_dst, _ds)            \
+       list_for_each_entry(_ds, &_dst->ds, list)
+
 #define dsa_switch_for_each_port(_ds, _dp, _num_ports)                 \
        for (_dp = list_first_entry(&_ds->dp, typeof(*_dp), list);      \
             &_dp->list != (&_ds->dp) && _dp->port < _num_ports;        \
             _dp = list_next_entry(_dp, list))
 
+
 struct dsa_chip_data {
        /*
         * How to access the switch configuration registers.
@@ -125,6 +130,8 @@ struct dsa_switch_tree {
         * Data for the individual switch chips.
         */
        struct dsa_switch       *switches[DSA_MAX_SWITCHES];
+
+       struct list_head        ds;
 };
 
 struct dsa_port {
@@ -137,6 +144,8 @@ struct dsa_port {
 };
 
 struct dsa_switch {
+       struct list_head        list;
+
        /*
         * Parent switch tree, and switch index.
         */
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index aa4a61a..b0055c7 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -842,6 +842,8 @@ static int dsa_setup_dst(struct dsa_switch_tree *dst, 
struct net_device *dev,
        int i;
        unsigned configured = 0;
 
+       INIT_LIST_HEAD(&dst->ds);
+
        dst->pd = pd;
        dst->master_netdev = dev;
        dst->cpu_switch = -1;
@@ -858,6 +860,7 @@ static int dsa_setup_dst(struct dsa_switch_tree *dst, 
struct net_device *dev,
                }
 
                dst->switches[i] = ds;
+               list_add_tail(&ds->list, &dst->ds);
 
                ++configured;
        }
-- 
2.8.0

Reply via email to