diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-04-28 19:16:17 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-04-28 19:16:17 +0000 |
commit | b645d7df22f212f2d518ab5b8c62a8d57e3cdb51 (patch) | |
tree | cf4a5fb4bf2673dafa7d1146734f69e2a10fdb19 /target/linux/generic-2.6/files | |
parent | 27c303501e47f15ba64569c28b1a1a125ba1714b (diff) |
swconfig: add a generic switch reset call
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@15470 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic-2.6/files')
3 files changed, 21 insertions, 10 deletions
diff --git a/target/linux/generic-2.6/files/drivers/net/phy/ip175c.c b/target/linux/generic-2.6/files/drivers/net/phy/ip175c.c index 673ff1276..c56186192 100644 --- a/target/linux/generic-2.6/files/drivers/net/phy/ip175c.c +++ b/target/linux/generic-2.6/files/drivers/net/phy/ip175c.c @@ -801,7 +801,7 @@ static int ip175c_apply(struct switch_dev *dev) return 0; } -static int ip175c_reset(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) +static int ip175c_reset(struct switch_dev *dev) { struct ip175c_state *state = dev->priv; int i, err; @@ -1125,14 +1125,6 @@ enum Globals { }; static const struct switch_attr ip175c_global[] = { - [IP175C_RESET] = { - .id = IP175C_RESET, - .type = SWITCH_TYPE_NOVAL, - .name = "reset", - .get = NULL, - .description = "Resets the switch but does not clear vlan configuration", - .set = ip175c_reset, - }, [IP175C_ENABLE_VLAN] = { .id = IP175C_ENABLE_VLAN, .type = SWITCH_TYPE_INT, @@ -1233,6 +1225,7 @@ static int ip175c_probe(struct phy_device *pdev) dev->get_vlan_ports = ip175c_get_ports; dev->set_vlan_ports = ip175c_set_ports; dev->apply_config = ip175c_apply; + dev->reset_switch = ip175c_reset; dev->priv = state; pdev->priv = state; @@ -1265,7 +1258,7 @@ static int ip175c_config_init(struct phy_device *pdev) if (err < 0) return err; - ip175c_reset(&state->dev, NULL, NULL); + ip175c_reset(&state->dev); state->registered = true; netif_carrier_on(pdev->attached_dev); diff --git a/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c b/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c index 8bae66708..7207e4659 100644 --- a/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c +++ b/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c @@ -133,9 +133,19 @@ swconfig_apply_config(struct switch_dev *dev, const struct switch_attr *attr, st return dev->apply_config(dev); } +static int +swconfig_reset_switch(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) +{ + /* don't complain if not supported by the switch driver */ + if (!dev->reset_switch) + return 0; + + return dev->reset_switch(dev); +} enum global_defaults { GLOBAL_APPLY, + GLOBAL_RESET, }; enum vlan_defaults { @@ -152,6 +162,12 @@ static struct switch_attr default_global[] = { .name = "apply", .description = "Activate changes in the hardware", .set = swconfig_apply_config, + }, + [GLOBAL_RESET] = { + .type = SWITCH_TYPE_NOVAL, + .name = "reset", + .description = "Reset the switch", + .set = swconfig_reset_switch, } }; @@ -190,6 +206,7 @@ static void swconfig_defaults_init(struct switch_dev *dev) /* always present, can be no-op */ set_bit(GLOBAL_APPLY, &dev->def_global); + set_bit(GLOBAL_RESET, &dev->def_global); } diff --git a/target/linux/generic-2.6/files/include/linux/switch.h b/target/linux/generic-2.6/files/include/linux/switch.h index 75c7dcfa9..98b86e851 100644 --- a/target/linux/generic-2.6/files/include/linux/switch.h +++ b/target/linux/generic-2.6/files/include/linux/switch.h @@ -132,6 +132,7 @@ struct switch_dev { int (*get_port_pvid)(struct switch_dev *dev, int port, int *val); int (*set_port_pvid)(struct switch_dev *dev, int port, int val); int (*apply_config)(struct switch_dev *dev); + int (*reset_switch)(struct switch_dev *dev); }; struct switch_port { |