diff options
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 {  | 
