aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/files/drivers/net
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2012-03-07 16:32:38 +0000
committerGabor Juhos <juhosg@openwrt.org>2012-03-07 16:32:38 +0000
commit9e1be3b80964c844201442170e8bb1fbb6c2205b (patch)
tree2d557ed19267d0eaad0ccb5d626a7934381966d3 /target/linux/generic/files/drivers/net
parente2f0264afebf8ad21a0e2dd8b890242cac1112c5 (diff)
downloadupstream-9e1be3b80964c844201442170e8bb1fbb6c2205b.tar.gz
upstream-9e1be3b80964c844201442170e8bb1fbb6c2205b.tar.bz2
upstream-9e1be3b80964c844201442170e8bb1fbb6c2205b.zip
generic: rtl8366s: use the generic get_port_link implementation
SVN-Revision: 30843
Diffstat (limited to 'target/linux/generic/files/drivers/net')
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8366s.c82
1 files changed, 32 insertions, 50 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366s.c b/target/linux/generic/files/drivers/net/phy/rtl8366s.c
index 4300872c3e..7f9680aa11 100644
--- a/target/linux/generic/files/drivers/net/phy/rtl8366s.c
+++ b/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;
}
-
-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,
- const struct switch_attr *attr,
- struct switch_val *val)
+ int port,
+ struct switch_port_link *link)
{
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;
- memset(smi->buf, '\0', sizeof(smi->buf));
- rtl8366_smi_read_reg(smi, RTL8366S_PORT_LINK_STATUS_BASE +
- (val->port_vlan / 2), &data);
+ rtl8366_smi_read_reg(smi, RTL8366S_PORT_LINK_STATUS_BASE + (port / 2),
+ &data);
- if (val->port_vlan % 2)
+ if (port % 2)
data = data >> 8;
- if (data & RTL8366S_PORT_STATUS_LINK_MASK) {
- len = snprintf(smi->buf, sizeof(smi->buf),
- "port:%d link:up speed:%s %s-duplex %s%s%s",
- val->port_vlan,
- rtl8366s_speed_str(data &
- RTL8366S_PORT_STATUS_SPEED_MASK),
- (data & RTL8366S_PORT_STATUS_DUPLEX_MASK) ?
- "full" : "half",
- (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);
- }
+ link->link = !!(data & RTL8366S_PORT_STATUS_LINK_MASK);
+ if (!link->link)
+ return 0;
+
+ link->duplex = !!(data & RTL8366S_PORT_STATUS_DUPLEX_MASK);
+ link->rx_flow = !!(data & RTL8366S_PORT_STATUS_RXPAUSE_MASK);
+ link->tx_flow = !!(data & RTL8366S_PORT_STATUS_TXPAUSE_MASK);
+ link->aneg = !!(data & RTL8366S_PORT_STATUS_AN_MASK);
- val->value.s = smi->buf;
- val->len = len;
+ speed = (data & RTL8366S_PORT_STATUS_SPEED_MASK);
+ 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;
}
@@ -919,13 +907,6 @@ static struct switch_attr rtl8366s_globals[] = {
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,
.name = "reset_mib",
.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,
.set_port_pvid = rtl8366_sw_set_port_pvid,
.reset_switch = rtl8366s_sw_reset_switch,
+ .get_port_link = rtl8366s_sw_get_port_link,
};
static int rtl8366s_switch_init(struct rtl8366_smi *smi)
='#n353'>353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400