VirtualBox

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


Ignore:
Timestamp:
Oct 6, 2010 11:07:41 AM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
66427
Message:

PCI: safety checks, cleaner code

File:
1 edited

Legend:

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

    r32935 r32941  
    16991699            return PCIDevGetByte(aDev,  u32Address);
    17001700        case 2:
    1701             return PCIDevGetWord(aDev,  u32Address);
    1702         default:
     1701            return PCIDevGetWord(aDev,  u32Address);       
    17031702        case 4:
    17041703            return PCIDevGetDWord(aDev, u32Address);
     1704        default:
     1705            Assert(false);
     1706            return 0;
    17051707    }
    17061708}
     
    17141716                                                uint32_t val, unsigned len)
    17151717{
     1718    Assert(len <= 4);
     1719
    17161720    if ((u32Address + len) > 256 && (u32Address + len) < 4096)
    17171721    {
     
    18241828        }
    18251829
     1830        uint8_t u8Val = (uint8_t)val;
     1831
    18261832        switch (addr)
    18271833        {
    18281834            case VBOX_PCI_COMMAND: /* Command register, bits 0-7. */
    18291835                fUpdateMappings = true;
    1830                 aDev->config[addr] = val;
     1836                aDev->config[addr] = u8Val;
    18311837                break;
    18321838            case VBOX_PCI_COMMAND+1: /* Command register, bits 8-15. */
    18331839                /* don't change reserved bits (11-15) */
    1834                 val &= UINT32_C(~0xf8);
     1840                u8Val &= UINT32_C(~0xf8);
    18351841                fUpdateMappings = true;
    1836                 aDev->config[addr] = val;
     1842                aDev->config[addr] = u8Val;
    18371843                break;
    18381844            case VBOX_PCI_STATUS:  /* Status register, bits 0-7. */
    18391845                /* don't change read-only bits => actually all lower bits are read-only */
    1840                 val &= UINT32_C(~0xff);
     1846                u8Val &= UINT32_C(~0xff);
    18411847                /* status register, low part: clear bits by writing a '1' to the corresponding bit */
    1842                 aDev->config[addr] &= ~val;
     1848                aDev->config[addr] &= ~u8Val;
    18431849                break;
    18441850            case VBOX_PCI_STATUS+1:  /* Status register, bits 8-15. */
    18451851                /* don't change read-only bits */
    1846                 val &= UINT32_C(~0x06);
     1852                u8Val &= UINT32_C(~0x06);
    18471853                /* status register, high part: clear bits by writing a '1' to the corresponding bit */
    1848                 aDev->config[addr] &= ~val;
     1854                aDev->config[addr] &= ~u8Val;
    18491855                break;
    18501856            default:
    18511857                if (fWritable)
    1852                     aDev->config[addr] = val;
     1858                    aDev->config[addr] = u8Val;
    18531859        }
    18541860        addr++;
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