Changeset 109011 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Apr 17, 2025 10:19:52 AM (3 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168539
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GITSAll.cpp
r109010 r109011 219 219 220 220 221 static RTGCPHYS gitsGetBaseRegPhysAddr(uint64_t uGitsBaseReg) 222 { 223 /* Mask for physical address bits [47:12]. */ 224 static uint64_t const s_auPhysAddrLoMasks[] = 225 { 226 UINT64_C(0x0000fffffffff000), /* 4K bits[47:12] */ 227 UINT64_C(0x0000ffffffffe000), /* 16K bits[47:13] */ 228 UINT64_C(0x0000ffffffff0000), /* 64K bits[47:16] */ 229 UINT64_C(0x0000ffffffff0000) /* 64K bits[47:16] */ 230 }; 231 232 /* Mask for physical address bits [51:48]. */ 233 static uint64_t const s_auPhysAddrHiMasks[] = 234 { 235 UINT64_C(0x0), /* 4K bits[51:48] = 0 */ 236 UINT64_C(0x0), /* 16K bits[51:48] = 0 */ 237 UINT64_C(0x000000000000f000), /* 64K bits[51:48] = bits[15:12] */ 238 UINT64_C(0x000000000000f000) /* 64K bits[51:48] = bits[15:12] */ 239 }; 240 AssertCompile(RT_ELEMENTS(s_auPhysAddrLoMasks) == RT_ELEMENTS(s_auPhysAddrHiMasks)); 241 242 uint8_t const idxPageSize = RT_BF_GET(uGitsBaseReg, GITS_BF_CTRL_REG_BASER_PAGESIZE); 243 Assert(idxPageSize < RT_ELEMENTS(s_auPhysAddrLoMasks)); 244 RTGCPHYS const GCPhys = (uGitsBaseReg & s_auPhysAddrLoMasks[idxPageSize]) 245 | ((uGitsBaseReg & s_auPhysAddrHiMasks[idxPageSize]) << (48 - 12)); 246 return GCPhys; 247 } 248 249 221 250 static void gitsCmdQueueSetError(PPDMDEVINS pDevIns, PGITSDEV pGitsDev, GITSDIAG enmDiag, bool fStallQueue) 222 251 { … … 530 559 pHlp->pfnPrintf(pHlp, " Size = %#x (pages=%u total=%.Rhcb)\n", uSize, cPages, cbItsTable); 531 560 pHlp->pfnPrintf(pHlp, " Page size = %#x (%.Rhcb)\n", idxPageSize, s_acbPageSize[idxPageSize]); 532 pHlp->pfnPrintf(pHlp, " Shareability = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_SHAREABILITY)); 533 pHlp->pfnPrintf(pHlp, " Phys addr = %#RX64\n", uReg & GITS_BF_CTRL_REG_BASER_PHYS_ADDR_MASK); 561 pHlp->pfnPrintf(pHlp, " Shareability = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_SHAREABILITY)); 562 pHlp->pfnPrintf(pHlp, " Phys addr = %#RX64 (addr=%#RX64)\n", uReg & GITS_BF_CTRL_REG_BASER_PHYS_ADDR_MASK, 563 gitsGetBaseRegPhysAddr(uReg)); 534 564 pHlp->pfnPrintf(pHlp, " Entry size = %#x (%u bytes)\n", uEntrySize, uEntrySize > 0 ? uEntrySize + 1 : 0); 535 pHlp->pfnPrintf(pHlp, " Outer cache = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_OUTER_CACHE));565 pHlp->pfnPrintf(pHlp, " Outer cache = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_OUTER_CACHE)); 536 566 pHlp->pfnPrintf(pHlp, " Type = %#x (%s)\n", idxType, pszType); 537 pHlp->pfnPrintf(pHlp, " Inner cache = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INNER_CACHE));538 pHlp->pfnPrintf(pHlp, " Indirect = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INDIRECT)));539 pHlp->pfnPrintf(pHlp, " Valid = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_VALID)));567 pHlp->pfnPrintf(pHlp, " Inner cache = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INNER_CACHE)); 568 pHlp->pfnPrintf(pHlp, " Indirect = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INDIRECT))); 569 pHlp->pfnPrintf(pHlp, " Valid = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_VALID))); 540 570 } 541 571
Note:
See TracChangeset
for help on using the changeset viewer.