backfire: generic: rtl8366: fix register offset and size of MIB counters (backport...
[openwrt-10.03/.git] / target / linux / generic-2.6 / files / drivers / net / phy / rtl8366s.c
index babeddc44a717d3ed34b7d523d84a0de5ad0f328..26d5c7880b7edc79798b1207ee30a46eb19ee5ab 100644 (file)
@@ -210,19 +210,19 @@ static struct mib_counter rtl8366s_mib_counters[RTL8366S_MIB_COUNT] = {
        { 38, 2, "Dot3StatsSymbolErrors             " },
        { 40, 2, "Dot3InPauseFrames                 " },
        { 42, 2, "Dot3ControlInUnknownOpcodes       " },
-       { 44, 2, "IfOutOctets                       " },
-       { 46, 2, "Dot3StatsSingleCollisionFrames    " },
-       { 48, 2, "Dot3StatMultipleCollisionFrames   " },
-       { 50, 2, "Dot3sDeferredTransmissions        " },
-       { 52, 2, "Dot3StatsLateCollisions           " },
-       { 54, 2, "EtherStatsCollisions              " },
-       { 56, 2, "Dot3StatsExcessiveCollisions      " },
-       { 58, 2, "Dot3OutPauseFrames                " },
-       { 60, 2, "Dot1dBasePortDelayExceededDiscards" },
-       { 62, 2, "Dot1dTpPortInDiscards             " },
-       { 64, 2, "IfOutUcastPkts                    " },
-       { 66, 2, "IfOutMulticastPkts                " },
-       { 68, 2, "IfOutBroadcastPkts                " },
+       { 44, 4, "IfOutOctets                       " },
+       { 48, 2, "Dot3StatsSingleCollisionFrames    " },
+       { 50, 2, "Dot3StatMultipleCollisionFrames   " },
+       { 52, 2, "Dot3sDeferredTransmissions        " },
+       { 54, 2, "Dot3StatsLateCollisions           " },
+       { 56, 2, "EtherStatsCollisions              " },
+       { 58, 2, "Dot3StatsExcessiveCollisions      " },
+       { 60, 2, "Dot3OutPauseFrames                " },
+       { 62, 2, "Dot1dBasePortDelayExceededDiscards" },
+       { 64, 2, "Dot1dTpPortInDiscards             " },
+       { 66, 2, "IfOutUcastPkts                    " },
+       { 68, 2, "IfOutMulticastPkts                " },
+       { 70, 2, "IfOutBroadcastPkts                " },
 };
 
 static inline struct rtl8366s *sw_to_rtl8366s(struct switch_dev *sw)
@@ -1118,7 +1118,7 @@ static int rtl8366s_sw_get_vlan_info(struct switch_dev *dev,
        struct rtl8366s *rtl = sw_to_rtl8366s(dev);
        char *buf = rtl->buf;
 
-       if (val->port_vlan >= RTL8366_NUM_VLANS)
+       if (val->port_vlan == 0 || val->port_vlan >= RTL8366_NUM_VLANS)
                return -EINVAL;
 
        memset(buf, '\0', sizeof(rtl->buf));
@@ -1257,7 +1257,7 @@ static int rtl8366s_sw_get_vlan_ports(struct switch_dev *dev,
        struct switch_port *port;
        int i;
 
-       if (val->port_vlan >= RTL8366_NUM_VLANS)
+       if (val->port_vlan == 0 || val->port_vlan >= RTL8366_NUM_VLANS)
                return -EINVAL;
 
        rtl8366s_get_vlan_member_config(rtl, val->port_vlan, &vlanmc);
@@ -1286,7 +1286,7 @@ static int rtl8366s_sw_set_vlan_ports(struct switch_dev *dev,
        struct switch_port *port;
        int i;
 
-       if (val->port_vlan >= RTL8366_NUM_VLANS)
+       if (val->port_vlan == 0 || val->port_vlan >= RTL8366_NUM_VLANS)
                return -EINVAL;
 
        rtl8366s_get_vlan_member_config(rtl, val->port_vlan, &vlanmc);