Changeset 108779 in vbox for trunk/src/VBox/VMM/VMMAll/GICAll.cpp
- Timestamp:
- Mar 28, 2025 10:09:33 AM (6 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168212
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GICAll.cpp
r108778 r108779 3278 3278 RT_NOREF_PV(pvUser); 3279 3279 Assert(!(off & 0x3)); 3280 Assert(cb == 4); RT_NOREF_PV(cb);3280 Assert(cb == 8 || cb == 4); 3281 3281 3282 3282 PCGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PCGICDEV); 3283 3283 PCGITSDEV pGitsDev = &pGicDev->Gits; 3284 3285 VBOXSTRICTRC rcStrict; 3284 uint64_t uReg; 3286 3285 if (off < GITS_REG_FRAME_SIZE) 3287 3286 { 3288 3287 /* Control registers space. */ 3289 3288 uint16_t const offReg = off & 0xfffc; 3290 uint32_t uValue = 0; 3291 rcStrict = gitsMmioReadCtrl(pGitsDev, offReg, &uValue); 3292 *(uint32_t *)pv = uValue; 3293 LogFlowFunc(("offReg=%#RX16 (%s) read %#RX32\n", offReg, gitsGetCtrlRegDescription(offReg), uValue)); 3289 uReg = gitsMmioReadCtrl(pGitsDev, offReg, cb); 3290 LogFlowFunc(("offReg=%#RX16 (%s) read %#RX64\n", offReg, gitsGetCtrlRegDescription(offReg), uReg)); 3294 3291 } 3295 3292 else 3296 3293 { 3297 3294 /* Translation registers space. */ 3298 off -= GITS_REG_FRAME_SIZE; 3299 uint16_t const offReg = off & 0xfffc; 3300 uint32_t uValue = 0; 3301 rcStrict = gitsMmioReadTranslate(pGitsDev, offReg, &uValue); 3302 *(uint32_t *)pv = uValue; 3303 LogFlowFunc(("offReg=%#RX16 (%s) read %#RX32\n", offReg, gitsGetTranslationRegDescription(offReg), uValue)); 3304 } 3305 return rcStrict; 3295 uint16_t const offReg = (off - GITS_REG_FRAME_SIZE) & 0xfffc; 3296 uReg = gitsMmioReadTranslate(pGitsDev, offReg, cb); 3297 LogFlowFunc(("offReg=%#RX16 (%s) read %#RX64\n", offReg, gitsGetTranslationRegDescription(offReg), uReg)); 3298 } 3299 3300 if (cb == 8) 3301 *(uint64_t *)pv = uReg; 3302 else 3303 *(uint32_t *)pv = uReg; 3304 return VINF_SUCCESS; 3306 3305 } 3307 3306 … … 3314 3313 RT_NOREF_PV(pvUser); 3315 3314 Assert(!(off & 0x3)); 3316 Assert(cb == 4); RT_NOREF_PV(cb);3315 Assert(cb == 8 || cb == 4); 3317 3316 3318 3317 PGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 3319 3318 PGITSDEV pGitsDev = &pGicDev->Gits; 3320 3319 3321 VBOXSTRICTRC rcStrict;3320 uint64_t const uValue = cb == 8 ? *(uint64_t *)pv : *(uint32_t *)pv; 3322 3321 if (off < GITS_REG_FRAME_SIZE) 3323 3322 { 3324 3323 /* Control registers space. */ 3325 3324 uint16_t const offReg = off & 0xfffc; 3326 uint32_t const uValue = *(uint32_t *)pv; 3327 rcStrict = gitsMmioWriteCtrl(pGitsDev, offReg, uValue); 3328 *(uint32_t *)pv = uValue; 3329 LogFlowFunc(("offReg=%#RX16 (%s) written %#RX32\n", offReg, gitsGetCtrlRegDescription(offReg), uValue)); 3325 gitsMmioWriteCtrl(pGitsDev, offReg, uValue, cb); 3326 LogFlowFunc(("offReg=%#RX16 (%s) written %#RX64\n", offReg, gitsGetCtrlRegDescription(offReg), uValue)); 3330 3327 } 3331 3328 else 3332 3329 { 3333 3330 /* Translation registers space. */ 3334 off -= GITS_REG_FRAME_SIZE; 3335 uint16_t const offReg = off & 0xfffc; 3336 uint32_t const uValue = *(uint32_t *)pv; 3337 rcStrict = gitsMmioWriteTranslate(pGitsDev, offReg, uValue); 3338 *(uint32_t *)pv = uValue; 3339 LogFlowFunc(("offReg=%#RX16 (%s) written %#RX32\n", offReg, gitsGetTranslationRegDescription(offReg), uValue)); 3340 } 3341 return rcStrict; 3331 uint16_t const offReg = (off - GITS_REG_FRAME_SIZE) & 0xfffc; 3332 gitsMmioWriteTranslate(pGitsDev, offReg, uValue, cb); 3333 LogFlowFunc(("offReg=%#RX16 (%s) written %#RX64\n", offReg, gitsGetTranslationRegDescription(offReg), uValue)); 3334 } 3335 return VINF_SUCCESS; 3342 3336 } 3343 3337
Note:
See TracChangeset
for help on using the changeset viewer.