VirtualBox

Changeset 64475 in vbox


Ignore:
Timestamp:
Oct 28, 2016 3:33:27 PM (8 years ago)
Author:
vboxsync
Message:

DevPci: s/pGlobals/pPciRoot/.

File:
1 edited

Legend:

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

    r64474 r64475  
    7979*********************************************************************************************************************************/
    8080/* Prototypes */
    81 static void ich9pciSetIrqInternal(PDEVPCIROOT pGlobals, uint8_t uDevFn, PPDMPCIDEV pPciDev,
     81static void ich9pciSetIrqInternal(PDEVPCIROOT pPciRoot, uint8_t uDevFn, PPDMPCIDEV pPciDev,
    8282                                  int iIrq, int iLevel, uint32_t uTagSrc);
    8383#ifdef IN_RING3
    8484static void ich9pcibridgeReset(PPDMDEVINS pDevIns);
    8585DECLINLINE(PPDMPCIDEV) ich9pciFindBridge(PDEVPCIBUS pBus, uint8_t iBus);
    86 static void ich9pciBiosInitDevice(PDEVPCIROOT pGlobals, uint8_t uBus, uint8_t uDevFn);
     86static void ich9pciBiosInitDevice(PDEVPCIROOT pPciRoot, uint8_t uBus, uint8_t uDevFn);
    8787#endif
    8888
     
    9090// See 7.2.2. PCI Express Enhanced Configuration Mechanism for details of address
    9191// mapping, we take n=6 approach
    92 DECLINLINE(void) ich9pciPhysToPciAddr(PDEVPCIROOT pGlobals, RTGCPHYS GCPhysAddr, PciAddress* pPciAddr)
    93 {
    94     NOREF(pGlobals);
     92DECLINLINE(void) ich9pciPhysToPciAddr(PDEVPCIROOT pPciRoot, RTGCPHYS GCPhysAddr, PciAddress* pPciAddr)
     93{
     94    NOREF(pPciRoot);
    9595    pPciAddr->iBus          = (GCPhysAddr >> 20) & ((1<<6)       - 1);
    9696    pPciAddr->iDeviceFunc   = (GCPhysAddr >> 12) & ((1<<(5+3))   - 1); // 5 bits - device, 3 bits - function
     
    9898}
    9999
    100 DECLINLINE(void) ich9pciStateToPciAddr(PDEVPCIROOT pGlobals, RTGCPHYS addr, PciAddress* pPciAddr)
    101 {
    102     pPciAddr->iBus         = (pGlobals->uConfigReg >> 16) & 0xff;
    103     pPciAddr->iDeviceFunc  = (pGlobals->uConfigReg >> 8) & 0xff;
    104     pPciAddr->iRegister    = (pGlobals->uConfigReg & 0xfc) | (addr & 3);
     100DECLINLINE(void) ich9pciStateToPciAddr(PDEVPCIROOT pPciRoot, RTGCPHYS addr, PciAddress* pPciAddr)
     101{
     102    pPciAddr->iBus         = (pPciRoot->uConfigReg >> 16) & 0xff;
     103    pPciAddr->iDeviceFunc  = (pPciRoot->uConfigReg >> 8) & 0xff;
     104    pPciAddr->iRegister    = (pPciRoot->uConfigReg & 0xfc) | (addr & 3);
    105105}
    106106
     
    215215 * Perform configuration space write.
    216216 */
    217 static int ich9pciDataWriteAddr(PDEVPCIROOT pGlobals, PciAddress* pAddr,
     217static int ich9pciDataWriteAddr(PDEVPCIROOT pPciRoot, PciAddress* pAddr,
    218218                                uint32_t val, int cb, int rcReschedule)
    219219{
     
    227227    if (pAddr->iBus != 0)       /* forward to subordinate bus */
    228228    {
    229         if (pGlobals->PciBus.cBridges)
     229        if (pPciRoot->PciBus.cBridges)
    230230        {
    231231#ifdef IN_RING3 /** @todo do lookup in R0/RC too! */
    232             PPDMPCIDEV pBridgeDevice = ich9pciFindBridge(&pGlobals->PciBus, pAddr->iBus);
     232            PPDMPCIDEV pBridgeDevice = ich9pciFindBridge(&pPciRoot->PciBus, pAddr->iBus);
    233233            if (pBridgeDevice)
    234234            {
     
    244244    else                    /* forward to directly connected device */
    245245    {
    246         R3PTRTYPE(PDMPCIDEV *) pPciDev = pGlobals->PciBus.apDevices[pAddr->iDeviceFunc];
     246        R3PTRTYPE(PDMPCIDEV *) pPciDev = pPciRoot->PciBus.apDevices[pAddr->iDeviceFunc];
    247247        if (pPciDev)
    248248        {
     
    270270 * similarly named functions.
    271271 */
    272 static int ich9pciDataWrite(PDEVPCIROOT pGlobals, uint32_t addr, uint32_t val, int len)
    273 {
    274     LogFlow(("ich9pciDataWrite: config=%08x val=%08x len=%d\n", pGlobals->uConfigReg, val, len));
     272static int ich9pciDataWrite(PDEVPCIROOT pPciRoot, uint32_t addr, uint32_t val, int len)
     273{
     274    LogFlow(("ich9pciDataWrite: config=%08x val=%08x len=%d\n", pPciRoot->uConfigReg, val, len));
    275275
    276276    /* Configuration space mapping enabled? */
    277     if (!(pGlobals->uConfigReg & (1 << 31)))
     277    if (!(pPciRoot->uConfigReg & (1 << 31)))
    278278        return VINF_SUCCESS;
    279279
    280280    /* Decode target device and configuration space register */
    281281    PciAddress aPciAddr;
    282     ich9pciStateToPciAddr(pGlobals, addr, &aPciAddr);
     282    ich9pciStateToPciAddr(pPciRoot, addr, &aPciAddr);
    283283
    284284    /* Perform configuration space write */
    285     return ich9pciDataWriteAddr(pGlobals, &aPciAddr, val, len, VINF_IOM_R3_IOPORT_WRITE);
     285    return ich9pciDataWriteAddr(pPciRoot, &aPciAddr, val, len, VINF_IOM_R3_IOPORT_WRITE);
    286286}
    287287
     
    330330 * Perform configuration space read.
    331331 */
    332 static int ich9pciDataReadAddr(PDEVPCIROOT pGlobals, PciAddress* pPciAddr, int cb,
     332static int ich9pciDataReadAddr(PDEVPCIROOT pPciRoot, PciAddress* pPciAddr, int cb,
    333333                               uint32_t *pu32, int rcReschedule)
    334334{
     
    340340    if (pPciAddr->iBus != 0)    /* forward to subordinate bus */
    341341    {
    342         if (pGlobals->PciBus.cBridges)
     342        if (pPciRoot->PciBus.cBridges)
    343343        {
    344344#ifdef IN_RING3 /** @todo do lookup in R0/RC too! */
    345             PPDMPCIDEV pBridgeDevice = ich9pciFindBridge(&pGlobals->PciBus, pPciAddr->iBus);
     345            PPDMPCIDEV pBridgeDevice = ich9pciFindBridge(&pPciRoot->PciBus, pPciAddr->iBus);
    346346            if (pBridgeDevice)
    347347            {
     
    361361    else                    /* forward to directly connected device */
    362362    {
    363         R3PTRTYPE(PDMPCIDEV *) pPciDev = pGlobals->PciBus.apDevices[pPciAddr->iDeviceFunc];
     363        R3PTRTYPE(PDMPCIDEV *) pPciDev = pPciRoot->PciBus.apDevices[pPciAddr->iDeviceFunc];
    364364        if (pPciDev)
    365365        {
     
    389389 * similarly named functions.
    390390 */
    391 static int ich9pciDataRead(PDEVPCIROOT pGlobals, uint32_t addr, int cb, uint32_t *pu32)
    392 {
    393     LogFlow(("ich9pciDataRead: config=%x cb=%d\n",  pGlobals->uConfigReg, cb));
     391static int ich9pciDataRead(PDEVPCIROOT pPciRoot, uint32_t addr, int cb, uint32_t *pu32)
     392{
     393    LogFlow(("ich9pciDataRead: config=%x cb=%d\n",  pPciRoot->uConfigReg, cb));
    394394
    395395    *pu32 = 0xffffffff;
    396396
    397397    /* Configuration space mapping enabled? */
    398     if (!(pGlobals->uConfigReg & (1 << 31)))
     398    if (!(pPciRoot->uConfigReg & (1 << 31)))
    399399        return VINF_SUCCESS;
    400400
    401401    /* Decode target device and configuration space register */
    402402    PciAddress aPciAddr;
    403     ich9pciStateToPciAddr(pGlobals, addr, &aPciAddr);
     403    ich9pciStateToPciAddr(pPciRoot, addr, &aPciAddr);
    404404
    405405    /* Perform configuration space read */
    406     return ich9pciDataReadAddr(pGlobals, &aPciAddr, cb, pu32, VINF_IOM_R3_IOPORT_READ);
     406    return ich9pciDataReadAddr(pPciRoot, &aPciAddr, cb, pu32, VINF_IOM_R3_IOPORT_READ);
    407407}
    408408
     
    465465
    466466/* Add one more level up request on APIC input line */
    467 DECLINLINE(void) ich9pciApicLevelUp(PDEVPCIROOT pGlobals, int irq_num)
    468 {
    469     ASMAtomicIncU32(&pGlobals->auPciApicIrqLevels[irq_num]);
     467DECLINLINE(void) ich9pciApicLevelUp(PDEVPCIROOT pPciRoot, int irq_num)
     468{
     469    ASMAtomicIncU32(&pPciRoot->auPciApicIrqLevels[irq_num]);
    470470}
    471471
    472472/* Remove one level up request on APIC input line */
    473 DECLINLINE(void) ich9pciApicLevelDown(PDEVPCIROOT pGlobals, int irq_num)
    474 {
    475     ASMAtomicDecU32(&pGlobals->auPciApicIrqLevels[irq_num]);
     473DECLINLINE(void) ich9pciApicLevelDown(PDEVPCIROOT pPciRoot, int irq_num)
     474{
     475    ASMAtomicDecU32(&pPciRoot->auPciApicIrqLevels[irq_num]);
    476476}
    477477
     
    485485    {
    486486        int apic_irq, apic_level;
    487         PDEVPCIROOT pGlobals = DEVPCIBUS_2_DEVPCIROOT(pBus);
     487        PDEVPCIROOT pPciRoot = DEVPCIBUS_2_DEVPCIROOT(pBus);
    488488        int irq_num = ich9pciSlot2ApicIrq(uDevFn >> 3, irq_num1);
    489489
    490490        if ((iLevel & PDM_IRQ_LEVEL_HIGH) == PDM_IRQ_LEVEL_HIGH)
    491             ich9pciApicLevelUp(pGlobals, irq_num);
     491            ich9pciApicLevelUp(pPciRoot, irq_num);
    492492        else if ((iLevel & PDM_IRQ_LEVEL_HIGH) == PDM_IRQ_LEVEL_LOW)
    493             ich9pciApicLevelDown(pGlobals, irq_num);
     493            ich9pciApicLevelDown(pPciRoot, irq_num);
    494494
    495495        apic_irq = irq_num + 0x10;
    496         apic_level = pGlobals->auPciApicIrqLevels[irq_num] != 0;
     496        apic_level = pPciRoot->auPciApicIrqLevels[irq_num] != 0;
    497497        Log3(("ich9pciApicSetIrq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d uTagSrc=%#x\n",
    498498              R3STRING(pPciDev->pszNameR3), irq_num1, iLevel, apic_irq, apic_level, irq_num, uTagSrc));
     
    505505             * PDM_IRQ_LEVEL_HIGH bit set
    506506             */
    507             ich9pciApicLevelDown(pGlobals, irq_num);
     507            ich9pciApicLevelDown(pPciRoot, irq_num);
    508508            pPciDev->Int.s.uIrqPinState = PDM_IRQ_LEVEL_LOW;
    509             apic_level = pGlobals->auPciApicIrqLevels[irq_num] != 0;
     509            apic_level = pPciRoot->auPciApicIrqLevels[irq_num] != 0;
    510510            Log3(("ich9pciApicSetIrq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d uTagSrc=%#x (flop)\n",
    511511                  R3STRING(pPciDev->pszNameR3), irq_num1, iLevel, apic_irq, apic_level, irq_num, uTagSrc));
     
    519519}
    520520
    521 static void ich9pciSetIrqInternal(PDEVPCIROOT pGlobals, uint8_t uDevFn, PPDMPCIDEV pPciDev,
     521static void ich9pciSetIrqInternal(PDEVPCIROOT pPciRoot, uint8_t uDevFn, PPDMPCIDEV pPciDev,
    522522                                  int iIrq, int iLevel, uint32_t uTagSrc)
    523523{
     
    531531        Assert(!MsixIsEnabled(pPciDev));    /* Not allowed -- see note above. */
    532532        LogFlowFunc(("PCI Dev %p : MSI\n", pPciDev));
    533         PPDMDEVINS pDevIns = pGlobals->PciBus.CTX_SUFF(pDevIns);
    534         MsiNotify(pDevIns, pGlobals->PciBus.CTX_SUFF(pPciHlp), pPciDev, iIrq, iLevel, uTagSrc);
     533        PPDMDEVINS pDevIns = pPciRoot->PciBus.CTX_SUFF(pDevIns);
     534        MsiNotify(pDevIns, pPciRoot->PciBus.CTX_SUFF(pPciHlp), pPciDev, iIrq, iLevel, uTagSrc);
    535535        return;
    536536    }
     
    539539    {
    540540        LogFlowFunc(("PCI Dev %p : MSI-X\n", pPciDev));
    541         PPDMDEVINS pDevIns = pGlobals->PciBus.CTX_SUFF(pDevIns);
    542         MsixNotify(pDevIns, pGlobals->PciBus.CTX_SUFF(pPciHlp), pPciDev, iIrq, iLevel, uTagSrc);
     541        PPDMDEVINS pDevIns = pPciRoot->PciBus.CTX_SUFF(pDevIns);
     542        MsixNotify(pDevIns, pPciRoot->PciBus.CTX_SUFF(pPciHlp), pPciDev, iIrq, iLevel, uTagSrc);
    543543        return;
    544544    }
    545545
    546     PDEVPCIBUS     pBus      =     &pGlobals->PciBus;
     546    PDEVPCIBUS     pBus      =     &pPciRoot->PciBus;
    547547    const bool  fIsAcpiDevice = PCIDevGetDeviceId(pPciDev) == 0x7113;
    548548
     
    585585PDMBOTHCBDECL(int) ich9pciMcfgMMIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void const *pv, unsigned cb)
    586586{
    587     PDEVPCIROOT pGlobals = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
     587    PDEVPCIROOT pPciRoot = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
    588588    uint32_t u32 = 0;
    589589    NOREF(pvUser);
     
    595595    /* Decode target device and configuration space register */
    596596    PciAddress aDest;
    597     ich9pciPhysToPciAddr(pGlobals, GCPhysAddr, &aDest);
     597    ich9pciPhysToPciAddr(pPciRoot, GCPhysAddr, &aDest);
    598598
    599599    switch (cb)
     
    614614
    615615    /* Perform configuration space write */
    616     int rc = ich9pciDataWriteAddr(pGlobals, &aDest, u32, cb, VINF_IOM_R3_MMIO_WRITE);
     616    int rc = ich9pciDataWriteAddr(pPciRoot, &aDest, u32, cb, VINF_IOM_R3_MMIO_WRITE);
    617617    PCI_UNLOCK(pDevIns);
    618618
     
    637637PDMBOTHCBDECL(int) ich9pciMcfgMMIORead (PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void *pv, unsigned cb)
    638638{
    639     PDEVPCIROOT pGlobals = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
     639    PDEVPCIROOT pPciRoot = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
    640640    uint32_t    rv;
    641641    NOREF(pvUser);
     
    647647    /* Decode target device and configuration space register */
    648648    PciAddress aDest;
    649     ich9pciPhysToPciAddr(pGlobals, GCPhysAddr, &aDest);
     649    ich9pciPhysToPciAddr(pPciRoot, GCPhysAddr, &aDest);
    650650
    651651    /* Perform configuration space read */
    652     int rc = ich9pciDataReadAddr(pGlobals, &aDest, cb, &rv, VINF_IOM_R3_MMIO_READ);
     652    int rc = ich9pciDataReadAddr(pPciRoot, &aDest, cb, &rv, VINF_IOM_R3_MMIO_READ);
    653653
    654654    if (RT_SUCCESS(rc))
     
    13581358 * Cannot be rescheduled, as already in R3.
    13591359 */
    1360 static uint32_t ich9pciBiosInitReadConfig(PDEVPCIROOT pGlobals, uint8_t uBus, uint8_t uDevFn, uint32_t addr, uint32_t len)
     1360static uint32_t ich9pciBiosInitReadConfig(PDEVPCIROOT pPciRoot, uint8_t uBus, uint8_t uDevFn, uint32_t addr, uint32_t len)
    13611361{
    13621362    PciAddress aPciAddr;
     
    13661366
    13671367    uint32_t u32Val = 0;
    1368     int rc = ich9pciDataReadAddr(pGlobals, &aPciAddr, len, &u32Val, VERR_INTERNAL_ERROR);
     1368    int rc = ich9pciDataReadAddr(pPciRoot, &aPciAddr, len, &u32Val, VERR_INTERNAL_ERROR);
    13691369    AssertRC(rc);
    13701370
     
    13771377 * Cannot be rescheduled, as already in R3.
    13781378 */
    1379 static void ich9pciBiosInitWriteConfig(PDEVPCIROOT pGlobals, uint8_t uBus, uint8_t uDevFn, uint32_t addr, uint32_t val, uint32_t len)
     1379static void ich9pciBiosInitWriteConfig(PDEVPCIROOT pPciRoot, uint8_t uBus, uint8_t uDevFn, uint32_t addr, uint32_t val, uint32_t len)
    13801380{
    13811381    PciAddress aPciAddr;
     
    13841384    aPciAddr.iRegister = addr;
    13851385
    1386     int rc = ich9pciDataWriteAddr(pGlobals, &aPciAddr, val, len, VERR_INTERNAL_ERROR);
     1386    int rc = ich9pciDataWriteAddr(pPciRoot, &aPciAddr, val, len, VERR_INTERNAL_ERROR);
    13871387    AssertRC(rc);
    13881388}
    13891389
    13901390
    1391 static void ich9pciBiosInitSetRegionAddress(PDEVPCIROOT pGlobals, uint8_t uBus, uint8_t uDevFn, int iRegion, uint64_t addr)
     1391static void ich9pciBiosInitSetRegionAddress(PDEVPCIROOT pPciRoot, uint8_t uBus, uint8_t uDevFn, int iRegion, uint64_t addr)
    13921392{
    13931393    uint32_t uReg = ich9pciGetRegionReg(iRegion);
    13941394
    13951395    /* Read memory type first. */
    1396     uint8_t uResourceType = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, uReg, 1);
     1396    uint8_t uResourceType = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, uReg, 1);
    13971397    bool    f64Bit =    (uResourceType & ((uint8_t)(PCI_ADDRESS_SPACE_BAR64 | PCI_ADDRESS_SPACE_IO)))
    13981398                     == PCI_ADDRESS_SPACE_BAR64;
     
    14021402
    14031403    /* Write address of the device. */
    1404     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, uReg, (uint32_t)addr, 4);
     1404    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, uReg, (uint32_t)addr, 4);
    14051405    if (f64Bit)
    1406         ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, uReg + 4, (uint32_t)(addr >> 32), 4);
    1407 }
    1408 
    1409 
    1410 static void ich9pciBiosInitBridge(PDEVPCIROOT pGlobals, uint8_t uBus, uint8_t uDevFn)
     1406        ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, uReg + 4, (uint32_t)(addr >> 32), 4);
     1407}
     1408
     1409
     1410static void ich9pciBiosInitBridge(PDEVPCIROOT pPciRoot, uint8_t uBus, uint8_t uDevFn)
    14111411{
    14121412    Log(("BIOS init bridge: %02x::%02x.%d\n", uBus, uDevFn >> 3, uDevFn & 7));
     
    14171417     * through the bridge but we want to be compliant to the spec.
    14181418     */
    1419     if ((pGlobals->uPciBiosIo % 4096) != 0)
    1420     {
    1421         pGlobals->uPciBiosIo = RT_ALIGN_32(pGlobals->uPciBiosIo, 4*1024);
    1422         Log(("%s: Aligned I/O start address. New address %#x\n", __FUNCTION__, pGlobals->uPciBiosIo));
    1423     }
    1424     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_IO_BASE, (pGlobals->uPciBiosIo >> 8) & 0xf0, 1);
     1419    if ((pPciRoot->uPciBiosIo % 4096) != 0)
     1420    {
     1421        pPciRoot->uPciBiosIo = RT_ALIGN_32(pPciRoot->uPciBiosIo, 4*1024);
     1422        Log(("%s: Aligned I/O start address. New address %#x\n", __FUNCTION__, pPciRoot->uPciBiosIo));
     1423    }
     1424    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_IO_BASE, (pPciRoot->uPciBiosIo >> 8) & 0xf0, 1);
    14251425
    14261426    /* The MMIO range for the bridge must be aligned to a 1MB boundary. */
    1427     if ((pGlobals->uPciBiosMmio % (1024 * 1024)) != 0)
    1428     {
    1429         pGlobals->uPciBiosMmio = RT_ALIGN_32(pGlobals->uPciBiosMmio, 1024*1024);
    1430         Log(("%s: Aligned MMIO start address. New address %#x\n", __FUNCTION__, pGlobals->uPciBiosMmio));
    1431     }
    1432     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_MEMORY_BASE, (pGlobals->uPciBiosMmio >> 16) & UINT32_C(0xffff0), 2);
     1427    if ((pPciRoot->uPciBiosMmio % (1024 * 1024)) != 0)
     1428    {
     1429        pPciRoot->uPciBiosMmio = RT_ALIGN_32(pPciRoot->uPciBiosMmio, 1024*1024);
     1430        Log(("%s: Aligned MMIO start address. New address %#x\n", __FUNCTION__, pPciRoot->uPciBiosMmio));
     1431    }
     1432    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_MEMORY_BASE, (pPciRoot->uPciBiosMmio >> 16) & UINT32_C(0xffff0), 2);
    14331433
    14341434    /* Save values to compare later to. */
    1435     uint32_t u32IoAddressBase = pGlobals->uPciBiosIo;
    1436     uint32_t u32MMIOAddressBase = pGlobals->uPciBiosMmio;
    1437     uint8_t uBridgeBus = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, VBOX_PCI_SECONDARY_BUS, 1);
     1435    uint32_t u32IoAddressBase = pPciRoot->uPciBiosIo;
     1436    uint32_t u32MMIOAddressBase = pPciRoot->uPciBiosMmio;
     1437    uint8_t uBridgeBus = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_SECONDARY_BUS, 1);
    14381438
    14391439    /* Init devices behind the bridge and possibly other bridges as well. */
    14401440    for (int iDev = 0; iDev <= 255; iDev++)
    1441         ich9pciBiosInitDevice(pGlobals, uBridgeBus, iDev);
     1441        ich9pciBiosInitDevice(pPciRoot, uBridgeBus, iDev);
    14421442
    14431443    /*
     
    14471447     * interface. Again this doesn't really matter here but we want to be compliant to the spec.
    14481448     */
    1449     if ((u32IoAddressBase != pGlobals->uPciBiosIo) && ((pGlobals->uPciBiosIo % 4096) != 0))
     1449    if ((u32IoAddressBase != pPciRoot->uPciBiosIo) && ((pPciRoot->uPciBiosIo % 4096) != 0))
    14501450    {
    14511451        /* The upper boundary must be one byte less than a 4KB boundary. */
    1452         pGlobals->uPciBiosIo = RT_ALIGN_32(pGlobals->uPciBiosIo, 4*1024);
    1453     }
    1454 
    1455     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_IO_LIMIT, ((pGlobals->uPciBiosIo >> 8) & 0xf0) - 1, 1);
     1452        pPciRoot->uPciBiosIo = RT_ALIGN_32(pPciRoot->uPciBiosIo, 4*1024);
     1453    }
     1454
     1455    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_IO_LIMIT, ((pPciRoot->uPciBiosIo >> 8) & 0xf0) - 1, 1);
    14561456
    14571457    /* Same with the MMIO limit register but with 1MB boundary here. */
    1458     if ((u32MMIOAddressBase != pGlobals->uPciBiosMmio) && ((pGlobals->uPciBiosMmio % (1024 * 1024)) != 0))
     1458    if ((u32MMIOAddressBase != pPciRoot->uPciBiosMmio) && ((pPciRoot->uPciBiosMmio % (1024 * 1024)) != 0))
    14591459    {
    14601460        /* The upper boundary must be one byte less than a 1MB boundary. */
    1461         pGlobals->uPciBiosMmio = RT_ALIGN_32(pGlobals->uPciBiosMmio, 1024*1024);
    1462     }
    1463     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_MEMORY_LIMIT, ((pGlobals->uPciBiosMmio >> 16) & UINT32_C(0xfff0)) - 1, 2);
     1461        pPciRoot->uPciBiosMmio = RT_ALIGN_32(pPciRoot->uPciBiosMmio, 1024*1024);
     1462    }
     1463    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_MEMORY_LIMIT, ((pPciRoot->uPciBiosMmio >> 16) & UINT32_C(0xfff0)) - 1, 2);
    14641464
    14651465    /*
     
    14681468     * the base register than in the limit register.
    14691469     */
    1470     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_PREF_MEMORY_BASE, 0xfff0, 2);
    1471     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_PREF_MEMORY_LIMIT, 0x0, 2);
    1472     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_PREF_BASE_UPPER32, 0x00, 4);
    1473     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_PREF_LIMIT_UPPER32, 0x00, 4);
    1474 }
    1475 
    1476 static void ich9pciBiosInitDevice(PDEVPCIROOT pGlobals, uint8_t uBus, uint8_t uDevFn)
     1470    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_PREF_MEMORY_BASE, 0xfff0, 2);
     1471    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_PREF_MEMORY_LIMIT, 0x0, 2);
     1472    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_PREF_BASE_UPPER32, 0x00, 4);
     1473    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_PREF_LIMIT_UPPER32, 0x00, 4);
     1474}
     1475
     1476static void ich9pciBiosInitDevice(PDEVPCIROOT pPciRoot, uint8_t uBus, uint8_t uDevFn)
    14771477{
    14781478    uint16_t uDevClass, uVendor, uDevice;
    14791479    uint8_t uCmd;
    14801480
    1481     uDevClass  = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, VBOX_PCI_CLASS_DEVICE, 2);
    1482     uVendor    = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, VBOX_PCI_VENDOR_ID, 2);
    1483     uDevice    = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, VBOX_PCI_DEVICE_ID, 2);
     1481    uDevClass  = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_CLASS_DEVICE, 2);
     1482    uVendor    = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_VENDOR_ID, 2);
     1483    uDevice    = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_DEVICE_ID, 2);
    14841484
    14851485    /* If device is present */
     
    14931493        case 0x0101:
    14941494            /* IDE controller */
    1495             ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, 0x40, 0x8000, 2); /* enable IDE0 */
    1496             ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, 0x42, 0x8000, 2); /* enable IDE1 */
     1495            ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, 0x40, 0x8000, 2); /* enable IDE0 */
     1496            ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, 0x42, 0x8000, 2); /* enable IDE1 */
    14971497            goto default_map;
    14981498            break;
     
    15091509             * ich9pciSetRegionAddress, so don't forget to enable I/O decoding.
    15101510             */
    1511             uCmd = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, VBOX_PCI_COMMAND, 1);
    1512             ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_COMMAND,
     1511            uCmd = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_COMMAND, 1);
     1512            ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_COMMAND,
    15131513                                       uCmd | PCI_COMMAND_IOACCESS,
    15141514                                       1);
     
    15171517        case 0x0604:
    15181518            /* PCI-to-PCI bridge. */
    1519             AssertMsg(pGlobals->uPciBiosBus < 255, ("Too many bridges on the bus\n"));
    1520             ich9pciBiosInitBridge(pGlobals, uBus, uDevFn);
     1519            AssertMsg(pPciRoot->uPciBiosBus < 255, ("Too many bridges on the bus\n"));
     1520            ich9pciBiosInitBridge(pPciRoot, uBus, uDevFn);
    15211521            break;
    15221522        default:
     
    15351535                /* Calculate size - we write all 1s into the BAR, and then evaluate which bits
    15361536                   are cleared. */
    1537                 uint8_t u8ResourceType = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, u32Address, 1);
     1537                uint8_t u8ResourceType = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, u32Address, 1);
    15381538
    15391539                bool f64Bit =    (u8ResourceType & ((uint8_t)(PCI_ADDRESS_SPACE_BAR64 | PCI_ADDRESS_SPACE_IO)))
     
    15441544                if (f64Bit)
    15451545                {
    1546                     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, u32Address,   UINT32_C(0xffffffff), 4);
    1547                     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, u32Address+4, UINT32_C(0xffffffff), 4);
    1548                     cbRegSize64  =            ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, u32Address,   4);
    1549                     cbRegSize64 |= ((uint64_t)ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, u32Address+4, 4) << 32);
     1546                    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, u32Address,   UINT32_C(0xffffffff), 4);
     1547                    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, u32Address+4, UINT32_C(0xffffffff), 4);
     1548                    cbRegSize64  =            ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, u32Address,   4);
     1549                    cbRegSize64 |= ((uint64_t)ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, u32Address+4, 4) << 32);
    15501550                    cbRegSize64 &= ~UINT64_C(0x0f);
    15511551                    cbRegSize64 = (~cbRegSize64) + 1;
     
    15591559                {
    15601560                    uint32_t cbRegSize32;
    1561                     ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, u32Address, UINT32_C(0xffffffff), 4);
    1562                     cbRegSize32 = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, u32Address, 4);
     1561                    ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, u32Address, UINT32_C(0xffffffff), 4);
     1562                    cbRegSize32 = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, u32Address, 4);
    15631563
    15641564                    /* Clear resource information depending on resource type. */
     
    15841584                {
    15851585                    /* Try 32-bit base first. */
    1586                     uint32_t* paddr = fIsPio ? &pGlobals->uPciBiosIo : &pGlobals->uPciBiosMmio;
     1586                    uint32_t* paddr = fIsPio ? &pPciRoot->uPciBiosIo : &pPciRoot->uPciBiosMmio;
    15871587                    uint64_t  uNew = *paddr;
    15881588                    /* Align starting address to region size. */
     
    15991599                            /* Map a 64-bit region above 4GB. */
    16001600                            Assert(!fIsPio);
    1601                             uNew = pGlobals->uPciBiosMmio64;
     1601                            uNew = pPciRoot->uPciBiosMmio64;
    16021602                            /* Align starting address to region size. */
    16031603                            uNew = (uNew + cbRegSize64 - 1) & ~(cbRegSize64 - 1);
    16041604                            LogFunc(("Start address of 64-bit MMIO region %u/%u is %#llx\n", iRegion, iRegion + 1, uNew));
    1605                             ich9pciBiosInitSetRegionAddress(pGlobals, uBus, uDevFn, iRegion, uNew);
     1605                            ich9pciBiosInitSetRegionAddress(pPciRoot, uBus, uDevFn, iRegion, uNew);
    16061606                            fActiveMemRegion = true;
    1607                             pGlobals->uPciBiosMmio64 = uNew + cbRegSize64;
    1608                             Log2Func(("New 64-bit address is %#llx\n", pGlobals->uPciBiosMmio64));
     1607                            pPciRoot->uPciBiosMmio64 = uNew + cbRegSize64;
     1608                            Log2Func(("New 64-bit address is %#llx\n", pPciRoot->uPciBiosMmio64));
    16091609                        }
    16101610                        else
     
    16131613                                    iRegion, uBus, uDevFn >> 3, uDevFn & 7, uVendor, uDevice)); /** @todo make this a VM start failure later. */
    16141614                            /* Undo the mapping mess caused by the size probing. */
    1615                             ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, u32Address, UINT32_C(0), 4);
     1615                            ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, u32Address, UINT32_C(0), 4);
    16161616                        }
    16171617                    }
     
    16191619                    {
    16201620                        LogFunc(("Start address of %s region %u is %#x\n", (fIsPio ? "I/O" : "MMIO"), iRegion, uNew));
    1621                         ich9pciBiosInitSetRegionAddress(pGlobals, uBus, uDevFn, iRegion, uNew);
     1621                        ich9pciBiosInitSetRegionAddress(pPciRoot, uBus, uDevFn, iRegion, uNew);
    16221622                        if (fIsPio)
    16231623                            fActiveIORegion = true;
     
    16341634
    16351635            /* Update the command word appropriately. */
    1636             uCmd = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, VBOX_PCI_COMMAND, 2);
     1636            uCmd = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_COMMAND, 2);
    16371637            if (fActiveMemRegion)
    16381638                uCmd |= PCI_COMMAND_MEMACCESS; /* Enable MMIO access. */
    16391639            if (fActiveIORegion)
    16401640                uCmd |= PCI_COMMAND_IOACCESS; /* Enable I/O space access. */
    1641             ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_COMMAND, uCmd, 2);
     1641            ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_COMMAND, uCmd, 2);
    16421642            break;
    16431643        }
     
    16451645
    16461646    /* map the interrupt */
    1647     uint32_t iPin = ich9pciBiosInitReadConfig(pGlobals, uBus, uDevFn, VBOX_PCI_INTERRUPT_PIN, 1);
     1647    uint32_t iPin = ich9pciBiosInitReadConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_INTERRUPT_PIN, 1);
    16481648    if (iPin != 0)
    16491649    {
     
    16531653        {
    16541654            /* Find bus this device attached to. */
    1655             PDEVPCIBUS pBus = &pGlobals->PciBus;
     1655            PDEVPCIBUS pBus = &pPciRoot->PciBus;
    16561656            while (1)
    16571657            {
     
    16841684        Log(("Using pin %d and IRQ %d for device %02x:%02x.%d\n",
    16851685             iPin, iIrq, uBus, uDevFn>>3, uDevFn&7));
    1686         ich9pciBiosInitWriteConfig(pGlobals, uBus, uDevFn, VBOX_PCI_INTERRUPT_LINE, iIrq, 1);
     1686        ich9pciBiosInitWriteConfig(pPciRoot, uBus, uDevFn, VBOX_PCI_INTERRUPT_LINE, iIrq, 1);
    16871687    }
    16881688}
     
    16921692 *
    16931693 * @returns nothing.
    1694  * @param   pGlobals         Global device instance data used to generate unique bus numbers.
     1694 * @param   pPciRoot         Global device instance data used to generate unique bus numbers.
    16951695 * @param   pBus             The PCI bus to initialize.
    16961696 * @param   uBusPrimary      The primary bus number the bus is connected to.
    16971697 * @param   uBusSecondary    The secondary bus number, i.e. the bus number behind the bridge.
    16981698 */
    1699 static void ich9pciInitBridgeTopology(PDEVPCIROOT pGlobals, PDEVPCIBUS pBus, unsigned uBusPrimary,
     1699static void ich9pciInitBridgeTopology(PDEVPCIROOT pPciRoot, PDEVPCIBUS pBus, unsigned uBusPrimary,
    17001700                                      unsigned uBusSecondary)
    17011701{
     
    17151715                  ("Device is not a PCI bridge but on the list of PCI bridges\n"));
    17161716        PDEVPCIBUS pChildBus = PDMINS_2_DATA(pBridge->Int.s.CTX_SUFF(pDevIns), PDEVPCIBUS);
    1717         pGlobals->uPciBiosBus++;
    1718         ich9pciInitBridgeTopology(pGlobals, pChildBus, uBusSecondary, pGlobals->uPciBiosBus);
    1719     }
    1720     PCIDevSetByte(pBridgeDev, VBOX_PCI_SUBORDINATE_BUS, pGlobals->uPciBiosBus);
     1717        pPciRoot->uPciBiosBus++;
     1718        ich9pciInitBridgeTopology(pPciRoot, pChildBus, uBusSecondary, pPciRoot->uPciBiosBus);
     1719    }
     1720    PCIDevSetByte(pBridgeDev, VBOX_PCI_SUBORDINATE_BUS, pPciRoot->uPciBiosBus);
    17211721    Log2(("ich9pciInitBridgeTopology: for bus %p: primary=%d secondary=%d subordinate=%d\n",
    17221722          pBus,
     
    17301730static DECLCALLBACK(int) ich9pciFakePCIBIOS(PPDMDEVINS pDevIns)
    17311731{
    1732     PDEVPCIROOT pGlobals   = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
     1732    PDEVPCIROOT pPciRoot   = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
    17331733    PVM             pVM        = PDMDevHlpGetVM(pDevIns);
    17341734    uint32_t const  cbBelow4GB = MMR3PhysGetRamSizeBelow4GB(pVM);
     
    17381738     * Set the start addresses.
    17391739     */
    1740     pGlobals->uPciBiosBus    = 0;
    1741     pGlobals->uPciBiosIo     = 0xd000;
    1742     pGlobals->uPciBiosMmio   = cbBelow4GB;
    1743     pGlobals->uPciBiosMmio64 = cbAbove4GB + _4G;
     1740    pPciRoot->uPciBiosBus    = 0;
     1741    pPciRoot->uPciBiosIo     = 0xd000;
     1742    pPciRoot->uPciBiosMmio   = cbBelow4GB;
     1743    pPciRoot->uPciBiosMmio64 = cbAbove4GB + _4G;
    17441744
    17451745    /* NB: Assume that if MMIO range is enabled, it is at the bottom of the memory hole. */
    1746     if (pGlobals->u64PciConfigMMioAddress)
    1747     {
    1748         AssertRelease(pGlobals->u64PciConfigMMioAddress >= cbBelow4GB);
    1749         pGlobals->uPciBiosMmio = pGlobals->u64PciConfigMMioAddress + pGlobals->u64PciConfigMMioLength;
    1750     }
    1751     Log(("cbBelow4GB: %lX, uPciBiosMmio: %lX, cbAbove4GB: %llX\n", cbBelow4GB, pGlobals->uPciBiosMmio, cbAbove4GB));
     1746    if (pPciRoot->u64PciConfigMMioAddress)
     1747    {
     1748        AssertRelease(pPciRoot->u64PciConfigMMioAddress >= cbBelow4GB);
     1749        pPciRoot->uPciBiosMmio = pPciRoot->u64PciConfigMMioAddress + pPciRoot->u64PciConfigMMioLength;
     1750    }
     1751    Log(("cbBelow4GB: %lX, uPciBiosMmio: %lX, cbAbove4GB: %llX\n", cbBelow4GB, pPciRoot->uPciBiosMmio, cbAbove4GB));
    17521752
    17531753    /*
    17541754     * Assign bridge topology, for further routing to work.
    17551755     */
    1756     PDEVPCIBUS pBus = &pGlobals->PciBus;
    1757     ich9pciInitBridgeTopology(pGlobals, pBus, 0, 0);
     1756    PDEVPCIBUS pBus = &pPciRoot->PciBus;
     1757    ich9pciInitBridgeTopology(pPciRoot, pBus, 0, 0);
    17581758
    17591759    /*
     
    17611761     */
    17621762    for (int i = 0; i < 256; i++)
    1763         ich9pciBiosInitDevice(pGlobals, 0, i);
     1763        ich9pciBiosInitDevice(pPciRoot, 0, i);
    17641764
    17651765    return VINF_SUCCESS;
     
    23622362DECLCALLBACK(void) devpciR3InfoPciIrq(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
    23632363{
    2364     PDEVPCIROOT pGlobals = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
     2364    PDEVPCIROOT pPciRoot = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
    23652365    NOREF(pszArgs);
    23662366
    23672367    pHlp->pfnPrintf(pHlp, "PCI I/O APIC IRQ levels:\n");
    23682368    for (int i = 0; i < DEVPCI_APIC_IRQ_PINS; ++i)
    2369         pHlp->pfnPrintf(pHlp, "  IRQ%02d: %u\n", 0x10 + i, pGlobals->auPciApicIrqLevels[i]);
     2369        pHlp->pfnPrintf(pHlp, "  IRQ%02d: %u\n", 0x10 + i, pPciRoot->auPciApicIrqLevels[i]);
    23702370}
    23712371
     
    24152415     * Init data.
    24162416     */
    2417     PDEVPCIROOT pGlobals = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
    2418     PDEVPCIBUS     pBus     = &pGlobals->PciBus;
     2417    PDEVPCIROOT pPciRoot = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
     2418    PDEVPCIBUS     pBus     = &pPciRoot->PciBus;
    24192419    /* Zero out everything */
    2420     memset(pGlobals, 0, sizeof(*pGlobals));
     2420    memset(pPciRoot, 0, sizeof(*pPciRoot));
    24212421    /* And fill values */
    24222422    if (!fUseIoApic)
    24232423        return PDMDEV_SET_ERROR(pDevIns, rc,
    24242424                                N_("Must use IO-APIC with ICH9 chipset"));
    2425     rc = CFGMR3QueryU64Def(pCfg, "McfgBase", &pGlobals->u64PciConfigMMioAddress, 0);
     2425    rc = CFGMR3QueryU64Def(pCfg, "McfgBase", &pPciRoot->u64PciConfigMMioAddress, 0);
    24262426    if (RT_FAILURE(rc))
    24272427        return PDMDEV_SET_ERROR(pDevIns, rc,
    24282428                                N_("Configuration error: Failed to read \"McfgBase\""));
    2429     rc = CFGMR3QueryU64Def(pCfg, "McfgLength", &pGlobals->u64PciConfigMMioLength, 0);
     2429    rc = CFGMR3QueryU64Def(pCfg, "McfgLength", &pPciRoot->u64PciConfigMMioLength, 0);
    24302430    if (RT_FAILURE(rc))
    24312431        return PDMDEV_SET_ERROR(pDevIns, rc,
    24322432                                N_("Configuration error: Failed to read \"McfgLength\""));
    24332433
    2434     pGlobals->fUseIoApic = fUseIoApic;
    2435     pGlobals->pDevInsR3 = pDevIns;
    2436     pGlobals->pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns);
    2437     pGlobals->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
    2438 
    2439     pGlobals->PciBus.fTypePiix3  = false;
    2440     pGlobals->PciBus.fTypeIch9   = true;
    2441     pGlobals->PciBus.fPureBridge = false;
    2442     pGlobals->PciBus.pDevInsR3 = pDevIns;
    2443     pGlobals->PciBus.pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns);
    2444     pGlobals->PciBus.pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
    2445     pGlobals->PciBus.papBridgesR3 = (PPDMPCIDEV *)PDMDevHlpMMHeapAllocZ(pDevIns, sizeof(PPDMPCIDEV) * RT_ELEMENTS(pGlobals->PciBus.apDevices));
    2446     AssertLogRelReturn(pGlobals->PciBus.papBridgesR3, VERR_NO_MEMORY);
     2434    pPciRoot->fUseIoApic = fUseIoApic;
     2435    pPciRoot->pDevInsR3 = pDevIns;
     2436    pPciRoot->pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns);
     2437    pPciRoot->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
     2438
     2439    pPciRoot->PciBus.fTypePiix3  = false;
     2440    pPciRoot->PciBus.fTypeIch9   = true;
     2441    pPciRoot->PciBus.fPureBridge = false;
     2442    pPciRoot->PciBus.pDevInsR3 = pDevIns;
     2443    pPciRoot->PciBus.pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns);
     2444    pPciRoot->PciBus.pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
     2445    pPciRoot->PciBus.papBridgesR3 = (PPDMPCIDEV *)PDMDevHlpMMHeapAllocZ(pDevIns, sizeof(PPDMPCIDEV) * RT_ELEMENTS(pPciRoot->PciBus.apDevices));
     2446    AssertLogRelReturn(pPciRoot->PciBus.papBridgesR3, VERR_NO_MEMORY);
    24472447
    24482448    /*
     
    25232523    }
    25242524
    2525     if (pGlobals->u64PciConfigMMioAddress != 0)
    2526     {
    2527         rc = PDMDevHlpMMIORegister(pDevIns, pGlobals->u64PciConfigMMioAddress, pGlobals->u64PciConfigMMioLength, NULL /*pvUser*/,
     2525    if (pPciRoot->u64PciConfigMMioAddress != 0)
     2526    {
     2527        rc = PDMDevHlpMMIORegister(pDevIns, pPciRoot->u64PciConfigMMioAddress, pPciRoot->u64PciConfigMMioLength, NULL /*pvUser*/,
    25282528                                   IOMMMIO_FLAGS_READ_PASSTHRU | IOMMMIO_FLAGS_WRITE_PASSTHRU,
    25292529                                   ich9pciMcfgMMIOWrite, ich9pciMcfgMMIORead, "MCFG ranges");
    2530         AssertMsgRCReturn(rc, ("rc=%Rrc %#llx/%#llx\n", rc,  pGlobals->u64PciConfigMMioAddress, pGlobals->u64PciConfigMMioLength), rc);
     2530        AssertMsgRCReturn(rc, ("rc=%Rrc %#llx/%#llx\n", rc,  pPciRoot->u64PciConfigMMioAddress, pPciRoot->u64PciConfigMMioLength), rc);
    25312531
    25322532        if (fGCEnabled)
    25332533        {
    2534             rc = PDMDevHlpMMIORegisterRC(pDevIns, pGlobals->u64PciConfigMMioAddress, pGlobals->u64PciConfigMMioLength,
     2534            rc = PDMDevHlpMMIORegisterRC(pDevIns, pPciRoot->u64PciConfigMMioAddress, pPciRoot->u64PciConfigMMioLength,
    25352535                                         NIL_RTRCPTR /*pvUser*/, "ich9pciMcfgMMIOWrite", "ich9pciMcfgMMIORead");
    25362536            AssertRCReturn(rc, rc);
     
    25402540        if (fR0Enabled)
    25412541        {
    2542             rc = PDMDevHlpMMIORegisterR0(pDevIns, pGlobals->u64PciConfigMMioAddress, pGlobals->u64PciConfigMMioLength,
     2542            rc = PDMDevHlpMMIORegisterR0(pDevIns, pPciRoot->u64PciConfigMMioAddress, pPciRoot->u64PciConfigMMioLength,
    25432543                                         NIL_RTR0PTR /*pvUser*/, "ich9pciMcfgMMIOWrite", "ich9pciMcfgMMIORead");
    25442544            AssertRCReturn(rc, rc);
     
    26212621static DECLCALLBACK(void) ich9pciReset(PPDMDEVINS pDevIns)
    26222622{
    2623     PDEVPCIROOT pGlobals = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
    2624     PDEVPCIBUS     pBus     = &pGlobals->PciBus;
     2623    PDEVPCIROOT pPciRoot = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
     2624    PDEVPCIBUS     pBus     = &pPciRoot->PciBus;
    26252625
    26262626    /* PCI-specific reset for each device. */
     
    26702670DECLCALLBACK(void) devpciR3RootRelocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
    26712671{
    2672     PDEVPCIROOT pGlobals = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
    2673     pGlobals->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
     2672    PDEVPCIROOT pPciRoot = PDMINS_2_DATA(pDevIns, PDEVPCIROOT);
     2673    pPciRoot->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
    26742674
    26752675    AssertCompileMemberOffset(DEVPCIROOT, PciBus, 0);
Note: See TracChangeset for help on using the changeset viewer.

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