Changeset 41636 in vbox
- Timestamp:
- Jun 9, 2012 12:56:51 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 78435
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/HGSMI/HGSMIChSetup.h
r32622 r41636 49 49 /* one or more guest commands is completed */ 50 50 # define HGSMIHOSTFLAGS_GCOMMAND_COMPLETED 0x4 51 # define HGSMIHOSTFLAGS_WATCHDOG 0x8 51 52 #endif 53 #define HGSMIHOSTFLAGS_VSYNC 0x10 52 54 53 55 typedef struct _HGSMIHOSTFLAGS -
trunk/include/VBox/VBoxVideo.h
r41058 r41636 850 850 # define VBVA_VDMA_CMD 11 /* G->H DMA command */ 851 851 #endif 852 #define VBVA_INFO_CAPS 12 /* informs host about HGSMI caps. see _VBVACAPS below */ 852 #define VBVA_INFO_CAPS 12 /* informs host about HGSMI caps. see VBVACAPS below */ 853 #define VBVA_SCANLINE_CFG 13 /* configures scanline, see VBVASCANLINECFG below */ 854 #define VBVA_SCANLINE_INFO 14 /* requests scanline info, see VBVASCANLINEINFO below */ 853 855 854 856 /* host->guest commands */ … … 1064 1066 } VBVACAPS; 1065 1067 1068 /* makes graphics device generate IRQ on VSYNC */ 1069 #define VBVASCANLINECFG_ENABLE_VSYNC_IRQ 0x00000001 1070 /* guest driver may request the current scanline */ 1071 #define VBVASCANLINECFG_ENABLE_SCANLINE_INFO 0x00000002 1072 /* request the current refresh period, returned in u32RefreshPeriodMs */ 1073 #define VBVASCANLINECFG_QUERY_REFRESH_PERIOD 0x00000004 1074 /* set new refresh period specified in u32RefreshPeriodMs. 1075 * if used with VBVASCANLINECFG_QUERY_REFRESH_PERIOD, 1076 * u32RefreshPeriodMs is set to the previous refresh period on return */ 1077 #define VBVASCANLINECFG_SET_REFRESH_PERIOD 0x00000008 1078 1079 typedef struct VBVASCANLINECFG 1080 { 1081 int32_t rc; 1082 uint32_t fFlags; 1083 uint32_t u32RefreshPeriodMs; 1084 uint32_t u32Reserved; 1085 } VBVASCANLINECFG; 1086 1087 typedef struct VBVASCANLINEINFO 1088 { 1089 int32_t rc; 1090 uint32_t u32ScreenId; 1091 uint32_t u32InVBlank; 1092 uint32_t u32ScanLine; 1093 } VBVASCANLINEINFO; 1094 1066 1095 #pragma pack() 1067 1096 … … 1154 1183 VBOXVDMA_CTL_TYPE_ENABLE, 1155 1184 VBOXVDMA_CTL_TYPE_DISABLE, 1156 VBOXVDMA_CTL_TYPE_FLUSH 1185 VBOXVDMA_CTL_TYPE_FLUSH, 1186 VBOXVDMA_CTL_TYPE_WATCHDOG 1157 1187 } VBOXVDMA_CTL_TYPE; 1158 1188 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/Makefile.kmk
r41570 r41636 90 90 VBoxVideoWddm_DEFS += VBOX_WITH_CROGL 91 91 endif 92 ifdef VBOX_VDMA_WITH_WATCHDOG 93 VBoxVideoWddm_DEFS += VBOX_VDMA_WITH_WATCHDOG 94 endif 95 92 96 VBoxVideoWddm_INCS += ../../../include .. . ../../../../common/VBoxGuestLib $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES) 93 97 VBoxVideoWddm_LDFLAGS.x86 += /Entry:DriverEntry@8 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/common/VBoxMPDevExt.h
r41337 r41636 116 116 BOOL bNotifyDxDpc; 117 117 118 #ifdef VBOX_VDMA_WITH_WATCHDOG 119 PKTHREAD pWdThread; 120 KEVENT WdEvent; 121 #endif 122 123 KTIMER VSyncTimer; 124 KDPC VSyncDpc; 125 118 126 #if 0 119 127 FAST_MUTEX ShRcTreeMutex; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp
r41379 r41636 2365 2365 return Status; 2366 2366 } 2367 2368 NTSTATUS vboxWddmThreadCreate(PKTHREAD * ppThread, PKSTART_ROUTINE pStartRoutine, PVOID pStartContext) 2369 { 2370 NTSTATUS fStatus; 2371 HANDLE hThread; 2372 OBJECT_ATTRIBUTES fObjectAttributes; 2373 2374 Assert(KeGetCurrentIrql() == PASSIVE_LEVEL); 2375 2376 InitializeObjectAttributes(&fObjectAttributes, NULL, OBJ_KERNEL_HANDLE, 2377 NULL, NULL); 2378 2379 fStatus = PsCreateSystemThread(&hThread, THREAD_ALL_ACCESS, 2380 &fObjectAttributes, NULL, NULL, 2381 (PKSTART_ROUTINE) pStartRoutine, pStartContext); 2382 if (!NT_SUCCESS(fStatus)) 2383 return fStatus; 2384 2385 ObReferenceObjectByHandle(hThread, THREAD_ALL_ACCESS, NULL, 2386 KernelMode, (PVOID*) ppThread, NULL); 2387 ZwClose(hThread); 2388 return STATUS_SUCCESS; 2389 } 2390 2391 #ifdef VBOX_VDMA_WITH_WATCHDOG 2392 static int vboxWddmWdProgram(PVBOXMP_DEVEXT pDevExt, uint32_t cMillis) 2393 { 2394 int rc = VINF_SUCCESS; 2395 PVBOXVDMA_CTL pCmd = (PVBOXVDMA_CTL)VBoxSHGSMICommandAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, sizeof (VBOXVDMA_CTL), HGSMI_CH_VBVA, VBVA_VDMA_CTL); 2396 if (pCmd) 2397 { 2398 pCmd->enmCtl = VBOXVDMA_CTL_TYPE_WATCHDOG; 2399 pCmd->u32Offset = cMillis; 2400 pCmd->i32Result = VERR_NOT_SUPPORTED; 2401 2402 const VBOXSHGSMIHEADER* pHdr = VBoxSHGSMICommandPrepSynch(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pCmd); 2403 Assert(pHdr); 2404 if (pHdr) 2405 { 2406 do 2407 { 2408 HGSMIOFFSET offCmd = VBoxSHGSMICommandOffset(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pHdr); 2409 Assert(offCmd != HGSMIOFFSET_VOID); 2410 if (offCmd != HGSMIOFFSET_VOID) 2411 { 2412 VBoxVideoCmnPortWriteUlong(VBoxCommonFromDeviceExt(pDevExt)->guestCtx.port, offCmd); 2413 rc = VBoxSHGSMICommandDoneSynch(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pHdr); 2414 AssertRC(rc); 2415 if (RT_SUCCESS(rc)) 2416 { 2417 rc = pCmd->i32Result; 2418 AssertRC(rc); 2419 } 2420 break; 2421 } 2422 else 2423 rc = VERR_INVALID_PARAMETER; 2424 /* fail to submit, cancel it */ 2425 VBoxSHGSMICommandCancelSynch(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pHdr); 2426 } while (0); 2427 } 2428 2429 VBoxSHGSMICommandFree (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pCmd); 2430 } 2431 else 2432 { 2433 LOGREL(("HGSMIHeapAlloc failed")); 2434 rc = VERR_OUT_OF_RESOURCES; 2435 } 2436 return rc; 2437 } 2438 2439 static uint32_t g_VBoxWdTimeout = 4000; 2440 /* if null g_VBoxWdTimeout / 2 is used */ 2441 static uint32_t g_VBoxWdTimerPeriod = 0; 2442 2443 static VOID vboxWddmWdThread(PVOID pvUser) 2444 { 2445 PVBOXMP_DEVEXT pDevExt = (PVBOXMP_DEVEXT)pvUser; 2446 BOOLEAN bExit = FALSE; 2447 int rc; 2448 while (1) 2449 { 2450 if (!bExit) 2451 { 2452 rc = vboxWddmWdProgram(pDevExt, g_VBoxWdTimeout /* ms */); 2453 AssertRC(rc); 2454 } 2455 else 2456 { 2457 rc = vboxWddmWdProgram(pDevExt, 0 /* to disable WatchDog */); 2458 AssertRC(rc); 2459 break; 2460 } 2461 LARGE_INTEGER Timeout; 2462 uint32_t timerTimeOut = g_VBoxWdTimerPeriod ? g_VBoxWdTimerPeriod : g_VBoxWdTimeout / 2; 2463 Timeout.QuadPart = 10000ULL * timerTimeOut /* ms */; 2464 NTSTATUS Status = KeWaitForSingleObject(&pDevExt->WdEvent, Executive, KernelMode, FALSE, &Timeout); 2465 if (Status != STATUS_TIMEOUT) 2466 bExit = TRUE; 2467 } 2468 } 2469 2470 NTSTATUS vboxWddmWdInit(PVBOXMP_DEVEXT pDevExt) 2471 { 2472 KeInitializeEvent(&pDevExt->WdEvent, NotificationEvent, FALSE); 2473 2474 NTSTATUS Status = vboxWddmThreadCreate(&pDevExt->pWdThread, vboxWddmWdThread, pDevExt); 2475 if (!NT_SUCCESS(Status)) 2476 { 2477 WARN(("vboxWddmThreadCreate failed, Status 0x%x", Status)); 2478 pDevExt->pWdThread = NULL; 2479 } 2480 return Status; 2481 } 2482 2483 NTSTATUS vboxWddmWdTerm(PVBOXMP_DEVEXT pDevExt) 2484 { 2485 if (!pDevExt->pWdThread) 2486 return STATUS_SUCCESS; 2487 2488 KeSetEvent(&pDevExt->WdEvent, 0, FALSE); 2489 2490 KeWaitForSingleObject(pDevExt->pWdThread, Executive, KernelMode, FALSE, NULL); 2491 ObDereferenceObject(pDevExt->pWdThread); 2492 pDevExt->pWdThread = NULL; 2493 return STATUS_SUCCESS; 2494 } 2495 #endif 2496 2497 static int vboxWddmSlConfigure(PVBOXMP_DEVEXT pDevExt, uint32_t fFlags) 2498 { 2499 PHGSMIGUESTCOMMANDCONTEXT pCtx = &VBoxCommonFromDeviceExt(pDevExt)->guestCtx; 2500 VBVASCANLINECFG *pCfg; 2501 int rc = VINF_SUCCESS; 2502 2503 /* Allocate the IO buffer. */ 2504 pCfg = (VBVASCANLINECFG *)VBoxHGSMIBufferAlloc(pCtx, 2505 sizeof (VBVASCANLINECFG), HGSMI_CH_VBVA, 2506 VBVA_SCANLINE_CFG); 2507 2508 if (pCfg) 2509 { 2510 /* Prepare data to be sent to the host. */ 2511 pCfg->rc = VERR_NOT_IMPLEMENTED; 2512 pCfg->fFlags = fFlags; 2513 rc = VBoxHGSMIBufferSubmit(pCtx, pCfg); 2514 if (RT_SUCCESS(rc)) 2515 { 2516 AssertRC(pCfg->rc); 2517 rc = pCfg->rc; 2518 } 2519 /* Free the IO buffer. */ 2520 VBoxHGSMIBufferFree(pCtx, pCfg); 2521 } 2522 else 2523 rc = VERR_NO_MEMORY; 2524 return rc; 2525 } 2526 2527 NTSTATUS VBoxWddmSlEnableVSyncNotification(PVBOXMP_DEVEXT pDevExt, BOOLEAN fEnable) 2528 { 2529 if (!fEnable) 2530 { 2531 KeCancelTimer(&pDevExt->VSyncTimer); 2532 } 2533 else 2534 { 2535 LARGE_INTEGER DueTime; 2536 DueTime.QuadPart = -166666LL; /* 60 Hz */ 2537 KeSetTimerEx(&pDevExt->VSyncTimer, DueTime, 17, &pDevExt->VSyncDpc); 2538 } 2539 return STATUS_SUCCESS; 2540 } 2541 2542 NTSTATUS VBoxWddmSlGetScanLine(PVBOXMP_DEVEXT pDevExt, DXGKARG_GETSCANLINE *pGetScanLine) 2543 { 2544 Assert((UINT)VBoxCommonFromDeviceExt(pDevExt)->cDisplays > pGetScanLine->VidPnTargetId); 2545 VBOXWDDM_TARGET *pTarget = &pDevExt->aTargets[pGetScanLine->VidPnTargetId]; 2546 Assert(pTarget->HeightTotal); 2547 Assert(pTarget->HeightVisible); 2548 Assert(pTarget->HeightTotal > pTarget->HeightVisible); 2549 Assert(pTarget->ScanLineState < pTarget->HeightTotal); 2550 if (pTarget->HeightTotal) 2551 { 2552 uint32_t curScanLine = pTarget->ScanLineState; 2553 ++pTarget->ScanLineState; 2554 if (pTarget->ScanLineState >= pTarget->HeightTotal) 2555 pTarget->ScanLineState = 0; 2556 2557 2558 BOOL bVBlank = (!curScanLine || curScanLine > pTarget->HeightVisible); 2559 pGetScanLine->ScanLine = curScanLine; 2560 pGetScanLine->InVerticalBlank = bVBlank; 2561 } 2562 else 2563 { 2564 pGetScanLine->InVerticalBlank = TRUE; 2565 pGetScanLine->ScanLine = 0; 2566 } 2567 return STATUS_SUCCESS; 2568 } 2569 2570 static VOID vboxWddmSlVSyncDpc( 2571 __in struct _KDPC *Dpc, 2572 __in_opt PVOID DeferredContext, 2573 __in_opt PVOID SystemArgument1, 2574 __in_opt PVOID SystemArgument2 2575 ) 2576 { 2577 PVBOXMP_DEVEXT pDevExt = (PVBOXMP_DEVEXT)DeferredContext; 2578 DXGKARGCB_NOTIFY_INTERRUPT_DATA notify; 2579 BOOLEAN bNeedDpc = FALSE; 2580 for (UINT i = 0; i < (UINT)VBoxCommonFromDeviceExt(pDevExt)->cDisplays; ++i) 2581 { 2582 PVBOXWDDM_SOURCE pSource = &pDevExt->aSources[i]; 2583 PVBOXWDDM_ALLOCATION pPrimary = pSource->pPrimaryAllocation; 2584 if (pPrimary && pPrimary->offVram != VBOXVIDEOOFFSET_VOID) 2585 { 2586 memset(¬ify, 0, sizeof(DXGKARGCB_NOTIFY_INTERRUPT_DATA)); 2587 notify.InterruptType = DXGK_INTERRUPT_CRTC_VSYNC; 2588 /* @todo: !!!this is not correct in case we want source[i]->target[i!=j] mapping */ 2589 notify.CrtcVsync.VidPnTargetId = i; 2590 notify.CrtcVsync.PhysicalAddress.QuadPart = pPrimary->offVram; 2591 /* yes, we can report VSync at dispatch */ 2592 pDevExt->u.primary.DxgkInterface.DxgkCbNotifyInterrupt(pDevExt->u.primary.DxgkInterface.DeviceHandle, ¬ify); 2593 bNeedDpc = TRUE; 2594 } 2595 } 2596 2597 if (bNeedDpc) 2598 { 2599 pDevExt->u.primary.DxgkInterface.DxgkCbQueueDpc(pDevExt->u.primary.DxgkInterface.DeviceHandle); 2600 } 2601 } 2602 2603 NTSTATUS VBoxWddmSlInit(PVBOXMP_DEVEXT pDevExt) 2604 { 2605 KeInitializeTimer(&pDevExt->VSyncTimer); 2606 KeInitializeDpc(&pDevExt->VSyncDpc, vboxWddmSlVSyncDpc, pDevExt); 2607 return STATUS_SUCCESS; 2608 } 2609 2610 NTSTATUS VBoxWddmSlTerm(PVBOXMP_DEVEXT pDevExt) 2611 { 2612 KeCancelTimer(&pDevExt->VSyncTimer); 2613 return STATUS_SUCCESS; 2614 } -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.h
r41379 r41636 200 200 NTSTATUS vboxWddmDrvCfgInit(PUNICODE_STRING pRegStr); 201 201 202 #ifdef VBOX_VDMA_WITH_WATCHDOG 203 NTSTATUS vboxWddmWdInit(PVBOXMP_DEVEXT pDevExt); 204 NTSTATUS vboxWddmWdTerm(PVBOXMP_DEVEXT pDevExt); 205 #endif 206 207 NTSTATUS VBoxWddmSlEnableVSyncNotification(PVBOXMP_DEVEXT pDevExt, BOOLEAN fEnable); 208 NTSTATUS VBoxWddmSlGetScanLine(PVBOXMP_DEVEXT pDevExt, DXGKARG_GETSCANLINE *pSl); 209 NTSTATUS VBoxWddmSlInit(PVBOXMP_DEVEXT pDevExt); 210 NTSTATUS VBoxWddmSlTerm(PVBOXMP_DEVEXT pDevExt); 211 202 212 #endif /* #ifndef ___VBoxMPMisc_h__ */ -
trunk/src/VBox/Devices/Graphics/DevVGA.cpp
r41533 r41636 2872 2872 { 2873 2873 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 ); 2875 2880 } 2876 2881 else … … 5256 5261 PVGASTATE pThis = (PVGASTATE)pvUser; 5257 5262 NOREF(pDevIns); 5263 5264 if (pThis->fScanLineCfg & VBVASCANLINECFG_ENABLE_VSYNC_IRQ) 5265 { 5266 VBVARaiseIrq(pThis, HGSMIHOSTFLAGS_VSYNC); 5267 } 5258 5268 5259 5269 if (pThis->pDrv) -
trunk/src/VBox/Devices/Graphics/DevVGA.h
r41541 r41636 413 413 * adapter, the way it can handle async HGSMI command completion, etc. */ 414 414 uint32_t fGuestCaps; 415 uint32_t fScanLineCfg; 416 uint8_t Padding10[4]; 415 417 # else 416 uint8_t Padding10[ 6];418 uint8_t Padding10[14]; 417 419 # endif 418 420 # endif /* VBOX_WITH_HGSMI */ … … 481 483 bool VBVAIsEnabled(PVGASTATE pVGAState); 482 484 485 void VBVARaiseIrq (PVGASTATE pVGAState, uint32_t fFlags); 486 483 487 /* @return host-guest flags that were set on reset 484 488 * this allows the caller to make further cleaning when needed, -
trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
r39887 r41636 1623 1623 } 1624 1624 1625 void 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 1625 1634 /* 1626 1635 * … … 1638 1647 #if defined(VBOX_WITH_HGSMI) && (defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_WITH_VDMA) || defined(VBOX_WITH_WDDM)) 1639 1648 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); 1645 1650 #else 1646 1651 NOREF(pvCallback); … … 1969 1974 } break; 1970 1975 #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; 1971 1988 default: 1972 1989 Log(("Unsupported VBVA guest command %d!!!\n", -
trunk/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
r41292 r41636 83 83 PHGSMIINSTANCE pHgsmi; 84 84 PVGASTATE pVGAState; 85 #ifdef VBOX_VDMA_WITH_WATCHDOG 86 PTMTIMERR3 WatchDogTimer; 87 #endif 85 88 #ifdef VBOX_VDMA_WITH_WORKERTHREAD 86 89 VBOXVDMAPIPE Pipe; … … 1085 1088 #endif 1086 1089 1090 #ifdef VBOX_VDMA_WITH_WATCHDOG 1091 static 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 1098 static 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 1087 1109 int vboxVDMAConstruct(PVGASTATE pVGAState, uint32_t cPipeElements) 1088 1110 { … … 1098 1120 pVdma->pHgsmi = pVGAState->pHGSMI; 1099 1121 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 1100 1129 #ifdef VBOX_VDMA_WITH_WORKERTHREAD 1101 1130 hgsmiListInit(&pVdma->PendingList); … … 1227 1256 } 1228 1257 1229 1230 1258 void vboxVDMAControl(struct VBOXVDMAHOST *pVdma, PVBOXVDMA_CTL pCmd, uint32_t cbCmd) 1231 1259 { … … 1244 1272 pCmd->i32Result = VINF_SUCCESS; 1245 1273 break; 1274 #ifdef VBOX_VDMA_WITH_WATCHDOG 1275 case VBOXVDMA_CTL_TYPE_WATCHDOG: 1276 pCmd->i32Result = vboxVDMAWatchDogCtl(pVdma, pCmd->u32Offset); 1277 break; 1278 #endif 1246 1279 default: 1247 1280 AssertBreakpoint(); -
trunk/src/VBox/Devices/Makefile.kmk
r41477 r41636 254 254 Graphics/DevVGA_VDMA.cpp 255 255 endif 256 257 ifdef VBOX_VDMA_WITH_WATCHDOG 258 VBoxDD_DEFS += VBOX_VDMA_WITH_WATCHDOG 259 endif 256 260 257 261 ifdef VBOX_WITH_PXE_ROM … … 829 833 VBoxDDGC_DEFS += VBOX_WITH_CRHGSMI 830 834 endif 831 832 835 ifdef VBOXWDDM_WITH_VBVA 833 836 VBoxDDGC_DEFS += VBOXWDDM_WITH_VBVA 837 endif 838 ifdef VBOX_VDMA_WITH_WATCHDOG 839 VBoxDDGC_DEFS += VBOX_VDMA_WITH_WATCHDOG 834 840 endif 835 841 … … 977 983 VBoxDDR0_DEFS += VBOXWDDM_WITH_VBVA 978 984 endif 985 ifdef VBOX_VDMA_WITH_WATCHDOG 986 VBoxDDR0_DEFS += VBOX_VDMA_WITH_WATCHDOG 987 endif 979 988 980 989 ifdef VBOX_WITH_VUSB
Note:
See TracChangeset
for help on using the changeset viewer.