RISC-V debug module register structs
This commit is contained in:
68
src/Targets/RiscV/DebugModule/Registers/ControlRegister.hpp
Normal file
68
src/Targets/RiscV/DebugModule/Registers/ControlRegister.hpp
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "src/Targets/RiscV/DebugModule/DebugModule.hpp"
|
||||||
|
|
||||||
|
namespace Targets::RiscV::DebugModule::Registers
|
||||||
|
{
|
||||||
|
enum HartSelectionMode: std::uint8_t
|
||||||
|
{
|
||||||
|
SINGLE = 0x00,
|
||||||
|
MULTI = 0x01,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ControlRegister
|
||||||
|
{
|
||||||
|
bool debugModuleActive:1 = false;
|
||||||
|
bool ndmReset:1 = false;
|
||||||
|
bool clearResetHaltRequest:1 = false;
|
||||||
|
bool setResetHaltRequest:1 = false;
|
||||||
|
bool clearKeepAlive:1 = false;
|
||||||
|
bool setKeepAlive:1 = false;
|
||||||
|
HartIndex selectedHartIndex:20 = 0;
|
||||||
|
HartSelectionMode hartSelectionMode:1 = HartSelectionMode::SINGLE;
|
||||||
|
bool acknowledgeUnavailableHarts:1 = false;
|
||||||
|
bool acknowledgeHaveReset:1 = false;
|
||||||
|
bool hartReset:1 = false;
|
||||||
|
bool resumeRequest:1 = false;
|
||||||
|
bool haltRequest:1 = false;
|
||||||
|
|
||||||
|
ControlRegister() = default;
|
||||||
|
|
||||||
|
explicit ControlRegister(RegisterValue registerValue)
|
||||||
|
: debugModuleActive(static_cast<bool>(registerValue & 0x01))
|
||||||
|
, ndmReset(static_cast<bool>(registerValue & (0x01 << 1)))
|
||||||
|
, clearResetHaltRequest(static_cast<bool>(registerValue & (0x01 << 2)))
|
||||||
|
, setResetHaltRequest(static_cast<bool>(registerValue & (0x01 << 3)))
|
||||||
|
, clearKeepAlive(static_cast<bool>(registerValue & (0x01 << 4)))
|
||||||
|
, setKeepAlive(static_cast<bool>(registerValue & (0x01 << 5)))
|
||||||
|
, selectedHartIndex((((registerValue >> 6) & 0x3FF) << 10) | ((registerValue >> 16) & 0x3FF))
|
||||||
|
, hartSelectionMode(static_cast<HartSelectionMode>(registerValue & (0x01 << 26)))
|
||||||
|
, acknowledgeUnavailableHarts(static_cast<bool>(registerValue & (0x01 << 27)))
|
||||||
|
, acknowledgeHaveReset(static_cast<bool>(registerValue & (0x01 << 28)))
|
||||||
|
, hartReset(static_cast<bool>(registerValue & (0x01 << 29)))
|
||||||
|
, resumeRequest(static_cast<bool>(registerValue & (0x01 << 30)))
|
||||||
|
, haltRequest(static_cast<bool>(registerValue & static_cast<std::uint32_t>(0x01 << 31)))
|
||||||
|
{}
|
||||||
|
|
||||||
|
RegisterValue value() const {
|
||||||
|
return RegisterValue{0}
|
||||||
|
| static_cast<RegisterValue>(this->debugModuleActive)
|
||||||
|
| static_cast<RegisterValue>(this->ndmReset) << 1
|
||||||
|
| static_cast<RegisterValue>(this->clearResetHaltRequest) << 2
|
||||||
|
| static_cast<RegisterValue>(this->setResetHaltRequest) << 3
|
||||||
|
| static_cast<RegisterValue>(this->clearKeepAlive) << 4
|
||||||
|
| static_cast<RegisterValue>(this->setKeepAlive) << 5
|
||||||
|
| static_cast<RegisterValue>(this->selectedHartIndex >> 10) << 6
|
||||||
|
| static_cast<RegisterValue>(this->selectedHartIndex & 0x3FF) << 16
|
||||||
|
| static_cast<RegisterValue>(this->hartSelectionMode) << 26
|
||||||
|
| static_cast<RegisterValue>(this->acknowledgeUnavailableHarts) << 27
|
||||||
|
| static_cast<RegisterValue>(this->acknowledgeHaveReset) << 28
|
||||||
|
| static_cast<RegisterValue>(this->hartReset) << 29
|
||||||
|
| static_cast<RegisterValue>(this->resumeRequest) << 30
|
||||||
|
| static_cast<RegisterValue>(this->haltRequest) << 31
|
||||||
|
;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
80
src/Targets/RiscV/DebugModule/Registers/StatusRegister.hpp
Normal file
80
src/Targets/RiscV/DebugModule/Registers/StatusRegister.hpp
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "src/Targets/RiscV/DebugModule/DebugModule.hpp"
|
||||||
|
|
||||||
|
namespace Targets::RiscV::DebugModule::Registers
|
||||||
|
{
|
||||||
|
struct StatusRegister
|
||||||
|
{
|
||||||
|
std::uint8_t version:4 = 0;
|
||||||
|
bool validConfigStructurePointer:1 = false;
|
||||||
|
bool supportsResetHalt:1 = false;
|
||||||
|
bool authBusy:1 = false;
|
||||||
|
bool authenticated:1 = false;
|
||||||
|
bool anyHalted:1 = false;
|
||||||
|
bool allHalted:1 = false;
|
||||||
|
bool anyRunning:1 = false;
|
||||||
|
bool allRunning:1 = false;
|
||||||
|
bool anyUnavailable:1 = false;
|
||||||
|
bool allUnavailable:1 = false;
|
||||||
|
bool anyNonExistent:1 = false;
|
||||||
|
bool allNonExistent:1 = false;
|
||||||
|
bool anyResumeAcknowledge:1 = false;
|
||||||
|
bool allResumeAcknowledge:1 = false;
|
||||||
|
bool anyHaveReset:1 = false;
|
||||||
|
bool allHaveReset:1 = false;
|
||||||
|
bool implicitBreak:1 = false;
|
||||||
|
bool stickyUnavailableBits:1 = false;
|
||||||
|
bool ndmResetPending:1 = false;
|
||||||
|
|
||||||
|
explicit StatusRegister(RegisterValue registerValue)
|
||||||
|
: version(static_cast<std::uint8_t>(registerValue & 0x0F))
|
||||||
|
, validConfigStructurePointer(static_cast<bool>(registerValue & (0x01 << 4)))
|
||||||
|
, supportsResetHalt(static_cast<bool>(registerValue & (0x01 << 5)))
|
||||||
|
, authBusy(static_cast<bool>(registerValue & (0x01 << 6)))
|
||||||
|
, authenticated(static_cast<bool>(registerValue & (0x01 << 7)))
|
||||||
|
, anyHalted(static_cast<bool>(registerValue & (0x01 << 8)))
|
||||||
|
, allHalted(static_cast<bool>(registerValue & (0x01 << 9)))
|
||||||
|
, anyRunning(static_cast<bool>(registerValue & (0x01 << 10)))
|
||||||
|
, allRunning(static_cast<bool>(registerValue & (0x01 << 11)))
|
||||||
|
, anyUnavailable(static_cast<bool>(registerValue & (0x01 << 12)))
|
||||||
|
, allUnavailable(static_cast<bool>(registerValue & (0x01 << 13)))
|
||||||
|
, anyNonExistent(static_cast<bool>(registerValue & (0x01 << 14)))
|
||||||
|
, allNonExistent(static_cast<bool>(registerValue & (0x01 << 15)))
|
||||||
|
, anyResumeAcknowledge(static_cast<bool>(registerValue & (0x01 << 16)))
|
||||||
|
, allResumeAcknowledge(static_cast<bool>(registerValue & (0x01 << 17)))
|
||||||
|
, anyHaveReset(static_cast<bool>(registerValue & (0x01 << 18)))
|
||||||
|
, allHaveReset(static_cast<bool>(registerValue & (0x01 << 19)))
|
||||||
|
, implicitBreak(static_cast<bool>(registerValue & (0x01 << 22)))
|
||||||
|
, stickyUnavailableBits(static_cast<bool>(registerValue & (0x01 << 23)))
|
||||||
|
, ndmResetPending(static_cast<bool>(registerValue & (0x01 << 24)))
|
||||||
|
{}
|
||||||
|
|
||||||
|
RegisterValue value() const {
|
||||||
|
return RegisterValue{0}
|
||||||
|
| static_cast<RegisterValue>(this->version)
|
||||||
|
| static_cast<RegisterValue>(this->validConfigStructurePointer) << 4
|
||||||
|
| static_cast<RegisterValue>(this->supportsResetHalt) << 5
|
||||||
|
| static_cast<RegisterValue>(this->authBusy) << 6
|
||||||
|
| static_cast<RegisterValue>(this->authenticated) << 7
|
||||||
|
| static_cast<RegisterValue>(this->anyHalted) << 8
|
||||||
|
| static_cast<RegisterValue>(this->allHalted) << 9
|
||||||
|
| static_cast<RegisterValue>(this->anyRunning) << 10
|
||||||
|
| static_cast<RegisterValue>(this->allRunning) << 11
|
||||||
|
| static_cast<RegisterValue>(this->anyUnavailable) << 12
|
||||||
|
| static_cast<RegisterValue>(this->allUnavailable) << 13
|
||||||
|
| static_cast<RegisterValue>(this->anyNonExistent) << 14
|
||||||
|
| static_cast<RegisterValue>(this->allNonExistent) << 15
|
||||||
|
| static_cast<RegisterValue>(this->anyResumeAcknowledge) << 16
|
||||||
|
| static_cast<RegisterValue>(this->allResumeAcknowledge) << 17
|
||||||
|
| static_cast<RegisterValue>(this->anyHaveReset) << 18
|
||||||
|
| static_cast<RegisterValue>(this->allHaveReset) << 19
|
||||||
|
| static_cast<RegisterValue>(this->implicitBreak) << 22
|
||||||
|
| static_cast<RegisterValue>(this->stickyUnavailableBits) << 23
|
||||||
|
| static_cast<RegisterValue>(this->ndmResetPending) << 24
|
||||||
|
;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user