- Timestamp:
- Apr 2, 2025 12:10:45 PM (13 days ago)
- svn:sync-xref-src-repo-rev:
- 168275
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GITSAll.cpp
r108828 r108829 35 35 #include <VBox/log.h> 36 36 #include <VBox/gic.h> 37 #include <VBox/vmm/dbgf.h> 37 38 #include <iprt/errcore.h> /* VINF_SUCCESS */ 38 39 #include <iprt/string.h> /* RT_ZERO */ … … 300 301 DECL_HIDDEN_CALLBACK(void) gitsR3DbgInfo(PCGITSDEV pGitsDev, PCDBGFINFOHLP pHlp, const char *pszArgs) 301 302 { 302 RT_NOREF(pGitsDev, pHlp, pszArgs); 303 /** @todo Debug info dump. */ 303 RT_NOREF(pszArgs); 304 305 pHlp->pfnPrintf(pHlp, "GIC ITS:\n"); 306 pHlp->pfnPrintf(pHlp, " uArchRev = %u\n", pGitsDev->uArchRev); 307 pHlp->pfnPrintf(pHlp, " fEnabled = %RTbool\n", pGitsDev->fEnabled); 308 pHlp->pfnPrintf(pHlp, " fUnmappedMsiReporting = %RTbool\n", pGitsDev->fUnmappedMsiReporting); 309 pHlp->pfnPrintf(pHlp, " fQuiescent = %RTbool\n", pGitsDev->fQuiescent); 310 311 /* GITS_BASER<n>. */ 312 for (unsigned i = 0; i < RT_ELEMENTS(pGitsDev->aItsTableRegs); i++) 313 { 314 static uint32_t const s_acbPageSize[] = { _4K, _16K, _64K, _64K }; 315 static const char* const s_apszType[] = { "UnImpl", "Devices", "vPEs", "Intr Collections" }; 316 uint64_t const uReg = pGitsDev->aItsTableRegs[8].u; 317 uint16_t const cPages = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_SIZE) + 1; 318 uint8_t const idxPageSize = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_PAGESIZE); 319 uint64_t const cbItsTable = cPages * s_acbPageSize[idxPageSize]; 320 uint8_t const uEntrySize = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_ENTRY_SIZE); 321 uint8_t const idxType = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_TYPE); 322 const char *pszType = s_apszType[idxType]; 323 pHlp->pfnPrintf(pHlp, " aItsTableReg[%u] = %#RX64\n", i, uReg); 324 pHlp->pfnPrintf(pHlp, " Size = %#x (%u page(s) of %.Rhcb each)\n", cPages - 1, cPages, cbItsTable); 325 pHlp->pfnPrintf(pHlp, " Page size = %#x (%.Rhcb)\n", idxPageSize, s_acbPageSize[idxPageSize]); 326 pHlp->pfnPrintf(pHlp, " Shareability = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_SHAREABILITY)); 327 pHlp->pfnPrintf(pHlp, " Phys addr = %#RX64\n", uReg & GITS_BF_CTRL_REG_BASER_PHYS_ADDR_MASK); 328 pHlp->pfnPrintf(pHlp, " Entry size = %#x (%u bytes)\n", uEntrySize, uEntrySize > 0 ? uEntrySize + 1 : 0); 329 pHlp->pfnPrintf(pHlp, " Outer cache = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_OUTER_CACHE)); 330 pHlp->pfnPrintf(pHlp, " Type = %#x %s\n", idxType, pszType); 331 pHlp->pfnPrintf(pHlp, " Inner cache = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INNER_CACHE)); 332 pHlp->pfnPrintf(pHlp, " Indirect = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INDIRECT))); 333 pHlp->pfnPrintf(pHlp, " Valid = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_VALID))); 334 } 335 pHlp->pfnPrintf(pHlp, "\n"); 336 337 /* GITS_CBASER. */ 338 { 339 uint64_t const uReg = pGitsDev->uCmdBaseReg.u; 340 uint8_t const uSize = RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_SIZE); 341 pHlp->pfnPrintf(pHlp, " uCmdBaseReg = %#RX64\n", uReg); 342 pHlp->pfnPrintf(pHlp, " Size = %#x (%u %.Rhcb pages)\n", uSize, uSize + 1, _4K * (uSize + 1)); 343 pHlp->pfnPrintf(pHlp, " Shareability = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_SHAREABILITY)); 344 pHlp->pfnPrintf(pHlp, " Phys addr = %#RX64\n", uReg & GITS_BF_CTRL_REG_CBASER_PHYS_ADDR_MASK); 345 pHlp->pfnPrintf(pHlp, " Outer cache = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_OUTER_CACHE)); 346 pHlp->pfnPrintf(pHlp, " Inner cache = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_INNER_CACHE)); 347 pHlp->pfnPrintf(pHlp, " Valid = %RTbool\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_VALID)); 348 } 349 350 /* GITS_CREADR. */ 351 { 352 uint32_t const uReg = pGitsDev->uCmdReadReg; 353 pHlp->pfnPrintf(pHlp, " uCmdReadReg = 0x%05RX32 (stalled=%RTbool offset=%RU32)\n", uReg, 354 RT_BF_GET(uReg, GITS_BF_CTRL_REG_CREADR_STALLED), uReg & GITS_BF_CTRL_REG_CREADR_OFFSET_MASK); 355 } 356 357 /* GITS_CWRITER. */ 358 { 359 uint32_t const uReg = pGitsDev->uCmdWriteReg; 360 pHlp->pfnPrintf(pHlp, " uCmdWriteReg = 0x%05RX32 ( retry=%RTbool offset=%RU32)\n", uReg, 361 RT_BF_GET(uReg, GITS_BF_CTRL_REG_CWRITER_RETRY), uReg & GITS_BF_CTRL_REG_CWRITER_OFFSET_MASK); 362 } 304 363 } 305 364 #endif /* IN_RING3 */
Note:
See TracChangeset
for help on using the changeset viewer.