mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
rtds2gpu: update register type to work for more complex payloads
This commit is contained in:
parent
c44aedd6a9
commit
b2698c8bd5
1 changed files with 20 additions and 4 deletions
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
|
||||
union axilite_reg_status_t {
|
||||
uint32_t value;
|
||||
|
@ -26,16 +27,31 @@ union reg_doorbell_t {
|
|||
count : 6,
|
||||
is_valid : 1;
|
||||
};
|
||||
|
||||
constexpr reg_doorbell_t() : value(0) {}
|
||||
};
|
||||
|
||||
template<size_t N, typename T = uint32_t>
|
||||
struct Rtds2GpuMemoryBuffer {
|
||||
static constexpr size_t valueCount = N;
|
||||
static constexpr size_t dataOffset = offsetof(Rtds2GpuMemoryBuffer, data);
|
||||
static constexpr size_t doorbellOffset = offsetof(Rtds2GpuMemoryBuffer, doorbell);
|
||||
// this type is only for memory interpretation, it makes no sense to create
|
||||
// an instance so it's forbidden
|
||||
Rtds2GpuMemoryBuffer() = delete;
|
||||
|
||||
// T can be a more complex type that wraps multiple values
|
||||
static constexpr size_t rawValueCount = N * (sizeof(T) / 4);
|
||||
|
||||
// As of C++14, offsetof() is not working for non-standard layout types (i.e.
|
||||
// composed of non-POD members). This might work in C++17 though.
|
||||
// More info: https://gist.github.com/graphitemaster/494f21190bb2c63c5516
|
||||
//static constexpr size_t doorbellOffset = offsetof(Rtds2GpuMemoryBuffer, doorbell);
|
||||
//static constexpr size_t dataOffset = offsetof(Rtds2GpuMemoryBuffer, data);
|
||||
|
||||
// HACK: This might break horribly, let's just hope C++17 will be there soon
|
||||
static constexpr size_t dataOffset = 0;
|
||||
static constexpr size_t doorbellOffset = N * sizeof(Rtds2GpuMemoryBuffer::data);
|
||||
|
||||
T data[N];
|
||||
reg_doorbell_t doorbell;
|
||||
} __attribute__((packed));
|
||||
};
|
||||
|
||||
#endif // REGISTER_TYPES_H
|
||||
|
|
Loading…
Add table
Reference in a new issue