VirtualBox

Changeset 64459 in vbox for trunk/src/VBox


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

DevPci: Cleaning up ich9pciConfigWriteDev.

File:
1 edited

Legend:

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

    r64458 r64459  
    19991999        {
    20002000            /*
    2001              * Handle the writes byte-by-byte.
     2001             * Handle the writes byte-by-byte to catch all possible cases.
     2002             *
     2003             * Note! Real hardware may not necessarily handle non-dword writes like
     2004             *       we do here and even produce erratic behavior.  We don't (yet)
     2005             *       try emulate that.
    20022006             */
    20032007            bool     fUpdateMappings = false;
     
    20062010            while (cb-- > 0)
    20072011            {
     2012                /*
     2013                 * Check writability first.
     2014                 */
    20082015                bool fWritable = false;
    20092016                switch (bHeaderType)
     
    20132020                        switch (uAddress)
    20142021                        {
    2015                             /* Read-only registers  */
     2022                            /* Read-only registers. */
    20162023                            case VBOX_PCI_VENDOR_ID:
    20172024                            case VBOX_PCI_VENDOR_ID+1:
     
    20352042                                fWritable = false;
    20362043                                break;
    2037                             /* Others can be written */
     2044                            /* Other registers can be written. */
    20382045                            default:
    20392046                                fWritable = true;
     
    20452052                        switch (uAddress)
    20462053                        {
    2047                             /* Read-only registers */
     2054                            /* Read-only registers. */
    20482055                            case VBOX_PCI_VENDOR_ID:
    20492056                            case VBOX_PCI_VENDOR_ID+1:
     
    20622069                                fWritable = false;
    20632070                                break;
     2071                            /* Other registers can be written. */
    20642072                            default:
    20652073                                fWritable = true;
     
    20682076                        break;
    20692077                    default:
    2070                         AssertMsgFailed(("Unknown header type %x\n", PCIDevGetHeaderType(pPciDev)));
     2078                        AssertMsgFailed(("Unknown header type %#x\n", bHeaderType));
    20712079                        fWritable = false;
    20722080                        break;
     
    20782086                {
    20792087                    case VBOX_PCI_COMMAND: /* Command register, bits 0-7. */
    2080                         fUpdateMappings = true;
    2081                         goto l_default_case;
     2088                        if (fWritable)
     2089                        {
     2090                            PCIDevSetByte(pPciDev, uAddress, bVal);
     2091                            fUpdateMappings = true; /** @todo r=bird: Probably not necessary to update mappings on VBOX_PCI_COMMAND changes for bridges? */
     2092                        }
     2093                        break;
     2094
    20822095                    case VBOX_PCI_COMMAND+1: /* Command register, bits 8-15. */
    2083                         /* don't change reserved bits (11-15) */
    2084                         bVal &= ~UINT32_C(0xf8);
    2085                         fUpdateMappings = true;
    2086                         goto l_default_case;
     2096                        if (fWritable)
     2097                        {
     2098                            /* don't change reserved bits (11-15) */
     2099                            bVal &= ~UINT32_C(0xf8);
     2100                            PCIDevSetByte(pPciDev, uAddress, bVal);
     2101                            fUpdateMappings = true;
     2102                        }
     2103                        break;
     2104
    20872105                    case VBOX_PCI_STATUS:  /* Status register, bits 0-7. */
    20882106                        /* don't change read-only bits => actually all lower bits are read-only */
     
    20912109                        pPciDev->abConfig[uAddress] &= ~bVal;
    20922110                        break;
     2111
    20932112                    case VBOX_PCI_STATUS+1:  /* Status register, bits 8-15. */
    20942113                        /* don't change read-only bits */
     
    20972116                        pPciDev->abConfig[uAddress] &= ~bVal;
    20982117                        break;
     2118
    20992119                    case VBOX_PCI_ROM_ADDRESS:    case VBOX_PCI_ROM_ADDRESS   +1: case VBOX_PCI_ROM_ADDRESS   +2: case VBOX_PCI_ROM_ADDRESS   +3:
    21002120                        fRom = true;
     
    21092129                        {
    21102130                            uint32_t iRegion = fRom ? VBOX_PCI_ROM_SLOT : (uAddress - VBOX_PCI_BASE_ADDRESS_0) >> 2;
    2111                             uint32_t off     = uAddress & 0x3;
    2112                             ich9pciWriteBarByte(pPciDev, iRegion, off, bVal);
     2131                            ich9pciWriteBarByte(pPciDev, iRegion, uAddress & 0x3, bVal);
    21132132                            fUpdateMappings = true;
    21142133                            break;
     
    21162135                        /* fall thru (bridge) */
    21172136                    default:
    2118                     l_default_case:
    21192137                        if (fWritable)
    21202138                            PCIDevSetByte(pPciDev, uAddress, bVal);
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