projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rxrpc: Fix races between skb free, ACK generation and replying
[deliverable/linux.git]
/
include
/
net
/
dsa.h
diff --git
a/include/net/dsa.h
b/include/net/dsa.h
index 17c3d37b677930f1b6acac7af0afe3c68fa6d24e..2217a3f817f8e5072954941d34d089be28b1e136 100644
(file)
--- a/
include/net/dsa.h
+++ b/
include/net/dsa.h
@@
-26,11
+26,14
@@
enum dsa_tag_protocol {
DSA_TAG_PROTO_TRAILER,
DSA_TAG_PROTO_EDSA,
DSA_TAG_PROTO_BRCM,
DSA_TAG_PROTO_TRAILER,
DSA_TAG_PROTO_EDSA,
DSA_TAG_PROTO_BRCM,
+ DSA_TAG_LAST, /* MUST BE LAST */
};
#define DSA_MAX_SWITCHES 4
#define DSA_MAX_PORTS 12
};
#define DSA_MAX_SWITCHES 4
#define DSA_MAX_PORTS 12
+#define DSA_RTABLE_NONE -1
+
struct dsa_chip_data {
/*
* How to access the switch configuration registers.
struct dsa_chip_data {
/*
* How to access the switch configuration registers.
@@
-58,12
+61,11
@@
struct dsa_chip_data {
struct device_node *port_dn[DSA_MAX_PORTS];
/*
struct device_node *port_dn[DSA_MAX_PORTS];
/*
- * An array (with nr_chips elements) of which element [a]
- * indicates which port on this switch should be used to
- * send packets to that are destined for switch a. Can be
- * NULL if there is only one switch chip.
+ * An array of which element [a] indicates which port on this
+ * switch should be used to send packets to that are destined
+ * for switch a. Can be NULL if there is only one switch chip.
*/
*/
- s8
*rtable
;
+ s8
rtable[DSA_MAX_SWITCHES]
;
};
struct dsa_platform_data {
};
struct dsa_platform_data {
@@
-85,6
+87,17
@@
struct dsa_platform_data {
struct packet_type;
struct dsa_switch_tree {
struct packet_type;
struct dsa_switch_tree {
+ struct list_head list;
+
+ /* Tree identifier */
+ u32 tree;
+
+ /* Number of switches attached to this tree */
+ struct kref refcount;
+
+ /* Has this tree been applied to the hardware? */
+ bool applied;
+
/*
* Configuration data for the platform device that owns
* this dsa switch tree instance.
/*
* Configuration data for the platform device that owns
* this dsa switch tree instance.
@@
-100,12
+113,12
@@
struct dsa_switch_tree {
struct net_device *dev,
struct packet_type *pt,
struct net_device *orig_dev);
struct net_device *dev,
struct packet_type *pt,
struct net_device *orig_dev);
- enum dsa_tag_protocol tag_protocol;
/*
* Original copy of the master netdev ethtool_ops
*/
struct ethtool_ops master_ethtool_ops;
/*
* Original copy of the master netdev ethtool_ops
*/
struct ethtool_ops master_ethtool_ops;
+ const struct ethtool_ops *master_orig_ethtool_ops;
/*
* The switch and port to which the CPU is attached.
/*
* The switch and port to which the CPU is attached.
@@
-117,6
+130,18
@@
struct dsa_switch_tree {
* Data for the individual switch chips.
*/
struct dsa_switch *ds[DSA_MAX_SWITCHES];
* Data for the individual switch chips.
*/
struct dsa_switch *ds[DSA_MAX_SWITCHES];
+
+ /*
+ * Tagging protocol operations for adding and removing an
+ * encapsulation tag.
+ */
+ const struct dsa_device_ops *tag_ops;
+};
+
+struct dsa_port {
+ struct net_device *netdev;
+ struct device_node *dn;
+ unsigned int ageing_time;
};
struct dsa_switch {
};
struct dsa_switch {
@@
-144,6
+169,13
@@
struct dsa_switch {
*/
struct dsa_switch_driver *drv;
*/
struct dsa_switch_driver *drv;
+ /*
+ * An array of which element [a] indicates which port on this
+ * switch should be used to send packets to that are destined
+ * for switch a. Can be NULL if there is only one switch chip.
+ */
+ s8 rtable[DSA_MAX_SWITCHES];
+
#ifdef CONFIG_NET_DSA_HWMON
/*
* Hardware monitoring information
#ifdef CONFIG_NET_DSA_HWMON
/*
* Hardware monitoring information
@@
-152,14
+184,20
@@
struct dsa_switch {
struct device *hwmon_dev;
#endif
struct device *hwmon_dev;
#endif
+ /*
+ * The lower device this switch uses to talk to the host
+ */
+ struct net_device *master_netdev;
+
/*
* Slave mii_bus and devices for the individual ports.
*/
u32 dsa_port_mask;
/*
* Slave mii_bus and devices for the individual ports.
*/
u32 dsa_port_mask;
+ u32 cpu_port_mask;
u32 enabled_port_mask;
u32 phys_mii_mask;
u32 enabled_port_mask;
u32 phys_mii_mask;
+ struct dsa_port ports[DSA_MAX_PORTS];
struct mii_bus *slave_mii_bus;
struct mii_bus *slave_mii_bus;
- struct net_device *ports[DSA_MAX_PORTS];
};
static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
};
static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
@@
-174,7
+212,7
@@
static inline bool dsa_is_dsa_port(struct dsa_switch *ds, int p)
static inline bool dsa_is_port_initialized(struct dsa_switch *ds, int p)
{
static inline bool dsa_is_port_initialized(struct dsa_switch *ds, int p)
{
- return ds->enabled_port_mask & (1 << p) && ds->ports[p];
+ return ds->enabled_port_mask & (1 << p) && ds->ports[p]
.netdev
;
}
static inline u8 dsa_upstream_port(struct dsa_switch *ds)
}
static inline u8 dsa_upstream_port(struct dsa_switch *ds)
@@
-190,7
+228,7
@@
static inline u8 dsa_upstream_port(struct dsa_switch *ds)
if (dst->cpu_switch == ds->index)
return dst->cpu_port;
else
if (dst->cpu_switch == ds->index)
return dst->cpu_port;
else
- return ds->
cd->
rtable[dst->cpu_switch];
+ return ds->rtable[dst->cpu_switch];
}
struct switchdev_trans;
}
struct switchdev_trans;
@@
-292,6
+330,7
@@
struct dsa_switch_driver {
/*
* Bridge integration
*/
/*
* Bridge integration
*/
+ int (*set_ageing_time)(struct dsa_switch *ds, unsigned int msecs);
int (*port_bridge_join)(struct dsa_switch *ds, int port,
struct net_device *bridge);
void (*port_bridge_leave)(struct dsa_switch *ds, int port);
int (*port_bridge_join)(struct dsa_switch *ds, int port,
struct net_device *bridge);
void (*port_bridge_leave)(struct dsa_switch *ds, int port);
@@
-344,4
+383,7
@@
static inline bool dsa_uses_tagged_protocol(struct dsa_switch_tree *dst)
{
return dst->rcv != NULL;
}
{
return dst->rcv != NULL;
}
+
+void dsa_unregister_switch(struct dsa_switch *ds);
+int dsa_register_switch(struct dsa_switch *ds, struct device_node *np);
#endif
#endif
This page took
0.038495 seconds
and
5
git commands to generate.