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;
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);
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;
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);
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
.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)
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)
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);
.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)
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)