aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/dsa.h90
-rw-r--r--net/dsa/dsa_priv.h91
-rw-r--r--net/dsa/mv88e6060.c2
-rw-r--r--net/dsa/mv88e6123_61_65.c2
-rw-r--r--net/dsa/mv88e6131.c2
-rw-r--r--net/dsa/mv88e6xxx.c2
6 files changed, 94 insertions, 95 deletions
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 32a1b49e8a8c..b78db3c09608 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -11,6 +11,7 @@
11#ifndef __LINUX_NET_DSA_H 11#ifndef __LINUX_NET_DSA_H
12#define __LINUX_NET_DSA_H 12#define __LINUX_NET_DSA_H
13 13
14#include <linux/list.h>
14#include <linux/timer.h> 15#include <linux/timer.h>
15#include <linux/workqueue.h> 16#include <linux/workqueue.h>
16 17
@@ -90,6 +91,95 @@ struct dsa_switch_tree {
90 struct dsa_switch *ds[DSA_MAX_SWITCHES]; 91 struct dsa_switch *ds[DSA_MAX_SWITCHES];
91}; 92};
92 93
94struct dsa_switch {
95 /*
96 * Parent switch tree, and switch index.
97 */
98 struct dsa_switch_tree *dst;
99 int index;
100
101 /*
102 * Configuration data for this switch.
103 */
104 struct dsa_chip_data *pd;
105
106 /*
107 * The used switch driver.
108 */
109 struct dsa_switch_driver *drv;
110
111 /*
112 * Reference to mii bus to use.
113 */
114 struct mii_bus *master_mii_bus;
115
116 /*
117 * Slave mii_bus and devices for the individual ports.
118 */
119 u32 dsa_port_mask;
120 u32 phys_port_mask;
121 struct mii_bus *slave_mii_bus;
122 struct net_device *ports[DSA_MAX_PORTS];
123};
124
125static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
126{
127 return !!(ds->index == ds->dst->cpu_switch && p == ds->dst->cpu_port);
128}
129
130static inline u8 dsa_upstream_port(struct dsa_switch *ds)
131{
132 struct dsa_switch_tree *dst = ds->dst;
133
134 /*
135 * If this is the root switch (i.e. the switch that connects
136 * to the CPU), return the cpu port number on this switch.
137 * Else return the (DSA) port number that connects to the
138 * switch that is one hop closer to the cpu.
139 */
140 if (dst->cpu_switch == ds->index)
141 return dst->cpu_port;
142 else
143 return ds->pd->rtable[dst->cpu_switch];
144}
145
146struct dsa_switch_driver {
147 struct list_head list;
148
149 __be16 tag_protocol;
150 int priv_size;
151
152 /*
153 * Probing and setup.
154 */
155 char *(*probe)(struct mii_bus *bus, int sw_addr);
156 int (*setup)(struct dsa_switch *ds);
157 int (*set_addr)(struct dsa_switch *ds, u8 *addr);
158
159 /*
160 * Access to the switch's PHY registers.
161 */
162 int (*phy_read)(struct dsa_switch *ds, int port, int regnum);
163 int (*phy_write)(struct dsa_switch *ds, int port,
164 int regnum, u16 val);
165
166 /*
167 * Link state polling and IRQ handling.
168 */
169 void (*poll_link)(struct dsa_switch *ds);
170
171 /*
172 * ethtool hardware statistics.
173 */
174 void (*get_strings)(struct dsa_switch *ds, int port, uint8_t *data);
175 void (*get_ethtool_stats)(struct dsa_switch *ds,
176 int port, uint64_t *data);
177 int (*get_sset_count)(struct dsa_switch *ds);
178};
179
180void register_switch_driver(struct dsa_switch_driver *type);
181void unregister_switch_driver(struct dsa_switch_driver *type);
182
93/* 183/*
94 * The original DSA tag format and some other tag formats have no 184 * The original DSA tag format and some other tag formats have no
95 * ethertype, which means that we need to add a little hack to the 185 * ethertype, which means that we need to add a little hack to the
diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h
index 89a2eb48232a..d4cf5cc747e3 100644
--- a/net/dsa/dsa_priv.h
+++ b/net/dsa/dsa_priv.h
@@ -11,64 +11,9 @@
11#ifndef __DSA_PRIV_H 11#ifndef __DSA_PRIV_H
12#define __DSA_PRIV_H 12#define __DSA_PRIV_H
13 13
14#include <linux/list.h>
15#include <linux/phy.h> 14#include <linux/phy.h>
16#include <linux/timer.h>
17#include <linux/workqueue.h>
18#include <net/dsa.h> 15#include <net/dsa.h>
19 16
20struct dsa_switch {
21 /*
22 * Parent switch tree, and switch index.
23 */
24 struct dsa_switch_tree *dst;
25 int index;
26
27 /*
28 * Configuration data for this switch.
29 */
30 struct dsa_chip_data *pd;
31
32 /*
33 * The used switch driver.
34 */
35 struct dsa_switch_driver *drv;
36
37 /*
38 * Reference to mii bus to use.
39 */
40 struct mii_bus *master_mii_bus;
41
42 /*
43 * Slave mii_bus and devices for the individual ports.
44 */
45 u32 dsa_port_mask;
46 u32 phys_port_mask;
47 struct mii_bus *slave_mii_bus;
48 struct net_device *ports[DSA_MAX_PORTS];
49};
50
51static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
52{
53 return !!(ds->index == ds->dst->cpu_switch && p == ds->dst->cpu_port);
54}
55
56static inline u8 dsa_upstream_port(struct dsa_switch *ds)
57{
58 struct dsa_switch_tree *dst = ds->dst;
59
60 /*
61 * If this is the root switch (i.e. the switch that connects
62 * to the CPU), return the cpu port number on this switch.
63 * Else return the (DSA) port number that connects to the
64 * switch that is one hop closer to the cpu.
65 */
66 if (dst->cpu_switch == ds->index)
67 return dst->cpu_port;
68 else
69 return ds->pd->rtable[dst->cpu_switch];
70}
71
72struct dsa_slave_priv { 17struct dsa_slave_priv {
73 /* 18 /*
74 * The linux network interface corresponding to this 19 * The linux network interface corresponding to this
@@ -90,44 +35,8 @@ struct dsa_slave_priv {
90 struct phy_device *phy; 35 struct phy_device *phy;
91}; 36};
92 37
93struct dsa_switch_driver {
94 struct list_head list;
95
96 __be16 tag_protocol;
97 int priv_size;
98
99 /*
100 * Probing and setup.
101 */
102 char *(*probe)(struct mii_bus *bus, int sw_addr);
103 int (*setup)(struct dsa_switch *ds);
104 int (*set_addr)(struct dsa_switch *ds, u8 *addr);
105
106 /*
107 * Access to the switch's PHY registers.
108 */
109 int (*phy_read)(struct dsa_switch *ds, int port, int regnum);
110 int (*phy_write)(struct dsa_switch *ds, int port,
111 int regnum, u16 val);
112
113 /*
114 * Link state polling and IRQ handling.
115 */
116 void (*poll_link)(struct dsa_switch *ds);
117
118 /*
119 * ethtool hardware statistics.
120 */
121 void (*get_strings)(struct dsa_switch *ds, int port, uint8_t *data);
122 void (*get_ethtool_stats)(struct dsa_switch *ds,
123 int port, uint64_t *data);
124 int (*get_sset_count)(struct dsa_switch *ds);
125};
126
127/* dsa.c */ 38/* dsa.c */
128extern char dsa_driver_version[]; 39extern char dsa_driver_version[];
129void register_switch_driver(struct dsa_switch_driver *type);
130void unregister_switch_driver(struct dsa_switch_driver *type);
131 40
132/* slave.c */ 41/* slave.c */
133void dsa_slave_mii_bus_init(struct dsa_switch *ds); 42void dsa_slave_mii_bus_init(struct dsa_switch *ds);
diff --git a/net/dsa/mv88e6060.c b/net/dsa/mv88e6060.c
index 0e028dfa89ec..7fc4e81d4d43 100644
--- a/net/dsa/mv88e6060.c
+++ b/net/dsa/mv88e6060.c
@@ -11,7 +11,7 @@
11#include <linux/list.h> 11#include <linux/list.h>
12#include <linux/netdevice.h> 12#include <linux/netdevice.h>
13#include <linux/phy.h> 13#include <linux/phy.h>
14#include "dsa_priv.h" 14#include <net/dsa.h>
15 15
16#define REG_PORT(p) (8 + (p)) 16#define REG_PORT(p) (8 + (p))
17#define REG_GLOBAL 0x0f 17#define REG_GLOBAL 0x0f
diff --git a/net/dsa/mv88e6123_61_65.c b/net/dsa/mv88e6123_61_65.c
index 6504405700fe..c0a458fc698f 100644
--- a/net/dsa/mv88e6123_61_65.c
+++ b/net/dsa/mv88e6123_61_65.c
@@ -11,7 +11,7 @@
11#include <linux/list.h> 11#include <linux/list.h>
12#include <linux/netdevice.h> 12#include <linux/netdevice.h>
13#include <linux/phy.h> 13#include <linux/phy.h>
14#include "dsa_priv.h" 14#include <net/dsa.h>
15#include "mv88e6xxx.h" 15#include "mv88e6xxx.h"
16 16
17static char *mv88e6123_61_65_probe(struct mii_bus *bus, int sw_addr) 17static char *mv88e6123_61_65_probe(struct mii_bus *bus, int sw_addr)
diff --git a/net/dsa/mv88e6131.c b/net/dsa/mv88e6131.c
index 6786ba48c106..e0eb68243834 100644
--- a/net/dsa/mv88e6131.c
+++ b/net/dsa/mv88e6131.c
@@ -11,7 +11,7 @@
11#include <linux/list.h> 11#include <linux/list.h>
12#include <linux/netdevice.h> 12#include <linux/netdevice.h>
13#include <linux/phy.h> 13#include <linux/phy.h>
14#include "dsa_priv.h" 14#include <net/dsa.h>
15#include "mv88e6xxx.h" 15#include "mv88e6xxx.h"
16 16
17/* 17/*
diff --git a/net/dsa/mv88e6xxx.c b/net/dsa/mv88e6xxx.c
index cacd955edcb6..5467c040824a 100644
--- a/net/dsa/mv88e6xxx.c
+++ b/net/dsa/mv88e6xxx.c
@@ -11,7 +11,7 @@
11#include <linux/list.h> 11#include <linux/list.h>
12#include <linux/netdevice.h> 12#include <linux/netdevice.h>
13#include <linux/phy.h> 13#include <linux/phy.h>
14#include "dsa_priv.h" 14#include <net/dsa.h>
15#include "mv88e6xxx.h" 15#include "mv88e6xxx.h"
16 16
17/* 17/*