diff options
3 files changed, 44 insertions, 22 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h index f1701a54a..3b639f2b6 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h @@ -38,6 +38,8 @@ struct rtl8366_smi {  	unsigned int		cpu_port;  	unsigned int		num_ports;  	unsigned int		num_vlan_mc; +	unsigned int		num_mib_counters; +	struct rtl8366_mib_counter *mib_counters;  	struct rtl8366_smi_ops	*ops; @@ -79,6 +81,8 @@ struct rtl8366_smi_ops {  			       const struct rtl8366_vlan_4k *vlan4k);  	int	(*get_mc_index)(struct rtl8366_smi *smi, int port, int *val);  	int	(*set_mc_index)(struct rtl8366_smi *smi, int port, int index); +	int	(*get_mib_counter)(struct rtl8366_smi *smi, int counter, +				   int port, unsigned long long *val);  };  int rtl8366_smi_init(struct rtl8366_smi *smi); diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c index 495be8e7d..a4623f027 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c @@ -366,8 +366,8 @@ static int rtl8366rb_write_phy_reg(struct rtl8366_smi *smi,  	return 0;  } -static int rtl8366_get_mib_counter(struct rtl8366_smi *smi, int counter, -				   int port, unsigned long long *val) +static int rtl8366rb_get_mib_counter(struct rtl8366_smi *smi, int counter, +				     int port, unsigned long long *val)  {  	int i;  	int err; @@ -680,19 +680,25 @@ static ssize_t rtl8366rb_read_debugfs_mibs(struct file *file,  	int i, j, len = 0;  	char *buf = smi->buf; -	len += snprintf(buf + len, sizeof(smi->buf) - len, -			"%-36s %12s %12s %12s %12s %12s %12s\n", -			"Counter", -			"Port 0", "Port 1", "Port 2", -			"Port 3", "Port 4", "Port 5"); +	len += snprintf(buf + len, sizeof(smi->buf) - len, "%-36s", +			"Counter"); -	for (i = 0; i < ARRAY_SIZE(rtl8366rb_mib_counters); ++i) { +	for (i = 0; i < smi->num_ports; i++) { +		char port_buf[10]; + +		snprintf(port_buf, sizeof(port_buf), "Port %d", i); +		len += snprintf(buf + len, sizeof(smi->buf) - len, " %12s", +				port_buf); +	} +	len += snprintf(buf + len, sizeof(smi->buf) - len, "\n"); + +	for (i = 0; i < smi->num_mib_counters; i++) {  		len += snprintf(buf + len, sizeof(smi->buf) - len, "%-36s ", -				rtl8366rb_mib_counters[i].name); -		for (j = 0; j < RTL8366RB_NUM_PORTS; ++j) { +				smi->mib_counters[i].name); +		for (j = 0; j < smi->num_ports; j++) {  			unsigned long long counter = 0; -			if (!rtl8366_get_mib_counter(smi, i, j, &counter)) +			if (!smi->ops->get_mib_counter(smi, i, j, &counter))  				len += snprintf(buf + len,  						sizeof(smi->buf) - len,  						"%12llu ", counter); @@ -981,7 +987,7 @@ static int rtl8366rb_sw_get_port_mib(struct switch_dev *dev,  	for (i = 0; i < ARRAY_SIZE(rtl8366rb_mib_counters); ++i) {  		len += snprintf(buf + len, sizeof(smi->buf) - len,  				"%-36s: ", rtl8366rb_mib_counters[i].name); -		if (!rtl8366_get_mib_counter(smi, i, val->port_vlan, &counter)) +		if (!rtl8366rb_get_mib_counter(smi, i, val->port_vlan, &counter))  			len += snprintf(buf + len, sizeof(smi->buf) - len,  					"%llu\n", counter);  		else @@ -1289,6 +1295,7 @@ static struct rtl8366_smi_ops rtl8366rb_smi_ops = {  	.set_vlan_4k	= rtl8366rb_set_vlan_4k,  	.get_mc_index	= rtl8366rb_get_mc_index,  	.set_mc_index	= rtl8366rb_set_mc_index, +	.get_mib_counter = rtl8366rb_get_mib_counter,  };  static int __init rtl8366rb_probe(struct platform_device *pdev) @@ -1327,6 +1334,8 @@ static int __init rtl8366rb_probe(struct platform_device *pdev)  	smi->cpu_port = RTL8366RB_PORT_NUM_CPU;  	smi->num_ports = RTL8366RB_NUM_PORTS;  	smi->num_vlan_mc = RTL8366RB_NUM_VLANS; +	smi->mib_counters = rtl8366rb_mib_counters; +	smi->num_mib_counters = ARRAY_SIZE(rtl8366rb_mib_counters);  	err = rtl8366_smi_init(smi);  	if (err) diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366s.c b/target/linux/generic/files/drivers/net/phy/rtl8366s.c index ed20b4fbe..ebba2bb67 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366s.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366s.c @@ -664,23 +664,29 @@ static ssize_t rtl8366s_read_debugfs_mibs(struct file *file,  					  char __user *user_buf,  					  size_t count, loff_t *ppos)  { -	struct rtl8366_smi *smi = (struct rtl8366_smi *)file->private_data; +	struct rtl8366_smi *smi = file->private_data;  	int i, j, len = 0;  	char *buf = smi->buf; -	len += snprintf(buf + len, sizeof(smi->buf) - len, -			"%-36s %12s %12s %12s %12s %12s %12s\n", -			"Counter", -			"Port 0", "Port 1", "Port 2", -			"Port 3", "Port 4", "Port 5"); +	len += snprintf(buf + len, sizeof(smi->buf) - len, "%-36s", +			"Counter"); -	for (i = 0; i < ARRAY_SIZE(rtl8366s_mib_counters); ++i) { +	for (i = 0; i < smi->num_ports; i++) { +		char port_buf[10]; + +		snprintf(port_buf, sizeof(port_buf), "Port %d", i); +		len += snprintf(buf + len, sizeof(smi->buf) - len, " %12s", +				port_buf); +	} +	len += snprintf(buf + len, sizeof(smi->buf) - len, "\n"); + +	for (i = 0; i < smi->num_mib_counters; i++) {  		len += snprintf(buf + len, sizeof(smi->buf) - len, "%-36s ", -				rtl8366s_mib_counters[i].name); -		for (j = 0; j < RTL8366S_NUM_PORTS; ++j) { +				smi->mib_counters[i].name); +		for (j = 0; j < smi->num_ports; j++) {  			unsigned long long counter = 0; -			if (!rtl8366_get_mib_counter(smi, i, j, &counter)) +			if (!smi->ops->get_mib_counter(smi, i, j, &counter))  				len += snprintf(buf + len,  						sizeof(smi->buf) - len,  						"%12llu ", counter); @@ -1277,6 +1283,7 @@ static struct rtl8366_smi_ops rtl8366s_smi_ops = {  	.set_vlan_4k	= rtl8366s_set_vlan_4k,  	.get_mc_index	= rtl8366s_get_mc_index,  	.set_mc_index	= rtl8366s_set_mc_index, +	.get_mib_counter = rtl8366_get_mib_counter,  };  static int __init rtl8366s_probe(struct platform_device *pdev) @@ -1315,6 +1322,8 @@ static int __init rtl8366s_probe(struct platform_device *pdev)  	smi->cpu_port = RTL8366S_PORT_NUM_CPU;  	smi->num_ports = RTL8366S_NUM_PORTS;  	smi->num_vlan_mc = RTL8366S_NUM_VLANS; +	smi->mib_counters = rtl8366s_mib_counters; +	smi->num_mib_counters = ARRAY_SIZE(rtl8366s_mib_counters);  	err = rtl8366_smi_init(smi);  	if (err)  | 
