VirtualBox

Changeset 33127 in vbox for trunk/src


Ignore:
Timestamp:
Oct 14, 2010 11:15:16 AM (14 years ago)
Author:
vboxsync
Message:

PCI: bits

Location:
trunk/src/VBox
Files:
2 edited

Legend:

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

    r32960 r33127  
    6969
    7070
    71 /** @def PCI_IRQ_PINS
    72  * Number of pins for interrupts (PIRQ#0...PIRQ#3)
    73  */
    74 #define PCI_IRQ_PINS 4
    75 
    7671/** @def PCI_APIC_IRQ_PINS
    7772 * Number of pins for interrupts if the APIC is used.
     
    467462
    468463/* Compute mapping of PCI slot and IRQ number to APIC interrupt line */
    469 static inline int ich9pciSlot2ApicIrq(uint8_t uSlot, int irq_num)
     464DECLINLINE(int) ich9pciSlot2ApicIrq(uint8_t uSlot, int irq_num)
    470465{
    471466    return (irq_num + uSlot) & 7;
     
    473468
    474469/* Add one more level up request on APIC input line */
    475 static inline void ich9pciApicLevelUp(PPCIGLOBALS pGlobals, int irq_num)
     470DECLINLINE(void) ich9pciApicLevelUp(PPCIGLOBALS pGlobals, int irq_num)
    476471{
    477472    ASMAtomicIncU32(&pGlobals->uaPciApicIrqLevels[irq_num]);
     
    479474
    480475/* Remove one level up request on APIC input line */
    481 static inline void ich9pciApicLevelDown(PPCIGLOBALS pGlobals, int irq_num)
     476DECLINLINE(void) ich9pciApicLevelDown(PPCIGLOBALS pGlobals, int irq_num)
    482477{
    483478    ASMAtomicDecU32(&pGlobals->uaPciApicIrqLevels[irq_num]);
     
    649644                  ("Device is not a PCI bridge but on the list of PCI bridges\n"));
    650645
    651         if (   iBus >= pBridgeTemp->config[VBOX_PCI_SECONDARY_BUS]
    652             && iBus <= pBridgeTemp->config[VBOX_PCI_SUBORDINATE_BUS])
     646        if (   iBus >= PCIDevGetByte(pBridgeTemp, VBOX_PCI_SECONDARY_BUS)
     647            && iBus <= PCIDevGetByte(pBridgeTemp, VBOX_PCI_SUBORDINATE_BUS))
    653648            return pBridgeTemp;
    654649    }
     
    658653}
    659654
    660 static inline uint32_t ich9pciGetRegionReg(int iRegion)
     655DECLINLINE(uint32_t) ich9pciGetRegionReg(int iRegion)
    661656{
    662657    return (iRegion == PCI_ROM_SLOT) ?
     
    728723                {
    729724                    /* Port IO */
    730                     int devclass;
    731                     /* NOTE: specific hack for IDE in PC case:
    732                        only one byte must be mapped. */
    733                     /// @todo: do we need it?
    734                     devclass = pDev->config[0x0a] | (pDev->config[0x0b] << 8);
    735                     if (devclass == 0x0101 && iRegionSize == 4)
    736                     {
    737                         rc = PDMDevHlpIOPortDeregister(pDev->pDevIns, pRegion->addr + 2, 1);
    738                         AssertRC(rc);
    739                     }
    740                     else
    741                     {
    742                         rc = PDMDevHlpIOPortDeregister(pDev->pDevIns, pRegion->addr, pRegion->size);
    743                         AssertRC(rc);
    744                     }
     725                    rc = PDMDevHlpIOPortDeregister(pDev->pDevIns, pRegion->addr, pRegion->size);
     726                    AssertRC(rc);
    745727                }
    746728                else
     
    855837    uint32_t u32Value   =   (enmType == PCI_ADDRESS_SPACE_MEM_PREFETCH ? (1 << 3) : 0)
    856838                          | (enmType == PCI_ADDRESS_SPACE_IO ? 1 : 0);
    857     *(uint32_t *)(pPciDev->config + u32Address) = RT_H2LE_U32(u32Value);
     839    PCIDevSetDWord(pPciDev, u32Address, u32Value);
    858840
    859841    return VINF_SUCCESS;
     
    13011283
    13021284        /* match the vendor id assuming that this will never be changed. */
    1303         if (    DevTmp.config[0] != pDev->config[0]
    1304             ||  DevTmp.config[1] != pDev->config[1])
     1285        if (    PCIDevGetVendorId(&DevTmp) != PCIDevGetVendorId(pDev))
    13051286            return SSMR3SetCfgError(pSSM, RT_SRC_POS, N_("Device in slot %#x (%s) vendor id mismatch! saved=%.4Rhxs current=%.4Rhxs"),
    1306                                      i, pDev->name, DevTmp.config, pDev->config);
     1287                                     i, pDev->name, PCIDevGetVendorId(&DevTmp), PCIDevGetVendorId(pDev));
    13071288
    13081289        /* commit the loaded device config. */
     
    13721353static uint32_t ich9pciConfigRead(PPCIGLOBALS pGlobals, uint8_t uBus, uint8_t uDevFn, uint32_t addr, uint32_t len)
    13731354{
    1374     /* Set destination address */
    1375     /// @todo: device locking?
    1376     pGlobals->uConfigReg = 0x80000000 | (uBus << 16) |
    1377                            (uDevFn << 8) | (addr & ~3);
    13781355    uint32_t u32Val;
    1379     int rc = ich9pciDataRead(pGlobals, addr & 3, len, &u32Val);
     1356    PciAddress aPciAddr;
     1357
     1358    aPciAddr.iBus = uBus;
     1359    aPciAddr.iDeviceFunc = uDevFn;
     1360    aPciAddr.iRegister = addr;
     1361
     1362    int rc = ich9pciDataReadAddr(pGlobals, &aPciAddr, len, &u32Val);
    13801363    AssertRC(rc);
    13811364    switch (len)
     
    13931376static void ich9pciConfigWrite(PPCIGLOBALS pGlobals, uint8_t uBus, uint8_t uDevFn, uint32_t addr, uint32_t val, uint32_t len)
    13941377{
    1395     /* Set destination address */
    1396     /// @todo: device locking?
    1397     pGlobals->uConfigReg = 0x80000000 | (uBus << 16) |
    1398                            (uDevFn << 8) | addr;
    1399     ich9pciDataWrite(pGlobals, 0, val, len);
     1378    PciAddress aPciAddr;
     1379
     1380    aPciAddr.iBus = uBus;
     1381    aPciAddr.iDeviceFunc = uDevFn;
     1382    aPciAddr.iRegister = addr;
     1383
     1384    ich9pciDataWriteAddr(pGlobals, &aPciAddr, val, len);
    14001385}
    14011386
     
    16241609            cBridgeDepth--;
    16251610        }
    1626 #if 0
    1627         uPin = pci_slot_get_pirq(uDevFn, pin);
    1628         pic_irq = pci_irqs[pin];
    1629         ich9pciConfigWrite(pGlobals, uBus, uDevFn, PCI_INTERRUPT_LINE, pic_irq);
    1630 #endif
    16311611    }
    16321612}
     
    18141794                break;
    18151795            default:
    1816             case 0x01: /* bridge */
     1796            case 0x01: /* PCI-PCI bridge */
    18171797                switch (addr)
    18181798                {
     
    18421822            case VBOX_PCI_COMMAND: /* Command register, bits 0-7. */
    18431823                fUpdateMappings = true;
    1844                 aDev->config[addr] = u8Val;
     1824                PCIDevSetByte(aDev, addr, u8Val);
    18451825                break;
    18461826            case VBOX_PCI_COMMAND+1: /* Command register, bits 8-15. */
     
    18481828                u8Val &= UINT32_C(~0xf8);
    18491829                fUpdateMappings = true;
    1850                 aDev->config[addr] = u8Val;
     1830                PCIDevSetByte(aDev, addr, u8Val);
    18511831                break;
    18521832            case VBOX_PCI_STATUS:  /* Status register, bits 0-7. */
     
    18641844            default:
    18651845                if (fWritable)
    1866                     aDev->config[addr] = u8Val;
     1846                    PCIDevSetByte(aDev, addr, u8Val);
    18671847        }
    18681848        addr++;
     
    19211901    /* Otherwise when assigning a slot, we need to make sure all its functions are available */
    19221902    for (int iPos = 0; iPos < (int)RT_ELEMENTS(pBus->apDevices); iPos += 8)
     1903    {
    19231904        if (        !pBus->apDevices[iPos]
    19241905                &&  !pBus->apDevices[iPos + 1]
     
    19331914            return iPos;
    19341915        }
     1916    }
    19351917
    19361918    return -1;
     
    19751957        PCIIsRequestedDevfunc(pBus->apDevices[iDev]))
    19761958    {
    1977         /*
    1978          * Smth like hasHardAssignedDevsInSlot(pBus, iDev >> 3) shall be use to make
    1979          * it compatible with DevPCI.cpp version, but this way we cannot assign
    1980          * in accordance with the chipset spec.
    1981          */
    19821959        AssertReleaseMsgFailed(("Configuration error:'%s' and '%s' are both configured as device %d\n",
    19831960                                 pszName, pBus->apDevices[iDev]->name, iDev));
     
    22842261    if (!PCIIsPci2PciBridge(pDev))
    22852262    {
    2286         pDev->config[VBOX_PCI_CACHE_LINE_SIZE] = 0x0;
    2287         pDev->config[VBOX_PCI_INTERRUPT_LINE] = 0x0;
     2263        PCIDevSetByte(pDev, VBOX_PCI_CACHE_LINE_SIZE, 0x0);
     2264        PCIDevSetByte(pDev, VBOX_PCI_INTERRUPT_LINE,  0x0);
    22882265    }
    22892266    /* Regions ? */
     
    24602437
    24612438    /* Reset config space to default values. */
    2462     pBus->aPciDev.config[VBOX_PCI_PRIMARY_BUS] = 0;
    2463     pBus->aPciDev.config[VBOX_PCI_SECONDARY_BUS] = 0;
    2464     pBus->aPciDev.config[VBOX_PCI_SUBORDINATE_BUS] = 0;
     2439    PCIDevSetByte(&pBus->aPciDev, VBOX_PCI_PRIMARY_BUS, 0);
     2440    PCIDevSetByte(&pBus->aPciDev, VBOX_PCI_SECONDARY_BUS, 0);
     2441    PCIDevSetByte(&pBus->aPciDev, VBOX_PCI_SUBORDINATE_BUS, 0);
    24652442}
    24662443
  • trunk/src/VBox/Main/ConsoleImpl2.cpp

    r32910 r33127  
    855855            case ChipsetType_PIIX3:
    856856                InsertConfigNode(pDevices, "pci", &pDev);
    857                 u32HbcPciAddress = 0;
     857                u32HbcPciAddress = (0x0 << 16) | 0;
    858858                u32IocPciAddress = (0x1 << 16) | 0; // ISA controller
    859859                break;
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