diff options
Diffstat (limited to 'net/dsa/dsa_priv.h')
-rw-r--r-- | net/dsa/dsa_priv.h | 97 |
1 files changed, 81 insertions, 16 deletions
diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index 7063378a1ebf..41055f33d28a 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * net/dsa/dsa_priv.h - Hardware switch handling | 2 | * net/dsa/dsa_priv.h - Hardware switch handling |
3 | * Copyright (c) 2008 Marvell Semiconductor | 3 | * Copyright (c) 2008-2009 Marvell Semiconductor |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
@@ -19,42 +19,107 @@ | |||
19 | 19 | ||
20 | struct dsa_switch { | 20 | struct dsa_switch { |
21 | /* | 21 | /* |
22 | * Configuration data for the platform device that owns | 22 | * Parent switch tree, and switch index. |
23 | * this dsa switch instance. | ||
24 | */ | 23 | */ |
25 | struct dsa_platform_data *pd; | 24 | struct dsa_switch_tree *dst; |
25 | int index; | ||
26 | 26 | ||
27 | /* | 27 | /* |
28 | * References to network device and mii bus to use. | 28 | * Configuration data for this switch. |
29 | */ | 29 | */ |
30 | struct net_device *master_netdev; | 30 | struct dsa_chip_data *pd; |
31 | struct mii_bus *master_mii_bus; | ||
32 | 31 | ||
33 | /* | 32 | /* |
34 | * The used switch driver and frame tagging type. | 33 | * The used switch driver. |
35 | */ | 34 | */ |
36 | struct dsa_switch_driver *drv; | 35 | struct dsa_switch_driver *drv; |
37 | __be16 tag_protocol; | 36 | |
37 | /* | ||
38 | * Reference to mii bus to use. | ||
39 | */ | ||
40 | struct mii_bus *master_mii_bus; | ||
38 | 41 | ||
39 | /* | 42 | /* |
40 | * Slave mii_bus and devices for the individual ports. | 43 | * Slave mii_bus and devices for the individual ports. |
41 | */ | 44 | */ |
42 | int cpu_port; | 45 | u32 dsa_port_mask; |
43 | u32 valid_port_mask; | 46 | u32 phys_port_mask; |
44 | struct mii_bus *slave_mii_bus; | 47 | struct mii_bus *slave_mii_bus; |
45 | struct net_device *ports[DSA_MAX_PORTS]; | 48 | struct net_device *ports[DSA_MAX_PORTS]; |
49 | }; | ||
50 | |||
51 | struct dsa_switch_tree { | ||
52 | /* | ||
53 | * Configuration data for the platform device that owns | ||
54 | * this dsa switch tree instance. | ||
55 | */ | ||
56 | struct dsa_platform_data *pd; | ||
57 | |||
58 | /* | ||
59 | * Reference to network device to use, and which tagging | ||
60 | * protocol to use. | ||
61 | */ | ||
62 | struct net_device *master_netdev; | ||
63 | __be16 tag_protocol; | ||
64 | |||
65 | /* | ||
66 | * The switch and port to which the CPU is attached. | ||
67 | */ | ||
68 | s8 cpu_switch; | ||
69 | s8 cpu_port; | ||
46 | 70 | ||
47 | /* | 71 | /* |
48 | * Link state polling. | 72 | * Link state polling. |
49 | */ | 73 | */ |
50 | struct work_struct link_poll_work; | 74 | int link_poll_needed; |
51 | struct timer_list link_poll_timer; | 75 | struct work_struct link_poll_work; |
76 | struct timer_list link_poll_timer; | ||
77 | |||
78 | /* | ||
79 | * Data for the individual switch chips. | ||
80 | */ | ||
81 | struct dsa_switch *ds[DSA_MAX_SWITCHES]; | ||
52 | }; | 82 | }; |
53 | 83 | ||
84 | static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p) | ||
85 | { | ||
86 | return !!(ds->index == ds->dst->cpu_switch && p == ds->dst->cpu_port); | ||
87 | } | ||
88 | |||
89 | static inline u8 dsa_upstream_port(struct dsa_switch *ds) | ||
90 | { | ||
91 | struct dsa_switch_tree *dst = ds->dst; | ||
92 | |||
93 | /* | ||
94 | * If this is the root switch (i.e. the switch that connects | ||
95 | * to the CPU), return the cpu port number on this switch. | ||
96 | * Else return the (DSA) port number that connects to the | ||
97 | * switch that is one hop closer to the cpu. | ||
98 | */ | ||
99 | if (dst->cpu_switch == ds->index) | ||
100 | return dst->cpu_port; | ||
101 | else | ||
102 | return ds->pd->rtable[dst->cpu_switch]; | ||
103 | } | ||
104 | |||
54 | struct dsa_slave_priv { | 105 | struct dsa_slave_priv { |
106 | /* | ||
107 | * The linux network interface corresponding to this | ||
108 | * switch port. | ||
109 | */ | ||
55 | struct net_device *dev; | 110 | struct net_device *dev; |
111 | |||
112 | /* | ||
113 | * Which switch this port is a part of, and the port index | ||
114 | * for this port. | ||
115 | */ | ||
56 | struct dsa_switch *parent; | 116 | struct dsa_switch *parent; |
57 | int port; | 117 | u8 port; |
118 | |||
119 | /* | ||
120 | * The phylib phy_device pointer for the PHY connected | ||
121 | * to this port. | ||
122 | */ | ||
58 | struct phy_device *phy; | 123 | struct phy_device *phy; |
59 | }; | 124 | }; |
60 | 125 | ||