VirtualBox

Changeset 7443 in vbox for trunk/src/VBox/Additions/x11


Ignore:
Timestamp:
Mar 13, 2008 3:56:58 PM (17 years ago)
Author:
vboxsync
Message:

Additions/X11: make the X11 drivers work again when the kernel module fails to load

Location:
trunk/src/VBox/Additions/x11/xgraphics
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/x11/xgraphics/vboxutils.c

    r7440 r7443  
    315315
    316316Bool
    317 vbox_init(int scrnIndex)
     317vbox_init(int scrnIndex, VBOXPtr pVBox)
    318318{
    319319    Bool rc = TRUE;
     
    321321    if (RT_FAILURE(vrc))
    322322    {
    323         xf86DrvMsg(scrnIndex, X_ERROR, "VbglR3Init failed rc=%d.\n", rc);
     323        xf86DrvMsg(scrnIndex, X_ERROR,
     324                   "Failed to initialize the VirtualBox device (rc=%d) - make sure that the VirtualBox guest additions are properly installed.  If you are not sure, try reinstalling them.  The X Window graphics drivers will run in compatibility mode.\n",
     325                   vrc);
    324326        rc = FALSE;
    325327    }
     328    pVBox->useDevice = rc;
    326329    return rc;
    327330}
     
    337340    TRACE_ENTRY();
    338341
     342    if (!pVBox->useDevice)
     343        return FALSE;
    339344    pVBox->useVbva = FALSE;
    340345
     
    733738    Bool rc;
    734739
     740    if (!pVBox->useDevice)
     741        return FALSE;
    735742    pVBox->pCurs = pCurs = xf86CreateCursorInfoRec();
    736743    if (!pCurs)
     
    830837 */
    831838Bool
    832 vboxEnableGraphicsCap(void)
    833 {
     839vboxEnableGraphicsCap(VBOXPtr pVBox)
     840{
     841    if (!pVBox->useDevice)
     842        return FALSE;
    834843    return RT_SUCCESS(VbglR3SetGuestCaps(VMMDEV_GUEST_SUPPORTS_GRAPHICS, 0));
    835844}
     
    842851 */
    843852Bool
    844 vboxDisableGraphicsCap(void)
    845 {
     853vboxDisableGraphicsCap(VBOXPtr pVBox)
     854{
     855    if (!pVBox->useDevice)
     856        return FALSE;
    846857    return RT_SUCCESS(VbglR3SetGuestCaps(0, VMMDEV_GUEST_SUPPORTS_GRAPHICS));
    847858}
     
    860871Bool
    861872vboxGetDisplayChangeRequest(ScrnInfoPtr pScrn, uint32_t *pcx, uint32_t *pcy,
    862                             uint32_t *pcBits, uint32_t *piDisplay)
    863 {
     873                            uint32_t *pcBits, uint32_t *piDisplay,
     874                            VBOXPtr pVBox)
     875{
     876    if (!pVBox->useDevice)
     877        return FALSE;
    864878    int rc = VbglR3GetLastDisplayChangeRequest(pcx, pcy, pcBits, piDisplay);
    865879    if (RT_SUCCESS(rc))
     
    868882    return FALSE;
    869883}
    870 
  • trunk/src/VBox/Additions/x11/xgraphics/vboxvideo.h

    r7440 r7443  
    150150    size_t pointerSize;
    151151    Bool pointerOffscreen;
     152    Bool useDevice;
    152153    Bool useVbva;
    153154    VMMDevMemory *pVMMDevMemory;
     
    155156} VBOXRec, *VBOXPtr;
    156157
    157 extern Bool vbox_init(int scrnIndex);
     158extern Bool vbox_init(int scrnIndex, VBOXPtr pVBox);
    158159extern Bool vbox_cursor_init (ScreenPtr pScreen);
    159 extern Bool vbox_open (ScrnInfoPtr pScrn, ScreenPtr pScreen, VBOXPtr pVBOX);
    160 extern void vbox_close (ScrnInfoPtr pScrn, VBOXPtr pVBOX);
     160extern Bool vbox_open (ScrnInfoPtr pScrn, ScreenPtr pScreen, VBOXPtr pVBox);
     161extern void vbox_close (ScrnInfoPtr pScrn, VBOXPtr pVBox);
    161162
    162163extern Bool vboxEnableVbva(ScrnInfoPtr pScrn);
    163164extern Bool vboxDisableVbva(ScrnInfoPtr pScrn);
    164165
    165 extern Bool vboxEnableGraphicsCap(void);
    166 extern Bool vboxDisableGraphicsCap(void);
     166extern Bool vboxEnableGraphicsCap(VBOXPtr pVBox);
     167extern Bool vboxDisableGraphicsCap(VBOXPtr pVBox);
    167168
    168169extern Bool vboxGetDisplayChangeRequest(ScrnInfoPtr pScrn, uint32_t *pcx,
    169170                                        uint32_t *pcy, uint32_t *pcBits,
    170                                         uint32_t *piDisplay);
     171                                        uint32_t *piDisplay, VBOXPtr pVBox);
    171172
    172173#endif /* _VBOXVIDEO_H_ */
  • trunk/src/VBox/Additions/x11/xgraphics/vboxvideo_13.c

    r7440 r7443  
    402402    DisplayModePtr pModes = NULL;
    403403    ScrnInfoPtr pScrn = output->scrn;
     404    VBOXPtr pVBox = VBOXGetRec(pScrn);
    404405
    405406    TRACE;
    406     rc = vboxGetDisplayChangeRequest(pScrn, &x, &y, &bpp, &display);
     407    rc = vboxGetDisplayChangeRequest(pScrn, &x, &y, &bpp, &display, pVBox);
    407408    /* @todo - check the display number once we support multiple displays. */
    408409    if (rc && (0 != x) && (0 != y)) {
     
    652653               VBOX_VERSION_STRING "\n");
    653654
    654     /* Initialise the guest library */
    655     if (!vbox_init(pScrn->scrnIndex))
    656         return FALSE;
    657 
    658655    /* Get our private data from the ScrnInfoRec structure. */
    659656    pVBox = VBOXGetRec(pScrn);
     657
     658    /* Initialise the guest library */
     659    vbox_init(pScrn->scrnIndex, pVBox);
    660660
    661661    /* Entity information seems to mean bus information. */
     
    709709
    710710        /* We only support 16 and 24 bits depth (i.e. 16 and 32bpp) */
    711         if (   vboxGetDisplayChangeRequest(pScrn, &cx, &cy, &cBits, &iDisplay)
     711        if (   vboxGetDisplayChangeRequest(pScrn, &cx, &cy, &cBits, &iDisplay,
     712                                           pVBox)
    712713            && (cBits != 16))
    713714            cBits = 24;
     
    925926            xf86DrvMsg(scrnIndex, X_INFO,
    926927                      "The VBox video extensions are now enabled.\n");
    927         vboxEnableGraphicsCap();
    928     } else
    929         xf86DrvMsg(scrnIndex, X_ERROR, "Failed to open the VBox system device - make sure that the VirtualBox guest additions are properly installed.  If you are not sure, try reinstalling them.\n");
     928        vboxEnableGraphicsCap(pVBox);
     929    }
    930930    return (TRUE);
    931931}
     
    948948    if (pVBox->useVbva == TRUE)
    949949        vboxDisableVbva(pScrn);
    950     vboxDisableGraphicsCap();
     950    vboxDisableGraphicsCap(pVBox);
    951951}
    952952
     
    959959    if (pVBox->useVbva == TRUE)
    960960        vboxDisableVbva(pScrn);
    961     vboxDisableGraphicsCap();
     961    vboxDisableGraphicsCap(pVBox);
    962962    if (pScrn->vtSema) {
    963963        VBOXSaveRestore(xf86Screens[scrnIndex], MODE_RESTORE);
     
    10781078        if (vboxEnableVbva(pScrn) != TRUE)  /* Bad but not fatal */
    10791079            pVBox->useVbva = FALSE;
    1080     vboxEnableGraphicsCap();
     1080    vboxEnableGraphicsCap(pVBox);
    10811081    return (TRUE);
    10821082}
  • trunk/src/VBox/Additions/x11/xgraphics/vboxvideo_70.c

    r7168 r7443  
    391391               VBOX_VERSION_STRING "\n");
    392392
    393     /* Initialise the guest library */
    394     if (!vbox_init(pScrn->scrnIndex))
    395         return FALSE;
    396 
    397393     /* Get our private data from the ScrnInfoRec structure. */
    398394    pVBox = VBOXGetRec(pScrn);
     395
     396    /* Initialise the guest library */
     397    vbox_init(pScrn->scrnIndex, pVBox);
    399398
    400399    /* Entity information seems to mean bus information. */
     
    467466        uint32_t cx, cy, iDisplay, cBits = 24;
    468467
    469         if (vboxGetDisplayChangeRequest(pScrn, &cx, &cy, &cBits, &iDisplay))
     468        if (vboxGetDisplayChangeRequest(pScrn, &cx, &cy, &cBits, &iDisplay,
     469                                        pVBox))
    470470        {
    471471            /* We only support 16 and 24 bits depth (i.e. 16 and 32bpp) */
     
    739739            xf86DrvMsg(scrnIndex, X_INFO,
    740740                      "The VBox video extensions are now enabled.\n");
    741     } else
    742         xf86DrvMsg(scrnIndex, X_ERROR, "Failed to open the VBox system device - make sure that the VirtualBox guest additions are properly installed.  If you are not sure, try reinstalling them.\n");
     741    }
    743742    return (TRUE);
    744743}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette