18 #include "winpmem\winpmem.h" 19 #include "Winmsrdriver\msrstruct.h" 31 class MMIORangeInterface
34 virtual uint32 read32(uint64 offset) = 0;
35 virtual uint64 read64(uint64 offset) = 0;
36 virtual void write32(uint64 offset, uint32 val) = 0;
37 virtual void write64(uint64 offset, uint64 val) = 0;
38 virtual ~MMIORangeInterface() {}
41 class WinPmemMMIORange :
public MMIORangeInterface
43 static std::shared_ptr<WinPmem> pmem;
45 static bool writeSupported;
49 void writeInternal(uint64 offset,
T val)
53 std::cerr <<
"PCM Error: MMIORange writes are not supported by the driver\n";
58 std::cerr <<
"PCM Error: attempting to write to a read-only MMIORange\n";
62 pmem->write(startAddr + offset, val);
66 void readInternal(uint64 offset,
T & res)
69 pmem->read(startAddr + offset, res);
74 WinPmemMMIORange(uint64 baseAddr_, uint64 size_,
bool readonly_ =
true);
75 uint32 read32(uint64 offset)
78 readInternal(offset, result);
81 uint64 read64(uint64 offset)
84 readInternal(offset, result);
87 void write32(uint64 offset, uint32 val)
89 writeInternal(offset, val);
91 void write64(uint64 offset, uint64 val)
93 writeInternal(offset, val);
97 class OwnMMIORange :
public MMIORangeInterface
102 OwnMMIORange(uint64 baseAddr_, uint64 size_,
bool readonly_ =
true);
103 uint32 read32(uint64 offset);
104 uint64 read64(uint64 offset);
105 void write32(uint64 offset, uint32 val);
106 void write64(uint64 offset, uint64 val);
112 std::shared_ptr<MMIORangeInterface> impl;
114 MMIORange(uint64 baseAddr_, uint64 size_,
bool readonly_ =
true);
115 uint32 read32(uint64 offset)
117 return impl->read32(offset);
119 uint64 read64(uint64 offset)
121 return impl->read64(offset);
123 void write32(uint64 offset, uint32 val)
125 impl->write32(offset, val);
127 void write64(uint64 offset, uint64 val)
129 impl->write64(offset, val);
133 #elif defined(__APPLE__) || defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) 146 MMIORange(uint64 baseAddr_, uint64 size_,
bool readonly_ =
true);
147 uint32 read32(uint64 offset);
148 uint64 read64(uint64 offset);
149 void write32(uint64 offset, uint32 val);
150 void write64(uint64 offset, uint64 val);
Definition: memoptest.cpp:24
Internal type and constant definitions.