VirtualBox

Changeset 41636 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Jun 9, 2012 12:56:51 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
78435
Message:

wddm: fix win8 halt issues

Location:
trunk/src/VBox/Devices
Files:
5 edited

Legend:

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

    r41533 r41636  
    28722872                {
    28732873                    PDMDevHlpPCISetIrq(pDevIns, 0, PDM_IRQ_LEVEL_LOW);
    2874                     HGSMIClearHostGuestFlags(s->pHGSMI, HGSMIHOSTFLAGS_IRQ);
     2874                    HGSMIClearHostGuestFlags(s->pHGSMI, HGSMIHOSTFLAGS_IRQ
     2875#ifdef VBOX_VDMA_WITH_WATCHDOG
     2876                            | HGSMIHOSTFLAGS_WATCHDOG
     2877#endif
     2878                            | HGSMIHOSTFLAGS_VSYNC
     2879                            );
    28752880                }
    28762881                else
     
    52565261    PVGASTATE pThis = (PVGASTATE)pvUser;
    52575262    NOREF(pDevIns);
     5263
     5264    if (pThis->fScanLineCfg & VBVASCANLINECFG_ENABLE_VSYNC_IRQ)
     5265    {
     5266        VBVARaiseIrq(pThis, HGSMIHOSTFLAGS_VSYNC);
     5267    }
    52585268
    52595269    if (pThis->pDrv)
  • trunk/src/VBox/Devices/Graphics/DevVGA.h

    r41541 r41636  
    413413     * adapter, the way it can handle async HGSMI command completion, etc. */
    414414    uint32_t                    fGuestCaps;
     415    uint32_t                    fScanLineCfg;
     416    uint8_t                     Padding10[4];
    415417#  else
    416     uint8_t                     Padding10[6];
     418    uint8_t                     Padding10[14];
    417419#  endif
    418420# endif /* VBOX_WITH_HGSMI */
     
    481483bool VBVAIsEnabled(PVGASTATE pVGAState);
    482484
     485void VBVARaiseIrq (PVGASTATE pVGAState, uint32_t fFlags);
     486
    483487/* @return host-guest flags that were set on reset
    484488 * this allows the caller to make further cleaning when needed,
  • trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp

    r39887 r41636  
    16231623}
    16241624
     1625void VBVARaiseIrq (PVGASTATE pVGAState, uint32_t fFlags)
     1626{
     1627    PPDMDEVINS pDevIns = pVGAState->pDevInsR3;
     1628    PDMCritSectEnter(&pVGAState->lock, VERR_SEM_BUSY);
     1629    HGSMISetHostGuestFlags(pVGAState->pHGSMI, HGSMIHOSTFLAGS_IRQ | fFlags);
     1630    PDMDevHlpPCISetIrq(pDevIns, 0, PDM_IRQ_LEVEL_HIGH);
     1631    PDMCritSectLeave(&pVGAState->lock);
     1632}
     1633
    16251634/*
    16261635 *
     
    16381647#if defined(VBOX_WITH_HGSMI) && (defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_WITH_VDMA) || defined(VBOX_WITH_WDDM))
    16391648    PVGASTATE pVGAState = (PVGASTATE)pvCallback;
    1640     PPDMDEVINS pDevIns = pVGAState->pDevInsR3;
    1641     PDMCritSectEnter(&pVGAState->lock, VERR_SEM_BUSY);
    1642     HGSMISetHostGuestFlags(pVGAState->pHGSMI, HGSMIHOSTFLAGS_IRQ);
    1643     PDMDevHlpPCISetIrq(pDevIns, 0, PDM_IRQ_LEVEL_HIGH);
    1644     PDMCritSectLeave(&pVGAState->lock);
     1649    VBVARaiseIrq (pVGAState, 0);
    16451650#else
    16461651    NOREF(pvCallback);
     
    19691974        } break;
    19701975#endif
     1976        case VBVA_SCANLINE_CFG:
     1977        {
     1978            if (cbBuffer < sizeof (VBVASCANLINECFG))
     1979            {
     1980                rc = VERR_INVALID_PARAMETER;
     1981                break;
     1982            }
     1983
     1984            VBVASCANLINECFG *pCfg = (VBVASCANLINECFG*)pvBuffer;
     1985            pVGAState->fScanLineCfg = pCfg->fFlags;
     1986            pCfg->rc = VINF_SUCCESS;
     1987        } break;
    19711988        default:
    19721989            Log(("Unsupported VBVA guest command %d!!!\n",
  • trunk/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp

    r41292 r41636  
    8383    PHGSMIINSTANCE pHgsmi;
    8484    PVGASTATE pVGAState;
     85#ifdef VBOX_VDMA_WITH_WATCHDOG
     86    PTMTIMERR3 WatchDogTimer;
     87#endif
    8588#ifdef VBOX_VDMA_WITH_WORKERTHREAD
    8689    VBOXVDMAPIPE Pipe;
     
    10851088#endif
    10861089
     1090#ifdef VBOX_VDMA_WITH_WATCHDOG
     1091static DECLCALLBACK(void) vboxVDMAWatchDogTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
     1092{
     1093    VBOXVDMAHOST *pVdma = (VBOXVDMAHOST *)pvUser;
     1094    PVGASTATE pVGAState = pVdma->pVGAState;
     1095    VBVARaiseIrq(pVGAState, HGSMIHOSTFLAGS_WATCHDOG);
     1096}
     1097
     1098static int vboxVDMAWatchDogCtl(struct VBOXVDMAHOST *pVdma, uint32_t cMillis)
     1099{
     1100    PPDMDEVINS pDevIns = pVdma->pVGAState->pDevInsR3;
     1101    if (cMillis)
     1102        TMTimerSetMillies(pVdma->WatchDogTimer, cMillis);
     1103    else
     1104        TMTimerStop(pVdma->WatchDogTimer);
     1105    return VINF_SUCCESS;
     1106}
     1107#endif
     1108
    10871109int vboxVDMAConstruct(PVGASTATE pVGAState, uint32_t cPipeElements)
    10881110{
     
    10981120        pVdma->pHgsmi = pVGAState->pHGSMI;
    10991121        pVdma->pVGAState = pVGAState;
     1122
     1123#ifdef VBOX_VDMA_WITH_WATCHDOG
     1124        rc = PDMDevHlpTMTimerCreate(pVGAState->pDevInsR3, TMCLOCK_REAL, vboxVDMAWatchDogTimer,
     1125                                    pVdma, TMTIMER_FLAGS_NO_CRIT_SECT,
     1126                                    "VDMA WatchDog Timer", &pVdma->WatchDogTimer);
     1127        AssertRC(rc);
     1128#endif
    11001129#ifdef VBOX_VDMA_WITH_WORKERTHREAD
    11011130        hgsmiListInit(&pVdma->PendingList);
     
    12271256}
    12281257
    1229 
    12301258void vboxVDMAControl(struct VBOXVDMAHOST *pVdma, PVBOXVDMA_CTL pCmd, uint32_t cbCmd)
    12311259{
     
    12441272            pCmd->i32Result = VINF_SUCCESS;
    12451273            break;
     1274#ifdef VBOX_VDMA_WITH_WATCHDOG
     1275        case VBOXVDMA_CTL_TYPE_WATCHDOG:
     1276            pCmd->i32Result = vboxVDMAWatchDogCtl(pVdma, pCmd->u32Offset);
     1277            break;
     1278#endif
    12461279        default:
    12471280            AssertBreakpoint();
  • trunk/src/VBox/Devices/Makefile.kmk

    r41477 r41636  
    254254        Graphics/DevVGA_VDMA.cpp
    255255 endif
     256 
     257 ifdef VBOX_VDMA_WITH_WATCHDOG
     258  VBoxDD_DEFS           += VBOX_VDMA_WITH_WATCHDOG
     259 endif
    256260
    257261 ifdef VBOX_WITH_PXE_ROM
     
    829833   VBoxDDGC_DEFS        += VBOX_WITH_CRHGSMI
    830834  endif
    831 
    832835  ifdef VBOXWDDM_WITH_VBVA
    833836   VBoxDDGC_DEFS        += VBOXWDDM_WITH_VBVA
     837  endif
     838  ifdef VBOX_VDMA_WITH_WATCHDOG
     839   VBoxDDGC_DEFS        += VBOX_VDMA_WITH_WATCHDOG
    834840  endif
    835841
     
    977983  VBoxDDR0_DEFS         += VBOXWDDM_WITH_VBVA
    978984 endif
     985 ifdef VBOX_VDMA_WITH_WATCHDOG
     986  VBoxDDR0_DEFS        += VBOX_VDMA_WITH_WATCHDOG
     987 endif
    979988
    980989 ifdef VBOX_WITH_VUSB
Note: See TracChangeset for help on using the changeset viewer.

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