Changeset 81961 in vbox for trunk/src/VBox/Devices/PC
- Timestamp:
- Nov 18, 2019 7:06:25 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134758
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/PC/DevHPET.cpp
r81959 r81961 239 239 240 240 /** 241 * The shared HPET state.241 * The shared HPET device state. 242 242 */ 243 243 typedef struct HPET 244 244 { 245 /** The HPET helpers - R3 Ptr. */246 PCPDMHPETHLPR3 pHpetHlpR3;247 /** The HPET helpers - R0 Ptr. */248 PCPDMHPETHLPR0 pHpetHlpR0;249 /** The HPET helpers - RC Ptr. */250 PCPDMHPETHLPRC pHpetHlpRC;251 uint32_t u32Padding;252 253 245 /** Timer structures. */ 254 246 HPETTIMER aTimers[RT_MAX(HPET_NUM_TIMERS_PIIX, HPET_NUM_TIMERS_ICH9)]; … … 288 280 289 281 282 /** 283 * The ring-3 specific HPET device state. 284 */ 285 typedef struct HPETR3 286 { 287 /** The HPET helpers. */ 288 PCPDMHPETHLPR3 pHpetHlp; 289 } HPETR3; 290 /** Pointer to the ring-3 specific HPET device state. */ 291 typedef HPETR3 *PHPETR3; 292 293 294 /** 295 * The ring-0 specific HPET device state. 296 */ 297 typedef struct HPETR0 298 { 299 /** The HPET helpers. */ 300 PCPDMHPETHLPR0 pHpetHlp; 301 } HPETR0; 302 /** Pointer to the ring-0 specific HPET device state. */ 303 typedef HPETR0 *PHPETR0; 304 305 306 /** 307 * The raw-mode specific HPET device state. 308 */ 309 typedef struct HPETRC 310 { 311 /** The HPET helpers. */ 312 PCPDMHPETHLPRC pHpetHlp; 313 } HPETRC; 314 /** Pointer to the raw-mode specific HPET device state. */ 315 typedef HPETRC *PHPETRC; 316 317 318 /** The HPET device state specific to the current context. */ 319 typedef CTX_SUFF(HPET) HPETCC; 320 /** Pointer to the HPET device state specific to the current context. */ 321 typedef CTX_SUFF(PHPET) PHPETCC; 322 323 290 324 #ifndef VBOX_DEVICE_STRUCT_TESTCASE 291 325 … … 754 788 * may request retry in R3 - so we must keep state intact. 755 789 */ 756 if ( ((iOldValue ^ u32NewValue) & HPET_CFG_LEGACY) 757 && pThis->pHpetHlpR3 != NIL_RTR3PTR) 790 if ((iOldValue ^ u32NewValue) & HPET_CFG_LEGACY) 758 791 { 759 792 #ifdef IN_RING3 760 rc = pThis->pHpetHlpR3->pfnSetLegacyMode(pDevIns, RT_BOOL(u32NewValue & HPET_CFG_LEGACY)); 761 if (rc != VINF_SUCCESS) 793 PHPETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PHPETCC); 794 if (pThisCC->pHpetHlp != NULL) 795 { 796 rc = pThisCC->pHpetHlp->pfnSetLegacyMode(pDevIns, RT_BOOL(u32NewValue & HPET_CFG_LEGACY)); 797 if (rc != VINF_SUCCESS) 798 { 799 DEVHPET_UNLOCK_BOTH(pDevIns, pThis); 800 break; 801 } 802 } 762 803 #else 763 804 rc = VINF_IOM_R3_MMIO_WRITE; 805 DEVHPET_UNLOCK_BOTH(pDevIns, pThis); 806 break; 764 807 #endif 765 {766 DEVHPET_UNLOCK_BOTH(pDevIns, pThis);767 break;768 }769 808 } 770 809 … … 1041 1080 level-triggered mode yet. */ 1042 1081 if ((pHpetTimer->u64Config & HPET_TN_INT_TYPE) == HPET_TIMER_TYPE_EDGE) 1043 pThis->pHpetHlpR3->pfnSetIrq(pDevIns, irq, PDM_IRQ_LEVEL_FLIP_FLOP); 1082 { 1083 PHPETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PHPETCC); 1084 AssertReturnVoid(pThisCC); 1085 pThisCC->pHpetHlp->pfnSetIrq(pDevIns, irq, PDM_IRQ_LEVEL_FLIP_FLOP); 1086 } 1044 1087 else 1045 1088 AssertFailed(); … … 1268 1311 static DECLCALLBACK(void) hpetR3Relocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta) 1269 1312 { 1270 PHPET pThis = PDMDEVINS_2_DATA(pDevIns, PHPET);1313 PHPETRC pThisRC = PDMINS_2_DATA_RC(pDevIns, PHPETRC); 1271 1314 LogFlow(("hpetR3Relocate:\n")); 1272 NOREF(offDelta); 1273 1274 pThis->pHpetHlpRC = pThis->pHpetHlpR3->pfnGetRCHelpers(pDevIns); 1315 1316 pThisRC->pHpetHlp += offDelta; 1275 1317 } 1276 1318 … … 1281 1323 static DECLCALLBACK(void) hpetR3Reset(PPDMDEVINS pDevIns) 1282 1324 { 1283 PHPET pThis = PDMDEVINS_2_DATA(pDevIns, PHPET); 1325 PHPET pThis = PDMDEVINS_2_DATA(pDevIns, PHPET); 1326 PHPETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PHPETCC); 1284 1327 LogFlow(("hpetR3Reset:\n")); 1285 1328 … … 1335 1378 * Notify the PIT/RTC devices. 1336 1379 */ 1337 if (pThis ->pHpetHlpR3)1338 pThis ->pHpetHlpR3->pfnSetLegacyMode(pDevIns, false /*fActive*/);1380 if (pThisCC->pHpetHlp) 1381 pThisCC->pHpetHlp->pfnSetLegacyMode(pDevIns, false /*fActive*/); 1339 1382 } 1340 1383 … … 1347 1390 PDMDEV_CHECK_VERSIONS_RETURN(pDevIns); 1348 1391 PHPET pThis = PDMDEVINS_2_DATA(pDevIns, PHPET); 1392 PHPETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PHPETCC); 1349 1393 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 1350 1394 … … 1409 1453 PDMHPETREG HpetReg; 1410 1454 HpetReg.u32Version = PDM_HPETREG_VERSION; 1411 rc = PDMDevHlpH PETRegister(pDevIns, &HpetReg, &pThis->pHpetHlpR3);1455 rc = PDMDevHlpHpetRegister(pDevIns, &HpetReg, &pThisCC->pHpetHlp); 1412 1456 AssertRCReturn(rc, rc); 1413 1457 … … 1421 1465 AssertRCReturn(rc, rc); 1422 1466 1423 if (pDevIns->fRCEnabled)1424 {1425 pThis->pHpetHlpRC = pThis->pHpetHlpR3->pfnGetRCHelpers(pDevIns);1426 }1427 1428 if (pDevIns->fR0Enabled)1429 {1430 pThis->pHpetHlpR0 = pThis->pHpetHlpR3->pfnGetR0Helpers(pDevIns);1431 AssertReturn(pThis->pHpetHlpR0 != NIL_RTR0PTR, VERR_INTERNAL_ERROR);1432 }1433 1434 1467 /* 1435 1468 * Register SSM state and info item. … … 1452 1485 PDMDEV_CHECK_VERSIONS_RETURN(pDevIns); 1453 1486 PHPET pThis = PDMDEVINS_2_DATA(pDevIns, PHPET); 1454 //PHPETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PHPETCC);1487 PHPETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PHPETCC); 1455 1488 1456 1489 int rc = PDMDevHlpSetDeviceCritSect(pDevIns, PDMDevHlpCritSectGetNop(pDevIns)); 1490 AssertRCReturn(rc, rc); 1491 1492 PDMHPETREG HpetReg; 1493 HpetReg.u32Version = PDM_HPETREG_VERSION; 1494 rc = PDMDevHlpHpetSetUpContext(pDevIns, &HpetReg, &pThisCC->pHpetHlp); 1457 1495 AssertRCReturn(rc, rc); 1458 1496 … … 1473 1511 /* .uReserved0 = */ 0, 1474 1512 /* .szName = */ "hpet", 1475 /* .fFlags = */ PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RZ ,1513 /* .fFlags = */ PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RZ | PDM_DEVREG_FLAGS_NEW_STYLE, 1476 1514 /* .fClass = */ PDM_DEVREG_CLASS_PIT, 1477 1515 /* .cMaxInstances = */ 1, 1478 1516 /* .uSharedVersion = */ 42, 1479 1517 /* .cbInstanceShared = */ sizeof(HPET), 1480 /* .cbInstanceCC = */ 0,1481 /* .cbInstanceRC = */ 0,1518 /* .cbInstanceCC = */ sizeof(HPETCC), 1519 /* .cbInstanceRC = */ sizeof(HPETRC), 1482 1520 /* .cMaxPciDevices = */ 0, 1483 1521 /* .cMaxMsixVectors = */ 0,
Note:
See TracChangeset
for help on using the changeset viewer.