diff options
author | Steve Reinhardt <steve.reinhardt@amd.com> | 2010-08-17 05:06:21 -0700 |
---|---|---|
committer | Steve Reinhardt <steve.reinhardt@amd.com> | 2010-08-17 05:06:21 -0700 |
commit | 0685ae7a2dbceaa2b9b264a57c9d5f82868e777e (patch) | |
tree | f640375810c28123381d9f3709793b4db90fcec6 /src/mem/bus.cc | |
parent | c4ba6967a522df3b51a50017d8a5f2c47c382f57 (diff) | |
download | gem5-0685ae7a2dbceaa2b9b264a57c9d5f82868e777e.tar.xz |
bus: clean up default responder code.
Clean up some minor things left over from the default responder
change in rev 9af6fb59752f. Mostly renaming the 'responder_set'
param to 'use_default_range' to actually reflect what it does...
old name wasn't that descriptive in the first place, but now
it really doesn't make sense at all.
Also got rid of the bogus obsolete assignment to 'bus.responder'
which used to be a parameter but now is interpreted as an
implicit child assignment, and which was giving me problems in
the config restructuring to come. (A good argument for not
allowing implicit child assignments, IMO, but that's water under
the bridge, I'm afraid.)
Also moved the Bus constructor to the .cc file since that's
where it should have been all along.
Diffstat (limited to 'src/mem/bus.cc')
-rw-r--r-- | src/mem/bus.cc | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/src/mem/bus.cc b/src/mem/bus.cc index cac08d1a8..39399017c 100644 --- a/src/mem/bus.cc +++ b/src/mem/bus.cc @@ -40,6 +40,25 @@ #include "base/trace.hh" #include "mem/bus.hh" +Bus::Bus(const BusParams *p) + : MemObject(p), busId(p->bus_id), clock(p->clock), + headerCycles(p->header_cycles), width(p->width), tickNextIdle(0), + drainEvent(NULL), busIdle(this), inRetry(false), maxId(0), + defaultPort(NULL), funcPort(NULL), funcPortId(-4), + useDefaultRange(p->use_default_range), defaultBlockSize(p->block_size), + cachedBlockSize(0), cachedBlockSizeValid(false) +{ + //width, clock period, and header cycles must be positive + if (width <= 0) + fatal("Bus width must be positive\n"); + if (clock <= 0) + fatal("Bus clock period must be positive\n"); + if (headerCycles <= 0) + fatal("Number of header cycles must be positive\n"); + clearBusCache(); + clearPortCache(); +} + Port * Bus::getPort(const std::string &if_name, int idx) { @@ -310,19 +329,22 @@ int Bus::findPort(Addr addr) { /* An interval tree would be a better way to do this. --ali. */ - int dest_id = -1; + int dest_id; dest_id = checkPortCache(addr); - if (dest_id == -1) { - PortIter i = portMap.find(RangeSize(addr,1)); - if (i != portMap.end()) { - dest_id = i->second; - updatePortCache(dest_id, i->first.start, i->first.end); - } + if (dest_id != -1) + return dest_id; + + // Check normal port ranges + PortIter i = portMap.find(RangeSize(addr,1)); + if (i != portMap.end()) { + dest_id = i->second; + updatePortCache(dest_id, i->first.start, i->first.end); + return dest_id; } // Check if this matches the default range - if (dest_id == -1) { + if (useDefaultRange) { AddrRangeIter a_end = defaultRange.end(); for (AddrRangeIter i = defaultRange.begin(); i != a_end; i++) { if (*i == addr) { @@ -331,18 +353,12 @@ Bus::findPort(Addr addr) } } - if (responderSet) { - panic("Unable to find destination for addr (user set default " - "responder): %#llx\n", addr); - } else { - DPRINTF(Bus, "Unable to find destination for addr: %#llx, will use " - "default port\n", addr); - - return defaultId; - } + panic("Unable to find destination for addr %#llx\n", addr); } - return dest_id; + DPRINTF(Bus, "Unable to find destination for addr %#llx, " + "will use default port\n", addr); + return defaultId; } @@ -484,7 +500,7 @@ Bus::recvStatusChange(Port::Status status, int id) if (id == defaultId) { defaultRange.clear(); // Only try to update these ranges if the user set a default responder. - if (responderSet) { + if (useDefaultRange) { defaultPort->getPeerAddressRanges(ranges, snoops); assert(snoops == false); for(iter = ranges.begin(); iter != ranges.end(); iter++) { |