示例#1
0
文件: Init.cpp 项目: evanphx/yoke
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;
}
示例#2
0
/**
 * 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;
}
示例#3
0
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;
}