static int is_5350 = 0;
static struct ifreq ifr;
static struct net_device *dev;
+static unsigned char port[6] = { 0, 1, 2, 3, 4, 8 };
static int do_ioctl(int cmd, void *buf)
{
if ((val32 & (1 << 20)) /* valid */) {
for (j = 0; j < 6; j++) {
if (val32 & (1 << j)) {
- len += sprintf(buf + len, "%d%s\t", j,
- (val32 & (1 << (j + 6))) ? (j == 5 ? "u" : "") : "t");
+ len += sprintf(buf + len, "%d", j);
+ if (val32 & (1 << (j + 6))) {
+ if (j == 5) buf[len++] = 'u';
+ } else {
+ buf[len++] = 't';
+ if (robo_read16(ROBO_VLAN_PAGE, ROBO_VLAN_PORT0_DEF_TAG + (j << 1)) == nr)
+ buf[len++] = '*';
+ }
+ buf[len++] = '\t';
}
}
len += sprintf(buf + len, "\n");
if ((val16 & (1 << 14)) /* valid */) {
for (j = 0; j < 6; j++) {
if (val16 & (1 << j)) {
- len += sprintf(buf + len, "%d%s\t", j, (val16 & (1 << (j + 7))) ?
- (j == 5 ? "u" : "") : "t");
+ len += sprintf(buf + len, "%d", j);
+ if (val16 & (1 << (j + 7))) {
+ if (j == 5) buf[len++] = 'u';
+ } else {
+ buf[len++] = 't';
+ if (robo_read16(ROBO_VLAN_PAGE, ROBO_VLAN_PORT0_DEF_TAG + (j << 1)) == nr)
+ buf[len++] = '*';
+ }
+ buf[len++] = '\t';
}
}
len += sprintf(buf + len, "\n");
robo_write16(ROBO_VLAN_PAGE, ROBO_VLAN_WRITE, 0);
robo_write16(ROBO_VLAN_PAGE, (is_5350 ? ROBO_VLAN_TABLE_ACCESS_5350 : ROBO_VLAN_TABLE_ACCESS), val16);
}
-
+
+ /* reset ports to a known good state */
+ for (j = 0; j < d->ports; j++) {
+ robo_write16(ROBO_CTRL_PAGE, port[j], 0x0000);
+ robo_write16(ROBO_VLAN_PAGE, ROBO_VLAN_PORT0_DEF_TAG + (j << 1), 0);
+ }
+
/* enable switching */
set_switch(1);
if (notfound)
return -ENODEV;
else {
- switch_config main[] = {
+ switch_config cfg[] = {
{"enable", handle_enable_read, handle_enable_write},
{"enable_vlan", handle_enable_vlan_read, handle_enable_vlan_write},
{"reset", NULL, handle_reset},
cpuport: 5,
ports: 6,
vlans: 16,
- driver_handlers: main,
+ driver_handlers: cfg,
port_handlers: NULL,
vlan_handlers: vlan,
};