Nothing fancy: the phy id is almost hardcoded per spec and __mdio_{read/write} wrap around the existing mii access helpers.
Signed-off-by: Francois Romieu <[EMAIL PROTECTED]> diff -puN drivers/net/r8169.c~r8169-760 drivers/net/r8169.c --- a/drivers/net/r8169.c~r8169-760 2005-08-24 22:30:28.321556238 +0200 +++ b/drivers/net/r8169.c 2005-08-24 22:30:28.348551853 +0200 @@ -141,6 +141,7 @@ static int multicast_filter_limit = 32; #define RTL8169_TX_TIMEOUT (6*HZ) #define RTL8169_PHY_TIMEOUT (10*HZ) +#define RTL8169_PHY_ID (1) /* See PHYAR in datasheet */ /* write/read MMIO register */ #define RTL_W8(reg, val8) writeb ((val8), ioaddr + (reg)) @@ -403,6 +404,7 @@ struct rtl8169_private { unsigned int (*phy_reset_pending)(void __iomem *); unsigned int (*link_ok)(void __iomem *); struct work_struct task; + struct mii_if_info mii_if; }; MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>"); @@ -474,6 +476,20 @@ static int mdio_read(void __iomem *ioadd return mdio_cmd(ioaddr, (reg & 0xff) << 16) & 0xffff; } +static void __mdio_write(struct net_device *dev, int phy_id, int reg, int val) +{ + struct rtl8169_private *tp = netdev_priv(dev); + + mdio_write(tp->mmio_addr, reg, val); +} + +static int __mdio_read(struct net_device *dev, int phy_id, int reg) +{ + struct rtl8169_private *tp = netdev_priv(dev); + + return mdio_read(tp->mmio_addr, reg); +} + static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr) { RTL_W16(IntrMask, 0x0000); @@ -1437,6 +1453,7 @@ rtl8169_init_one(struct pci_dev *pdev, c { struct net_device *dev = NULL; struct rtl8169_private *tp; + struct mii_if_info *mii_if; void __iomem *ioaddr = NULL; static int board_idx = -1; int i, rc; @@ -1510,6 +1527,16 @@ rtl8169_init_one(struct pci_dev *pdev, c tp->pci_dev = pdev; tp->mmio_addr = ioaddr; + mii_if = &tp->mii_if; + + mii_if->dev = dev; + mii_if->phy_id = RTL8169_PHY_ID; + mii_if->mdio_read = __mdio_read; + mii_if->mdio_write = __mdio_write; + mii_if->phy_id_mask = 0x1f; + mii_if->reg_num_mask = 0x1f; + mii_if->supports_gmii = 1; + spin_lock_init(&tp->lock); rc = register_netdev(dev); _ - 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