Re: Patch for link detection for R8169
Francois Romieu napisał(a): [EMAIL PROTECTED] <[EMAIL PROTECTED]> : [...] Ok, thanks for the hint. Currently one can do 'ifconfig ethX up', check the link status, then try to DHCP or whatever. Apparently a few drivers do not support tne detection of link as presented above. So is it anything like a vendor requirement/a standard (or should it be the new right way (TM)) or does the userspace needs fixing wrt its expectation ? The main problem with this driver is, that if I do like this, then every 10 seconds I receive new message from the network card in kernel log. There is following message: Sep 4 16:31:43 laptop_mirka eth0: PHY reset until link up Sep 4 16:31:53 laptop_mirka eth0: PHY reset until link up Do you think, that this is correct way t do the things? I In my opinion, the solution, that link status can be checked (if hardware allow this) when interface is down is more usefull. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: Patch for link detection for R8169
Francois Romieu napisał(a): [EMAIL PROTECTED] [EMAIL PROTECTED] : [...] Ok, thanks for the hint. Currently one can do 'ifconfig ethX up', check the link status, then try to DHCP or whatever. Apparently a few drivers do not support tne detection of link as presented above. So is it anything like a vendor requirement/a standard (or should it be the new right way (TM)) or does the userspace needs fixing wrt its expectation ? The main problem with this driver is, that if I do like this, then every 10 seconds I receive new message from the network card in kernel log. There is following message: Sep 4 16:31:43 laptop_mirka eth0: PHY reset until link up Sep 4 16:31:53 laptop_mirka eth0: PHY reset until link up Do you think, that this is correct way t do the things? I In my opinion, the solution, that link status can be checked (if hardware allow this) when interface is down is more usefull. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Patch for link detection for R8169
There is a patch to driver of RLT8169 network card. This match make possible detection of the link status even if network interface is down. This is usefull for laptop users. --- r8169.c 2005-09-02 15:34:52.0 +0200 +++ linux/drivers/net/r8169.c 2005-09-05 21:11:15.0 +0200 @@ -538,14 +538,27 @@ static unsigned int rtl8169_tbi_link_ok(void __iomem *ioaddr) { - return RTL_R32(TBICSR) & TBILinkOk; + return (RTL_R32(TBICSR) & TBILinkOk) == TBILinkOk ? 1:0; } static unsigned int rtl8169_xmii_link_ok(void __iomem *ioaddr) { - return RTL_R8(PHYstatus) & LinkStatus; + return (RTL_R8(PHYstatus) & LinkStatus) == LinkStatus ? 1:0; } +static u32 rtl8169_get_link(struct net_device *dev) +{ + struct rtl8169_private *np = netdev_priv(dev); + unsigned int result; + unsigned long flags; + + spin_lock_irqsave(>lock, flags); + result = np->link_ok(np->mmio_addr); + spin_unlock_irqrestore(>lock, flags); + return result; +} + + static void rtl8169_tbi_reset_enable(void __iomem *ioaddr) { RTL_W32(TBICSR, RTL_R32(TBICSR) | TBIReset); @@ -577,6 +590,8 @@ spin_unlock_irqrestore(>lock, flags); } + + static void rtl8169_link_option(int idx, u8 *autoneg, u16 *speed, u8 *duplex) { struct { @@ -1010,7 +1025,7 @@ static struct ethtool_ops rtl8169_ethtool_ops = { .get_drvinfo= rtl8169_get_drvinfo, .get_regs_len = rtl8169_get_regs_len, - .get_link = ethtool_op_get_link, + .get_link = rtl8169_get_link,/* ethtool_op_get_link,*/ .get_settings = rtl8169_get_settings, .set_settings = rtl8169_set_settings, .get_msglevel = rtl8169_get_msglevel,
Patch for link detection for R8169
There is a patch to driver of RLT8169 network card. This match make possible detection of the link status even if network interface is down. This is usefull for laptop users. --- r8169.c 2005-09-02 15:34:52.0 +0200 +++ linux/drivers/net/r8169.c 2005-09-05 21:11:15.0 +0200 @@ -538,14 +538,27 @@ static unsigned int rtl8169_tbi_link_ok(void __iomem *ioaddr) { - return RTL_R32(TBICSR) TBILinkOk; + return (RTL_R32(TBICSR) TBILinkOk) == TBILinkOk ? 1:0; } static unsigned int rtl8169_xmii_link_ok(void __iomem *ioaddr) { - return RTL_R8(PHYstatus) LinkStatus; + return (RTL_R8(PHYstatus) LinkStatus) == LinkStatus ? 1:0; } +static u32 rtl8169_get_link(struct net_device *dev) +{ + struct rtl8169_private *np = netdev_priv(dev); + unsigned int result; + unsigned long flags; + + spin_lock_irqsave(np-lock, flags); + result = np-link_ok(np-mmio_addr); + spin_unlock_irqrestore(np-lock, flags); + return result; +} + + static void rtl8169_tbi_reset_enable(void __iomem *ioaddr) { RTL_W32(TBICSR, RTL_R32(TBICSR) | TBIReset); @@ -577,6 +590,8 @@ spin_unlock_irqrestore(tp-lock, flags); } + + static void rtl8169_link_option(int idx, u8 *autoneg, u16 *speed, u8 *duplex) { struct { @@ -1010,7 +1025,7 @@ static struct ethtool_ops rtl8169_ethtool_ops = { .get_drvinfo= rtl8169_get_drvinfo, .get_regs_len = rtl8169_get_regs_len, - .get_link = ethtool_op_get_link, + .get_link = rtl8169_get_link,/* ethtool_op_get_link,*/ .get_settings = rtl8169_get_settings, .set_settings = rtl8169_set_settings, .get_msglevel = rtl8169_get_msglevel,