mvsw61xx: use standard swconfig get_port_link

The previous "link" and "status" functions were non-standard,
and thus less useful for parsing.

Signed-off-by: Claudio Leite <leitec@staticky.com>

SVN-Revision: 46864
lede-17.01
Felix Fietkau 2015-09-11 16:34:35 +00:00
parent 1a2fd4f869
commit b75d188b21
1 changed files with 21 additions and 79 deletions

View File

@ -219,74 +219,33 @@ mvsw61xx_set_pvid(struct switch_dev *dev, int port, int val)
} }
static int static int
mvsw61xx_get_port_status(struct switch_dev *dev, mvsw61xx_get_port_link(struct switch_dev *dev, int port,
const struct switch_attr *attr, struct switch_val *val) struct switch_port_link *link)
{ {
struct mvsw61xx_state *state = get_state(dev);
char *buf = state->buf;
u16 status, speed; u16 status, speed;
int len;
status = sr16(dev, MV_PORTREG(STATUS, val->port_vlan)); status = sr16(dev, MV_PORTREG(STATUS, port));
speed = (status & MV_PORT_STATUS_SPEED_MASK) >>
MV_PORT_STATUS_SPEED_SHIFT;
len = sprintf(buf, "link: ");
if (status & MV_PORT_STATUS_LINK) {
len += sprintf(buf + len, "up, speed: ");
switch (speed) {
case MV_PORT_STATUS_SPEED_10:
len += sprintf(buf + len, "10");
break;
case MV_PORT_STATUS_SPEED_100:
len += sprintf(buf + len, "100");
break;
case MV_PORT_STATUS_SPEED_1000:
len += sprintf(buf + len, "1000");
break;
}
len += sprintf(buf + len, " Mbps, duplex: ");
if (status & MV_PORT_STATUS_FDX)
len += sprintf(buf + len, "full");
else
len += sprintf(buf + len, "half");
} else {
len += sprintf(buf + len, "down");
}
val->value.s = buf;
link->link = status & MV_PORT_STATUS_LINK;
if (!link->link)
return 0; return 0;
}
static int link->duplex = status & MV_PORT_STATUS_FDX;
mvsw61xx_get_port_speed(struct switch_dev *dev,
const struct switch_attr *attr, struct switch_val *val)
{
u16 status, speed;
status = sr16(dev, MV_PORTREG(STATUS, val->port_vlan));
speed = (status & MV_PORT_STATUS_SPEED_MASK) >> speed = (status & MV_PORT_STATUS_SPEED_MASK) >>
MV_PORT_STATUS_SPEED_SHIFT; MV_PORT_STATUS_SPEED_SHIFT;
val->value.i = 0;
if (status & MV_PORT_STATUS_LINK) {
switch (speed) { switch (speed) {
case MV_PORT_STATUS_SPEED_10: case MV_PORT_STATUS_SPEED_10:
val->value.i = 10; link->speed = SWITCH_PORT_SPEED_10;
break; break;
case MV_PORT_STATUS_SPEED_100: case MV_PORT_STATUS_SPEED_100:
val->value.i = 100; link->speed = SWITCH_PORT_SPEED_100;
break; break;
case MV_PORT_STATUS_SPEED_1000: case MV_PORT_STATUS_SPEED_1000:
val->value.i = 1000; link->speed = SWITCH_PORT_SPEED_1000;
break; break;
} }
}
return 0; return 0;
} }
@ -676,8 +635,6 @@ enum {
enum { enum {
MVSW61XX_PORT_MASK, MVSW61XX_PORT_MASK,
MVSW61XX_PORT_QMODE, MVSW61XX_PORT_QMODE,
MVSW61XX_PORT_STATUS,
MVSW61XX_PORT_LINK,
}; };
static const struct switch_attr mvsw61xx_global[] = { static const struct switch_attr mvsw61xx_global[] = {
@ -727,22 +684,6 @@ static const struct switch_attr mvsw61xx_port[] = {
.get = mvsw61xx_get_port_qmode, .get = mvsw61xx_get_port_qmode,
.set = mvsw61xx_set_port_qmode, .set = mvsw61xx_set_port_qmode,
}, },
[MVSW61XX_PORT_STATUS] = {
.id = MVSW61XX_PORT_STATUS,
.type = SWITCH_TYPE_STRING,
.description = "Return port status",
.name = "status",
.get = mvsw61xx_get_port_status,
.set = NULL,
},
[MVSW61XX_PORT_LINK] = {
.id = MVSW61XX_PORT_LINK,
.type = SWITCH_TYPE_INT,
.description = "Get link speed",
.name = "link",
.get = mvsw61xx_get_port_speed,
.set = NULL,
},
}; };
static const struct switch_dev_ops mvsw61xx_ops = { static const struct switch_dev_ops mvsw61xx_ops = {
@ -758,6 +699,7 @@ static const struct switch_dev_ops mvsw61xx_ops = {
.attr = mvsw61xx_port, .attr = mvsw61xx_port,
.n_attr = ARRAY_SIZE(mvsw61xx_port), .n_attr = ARRAY_SIZE(mvsw61xx_port),
}, },
.get_port_link = mvsw61xx_get_port_link,
.get_port_pvid = mvsw61xx_get_pvid, .get_port_pvid = mvsw61xx_get_pvid,
.set_port_pvid = mvsw61xx_set_pvid, .set_port_pvid = mvsw61xx_set_pvid,
.get_vlan_ports = mvsw61xx_get_vlan_ports, .get_vlan_ports = mvsw61xx_get_vlan_ports,