[OpenWrt-Devel] [PATCH 1/2] mvsw61xx: use standard swconfig get_port_link

Claudio Leite leitec at staticky.com
Fri Aug 28 16:06:12 EDT 2015


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

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

If accepted this should be also pushed to CC, assuming                          
that's still possible.


 .../linux/generic/files/drivers/net/phy/mvsw61xx.c | 92 +++++-----------------
 1 file changed, 18 insertions(+), 74 deletions(-)

diff --git a/target/linux/generic/files/drivers/net/phy/mvsw61xx.c b/target/linux/generic/files/drivers/net/phy/mvsw61xx.c
index 9417fd4..346acb2 100644
--- a/target/linux/generic/files/drivers/net/phy/mvsw61xx.c
+++ b/target/linux/generic/files/drivers/net/phy/mvsw61xx.c
@@ -219,73 +219,32 @@ mvsw61xx_set_pvid(struct switch_dev *dev, int port, int val)
 }
 
 static int
-mvsw61xx_get_port_status(struct switch_dev *dev,
-		const struct switch_attr *attr, struct switch_val *val)
+mvsw61xx_get_port_link(struct switch_dev *dev, int port,
+		struct switch_port_link *link)
 {
-	struct mvsw61xx_state *state = get_state(dev);
-	char *buf = state->buf;
 	u16 status, speed;
-	int len;
-
-	status = sr16(dev, MV_PORTREG(STATUS, val->port_vlan));
-	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: ");
+	status = sr16(dev, MV_PORTREG(STATUS, port));
 
-		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;
-
-	return 0;
-}
+	link->link = status & MV_PORT_STATUS_LINK;
+	if (!link->link)
+		return 0;
 
-static int
-mvsw61xx_get_port_speed(struct switch_dev *dev,
-		const struct switch_attr *attr, struct switch_val *val)
-{
-	u16 status, speed;
+	link->duplex = status & MV_PORT_STATUS_FDX;
 
-	status = sr16(dev, MV_PORTREG(STATUS, val->port_vlan));
 	speed = (status & MV_PORT_STATUS_SPEED_MASK) >>
 			MV_PORT_STATUS_SPEED_SHIFT;
 
-	val->value.i = 0;
-
-	if (status & MV_PORT_STATUS_LINK) {
-		switch (speed) {
-		case MV_PORT_STATUS_SPEED_10:
-			val->value.i = 10;
-			break;
-		case MV_PORT_STATUS_SPEED_100:
-			val->value.i = 100;
-			break;
-		case MV_PORT_STATUS_SPEED_1000:
-			val->value.i = 1000;
-			break;
-		}
+	switch (speed) {
+	case MV_PORT_STATUS_SPEED_10:
+		link->speed = SWITCH_PORT_SPEED_10;
+		break;
+	case MV_PORT_STATUS_SPEED_100:
+		link->speed = SWITCH_PORT_SPEED_100;
+		break;
+	case MV_PORT_STATUS_SPEED_1000:
+		link->speed = SWITCH_PORT_SPEED_1000;
+		break;
 	}
 
 	return 0;
@@ -727,22 +686,6 @@ static const struct switch_attr mvsw61xx_port[] = {
 		.get = mvsw61xx_get_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 = {
@@ -758,6 +701,7 @@ static const struct switch_dev_ops mvsw61xx_ops = {
 		.attr = mvsw61xx_port,
 		.n_attr = ARRAY_SIZE(mvsw61xx_port),
 	},
+	.get_port_link = mvsw61xx_get_port_link,
 	.get_port_pvid = mvsw61xx_get_pvid,
 	.set_port_pvid = mvsw61xx_set_pvid,
 	.get_vlan_ports = mvsw61xx_get_vlan_ports,
-- 
2.1.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list