On Tue, Mar 10, 2009 at 05:20:21AM -0600, Gary Thomas wrote:
It should be OK, but I'll test it to make sure.
Something a la the attached patch should be enough from the
data structure point of view, AFAICS. And then you'd have:
Switch 1 can correspond to its own DSA platform device as it is now.
And for switch 2/3 you'd then have something a la:
struct dsa_switch_data switches[] = {
{
.mii_bus = &blah,
.sw_addr = 2,
.port_names[0] = "p9",
.port_names[1] = "p10",
.port_names[2] = "p11",
.port_names[3] = "p12",
.port_names[4] = "p13",
.port_names[5] = "p14",
.port_names[6] = "p15",
.port_names[7] = "p16",
.port_names[9] = "dsa",
.port_names[10] = "cpu",
}, {
.mii_bus = &blah,
.sw_addr = 3,
.port_names[0] = "p17",
.port_names[1] = "p18",
.port_names[2] = "p19",
.port_names[3] = "p20",
.port_names[4] = "p21",
.port_names[5] = "p22",
.port_names[6] = "p23",
.port_names[7] = "p24",
.port_names[9] = "dsa",
},
};
struct dsa_platform_data switch23 = {
.netdev = &blah,
.nr_switches = 2,
.sw = switches,
.rtable = {
{ -1, 9 },
{ 9, -1 },
},
};
Or something along those lines.
Thoughts?
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 52e97bf..8bbf5ba 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -1,6 +1,6 @@
/*
* include/net/dsa.h - Driver for Distributed Switch Architecture switch chips
- * Copyright (c) 2008 Marvell Semiconductor
+ * Copyright (c) 2008-2009 Marvell Semiconductor
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,21 +13,44 @@
#define DSA_MAX_PORTS 12
+struct dsa_switch_data {
+ /*
+ * How to access the switch configuration registers.
+ */
+ struct device *mii_bus;
+ int sw_addr;
+
+ /*
+ * The names of the switch's ports. Use "cpu" to
+ * designate the switch port that the cpu is connected to,
+ * "dsa" to indicate that this port is a DSA link to
+ * another switch, NULL to indicate the port is unused,
+ * or any other string to indicate this is a physical port.
+ */
+ char *port_names[DSA_MAX_PORTS];
+};
+
struct dsa_platform_data {
/*
* Reference to a Linux network interface that connects
- * to the switch chip.
+ * to one of the switch chips in the tree.
*/
struct device *netdev;
/*
- * How to access the switch configuration registers, and
- * the names of the switch ports (use "cpu" to designate
- * the switch port that the cpu is connected to).
+ * Info structs describing each of the switch chips
+ * connected via this network interface.
*/
- struct device *mii_bus;
- int sw_addr;
- char *port_names[DSA_MAX_PORTS];
+ int nr_switches;
+ struct dsa_switch_data *sw;
+
+ /*
+ * A nr_switches * nr_switches array where element [a][b]
+ * indicates which port on switch a should be used to send
+ * packets to that are destined for switch b. Can be NULL
+ * if there is only one switch chip.
+ */
+ u8 **rtable;
};
extern bool dsa_uses_dsa_tags(void *dsa_ptr);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html