Port: Make getAddrRanges const
authorAndreas Hansson <andreas.hansson@arm.com>
Mon, 9 Jul 2012 16:35:34 +0000 (12:35 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Mon, 9 Jul 2012 16:35:34 +0000 (12:35 -0400)
This patch makes getAddrRanges const throughout the code base. There
is no reason why it should not be, and making it const prevents adding
any unintentional side-effects.

35 files changed:
src/arch/x86/interrupts.cc
src/arch/x86/interrupts.hh
src/dev/arm/gic.cc
src/dev/arm/gic.hh
src/dev/arm/pl111.cc
src/dev/arm/pl111.hh
src/dev/io_device.cc
src/dev/io_device.hh
src/dev/pciconfigall.cc
src/dev/pciconfigall.hh
src/dev/pcidev.cc
src/dev/pcidev.hh
src/dev/sparc/iob.cc
src/dev/sparc/iob.hh
src/dev/uart8250.cc
src/dev/uart8250.hh
src/dev/x86/i8042.cc
src/dev/x86/i8042.hh
src/dev/x86/i82094aa.hh
src/dev/x86/intdev.hh
src/mem/bridge.cc
src/mem/bridge.hh
src/mem/bus.cc
src/mem/bus.hh
src/mem/cache/cache.hh
src/mem/cache/cache_impl.hh
src/mem/coherent_bus.hh
src/mem/comm_monitor.cc
src/mem/comm_monitor.hh
src/mem/noncoherent_bus.hh
src/mem/port.hh
src/mem/ruby/system/RubyPort.cc
src/mem/ruby/system/RubyPort.hh
src/mem/simple_mem.cc
src/mem/simple_mem.hh

index a422a4758a0932ccaa059624db1600d0016d3bf9..b418a7489bd4e8d5c9a9ad2a074d69a3cbd9de68 100644 (file)
@@ -303,6 +303,7 @@ X86ISA::Interrupts::setCPU(BaseCPU * newCPU)
     cpu = newCPU;
     initialApicId = cpu->cpuId();
     regs[APIC_ID] = (initialApicId << 24);
+    pioAddr = x86LocalAPICAddress(initialApicId, 0);
 }
 
 
@@ -367,20 +368,19 @@ X86ISA::Interrupts::recvResponse(PacketPtr pkt)
 
 
 AddrRangeList
-X86ISA::Interrupts::getAddrRanges()
+X86ISA::Interrupts::getAddrRanges() const
 {
     AddrRangeList ranges;
     Range<Addr> range = RangeEx(x86LocalAPICAddress(initialApicId, 0),
                                 x86LocalAPICAddress(initialApicId, 0) + 
                                 PageBytes);
     ranges.push_back(range);
-    pioAddr = range.start;
     return ranges;
 }
 
 
 AddrRangeList
-X86ISA::Interrupts::getIntAddrRange()
+X86ISA::Interrupts::getIntAddrRange() const
 {
     AddrRangeList ranges;
     ranges.push_back(RangeEx(x86InterruptAddress(initialApicId, 0),
index 328e7159d15d9c2a297a91d73a3d9408d9e7dbf8..1b7f5a52c5afd482b3fed7286fc76448071fb1fc 100644 (file)
@@ -236,8 +236,8 @@ class Interrupts : public BasicPioDevice, IntDev
         return entry.periodic;
     }
 
-    AddrRangeList getAddrRanges();
-    AddrRangeList getIntAddrRange();
+    AddrRangeList getAddrRanges() const;
+    AddrRangeList getIntAddrRange() const;
 
     MasterPort &getMasterPort(const std::string &if_name, int idx = -1)
     {
index 143cae9f12b0d6469fafff0897753cb4352393fe..725199bc4d58efea1cab0af46c72f65e00a2a8b0 100644 (file)
@@ -708,7 +708,7 @@ Gic::postInt(uint32_t cpu, Tick when)
 }
 
 AddrRangeList
-Gic::getAddrRanges()
+Gic::getAddrRanges() const
 {
     AddrRangeList ranges;
     ranges.push_back(RangeSize(distAddr, DIST_SIZE));
index 67d48cd86c42e23ab1306ed16dcc5756f47ee9ef..9d93bbedf6324b65f5a128fbc3f3681f604d7637 100644 (file)
@@ -261,7 +261,7 @@ class Gic : public PioDevice
     /** Return the address ranges used by the Gic
      * This is the distributor address + all cpu addresses
      */
-    virtual AddrRangeList getAddrRanges();
+    virtual AddrRangeList getAddrRanges() const;
 
     /** A PIO read to the device, immediately split up into
      * readDistributor() or readCpu()
index c1edc29eafe712c353526e63384689bc2c6e6955..998644a8c1ad696b2034d31ff271b6bb2c7da9d8 100644 (file)
@@ -746,7 +746,7 @@ Pl111::generateInterrupt()
 }
 
 AddrRangeList
-Pl111::getAddrRanges()
+Pl111::getAddrRanges() const
 {
     AddrRangeList ranges;
     ranges.push_back(RangeSize(pioAddr, pioSize));
index 36dfc46c14bdd1ba66f22d566b66a306a53219c3..c4fb84efa3bd9a993180d4e43e502414009104f8 100644 (file)
@@ -329,7 +329,7 @@ class Pl111: public AmbaDmaDevice
      *
      * @return a list of non-overlapping address ranges
      */
-    AddrRangeList getAddrRanges();
+    AddrRangeList getAddrRanges() const;
 };
 
 #endif
index 100c04828063560b48d0cc4d3b43e309315b15fe..b03afc5c6b33b538ff0710c5c5bfc743f823a9d2 100644 (file)
@@ -58,7 +58,7 @@ PioPort::recvAtomic(PacketPtr pkt)
 }
 
 AddrRangeList
-PioPort::getAddrRanges()
+PioPort::getAddrRanges() const
 {
     return device->getAddrRanges();
 }
@@ -106,7 +106,7 @@ BasicPioDevice::BasicPioDevice(const Params *p)
 {}
 
 AddrRangeList
-BasicPioDevice::getAddrRanges()
+BasicPioDevice::getAddrRanges() const
 {
     assert(pioSize != 0);
     AddrRangeList ranges;
index 3f28023326d661fde74183e9aeb943b0be11d4b8..26005316987c49c3cce9600a35279f43a3e89ad5 100644 (file)
@@ -67,7 +67,7 @@ class PioPort : public SimpleTimingPort
 
     virtual Tick recvAtomic(PacketPtr pkt);
 
-    virtual AddrRangeList getAddrRanges();
+    virtual AddrRangeList getAddrRanges() const;
 
   public:
 
@@ -96,7 +96,7 @@ class PioDevice : public MemObject
      *
      * @return a list of non-overlapping address ranges
      */
-    virtual AddrRangeList getAddrRanges() = 0;
+    virtual AddrRangeList getAddrRanges() const = 0;
 
     /** Pure virtual function that the device must implement. Called
      * when a read command is recieved by the port.
@@ -160,7 +160,7 @@ class BasicPioDevice : public PioDevice
      *
      * @return a list of non-overlapping address ranges
      */
-    virtual AddrRangeList getAddrRanges();
+    virtual AddrRangeList getAddrRanges() const;
 
 };
 
index 320f455437288efc4ab17841ce2bf82bf85e19c9..4fe3b464154fd02117cb5081b702251f1c92aa11 100644 (file)
@@ -85,7 +85,7 @@ PciConfigAll::write(PacketPtr pkt)
 
 
 AddrRangeList
-PciConfigAll::getAddrRanges()
+PciConfigAll::getAddrRanges() const
 {
     AddrRangeList ranges;
     ranges.push_back(RangeSize(pioAddr, params()->size));
index e594838faebdf4e53de7f656fa0ff7f5e03cf93a..eb480ad1662b7e62e70e52b5197375557b24be0e 100644 (file)
@@ -80,7 +80,7 @@ class PciConfigAll : public PioDevice
 
     virtual Tick write(PacketPtr pkt);
 
-    AddrRangeList getAddrRanges();
+    AddrRangeList getAddrRanges() const;
 
   private:
     Addr pioAddr;
index 3c15bb00241616d37d47b1e325b169e8e77d973b..fb4aaa799c280600ed0c81d2ec07707a62e11978 100644 (file)
@@ -71,7 +71,7 @@ PciDev::PciConfigPort::recvAtomic(PacketPtr pkt)
 }
 
 AddrRangeList
-PciDev::PciConfigPort::getAddrRanges()
+PciDev::PciConfigPort::getAddrRanges() const
 {
     AddrRangeList ranges;
     if (configAddr != ULL(-1))
@@ -208,7 +208,7 @@ PciDev::readConfig(PacketPtr pkt)
 }
 
 AddrRangeList
-PciDev::getAddrRanges()
+PciDev::getAddrRanges() const
 {
     AddrRangeList ranges;
     int x = 0;
index 0cda0b8ea5f5d763b1cbbdaf90f2e74b013de65d..51d2cc93ee2ac671c639e4f18d85596b50904347 100644 (file)
@@ -65,7 +65,7 @@ class PciDev : public DmaDevice
 
         virtual Tick recvAtomic(PacketPtr pkt);
 
-        virtual AddrRangeList getAddrRanges();
+        virtual AddrRangeList getAddrRanges() const;
 
         Platform *platform;
 
@@ -191,7 +191,7 @@ class PciDev : public DmaDevice
      *
      * @return a list of non-overlapping address ranges
      */
-    AddrRangeList getAddrRanges();
+    AddrRangeList getAddrRanges() const;
 
     /**
      * Constructor for PCI Dev. This function copies data from the
index 757c50a2429d02d5b54adaf32c79b2f15cb8811a..c71edd9f0b6541b3d35a718d62974039f086dbda 100644 (file)
@@ -324,7 +324,7 @@ Iob::receiveJBusInterrupt(int cpu_id, int source, uint64_t d0, uint64_t d1)
 }
 
 AddrRangeList
-Iob::getAddrRanges()
+Iob::getAddrRanges() const
 {
     AddrRangeList ranges;
     ranges.push_back(RangeSize(iobManAddr, iobManSize));
index d6a47ce19e6160f4d516eaf3107742e845b8ab4a..b92d3cb2a76b41fecd14b377426a3dc8de2e7101 100644 (file)
@@ -141,7 +141,7 @@ class Iob : public PioDevice
     bool receiveJBusInterrupt(int cpu_id, int source, uint64_t d0,
                               uint64_t d1);
 
-    AddrRangeList getAddrRanges();
+    AddrRangeList getAddrRanges() const;
 
     virtual void serialize(std::ostream &os);
     virtual void unserialize(Checkpoint *cp, const std::string &section);
index 671d5505f8a956e1c465a575ff598fb9f0551a3f..a014398b2e1f128bf9c1ef2667f2d8836e5004c4 100644 (file)
@@ -287,7 +287,7 @@ Uart8250::dataAvailable()
 }
 
 AddrRangeList
-Uart8250::getAddrRanges()
+Uart8250::getAddrRanges() const
 {
     AddrRangeList ranges;
     ranges.push_back(RangeSize(pioAddr, pioSize));
index f31def2eaf7e6a259998862da9cdb6a145244d1e..e2fb043c19b6c614838541de9ef7a6938fe143b2 100644 (file)
@@ -100,7 +100,7 @@ class Uart8250 : public Uart
 
     virtual Tick read(PacketPtr pkt);
     virtual Tick write(PacketPtr pkt);
-    virtual AddrRangeList getAddrRanges();
+    virtual AddrRangeList getAddrRanges() const;
 
     /**
      * Inform the uart that there is data available.
index 746a087782ba9ffe63cdde22ab1b578ff5cd634b..1e646481573529ebc745a7fe1056b1546caa967c 100644 (file)
@@ -44,9 +44,10 @@ const uint8_t CommandNack = 0xfe;
 const uint8_t BatSuccessful = 0xaa;
 
 AddrRangeList
-X86ISA::I8042::getAddrRanges()
+X86ISA::I8042::getAddrRanges() const
 {
     AddrRangeList ranges;
+    // TODO: Are these really supposed to be a single byte and not 4?
     ranges.push_back(RangeSize(dataPort, 1));
     ranges.push_back(RangeSize(commandPort, 1));
     return ranges;
index 61220b45d703852a17062a80bba56a5b4bd7fe96..800fffc408f9cdfcfd5ad97f0ad840ad214242d8 100644 (file)
@@ -255,7 +255,7 @@ class I8042 : public BasicPioDevice
         commandByte.keyboardFullInt = 1;
     }
 
-    AddrRangeList getAddrRanges();
+    AddrRangeList getAddrRanges() const;
 
     Tick read(PacketPtr pkt);
 
index d3eedea7bdc84f6afe98fe549cfd213a9729aa07..c90a5b812b853f61216adc21a6bc35364dbf7b0d 100644 (file)
@@ -101,7 +101,7 @@ class I82094AA : public PioDevice, public IntDev
     Tick read(PacketPtr pkt);
     Tick write(PacketPtr pkt);
 
-    AddrRangeList getAddrRanges()
+    AddrRangeList getAddrRanges() const
     {
         AddrRangeList ranges;
         ranges.push_back(RangeEx(pioAddr, pioAddr + 4));
@@ -109,7 +109,7 @@ class I82094AA : public PioDevice, public IntDev
         return ranges;
     }
 
-    AddrRangeList getIntAddrRange()
+    AddrRangeList getIntAddrRange() const
     {
         AddrRangeList ranges;
         ranges.push_back(RangeEx(x86InterruptAddress(initialApicId, 0),
index bbdd98b24f94b40b4ae15dbaf1e0de162933334d..a32182a927e561e29ae803451500dfe9c4aecadc 100644 (file)
@@ -74,7 +74,7 @@ class IntDev
         {
         }
 
-        AddrRangeList getAddrRanges()
+        AddrRangeList getAddrRanges() const
         {
             return device->getIntAddrRange();
         }
@@ -152,7 +152,7 @@ class IntDev
     }
 
     virtual AddrRangeList
-    getIntAddrRange()
+    getIntAddrRange() const
     {
         panic("intAddrRange not implemented.\n");
     }
index eabfbc44d97c4a94e85709486931ba9152bf84c1..3a5313e7ba45ad93ff408a0750e9158e84c5c86f 100644 (file)
@@ -443,7 +443,7 @@ Bridge::BridgeMasterPort::checkFunctional(PacketPtr pkt)
 }
 
 AddrRangeList
-Bridge::BridgeSlavePort::getAddrRanges()
+Bridge::BridgeSlavePort::getAddrRanges() const
 {
     return ranges;
 }
index 4595cf51684f29dd3f46bbeefabb70885ff5bb10..eefb4d121247d025eb28477ad68445072102e39c 100644 (file)
@@ -276,7 +276,7 @@ class Bridge : public MemObject
 
         /** When receiving a address range request the peer port,
             pass it to the bridge. */
-        virtual AddrRangeList getAddrRanges();
+        virtual AddrRangeList getAddrRanges() const;
     };
 
 
index 5be53dbcd03cd2bfc2d1906d609dc97bbe02adc3..2e735e03b5c026ed4a4c0a91a13efbdd848f3cb6 100644 (file)
@@ -269,7 +269,7 @@ BaseBus::findPort(Addr addr)
         return dest_id;
 
     // Check normal port ranges
-    PortIter i = portMap.find(RangeSize(addr,1));
+    PortMapConstIter i = portMap.find(RangeSize(addr,1));
     if (i != portMap.end()) {
         dest_id = i->second;
         updatePortCache(dest_id, i->first.start, i->first.end);
@@ -278,8 +278,8 @@ BaseBus::findPort(Addr addr)
 
     // Check if this matches the default range
     if (useDefaultRange) {
-        AddrRangeIter a_end = defaultRange.end();
-        for (AddrRangeIter i = defaultRange.begin(); i != a_end; i++) {
+        AddrRangeConstIter a_end = defaultRange.end();
+        for (AddrRangeConstIter i = defaultRange.begin(); i != a_end; i++) {
             if (*i == addr) {
                 DPRINTF(BusAddrRanges, "  found addr %#llx on default\n",
                         addr);
@@ -332,7 +332,7 @@ BaseBus::recvRangeChange(PortID master_port_id)
         MasterPort *port = masterPorts[master_port_id];
 
         // Clean out any previously existent ids
-        for (PortIter portIter = portMap.begin();
+        for (PortMapIter portIter = portMap.begin();
              portIter != portMap.end(); ) {
             if (portIter->second == master_port_id)
                 portMap.erase(portIter++);
@@ -367,22 +367,22 @@ BaseBus::recvRangeChange(PortID master_port_id)
 }
 
 AddrRangeList
-BaseBus::getAddrRanges()
+BaseBus::getAddrRanges() const
 {
     AddrRangeList ranges;
 
     DPRINTF(BusAddrRanges, "received address range request, returning:\n");
 
-    for (AddrRangeIter dflt_iter = defaultRange.begin();
+    for (AddrRangeConstIter dflt_iter = defaultRange.begin();
          dflt_iter != defaultRange.end(); dflt_iter++) {
         ranges.push_back(*dflt_iter);
         DPRINTF(BusAddrRanges, "  -- Dflt: %#llx : %#llx\n",dflt_iter->start,
                 dflt_iter->end);
     }
-    for (PortIter portIter = portMap.begin();
+    for (PortMapConstIter portIter = portMap.begin();
          portIter != portMap.end(); portIter++) {
         bool subset = false;
-        for (AddrRangeIter dflt_iter = defaultRange.begin();
+        for (AddrRangeConstIter dflt_iter = defaultRange.begin();
              dflt_iter != defaultRange.end(); dflt_iter++) {
             if ((portIter->first.start < dflt_iter->start &&
                 portIter->first.end >= dflt_iter->start) ||
index 4f0e44b1c6bae5c259915128662573fa0dea758c..94068d897bc8103879d0d0495618fe691c4a98a5 100644 (file)
@@ -85,7 +85,8 @@ class BaseBus : public MemObject
 
     Event * drainEvent;
 
-    typedef range_map<Addr, PortID>::iterator PortIter;
+    typedef range_map<Addr, PortID>::iterator PortMapIter;
+    typedef range_map<Addr, PortID>::const_iterator PortMapConstIter;
     range_map<Addr, PortID> portMap;
 
     AddrRangeList defaultRange;
@@ -187,7 +188,7 @@ class BaseBus : public MemObject
      *
      * @return a list of non-overlapping address ranges
      */
-    AddrRangeList getAddrRanges();
+    AddrRangeList getAddrRanges() const;
 
     /** Calculate the timing parameters for the packet.  Updates the
      * firstWordTime and finishTime fields of the packet object.
index beb3903daf8065e2065342459ecd6cdc3271c067..9bdbd3456ab1356a530e792442a7f187bbad3140 100644 (file)
@@ -101,7 +101,7 @@ class Cache : public BaseCache
         virtual unsigned deviceBlockSize() const
         { return cache->getBlockSize(); }
 
-        virtual AddrRangeList getAddrRanges();
+        virtual AddrRangeList getAddrRanges() const;
 
       public:
 
index cc68bbd3d77736d1f073afa05f725de3c4761908..f7901261ff6f7e238ac3d649a21853b2d73d5f09 100644 (file)
@@ -1588,7 +1588,7 @@ Cache<TagStore>::unserialize(Checkpoint *cp, const std::string &section)
 
 template<class TagStore>
 AddrRangeList
-Cache<TagStore>::CpuSidePort::getAddrRanges()
+Cache<TagStore>::CpuSidePort::getAddrRanges() const
 {
     return cache->getAddrRanges();
 }
index a8737eeedae68548ec731353d3854992b3192751..460afd828db8b6cc452326fcf18440c6b331c77c 100644 (file)
@@ -124,7 +124,7 @@ class CoherentBus : public BaseBus
         /**
          * Return the union of all adress ranges seen by this bus.
          */
-        virtual AddrRangeList getAddrRanges()
+        virtual AddrRangeList getAddrRanges() const
         { return bus.getAddrRanges(); }
 
         /**
index 8469a246996e36d1860e483505f242d36159abce..1b030de5e83f3553455d100ce619f316c9501bcf 100644 (file)
@@ -345,7 +345,7 @@ CommMonitor::deviceBlockSizeSlave()
 }
 
 AddrRangeList
-CommMonitor::getAddrRanges()
+CommMonitor::getAddrRanges() const
 {
     // get the address ranges of the connected slave port
     return masterPort.getAddrRanges();
index 54f9690edef542f33354f21984f6caa84a40c895..4b90306e18da9b8d120a3129dbd8e27d49e047ca 100644 (file)
@@ -230,7 +230,7 @@ class CommMonitor : public MemObject
             return mon.deviceBlockSizeSlave();
         }
 
-        AddrRangeList getAddrRanges()
+        AddrRangeList getAddrRanges() const
         {
             return mon.getAddrRanges();
         }
@@ -269,7 +269,7 @@ class CommMonitor : public MemObject
 
     unsigned deviceBlockSizeSlave();
 
-    AddrRangeList getAddrRanges();
+    AddrRangeList getAddrRanges() const;
 
     bool isSnooping() const;
 
index 7227d3bc6ca626f8e46620ee27723a9edad2f8a2..46fc65fadbc1dd370d03cfd816a8890b42f9898a 100644 (file)
@@ -120,7 +120,7 @@ class NoncoherentBus : public BaseBus
         /**
          * Return the union of all adress ranges seen by this bus.
          */
-        virtual AddrRangeList getAddrRanges()
+        virtual AddrRangeList getAddrRanges() const
         { return bus.getAddrRanges(); }
 
         /**
index cfeb87571dd114afc955679c21c5163ab7d0bb29..35f2993df5f9bb8617b69bb0c1c27d56a96d8305 100644 (file)
@@ -64,6 +64,7 @@
 
 typedef std::list<Range<Addr> > AddrRangeList;
 typedef std::list<Range<Addr> >::iterator AddrRangeIter;
+typedef std::list<Range<Addr> >::const_iterator AddrRangeConstIter;
 
 class MemObject;
 
@@ -379,7 +380,7 @@ class SlavePort : public Port
      *
      * @return a list of ranges responded to
      */
-    virtual AddrRangeList getAddrRanges() = 0;
+    virtual AddrRangeList getAddrRanges() const = 0;
 
   protected:
 
index 285017a06983197475910c7554fcdc891910270c..a6eb4d22d6633de3d934a8498622c619e23fcb3a 100644 (file)
@@ -669,7 +669,7 @@ RubyPort::PioPort::sendNextCycle(PacketPtr pkt)
 }
 
 AddrRangeList
-RubyPort::M5Port::getAddrRanges()
+RubyPort::M5Port::getAddrRanges() const
 {
     // at the moment the assumption is that the master does not care
     AddrRangeList ranges;
index 8833efb6e69c46ecf2017cef10b57c1d7ba9c904..3b19632e22e4cf3fac3160cbff567768f662cdc6 100644 (file)
@@ -86,7 +86,7 @@ class RubyPort : public MemObject
         virtual bool recvTimingReq(PacketPtr pkt);
         virtual Tick recvAtomic(PacketPtr pkt);
         virtual void recvFunctional(PacketPtr pkt);
-        virtual AddrRangeList getAddrRanges();
+        virtual AddrRangeList getAddrRanges() const;
 
       private:
         bool isPhysMemAddress(Addr addr);
index 10e809d0b5f80a67d95221f08046ef737ef037ee..aa9168bf711313be514ff32e916c0b3700b7452d 100644 (file)
@@ -132,7 +132,7 @@ SimpleMemory::MemoryPort::MemoryPort(const std::string& _name,
 { }
 
 AddrRangeList
-SimpleMemory::MemoryPort::getAddrRanges()
+SimpleMemory::MemoryPort::getAddrRanges() const
 {
     AddrRangeList ranges;
     ranges.push_back(memory.getAddrRange());
index b21b38fd8a867e782a60f00326cb55ebf0e9ce9d..5f136ed51b9d1d5f640053fd9677a8697f02ecfc 100644 (file)
@@ -77,7 +77,7 @@ class SimpleMemory : public AbstractMemory
 
         virtual void recvFunctional(PacketPtr pkt);
 
-        virtual AddrRangeList getAddrRanges();
+        virtual AddrRangeList getAddrRanges() const;
 
     };