Changeset 108462 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 5, 2025 5:35:56 PM (2 months ago)
- svn:sync-xref-src-repo-rev:
- 167836
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/GICR3.cpp
r108452 r108462 51 51 *********************************************************************************************************************************/ 52 52 /** GIC saved state version. */ 53 #define GIC_SAVED_STATE_VERSION 253 #define GIC_SAVED_STATE_VERSION 3 54 54 55 55 # define GIC_SYSREGRANGE(a_uFirst, a_uLast, a_szName) \ … … 336 336 LogFlowFunc(("\n")); 337 337 338 #define GIC_SSM_PUT_ARRAY(a_pfnSSM, a_Array) \339 do \340 { \341 pHlp->pfnSSMPutU32(pSSM, RT_ELEMENTS(a_Array)); \342 for (uint32_t i = 0; i < RT_ELEMENTS(a_Array); i++) \343 (a_pfnSSM)(pSSM, (a_Array)[i]); \344 } while (0)345 346 338 /* 347 339 * Save per-VM data. … … 361 353 pHlp->pfnSSMPutBool(pSSM, pGicDev->fRangeSelSupport); 362 354 #endif 355 356 /* Distributor state. */ 363 357 pHlp->pfnSSMPutBool(pSSM, pGicDev->fIntrGroup0Enabled); 364 358 pHlp->pfnSSMPutBool(pSSM, pGicDev->fIntrGroup1Enabled); 365 359 pHlp->pfnSSMPutBool(pSSM, pGicDev->fAffRoutingEnabled); 366 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrGroup);367 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrConfig);368 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrEnabled);369 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrPending);370 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrActive);371 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU8, pGicDev->abIntrPriority);372 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->au32IntrRouting);373 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrRoutingMode);360 pHlp->pfnSSMPutMem(pSSM, &pGicDev->bmIntrGroup[0], sizeof(pGicDev->bmIntrGroup)); 361 pHlp->pfnSSMPutMem(pSSM, &pGicDev->bmIntrConfig[0], sizeof(pGicDev->bmIntrConfig)); 362 pHlp->pfnSSMPutMem(pSSM, &pGicDev->bmIntrEnabled[0], sizeof(pGicDev->bmIntrEnabled)); 363 pHlp->pfnSSMPutMem(pSSM, &pGicDev->bmIntrPending[0], sizeof(pGicDev->bmIntrPending)); 364 pHlp->pfnSSMPutMem(pSSM, &pGicDev->bmIntrActive[0], sizeof(pGicDev->bmIntrActive)); 365 pHlp->pfnSSMPutMem(pSSM, &pGicDev->abIntrPriority[0], sizeof(pGicDev->abIntrPriority)); 366 pHlp->pfnSSMPutMem(pSSM, &pGicDev->au32IntrRouting[0], sizeof(pGicDev->au32IntrRouting)); 367 pHlp->pfnSSMPutMem(pSSM, &pGicDev->bmIntrRoutingMode[0], sizeof(pGicDev->bmIntrRoutingMode)); 374 368 375 369 /* … … 381 375 Assert(pGicCpu); 382 376 383 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrGroup); 384 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrConfig); 385 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrEnabled); 386 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrPending); 387 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrActive); 388 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU8, pGicCpu->abIntrPriority); 389 390 pHlp->pfnSSMPutU64(pSSM, pGicCpu->uIccCtlr); 391 GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU8, pGicCpu->abRunningPriorities); 392 pHlp->pfnSSMPutU8(pSSM, pGicCpu->idxRunningPriority); 393 pHlp->pfnSSMPutU8(pSSM, pGicCpu->bInterruptPriority); 394 pHlp->pfnSSMPutU8(pSSM, pGicCpu->bBinaryPtGroup0); 395 pHlp->pfnSSMPutU8(pSSM, pGicCpu->bBinaryPtGroup1); 396 pHlp->pfnSSMPutBool(pSSM, pGicCpu->fIntrGroup0Enabled); 397 pHlp->pfnSSMPutBool(pSSM, pGicCpu->fIntrGroup1Enabled); 377 /* Redistributor state. */ 378 pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrGroup[0], sizeof(pGicCpu->bmIntrGroup)); 379 pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrConfig[0], sizeof(pGicCpu->bmIntrConfig)); 380 pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrEnabled[0], sizeof(pGicCpu->bmIntrEnabled)); 381 pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrPending[0], sizeof(pGicCpu->bmIntrPending)); 382 pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrActive[0], sizeof(pGicCpu->bmIntrActive)); 383 pHlp->pfnSSMPutMem(pSSM, &pGicCpu->abIntrPriority[0], sizeof(pGicCpu->abIntrPriority)); 384 385 /* ICC system register state. */ 386 pHlp->pfnSSMPutU64(pSSM, pGicCpu->uIccCtlr); 387 pHlp->pfnSSMPutMem(pSSM, &pGicCpu->abRunningPriorities[0], sizeof(pGicCpu->abRunningPriorities)); 388 pHlp->pfnSSMPutU8(pSSM, pGicCpu->idxRunningPriority); 389 pHlp->pfnSSMPutU8(pSSM, pGicCpu->bInterruptPriority); 390 pHlp->pfnSSMPutU8(pSSM, pGicCpu->bBinaryPtGroup0); 391 pHlp->pfnSSMPutU8(pSSM, pGicCpu->bBinaryPtGroup1); 392 pHlp->pfnSSMPutBool(pSSM, pGicCpu->fIntrGroup0Enabled); 393 pHlp->pfnSSMPutBool(pSSM, pGicCpu->fIntrGroup1Enabled); 398 394 } 399 395 … … 475 471 return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("Invalid saved-state version %u (%#x)"), uVersion, uVersion); 476 472 477 #define GIC_SSM_GET_ARRAY(a_pfnSSM, a_Array) \478 do \479 { \480 uint32_t cItems = 0; \481 uint32_t const cExpected = RT_ELEMENTS(a_Array); \482 int const rcSsm = pHlp->pfnSSMGetU32(pSSM, &cItems); \483 AssertRCReturn(rcSsm, rcSsm); \484 if (cItems != cExpected) \485 return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, \486 N_("Config mismatch: number of elements in " RT_STR(a_Array) ": got=%u expected=%u"), \487 cItems, cExpected); \488 for (uint32_t i = 0; i < cExpected; i++) \489 (a_pfnSSM)(pSSM, &(a_Array)[i]); \490 } while (0)491 492 473 /* 493 474 * Load per-VM data. … … 508 489 pHlp->pfnSSMGetBool(pSSM, &pGicDev->fRangeSelSupport); 509 490 #endif 491 492 /* Distributor state. */ 510 493 pHlp->pfnSSMGetBool(pSSM, &pGicDev->fIntrGroup0Enabled); 511 494 pHlp->pfnSSMGetBool(pSSM, &pGicDev->fIntrGroup1Enabled); 512 495 pHlp->pfnSSMGetBool(pSSM, &pGicDev->fAffRoutingEnabled); 513 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrGroup);514 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrConfig);515 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrEnabled);516 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrPending);517 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrActive);518 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU8, pGicDev->abIntrPriority);519 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->au32IntrRouting);520 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrRoutingMode);496 pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrGroup[0], sizeof(pGicDev->bmIntrGroup)); 497 pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrConfig[0], sizeof(pGicDev->bmIntrConfig)); 498 pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrEnabled[0], sizeof(pGicDev->bmIntrEnabled)); 499 pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrPending[0], sizeof(pGicDev->bmIntrPending)); 500 pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrActive[0], sizeof(pGicDev->bmIntrActive)); 501 pHlp->pfnSSMGetMem(pSSM, &pGicDev->abIntrPriority[0], sizeof(pGicDev->abIntrPriority)); 502 pHlp->pfnSSMGetMem(pSSM, &pGicDev->au32IntrRouting[0], sizeof(pGicDev->au32IntrRouting)); 503 pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrRoutingMode[0], sizeof(pGicDev->bmIntrRoutingMode)); 521 504 522 505 /* … … 528 511 Assert(pGicCpu); 529 512 530 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrGroup); 531 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrConfig); 532 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrEnabled); 533 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrPending); 534 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrActive); 535 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU8, pGicCpu->abIntrPriority); 536 537 pHlp->pfnSSMGetU64(pSSM, &pGicCpu->uIccCtlr); 538 GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU8, pGicCpu->abRunningPriorities); 539 pHlp->pfnSSMGetU8(pSSM, &pGicCpu->idxRunningPriority); 540 pHlp->pfnSSMGetU8(pSSM, &pGicCpu->bInterruptPriority); 541 pHlp->pfnSSMGetU8(pSSM, &pGicCpu->bBinaryPtGroup0); 542 pHlp->pfnSSMGetU8(pSSM, &pGicCpu->bBinaryPtGroup1); 543 pHlp->pfnSSMGetBool(pSSM, &pGicCpu->fIntrGroup0Enabled); 544 pHlp->pfnSSMGetBool(pSSM, &pGicCpu->fIntrGroup1Enabled); 513 /* Redistributor state. */ 514 pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrGroup[0], sizeof(pGicCpu->bmIntrGroup)); 515 pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrConfig[0], sizeof(pGicCpu->bmIntrConfig)); 516 pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrEnabled[0], sizeof(pGicCpu->bmIntrEnabled)); 517 pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrPending[0], sizeof(pGicCpu->bmIntrPending)); 518 pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrActive[0], sizeof(pGicCpu->bmIntrActive)); 519 pHlp->pfnSSMGetMem(pSSM, &pGicCpu->abIntrPriority[0], sizeof(pGicCpu->abIntrPriority)); 520 521 /* ICC system register state. */ 522 pHlp->pfnSSMGetU64(pSSM, &pGicCpu->uIccCtlr); 523 pHlp->pfnSSMGetMem(pSSM, &pGicCpu->abRunningPriorities[0], sizeof(pGicCpu->abRunningPriorities)); 524 pHlp->pfnSSMGetU8(pSSM, &pGicCpu->idxRunningPriority); 525 pHlp->pfnSSMGetU8(pSSM, &pGicCpu->bInterruptPriority); 526 pHlp->pfnSSMGetU8(pSSM, &pGicCpu->bBinaryPtGroup0); 527 pHlp->pfnSSMGetU8(pSSM, &pGicCpu->bBinaryPtGroup1); 528 pHlp->pfnSSMGetBool(pSSM, &pGicCpu->fIntrGroup0Enabled); 529 pHlp->pfnSSMGetBool(pSSM, &pGicCpu->fIntrGroup1Enabled); 545 530 } 546 531
Note:
See TracChangeset
for help on using the changeset viewer.