netdev
[Top] [All Lists]

[PATCH] [NET] mii: Add test for GigE support

To: Jeff Garzik <jgarzik@xxxxxxxxx>, Netdev <netdev@xxxxxxxxxxx>
Subject: [PATCH] [NET] mii: Add test for GigE support
From: "Dale Farnsworth" <dale@xxxxxxxxxxxxxx>
Date: Mon, 22 Aug 2005 16:50:19 -0700
In-reply-to: <20050323061446.GA6943@xyzzy>
References: <20050322231746.GA27770@xyzzy> <4240A9F3.5040704@xxxxxxxxx> <212e5bf54766a68d2ab8716574225203@xxxxxxxxxxxxx> <4240CABB.5090701@xxxxxxxxx> <20050323061446.GA6943@xyzzy>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mutt/1.5.9i
[This patch was submitted on 22Mar2005 and jgarzik said,
"applied, thanks", but it may have been lost in the git transition.
I've updated it to current offsets.]

Signed-off-by: Dale Farnsworth <dale@xxxxxxxxxxxxxx>

Index: netdev-2.6-mv643xx-enet/drivers/net/mii.c
===================================================================
--- netdev-2.6-mv643xx-enet.orig/drivers/net/mii.c
+++ netdev-2.6-mv643xx-enet/drivers/net/mii.c
@@ -207,6 +207,21 @@
        return 0;
 }
 
+int mii_check_gmii_support(struct mii_if_info *mii)
+{
+       int reg;
+
+       reg = mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR);
+       if (reg & BMSR_HAS_EXTSTAT1000) {
+               reg = mii->mdio_read(mii->dev, mii->phy_id, MII_EXTSTAT1000);
+               if (reg & (ESR_1000_BASE_X_FD | ESR_1000_BASE_T_FD |
+                          ESR_1000_BASE_X_HD | ESR_1000_BASE_T_HD))
+                       return 1;
+       }
+
+       return 0;
+}
+
 int mii_link_ok (struct mii_if_info *mii)
 {
        /* first, a dummy read, needed to latch some MII phys */
@@ -394,5 +409,6 @@
 EXPORT_SYMBOL(mii_ethtool_sset);
 EXPORT_SYMBOL(mii_check_link);
 EXPORT_SYMBOL(mii_check_media);
+EXPORT_SYMBOL(mii_check_gmii_support);
 EXPORT_SYMBOL(generic_mii_ioctl);
 
Index: netdev-2.6-mv643xx-enet/include/linux/mii.h
===================================================================
--- netdev-2.6-mv643xx-enet.orig/include/linux/mii.h
+++ netdev-2.6-mv643xx-enet/include/linux/mii.h
@@ -22,6 +22,7 @@
 #define MII_EXPANSION       0x06        /* Expansion register          */
 #define MII_CTRL1000        0x09        /* 1000BASE-T control          */
 #define MII_STAT1000        0x0a        /* 1000BASE-T status           */
+#define MII_EXTSTAT1000     0x0f       /* 1000BASE-XX extended status */
 #define MII_DCOUNTER        0x12        /* Disconnect counter          */
 #define MII_FCSCOUNTER      0x13        /* False carrier counter       */
 #define MII_NWAYTEST        0x14        /* N-way auto-neg test reg     */
@@ -54,7 +55,8 @@
 #define BMSR_ANEGCAPABLE        0x0008  /* Able to do auto-negotiation */
 #define BMSR_RFAULT             0x0010  /* Remote fault detected       */
 #define BMSR_ANEGCOMPLETE       0x0020  /* Auto-negotiation complete   */
-#define BMSR_RESV               0x07c0  /* Unused...                   */
+#define BMSR_HAS_EXTSTAT1000    0x0100  /* Has 1000BASE extended status*/
+#define BMSR_RESV               0x06c0  /* Unused...                   */
 #define BMSR_10HALF             0x0800  /* Can do 10mbps, half-duplex  */
 #define BMSR_10FULL             0x1000  /* Can do 10mbps, full-duplex  */
 #define BMSR_100HALF            0x2000  /* Can do 100mbps, half-duplex */
@@ -129,6 +131,12 @@
 #define LPA_1000FULL            0x0800  /* Link partner 1000BASE-T full duplex 
*/
 #define LPA_1000HALF            0x0400  /* Link partner 1000BASE-T half duplex 
*/
 
+/* 1000BASE Ext Status register */
+#define ESR_1000_BASE_X_FD      0x8000
+#define ESR_1000_BASE_X_HD      0x4000
+#define ESR_1000_BASE_T_FD      0x2000
+#define ESR_1000_BASE_T_HD      0x1000
+
 struct mii_if_info {
        int phy_id;
        int advertising;
@@ -151,6 +159,7 @@
 extern int mii_nway_restart (struct mii_if_info *mii);
 extern int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd);
 extern int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd);
+extern int mii_check_gmii_support(struct mii_if_info *mii);
 extern void mii_check_link (struct mii_if_info *mii);
 extern unsigned int mii_check_media (struct mii_if_info *mii,
                                     unsigned int ok_to_print,

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] [NET] mii: Add test for GigE support, Dale Farnsworth <=