On Tue, Nov 08, 2005 at 11:43:54AM -0800, Don Fry wrote: > This patch contains code from Thomas Bogendoerfer which I have modified > somewhat. It works fine for me in my testing, but I would like > additional exposure to this code before submitting to mainline. > It should fix bugzilla bug #4219 as well.
Is it necessary to maintain special cases for the single-PHY configurations? What would be the effect of folding the single-PHY situation into the multi-PHY handling code? John > @@ -936,9 +941,23 @@ static int pcnet32_phys_id(struct net_de > return 0; > } > > +#define PCNET32_REGS_PER_PHY 32 > +#define PCNET32_MAX_PHYS 32 > static int pcnet32_get_regs_len(struct net_device *dev) > { > - return(PCNET32_NUM_REGS * sizeof(u16)); > + struct pcnet32_private *lp = dev->priv; > + int j = 0; > + > + if (lp->multiphymask) { > + int i; > + > + for (i=0; i<PCNET32_MAX_PHYS; i++) > + if (lp->multiphymask & (1 << i)) > + j += PCNET32_REGS_PER_PHY; > + } else if (lp->mii) { > + j = PCNET32_REGS_PER_PHY; > + } > + return((PCNET32_NUM_REGS + j) * sizeof(u16)); > } > > static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs > *regs, > @@ -998,9 +1017,21 @@ static void pcnet32_get_regs(struct net_ > > /* read mii phy registers */ > if (lp->mii) { > - for (i=0; i<32; i++) { > - lp->a.write_bcr(ioaddr, 33, ((lp->mii_if.phy_id) << 5) | i); > - *buff++ = lp->a.read_bcr(ioaddr, 34); > + if (lp->multiphymask) { > + int j; > + for (j=0; j<PCNET32_MAX_PHYS; j++) { > + if (lp->multiphymask & (1 << j)) { > + for (i=0; i<PCNET32_REGS_PER_PHY; i++) { > + lp->a.write_bcr(ioaddr, 33, (j << 5) | i); > + *buff++ = lp->a.read_bcr(ioaddr, 34); > + } > + } > + } > + } else { > + for (i=0; i<PCNET32_REGS_PER_PHY; i++) { > + lp->a.write_bcr(ioaddr, 33, ((lp->mii_if.phy_id) << 5) | i); > + *buff++ = lp->a.read_bcr(ioaddr, 34); > + } > } > } > -- John W. Linville [EMAIL PROTECTED] - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html