VirtualBox

vbox的更動 11169 路徑 trunk/src/VBox/Devices/Bus


忽略:
時間撮記:
2008-8-6 上午12:50:03 (16 年 以前)
作者:
vboxsync
訊息:

#1865: PCI.

檔案:
修改 1 筆資料

圖例:

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

    • 屬性 svn:keywords 設為 Author Date Id Revision
    r10202 r11169  
    1 /* $Id: $ */
     1/* $Id$ */
    22/** @file
    3  * PCI BUS Device.
     3 * DevPCI - PCI BUS Device.
    44 */
    55
     
    5656#include <iprt/string.h>
    5757
    58 #include "Builtins.h"
     58#include "../Builtins.h"
    5959
    6060
     
    6868#define PCI_LOCK(pDevIns, rc) \
    6969    do { \
    70         int rc2 = PDMINS2DATA(pDevIns, PCIBus *)->CTXALLSUFF(pPciHlp)->pfnLock((pDevIns), rc); \
     70        int rc2 = PDMINS_2_DATA(pDevIns, PCIBus *)->CTX_SUFF(pPciHlp)->pfnLock((pDevIns), rc); \
    7171        if (rc2 != VINF_SUCCESS) \
    7272            return rc2; \
    7373    } while (0)
    7474#define PCI_UNLOCK(pDevIns) \
    75     PDMINS2DATA(pDevIns, PCIBus *)->CTXALLSUFF(pPciHlp)->pfnUnlock(pDevIns)
     75    PDMINS_2_DATA(pDevIns, PCIBus *)->CTX_SUFF(pPciHlp)->pfnUnlock(pDevIns)
    7676
    7777
     
    101101 * These are currently put in the PCIBus structure since we've
    102102 * only got one PCI bus in the current VM configurations. This
    103  * makes life somewhat simpler in GC.
     103 * makes life somewhat simpler in RC.
    104104 */
    105105typedef struct PCIGLOBALS
     
    142142    R3PTRTYPE(PPCIDEVICE) devices[256];
    143143
    144     /** HC pointer to the device instance. */
    145     R3R0PTRTYPE(PPDMDEVINS) pDevInsHC;
     144    /** R3 pointer to the device instance. */
     145    PPDMDEVINSR3        pDevInsR3;
    146146    /** Pointer to the PCI R3  helpers. */
    147     PCPDMPCIHLPR3           pPciHlpR3;
    148 
    149     /** GC pointer to the device instance. */
    150     PPDMDEVINSGC        pDevInsGC;
    151     /** Pointer to the PCI GC helpers. */
    152     PCPDMPCIHLPGC       pPciHlpGC;
     147    PCPDMPCIHLPR3       pPciHlpR3;
     148
     149    /** R0 pointer to the device instance. */
     150    PPDMDEVINSR0        pDevInsR0;
    153151    /** Pointer to the PCI R0 helpers. */
    154152    PCPDMPCIHLPR0       pPciHlpR0;
     153
     154    /** RC pointer to the device instance. */
     155    PPDMDEVINSRC        pDevInsRC;
     156    /** Pointer to the PCI RC helpers. */
     157    PCPDMPCIHLPRC       pPciHlpRC;
    155158
    156159    /** The PCI device for the PCI bridge. */
     
    168171
    169172/** Converts a bus instance pointer to a device instance pointer. */
    170 #define PCIBUS2DEVINS(pPciBus)    ((pPciBus)->CTXSUFF(pDevIns))
     173#define PCIBUS_2_DEVINS(pPciBus)        ((pPciBus)->CTX_SUFF(pDevIns))
    171174/** Converts a device instance pointer to a PCIGLOBALS pointer. */
    172 #define DEVINS2PCIGLOBALS(pDevIns) ((PPCIGLOBALS)(&PDMINS2DATA(pDevIns, PPCIBUS)->Globals))
     175#define DEVINS_2_PCIGLOBALS(pDevIns)    ((PPCIGLOBALS)(&PDMINS_2_DATA(pDevIns, PPCIBUS)->Globals))
    173176/** Converts a bus instance pointer to a PCIGLOBALS pointer. */
    174 #define PCIBUS2PCIGLOBALS(pPciBus) ((PPCIGLOBALS)(&pPciBus->Globals))
     177#define PCIBUS_2_PCIGLOBALS(pPciBus)    ((PPCIGLOBALS)(&pPciBus->Globals))
    175178
    176179
     
    279282                        }
    280283                    } else {
    281                         RTGCPHYS GCPhysBase = r->addr + PCIBUS2PCIGLOBALS(pBus)->pci_mem_base;
     284                        RTGCPHYS GCPhysBase = r->addr + PCIBUS_2_PCIGLOBALS(pBus)->pci_mem_base;
    282285                        int rc;
    283                         if (pBus->pPciHlpR3->pfnIsMMIO2Base(pBus->pDevInsHC, d->pDevIns, GCPhysBase))
     286                        if (pBus->pPciHlpR3->pfnIsMMIO2Base(pBus->pDevInsR3, d->pDevIns, GCPhysBase))
    284287                        {
    285288                            /* unmap it. */
     
    296299                if (r->addr != ~0U) {
    297300                    int rc = r->map_func(d, i,
    298                                          r->addr + (r->type & PCI_ADDRESS_SPACE_IO ? 0 : PCIBUS2PCIGLOBALS(pBus)->pci_mem_base),
     301                                         r->addr + (r->type & PCI_ADDRESS_SPACE_IO ? 0 : PCIBUS_2_PCIGLOBALS(pBus)->pci_mem_base),
    299302                                         r->size, (PCIADDRESSSPACE)(r->type));
    300303                    AssertRC(rc);
     
    526529        int shift, apic_irq, apic_level;
    527530        uint32_t *p;
    528         PPCIGLOBALS pGlobals = PCIBUS2PCIGLOBALS(pBus);
     531        PPCIGLOBALS pGlobals = PCIBUS_2_PCIGLOBALS(pBus);
    529532        int uIrqIndex = pci_dev->Int.s.iIrq;
    530533        int irq_num = pci_slot_get_apic_pirq(pci_dev, irq_num1);
     
    537540        Log3(("apic_set_irq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d\n",
    538541              HCSTRING(pci_dev->name), irq_num1, level, apic_irq, apic_level, irq_num));
    539         pBus->CTXALLSUFF(pPciHlp)->pfnIoApicSetIrq(CTXSUFF(pBus->pDevIns), apic_irq, apic_level);
     542        pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level);
    540543
    541544        if ((level & PDM_IRQ_LEVEL_FLIP_FLOP) == PDM_IRQ_LEVEL_FLIP_FLOP) {
     
    544547            Log3(("apic_set_irq: %s: irq_num1=%d level=%d apic_irq=%d apic_level=%d irq_num1=%d (flop)\n",
    545548                  HCSTRING(pci_dev->name), irq_num1, level, apic_irq, apic_level, irq_num));
    546             pBus->CTXALLSUFF(pPciHlp)->pfnIoApicSetIrq(CTXSUFF(pBus->pDevIns), apic_irq, apic_level);
     549            pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), apic_irq, apic_level);
    547550        }
    548551    } else {
    549552        Log3(("apic_set_irq: %s: irq_num1=%d level=%d acpi_irq=%d\n",
    550553              HCSTRING(pci_dev->name), irq_num1, level, acpi_irq));
    551         pBus->CTXALLSUFF(pPciHlp)->pfnIoApicSetIrq(CTXSUFF(pBus->pDevIns), acpi_irq, level);
     554        pBus->CTX_SUFF(pPciHlp)->pfnIoApicSetIrq(pBus->CTX_SUFF(pDevIns), acpi_irq, level);
    552555    }
    553556}
     
    584587PDMBOTHCBDECL(void) pciSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel)
    585588{
    586     PPCIBUS     pBus = PDMINS2DATA(pDevIns, PPCIBUS);
    587     PPCIGLOBALS pGlobals = PCIBUS2PCIGLOBALS(pBus);
     589    PPCIBUS     pBus = PDMINS_2_DATA(pDevIns, PPCIBUS);
     590    PPCIGLOBALS pGlobals = PCIBUS_2_PCIGLOBALS(pBus);
    588591    uint8_t    *pbCfg = pBus->PIIX3State.dev.config;
    589592    const bool  fIsAcpiDevice = pPciDev->config[2] == 0x13 && pPciDev->config[3] == 0x71;
     
    650653    Log3(("piix3_set_irq: %s: iLevel=%d iIrq=%d pic_irq=%d pic_level=%d\n",
    651654          HCSTRING(pPciDev->name), iLevel, iIrq, pic_irq, pic_level));
    652     pBus->CTXALLSUFF(pPciHlp)->pfnIsaSetIrq(CTXSUFF(pBus->pDevIns), pic_irq, pic_level);
     655    pBus->CTX_SUFF(pPciHlp)->pfnIsaSetIrq(pBus->CTX_SUFF(pDevIns), pic_irq, pic_level);
    653656
    654657    /** @todo optimize pci irq flip-flop some rainy day. */
     
    823826            if (r->size) {
    824827                if (r->type & PCI_ADDRESS_SPACE_IO)
    825                     paddr = &PCIBUS2PCIGLOBALS(d->Int.s.pBus)->pci_bios_io_addr;
     828                    paddr = &PCIBUS_2_PCIGLOBALS(d->Int.s.pBus)->pci_bios_io_addr;
    826829                else
    827                     paddr = &PCIBUS2PCIGLOBALS(d->Int.s.pBus)->pci_bios_mem_addr;
     830                    paddr = &PCIBUS_2_PCIGLOBALS(d->Int.s.pBus)->pci_bios_mem_addr;
    828831                *paddr = (*paddr + r->size - 1) & ~(r->size - 1);
    829832                pci_set_io_region_addr(d, i, *paddr);
     
    863866    {
    864867        PCI_LOCK(pDevIns, VINF_IOM_HC_IOPORT_WRITE);
    865         pci_addr_writel(PDMINS2DATA(pDevIns, PCIBus *), Port, u32);
     868        pci_addr_writel(PDMINS_2_DATA(pDevIns, PCIBus *), Port, u32);
    866869        PCI_UNLOCK(pDevIns);
    867870    }
     
    888891    {
    889892        PCI_LOCK(pDevIns, VINF_IOM_HC_IOPORT_READ);
    890         *pu32 = pci_addr_readl(PDMINS2DATA(pDevIns, PCIBus *), Port);
     893        *pu32 = pci_addr_readl(PDMINS_2_DATA(pDevIns, PCIBus *), Port);
    891894        PCI_UNLOCK(pDevIns);
    892895        Log(("pciIOPortAddressRead: Port=%#x cb=%d -> %#x\n", Port, cb, *pu32));
     
    918921    {
    919922        PCI_LOCK(pDevIns, VINF_IOM_HC_IOPORT_WRITE);
    920         pci_data_write(PDMINS2DATA(pDevIns, PCIBus *), Port, u32, cb);
     923        pci_data_write(PDMINS_2_DATA(pDevIns, PCIBus *), Port, u32, cb);
    921924        PCI_UNLOCK(pDevIns);
    922925    }
     
    944947    {
    945948        PCI_LOCK(pDevIns, VINF_IOM_HC_IOPORT_READ);
    946         *pu32 = pci_data_read(PDMINS2DATA(pDevIns, PCIBus *), Port, cb);
     949        *pu32 = pci_data_read(PDMINS_2_DATA(pDevIns, PCIBus *), Port, cb);
    947950        PCI_UNLOCK(pDevIns);
    948951        Log(("pciIOPortDataRead: Port=%#x cb=%#x -> %#x\n", Port, cb, *pu32));
     
    993996{
    994997    uint32_t    i;
    995     PPCIBUS     pData = PDMINS2DATA(pDevIns, PPCIBUS);
    996     PPCIGLOBALS pGlobals = PCIBUS2PCIGLOBALS(pData);
     998    PPCIBUS     pData = PDMINS_2_DATA(pDevIns, PPCIBUS);
     999    PPCIGLOBALS pGlobals = PCIBUS_2_PCIGLOBALS(pData);
    9971000
    9981001    /*
     
    10321035static DECLCALLBACK(int) pciLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle, uint32_t u32Version)
    10331036{
    1034     PPCIBUS     pData = PDMINS2DATA(pDevIns, PPCIBUS);
    1035     PPCIGLOBALS  pGlobals = PCIBUS2PCIGLOBALS(pData);
     1037    PPCIBUS     pData = PDMINS_2_DATA(pDevIns, PPCIBUS);
     1038    PPCIGLOBALS  pGlobals = PCIBUS_2_PCIGLOBALS(pData);
    10361039    uint32_t    u32;
    10371040    uint32_t    i;
     
    11771180static DECLCALLBACK(int) pciRegister(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, const char *pszName, int iDev)
    11781181{
    1179     PPCIBUS     pBus = PDMINS2DATA(pDevIns, PPCIBUS);
     1182    PPCIBUS     pBus = PDMINS_2_DATA(pDevIns, PPCIBUS);
    11801183
    11811184    /*
     
    13571360    unsigned    i;
    13581361    uint8_t     elcr[2] = {0, 0};
    1359     PPCIGLOBALS pGlobals = DEVINS2PCIGLOBALS(pDevIns);
    1360     PPCIBUS     pBus = PDMINS2DATA(pDevIns, PPCIBUS);
     1362    PPCIGLOBALS pGlobals = DEVINS_2_PCIGLOBALS(pDevIns);
     1363    PPCIBUS     pBus = PDMINS_2_DATA(pDevIns, PPCIBUS);
    13611364    PVM         pVM = PDMDevHlpGetVM(pDevIns);
    13621365    Assert(pVM);
     
    14101413static DECLCALLBACK(void) pciRelocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
    14111414{
    1412     PPCIBUS pBus = PDMINS2DATA(pDevIns, PPCIBUS);
    1413     pBus->pDevInsGC = PDMDEVINS_2_GCPTR(pDevIns);
    1414     pBus->pPciHlpGC = pBus->pPciHlpR3->pfnGetGCHelpers(pDevIns);
     1415    PPCIBUS pBus = PDMINS_2_DATA(pDevIns, PPCIBUS);
     1416    pBus->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
     1417    pBus->pPciHlpRC = pBus->pPciHlpR3->pfnGetRCHelpers(pDevIns);
    14151418}
    14161419
     
    14311434static DECLCALLBACK(int)   pciConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfgHandle)
    14321435{
    1433     PPCIGLOBALS     pGlobals = DEVINS2PCIGLOBALS(pDevIns);
    1434     PPCIBUS         pBus = PDMINS2DATA(pDevIns, PPCIBUS);
     1436    PPCIGLOBALS     pGlobals = DEVINS_2_PCIGLOBALS(pDevIns);
     1437    PPCIBUS         pBus = PDMINS_2_DATA(pDevIns, PPCIBUS);
    14351438    PDMPCIBUSREG    PciBusReg;
    14361439    int             rc;
     
    14541457                                N_("Configuration error: Failed to query boolean value \"IOAPIC\""));
    14551458
    1456     /* check if GC code is enabled. */
     1459    /* check if RC code is enabled. */
    14571460    rc = CFGMR3QueryBool(pCfgHandle, "GCEnabled", &fGCEnabled);
    14581461    if (rc == VERR_CFGM_VALUE_NOT_FOUND)
     
    14821485    memset(&pGlobals->pci_apic_irq_levels, 0, sizeof(pGlobals->pci_apic_irq_levels));
    14831486
    1484     pBus->pDevInsHC = pDevIns;
    1485     pBus->pDevInsGC = PDMDEVINS_2_GCPTR(pDevIns);
     1487    pBus->pDevInsR3 = pDevIns;
     1488    pBus->pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns);
     1489    pBus->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
    14861490
    14871491    PciBusReg.u32Version              = PDM_PCIBUSREG_VERSION;
     
    15041508                                   pBus->pPciHlpR3->u32Version != PDM_PCIHLPR3_VERSION);
    15051509
    1506     pBus->pPciHlpGC = pBus->pPciHlpR3->pfnGetGCHelpers(pDevIns);
     1510    pBus->pPciHlpRC = pBus->pPciHlpR3->pfnGetRCHelpers(pDevIns);
    15071511    pBus->pPciHlpR0 = pBus->pPciHlpR3->pfnGetR0Helpers(pDevIns);
    15081512
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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