val = mdio_read(ioaddr, MII_BMCR); 
val = mdio_read(ioaddr, phy_id, MII_BMCR); 
static void sis190_phy_task(void * data){	struct net_device *dev = data;	struct sis190_private *tp = netdev_priv(dev);	void __iomem *ioaddr = tp->mmio_addr;	u16 val;	rtnl_lock();	val = mdio_read(ioaddr, MII_BMCR);	if (val & BMCR_RESET) {		// FIXME: needlessly high ?  -- FR 02/07/2005		mod_timer(&tp->timer, jiffies + HZ/10);	} else if (!(mdio_read(ioaddr, MII_BMSR) & BMSR_ANEGCOMPLETE)) {		net_link(tp, KERN_WARNING "%s: PHY reset until link up.\n",			 dev->name);		mdio_write(ioaddr, MII_BMCR, val | BMCR_RESET);		mod_timer(&tp->timer, jiffies + SIS190_PHY_TIMEOUT);	} else {		/* Rejoice ! */		struct {			int val;			const char *msg;			u16 ctl;		} reg31[] = {			{ LPA_1000XFULL | LPA_SLCT,				"1000 Mbps Full Duplex",				0x01 | _1000bpsF },			{ LPA_1000XHALF | LPA_SLCT,				"1000 Mbps Half Duplex",				0x01 | _1000bpsH },			{ LPA_100FULL,				"100 Mbps Full Duplex",				0x01 | _100bpsF },			{ LPA_100HALF,				"100 Mbps Half Duplex",				0x01 | _100bpsH },			{ LPA_10FULL,				"10 Mbps Full Duplex",				0x01 | _10bpsF },			{ LPA_10HALF,				"10 Mbps Half Duplex",				0x01 | _10bpsH },			{ 0, "unknown", 0x0000 }		}, *p;		val = mdio_read(ioaddr, 0x1f);		net_link(tp, KERN_INFO "%s: mii ext = %04x.\n", dev->name, val);		val = mdio_read(ioaddr, MII_LPA);		net_link(tp, KERN_INFO "%s: mii lpa = %04x.\n", dev->name, val);		for (p = reg31; p->ctl; p++) {			if ((val & p->val) == p->val)				break;		}		if (p->ctl)			SIS_W16(StationControl, p->ctl);		net_link(tp, KERN_INFO "%s: link on %s mode.\n", dev->name,			 p->msg);		netif_carrier_on(dev);	}	rtnl_unlock();}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/9ede109bbe93d5bbe4271e346106847fbfea95a1/sis190.c/clean/drivers/net/sis190.c