VirtualBox

忽略:
時間撮記:
2023-5-17 上午07:31:36 (22 月 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
157456
訊息:

Devices/Bus: Implement interrupt forwarding for the PCIe bus, bugref:10445

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Devices/Bus/DevPCI.cpp

    r99775 r99820  
    290290DECLINLINE(int) get_pci_irq_level(PDEVPCIROOT pGlobals, int irq_num)
    291291{
    292     return (pGlobals->Piix3.auPciLegacyIrqLevels[irq_num] != 0);
     292    return (pGlobals->u.Piix3.auPciLegacyIrqLevels[irq_num] != 0);
    293293}
    294294
     
    347347            /* As per above treat ACPI in a special way */
    348348            pic_irq = pPciDev->abConfig[PCI_INTERRUPT_LINE];
    349             pGlobals->Piix3.iAcpiIrq = pic_irq;
    350             pGlobals->Piix3.iAcpiIrqLevel = iLevel & PDM_IRQ_LEVEL_HIGH;
     349            pGlobals->u.Piix3.iAcpiIrq = pic_irq;
     350            pGlobals->u.Piix3.iAcpiIrqLevel = iLevel & PDM_IRQ_LEVEL_HIGH;
    351351        }
    352352        else
     
    356356
    357357            if (pPciDev->Int.s.uIrqPinState == PDM_IRQ_LEVEL_HIGH)
    358                 ASMAtomicIncU32(&pGlobals->Piix3.auPciLegacyIrqLevels[irq_num]);
     358                ASMAtomicIncU32(&pGlobals->u.Piix3.auPciLegacyIrqLevels[irq_num]);
    359359            else if (pPciDev->Int.s.uIrqPinState == PDM_IRQ_LEVEL_LOW)
    360                 ASMAtomicDecU32(&pGlobals->Piix3.auPciLegacyIrqLevels[irq_num]);
     360                ASMAtomicDecU32(&pGlobals->u.Piix3.auPciLegacyIrqLevels[irq_num]);
    361361
    362362            /* now we change the pic irq level according to the piix irq mappings */
     
    366366                if ((iLevel & PDM_IRQ_LEVEL_FLIP_FLOP) == PDM_IRQ_LEVEL_FLIP_FLOP)
    367367                {
    368                     ASMAtomicDecU32(&pGlobals->Piix3.auPciLegacyIrqLevels[irq_num]);
     368                    ASMAtomicDecU32(&pGlobals->u.Piix3.auPciLegacyIrqLevels[irq_num]);
    369369                    pPciDev->Int.s.uIrqPinState = PDM_IRQ_LEVEL_LOW;
    370370                }
     
    384384        if (pic_irq == pbCfg[0x63])
    385385            pic_level |= get_pci_irq_level(pGlobals, 3);    /* PIRQD */
    386         if (pic_irq == pGlobals->Piix3.iAcpiIrq)
    387             pic_level |= pGlobals->Piix3.iAcpiIrqLevel;
     386        if (pic_irq == pGlobals->u.Piix3.iAcpiIrq)
     387            pic_level |= pGlobals->u.Piix3.iAcpiIrqLevel;
    388388
    389389        Log3Func(("%s: iLevel=%d iIrq=%d pic_irq=%d pic_level=%d uTagSrc=%#x\n",
     
    988988     * Save IRQ states.
    989989     */
    990     for (unsigned i = 0; i < RT_ELEMENTS(pThis->Piix3.auPciLegacyIrqLevels); i++)
    991         pHlp->pfnSSMPutU32(pSSM, pThis->Piix3.auPciLegacyIrqLevels[i]);
     990    for (unsigned i = 0; i < RT_ELEMENTS(pThis->u.Piix3.auPciLegacyIrqLevels); i++)
     991        pHlp->pfnSSMPutU32(pSSM, pThis->u.Piix3.auPciLegacyIrqLevels[i]);
    992992    for (unsigned i = 0; i < RT_ELEMENTS(pThis->auPciApicIrqLevels); i++)
    993993        pHlp->pfnSSMPutU32(pSSM, pThis->auPciApicIrqLevels[i]);
    994994
    995     pHlp->pfnSSMPutU32(pSSM, pThis->Piix3.iAcpiIrqLevel);
    996     pHlp->pfnSSMPutS32(pSSM, pThis->Piix3.iAcpiIrq);
     995    pHlp->pfnSSMPutU32(pSSM, pThis->u.Piix3.iAcpiIrqLevel);
     996    pHlp->pfnSSMPutS32(pSSM, pThis->u.Piix3.iAcpiIrq);
    997997
    998998    pHlp->pfnSSMPutU32(pSSM, UINT32_MAX);      /* separator */
     
    11701170    if (uVersion >= VBOX_PCI_SAVED_STATE_VERSION_IRQ_STATES)
    11711171    {
    1172         for (uint8_t i = 0; i < RT_ELEMENTS(pThis->Piix3.auPciLegacyIrqLevels); i++)
    1173             pHlp->pfnSSMGetU32V(pSSM, &pThis->Piix3.auPciLegacyIrqLevels[i]);
     1172        for (uint8_t i = 0; i < RT_ELEMENTS(pThis->u.Piix3.auPciLegacyIrqLevels); i++)
     1173            pHlp->pfnSSMGetU32V(pSSM, &pThis->u.Piix3.auPciLegacyIrqLevels[i]);
    11741174        for (uint8_t i = 0; i < RT_ELEMENTS(pThis->auPciApicIrqLevels); i++)
    11751175            pHlp->pfnSSMGetU32V(pSSM, &pThis->auPciApicIrqLevels[i]);
    11761176
    1177         pHlp->pfnSSMGetU32(pSSM, &pThis->Piix3.iAcpiIrqLevel);
    1178         pHlp->pfnSSMGetS32(pSSM, &pThis->Piix3.iAcpiIrq);
     1177        pHlp->pfnSSMGetU32(pSSM, &pThis->u.Piix3.iAcpiIrqLevel);
     1178        pHlp->pfnSSMGetS32(pSSM, &pThis->u.Piix3.iAcpiIrq);
    11791179    }
    11801180
     
    12301230    pHlp->pfnPrintf(pHlp, "PCI IRQ levels:\n");
    12311231    for (int i = 0; i < DEVPCI_LEGACY_IRQ_PINS; ++i)
    1232         pHlp->pfnPrintf(pHlp, "  IRQ%c: %u\n", 'A' + i, pGlobals->Piix3.auPciLegacyIrqLevels[i]);
     1232        pHlp->pfnPrintf(pHlp, "  IRQ%c: %u\n", 'A' + i, pGlobals->u.Piix3.auPciLegacyIrqLevels[i]);
    12331233}
    12341234
     
    13011301    pGlobals->uPciBiosIo   = 0xc000;
    13021302    pGlobals->uPciBiosMmio = 0xf0000000;
    1303     memset((void *)&pGlobals->Piix3.auPciLegacyIrqLevels, 0, sizeof(pGlobals->Piix3.auPciLegacyIrqLevels));
     1303    memset((void *)&pGlobals->u.Piix3.auPciLegacyIrqLevels, 0, sizeof(pGlobals->u.Piix3.auPciLegacyIrqLevels));
    13041304    pGlobals->fUseIoApic   = fUseIoApic;
    13051305    memset((void *)&pGlobals->auPciApicIrqLevels, 0, sizeof(pGlobals->auPciApicIrqLevels));
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette