int vbglGetDriver(VBGLDRIVER **ppDriver) { if (g_vbgldata.status != VbglStatusReady) { vbglQueryDriverInfo(); if (g_vbgldata.status != VbglStatusReady) return VERR_TRY_AGAIN; } *ppDriver = &g_vbgldata.driver; return VINF_SUCCESS; }
/** * Checks if VBGL has been initialized. * * The client library, this will lazily complete the initialization. * * @return VINF_SUCCESS or VERR_VBGL_NOT_INITIALIZED. */ int vbglR0Enter (void) { int rc; #ifndef VBGL_VBOXGUEST if (g_vbgldata.status == VbglStatusInitializing) { vbglQueryDriverInfo (); } #endif rc = g_vbgldata.status == VbglStatusReady? VINF_SUCCESS: VERR_VBGL_NOT_INITIALIZED; // dprintf(("VbglEnter: rc = %d\n", rc)); return rc; }
DECLVBGL(int) VbglInitClient(void) { int rc = VINF_SUCCESS; if ( g_vbgldata.status == VbglStatusInitializing || g_vbgldata.status == VbglStatusReady) { /* Initialization is already in process. */ return rc; } rc = vbglInitCommon (); if (RT_SUCCESS(rc)) { rc = RTSemMutexCreate(&g_vbgldata.mutexDriverInit); if (RT_SUCCESS(rc)) { /* Try to obtain VMMDev port via IOCTL to VBoxGuest main driver. */ vbglQueryDriverInfo (); # ifdef VBOX_WITH_HGCM rc = vbglR0HGCMInit (); # endif /* VBOX_WITH_HGCM */ if (RT_FAILURE(rc)) { RTSemMutexDestroy(g_vbgldata.mutexDriverInit); g_vbgldata.mutexDriverInit = NIL_RTSEMMUTEX; } } if (RT_FAILURE(rc)) { vbglTerminateCommon (); } } return rc; }