VirtualBox

Changeset 64466 in vbox


Ignore:
Timestamp:
Oct 28, 2016 2:38:01 PM (8 years ago)
Author:
vboxsync
Message:

DevPci: Cleaning up ich9pciUpdateMappings and friends.

File:
1 edited

Legend:

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

    r64465 r64466  
    18461846static void ich9pciUpdateMappings(PDMPCIDEV* pDev)
    18471847{
    1848     uint64_t uLast, uNew;
    1849 
    18501848    uint16_t const u16Cmd = ich9pciGetWord(pDev, VBOX_PCI_COMMAND);
    18511849    for (unsigned iRegion = 0; iRegion < VBOX_PCI_NUM_REGIONS; iRegion++)
     
    18611859                          == PCI_ADDRESS_SPACE_BAR64;
    18621860
     1861            uint64_t uNew = INVALID_PCI_ADDRESS;
    18631862            if (pRegion->type & PCI_ADDRESS_SPACE_IO)
    18641863            {
    1865                 /* port IO region */
     1864                /*
     1865                 * Port I/O region. Check if mapped and within 0..65535 range.
     1866                 */
    18661867                if (u16Cmd & PCI_COMMAND_IOACCESS)
    18671868                {
    1868                     /* IO access allowed */
    1869                     uNew = ich9pciGetDWord(pDev, offCfgReg);
    1870                     uNew &= ~(cbRegion - 1);
    1871                     uLast = uNew + cbRegion - 1;
    1872                     /* only 64K ioports on PC */
    1873                     if (uLast <= uNew || uNew == 0 || uLast >= 0x10000)
    1874                         uNew = INVALID_PCI_ADDRESS;
    1875                 } else
    1876                     uNew = INVALID_PCI_ADDRESS;
     1869                    uint32_t uBase = ich9pciGetDWord(pDev, offCfgReg);
     1870                    uBase &= ~(uint32_t)(cbRegion - 1);
     1871                    uint64_t uLast = cbRegion - 1 + uBase;
     1872                    if (   uLast < _64K
     1873                        && uBase <= uLast
     1874                        && uBase > 0)
     1875                        uNew = uBase;
     1876                }
    18771877            }
    18781878            else
     
    18911891                    {
    18921892                        uNew &= ~(cbRegion - 1);
    1893                         uLast = uNew + cbRegion - 1;
     1893                        uint64_t uLast = uNew + cbRegion - 1;
    18941894                        /* NOTE: we do not support wrapping */
    18951895                        /* XXX: as we cannot support really dynamic
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