rogue
Loading...
Searching...
No Matches
MemMap.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_HARDWARE_MEM_MAP_H__
18#define __ROGUE_HARDWARE_MEM_MAP_H__
19#include "rogue/Directives.h"
20
21#include <stdint.h>
22
23#include <atomic>
24#include <memory>
25#include <mutex>
26#include <thread>
27
28#include "rogue/Logging.h"
29#include "rogue/Queue.h"
32
33#define MAP_DEVICE "/dev/mem"
34
35namespace rogue {
36namespace hardware {
37
55 // `/dev/mem` file descriptor.
56 int32_t fd_;
57
58 // Mapped region size in bytes.
59 uint64_t size_;
60
61 // Base pointer of mapped memory region.
62 volatile uint8_t* map_;
63
64 // Logging
65 std::shared_ptr<rogue::Logging> log_;
66
68 protected:
69 std::unique_ptr<std::thread> thread_;
70 std::atomic<bool> threadEn_{false};
72
73 private:
74 // Background worker thread entry point.
75 void runThread();
76
77 // Queue
79
80 public:
96 static std::shared_ptr<rogue::hardware::MemMap> create(uint64_t base, uint32_t size);
97
99 static void setup_python();
100
114 MemMap(uint64_t base, uint32_t size);
115
117 ~MemMap();
118
122 void stop();
123
129 void doTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> tran);
130};
131
133typedef std::shared_ptr<rogue::hardware::MemMap> MemMapPtr;
134
135} // namespace hardware
136}; // namespace rogue
137
138#endif
Thread-safe bounded queue with optional busy threshold.
Definition Queue.h:39
Memory-slave bridge for direct /dev/mem mapped register access.
Definition MemMap.h:54
void doTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > tran)
Queues a memory transaction for asynchronous mapped-memory access.
Definition MemMap.cpp:104
void stop()
Stops worker thread, unmaps memory, and closes /dev/mem.
Definition MemMap.cpp:90
static std::shared_ptr< rogue::hardware::MemMap > create(uint64_t base, uint32_t size)
Creates a raw memory-map bridge instance.
Definition MemMap.cpp:48
static void setup_python()
Registers Python bindings for this class.
Definition MemMap.cpp:172
~MemMap()
Destroys the raw memory-map bridge instance.
Definition MemMap.cpp:86
Memory slave device.
Definition Slave.h:54
std::shared_ptr< rogue::hardware::MemMap > MemMapPtr
Shared pointer alias for MemMap.
Definition MemMap.h:133