diff options
-rw-r--r-- | include/net/dsa.h | 90 | ||||
-rw-r--r-- | net/dsa/dsa_priv.h | 91 | ||||
-rw-r--r-- | net/dsa/mv88e6060.c | 2 | ||||
-rw-r--r-- | net/dsa/mv88e6123_61_65.c | 2 | ||||
-rw-r--r-- | net/dsa/mv88e6131.c | 2 | ||||
-rw-r--r-- | net/dsa/mv88e6xxx.c | 2 |
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 | ||
94 | struct 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 | |||
125 | static 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 | |||
130 | static 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 | |||
146 | struct 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 | |||
180 | void register_switch_driver(struct dsa_switch_driver *type); | ||
181 | void 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 | ||
20 | struct 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 | |||
51 | static 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 | |||
56 | static 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 | |||
72 | struct dsa_slave_priv { | 17 | struct 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 | ||
93 | struct 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 */ |
128 | extern char dsa_driver_version[]; | 39 | extern char dsa_driver_version[]; |
129 | void register_switch_driver(struct dsa_switch_driver *type); | ||
130 | void unregister_switch_driver(struct dsa_switch_driver *type); | ||
131 | 40 | ||
132 | /* slave.c */ | 41 | /* slave.c */ |
133 | void dsa_slave_mii_bus_init(struct dsa_switch *ds); | 42 | void 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 | ||
17 | static char *mv88e6123_61_65_probe(struct mii_bus *bus, int sw_addr) | 17 | static 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 | /* |