Changeset 109033 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Apr 21, 2025 7:01:04 AM (3 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168562
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GICAll.cpp
r109021 r109033 82 82 #define GIC_IS_INTR_EXT_PPI(a_uIntId) (a_uIntId - GIC_INTID_RANGE_EXT_PPI_START < GIC_INTID_EXT_PPI_RANGE_SIZE) 83 83 #define GIC_IS_INTR_EXT_SPI(a_uIntId) (a_uIntId - GIC_INTID_RANGE_EXT_SPI_START < GIC_INTID_EXT_SPI_RANGE_SIZE) 84 #define GIC_IS_REG_IN_RANGE(a_offReg, a_offFirst, a_cbRegion) ((uint32_t)(a_offReg) - (a_offFirst) < (a_cbRegion))85 84 86 85 -
trunk/src/VBox/VMM/VMMAll/GITSAll.cpp
r109021 r109033 48 48 #define GITS_SAVED_STATE_VERSION 1 49 49 50 /** Gets whether the given register offset is within the specified range. */51 #define GITS_IS_REG_IN_RANGE(a_offReg, a_offFirst, a_cbRegion) ((uint32_t)(a_offReg) - (a_offFirst) < (a_cbRegion))52 53 50 /** GITS diagnostic enum description expansion. 54 51 * The below construct ensures typos in the input to this macro are caught 55 52 * during compile time. */ 56 53 #define GITSDIAG_DESC(a_Name) RT_CONCAT(kGitsDiag_, a_Name) < kGitsDiag_End ? RT_STR(a_Name) : "Ignored" 57 58 /** @def GITS_SET_REG_U64_FULL59 * Sets a 64-bit GITS register.60 * @param a_uReg The 64-bit register to set.61 * @param a_uValue The 64-bit value being written.62 * @param a_fRwMask The 64-bit mask of valid read-write bits.63 */64 #define GITS_SET_REG_U64_FULL(a_uReg, a_uValue, a_fRwMask) \65 do \66 { \67 AssertCompile(sizeof(a_uReg) == sizeof(uint64_t)); \68 AssertCompile(sizeof(a_fRwMask) == sizeof(uint64_t)); \69 (a_uReg) = ((a_uReg) & ~(a_fRwMask)) | ((a_uValue) & (a_fRwMask)); \70 } while (0)71 72 /** @def GITS_SET_REG_U64_LO73 * Sets the lower half of a 64-bit GITS register.74 * @param a_uReg The lower half of a 64-bit register to set.75 * @param a_uValue The value being written (only lower 32-bits are used).76 * @param a_fRwMask The 64-bit mask of valid read-write bits.77 */78 #define GITS_SET_REG_U64_LO(a_uReg, a_uValue, a_fRwMask) \79 do \80 { \81 AssertCompile(sizeof(a_uReg) == sizeof(uint32_t)); \82 AssertCompile(sizeof(a_fRwMask) == sizeof(uint64_t)); \83 (a_uReg) = ((a_uReg) & ~(RT_LO_U32(a_fRwMask))) | ((uint32_t)(a_uValue) & (RT_LO_U32(a_fRwMask))); \84 } while (0)85 86 /** @def GITS_SET_REG_U64_HI87 * Sets the upper half of a 64-bit GITS register.88 * @param a_uReg The upper half of the 64-bit register to set.89 * @param a_uValue The value being written (only lower 32-bits are used).90 * @param a_fRwMask The 64-bit mask of valid read-write bits.91 */92 #define GITS_SET_REG_U64_HI(a_uReg, a_uValue, a_fRwMask) \93 do \94 { \95 AssertCompile(sizeof(a_uReg) == sizeof(uint32_t)); \96 AssertCompile(sizeof(a_fRwMask) == sizeof(uint64_t)); \97 (a_uReg) = ((a_uReg) & ~(RT_HI_U32(a_fRwMask))) | ((uint32_t)(a_uValue) & (RT_HI_U32(a_fRwMask))); \98 } while (0)99 100 /** @def GITS_SET_REG_U32101 * Sets a 32-bit GITS register.102 * @param a_uReg The 32-bit register to set.103 * @param a_uValue The 32-bit value being written (only lower 32-bits are104 * used).105 * @param a_fRwMask The mask of valid read-write bits (only lower 32-bits are106 * used).107 */108 #define GITS_SET_REG_U32(a_uReg, a_uValue, a_fRwMask) \109 do \110 { \111 AssertCompile(sizeof(a_uReg) == sizeof(uint32_t)); \112 (a_uReg) = ((a_uReg) & ~(a_fRwMask)) | ((uint32_t)(a_uValue) & (uint32_t)(a_fRwMask)); \113 } while (0)114 54 115 55 … … 135 75 DECL_HIDDEN_CALLBACK(const char *) gitsGetCtrlRegDescription(uint16_t offReg) 136 76 { 137 if (GI TS_IS_REG_IN_RANGE(offReg, GITS_CTRL_REG_BASER_OFF_FIRST, GITS_CTRL_REG_BASER_RANGE_SIZE))77 if (GIC_IS_REG_IN_RANGE(offReg, GITS_CTRL_REG_BASER_OFF_FIRST, GITS_CTRL_REG_BASER_RANGE_SIZE)) 138 78 return "GITS_BASER<n>"; 139 79 switch (offReg) … … 304 244 */ 305 245 uint64_t uReg; 306 if (GI TS_IS_REG_IN_RANGE(offReg, GITS_CTRL_REG_BASER_OFF_FIRST, GITS_CTRL_REG_BASER_RANGE_SIZE))246 if (GIC_IS_REG_IN_RANGE(offReg, GITS_CTRL_REG_BASER_OFF_FIRST, GITS_CTRL_REG_BASER_RANGE_SIZE)) 307 247 { 308 248 uint16_t const cbReg = sizeof(uint64_t); … … 387 327 * GITS_BASER<n>. 388 328 */ 389 if (GI TS_IS_REG_IN_RANGE(offReg, GITS_CTRL_REG_BASER_OFF_FIRST, GITS_CTRL_REG_BASER_RANGE_SIZE))329 if (GIC_IS_REG_IN_RANGE(offReg, GITS_CTRL_REG_BASER_OFF_FIRST, GITS_CTRL_REG_BASER_RANGE_SIZE)) 390 330 { 391 331 uint16_t const cbReg = sizeof(uint64_t); … … 395 335 { 396 336 if (cb == 8) 397 GI TS_SET_REG_U64_FULL(pGitsDev->aItsTableRegs[idxReg].u, uValue, fRwMask);337 GIC_SET_REG_U64_FULL(pGitsDev->aItsTableRegs[idxReg].u, uValue, fRwMask); 398 338 else 399 GI TS_SET_REG_U64_LO(pGitsDev->aItsTableRegs[idxReg].s.Lo, uValue, fRwMask);339 GIC_SET_REG_U64_LO(pGitsDev->aItsTableRegs[idxReg].s.Lo, uValue, fRwMask); 400 340 } 401 341 else 402 342 { 403 343 Assert(cb == 4); 404 GI TS_SET_REG_U64_HI(pGitsDev->aItsTableRegs[idxReg].s.Hi, uValue, fRwMask);344 GIC_SET_REG_U64_HI(pGitsDev->aItsTableRegs[idxReg].s.Hi, uValue, fRwMask); 405 345 } 406 346 return; … … 412 352 Assert(cb == 4); 413 353 Assert(!(pGitsDev->uTypeReg.u & GITS_BF_CTRL_REG_TYPER_UMSI_IRQ_MASK)); 414 GI TS_SET_REG_U32(pGitsDev->uCtrlReg, uValue, GITS_BF_CTRL_REG_CTLR_RW_MASK);354 GIC_SET_REG_U32(pGitsDev->uCtrlReg, uValue, GITS_BF_CTRL_REG_CTLR_RW_MASK); 415 355 if (RT_BF_GET(uValue, GITS_BF_CTRL_REG_CTLR_ENABLED)) 416 356 pGitsDev->uCtrlReg &= GITS_BF_CTRL_REG_CTLR_QUIESCENT_MASK; … … 420 360 case GITS_CTRL_REG_CBASER_OFF: 421 361 if (cb == 8) 422 GI TS_SET_REG_U64_FULL(pGitsDev->uCmdBaseReg.u, uValue, GITS_CTRL_REG_CBASER_RW_MASK);362 GIC_SET_REG_U64_FULL(pGitsDev->uCmdBaseReg.u, uValue, GITS_CTRL_REG_CBASER_RW_MASK); 423 363 else 424 GI TS_SET_REG_U64_LO(pGitsDev->uCmdBaseReg.s.Lo, uValue, GITS_CTRL_REG_CBASER_RW_MASK);364 GIC_SET_REG_U64_LO(pGitsDev->uCmdBaseReg.s.Lo, uValue, GITS_CTRL_REG_CBASER_RW_MASK); 425 365 gitsCmdQueueThreadWakeUpIfNeeded(pDevIns, pGitsDev); 426 366 break; … … 428 368 case GITS_CTRL_REG_CBASER_OFF + 4: 429 369 Assert(cb == 4); 430 GI TS_SET_REG_U64_HI(pGitsDev->uCmdBaseReg.s.Hi, uValue, GITS_CTRL_REG_CBASER_RW_MASK);370 GIC_SET_REG_U64_HI(pGitsDev->uCmdBaseReg.s.Hi, uValue, GITS_CTRL_REG_CBASER_RW_MASK); 431 371 gitsCmdQueueThreadWakeUpIfNeeded(pDevIns, pGitsDev); 432 372 break; 433 373 434 374 case GITS_CTRL_REG_CWRITER_OFF: 435 GI TS_SET_REG_U32(pGitsDev->uCmdWriteReg, uValue, GITS_CTRL_REG_CWRITER_RW_MASK);375 GIC_SET_REG_U32(pGitsDev->uCmdWriteReg, uValue, GITS_CTRL_REG_CWRITER_RW_MASK); 436 376 gitsCmdQueueThreadWakeUpIfNeeded(pDevIns, pGitsDev); 437 377 break;
Note:
See TracChangeset
for help on using the changeset viewer.