Changeset 108525 in vbox for trunk/src/VBox/VMM/VMMAll/GICAll.cpp
- Timestamp:
- Mar 12, 2025 7:34:57 AM (6 weeks ago)
- svn:sync-xref-src-repo-rev:
- 167915
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GICAll.cpp
r108523 r108525 2344 2344 uint16_t const cbReg = sizeof(uint32_t); 2345 2345 2346 #if 12347 2346 /* 2348 2347 * GICR_IGROUPR0 and GICR_IGROUPR<n>E. … … 2432 2431 *puValue = 0; 2433 2432 return VINF_SUCCESS; 2434 #else2435 switch (offReg)2436 {2437 case GIC_REDIST_SGI_PPI_REG_ISENABLER0_OFF:2438 case GIC_REDIST_SGI_PPI_REG_ICENABLER0_OFF:2439 *puValue = ASMAtomicReadU32(&pThis->bmIntEnabled);2440 break;2441 case GIC_REDIST_SGI_PPI_REG_ISPENDR0_OFF:2442 case GIC_REDIST_SGI_PPI_REG_ICPENDR0_OFF:2443 *puValue = ASMAtomicReadU32(&pThis->bmIntPending);2444 break;2445 case GIC_REDIST_SGI_PPI_REG_ISACTIVER0_OFF:2446 case GIC_REDIST_SGI_PPI_REG_ICACTIVER0_OFF:2447 *puValue = ASMAtomicReadU32(&pThis->bmIntActive);2448 break;2449 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START:2450 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 4:2451 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 8:2452 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 12:2453 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 16:2454 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 20:2455 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 24:2456 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 28:2457 {2458 /* Figure out the register which is written. */2459 uint8_t idxPrio = offReg - GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START;2460 Assert(idxPrio <= RT_ELEMENTS(pThis->abIntPriority) - sizeof(uint32_t));2461 2462 uint32_t u32Value = 0;2463 for (uint32_t i = idxPrio; i < idxPrio + sizeof(uint32_t); i++)2464 u32Value |= pThis->abIntPriority[i] << ((i - idxPrio) * 8);2465 2466 *puValue = u32Value;2467 break;2468 }2469 case GIC_REDIST_SGI_PPI_REG_ICFGR0_OFF:2470 *puValue = ASMAtomicReadU32(&pThis->u32RegICfg0);2471 break;2472 case GIC_REDIST_SGI_PPI_REG_ICFGR1_OFF:2473 *puValue = ASMAtomicReadU32(&pThis->u32RegICfg1);2474 break;2475 default:2476 AssertReleaseFailed();2477 *puValue = 0;2478 }2479 2480 return VINF_SUCCESS;2481 #endif2482 2433 } 2483 2434 … … 2548 2499 { 2549 2500 VMCPU_ASSERT_EMT(pVCpu); 2550 2551 #if 12552 2501 PCGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PCGICDEV); 2553 2502 … … 2644 2593 AssertReleaseMsgFailed(("offReg=%#RX16\n", offReg)); 2645 2594 return VERR_INTERNAL_ERROR_2; 2646 #else2647 VBOXSTRICTRC rcStrict = VINF_SUCCESS;2648 switch (offReg)2649 {2650 case GIC_REDIST_SGI_PPI_REG_IGROUPR0_OFF:2651 ASMAtomicOrU32(&pThis->u32RegIGrp0, uValue);2652 rcStrict = gicReDistUpdateIrqState(pThis, pVCpu);2653 break;2654 case GIC_REDIST_SGI_PPI_REG_ISENABLER0_OFF:2655 ASMAtomicOrU32(&pThis->bmIntEnabled, uValue);2656 rcStrict = gicReDistUpdateIrqState(pThis, pVCpu);2657 break;2658 case GIC_REDIST_SGI_PPI_REG_ICENABLER0_OFF:2659 ASMAtomicAndU32(&pThis->bmIntEnabled, ~uValue);2660 rcStrict = gicReDistUpdateIrqState(pThis, pVCpu);2661 break;2662 case GIC_REDIST_SGI_PPI_REG_ISPENDR0_OFF:2663 ASMAtomicOrU32(&pThis->bmIntPending, uValue);2664 rcStrict = gicReDistUpdateIrqState(pThis, pVCpu);2665 break;2666 case GIC_REDIST_SGI_PPI_REG_ICPENDR0_OFF:2667 ASMAtomicAndU32(&pThis->bmIntPending, ~uValue);2668 rcStrict = gicReDistUpdateIrqState(pThis, pVCpu);2669 break;2670 case GIC_REDIST_SGI_PPI_REG_ISACTIVER0_OFF:2671 ASMAtomicOrU32(&pThis->bmIntActive, uValue);2672 rcStrict = gicReDistUpdateIrqState(pThis, pVCpu);2673 break;2674 case GIC_REDIST_SGI_PPI_REG_ICACTIVER0_OFF:2675 ASMAtomicAndU32(&pThis->bmIntActive, ~uValue);2676 rcStrict = gicReDistUpdateIrqState(pThis, pVCpu);2677 break;2678 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START:2679 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 4:2680 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 8:2681 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 12:2682 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 16:2683 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 20:2684 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 24:2685 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 28:2686 {2687 /* Figure out the register which is written. */2688 uint8_t idxPrio = offReg - GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START;2689 Assert(idxPrio <= RT_ELEMENTS(pThis->abIntPriority) - sizeof(uint32_t));2690 for (uint32_t i = idxPrio; i < idxPrio + sizeof(uint32_t); i++)2691 {2692 pThis->abIntPriority[i] = (uint8_t)(uValue & 0xff);2693 uValue >>= 8;2694 }2695 break;2696 }2697 case GIC_REDIST_SGI_PPI_REG_ICFGR0_OFF:2698 ASMAtomicWriteU32(&pThis->u32RegICfg0, uValue);2699 break;2700 case GIC_REDIST_SGI_PPI_REG_ICFGR1_OFF:2701 ASMAtomicWriteU32(&pThis->u32RegICfg1, uValue);2702 break;2703 default:2704 //AssertReleaseFailed();2705 break;2706 }2707 return rcStrict;2708 #endif2709 2595 } 2710 2596
Note:
See TracChangeset
for help on using the changeset viewer.