wmb();
for (i = JME_PHY_TIMEOUT * 50 ; i > 0 ; --i) {
udelay(20);
- val = jread32(jme, JME_SMI);
- if ((val & SMI_OP_REQ) == 0)
+ if ((jread32(jme, JME_SMI) & SMI_OP_REQ) == 0)
break;
}
MII_ADVERTISE, ADVERTISE_ALL |
ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
- jme_mdio_write(jme->dev,
- jme->mii_if.phy_id,
- MII_CTRL1000,
- ADVERTISE_1000FULL | ADVERTISE_1000HALF);
+ if(jme->pdev->device == JME_GE_DEVICE)
+ jme_mdio_write(jme->dev,
+ jme->mii_if.phy_id,
+ MII_CTRL1000,
+ ADVERTISE_1000FULL | ADVERTISE_1000HALF);
val = jme_mdio_read(jme->dev,
jme->mii_if.phy_id,
phylink = jme_mdio_read(jme->dev, jme->mii_if.phy_id, 17);
bmsr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMSR);
- if(bmsr & BMCR_ANCOMP)
+ if(bmsr & BMSR_ANCOMP)
phylink |= PHY_LINK_AUTONEG_COMPLETE;
return phylink;
txbi->skb = skb;
txbi->len = skb->len;
if(!(txbi->start_xmit = jiffies))
- txbi->start_xmit = 1;
+ txbi->start_xmit = (0UL-1);
return 0;
}
int i, offset = eeprom->offset, len = eeprom->len;
/*
- * ethtool will check boundary for us
+ * ethtool will check the boundary for us
*/
eeprom->magic = JME_EEPROM_MAGIC;
for(i = 0 ; i < len ; ++i)
return -EINVAL;
/*
- * ethtool will check boundary for us
+ * ethtool will check the boundary for us
*/
for(i = 0 ; i < len ; ++i)
jme_smb_write(jme, i + offset, data[i]);
(unsigned long) jme);
jme->dpi.cur = PCC_P1;
- jme->reg_ghc = GHC_DPX | GHC_SPEED_1000M;
+ if(pdev->device == JME_GE_DEVICE)
+ jme->reg_ghc = GHC_DPX | GHC_SPEED_1000M;
+ else
+ jme->reg_ghc = GHC_DPX | GHC_SPEED_100M;
jme->reg_rxcs = RXCS_DEFAULT;
jme->reg_rxmcs = RXMCS_DEFAULT;
jme->reg_txpfc = 0;
else {
jme->mii_if.phy_id = 1;
}
- jme->mii_if.supports_gmii = 1;
+ if(pdev->device == JME_GE_DEVICE)
+ jme->mii_if.supports_gmii = true;
+ else
+ jme->mii_if.supports_gmii = false;
jme->mii_if.mdio_read = jme_mdio_read;
jme->mii_if.mdio_write = jme_mdio_write;
}
static struct pci_device_id jme_pci_tbl[] = {
- { PCI_VDEVICE(JMICRON, 0x250) },
+ { PCI_VDEVICE(JMICRON, JME_GE_DEVICE) },
+ { PCI_VDEVICE(JMICRON, JME_FE_DEVICE) },
{ }
};
#include <linux/version.h>
#define DRV_NAME "jme"
-#define DRV_VERSION "0.9c"
+#define DRV_VERSION "0.9d"
#define PFX DRV_NAME ": "
+#define JME_GE_DEVICE 0x250
+#define JME_FE_DEVICE 0x260
+
#ifdef DEBUG
#define dprintk(devname, fmt, args...) \
printk(KERN_DEBUG "%s: " fmt, devname, ## args)
{
return (((x) << SMI_PHY_ADDR_SHIFT) & SMI_PHY_ADDR_MASK);
}
-#define JME_PHY_TIMEOUT 1000 /* 1000 msec */
+#define JME_PHY_TIMEOUT 100 /* 100 msec */
#define JME_PHY_REG_NR 32
/*
PREG17_SPEED_100M = 0x4000,
PREG17_SPEED_1000M = 0x8000,
};
-#define BMCR_ANCOMP 0x0020
+#define BMSR_ANCOMP 0x0020
/*
* Function prototypes for ethtool