interconnect_interface.cc

00001 
00002 #include <iostream>
00003 #include <vector>
00004         
00005 #include "interconnect_interface.hh"
00006 
00007 using namespace std;
00008 
00009 void
00010 InterconnectInterface::setBlocked(){
00011     if(!blocked){
00012         blocked = true;
00013         thisInterconnect->setBlocked(interfaceID);
00014     }
00015 }
00016 
00017 void
00018 InterconnectInterface::clearBlocked(){
00019     if(blocked){
00020         blocked = false;
00021         thisInterconnect->clearBlocked(interfaceID);
00022     }
00023 }
00024 
00025 void
00026 InterconnectInterface::getRange(std::list<Range<Addr> > &range_list)
00027 {
00028     for (int i = 0; i < ranges.size(); ++i) {
00029         range_list.push_back(ranges[i]);
00030     }
00031 }
00032 
00033 void
00034 InterconnectInterface::rangeChange(){
00035     thisInterconnect->rangeChange();
00036 }
00037 
00038 
00039 void
00040 InterconnectInterface::setAddrRange(list<Range<Addr> > &range_list){
00041     ranges.clear();
00042     while (!range_list.empty()) {
00043         ranges.push_back(range_list.front());
00044         range_list.pop_front();
00045     }
00046     rangeChange();
00047 }
00048 
00049 void
00050 InterconnectInterface::addAddrRange(const Range<Addr> &range){
00051     ranges.push_back(range);
00052     rangeChange();
00053 }
00054 
00055 void
00056 InterconnectInterface::getSendSample(int* data,
00057                                      int* inst,
00058                                      int* coherence,
00059                                      int* total){
00060     
00061     // start profiling if this is the first call to this function
00062     if(!doProfiling) doProfiling = true;
00063     
00064     // return the sampled values
00065     *data = dataSends;
00066     *inst = instSends;
00067     *coherence = coherenceSends;
00068     *total = totalSends;
00069     
00070     // reset counters
00071     dataSends = 0;
00072     instSends = 0;
00073     coherenceSends = 0;
00074     totalSends = 0;
00075 }
00076 
00077 void
00078 InterconnectInterface::updateProfileValues(MemReqPtr &req){
00079     
00080     if(doProfiling){
00081         if(req->cmd.isDirectoryMessage()){
00082             coherenceSends++;
00083         }
00084         else if(req->readOnlyCache){
00085             instSends++;
00086         }
00087         else{
00088             dataSends++;
00089         }
00090         totalSends++;
00091     }
00092 }

Generated on Tue Jun 5 12:55:20 2007 for M5InterconnectExtensions by  doxygen 1.4.7