swconfig: add a generic switch reset call

SVN-Revision: 15470
owl
Felix Fietkau 2009-04-28 19:16:17 +00:00
parent 2d0ccf7f5e
commit 8ec2ad91ad
3 changed files with 21 additions and 10 deletions

View File

@ -801,7 +801,7 @@ static int ip175c_apply(struct switch_dev *dev)
return 0; 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; struct ip175c_state *state = dev->priv;
int i, err; int i, err;
@ -1125,14 +1125,6 @@ enum Globals {
}; };
static const struct switch_attr ip175c_global[] = { 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] = { [IP175C_ENABLE_VLAN] = {
.id = IP175C_ENABLE_VLAN, .id = IP175C_ENABLE_VLAN,
.type = SWITCH_TYPE_INT, .type = SWITCH_TYPE_INT,
@ -1233,6 +1225,7 @@ static int ip175c_probe(struct phy_device *pdev)
dev->get_vlan_ports = ip175c_get_ports; dev->get_vlan_ports = ip175c_get_ports;
dev->set_vlan_ports = ip175c_set_ports; dev->set_vlan_ports = ip175c_set_ports;
dev->apply_config = ip175c_apply; dev->apply_config = ip175c_apply;
dev->reset_switch = ip175c_reset;
dev->priv = state; dev->priv = state;
pdev->priv = state; pdev->priv = state;
@ -1265,7 +1258,7 @@ static int ip175c_config_init(struct phy_device *pdev)
if (err < 0) if (err < 0)
return err; return err;
ip175c_reset(&state->dev, NULL, NULL); ip175c_reset(&state->dev);
state->registered = true; state->registered = true;
netif_carrier_on(pdev->attached_dev); netif_carrier_on(pdev->attached_dev);

View File

@ -133,9 +133,19 @@ swconfig_apply_config(struct switch_dev *dev, const struct switch_attr *attr, st
return dev->apply_config(dev); 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 { enum global_defaults {
GLOBAL_APPLY, GLOBAL_APPLY,
GLOBAL_RESET,
}; };
enum vlan_defaults { enum vlan_defaults {
@ -152,6 +162,12 @@ static struct switch_attr default_global[] = {
.name = "apply", .name = "apply",
.description = "Activate changes in the hardware", .description = "Activate changes in the hardware",
.set = swconfig_apply_config, .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 */ /* always present, can be no-op */
set_bit(GLOBAL_APPLY, &dev->def_global); set_bit(GLOBAL_APPLY, &dev->def_global);
set_bit(GLOBAL_RESET, &dev->def_global);
} }

View File

@ -132,6 +132,7 @@ struct switch_dev {
int (*get_port_pvid)(struct switch_dev *dev, int port, int *val); 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 (*set_port_pvid)(struct switch_dev *dev, int port, int val);
int (*apply_config)(struct switch_dev *dev); int (*apply_config)(struct switch_dev *dev);
int (*reset_switch)(struct switch_dev *dev);
}; };
struct switch_port { struct switch_port {