VirtualBox

儲存庫 vbox 的更動 43250


忽略:
時間撮記:
2012-9-7 下午07:39:32 (12 年 以前)
作者:
vboxsync
訊息:

Additions/x11/vboxvideo: changes needed for the 1.13 server ABI.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c

    r43249 r43250  
    115115#endif
    116116static Bool VBOXPreInit(ScrnInfoPtr pScrn, int flags);
    117 static Bool VBOXScreenInit(int Index, ScreenPtr pScreen, int argc,
    118                            char **argv);
    119 static Bool VBOXEnterVT(int scrnIndex, int flags);
    120 static void VBOXLeaveVT(int scrnIndex, int flags);
    121 static Bool VBOXCloseScreen(int scrnIndex, ScreenPtr pScreen);
     117static Bool VBOXScreenInit(ScreenPtr pScreen, int argc, char **argv);
     118static Bool VBOXEnterVT(ScrnInfoPtr pScrn);
     119static void VBOXLeaveVT(ScrnInfoPtr pScrn);
     120static Bool VBOXCloseScreen(ScreenPtr pScreen);
    122121static Bool VBOXSaveScreen(ScreenPtr pScreen, int mode);
    123 static Bool VBOXSwitchMode(int scrnIndex, DisplayModePtr pMode, int flags);
    124 static void VBOXAdjustFrame(int scrnIndex, int x, int y, int flags);
    125 static void VBOXFreeScreen(int scrnIndex, int flags);
     122static Bool VBOXSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr pMode);
     123static void VBOXAdjustFrame(ScrnInfoPtr pScrn, int x, int y);
     124static void VBOXFreeScreen(ScrnInfoPtr pScrn);
    126125static void VBOXDisplayPowerManagementSet(ScrnInfoPtr pScrn, int mode,
    127126                                          int flags);
     
    638637}
    639638
     639#ifndef XF86_SCRN_INTERFACE
     640# define xf86ScreenToScrn(pScreen) xf86Screens[(pScreen)->myNum]
     641# define xf86ScrnToScreen(pScrn) screenInfo.screens[(pScrn)->scrnIndex]
     642# define SCRNINDEXAPI(pfn) pfn ## Index
     643static Bool VBOXScreenInitIndex(int scrnIndex, ScreenPtr pScreen, int argc,
     644                                char **argv)
     645{ return VBOXScreenInit(pScreen, argc, argv); }
     646
     647static Bool VBOXEnterVTIndex(int scrnIndex, int flags)
     648{ (void) flags; return VBOXEnterVT(xf86Screens[scrnIndex]); }
     649
     650static void VBOXLeaveVTIndex(int scrnIndex, int flags)
     651{ (void) flags; VBOXLeaveVT(xf86Screens[scrnIndex]); }
     652
     653static Bool VBOXCloseScreenIndex(int scrnIndex, ScreenPtr pScreen)
     654{ (void) scrnIndex; return VBOXCloseScreen(pScreen); }
     655
     656static Bool VBOXSwitchModeIndex(int scrnIndex, DisplayModePtr pMode, int flags)
     657{ (void) flags; return VBOXSwitchMode(xf86Screens[scrnIndex], pMode); }
     658
     659static void VBOXAdjustFrameIndex(int scrnIndex, int x, int y, int flags)
     660{ (void) flags; VBOXAdjustFrame(xf86Screens[scrnIndex], x, y); }
     661
     662static void VBOXFreeScreenIndex(int scrnIndex, int flags)
     663{ (void) flags; VBOXFreeScreen(xf86Screens[scrnIndex]); }
     664# else
     665# define SCRNINDEXAPI(pfn) pfn
     666#endif /* XF86_SCRN_INTERFACE */
     667
     668static void setScreenFunctions(ScrnInfoPtr pScrn, xf86ProbeProc pfnProbe)
     669{
     670    pScrn->driverVersion = VBOX_VERSION;
     671    pScrn->driverName    = VBOX_DRIVER_NAME;
     672    pScrn->name          = VBOX_NAME;
     673    pScrn->Probe         = pfnProbe;
     674    pScrn->PreInit       = VBOXPreInit;
     675    pScrn->ScreenInit    = SCRNINDEXAPI(VBOXScreenInit);
     676    pScrn->SwitchMode    = SCRNINDEXAPI(VBOXSwitchMode);
     677    pScrn->AdjustFrame   = SCRNINDEXAPI(VBOXAdjustFrame);
     678    pScrn->EnterVT       = SCRNINDEXAPI(VBOXEnterVT);
     679    pScrn->LeaveVT       = SCRNINDEXAPI(VBOXLeaveVT);
     680    pScrn->FreeScreen    = SCRNINDEXAPI(VBOXFreeScreen);
     681}
     682
    640683/*
    641  * This function is called once, at the start of the first server generation to
    642  * do a minimal probe for supported hardware.
     684 * One of these functions is called once, at the start of the first server
     685 * generation to do a minimal probe for supported hardware.
    643686 */
    644687
     
    660703        if (!pVBox)
    661704            return FALSE;
    662         pScrn->driverVersion = VBOX_VERSION;
    663         pScrn->driverName    = VBOX_DRIVER_NAME;
    664         pScrn->name          = VBOX_NAME;
    665         pScrn->Probe         = NULL;
    666         pScrn->PreInit       = VBOXPreInit;
    667         pScrn->ScreenInit    = VBOXScreenInit;
    668         pScrn->SwitchMode    = VBOXSwitchMode;
    669         pScrn->AdjustFrame   = VBOXAdjustFrame;
    670         pScrn->EnterVT       = VBOXEnterVT;
    671         pScrn->LeaveVT       = VBOXLeaveVT;
    672         pScrn->FreeScreen    = VBOXFreeScreen;
    673 
     705        setScreenFunctions(pScrn, NULL);
    674706        pVBox->pciInfo = dev;
    675707    }
     
    693725     */
    694726    if ((numDevSections = xf86MatchDevice(VBOX_NAME,
    695                                           &devSections)) <= 0)
    696         return (FALSE);
     727                      &devSections)) <= 0)
     728    return (FALSE);
    697729
    698730    /* PCI BUS */
    699     if (xf86GetPciVideoInfo()) {
     731    if (xf86GetPciVideoInfo())
     732    {
    700733        int numUsed;
    701734        int *usedChips;
    702735        int i;
    703         numUsed = xf86MatchPciInstances(VBOX_NAME, VBOX_VENDORID,
    704                                         VBOXChipsets, VBOXPCIchipsets,
    705                                         devSections, numDevSections,
    706                                         drv, &usedChips);
    707         if (numUsed > 0) {
    708             if (flags & PROBE_DETECT)
    709                 foundScreen = TRUE;
    710             else {
    711                 for (i = 0; i < numUsed; i++) {
    712                     ScrnInfoPtr pScrn = NULL;
    713                     /* Allocate a ScrnInfoRec  */
    714                     if ((pScrn = xf86ConfigPciEntity(pScrn,0,usedChips[i],
    715                                                      VBOXPCIchipsets,NULL,
    716                                                      NULL,NULL,NULL,NULL))) {
    717                         pScrn->driverVersion = VBOX_VERSION;
    718                         pScrn->driverName    = VBOX_DRIVER_NAME;
    719                         pScrn->name          = VBOX_NAME;
    720                         pScrn->Probe         = VBOXProbe;
    721             pScrn->PreInit       = VBOXPreInit;
    722                         pScrn->ScreenInit    = VBOXScreenInit;
    723                         pScrn->SwitchMode    = VBOXSwitchMode;
    724                         pScrn->AdjustFrame   = VBOXAdjustFrame;
    725                         pScrn->EnterVT       = VBOXEnterVT;
    726                         pScrn->LeaveVT       = VBOXLeaveVT;
    727                         pScrn->FreeScreen    = VBOXFreeScreen;
    728                         foundScreen = TRUE;
    729                     }
    730                 }
    731             }
    732             free(usedChips);
    733         }
    734     }
    735 
     736        numUsed = xf86MatchPciInstances(VBOX_NAME, VBOX_VENDORID,
     737                        VBOXChipsets, VBOXPCIchipsets,
     738                        devSections, numDevSections,
     739                        drv, &usedChips);
     740        if (numUsed > 0)
     741        {
     742            if (flags & PROBE_DETECT)
     743                foundScreen = TRUE;
     744            else
     745                for (i = 0; i < numUsed; i++)
     746                {
     747                    ScrnInfoPtr pScrn = NULL;
     748                    /* Allocate a ScrnInfoRec  */
     749                    if ((pScrn = xf86ConfigPciEntity(pScrn,0,usedChips[i],
     750                                     VBOXPCIchipsets,NULL,
     751                                     NULL,NULL,NULL,NULL)))
     752                    {
     753                        setScreenFunctions(pScrn, VBOXProbe);
     754                        foundScreen = TRUE;
     755                    }
     756                }
     757            free(usedChips);
     758        }
     759    }
    736760    free(devSections);
    737 
    738761    return (foundScreen);
    739762}
     
    963986 * End QUOTE.
    964987 */
    965 static Bool
    966 VBOXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
    967 {
    968     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
     988static Bool VBOXScreenInit(ScreenPtr pScreen, int argc, char **argv)
     989{
     990    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    969991    VBOXPtr pVBox = VBOXGetRec(pScrn);
    970992    VisualPtr visual;
     
    11101132
    11111133    pVBox->CloseScreen = pScreen->CloseScreen;
    1112     pScreen->CloseScreen = VBOXCloseScreen;
     1134    pScreen->CloseScreen = SCRNINDEXAPI(VBOXCloseScreen);
    11131135#ifdef VBOXVIDEO_13
    11141136    pScreen->SaveScreen = xf86SaveScreen;
     
    11301152
    11311153    if (vbox_cursor_init(pScreen) != TRUE)
    1132         xf86DrvMsg(scrnIndex, X_ERROR,
     1154        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
    11331155                   "Unable to start the VirtualBox mouse pointer integration with the host system.\n");
    11341156
     
    11401162}
    11411163
    1142 static Bool
    1143 VBOXEnterVT(int scrnIndex, int flags)
    1144 {
    1145     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
     1164static Bool VBOXEnterVT(ScrnInfoPtr pScrn)
     1165{
    11461166    VBOXPtr pVBox = VBOXGetRec(pScrn);
    11471167
     
    11521172#ifdef VBOX_DRI
    11531173    if (pVBox->useDRI)
    1154         DRIUnlock(screenInfo.screens[scrnIndex]);
     1174        DRIUnlock(xf86ScrnToScreen(pScrn));
    11551175#endif
    11561176    /* Re-assert this in case we had a change request while switched out. */
     
    11681188}
    11691189
    1170 static void
    1171 VBOXLeaveVT(int scrnIndex, int flags)
    1172 {
    1173     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
     1190static void VBOXLeaveVT(ScrnInfoPtr pScrn)
     1191{
    11741192    VBOXPtr pVBox = VBOXGetRec(pScrn);
    11751193
     
    11821200#ifdef VBOX_DRI
    11831201    if (pVBox->useDRI)
    1184         DRILock(screenInfo.screens[scrnIndex], 0);
     1202        DRILock(xf86ScrnToScreen(pScrn), 0);
    11851203#endif
    11861204    TRACE_EXIT();
    11871205}
    11881206
    1189 static Bool
    1190 VBOXCloseScreen(int scrnIndex, ScreenPtr pScreen)
    1191 {
    1192     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
     1207static Bool VBOXCloseScreen(ScreenPtr pScreen)
     1208{
     1209    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    11931210    VBOXPtr pVBox = VBOXGetRec(pScrn);
    11941211
     
    12081225
    12091226    if (pScrn->vtSema) {
    1210         VBOXRestoreMode(xf86Screens[scrnIndex]);
     1227        VBOXRestoreMode(pScrn);
    12111228        VBOXUnmapVidMem(pScrn);
    12121229    }
     
    12171234
    12181235    pScreen->CloseScreen = pVBox->CloseScreen;
    1219     return pScreen->CloseScreen(scrnIndex, pScreen);
    1220 }
    1221 
    1222 static Bool
    1223 VBOXSwitchMode(int scrnIndex, DisplayModePtr pMode, int flags)
    1224 {
    1225     ScrnInfoPtr pScrn;
     1236#ifndef XF86_SCRN_INTERFACE
     1237    return pScreen->CloseScreen(pScreen->myNum, pScreen);
     1238#else
     1239    return pScreen->CloseScreen(pScreen);
     1240#endif
     1241}
     1242
     1243static Bool VBOXSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
     1244{
    12261245    VBOXPtr pVBox;
    12271246    Bool rc;
    12281247
    12291248    TRACE_LOG("HDisplay=%d, VDisplay=%d\n", pMode->HDisplay, pMode->VDisplay);
    1230     pScrn = xf86Screens[scrnIndex];  /* Why does X have three ways of referring to the screen? */
    12311249#ifndef VBOXVIDEO_13
    12321250    pVBox = VBOXGetRec(pScrn);
     
    12641282}
    12651283
    1266 static void
    1267 VBOXAdjustFrame(int scrnIndex, int x, int y, int flags)
    1268 {
    1269     VBOXPtr pVBox = VBOXGetRec(xf86Screens[scrnIndex]);
    1270     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
     1284static void VBOXAdjustFrame(ScrnInfoPtr pScrn, int x, int y)
     1285{
     1286    VBOXPtr pVBox = VBOXGetRec(pScrn);
    12711287
    12721288    TRACE_ENTRY();
     
    12861302}
    12871303
    1288 static void
    1289 VBOXFreeScreen(int scrnIndex, int flags)
    1290 {
    1291     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
    1292 
     1304static void VBOXFreeScreen(ScrnInfoPtr pScrn)
     1305{
    12931306    /* Destroy the VGA hardware record */
    12941307    vgaHWFreeHWRec(pScrn);
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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