Skip to contentSkip to conversation

8139cp: SIOCGMIIPHY and SIOCGMIIREG

PATCH New Felipe W Damasio 1 participant 1 message Sep 20, 2002

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 8139cp: SIOCGMIIPHY and SIOCGMIIREG

	Hi,

	This patch adds support to the GMIIPHY and GMIIREG ioctls to the 2.4

version of the 8139cp ethernet driver.

This is required so we don't break apps (eg mii-diag, mii-tools) who
rely on these ioctls to get the NIC's settings.

	Patch against 2.4.20-pre7.

	Please consider pulling it from:

http://cscience.org/~felipewd/linux/patches-fwd/2.4/8139cp-gmii.patch

Felipe

8139cp.c renamed from 8139cp.c.orig +15 -0
@@ -1641,14 +1641,29 @@
 static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
 {
 	struct cp_private *cp = dev->priv;
+	struct mii_ioctl_data *mii;
 	int rc = 0;
 
+	mii = (struct mii_ioctl_data *) &rq->ifr_data;
 	if (!netif_running(dev))
 		return -EINVAL;
 
+	if (cmd != SIOCETHTOOL) 
+		mii->reg_num &= 0x1f;
+	
 	switch (cmd) {
 	case SIOCETHTOOL:
 		return cp_ethtool_ioctl(cp, (void *) rq->ifr_data);
+		
+ 	case SIOCGMIIPHY:	/* Get the address of the PHY in use. */
+	case SIOCDEVPRIVATE:	/* binary compat, remove in 2.5 */
+		mii->phy_id = CP_INTERNAL_PHY;
+		/* Fall Through */
+
+	case SIOCGMIIREG:	/* Read the specified MII register. */
+	case SIOCDEVPRIVATE+1:	/* binary compat, remove in 2.5 */
+		mii->val_out = mdio_read (dev, CP_INTERNAL_PHY, mii->reg_num);
+		break;
 
 	default:
 		rc = -EOPNOTSUPP;