VirtualBox

Changeset 25052 in vbox


Ignore:
Timestamp:
Nov 27, 2009 3:01:37 PM (15 years ago)
Author:
vboxsync
Message:

HGSMI/VBVA: enable VRDP commands only if there are connected RDP clients.

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/VBoxVideo.h

    r25047 r25052  
    758758#pragma pack(1)
    759759
    760 typedef struct _VBVABUFFER
     760typedef struct VBVAHOSTFLAGS
    761761{
    762762    uint32_t u32HostEvents;
    763763    uint32_t u32SupportedOrders;
     764} VBVAHOSTFLAGS;
     765
     766typedef struct _VBVABUFFER
     767{
     768    VBVAHOSTFLAGS hostFlags;
    764769
    765770    /* The offset where the data start in the buffer. */
  • trunk/include/VBox/pdmifs.h

    r24373 r25052  
    438438typedef struct VBVAINFOSCREEN *PVBVAINFOSCREEN;
    439439typedef struct VBVAINFOVIEW *PVBVAINFOVIEW;
     440typedef struct VBVAHOSTFLAGS *PVBVAHOSTFLAGS;
    440441
    441442/** Pointer to a display connector interface. */
     
    555556     * @thread  The emulation thread.
    556557     */
    557     DECLR3CALLBACKMEMBER(int, pfnVBVAEnable,(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId));
     558    DECLR3CALLBACKMEMBER(int, pfnVBVAEnable,(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId, PVBVAHOSTFLAGS pHostFlags));
    558559
    559560    /**
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/dd.c

    r25047 r25052  
    11921192            vbvaReportDirtyRect (pDev, &pDesc->UpdatedMemRegion.Rect);
    11931193
    1194             if (  pDev->pVBVA->u32HostEvents
     1194            if (  pDev->pVBVA->hostFlags.u32HostEvents
    11951195                & VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET)
    11961196            {
    11971197                vrdpReset (pDev);
    11981198
    1199                 pDev->pVBVA->u32HostEvents &=
     1199                pDev->pVBVA->hostFlags.u32HostEvents &=
    12001200                          ~VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET;
    12011201            }
    12021202
    1203             if (pDev->pVBVA->u32HostEvents
     1203            if (pDev->pVBVA->hostFlags.u32HostEvents
    12041204                & VBVA_F_MODE_VRDP)
    12051205            {
     
    12841284            vbvaReportDirtyRect (pDev, &pDev->ddLock.rArea);
    12851285
    1286             if (  pDev->pVBVA->u32HostEvents
     1286            if (  pDev->pVBVA->hostFlags.u32HostEvents
    12871287                & VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET)
    12881288            {
    12891289                vrdpReset (pDev);
    12901290
    1291                 pDev->pVBVA->u32HostEvents &=
     1291                pDev->pVBVA->hostFlags.u32HostEvents &=
    12921292                          ~VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET;
    12931293            }
    12941294
    1295             if (pDev->pVBVA->u32HostEvents
     1295            if (pDev->pVBVA->hostFlags.u32HostEvents
    12961296                & VBVA_F_MODE_VRDP)
    12971297            {
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/drv.c

    r17704 r25052  
    144144            vbva##__fn __a;                                            \
    145145                                                                       \
    146             if (  ppdev->pVBVA->u32HostEvents                           \
     146            if (  ppdev->pVBVA->hostFlags.u32HostEvents                \
    147147                & VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET)            \
    148148            {                                                          \
    149149                vrdpReset (ppdev);                                     \
    150150                                                                       \
    151                 ppdev->pVBVA->u32HostEvents &=                          \
     151                ppdev->pVBVA->hostFlags.u32HostEvents &=               \
    152152                          ~VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET;   \
    153153            }                                                          \
    154154                                                                       \
    155             if (ppdev->pVBVA->u32HostEvents                             \
     155            if (ppdev->pVBVA->hostFlags.u32HostEvents                  \
    156156                & VBVA_F_MODE_VRDP)                                    \
    157157            {                                                          \
     
    366366
    367367        if (   ppdev->pVBVA
    368             && (ppdev->pVBVA->u32HostEvents & VBVA_F_MODE_ENABLED))
     368            && (ppdev->pVBVA->hostFlags.u32HostEvents & VBVA_F_MODE_ENABLED))
    369369#endif /* VBOX_WITH_HGSMI */
    370370        {
     
    793793#else
    794794        if (   ppdev->pVBVA
    795             && (ppdev->pVBVA->u32HostEvents & VBVA_F_MODE_ENABLED))
     795            && (ppdev->pVBVA->hostFlags.u32HostEvents & VBVA_F_MODE_ENABLED))
    796796        {
    797             if (ppdev->pVBVA->u32HostEvents
     797            if (ppdev->pVBVA->hostFlags.u32HostEvents
    798798                & VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET)
    799799            {
    800800                vrdpReset (ppdev);
    801801
    802                 ppdev->pVBVA->u32HostEvents &=
     802                ppdev->pVBVA->hostFlags.u32HostEvents &=
    803803                    ~VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET;
    804804            }
    805805
    806             if (ppdev->pVBVA->u32HostEvents
     806            if (ppdev->pVBVA->hostFlags.u32HostEvents
    807807                & VBVA_F_MODE_VRDP)
    808808            {
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/enable.c

    r22868 r25052  
    146146        if (ppdev && ppdev->pVBVA)
    147147        {
    148             if (ppdev->pVBVA->u32HostEvents & VBVA_F_MODE_VRDP)
     148            if (ppdev->pVBVA->hostFlags.u32HostEvents & VBVA_F_MODE_VRDP)
    149149            {
    150150                ret = 1;
    151151            }
    152             DISPDBG((0, "VBOXESC_ISVRDPACTIVE -> %d (%x)\n", ret, ppdev->pVBVA->u32HostEvents));
     152            DISPDBG((0, "VBOXESC_ISVRDPACTIVE -> %d (%x)\n", ret, ppdev->pVBVA->hostFlags.u32HostEvents));
    153153        }
    154154        else
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/vbox.c

    r22592 r25052  
    405405        DISPDBG((1, "VBoxDisp::vboxVbvaEnable screen %p vbva off 0x%x\n", ppdev->pjScreen, ppdev->layout.offVBVABuffer));
    406406
    407         pVBVA->u32HostEvents      = 0;
    408         pVBVA->u32SupportedOrders = 0;
     407        pVBVA->hostFlags.u32HostEvents      = 0;
     408        pVBVA->hostFlags.u32SupportedOrders = 0;
    409409        pVBVA->off32Data          = 0;
    410410        pVBVA->off32Free          = 0;
     
    451451
    452452    if (   ppdev->pVBVA
    453         && (ppdev->pVBVA->u32HostEvents & VBVA_F_MODE_ENABLED))
     453        && (ppdev->pVBVA->hostFlags.u32HostEvents & VBVA_F_MODE_ENABLED))
    454454    {
    455455        uint32_t indexRecordNext;
     
    659659    }
    660660
    661     if (pVBVA->u32SupportedOrders & (1 << code))
     661    if (pVBVA->hostFlags.u32SupportedOrders & (1 << code))
    662662    {
    663663        return TRUE;
  • trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp

    r24940 r25052  
    485485    if (pVGAState->pDrv->pfnVBVAEnable)
    486486    {
    487         rc = pVGAState->pDrv->pfnVBVAEnable (pVGAState->pDrv, uScreenId);
     487        pVBVA->hostFlags.u32HostEvents = 0;
     488        pVBVA->hostFlags.u32SupportedOrders = 0;
     489
     490        rc = pVGAState->pDrv->pfnVBVAEnable (pVGAState->pDrv, uScreenId, &pVBVA->hostFlags);
    488491    }
    489492    else
     
    494497    if (RT_SUCCESS (rc))
    495498    {
    496         /* Setup flags. */
    497         pVBVA->u32HostEvents = VBVA_F_MODE_ENABLED |
    498                                VBVA_F_MODE_VRDP |
    499                                VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET;
    500 
    501         pVBVA->u32SupportedOrders = ~0;
     499        /* pVBVA->hostFlags has been set up by pfnVBVAEnable. */
     500        LogFlowFunc(("u32HostEvents 0x%08X, u32SupportedOrders %0x%08X\n",
     501                     pVBVA->hostFlags.u32HostEvents, pVBVA->hostFlags.u32SupportedOrders));
    502502
    503503        pCtx->aViews[uScreenId].partialRecord.pu8 = NULL;
     
    520520    if (pView->pVBVA)
    521521    {
    522         pView->pVBVA->u32HostEvents = 0;
    523         pView->pVBVA->u32SupportedOrders = 0;
     522        pView->pVBVA->hostFlags.u32HostEvents = 0;
     523        pView->pVBVA->hostFlags.u32SupportedOrders = 0;
    524524
    525525        pView->partialRecord.pu8 = NULL;
  • trunk/src/VBox/Main/DisplayImpl.cpp

    r25036 r25052  
    11801180        }
    11811181    }
     1182
     1183#ifdef VBOX_WITH_HGSMI
     1184    for (uScreenId = 0; uScreenId < cFBInfos; uScreenId++)
     1185    {
     1186        LogFlowFunc(("HGSMI[%d]: %p\n", uScreenId, paFBInfos[uScreenId].pVBVAHostFlags));
     1187        if (paFBInfos[uScreenId].pVBVAHostFlags)
     1188        {
     1189            uint32_t fu32HostEvents = VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET;
     1190
     1191            if (fVideoAccelEnabled)
     1192            {
     1193                fu32HostEvents |= VBVA_F_MODE_ENABLED;
     1194
     1195                if (fVideoAccelVRDP)
     1196                {
     1197                    fu32HostEvents |= VBVA_F_MODE_VRDP;
     1198                }
     1199            }
     1200
     1201            paFBInfos[uScreenId].pVBVAHostFlags->u32HostEvents |= fu32HostEvents;
     1202            paFBInfos[uScreenId].pVBVAHostFlags->u32SupportedOrders = fu32SupportedOrders;
     1203        }
     1204    }
     1205#endif /* VBOX_WITH_HGSMI */
    11821206}
    11831207
     
    13391363void Display::VideoAccelVRDP (bool fEnable)
    13401364{
     1365    LogFlowFunc(("fEnable = %d\n", fEnable));
     1366
    13411367#ifdef VBOX_WITH_OLD_VBVA_LOCK
    13421368    vbvaLock();
     
    31233149
    31243150#ifdef VBOX_WITH_HGSMI
    3125 DECLCALLBACK(int) Display::displayVBVAEnable(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId)
     3151DECLCALLBACK(int) Display::displayVBVAEnable(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId, PVBVAHOSTFLAGS pHostFlags)
    31263152{
    31273153    LogFlowFunc(("uScreenId %d\n", uScreenId));
     
    31313157
    31323158    pThis->maFramebuffers[uScreenId].fVBVAEnabled = true;
     3159    pThis->maFramebuffers[uScreenId].pVBVAHostFlags = pHostFlags;
     3160
     3161    vbvaSetMemoryFlags(NULL, true, pThis->mfVideoAccelVRDP, pThis->mfu32SupportedOrders, pThis->maFramebuffers, pThis->mcMonitors);
    31333162
    31343163    return VINF_SUCCESS;
  • trunk/src/VBox/Main/include/DisplayImpl.h

    r24931 r25052  
    8989       int32_t yBottom;
    9090    } vbvaSkippedRect;
     91    PVBVAHOSTFLAGS pVBVAHostFlags;
    9192#endif /* VBOX_WITH_HGSMI */
    9293} DISPLAYFBINFO;
     
    286287
    287288#ifdef VBOX_WITH_HGSMI
    288     static DECLCALLBACK(int)  displayVBVAEnable(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId);
     289    static DECLCALLBACK(int)  displayVBVAEnable(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId, PVBVAHOSTFLAGS pHostFlags);
    289290    static DECLCALLBACK(void) displayVBVADisable(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId);
    290291    static DECLCALLBACK(void) displayVBVAUpdateBegin(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId);
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