VirtualBox

Changeset 55493 in vbox for trunk/src/VBox/Devices/Graphics


Ignore:
Timestamp:
Apr 28, 2015 4:51:35 PM (10 years ago)
Author:
vboxsync
Message:

PGM,++: Separated physical access handler callback function pointers from the access handler registrations to reduce footprint and simplify adding a couple of more callbacks.

Location:
trunk/src/VBox/Devices/Graphics
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp

    r54659 r55493  
    19361936    for (uint32_t i = 0; i < pGMR->numDescriptors; i++)
    19371937    {
    1938         rc = PGMR3HandlerPhysicalRegister(PDMDevHlpGetVM(pThis->pDevInsR3),
    1939                                             PGMPHYSHANDLERTYPE_PHYSICAL_WRITE,
    1940                                             pGMR->paDesc[i].GCPhys, pGMR->paDesc[i].GCPhys + pGMR->paDesc[i].numPages * PAGE_SIZE - 1,
    1941                                             vmsvgaR3GMRAccessHandler, pThis,
    1942                                             NULL, NULL, NULL,
    1943                                             NULL, NULL, NULL,
    1944                                             "VMSVGA GMR");
     1938        rc = PGMHandlerPhysicalRegister(PDMDevHlpGetVM(pThis->pDevInsR3),
     1939                                        pGMR->paDesc[i].GCPhys, pGMR->paDesc[i].GCPhys + pGMR->paDesc[i].numPages * PAGE_SIZE - 1,
     1940                                        pThis->svga.hGmrAccessHandlerType, pThis, NIL_RTR0PTR, NIL_RTRCPTR, "VMSVGA GMR");
    19451941        AssertRC(rc);
    19461942    }
     
    19491945
    19501946/* Callback handler for VMR3ReqCallWait */
    1951 static DECLCALLBACK(int) vmsvgaUnregisterGMR(PPDMDEVINS pDevIns, uint32_t gmrId)
     1947static DECLCALLBACK(int) vmsvgaDeregisterGMR(PPDMDEVINS pDevIns, uint32_t gmrId)
    19521948{
    19531949    PVGASTATE    pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
     
    32453241        PGMR pGMR = &pSVGAState->aGMR[idGMR];
    32463242# ifdef DEBUG_GMR_ACCESS
    3247         VMR3ReqCallWait(PDMDevHlpGetVM(pThis->pDevInsR3), VMCPUID_ANY, (PFNRT)vmsvgaUnregisterGMR, 2, pThis->pDevInsR3, idGMR);
     3243        VMR3ReqCallWait(PDMDevHlpGetVM(pThis->pDevInsR3), VMCPUID_ANY, (PFNRT)vmsvgaDeregisterGMR, 2, pThis->pDevInsR3, idGMR);
    32483244# endif
    32493245
     
    35233519            if (RT_SUCCESS(rc))
    35243520            {
    3525                 rc = PGMR3HandlerPhysicalRegister(PDMDevHlpGetVM(pDevIns),
    3526                                                   PGMPHYSHANDLERTYPE_PHYSICAL_ALL,
    3527                                                   GCPhysAddress, GCPhysAddress + (VMSVGA_FIFO_SIZE - 1),
    3528                                                   vmsvgaR3FIFOAccessHandler, pThis,
    3529                                                   NULL, NULL, NULL,
    3530                                                   NULL, NULL, NULL,
    3531                                                   "VMSVGA FIFO");
     3521                rc = PGMHandlerPhysicalRegister(PDMDevHlpGetVM(pDevIns), GCPhysAddress, GCPhysAddress + (VMSVGA_FIFO_SIZE - 1),
     3522                                                pThis->svga.hFifoAccessHandlerType, pThis, NIL_RTR0PTR, NIL_RTRCPTR,
     3523                                                "VMSVGA FIFO");
    35323524                AssertRC(rc);
    35333525            }
     
    39303922    }
    39313923    Log(("VMSVGA: Maximum size (%d,%d)\n", pThis->svga.u32MaxWidth, pThis->svga.u32MaxHeight));
     3924
     3925# ifdef DEBUG_GMR_ACCESS
     3926    /* Register the GMR access handler type. */
     3927    rc = PGMR3HandlerPhysicalTypeRegister(PDMDevHlpGetVM(pThis->pDevInsR3), PGMPHYSHANDLERKIND_WRITE,
     3928                                          vmsvgaR3GMRAccessHandler, NULL, NULL, NULL, NULL, "VMSVGA GMR",
     3929                                          &pThis->svga.hGmrAccessHandlerType);
     3930    AssertRCReturn(rc, rc);
     3931# endif
     3932# ifdef DEBUG_FIFO_ACCESS
     3933    rc = PGMR3HandlerPhysicalTypeRegister(PDMDevHlpGetVM(pThis->pDevInsR3), PGMPHYSHANDLERKIND_ALL,
     3934                                          vmsvgaR3FIFOAccessHandler, NULL, NULL, NULL, NULL, "VMSVGA FIFO",
     3935                                          &pThis->svga.hFifoAccessHandlerType);
     3936    AssertRCReturn(rc, rc);
     3937#endif
    39323938
    39333939    /* Create the async IO thread. */
  • trunk/src/VBox/Devices/Graphics/DevVGA.cpp

    r55341 r55493  
    52865286{
    52875287    PPDMDEVINS pDevIns = pVGAState->pDevInsR3;
    5288 
    52895288    Assert(pVGAState->GCPhysVRAM);
    52905289
    5291     int rc = PGMR3HandlerPhysicalRegister(PDMDevHlpGetVM(pDevIns),
    5292                                           PGMPHYSHANDLERTYPE_PHYSICAL_WRITE,
    5293                                           pVGAState->GCPhysVRAM, pVGAState->GCPhysVRAM + (cbFrameBuffer - 1),
    5294                                           vgaR3LFBAccessHandler, pVGAState,
    5295                                           g_DeviceVga.szR0Mod, "vgaR0LFBAccessHandler", pDevIns->pvInstanceDataR0,
    5296                                           g_DeviceVga.szRCMod, "vgaGCLFBAccessHandler", pDevIns->pvInstanceDataRC,
    5297                                           "VGA LFB");
     5290    int rc = PGMHandlerPhysicalRegister(PDMDevHlpGetVM(pDevIns),
     5291                                        pVGAState->GCPhysVRAM, pVGAState->GCPhysVRAM + (cbFrameBuffer - 1),
     5292                                        pVGAState->hLfbAccessHandlerType, pVGAState, pDevIns->pvInstanceDataR0,
     5293                                        pDevIns->pvInstanceDataRC, "VGA LFB");
     5294
    52985295    AssertRC(rc);
    52995296    return rc;
     
    53485345        if (RT_SUCCESS(rc))
    53495346        {
    5350             rc = PGMR3HandlerPhysicalRegister(PDMDevHlpGetVM(pDevIns),
    5351                                               PGMPHYSHANDLERTYPE_PHYSICAL_WRITE,
    5352                                               GCPhysAddress, GCPhysAddress + (pThis->vram_size - 1),
    5353                                               vgaR3LFBAccessHandler, pThis,
    5354                                               g_DeviceVga.szR0Mod, "vgaR0LFBAccessHandler", pDevIns->pvInstanceDataR0,
    5355                                               g_DeviceVga.szRCMod, "vgaRCLFBAccessHandler", pDevIns->pvInstanceDataRC,
    5356                                               "VGA LFB");
     5347            rc = PGMHandlerPhysicalRegister(PDMDevHlpGetVM(pDevIns), GCPhysAddress, GCPhysAddress + (pThis->vram_size - 1),
     5348                                            pThis->hLfbAccessHandlerType, pThis, pDevIns->pvInstanceDataR0,
     5349                                            pDevIns->pvInstanceDataRC, "VGA LFB");
    53575350            AssertRC(rc);
    53585351            if (RT_SUCCESS(rc))
     
    61526145
    61536146    /*
     6147     * Register access handler types.
     6148     */
     6149    rc = PGMR3HandlerPhysicalTypeRegister(pVM, PGMPHYSHANDLERKIND_WRITE,
     6150                                          vgaR3LFBAccessHandler,
     6151                                          g_DeviceVga.szR0Mod, "vgaR0LFBAccessHandler",
     6152                                          g_DeviceVga.szRCMod, "vgaRCLFBAccessHandler",
     6153                                          "VGA LFB", &pThis->hLfbAccessHandlerType);
     6154    AssertRCReturn(rc, rc);
     6155
     6156
     6157    /*
    61546158     * Register I/O ports.
    61556159     */
  • trunk/src/VBox/Devices/Graphics/DevVGA.h

    r55303 r55493  
    315315    uint8_t                     u8FIFOExtCommand;
    316316    bool                        Padding6;
     317# if defined(DEBUG_GMR_ACCESS) || defined(DEBUG_FIFO_ACCESS)
     318    /** GMR debug access handler type handle. */
     319    PGMPHYSHANDLERTYPE          hGmrAccessHandlerType;
     320    /** FIFO debug access handler type handle. */
     321    PGMPHYSHANDLERTYPE          hFifoAccessHandlerType;
     322# endif
    317323} VMSVGAState;
    318324#endif /* VBOX_WITH_VMSVGA */
     
    453459    /* Whether the SVGA emulation is enabled or not. */
    454460    bool                        fVMSVGAEnabled;
    455     bool                        Padding1[1];
     461    bool                        Padding1[1+4];
    456462#else
    457     bool                        Padding1[2];
     463    bool                        Padding1[2+4];
    458464#endif
     465
     466    /** Physical access type for the linear frame buffer dirty page tracking. */
     467    PGMPHYSHANDLERTYPE          hLfbAccessHandlerType;
    459468
    460469    /** The physical address the VRAM was assigned. */
  • trunk/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp

    r55401 r55493  
    1717#include <VBox/VMMDev.h>
    1818#include <VBox/vmm/pdmdev.h>
     19#include <VBox/vmm/pgm.h>
    1920#include <VBox/VBoxVideo.h>
    2021#include <iprt/semaphore.h>
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