00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _MODEL_H
00019 #define _MODEL_H
00020 #include <sst_stdint.h>
00021 #include <string>
00022 #include <list>
00023 #include <utility>
00024 #include <vector>
00025
00026 namespace Models {
00027
00028 class Model; class CallbackHandler;
00029
00030 enum MemAccessType {MEM_READ = 0, MEM_WRITE = 1};
00031
00032
00033 void callbackRequest(CallbackHandler* m, uint64_t cycles);
00034
00035 void setIpc(double ipc);
00036
00037
00038
00039 uint64_t getCycle(int vm_idx);
00040
00041
00042
00043 uint8_t memRead(int vm_idx, uint64_t addr);
00044
00045 void memWrite(int vm_idx, uint64_t addr, uint8_t data);
00046
00047 uint64_t memSize(int vm_idx);
00048
00049
00050
00051
00052 class Model {
00053 public:
00054 Model();
00055 virtual ~Model() {}
00056 };
00057
00058
00059
00060 class CallbackHandler {
00061 public:
00062 CallbackHandler();
00063 virtual void callback(int vm_id, uint64_t cycle) = 0;
00064 };
00065
00066 class MemOpHandler {
00067 public:
00068 MemOpHandler();
00069 virtual void memOp(
00070 int vm_id, uint64_t vaddr, uint64_t paddr, uint8_t size,
00071 MemAccessType type
00072 ) = 0;
00073 };
00074
00075 class InstructionHandler {
00076 public:
00077 InstructionHandler();
00078 virtual void instruction(
00079 int vm_id, uint64_t vaddr, uint64_t paddr, uint8_t len, uint8_t inst[]
00080 ) = 0;
00081 };
00082
00083 class MagicInstHandler {
00084 public:
00085 MagicInstHandler();
00086 virtual void magicInst(int vm_id, uint64_t rax) = 0;
00087 };
00088
00089 extern "C" std::vector<std::pair<std::string, std::string> > **model_params;
00090 typedef std::vector<std::pair<std::string, std::string> >::iterator ParamIt;
00091 };
00092 #endif