netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH: 2.6.12-rc1] mii: Add test for GigE support
@ 2005-03-22 23:17 Dale Farnsworth
  2005-03-22 23:27 ` Jeff Garzik
  0 siblings, 1 reply; 7+ messages in thread
From: Dale Farnsworth @ 2005-03-22 23:17 UTC (permalink / raw)
  To: Netdev, Jeff Garzik; +Cc: James Chapman

This patch adds the ability to test a PHY for GigE support

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

Index: linux-2.5-enet/drivers/net/mii.c
===================================================================
--- linux-2.5-enet.orig/drivers/net/mii.c
+++ linux-2.5-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 */
Index: linux-2.5-enet/include/linux/mii.h
===================================================================
--- linux-2.5-enet.orig/include/linux/mii.h
+++ linux-2.5-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 */
@@ -121,6 +123,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;
@@ -143,6 +151,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,

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH: 2.6.12-rc1] mii: Add test for GigE support
  2005-03-22 23:17 [PATCH: 2.6.12-rc1] mii: Add test for GigE support Dale Farnsworth
@ 2005-03-22 23:27 ` Jeff Garzik
  2005-03-23  1:21   ` Andy Fleming
  0 siblings, 1 reply; 7+ messages in thread
From: Jeff Garzik @ 2005-03-22 23:27 UTC (permalink / raw)
  To: Dale Farnsworth; +Cc: Netdev, James Chapman

Dale Farnsworth wrote:
> This patch adds the ability to test a PHY for GigE support
> 
> Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
> 
> Index: linux-2.5-enet/drivers/net/mii.c
> ===================================================================
> --- linux-2.5-enet.orig/drivers/net/mii.c
> +++ linux-2.5-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;

Two comments:

1) you need to add EXPORT_SYMBOL() when adding new API functions (see 
the bottom of the file).

2) Reading a non-existent register will return all 1's in most cases, so 
I am not sure if this is the best test.

	Jeff

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH: 2.6.12-rc1] mii: Add test for GigE support
  2005-03-22 23:27 ` Jeff Garzik
@ 2005-03-23  1:21   ` Andy Fleming
  2005-03-23  1:47     ` Jeff Garzik
  0 siblings, 1 reply; 7+ messages in thread
From: Andy Fleming @ 2005-03-23  1:21 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Dale Farnsworth, James Chapman, Netdev


On Mar 22, 2005, at 17:27, Jeff Garzik wrote:
>>  +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;
>
> 2) Reading a non-existent register will return all 1's in most cases, 
> so I am not sure if this is the best test.

He reads a standard register (BMSR) to determine whether or not 
EXTSTAT1000 exists.  This is part of the 802.3 standard, so it should 
work.

Andy


Andy Fleming

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH: 2.6.12-rc1] mii: Add test for GigE support
  2005-03-23  1:21   ` Andy Fleming
@ 2005-03-23  1:47     ` Jeff Garzik
  2005-03-23  6:14       ` Dale Farnsworth
  0 siblings, 1 reply; 7+ messages in thread
From: Jeff Garzik @ 2005-03-23  1:47 UTC (permalink / raw)
  To: Andy Fleming; +Cc: Dale Farnsworth, James Chapman, Netdev

Andy Fleming wrote:
> 
> On Mar 22, 2005, at 17:27, Jeff Garzik wrote:
> 
>>>  +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;
>>
>>
>> 2) Reading a non-existent register will return all 1's in most cases, 
>> so I am not sure if this is the best test.
> 
> 
> He reads a standard register (BMSR) to determine whether or not 
> EXTSTAT1000 exists.  This is part of the 802.3 standard, so it should work.

Whoops, I read the patch incorrectly, and thought he read an extended 
register.

Objection removed.  Still need an EXPORT_SYMBOL() though.

	Jeff

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH: 2.6.12-rc1] mii: Add test for GigE support
  2005-03-23  1:47     ` Jeff Garzik
@ 2005-03-23  6:14       ` Dale Farnsworth
  2005-03-25  4:42         ` Jeff Garzik
  2005-08-22 23:50         ` [PATCH] [NET] " Dale Farnsworth
  0 siblings, 2 replies; 7+ messages in thread
From: Dale Farnsworth @ 2005-03-23  6:14 UTC (permalink / raw)
  To: Jeff Garzik, Netdev


Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

Index: linux-2.5-enet/drivers/net/mii.c
===================================================================
--- linux-2.5-enet.orig/drivers/net/mii.c
+++ linux-2.5-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: linux-2.5-enet/include/linux/mii.h
===================================================================
--- linux-2.5-enet.orig/include/linux/mii.h
+++ linux-2.5-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 */
@@ -121,6 +123,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;
@@ -143,6 +151,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,

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH: 2.6.12-rc1] mii: Add test for GigE support
  2005-03-23  6:14       ` Dale Farnsworth
@ 2005-03-25  4:42         ` Jeff Garzik
  2005-08-22 23:50         ` [PATCH] [NET] " Dale Farnsworth
  1 sibling, 0 replies; 7+ messages in thread
From: Jeff Garzik @ 2005-03-25  4:42 UTC (permalink / raw)
  To: Dale Farnsworth; +Cc: Netdev

applied, thanks

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] [NET] mii: Add test for GigE support
  2005-03-23  6:14       ` Dale Farnsworth
  2005-03-25  4:42         ` Jeff Garzik
@ 2005-08-22 23:50         ` Dale Farnsworth
  1 sibling, 0 replies; 7+ messages in thread
From: Dale Farnsworth @ 2005-08-22 23:50 UTC (permalink / raw)
  To: Jeff Garzik, Netdev

[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@farnsworth.org>

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,

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-08-22 23:50 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-03-22 23:17 [PATCH: 2.6.12-rc1] mii: Add test for GigE support Dale Farnsworth
2005-03-22 23:27 ` Jeff Garzik
2005-03-23  1:21   ` Andy Fleming
2005-03-23  1:47     ` Jeff Garzik
2005-03-23  6:14       ` Dale Farnsworth
2005-03-25  4:42         ` Jeff Garzik
2005-08-22 23:50         ` [PATCH] [NET] " Dale Farnsworth

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).