Index: /trunk/include/VBox/VBoxVideoHost3D.h
===================================================================
--- /trunk/include/VBox/VBoxVideoHost3D.h	(revision 51216)
+++ /trunk/include/VBox/VBoxVideoHost3D.h	(revision 51217)
@@ -29,4 +29,5 @@
 #include <VBox/VBoxVideo.h>
 #include <VBox/hgcmsvc.h>
+#include <VBox/vmm/pdmifs.h>
 
 /* screen update instance */
@@ -95,4 +96,5 @@
     };
     uint64_t cbVRam;
+    PPDMLED pLed;
     /* out */
     struct VBOXCRCMD_SVRINFO CrCmdServerInfo;
Index: /trunk/include/VBox/vmm/pdmifs.h
===================================================================
--- /trunk/include/VBox/vmm/pdmifs.h	(revision 51216)
+++ /trunk/include/VBox/vmm/pdmifs.h	(revision 51217)
@@ -641,6 +641,6 @@
 typedef struct VBVAINFOVIEW *PVBVAINFOVIEW;
 typedef struct VBVAHOSTFLAGS *PVBVAHOSTFLAGS;
-typedef struct VBOXVDMACMD_CHROMIUM_CMD *PVBOXVDMACMD_CHROMIUM_CMD; /* <- chromium [hgsmi] command */
-typedef struct VBOXVDMACMD_CHROMIUM_CTL *PVBOXVDMACMD_CHROMIUM_CTL; /* <- chromium [hgsmi] command */
+struct VBOXVDMACMD_CHROMIUM_CMD; /* <- chromium [hgsmi] command */
+struct VBOXVDMACMD_CHROMIUM_CTL; /* <- chromium [hgsmi] command */
 
 
@@ -766,5 +766,5 @@
      * @thread  The emulation thread.
      */
-    DECLR3CALLBACKMEMBER(void, pfnCrHgsmiCommandProcess, (PPDMIDISPLAYCONNECTOR pInterface, PVBOXVDMACMD_CHROMIUM_CMD pCmd, uint32_t cbCmd));
+    DECLR3CALLBACKMEMBER(void, pfnCrHgsmiCommandProcess, (PPDMIDISPLAYCONNECTOR pInterface, struct VBOXVDMACMD_CHROMIUM_CMD* pCmd, uint32_t cbCmd));
 
     /**
@@ -775,5 +775,5 @@
      * @thread  The emulation thread.
      */
-    DECLR3CALLBACKMEMBER(void, pfnCrHgsmiControlProcess, (PPDMIDISPLAYCONNECTOR pInterface, PVBOXVDMACMD_CHROMIUM_CTL pCtl, uint32_t cbCtl));
+    DECLR3CALLBACKMEMBER(void, pfnCrHgsmiControlProcess, (PPDMIDISPLAYCONNECTOR pInterface, struct VBOXVDMACMD_CHROMIUM_CTL* pCtl, uint32_t cbCtl));
 
     /**
@@ -3090,8 +3090,8 @@
 
     DECLR3CALLBACKMEMBER(int, pfnCrHgsmiCommandCompleteAsync, (PPDMIDISPLAYVBVACALLBACKS pInterface,
-                                                               PVBOXVDMACMD_CHROMIUM_CMD pCmd, int rc));
+                                                               struct VBOXVDMACMD_CHROMIUM_CMD* pCmd, int rc));
 
     DECLR3CALLBACKMEMBER(int, pfnCrHgsmiControlCompleteAsync, (PPDMIDISPLAYVBVACALLBACKS pInterface,
-                                                               PVBOXVDMACMD_CHROMIUM_CTL pCmd, int rc));
+                                                               struct VBOXVDMACMD_CHROMIUM_CTL* pCmd, int rc));
 
     DECLR3CALLBACKMEMBER(int, pfnCrCtlSubmit, (PPDMIDISPLAYVBVACALLBACKS pInterface,
Index: /trunk/src/VBox/Devices/Graphics/DevVGA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA.cpp	(revision 51216)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA.cpp	(revision 51217)
@@ -4461,7 +4461,39 @@
     PDMIBASE_RETURN_INTERFACE(pszIID, PDMIDISPLAYVBVACALLBACKS, &pThis->IVBVACallbacks);
 #endif
+    PDMIBASE_RETURN_INTERFACE(pszIID, PDMILEDPORTS, &pThis->ILeds);
     return NULL;
 }
 
+/* -=-=-=-=-=- Ring 3: ILeds -=-=-=-=-=- */
+#define ILEDPORTS_2_VGASTATE(pInterface) ( (PVGASTATE)((uintptr_t)pInterface - RT_OFFSETOF(VGASTATE, ILeds)) )
+
+/**
+ * Gets the pointer to the status LED of a unit.
+ *
+ * @returns VBox status code.
+ * @param   pInterface      Pointer to the interface structure containing the called function pointer.
+ * @param   iLUN            The unit which status LED we desire.
+ * @param   ppLed           Where to store the LED pointer.
+ */
+static DECLCALLBACK(int) vgaPortQueryStatusLed(PPDMILEDPORTS pInterface, unsigned iLUN, PPDMLED *ppLed)
+{
+    PVGASTATE pThis = ILEDPORTS_2_VGASTATE(pInterface);
+    switch (iLUN)
+    {
+        /* LUN #0: Display port. */
+        case 0:
+        {
+            *ppLed = &pThis->Led3D;
+            Assert((*ppLed)->u32Magic == PDMLED_MAGIC);
+            return VINF_SUCCESS;
+        }
+
+        default:
+            AssertMsgFailed(("Invalid LUN #%d\n", iLUN));
+            return VERR_PDM_NO_SUCH_LUN;
+    }
+
+    return VERR_PDM_LUN_NOT_FOUND;
+}
 
 /* -=-=-=-=-=- Ring 3: Dummy IDisplayConnector -=-=-=-=-=- */
@@ -5993,4 +6025,10 @@
 # endif
 #endif
+
+    pThis->ILeds.pfnQueryStatusLed = vgaPortQueryStatusLed;
+
+    RT_ZERO(pThis->Led3D);
+    pThis->Led3D.u32Magic = PDMLED_MAGIC;
+
     /*
      * We use our own critical section to avoid unncessary pointer indirections
@@ -6753,4 +6791,24 @@
     /* Init latched access mask. */
     pThis->uMaskLatchAccess = 0x3ff;
+
+    if (RT_SUCCESS(rc))
+    {
+        PPDMIBASE  pBase;
+        /*
+         * Attach status driver (optional).
+         */
+        rc = PDMDevHlpDriverAttach(pDevIns, PDM_STATUS_LUN, &pThis->IBase, &pBase, "Status Port");
+        AssertRC(rc);
+        if (RT_SUCCESS(rc))
+        {
+            pThis->pLedsConnector = PDMIBASE_QUERY_INTERFACE(pBase, PDMILEDCONNECTORS);
+            pThis->pMediaNotify = PDMIBASE_QUERY_INTERFACE(pBase, PDMIMEDIANOTIFY);
+        }
+        else if (rc != VERR_PDM_NO_ATTACHED_DRIVER)
+        {
+            AssertMsgFailed(("Failed to attach to status driver. rc=%Rrc\n", rc));
+            return PDMDEV_SET_ERROR(pDevIns, rc, N_("AHCI cannot attach to status driver"));
+        }
+    }
     return rc;
 }
Index: /trunk/src/VBox/Devices/Graphics/DevVGA.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA.h	(revision 51216)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA.h	(revision 51217)
@@ -294,8 +294,15 @@
     PDMIDISPLAYVBVACALLBACKS    IVBVACallbacks;
 # endif
+    /** Status LUN\#0: Leds interface. */
+    PDMILEDPORTS                ILeds;
     /** Pointer to base interface of the driver. */
     R3PTRTYPE(PPDMIBASE)        pDrvBase;
     /** Pointer to display connector interface of the driver. */
     R3PTRTYPE(PPDMIDISPLAYCONNECTOR) pDrv;
+
+    /** Status LUN: Partner of ILeds. */
+    R3PTRTYPE(PPDMILEDCONNECTORS)   pLedsConnector;
+    /** Status LUN: Media Notifys. */
+    R3PTRTYPE(PPDMIMEDIANOTIFY)     pMediaNotify;
 
     /** Refresh timer handle - HC. */
@@ -516,4 +523,6 @@
 # endif /* VBOX_WITH_HGSMI */
 
+    PDMLED Led3D;
+
     struct {
         volatile uint32_t cPending;
Index: /trunk/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp	(revision 51216)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp	(revision 51217)
@@ -1944,4 +1944,5 @@
         pCmd->pvVRamBase = pVGAState->vram_ptrR3;
         pCmd->cbVRam = pVGAState->vram_size;
+        pCmd->pLed = &pVGAState->Led3D;
         rc = vboxVDMACrCtlPost(pVGAState, &pCmd->Hdr, sizeof (*pCmd));
         if (RT_SUCCESS(rc))
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h	(revision 51216)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h	(revision 51217)
@@ -27,4 +27,5 @@
 extern uint8_t* g_pvVRamBase;
 extern uint32_t g_cbVRam;
+extern PPDMLED g_pLed;
 extern HCRHGSMICMDCOMPLETION g_hCrHgsmiCompletion;
 extern PFNCRHGSMICMDCOMPLETION g_pfnCrHgsmiCompletion;
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 51216)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 51217)
@@ -38,4 +38,6 @@
 uint8_t* g_pvVRamBase = NULL;
 uint32_t g_cbVRam = 0;
+PPDMLED g_pLed = NULL;
+
 HCRHGSMICMDCOMPLETION g_hCrHgsmiCompletion = NULL;
 PFNCRHGSMICMDCOMPLETION g_pfnCrHgsmiCompletion = NULL;
@@ -4211,4 +4213,7 @@
             g_pvVRamBase = (uint8_t*)pSetup->pvVRamBase;
             g_cbVRam = pSetup->cbVRam;
+
+            g_pLed = pSetup->pLed;
+
             pSetup->CrCmdServerInfo.hSvr = NULL;
             pSetup->CrCmdServerInfo.pfnEnable = crVBoxCrCmdEnable;
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp	(revision 51216)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp	(revision 51217)
@@ -2489,4 +2489,5 @@
                 mFlags.fForcePresentOnReenable = false;
                 cr_server.head_spu->dispatch_table.VBoxPresentComposition(mSpuWindow, mpCompositor, NULL);
+                g_pLed->Asserted.s.fWriting = 1;
             }
 
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 51216)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 51217)
@@ -1113,5 +1113,5 @@
   <enum
     name="DeviceType"
-    uuid="6d9420f7-0b56-4636-99f9-7346f1b01e57"
+    uuid="cb977be1-d1fb-41f8-ad7e-951736c6cb3e"
     >
     <desc>
@@ -1142,5 +1142,7 @@
       <desc>Shared folder device.</desc>
     </const>
-  </enum>
+    <const name="Graphics"          value="7">
+      <desc>Graphics device.</desc>
+    </const>  </enum>
 
   <enum
Index: /trunk/src/VBox/Main/include/ConsoleImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 51216)
+++ /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 51217)
@@ -893,4 +893,5 @@
     PPDMLED      mapSharedFolderLed;
     PPDMLED      mapUSBLed[2];
+    PPDMLED      mapCrOglLed;
 
     MediumAttachmentMap mapMediumAttachments;
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 51216)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 51217)
@@ -433,4 +433,5 @@
     RT_ZERO(mapUSBLed);
     RT_ZERO(mapSharedFolderLed);
+    RT_ZERO(mapCrOglLed);
 
     for (unsigned i = 0; i < RT_ELEMENTS(maStorageDevType); ++i)
@@ -2877,4 +2878,10 @@
         {
             SumLed.u32 |= readAndClearLed(mapSharedFolderLed);
+            break;
+        }
+
+        case DeviceType_Graphics:
+        {
+            SumLed.u32 |= readAndClearLed(mapCrOglLed);
             break;
         }
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 51216)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 51217)
@@ -3399,4 +3399,6 @@
 #endif
 
+        attachStatusDriver(pInst, &mapCrOglLed, 0, 0, NULL, NULL, 0);
+
 #ifdef VBOX_WITH_VMSVGA
         if (graphicsController == GraphicsControllerType_VMSVGA)
