summaryrefslogtreecommitdiff
path: root/linux/linux-mtx-1-2.4.27/14-au1000-eth-link-beat.diff
diff options
context:
space:
mode:
Diffstat (limited to 'linux/linux-mtx-1-2.4.27/14-au1000-eth-link-beat.diff')
-rw-r--r--linux/linux-mtx-1-2.4.27/14-au1000-eth-link-beat.diff64
1 files changed, 64 insertions, 0 deletions
diff --git a/linux/linux-mtx-1-2.4.27/14-au1000-eth-link-beat.diff b/linux/linux-mtx-1-2.4.27/14-au1000-eth-link-beat.diff
index e69de29bb2..f848d2a224 100644
--- a/linux/linux-mtx-1-2.4.27/14-au1000-eth-link-beat.diff
+++ b/linux/linux-mtx-1-2.4.27/14-au1000-eth-link-beat.diff
@@ -0,0 +1,64 @@
+--- linux/drivers/net/au1000_eth.c.orig 2004-11-23 12:01:00.551663672 +0100
++++ linux/drivers/net/au1000_eth.c 2004-11-23 12:08:36.795304096 +0100
+@@ -6,7 +6,9 @@
+ * Copyright 2002 TimeSys Corp.
+ * Author: MontaVista Software, Inc.
+ * ppopov@mvista.com or source@mvista.com
+- *
++ * Bjoern Riemer 2004
++ * riemer@fokus.fraunhofer.de or riemer@riemer-nt.de
++ * // fixed the link beat detection with ioctls (SIOCGMIIPHY)
+ * ########################################################################
+ *
+ * This program is free software; you can distribute it and/or modify it
+@@ -1383,6 +1385,10 @@
+ aup->phy_ops->phy_status(dev, aup->phy_addr, &link, &speed);
+ control = MAC_DISABLE_RX_OWN | MAC_RX_ENABLE | MAC_TX_ENABLE;
+ #ifndef CONFIG_CPU_LITTLE_ENDIAN
++ /*riemer: fix for startup without cable */
++ if (!link)
++ dev->flags &= ~IFF_RUNNING;
++
+ control |= MAC_BIG_ENDIAN;
+ #endif
+ if (link && (dev->if_port == IF_PORT_100BASEFX)) {
+@@ -1841,17 +1847,35 @@
+
+ static int au1000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+ {
+- //u16 *data = (u16 *)&rq->ifr_data;
++/*
++// This structure is used in all SIOCxMIIxxx ioctl calls
++struct mii_ioctl_data {
++ 0 u16 phy_id;
++ 1 u16 reg_num;
++ 2 u16 val_in;
++ 3 u16 val_out;
++};*/
++ u16 *data = (u16 *)&rq->ifr_data;
++ struct au1000_private *aup = (struct au1000_private *) dev->priv;
++ //struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data;
+
+ /* fixme */
+ switch(cmd) {
+ case SIOCDEVPRIVATE: /* Get the address of the PHY in use. */
+- //data[0] = PHY_ADDRESS;
++ case SIOCGMIIPHY:
++ if (!netif_running(dev))
++ return -EINVAL;
++ data[0] = aup->phy_addr;
+ case SIOCDEVPRIVATE+1: /* Read the specified MII register. */
+- //data[3] = mdio_read(ioaddr, data[0], data[1]);
++ case SIOCGMIIREG:
++ data[3] = mdio_read(dev, data[0], data[1]);
++ //data->val_out = mdio_read(dev,data->phy_id,data->reg_num);
+ return 0;
+ case SIOCDEVPRIVATE+2: /* Write the specified MII register */
+- //mdio_write(ioaddr, data[0], data[1], data[2]);
++ case SIOCSMIIREG:
++ if (!capable(CAP_NET_ADMIN))
++ return -EPERM;
++ mdio_write(dev, data[0], data[1],data[2]);
+ return 0;
+ default:
+ return -EOPNOTSUPP;