OpenWrt – Diff between revs 2 and 3
?pathlinks?
Rev 2 | Rev 3 | |||
---|---|---|---|---|
Line 293... | Line 293... | |||
293 | |
293 | |
|
Line 294... | Line 294... | |||
294 | mutex_unlock(&bus->mdio_lock); |
294 | mutex_unlock(&bus->mdio_lock); |
|
295 | |
295 | |
|
296 | return ret; |
- | ||
297 | } |
- | ||
298 | void |
- | ||
299 | ar8xxx_phy_dbg_read(struct ar8xxx_priv *priv, int phy_addr, |
- | ||
300 | u16 dbg_addr, u16 *dbg_data) |
- | ||
301 | { |
- | ||
302 | struct mii_bus *bus = priv->mii_bus; |
- | ||
303 | |
- | ||
304 | mutex_lock(&bus->mdio_lock); |
- | ||
305 | bus->write(bus, phy_addr, MII_ATH_DBG_ADDR, dbg_addr); |
- | ||
306 | *dbg_data = bus->read(bus, phy_addr, MII_ATH_DBG_DATA); |
- | ||
Line 307... | Line 296... | |||
307 | mutex_unlock(&bus->mdio_lock); |
296 | return ret; |
|
308 | } |
297 | } |
|
309 | |
298 | |
|
310 | void |
299 | void |
|
Line 758... | Line 747... | |||
758 | { |
747 | { |
|
759 | struct mii_bus *bus = priv->mii_bus; |
748 | struct mii_bus *bus = priv->mii_bus; |
|
760 | u16 r2, page; |
749 | u16 r2, page; |
|
761 | u16 r1_func0, r1_func1, r1_func2; |
750 | u16 r1_func0, r1_func1, r1_func2; |
|
762 | u32 t, val0, val1, val2; |
751 | u32 t, val0, val1, val2; |
|
- | 752 | int i; |
||
Line 763... | Line 753... | |||
763 | |
753 | |
|
764 | split_addr(AR8216_REG_ATU_FUNC0, &r1_func0, &r2, &page); |
754 | split_addr(AR8216_REG_ATU_FUNC0, &r1_func0, &r2, &page); |
|
Line 765... | Line 755... | |||
765 | r2 |= 0x10; |
755 | r2 |= 0x10; |
|
Line 793... | Line 783... | |||
793 | |
783 | |
|
794 | *status = (val2 & AR8216_ATU_STATUS) >> AR8216_ATU_STATUS_S; |
784 | *status = (val2 & AR8216_ATU_STATUS) >> AR8216_ATU_STATUS_S; |
|
795 | if (!*status) |
785 | if (!*status) |
|
Line -... | Line 786... | |||
- | 786 | break; |
||
- | 787 | |
||
796 | break; |
788 | i = 0; |
|
- | 789 | t = AR8216_ATU_PORT0; |
||
- | 790 | while (!(val2 & t) && ++i < priv->dev.ports) |
||
- | 791 | t <<= 1; |
||
797 | |
792 | |
|
798 | a->portmap = (val2 & AR8216_ATU_PORTS) >> AR8216_ATU_PORTS_S; |
793 | a->port = i; |
|
799 | a->mac[0] = (val0 & AR8216_ATU_ADDR5) >> AR8216_ATU_ADDR5_S; |
794 | a->mac[0] = (val0 & AR8216_ATU_ADDR5) >> AR8216_ATU_ADDR5_S; |
|
800 | a->mac[1] = (val0 & AR8216_ATU_ADDR4) >> AR8216_ATU_ADDR4_S; |
795 | a->mac[1] = (val0 & AR8216_ATU_ADDR4) >> AR8216_ATU_ADDR4_S; |
|
801 | a->mac[2] = (val1 & AR8216_ATU_ADDR3) >> AR8216_ATU_ADDR3_S; |
796 | a->mac[2] = (val1 & AR8216_ATU_ADDR3) >> AR8216_ATU_ADDR3_S; |
|
Line 1519... | Line 1514... | |||
1519 | * ARL table can include multiple valid entries |
1514 | * ARL table can include multiple valid entries |
|
1520 | * per MAC, just with differing status codes |
1515 | * per MAC, just with differing status codes |
|
1521 | */ |
1516 | */ |
|
1522 | for (j = 0; j < i; ++j) { |
1517 | for (j = 0; j < i; ++j) { |
|
1523 | a1 = &priv->arl_table[j]; |
1518 | a1 = &priv->arl_table[j]; |
|
1524 | if (!memcmp(a->mac, a1->mac, sizeof(a->mac))) { |
1519 | if (a->port == a1->port && !memcmp(a->mac, a1->mac, sizeof(a->mac))) |
|
1525 | /* ignore ports already seen in former entry */ |
- | ||
1526 | a->portmap &= ~a1->portmap; |
- | ||
1527 | if (!a->portmap) |
- | ||
1528 | goto duplicate; |
1520 | goto duplicate; |
|
1529 | } |
- | ||
1530 | } |
1521 | } |
|
1531 | } |
1522 | } |
|
Line 1532... | Line 1523... | |||
1532 | |
1523 | |
|
Line 1541... | Line 1532... | |||
1541 | AR8XXX_NUM_ARL_RECORDS); |
1532 | AR8XXX_NUM_ARL_RECORDS); |
|
Line 1542... | Line 1533... | |||
1542 | |
1533 | |
|
1543 | for (j = 0; j < priv->dev.ports; ++j) { |
1534 | for (j = 0; j < priv->dev.ports; ++j) { |
|
1544 | for (k = 0; k < i; ++k) { |
1535 | for (k = 0; k < i; ++k) { |
|
1545 | a = &priv->arl_table[k]; |
1536 | a = &priv->arl_table[k]; |
|
1546 | if (!(a->portmap & BIT(j))) |
1537 | if (a->port != j) |
|
1547 | continue; |
1538 | continue; |
|
1548 | len += snprintf(buf + len, sizeof(priv->arl_buf) - len, |
1539 | len += snprintf(buf + len, sizeof(priv->arl_buf) - len, |
|
1549 | "Port %d: MAC %02x:%02x:%02x:%02x:%02x:%02x\n", |
1540 | "Port %d: MAC %02x:%02x:%02x:%02x:%02x:%02x\n", |
|
1550 | j, |
1541 | j, |
|
Line 2111... | Line 2102... | |||
2111 | } |
2102 | } |
|
2112 | phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF; |
2103 | phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF; |
|
Line 2113... | Line 2104... | |||
2113 | |
2104 | |
|
2114 | phydev->state = PHY_RUNNING; |
2105 | phydev->state = PHY_RUNNING; |
|
2115 | netif_carrier_on(phydev->attached_dev); |
- | ||
2116 | if (phydev->adjust_link) |
2106 | netif_carrier_on(phydev->attached_dev); |
|
Line 2117... | Line 2107... | |||
2117 | phydev->adjust_link(phydev->attached_dev); |
2107 | phydev->adjust_link(phydev->attached_dev); |
|
2118 | |
2108 | |
|
Line 2119... | Line 2109... | |||
2119 | return 0; |
2109 | return 0; |
|
Line 2175... | Line 2165... | |||
2175 | struct ar8xxx_priv *priv; |
2165 | struct ar8xxx_priv *priv; |
|
2176 | struct switch_dev *swdev; |
2166 | struct switch_dev *swdev; |
|
2177 | int ret; |
2167 | int ret; |
|
Line 2178... | Line 2168... | |||
2178 | |
2168 | |
|
2179 | /* skip PHYs at unused adresses */ |
2169 | /* skip PHYs at unused adresses */ |
|
2180 | if (phydev->mdio.addr != 0 && phydev->mdio.addr != 3 && phydev->mdio.addr != 4) |
2170 | if (phydev->mdio.addr != 0 && phydev->mdio.addr != 4) |
|
Line 2181... | Line 2171... | |||
2181 | return -ENODEV; |
2171 | return -ENODEV; |
|
2182 | |
2172 | |
|
Line 2234... | Line 2224... | |||
2234 | } else { |
2224 | } else { |
|
2235 | if (ar8xxx_has_gige(priv)) { |
2225 | if (ar8xxx_has_gige(priv)) { |
|
2236 | phydev->supported |= SUPPORTED_1000baseT_Full; |
2226 | phydev->supported |= SUPPORTED_1000baseT_Full; |
|
2237 | phydev->advertising |= ADVERTISED_1000baseT_Full; |
2227 | phydev->advertising |= ADVERTISED_1000baseT_Full; |
|
2238 | } |
2228 | } |
|
2239 | if (priv->chip->phy_rgmii_set) |
- | ||
2240 | priv->chip->phy_rgmii_set(priv, phydev); |
- | ||
2241 | } |
2229 | } |
|
Line 2242... | Line 2230... | |||
2242 | |
2230 | |
|
Line 2243... | Line 2231... | |||
2243 | phydev->priv = priv; |
2231 | phydev->priv = priv; |