Changeset 53751 in vbox
- Timestamp:
- Jan 6, 2015 4:22:10 AM (10 years ago)
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 2 edited
-
DevVGA-SVGA.cpp (modified) (12 diffs)
-
DevVGA.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
r53749 r53751 33 33 #include <VBox/log.h> 34 34 #include <VBox/vmm/pgm.h> 35 #include <VBox/sup.h> 35 36 36 37 #include <iprt/assert.h> … … 184 185 SSMFIELD_ENTRY_IGNORE( VMSVGAState, BasePort), 185 186 SSMFIELD_ENTRY( VMSVGAState, u32IndexReg), 187 SSMFIELD_ENTRY_IGNORE( VMSVGAState, pSupDrvSession), 186 188 SSMFIELD_ENTRY_IGNORE( VMSVGAState, FIFORequestSem), 187 189 SSMFIELD_ENTRY_IGNORE( VMSVGAState, FIFOExtCmdSem), … … 1082 1084 && pThis->svga.fConfigured) 1083 1085 { 1084 #if def IN_RING31085 Log(("SVGA_REG_SYNC: SVGA_FIFO_BUSY=%d\n", pThis->svga. pFIFOR3[SVGA_FIFO_BUSY]));1086 #if defined(IN_RING3) || defined(IN_RING0) 1087 Log(("SVGA_REG_SYNC: SVGA_FIFO_BUSY=%d\n", pThis->svga.CTX_SUFF(pFIFO)[SVGA_FIFO_BUSY])); 1086 1088 pThis->svga.fBusy = true; 1087 pThis->svga. pFIFOR3[SVGA_FIFO_BUSY] = pThis->svga.fBusy;1089 pThis->svga.CTX_SUFF(pFIFO)[SVGA_FIFO_BUSY] = pThis->svga.fBusy; 1088 1090 1089 1091 /* Kick the FIFO thread to start processing commands again. */ 1090 RTSemEventSignal(pThis->svga.FIFORequestSem);1092 SUPSemEventSignal(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem); 1091 1093 #else 1092 1094 rc = VINF_IOM_R3_IOPORT_WRITE; … … 1937 1939 1938 1940 /* Wait for at most 250 ms to start polling. */ 1939 rc = RTSemEventWait(pThis->svga.FIFORequestSem, 250);1940 AssertBreak(RT_SUCCESS(rc) || rc == VERR_TIMEOUT );1941 rc = SUPSemEventWaitNoResume(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem, 250); 1942 AssertBreak(RT_SUCCESS(rc) || rc == VERR_TIMEOUT || rc == VERR_INTERRUPTED); 1941 1943 if (pThread->enmState != PDMTHREADSTATE_RUNNING) 1942 1944 { … … 3004 3006 PVGASTATE pThis = (PVGASTATE)pThread->pvUser; 3005 3007 Log(("vmsvgaFIFOLoopWakeUp\n")); 3006 return RTSemEventSignal(pThis->svga.FIFORequestSem);3008 return SUPSemEventSignal(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem); 3007 3009 } 3008 3010 … … 3079 3081 { 3080 3082 AssertReturn(iRegion == 0, VERR_INTERNAL_ERROR); 3081 rc = PDMDevHlpIOPortRegister(pDevIns, (RTIOPORT)GCPhysAddress, cb, 0, vmsvgaIOWrite, vmsvgaIORead, NULL /* OutStr */, NULL /* InStr */, "VMSVGA"); 3083 rc = PDMDevHlpIOPortRegister(pDevIns, (RTIOPORT)GCPhysAddress, cb, 0, 3084 vmsvgaIOWrite, vmsvgaIORead, NULL /* OutStr */, NULL /* InStr */, "VMSVGA"); 3082 3085 if (RT_FAILURE(rc)) 3083 3086 return rc; 3087 if (pThis->fR0Enabled) 3088 { 3089 rc = PDMDevHlpIOPortRegisterR0(pDevIns, (RTIOPORT)GCPhysAddress, cb, 0, 3090 "vmsvgaIOWrite", "vmsvgaIORead", NULL, NULL, "VMSVGA"); 3091 if (RT_FAILURE(rc)) 3092 return rc; 3093 } 3094 if (pThis->fGCEnabled) 3095 { 3096 rc = PDMDevHlpIOPortRegisterRC(pDevIns, (RTIOPORT)GCPhysAddress, cb, 0, 3097 "vmsvgaIOWrite", "vmsvgaIORead", NULL, NULL, "VMSVGA"); 3098 if (RT_FAILURE(rc)) 3099 return rc; 3100 } 3084 3101 3085 3102 pThis->svga.BasePort = GCPhysAddress; … … 3201 3218 */ 3202 3219 PDMR3ThreadResume(pThis->svga.pFIFOIOThread); 3203 RTSemEventSignal(pThis->svga.FIFORequestSem);3220 SUPSemEventSignal(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem); 3204 3221 /* Wait for the end of the command. */ 3205 3222 rc = RTSemEventWait(pThis->svga.FIFOExtCmdSem, RT_INDEFINITE_WAIT); … … 3292 3309 */ 3293 3310 PDMR3ThreadResume(pThis->svga.pFIFOIOThread); 3294 RTSemEventSignal(pThis->svga.FIFORequestSem);3311 SUPSemEventSignal(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem); 3295 3312 /* Wait for the end of the external command. */ 3296 3313 rc = RTSemEventWait(pThis->svga.FIFOExtCmdSem, RT_INDEFINITE_WAIT); … … 3323 3340 /* Reset the FIFO thread. */ 3324 3341 pThis->svga.u8FIFOExtCommand = VMSVGA_FIFO_EXTCMD_RESET; 3325 RTSemEventSignal(pThis->svga.FIFORequestSem);3342 SUPSemEventSignal(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem); 3326 3343 /* Wait for the end of the termination sequence. */ 3327 3344 int rc = RTSemEventWait(pThis->svga.FIFOExtCmdSem, 10000); … … 3376 3393 */ 3377 3394 PDMR3ThreadResume(pThis->svga.pFIFOIOThread); 3378 RTSemEventSignal(pThis->svga.FIFORequestSem); 3395 SUPSemEventSignal(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem); 3396 3379 3397 /* Wait for the end of the termination sequence. */ 3380 3398 rc = RTSemEventWait(pThis->svga.FIFOExtCmdSem, 10000); … … 3396 3414 if (pThis->svga.pFrameBufferBackup) 3397 3415 RTMemFree(pThis->svga.pFrameBufferBackup); 3398 if (pThis->svga.FIFOExtCmdSem) 3416 if (pThis->svga.FIFOExtCmdSem != NIL_RTSEMEVENT) 3417 { 3399 3418 RTSemEventDestroy(pThis->svga.FIFOExtCmdSem); 3400 if (pThis->svga.FIFORequestSem) 3401 RTSemEventDestroy(pThis->svga.FIFORequestSem); 3419 pThis->svga.FIFOExtCmdSem = NIL_RTSEMEVENT; 3420 } 3421 if (pThis->svga.FIFORequestSem != NIL_SUPSEMEVENT) 3422 { 3423 SUPSemEventClose(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem); 3424 pThis->svga.FIFORequestSem = NIL_SUPSEMEVENT; 3425 } 3402 3426 3403 3427 return VINF_SUCCESS; … … 3429 3453 3430 3454 /* Create event semaphore. */ 3431 rc = RTSemEventCreate(&pThis->svga.FIFORequestSem); 3455 pThis->svga.pSupDrvSession = PDMDevHlpGetSupDrvSession(pDevIns); 3456 3457 rc = SUPSemEventCreate(pThis->svga.pSupDrvSession, &pThis->svga.FIFORequestSem); 3432 3458 if (RT_FAILURE(rc)) 3433 3459 { -
trunk/src/VBox/Devices/Graphics/DevVGA.h
r53532 r53751 279 279 /** Port io index register. */ 280 280 uint32_t u32IndexReg; 281 /** The support driver session handle for use with FIFORequestSem. */ 282 R3R0PTRTYPE(PSUPDRVSESSION) pSupDrvSession; 281 283 /** FIFO request semaphore. */ 282 RTSEMEVENTFIFORequestSem;284 SUPSEMEVENT FIFORequestSem; 283 285 /** FIFO external command semaphore. */ 284 R TSEMEVENTFIFOExtCmdSem;286 R3PTRTYPE(RTSEMEVENT) FIFOExtCmdSem; 285 287 /** FIFO IO Thread. */ 286 288 R3PTRTYPE(PPDMTHREAD) pFIFOIOThread;
Note:
See TracChangeset
for help on using the changeset viewer.

