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

Reply via email to