X-Git-Url: https://bbs.cooldavid.org/git/?p=jme.git;a=blobdiff_plain;f=jme.c;fp=jme.c;h=2852ba56fb33696f70a1c8771fa7e9634b85eb2b;hp=b883dc2b37444bbab642ee4f89c70713b863ffa9;hb=8a76ab5f50c3d7e575e855e178962dd2dae2ed5c;hpb=b34adbb08f135af4f8291fb3583fdcb8d7fedcf7 diff --git a/jme.c b/jme.c index b883dc2..2852ba5 100644 --- a/jme.c +++ b/jme.c @@ -111,6 +111,36 @@ jme_mdio_write(struct net_device *netdev, pr_err("phy(%d) write timeout : %d\n", phy, reg); } +static int +jme_phyext_read(struct jme_adapter *jme, int reg) +{ + jme_mdio_write(jme->dev, jme->mii_if.phy_id, + JME_PHY_SPEC_ADDR_REG, + JME_PHY_SPEC_REG_READ | (reg & 0x3FFF)); + return jme_mdio_read(jme->dev, jme->mii_if.phy_id, + JME_PHY_SPEC_DATA_REG); +} + +static void +jme_phyext_write(struct jme_adapter *jme, int reg, int val) +{ + jme_mdio_write(jme->dev, jme->mii_if.phy_id, + JME_PHY_SPEC_DATA_REG, val); + jme_mdio_write(jme->dev, jme->mii_if.phy_id, + JME_PHY_SPEC_ADDR_REG, + JME_PHY_SPEC_REG_WRITE | (reg & 0x3FFF)); +} + +static void +jme_phyext_memcpy(struct jme_adapter *jme, u32 *p, int reg_nr) +{ + int i; + u16 *p16 = (u16 *)p; + + for (i = 0 ; i < reg_nr ; ++i) + p16[i] = jme_phyext_read(jme, i); +} + static inline void jme_reset_phy_processor(struct jme_adapter *jme) { @@ -2453,6 +2483,9 @@ jme_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p) p32 += 0x100 >> 2; mdio_memcpy(jme, p32, JME_PHY_REG_NR); + + p32 += 0x100 >> 2; + jme_phyext_memcpy(jme, p32, JME_PHY_SPEC_REG_NR); } static int