Changeset 107957 in vbox for trunk/src/VBox/VMM/VMMAll/GICAll.cpp
- Timestamp:
- Jan 28, 2025 8:38:40 AM (3 months ago)
- svn:sync-xref-src-repo-rev:
- 167204
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GICAll.cpp
r107929 r107957 300 300 301 301 /** 302 * Updates the internal IRQ state and sets or clears the appropirate force action flags. 302 * Updates the internal IRQ state and sets or clears the appropriate force action 303 * flags. 303 304 * 304 305 * @returns Strict VBox status code. … … 385 386 { 386 387 VMCPU_ASSERT_EMT(pVCpu); 387 PGICDEV pThis 388 PGICDEV pThis = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 388 389 389 390 if (offReg >= GIC_DIST_REG_IROUTERn_OFF_START && offReg <= GIC_DIST_REG_IROUTERn_OFF_LAST) … … 437 438 AssertReleaseFailed(); 438 439 break; 439 case GIC_DIST_REG_IPRIORITY n_OFF_START:440 case GIC_DIST_REG_IPRIORITY n_OFF_START + 4: /* These are banked for the PEs and access the redistributor. */440 case GIC_DIST_REG_IPRIORITYRn_OFF_START: 441 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 4: /* These are banked for the PEs and access the redistributor. */ 441 442 { 442 443 PGICCPU pGicVCpu = VMCPU_TO_GICCPU(pVCpu); 443 444 444 445 /* Figure out the register which is written. */ 445 uint8_t idxPrio = offReg - GIC_DIST_REG_IPRIORITY n_OFF_START;446 uint8_t idxPrio = offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START; 446 447 Assert(idxPrio <= RT_ELEMENTS(pThis->abIntPriority) - sizeof(uint32_t)); 447 448 … … 453 454 break; 454 455 } 455 case GIC_DIST_REG_IPRIORITY n_OFF_START + 32: /* Only 32 lines for now. */456 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 32: /* Only 32 lines for now. */ 456 457 { 457 458 /* Figure out the register which is written. */ 458 uint8_t idxPrio = offReg - GIC_DIST_REG_IPRIORITY n_OFF_START - 32;459 uint8_t idxPrio = offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START - 32; 459 460 Assert(idxPrio <= RT_ELEMENTS(pThis->abIntPriority) - sizeof(uint32_t)); 460 461 … … 491 492 break; 492 493 case GIC_DIST_REG_PIDR2_OFF: 493 *puValue = GIC_REDIST_REG_PIDR2_ARCH_REV_SET(GIC_REDIST_REG_PIDR2_ARCH_REV_GICV3); 494 Assert(pThis->uArchRev <= GIC_DIST_REG_PIDR2_ARCH_REV_GICV4); 495 *puValue = GIC_DIST_REG_PIDR2_ARCH_REV_SET(pThis->uArchRev); 494 496 break; 495 497 case GIC_DIST_REG_IIDR_OFF: … … 519 521 { 520 522 VMCPU_ASSERT_EMT(pVCpu); RT_NOREF(pVCpu); 521 PGICDEV pThis 522 PVMCC 523 PGICDEV pThis = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 524 PVMCC pVM = PDMDevHlpGetVM(pDevIns); 523 525 524 526 if (offReg >= GIC_DIST_REG_IROUTERn_OFF_START && offReg <= GIC_DIST_REG_IROUTERn_OFF_LAST) … … 586 588 rcStrict = gicDistUpdateIrqState(pVM, pThis); 587 589 break; 588 case GIC_DIST_REG_IPRIORITY n_OFF_START: /* These are banked for the PEs and access the redistributor. */589 case GIC_DIST_REG_IPRIORITY n_OFF_START + 4:590 case GIC_DIST_REG_IPRIORITY n_OFF_START + 8:591 case GIC_DIST_REG_IPRIORITY n_OFF_START + 12:592 case GIC_DIST_REG_IPRIORITY n_OFF_START + 16:593 case GIC_DIST_REG_IPRIORITY n_OFF_START + 20:594 case GIC_DIST_REG_IPRIORITY n_OFF_START + 24:595 case GIC_DIST_REG_IPRIORITY n_OFF_START + 28:590 case GIC_DIST_REG_IPRIORITYRn_OFF_START: /* These are banked for the PEs and access the redistributor. */ 591 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 4: 592 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 8: 593 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 12: 594 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 16: 595 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 20: 596 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 24: 597 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 28: 596 598 { 597 599 PGICCPU pGicVCpu = VMCPU_TO_GICCPU(pVCpu); 598 600 599 601 /* Figure out the register which is written. */ 600 uint8_t idxPrio = offReg - GIC_DIST_REG_IPRIORITY n_OFF_START;602 uint8_t idxPrio = offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START; 601 603 Assert(idxPrio <= RT_ELEMENTS(pGicVCpu->abIntPriority) - sizeof(uint32_t)); 602 604 for (uint32_t i = idxPrio; i < idxPrio + sizeof(uint32_t); i++) … … 607 609 break; 608 610 } 609 case GIC_DIST_REG_IPRIORITY n_OFF_START + 32: /* Only 32 lines for now. */610 case GIC_DIST_REG_IPRIORITY n_OFF_START + 36:611 case GIC_DIST_REG_IPRIORITY n_OFF_START + 40:612 case GIC_DIST_REG_IPRIORITY n_OFF_START + 44:613 case GIC_DIST_REG_IPRIORITY n_OFF_START + 48:614 case GIC_DIST_REG_IPRIORITY n_OFF_START + 52:615 case GIC_DIST_REG_IPRIORITY n_OFF_START + 56:616 case GIC_DIST_REG_IPRIORITY n_OFF_START + 60:611 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 32: /* Only 32 lines for now. */ 612 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 36: 613 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 40: 614 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 44: 615 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 48: 616 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 52: 617 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 56: 618 case GIC_DIST_REG_IPRIORITYRn_OFF_START + 60: 617 619 { 618 620 /* Figure out the register which is written. */ 619 uint8_t idxPrio = offReg - GIC_DIST_REG_IPRIORITY n_OFF_START - 32;621 uint8_t idxPrio = offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START - 32; 620 622 Assert(idxPrio <= RT_ELEMENTS(pThis->abIntPriority) - sizeof(uint32_t)); 621 623 for (uint32_t i = idxPrio; i < idxPrio + sizeof(uint32_t); i++) … … 686 688 DECLINLINE(VBOXSTRICTRC) gicReDistRegisterRead(PPDMDEVINS pDevIns, PVMCPUCC pVCpu, uint32_t idRedist, uint16_t offReg, uint32_t *puValue) 687 689 { 688 RT_NOREF(pDevIns);690 PGICDEV pThis = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 689 691 690 692 switch (offReg) … … 702 704 break; 703 705 case GIC_REDIST_REG_PIDR2_OFF: 704 *puValue = GIC_REDIST_REG_PIDR2_ARCH_REV_SET(GIC_REDIST_REG_PIDR2_ARCH_REV_GICV3); 706 Assert(pThis->uArchRev <= GIC_DIST_REG_PIDR2_ARCH_REV_GICV4); 707 *puValue = GIC_REDIST_REG_PIDR2_ARCH_REV_SET(pThis->uArchRev); 705 708 break; 706 709 default: … … 741 744 *puValue = ASMAtomicReadU32(&pThis->bmIntActive); 742 745 break; 743 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START:744 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 4:745 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 8:746 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 12:747 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 16:748 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 20:749 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 24:750 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 28:746 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START: 747 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 4: 748 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 8: 749 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 12: 750 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 16: 751 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 20: 752 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 24: 753 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 28: 751 754 { 752 755 /* Figure out the register which is written. */ 753 uint8_t idxPrio = offReg - GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START;756 uint8_t idxPrio = offReg - GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START; 754 757 Assert(idxPrio <= RT_ELEMENTS(pThis->abIntPriority) - sizeof(uint32_t)); 755 758 … … 875 878 rcStrict = gicReDistUpdateIrqState(pThis, pVCpu); 876 879 break; 877 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START:878 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 4:879 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 8:880 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 12:881 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 16:882 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 20:883 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 24:884 case GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START + 28:880 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START: 881 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 4: 882 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 8: 883 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 12: 884 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 16: 885 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 20: 886 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 24: 887 case GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START + 28: 885 888 { 886 /* Figure out the register wh ch is written. */887 uint8_t idxPrio = offReg - GIC_REDIST_SGI_PPI_REG_IPRIORITY n_OFF_START;889 /* Figure out the register which is written. */ 890 uint8_t idxPrio = offReg - GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START; 888 891 Assert(idxPrio <= RT_ELEMENTS(pThis->abIntPriority) - sizeof(uint32_t)); 889 892 for (uint32_t i = idxPrio; i < idxPrio + sizeof(uint32_t); i++) … … 1416 1419 1417 1420 /* 1418 * Determine the redistributor being targeted. Each redistributor takes GIC_REDIST_REG_FRAME_SIZE + GIC_REDIST_SGI_PPI_REG_FRAME_SIZE bytes 1421 * Determine the redistributor being targeted. Each redistributor takes 1422 * GIC_REDIST_REG_FRAME_SIZE + GIC_REDIST_SGI_PPI_REG_FRAME_SIZE bytes 1419 1423 * and the redistributors are adjacent. 1420 1424 */ … … 1456 1460 1457 1461 /* 1458 * Determine the redistributor being targeted. Each redistributor takes GIC_REDIST_REG_FRAME_SIZE + GIC_REDIST_SGI_PPI_REG_FRAME_SIZE bytes 1462 * Determine the redistributor being targeted. Each redistributor takes 1463 * GIC_REDIST_REG_FRAME_SIZE + GIC_REDIST_SGI_PPI_REG_FRAME_SIZE bytes 1459 1464 * and the redistributors are adjacent. 1460 1465 */
Note:
See TracChangeset
for help on using the changeset viewer.