VirtualBox

Changeset 35949 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 11, 2011 11:27:06 PM (14 years ago)
Author:
vboxsync
Message:

Additions/x11/vboxvideo: use the new common modesetting APIs instead of the VBE BIOS

Location:
trunk/src/VBox/Additions/x11/vboxvideo
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/x11/vboxvideo/undefined

    r35883 r35949  
    1616RRChangeOutputProperty
    1717ShadowFBInit2
    18 VBEExtendedInit
    19 VBEGetVBEMode
    20 VBESaveRestore
    21 VBESetVBEMode
    2218XNFcalloc
    2319XNFstrdup
     
    127123vgaHWFreeHWRec
    128124vgaHWGetHWRec
    129 vgaHWRestoreFonts
    130 vgaHWSaveFonts
     125vgaHWGetIndex
     126vgaHWGetIOBase
     127vgaHWRestore
     128vgaHWSave
    131129write
    132130xf86AddDriver
  • trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c

    r35948 r35949  
    104104static void VBOXAdjustFrame(int scrnIndex, int x, int y, int flags);
    105105static void VBOXFreeScreen(int scrnIndex, int flags);
    106 static void VBOXFreeRec(ScrnInfoPtr pScrn);
    107106static void VBOXDisplayPowerManagementSet(ScrnInfoPtr pScrn, int mode,
    108107                                          int flags);
     
    111110static Bool VBOXMapVidMem(ScrnInfoPtr pScrn);
    112111static void VBOXUnmapVidMem(ScrnInfoPtr pScrn);
    113 static Bool VBOXSaveRestore(ScrnInfoPtr pScrn,
    114                             vbeSaveRestoreFunction function);
     112static void VBOXSaveMode(ScrnInfoPtr pScrn);
     113static void VBOXRestoreMode(ScrnInfoPtr pScrn);
    115114static Bool VBOXAdjustScreenPixmap(ScrnInfoPtr pScrn, int width, int height);
    116115
     
    200199};
    201200
    202 static const char *vbeSymbols[] = {
    203     "VBEExtendedInit",
    204     "VBEGetVBEMode",
    205     "VBESaveRestore",
    206     "VBESetVBEMode",
    207     NULL
    208 };
    209 
    210201static const char *ramdacSymbols[] = {
    211202    "xf86InitCursor",
     
    215206
    216207static const char *vgahwSymbols[] = {
     208    "vgaHWFreeHWRec",
    217209    "vgaHWGetHWRec",
    218     "vgaHWFreeHWRec",
    219     "vgaHWSaveFonts",
    220     "vgaHWRestoreFonts",
     210    "vgaHWGetIOBase",
     211    "vgaHWGetIndex",
     212    "vgaHWRestore",
     213    "vgaHWSave",
    221214    NULL
    222215};
     
    232225
    233226    return ((VBOXPtr)pScrn->driverPrivate);
    234 }
    235 
    236 static void
    237 VBOXFreeRec(ScrnInfoPtr pScrn)
    238 {
    239     VBOXPtr pVBox = VBOXGetRec(pScrn);
    240     free(pVBox->savedPal);
    241     free(pVBox->fonts);
    242     free(pScrn->driverPrivate);
    243     pScrn->driverPrivate = NULL;
    244227}
    245228
     
    569552        LoaderRefSymLists(fbSymbols,
    570553                          shadowfbSymbols,
    571                           vbeSymbols,
    572554                          ramdacSymbols,
    573555                          vgahwSymbols,
     
    795777        return FALSE;
    796778
    797     /* We need the vbe module because we use VBE code to save and restore
    798        text mode, in order to keep our code simple. */
    799     if (!xf86LoadSubModule(pScrn, "vbe"))
    800         return (FALSE);
    801 
    802779    /* The framebuffer module. */
    803780    if (!xf86LoadSubModule(pScrn, "fb"))
     
    911888    xf86PrintModes(pScrn);
    912889
     890    /* VGA hardware initialisation */
     891    if (!vgaHWGetHWRec(pScrn))
     892        return FALSE;
     893    /* Must be called before any VGA registers are saved or restored */
     894    vgaHWGetIOBase(VGAHWPTR(pScrn));
     895
    913896    /* Colour weight - we always call this, since we are always in
    914897       truecolour. */
     
    974957    TRACE_ENTRY();
    975958
    976     /* VGA hardware initialisation */
    977     if (!vgaHWGetHWRec(pScrn))
    978         return FALSE;
    979 
    980     /* We make use of the X11 VBE code to save and restore text mode, in
    981        order to keep our code simple. */
    982     if ((pVBox->pVbe = VBEExtendedInit(NULL, pVBox->pEnt->index,
    983                                        SET_BIOS_SCRATCH
    984                                        | RESTORE_BIOS_SCRATCH)) == NULL)
    985         return (FALSE);
    986 
    987959    if (!VBOXMapVidMem(pScrn))
    988960        return (FALSE);
    989961
    990962    /* save current video state */
    991     VBOXSaveRestore(pScrn, MODE_SAVE);
     963    VBOXSaveMode(pScrn);
    992964
    993965    /* mi layer - reset the visual list (?)*/
     
    12191191        vboxDisableVbva(pScrn);
    12201192    vboxClearVRAM(pScrn, 0, 0);
    1221     VBOXSaveRestore(pScrn, MODE_RESTORE);
     1193    VBOXRestoreMode(pScrn);
    12221194    vboxDisableGraphicsCap(pVBox);
    12231195#ifdef VBOX_DRI
     
    12451217
    12461218    if (pScrn->vtSema) {
    1247         VBOXSaveRestore(xf86Screens[scrnIndex], MODE_RESTORE);
     1219        VBOXRestoreMode(xf86Screens[scrnIndex]);
    12481220        VBOXUnmapVidMem(pScrn);
    12491221    }
    12501222    pScrn->vtSema = FALSE;
    12511223
    1252     /* Destroy the VGA hardware record */
    1253     vgaHWFreeHWRec(pScrn);
    1254 
    1255     /* And do additional bits which are separate for historical reasons */
     1224    /* Do additional bits which are separate for historical reasons */
    12561225    vbox_close(pScrn, pVBox);
    12571226
     
    14201389VBOXFreeScreen(int scrnIndex, int flags)
    14211390{
    1422     VBOXFreeRec(xf86Screens[scrnIndex]);
     1391    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
     1392
     1393    /* Destroy the VGA hardware record */
     1394    vgaHWFreeHWRec(pScrn);
     1395    /* And our private record */
     1396    free(pScrn->driverPrivate);
     1397    pScrn->driverPrivate = NULL;
    14231398}
    14241399
     
    14791454}
    14801455
    1481 Bool
    1482 VBOXSaveRestore(ScrnInfoPtr pScrn, vbeSaveRestoreFunction function)
    1483 {
    1484     VBOXPtr pVBox;
    1485     Bool rc = TRUE;
     1456void
     1457VBOXSaveMode(ScrnInfoPtr pScrn)
     1458{
     1459    VBOXPtr pVBox = VBOXGetRec(pScrn);
     1460    vgaRegPtr vgaReg;
    14861461
    14871462    TRACE_ENTRY();
    1488     if (MODE_QUERY < 0 || function > MODE_RESTORE)
    1489         rc = FALSE;
    1490 
    1491     if (rc)
    1492     {
    1493         pVBox = VBOXGetRec(pScrn);
    1494 
    1495         /* Query amount of memory to save state */
    1496         if (function == MODE_QUERY ||
    1497             (function == MODE_SAVE && pVBox->state == NULL))
    1498         {
    1499 
    1500             /* Make sure we save at least this information in case of failure */
    1501             (void)VBEGetVBEMode(pVBox->pVbe, &pVBox->stateMode);
    1502             vgaHWSaveFonts(pScrn, &pVBox->vgaRegs);
    1503 
    1504             if (!VBESaveRestore(pVBox->pVbe,function,(pointer)&pVBox->state,
    1505                                 &pVBox->stateSize,&pVBox->statePage)
    1506                )
    1507                 rc = FALSE;
    1508         }
    1509     }
    1510     if (rc)
    1511     {
    1512         /* Save/Restore Super VGA state */
    1513         if (function != MODE_QUERY) {
    1514 
    1515             if (function == MODE_RESTORE)
    1516                 memcpy(pVBox->state, pVBox->pstate,
    1517                        (unsigned) pVBox->stateSize);
    1518 
    1519             if (   (rc = VBESaveRestore(pVBox->pVbe,function,
    1520                                         (pointer)&pVBox->state,
    1521                                         &pVBox->stateSize,&pVBox->statePage)
    1522                    )
    1523                 && (function == MODE_SAVE)
    1524                )
    1525             {
    1526                 /* don't rely on the memory not being touched */
    1527                 if (pVBox->pstate == NULL)
    1528                     pVBox->pstate = malloc(pVBox->stateSize);
    1529                 memcpy(pVBox->pstate, pVBox->state,
    1530                        (unsigned) pVBox->stateSize);
    1531             }
    1532 
    1533             if (function == MODE_RESTORE)
    1534             {
    1535                 VBESetVBEMode(pVBox->pVbe, pVBox->stateMode, NULL);
    1536                 vgaHWRestoreFonts(pScrn, &pVBox->vgaRegs);
    1537             }
    1538         }
    1539     }
    1540     TRACE_LOG("returning %s\n", rc ? "TRUE" : "FALSE");
    1541     return rc;
     1463    vgaReg = &VGAHWPTR(pScrn)->SavedReg;
     1464    vgaHWSave(pScrn, vgaReg, VGA_SR_ALL);
     1465    pVBox->fSavedVBEMode = VBoxVideoGetModeRegisters(&pVBox->cSavedWidth,
     1466                                                     &pVBox->cSavedHeight,
     1467                                                     &pVBox->cSavedPitch,
     1468                                                     &pVBox->cSavedBPP,
     1469                                                     &pVBox->fSavedFlags);
     1470}
     1471
     1472void
     1473VBOXRestoreMode(ScrnInfoPtr pScrn)
     1474{
     1475    VBOXPtr pVBox = VBOXGetRec(pScrn);
     1476    vgaRegPtr vgaReg;
     1477
     1478    TRACE_ENTRY();
     1479    vgaReg = &VGAHWPTR(pScrn)->SavedReg;
     1480    vgaHWRestore(pScrn, vgaReg, VGA_SR_ALL);
     1481    if (pVBox->fSavedVBEMode)
     1482        VBoxVideoSetModeRegisters(pVBox->cSavedWidth, pVBox->cSavedHeight,
     1483                                  pVBox->cSavedPitch, pVBox->cSavedBPP,
     1484                                  pVBox->fSavedFlags, 0, 0);
     1485    else
     1486        VBoxVideoDisableVBE();
    15421487}
    15431488
  • trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h

    r35777 r35949  
    117117#endif
    118118
    119 #include "vgaHW.h"
    120 
    121 /* VBE/DDC support */
    122 #include "vbe.h"
    123 
    124119/* ShadowFB support */
    125120#include "shadowfb.h"
     
    169164typedef struct VBOXRec
    170165{
    171     vbeInfoPtr pVbe;  /** @todo do the VBE bits ourselves? */
    172166    EntityInfoPtr pEnt;
    173167#ifdef PCIACCESS
     
    185179    /** The current line size in bytes */
    186180    uint32_t cbLine;
    187     CARD8 *state, *pstate;      /* SVGA state */
    188     int statePage, stateSize, stateMode;
    189     CARD32 *savedPal;
    190     CARD8 *fonts;
    191     vgaRegRec vgaRegs;  /* Space for saving VGA information */
     181    /** Whether the pre-X-server mode was a VBE mode */
     182    bool fSavedVBEMode;
     183    /** Paramters of the saved pre-X-server VBE mode, invalid if there is none
     184     */
     185    uint16_t cSavedWidth, cSavedHeight, cSavedPitch, cSavedBPP, fSavedFlags;
    192186    CloseScreenProcPtr CloseScreen;
    193187    /** Default X server procedure for enabling and disabling framebuffer access */
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