00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef SMPPROC_H
00014 #define SMPPROC_H
00015
00016 #include "ssb.h"
00017 #include "ssb_memory.h"
00018 #include <map>
00019
00020 using namespace std;
00021
00022 class mainProc;
00023
00024
00025 class smpProc {
00026 typedef enum {INVALID, SHARED, EXCLUSIVE} blkTag;
00027 typedef map<simAddress, blkTag> tagMap;
00028 tagMap blkTags;
00029 void writeBackBlock(simAddress);
00030 unsigned long long invalidates[2];
00031 unsigned long long busMemAccess;
00032 unsigned long long writeBacks;
00033 mainProc *myMainProc;
00034 simAddress getBAddr(simAddress a);
00035 public:
00036 smpProc(mainProc *mp);
00037
00038 virtual void noteWrite(const simAddress a);
00039 virtual void busReadMiss(simAddress);
00040 virtual void busWriteMiss(simAddress);
00041 virtual void busWriteHit(simAddress);
00042 virtual void finish();
00043
00044 virtual void handleCoher(const simAddress, const enum mem_cmd cmd);
00045 };
00046
00047 #endif