generic: rtl8366s: use the generic get_port_link implementation

SVN-Revision: 30843
master
Gabor Juhos 13 years ago
parent e2f0264afe
commit 9e1be3b809
  1. 82
      target/linux/generic/files/drivers/net/phy/rtl8366s.c

@ -732,59 +732,47 @@ static int rtl8366s_sw_set_learning_enable(struct switch_dev *dev,
return 0; return 0;
} }
static const char *rtl8366s_speed_str(unsigned speed)
{
switch (speed) {
case 0:
return "10baseT";
case 1:
return "100baseT";
case 2:
return "1000baseT";
}
return "unknown";
}
static int rtl8366s_sw_get_port_link(struct switch_dev *dev, static int rtl8366s_sw_get_port_link(struct switch_dev *dev,
const struct switch_attr *attr, int port,
struct switch_val *val) struct switch_port_link *link)
{ {
struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev);
u32 len = 0, data = 0; u32 data = 0;
u32 speed;
if (val->port_vlan >= RTL8366S_NUM_PORTS) if (port >= RTL8366S_NUM_PORTS)
return -EINVAL; return -EINVAL;
memset(smi->buf, '\0', sizeof(smi->buf)); rtl8366_smi_read_reg(smi, RTL8366S_PORT_LINK_STATUS_BASE + (port / 2),
rtl8366_smi_read_reg(smi, RTL8366S_PORT_LINK_STATUS_BASE + &data);
(val->port_vlan / 2), &data);
if (val->port_vlan % 2) if (port % 2)
data = data >> 8; data = data >> 8;
if (data & RTL8366S_PORT_STATUS_LINK_MASK) { link->link = !!(data & RTL8366S_PORT_STATUS_LINK_MASK);
len = snprintf(smi->buf, sizeof(smi->buf), if (!link->link)
"port:%d link:up speed:%s %s-duplex %s%s%s", return 0;
val->port_vlan,
rtl8366s_speed_str(data & link->duplex = !!(data & RTL8366S_PORT_STATUS_DUPLEX_MASK);
RTL8366S_PORT_STATUS_SPEED_MASK), link->rx_flow = !!(data & RTL8366S_PORT_STATUS_RXPAUSE_MASK);
(data & RTL8366S_PORT_STATUS_DUPLEX_MASK) ? link->tx_flow = !!(data & RTL8366S_PORT_STATUS_TXPAUSE_MASK);
"full" : "half", link->aneg = !!(data & RTL8366S_PORT_STATUS_AN_MASK);
(data & RTL8366S_PORT_STATUS_TXPAUSE_MASK) ?
"tx-pause ": "",
(data & RTL8366S_PORT_STATUS_RXPAUSE_MASK) ?
"rx-pause " : "",
(data & RTL8366S_PORT_STATUS_AN_MASK) ?
"nway ": "");
} else {
len = snprintf(smi->buf, sizeof(smi->buf), "port:%d link: down",
val->port_vlan);
}
val->value.s = smi->buf; speed = (data & RTL8366S_PORT_STATUS_SPEED_MASK);
val->len = len; switch (speed) {
case 0:
link->speed = SWITCH_PORT_SPEED_10;
break;
case 1:
link->speed = SWITCH_PORT_SPEED_100;
break;
case 2:
link->speed = SWITCH_PORT_SPEED_1000;
break;
default:
link->speed = SWITCH_PORT_SPEED_UNKNOWN;
break;
}
return 0; return 0;
} }
@ -919,13 +907,6 @@ static struct switch_attr rtl8366s_globals[] = {
static struct switch_attr rtl8366s_port[] = { static struct switch_attr rtl8366s_port[] = {
{ {
.type = SWITCH_TYPE_STRING,
.name = "link",
.description = "Get port link information",
.max = 1,
.set = NULL,
.get = rtl8366s_sw_get_port_link,
}, {
.type = SWITCH_TYPE_NOVAL, .type = SWITCH_TYPE_NOVAL,
.name = "reset_mib", .name = "reset_mib",
.description = "Reset single port MIB counters", .description = "Reset single port MIB counters",
@ -984,6 +965,7 @@ static const struct switch_dev_ops rtl8366_ops = {
.get_port_pvid = rtl8366_sw_get_port_pvid, .get_port_pvid = rtl8366_sw_get_port_pvid,
.set_port_pvid = rtl8366_sw_set_port_pvid, .set_port_pvid = rtl8366_sw_set_port_pvid,
.reset_switch = rtl8366s_sw_reset_switch, .reset_switch = rtl8366s_sw_reset_switch,
.get_port_link = rtl8366s_sw_get_port_link,
}; };
static int rtl8366s_switch_init(struct rtl8366_smi *smi) static int rtl8366s_switch_init(struct rtl8366_smi *smi)

Loading…
Cancel
Save