Index: /trunk/src/VBox/Devices/Network/DevE1000.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DevE1000.cpp	(revision 64924)
+++ /trunk/src/VBox/Devices/Network/DevE1000.cpp	(revision 64925)
@@ -70,5 +70,5 @@
  * in init (see @bugref{8624}).
  */
-//#define E1K_INIT_LINKUP_DELAY (500 * 1000)
+#define E1K_INIT_LINKUP_DELAY_US (2000 * 1000)
 /** @def E1K_IMS_INT_DELAY_NS
  * E1K_IMS_INT_DELAY_NS prevents interrupt storms in Windows guests on enabling
@@ -2678,14 +2678,6 @@
             && !(STATUS & STATUS_LU))
         {
-#ifdef E1K_INIT_LINKUP_DELAY
-            /*
-             * The driver indicates that we should bring up the link. Our default 5-second delay is too long,
-             * as Linux guests detect Tx hang after 2 seconds. Let's use 500 ms delay instead. */
-            e1kArmTimer(pThis, pThis->CTX_SUFF(pLUTimer), E1K_INIT_LINKUP_DELAY);
-#else /* !E1K_INIT_LINKUP_DELAY */
-            /* Bring up the link immediately, no need for an interrupt though. */
-            STATUS |= STATUS_LU;
-            Phy::setLinkStatus(&pThis->phy, true);
-#endif /* !E1K_INIT_LINKUP_DELAY */
+            /* It should take about 2 seconds for the link to come up */
+            e1kArmTimer(pThis, pThis->CTX_SUFF(pLUTimer), E1K_INIT_LINKUP_DELAY_US);
         }
         if (value & CTRL_VME)
Index: /trunk/src/VBox/Devices/Network/DevE1000Phy.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DevE1000Phy.cpp	(revision 64924)
+++ /trunk/src/VBox/Devices/Network/DevE1000Phy.cpp	(revision 64925)
@@ -320,8 +320,8 @@
     REG(PCTRL) = PCTRL_SPDSELM | PCTRL_DUPMOD | PCTRL_ANEG;
     /*
-     * 100 and 10 FD/HD, MF Preamble Suppression, Auto-Negotiation Complete,
+     * 100 and 10 FD/HD, Extended Status, MF Preamble Suppression,
      * AUTO NEG AB, EXT CAP
      */
-    REG(PSTATUS)  = (REG(PSTATUS) & ~PSTATUS_LNKSTAT) | 0x7969;
+    REG(PSTATUS)  = 0x7949;
     REG(ANA)      = 0x01E1;
     /* No flow control by our link partner, all speeds */
@@ -351,6 +351,13 @@
 static void Phy::softReset(PPHY pPhy)
 {
-    RT_NOREF1(pPhy);
-    PhyLog(("PHY#%d Soft reset is not yet implemented!\n", pPhy->iInstance));
+    PhyLog(("PHY#%d Soft reset\n", pPhy->iInstance));
+    /*
+     * 100 and 10 FD/HD, Extended Status, MF Preamble Suppression,
+     * AUTO NEG AB, EXT CAP
+     */
+    REG(PSTATUS)  = 0x7949;
+    REG(PSSTAT)   = 0x0000;
+    PhyLog(("PHY#%d PSTATUS=%04x PSSTAT=%04x\n", pPhy->iInstance, REG(PSTATUS), REG(PSSTAT)));
+    PhyLog(("PHY#%d Soft reset is not yet fully implemented!\n", pPhy->iInstance));
 }
 
@@ -376,5 +383,8 @@
 {
     if (fLinkIsUp)
+    {
         REG(PSSTAT)  |= PSSTAT_LINK;
+        REG(PSTATUS) |= PSTATUS_NEGCOMP;
+    }
     else
     {
@@ -382,4 +392,5 @@
         REG(PSTATUS) &= ~PSTATUS_LNKSTAT;
     }
+    PhyLog(("PHY#%d setLinkStatus: PSTATUS=%04x PSSTAT=%04x\n", pPhy->iInstance, REG(PSTATUS), REG(PSSTAT)));
 }
 
Index: /trunk/src/VBox/Devices/Network/DevE1000Phy.h
===================================================================
--- /trunk/src/VBox/Devices/Network/DevE1000Phy.h	(revision 64924)
+++ /trunk/src/VBox/Devices/Network/DevE1000Phy.h	(revision 64925)
@@ -28,4 +28,5 @@
 
 #define PSTATUS_LNKSTAT 0x0004
+#define PSTATUS_NEGCOMP 0x0020
 
 /*
