VirtualBox

Changeset 40907 in vbox for trunk/src/VBox/Devices/Bus


Ignore:
Timestamp:
Apr 13, 2012 8:50:14 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
77458
Message:

Working on tracking IRQs for tracing and logging purposes.

Location:
trunk/src/VBox/Devices/Bus
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Bus/DevPCI.cpp

    r40282 r40907  
    214214RT_C_DECLS_BEGIN
    215215
    216 PDMBOTHCBDECL(void) pciSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel);
    217 PDMBOTHCBDECL(void) pcibridgeSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel);
     216PDMBOTHCBDECL(void) pciSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTag);
     217PDMBOTHCBDECL(void) pcibridgeSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTag);
    218218PDMBOTHCBDECL(int)  pciIOPortAddressWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
    219219PDMBOTHCBDECL(int)  pciIOPortAddressRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
     
    601601}
    602602
    603 static void apic_set_irq(PPCIBUS pBus, uint8_t uDevFn, PCIDevice *pPciDev, int irq_num1, int iLevel, int acpi_irq)
     603static void apic_set_irq(PPCIBUS pBus, uint8_t uDevFn, PCIDevice *pPciDev, int irq_num1, int iLevel, int acpi_irq, uint32_t uTagSrc)
    604604{
    605605    /* This is only allowed to be called with a pointer to the host bus. */
     
    620620        Log3(("apic_set_irq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d\n",
    621621              R3STRING(pPciDev->name), irq_num1, iLevel, apic_irq, apic_level, irq_num));
    622         pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level);
     622        pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level, uTagSrc);
    623623
    624624        if ((iLevel & PDM_IRQ_LEVEL_FLIP_FLOP) == PDM_IRQ_LEVEL_FLIP_FLOP) {
     
    628628            Log3(("apic_set_irq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d (flop)\n",
    629629                  R3STRING(pPciDev->name), irq_num1, iLevel, apic_irq, apic_level, irq_num));
    630             pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level);
     630            pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level, uTagSrc);
    631631        }
    632632    } else {
    633633        Log3(("apic_set_irq: %s: irq_num1=%d level=%d acpi_irq=%d\n",
    634634              R3STRING(pPciDev->name), irq_num1, iLevel, acpi_irq));
    635         pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), acpi_irq, iLevel);
     635        pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), acpi_irq, iLevel, uTagSrc);
    636636    }
    637637}
     
    650650 * @param   iIrq            IRQ number to set.
    651651 * @param   iLevel          IRQ level.
     652 * @param   uTagSrc         The IRQ tag and source ID (for tracing).
    652653 * @remark  uDevFn and pPciDev->devfn are not the same if the device is behind a bridge.
    653654 *          In that case uDevFn will be the slot of the bridge which is needed to calculate the
    654655 *          PIRQ value.
    655656 */
    656 static void pciSetIrqInternal(PPCIGLOBALS pGlobals, uint8_t uDevFn, PPCIDEVICE pPciDev, int iIrq, int iLevel)
     657static void pciSetIrqInternal(PPCIGLOBALS pGlobals, uint8_t uDevFn, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTagSrc)
    657658{
    658659    PPCIBUS     pBus =     &pGlobals->PciBus;
     
    682683                 * PCI device configuration space).
    683684                 */
    684                 apic_set_irq(pBus, uDevFn, pPciDev, -1, iLevel, pPciDev->config[PCI_INTERRUPT_LINE]);
     685                apic_set_irq(pBus, uDevFn, pPciDev, -1, iLevel, pPciDev->config[PCI_INTERRUPT_LINE], uTagSrc);
    685686            else
    686                 apic_set_irq(pBus, uDevFn, pPciDev, iIrq, iLevel, -1);
     687                apic_set_irq(pBus, uDevFn, pPciDev, iIrq, iLevel, -1, uTagSrc);
    687688            return;
    688689        }
     
    732733            pic_level |= pGlobals->acpi_irq_level;
    733734
    734         Log3(("pciSetIrq: %s: iLevel=%d iIrq=%d pic_irq=%d pic_level=%d\n",
    735               R3STRING(pPciDev->name), iLevel, iIrq, pic_irq, pic_level));
    736         pBus->CTX_SUFF(pPciHlp)->pfnIsaSetIrq(pBus->CTX_SUFF(pDevIns), pic_irq, pic_level);
     735        Log3(("pciSetIrq: %s: iLevel=%d iIrq=%d pic_irq=%d pic_level=%d uTagSrc=%#x\n",
     736              R3STRING(pPciDev->name), iLevel, iIrq, pic_irq, pic_level, uTagSrc));
     737        pBus->CTX_SUFF(pPciHlp)->pfnIsaSetIrq(pBus->CTX_SUFF(pDevIns), pic_irq, pic_level, uTagSrc);
    737738
    738739        /** @todo optimize pci irq flip-flop some rainy day. */
    739740        if ((iLevel & PDM_IRQ_LEVEL_FLIP_FLOP) == PDM_IRQ_LEVEL_FLIP_FLOP)
    740             pciSetIrqInternal(pGlobals, uDevFn, pPciDev, iIrq, PDM_IRQ_LEVEL_LOW);
     741            pciSetIrqInternal(pGlobals, uDevFn, pPciDev, iIrq, PDM_IRQ_LEVEL_LOW, uTagSrc);
    741742    }
    742743}
     
    749750 * @param   iIrq            IRQ number to set.
    750751 * @param   iLevel          IRQ level.
    751  */
    752 PDMBOTHCBDECL(void) pciSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel)
    753 {
    754     pciSetIrqInternal(PDMINS_2_DATA(pDevIns, PPCIGLOBALS), pPciDev->devfn, pPciDev, iIrq, iLevel);
     752 * @param   uTagSrc         The IRQ tag and source ID (for tracing).
     753 */
     754PDMBOTHCBDECL(void) pciSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTagSrc)
     755{
     756    pciSetIrqInternal(PDMINS_2_DATA(pDevIns, PPCIGLOBALS), pPciDev->devfn, pPciDev, iIrq, iLevel, uTagSrc);
    755757}
    756758
     
    22462248 * @param   iIrq            IRQ number to set.
    22472249 * @param   iLevel          IRQ level.
    2248  */
    2249 PDMBOTHCBDECL(void) pcibridgeSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel)
     2250 * @param   uTagSrc         The IRQ tag and source ID (for tracing).
     2251 */
     2252PDMBOTHCBDECL(void) pcibridgeSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTagSrc)
    22502253{
    22512254    /*
     
    22732276
    22742277    AssertMsg(pBus->iBus == 0, ("This is not the host pci bus iBus=%d\n", pBus->iBus));
    2275     pciSetIrqInternal(PCIBUS_2_PCIGLOBALS(pBus), uDevFnBridge, pPciDev, iIrqPinBridge, iLevel);
     2278    pciSetIrqInternal(PCIBUS_2_PCIGLOBALS(pBus), uDevFnBridge, pPciDev, iIrqPinBridge, iLevel, uTagSrc);
    22762279}
    22772280
  • trunk/src/VBox/Devices/Bus/DevPciIch9.cpp

    r40282 r40907  
    165165
    166166/* Prototypes */
    167 static void ich9pciSetIrqInternal(PICH9PCIGLOBALS pGlobals, uint8_t uDevFn, PPCIDEVICE pPciDev, int iIrq, int iLevel);
     167static void ich9pciSetIrqInternal(PICH9PCIGLOBALS pGlobals, uint8_t uDevFn, PPCIDEVICE pPciDev,
     168                                  int iIrq, int iLevel, uint32_t uTagSrc);
    168169#ifdef IN_RING3
    169170static void ich9pcibridgeReset(PPDMDEVINS pDevIns);
     
    192193}
    193194
    194 PDMBOTHCBDECL(void) ich9pciSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel)
    195 {
    196     ich9pciSetIrqInternal(PDMINS_2_DATA(pDevIns, PICH9PCIGLOBALS), pPciDev->devfn, pPciDev, iIrq, iLevel);
    197 }
    198 
    199 PDMBOTHCBDECL(void) ich9pcibridgeSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel)
     195PDMBOTHCBDECL(void) ich9pciSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTagSrc)
     196{
     197    ich9pciSetIrqInternal(PDMINS_2_DATA(pDevIns, PICH9PCIGLOBALS), pPciDev->devfn, pPciDev, iIrq, iLevel, uTagSrc);
     198}
     199
     200PDMBOTHCBDECL(void) ich9pcibridgeSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTagSrc)
    200201{
    201202    /*
     
    223224
    224225    AssertMsgReturnVoid(pBus->iBus == 0, ("This is not the host pci bus iBus=%d\n", pBus->iBus));
    225     ich9pciSetIrqInternal(PCIROOTBUS_2_PCIGLOBALS(pBus), uDevFnBridge, pPciDev, iIrqPinBridge, iLevel);
     226    ich9pciSetIrqInternal(PCIROOTBUS_2_PCIGLOBALS(pBus), uDevFnBridge, pPciDev, iIrqPinBridge, iLevel, uTagSrc);
    226227}
    227228
     
    504505}
    505506
    506 static void ich9pciApicSetIrq(PICH9PCIBUS pBus, uint8_t uDevFn, PCIDevice *pPciDev, int irq_num1, int iLevel, int iForcedIrq)
     507static void ich9pciApicSetIrq(PICH9PCIBUS pBus, uint8_t uDevFn, PCIDevice *pPciDev, int irq_num1, int iLevel,
     508                              uint32_t uTagSrc, int iForcedIrq)
    507509{
    508510    /* This is only allowed to be called with a pointer to the root bus. */
     
    522524        apic_irq = irq_num + 0x10;
    523525        apic_level = pGlobals->uaPciApicIrqLevels[irq_num] != 0;
    524         Log3(("ich9pciApicSetIrq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d\n",
    525               R3STRING(pPciDev->name), irq_num1, iLevel, apic_irq, apic_level, irq_num));
    526         pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level);
     526        Log3(("ich9pciApicSetIrq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d uTagSrc=%#x\n",
     527              R3STRING(pPciDev->name), irq_num1, iLevel, apic_irq, apic_level, irq_num, uTagSrc));
     528        pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level, uTagSrc);
    527529
    528530        if ((iLevel & PDM_IRQ_LEVEL_FLIP_FLOP) == PDM_IRQ_LEVEL_FLIP_FLOP)
     
    535537            pPciDev->Int.s.uIrqPinState = PDM_IRQ_LEVEL_LOW;
    536538            apic_level = pGlobals->uaPciApicIrqLevels[irq_num] != 0;
    537             Log3(("ich9pciApicSetIrq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d (flop)\n",
    538                   R3STRING(pPciDev->name), irq_num1, iLevel, apic_irq, apic_level, irq_num));
    539             pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level);
     539            Log3(("ich9pciApicSetIrq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d uTagSrc=%#x (flop)\n",
     540                  R3STRING(pPciDev->name), irq_num1, iLevel, apic_irq, apic_level, irq_num, uTagSrc));
     541            pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level, uTagSrc);
    540542        }
    541543    } else {
    542         Log3(("ich9pciApicSetIrq: (forced) %s: irq_num1=%d level=%d acpi_irq=%d\n",
    543               R3STRING(pPciDev->name), irq_num1, iLevel, iForcedIrq));
    544         pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), iForcedIrq, iLevel);
    545     }
    546 }
    547 
    548 static void ich9pciSetIrqInternal(PICH9PCIGLOBALS pGlobals, uint8_t uDevFn, PPCIDEVICE pPciDev, int iIrq, int iLevel)
     544        Log3(("ich9pciApicSetIrq: (forced) %s: irq_num1=%d level=%d acpi_irq=%d uTagSrc=%#x\n",
     545              R3STRING(pPciDev->name), irq_num1, iLevel, iForcedIrq, uTagSrc));
     546        pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), iForcedIrq, iLevel, uTagSrc);
     547    }
     548}
     549
     550static void ich9pciSetIrqInternal(PICH9PCIGLOBALS pGlobals, uint8_t uDevFn, PPCIDEVICE pPciDev,
     551                                  int iIrq, int iLevel, uint32_t uTagSrc)
    549552{
    550553
     
    554557        {
    555558            PPDMDEVINS pDevIns = pGlobals->aPciBus.CTX_SUFF(pDevIns);
    556             MsiNotify(pDevIns, pGlobals->aPciBus.CTX_SUFF(pPciHlp), pPciDev, iIrq, iLevel);
     559            MsiNotify(pDevIns, pGlobals->aPciBus.CTX_SUFF(pPciHlp), pPciDev, iIrq, iLevel, uTagSrc);
    557560        }
    558561
     
    560563        {
    561564            PPDMDEVINS pDevIns = pGlobals->aPciBus.CTX_SUFF(pDevIns);
    562             MsixNotify(pDevIns, pGlobals->aPciBus.CTX_SUFF(pPciHlp), pPciDev, iIrq, iLevel);
     565            MsixNotify(pDevIns, pGlobals->aPciBus.CTX_SUFF(pPciHlp), pPciDev, iIrq, iLevel, uTagSrc);
    563566        }
    564567        return;
     
    582585             * PCI device configuration space).
    583586             */
    584             ich9pciApicSetIrq(pBus, uDevFn, pPciDev, -1, iLevel, PCIDevGetInterruptLine(pPciDev));
     587            ich9pciApicSetIrq(pBus, uDevFn, pPciDev, -1, iLevel, uTagSrc, PCIDevGetInterruptLine(pPciDev));
    585588        else
    586             ich9pciApicSetIrq(pBus, uDevFn, pPciDev, iIrq, iLevel, -1);
     589            ich9pciApicSetIrq(pBus, uDevFn, pPciDev, iIrq, iLevel, uTagSrc, -1);
    587590    }
    588591}
  • trunk/src/VBox/Devices/Bus/MsiCommon.cpp

    r36663 r40907  
    103103
    104104#ifdef IN_RING3
    105 void     MsiPciConfigWrite(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, uint32_t u32Address, uint32_t val, unsigned len)
     105void     MsiPciConfigWrite(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev,
     106                           uint32_t u32Address, uint32_t val, unsigned len)
    106107{
    107108    int32_t iOff = u32Address - pDev->Int.s.u8MsiCapOffset;
     
    169170                                {
    170171                                    Log(("msi: notify earlier masked pending vector: %d\n", uVector));
    171                                     MsiNotify(pDevIns, pPciHlp, pDev, uVector, PDM_IRQ_LEVEL_HIGH);
     172                                    MsiNotify(pDevIns, pPciHlp, pDev, uVector, PDM_IRQ_LEVEL_HIGH, 0 /*uTagSrc*/);
    172173                                }
    173174                            }
     
    271272}
    272273
    273 void MsiNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel)
     274void MsiNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel, uint32_t uTagSrc)
    274275{
    275276    AssertMsg(msiIsEnabled(pDev), ("Must be enabled to use that"));
     
    304305
    305306    Assert(pPciHlp->pfnIoApicSendMsi != NULL);
    306     pPciHlp->pfnIoApicSendMsi(pDevIns, GCAddr, u32Value);
    307 }
     307    pPciHlp->pfnIoApicSendMsi(pDevIns, GCAddr, u32Value, uTagSrc);
     308}
  • trunk/src/VBox/Devices/Bus/MsiCommon.h

    r36663 r40907  
    3737
    3838/* Device notification (aka interrupt). */
    39 void     MsiNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel);
     39void     MsiNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel, uint32_t uTagSrc);
    4040
    4141#ifdef IN_RING3
     
    5454
    5555/* Device notification (aka interrupt). */
    56 void     MsixNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel);
     56void     MsixNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel, uint32_t uTagSrc);
    5757
    5858#ifdef IN_RING3
  • trunk/src/VBox/Devices/Bus/MsixCommon.cpp

    r39135 r40907  
    109109{
    110110    if (msixIsPending(pDev, iVector) && !msixIsVectorMasked(pDev, iVector))
    111         MsixNotify(pDevIns, pPciHlp, pDev, iVector, 1 /* iLevel */);
     111        MsixNotify(pDevIns, pPciHlp, pDev, iVector, 1 /* iLevel */, 0 /*uTagSrc*/);
    112112}
    113113
     
    239239}
    240240
    241 void MsixNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel)
     241void MsixNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel, uint32_t uTagSrc)
    242242{
    243243    AssertMsg(msixIsEnabled(pDev), ("Must be enabled to use that"));
     
    265265    uint32_t   u32Value = msixGetMsiData(pDev, iVector);
    266266
    267     pPciHlp->pfnIoApicSendMsi(pDevIns, GCAddr, u32Value);
     267    pPciHlp->pfnIoApicSendMsi(pDevIns, GCAddr, u32Value, uTagSrc);
    268268}
    269269
Note: See TracChangeset for help on using the changeset viewer.

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