Index: /gpxe_study/kernel_2.6.20_src/sis900.c
===================================================================
--- /gpxe_study/kernel_2.6.20_src/sis900.c	(revision 5)
+++ /gpxe_study/kernel_2.6.20_src/sis900.c	(revision 6)
@@ -490,33 +490,36 @@
 	sis_priv->mii_info.reg_num_mask = 0x1f;
 
-	/* Get Mac address according to the chip revision */
-	pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &(sis_priv->chipset_rev));
-	if(netif_msg_probe(sis_priv))
-		printk(KERN_DEBUG "%s: detected revision %2.2x, "
-				"trying to get MAC address...\n",
-				dev_name, sis_priv->chipset_rev);
-
-	ret = 0;
-	if (sis_priv->chipset_rev == SIS630E_900_REV)
-		ret = sis630e_get_mac_addr(pci_dev, net_dev);
-	else if ((sis_priv->chipset_rev > 0x81) && (sis_priv->chipset_rev <= 0x90) )
-		ret = sis635_get_mac_addr(pci_dev, net_dev);
-	else if (sis_priv->chipset_rev == SIS96x_900_REV)
-		ret = sis96x_get_mac_addr(pci_dev, net_dev);
-	else
-		ret = sis900_get_mac_addr(pci_dev, net_dev);
-
-	if (ret == 0) {
-		printk(KERN_WARNING "%s: Cannot read MAC address.\n", dev_name);
-		ret = -ENODEV;
-		goto err_unmap_rx;
-	}
-
-	/* 630ET : set the mii access mode as software-mode */
-	if (sis_priv->chipset_rev == SIS630ET_900_REV)
-		outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
-
-	/* probe for mii transceiver */
-	if (sis900_mii_probe(net_dev) == 0) {
+    /* Get Mac address according to the chip revision */
+    pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &(sis_priv->chipset_rev));
+    if(netif_msg_probe(sis_priv))
+        printk(KERN_DEBUG "%s: detected revision %2.2x, "
+                "trying to get MAC address...\n",
+                dev_name, sis_priv->chipset_rev);
+
+    ret = 0;
+
+    if (sis_priv->chipset_rev == SIS630E_900_REV)
+        ret = sis630e_get_mac_addr(pci_dev, net_dev);
+    else if ((sis_priv->chipset_rev > 0x81) && (sis_priv->chipset_rev <= 0x90) )
+        ret = sis635_get_mac_addr(pci_dev, net_dev);
+    else if (sis_priv->chipset_rev == SIS96x_900_REV)
+	ret = sis96x_get_mac_addr(pci_dev, net_dev);
+    else
+        ret = sis900_get_mac_addr(pci_dev, net_dev);
+
+    if (ret == 0)
+    {
+        printk(KERN_WARNING "%s: Cannot read MAC address.\n", dev_name);
+        ret = -ENODEV;
+        goto err_unmap_rx;
+    }
+
+    /* 630ET : set the mii access mode as software-mode */
+    if (sis_priv->chipset_rev == SIS630ET_900_REV)
+	outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
+
+
+    /* probe for mii transceiver */
+    if (sis900_mii_probe(net_dev) == 0) {
 		printk(KERN_WARNING "%s: Error probing MII device.\n",
 		       dev_name);
@@ -1405,4 +1408,123 @@
 
 
+
+
+
+/*
+ *	sis900_read_mode - read media mode for sis900 internal phy
+ *	@net_dev: the net device to read mode for
+ *	@speed  : the transmit speed to be determined
+ *	@duplex : the duplex mode to be determined
+ *
+ *	The capability of remote end will be put in mii register autorec
+ *	after auto-negotiation. Use AND operation to get the upper bound
+ *	of speed and duplex between two ends.
+ */
+
+static void
+sis900_read_mode(struct net_device *net_dev, int *speed, int *duplex)
+{
+    int i = 0;
+    u32 status;
+    struct sis900_private *sis_priv = net_dev->priv;
+    struct mii_phy *phy = sis_priv->mii;
+    int phy_addr = sis_priv->cur_phy;
+    u16 autoadv, autorec;
+
+    while (i++ < 2)
+        status = mdio_read(net_dev, phy_addr, MII_STATUS);
+
+    if (!(status & MII_STAT_LINK))
+        return;
+    /* AutoNegotiate completed */
+    autoadv = mdio_read(net_dev, phy_addr, MII_ANADV);
+    autorec = mdio_read(net_dev, phy_addr, MII_ANLPAR);
+    status = autoadv & autorec;
+    *speed = HW_SPEED_10_MBPS;
+    *duplex = FDX_CAPABLE_HALF_SELECTED;
+    
+    if (status & (MII_NWAY_TX | MII_NWAY_TX_FDX))
+	*speed = HW_SPEED_100_MBPS;
+    if (status & ( MII_NWAY_TX_FDX | MII_NWAY_T_FDX))
+	*duplex = FDX_CAPABLE_FULL_SELECTED;
+	sis_priv->autong_complete = 1;
+
+    /* Workaround for Realtek RTL8201 PHY issue */
+    if ((phy->phy_id0 == 0x0000) && ((phy->phy_id1 & 0xFFF0) == 0x8200)) {
+        if (mdio_read(net_dev, phy_addr, MII_CONTROL) & MII_CNTL_FDX)
+            *duplex = FDX_CAPABLE_FULL_SELECTED;
+        if (mdio_read(net_dev, phy_addr, 0x0019) & 0x01)
+            *speed = HW_SPEED_100_MBPS;
+    }
+
+    if(netif_msg_link(sis_priv))
+        printk(KERN_INFO "%s: Media Link On %s %s-duplex \n",
+            net_dev->name,
+               *speed == HW_SPEED_100_MBPS ? 
+               "100mbps" : "10mbps",
+               *duplex == FDX_CAPABLE_FULL_SELECTED ?
+               "full" : "half");
+}
+
+
+
+/**
+ *	sis900_read_mode - read media mode for sis900 internal phy
+ *	@net_dev: the net device to read mode for
+ *	@speed  : the transmit speed to be determined
+ *	@duplex : the duplex mode to be determined
+ *
+ *	The capability of remote end will be put in mii register autorec
+ *	after auto-negotiation. Use AND operation to get the upper bound
+ *	of speed and duplex between two ends.
+ */
+
+static void sis900_read_mode(struct net_device *net_dev, int *speed, int *duplex)
+{
+	struct sis900_private *sis_priv = net_dev->priv;
+	struct mii_phy *phy = sis_priv->mii;
+	int phy_addr = sis_priv->cur_phy;
+	u32 status;
+	u16 autoadv, autorec;
+	int i = 0;
+
+	while (i++ < 2)
+		status = mdio_read(net_dev, phy_addr, MII_STATUS);
+
+	if (!(status & MII_STAT_LINK))
+		return;
+
+	/* AutoNegotiate completed */
+	autoadv = mdio_read(net_dev, phy_addr, MII_ANADV);
+	autorec = mdio_read(net_dev, phy_addr, MII_ANLPAR);
+	status = autoadv & autorec;
+
+	*speed = HW_SPEED_10_MBPS;
+	*duplex = FDX_CAPABLE_HALF_SELECTED;
+
+	if (status & (MII_NWAY_TX | MII_NWAY_TX_FDX))
+		*speed = HW_SPEED_100_MBPS;
+	if (status & ( MII_NWAY_TX_FDX | MII_NWAY_T_FDX))
+		*duplex = FDX_CAPABLE_FULL_SELECTED;
+
+	sis_priv->autong_complete = 1;
+
+	/* Workaround for Realtek RTL8201 PHY issue */
+	if ((phy->phy_id0 == 0x0000) && ((phy->phy_id1 & 0xFFF0) == 0x8200)) {
+		if (mdio_read(net_dev, phy_addr, MII_CONTROL) & MII_CNTL_FDX)
+			*duplex = FDX_CAPABLE_FULL_SELECTED;
+		if (mdio_read(net_dev, phy_addr, 0x0019) & 0x01)
+			*speed = HW_SPEED_100_MBPS;
+	}
+
+	if(netif_msg_link(sis_priv))
+		printk(KERN_INFO "%s: Media Link On %s %s-duplex \n",
+	       				net_dev->name,
+	       				*speed == HW_SPEED_100_MBPS ?
+	       					"100mbps" : "10mbps",
+	       				*duplex == FDX_CAPABLE_FULL_SELECTED ?
+	       					"full" : "half");
+}
+
 /**
  *	sis900_timer - sis900 timer routine
@@ -1554,63 +1676,4 @@
 		   MII_CNTL_AUTO | MII_CNTL_RST_AUTO);
 	sis_priv->autong_complete = 0;
-}
-
-
-/**
- *	sis900_read_mode - read media mode for sis900 internal phy
- *	@net_dev: the net device to read mode for
- *	@speed  : the transmit speed to be determined
- *	@duplex : the duplex mode to be determined
- *
- *	The capability of remote end will be put in mii register autorec
- *	after auto-negotiation. Use AND operation to get the upper bound
- *	of speed and duplex between two ends.
- */
-
-static void sis900_read_mode(struct net_device *net_dev, int *speed, int *duplex)
-{
-	struct sis900_private *sis_priv = net_dev->priv;
-	struct mii_phy *phy = sis_priv->mii;
-	int phy_addr = sis_priv->cur_phy;
-	u32 status;
-	u16 autoadv, autorec;
-	int i = 0;
-
-	while (i++ < 2)
-		status = mdio_read(net_dev, phy_addr, MII_STATUS);
-
-	if (!(status & MII_STAT_LINK))
-		return;
-
-	/* AutoNegotiate completed */
-	autoadv = mdio_read(net_dev, phy_addr, MII_ANADV);
-	autorec = mdio_read(net_dev, phy_addr, MII_ANLPAR);
-	status = autoadv & autorec;
-
-	*speed = HW_SPEED_10_MBPS;
-	*duplex = FDX_CAPABLE_HALF_SELECTED;
-
-	if (status & (MII_NWAY_TX | MII_NWAY_TX_FDX))
-		*speed = HW_SPEED_100_MBPS;
-	if (status & ( MII_NWAY_TX_FDX | MII_NWAY_T_FDX))
-		*duplex = FDX_CAPABLE_FULL_SELECTED;
-
-	sis_priv->autong_complete = 1;
-
-	/* Workaround for Realtek RTL8201 PHY issue */
-	if ((phy->phy_id0 == 0x0000) && ((phy->phy_id1 & 0xFFF0) == 0x8200)) {
-		if (mdio_read(net_dev, phy_addr, MII_CONTROL) & MII_CNTL_FDX)
-			*duplex = FDX_CAPABLE_FULL_SELECTED;
-		if (mdio_read(net_dev, phy_addr, 0x0019) & 0x01)
-			*speed = HW_SPEED_100_MBPS;
-	}
-
-	if(netif_msg_link(sis_priv))
-		printk(KERN_INFO "%s: Media Link On %s %s-duplex \n",
-	       				net_dev->name,
-	       				*speed == HW_SPEED_100_MBPS ?
-	       					"100mbps" : "10mbps",
-	       				*duplex == FDX_CAPABLE_FULL_SELECTED ?
-	       					"full" : "half");
 }
 
