X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/a289808594a3baeec2584d9cbab4fde7869bea02..72607e76c7dd22869ae985371d1d261456f2f28c:/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c diff --git a/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c b/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c index 588f33603..6c807bc02 100644 --- a/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c +++ b/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c @@ -219,7 +219,10 @@ struct rtl8366_smi { u16 g_dbg_reg; #endif -#define to_rtl8366(_dev) container_of(_dev, struct rtl8366_smi, dev) +static inline struct rtl8366_smi *sw_to_rtl8366(struct switch_dev *sw) +{ + return container_of(sw, struct rtl8366_smi, dev); +} static inline void rtl8366_smi_clk_delay(struct rtl8366_smi *smi) { @@ -933,19 +936,21 @@ static int rtl8366_vlan_set_4ktable(struct rtl8366_smi *smi, int enable) static int rtl8366s_reset_vlan(struct rtl8366_smi *smi) { - int i; struct rtl8366s_vlan4kentry vlan4k; struct rtl8366s_vlanconfig vlanmc; + int err; + int i; /* clear 16 VLAN member configuration */ + vlanmc.vid = 0; + vlanmc.priority = 0; + vlanmc.member = 0; + vlanmc.untag = 0; + vlanmc.fid = 0; for (i = 0; i < RTL8366_NUM_VLANS; i++) { - vlanmc.vid = 0; - vlanmc.priority = 0; - vlanmc.member = 0; - vlanmc.untag = 0; - vlanmc.fid = 0; - if (rtl8366s_set_vlan_member_config(smi, i, &vlanmc) != 0) - return -EIO; + err = rtl8366s_set_vlan_member_config(smi, i, &vlanmc); + if (err) + return err; } /* Set a default VLAN with vid 1 to 4K table for all ports */ @@ -953,13 +958,15 @@ static int rtl8366s_reset_vlan(struct rtl8366_smi *smi) vlan4k.member = RTL8366_PORT_ALL; vlan4k.untag = RTL8366_PORT_ALL; vlan4k.fid = 0; - if (rtl8366s_set_vlan_4k_entry(smi, &vlan4k) != 0) - return -EIO; + err = rtl8366s_set_vlan_4k_entry(smi, &vlan4k); + if (err) + return err; /* Set all ports PVID to default VLAN */ for (i = 0; i < RTL8366_NUM_PORTS; i++) { - if (rtl8366_set_vlan_port_pvid(smi, i, 0) != 0) - return -EIO; + err = rtl8366_set_vlan_port_pvid(smi, i, 0); + if (err) + return err; } return 0; @@ -1197,7 +1204,7 @@ static int rtl8366_global_reset_mibs(struct switch_dev *dev, struct switch_val *val) { u32 data = 0; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); if (val->value.i == 1) { rtl8366_smi_read_reg(smi, RTL8366S_MIB_CTRL_REG, &data); @@ -1213,7 +1220,7 @@ static int rtl8366_get_vlan(struct switch_dev *dev, struct switch_val *val) { u32 data; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); if (attr->ofs == 1) { rtl8366_smi_read_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, &data); @@ -1239,7 +1246,7 @@ static int rtl8366_global_get_blinkrate(struct switch_dev *dev, struct switch_val *val) { u32 data; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); rtl8366_smi_read_reg(smi, RTL8366_LED_BLINKRATE_REG, &data); val->value.i = (data & (RTL8366_LED_BLINKRATE_MASK)); @@ -1252,7 +1259,7 @@ static int rtl8366_global_set_blinkrate(struct switch_dev *dev, struct switch_val *val) { u32 data; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); if (val->value.i >= 6) return -EINVAL; @@ -1271,7 +1278,7 @@ static int rtl8366_set_vlan(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) { - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); if (attr->ofs == 1) return rtl8366_vlan_set_vlan(smi, val->value.i); @@ -1285,7 +1292,7 @@ static int rtl8366_attr_get_port_link(struct switch_dev *dev, { u32 len = 0, data = 0; int speed, duplex, link, txpause, rxpause, nway; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); char *buf = smi->buf; if (val->port_vlan >= RTL8366_NUM_PORTS) @@ -1349,7 +1356,7 @@ static int rtl8366_attr_get_vlan_info(struct switch_dev *dev, u32 len = 0; struct rtl8366s_vlanconfig vlanmc; struct rtl8366s_vlan4kentry vlan4k; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); char *buf = smi->buf; if (val->port_vlan >= RTL8366_NUM_PORTS) @@ -1394,7 +1401,7 @@ static int rtl8366_set_port_led(struct switch_dev *dev, struct switch_val *val) { u32 data = 0; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); if (val->port_vlan >= RTL8366_NUM_PORTS || (1 << val->port_vlan) == RTL8366_PORT_UNKNOWN) return -EINVAL; @@ -1418,7 +1425,7 @@ static int rtl8366_get_port_led(struct switch_dev *dev, struct switch_val *val) { u32 data = 0; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); if (val->port_vlan >= RTL8366_NUM_LEDGROUPS) return -EINVAL; @@ -1433,7 +1440,7 @@ static int rtl8366_reset_port_mibs(struct switch_dev *dev, struct switch_val *val) { u32 data = 0; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); if (val->port_vlan >= RTL8366_NUM_PORTS) return -EINVAL; @@ -1450,7 +1457,7 @@ static int rtl8366_get_port_mib(struct switch_dev *dev, { int i, len = 0; unsigned long long counter = 0; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); char *buf = smi->buf; if (val->port_vlan >= RTL8366_NUM_PORTS) @@ -1479,7 +1486,7 @@ static int rtl8366_get_ports(struct switch_dev *dev, struct switch_val *val) { struct rtl8366s_vlanconfig vlanmc; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); struct switch_port *port; int i; @@ -1495,7 +1502,8 @@ static int rtl8366_get_ports(struct switch_dev *dev, continue; port->id = i; - port->flags = vlanmc.untag ? 0 : BIT(SWITCH_PORT_FLAG_TAGGED); + port->flags = (vlanmc.untag & BIT(i)) ? + 0 : BIT(SWITCH_PORT_FLAG_TAGGED); val->len++; port++; } @@ -1507,7 +1515,7 @@ static int rtl8366_set_ports(struct switch_dev *dev, { struct rtl8366s_vlanconfig vlanmc; struct rtl8366s_vlan4kentry vlan4k; - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); struct switch_port *port; int i; @@ -1538,19 +1546,19 @@ static int rtl8366_set_ports(struct switch_dev *dev, static int rtl8366_get_port_pvid(struct switch_dev *dev, int port, int *val) { - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); return rtl8366_get_vlan_port_pvid(smi, port, val); } static int rtl8366_set_port_pvid(struct switch_dev *dev, int port, int val) { - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); return rtl8366_set_vlan_port_pvid(smi, port, val); } static int rtl8366_reset_switch(struct switch_dev *dev) { - struct rtl8366_smi *smi = to_rtl8366(dev); + struct rtl8366_smi *smi = sw_to_rtl8366(dev); int timeout = 10; u32 data;