summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/backend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/regtools/qeditor/backend.cpp')
-rw-r--r--utils/regtools/qeditor/backend.cpp36
1 files changed, 31 insertions, 5 deletions
diff --git a/utils/regtools/qeditor/backend.cpp b/utils/regtools/qeditor/backend.cpp
index fa107ec26c..44430c25da 100644
--- a/utils/regtools/qeditor/backend.cpp
+++ b/utils/regtools/qeditor/backend.cpp
@@ -106,11 +106,17 @@ bool FileIoBackend::Reload()
106 return true; 106 return true;
107} 107}
108 108
109bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value) 109bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value, WriteMode mode)
110{ 110{
111 m_dirty = true; 111 m_dirty = true;
112 m_map[name] = value; 112 switch(mode)
113 return true; 113 {
114 case Write: m_map[name] = value; return true;
115 case Set: m_map[name] |= value; return true;
116 case Clear: m_map[name] &= ~value; return true;
117 case Toggle: m_map[name] ^= value; return true;
118 default: return false;
119 }
114} 120}
115 121
116bool FileIoBackend::Commit() 122bool FileIoBackend::Commit()
@@ -281,8 +287,15 @@ bool HWStubIoBackend::ReadRegister(soc_addr_t addr, soc_word_t& value)
281 return m_dev->ReadMem(addr, sizeof(value), &value); 287 return m_dev->ReadMem(addr, sizeof(value), &value);
282} 288}
283 289
284bool HWStubIoBackend:: WriteRegister(soc_addr_t addr, soc_word_t value) 290bool HWStubIoBackend::WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode)
285{ 291{
292 switch(mode)
293 {
294 case Set: addr += 4; break;
295 case Clear: addr += 8; break;
296 case Toggle: addr += 12; break;
297 default: break;
298 }
286 return m_dev->WriteMem(addr, sizeof(value), &value); 299 return m_dev->WriteMem(addr, sizeof(value), &value);
287} 300}
288 301
@@ -387,6 +400,19 @@ bool BackendHelper::ReadRegister(const QString& dev, const QString& reg, soc_wor
387 return false; 400 return false;
388} 401}
389 402
403bool BackendHelper::WriteRegister(const QString& dev, const QString& reg,
404 soc_word_t v, IoBackend::WriteMode mode)
405{
406 if(m_io_backend->SupportAccess(IoBackend::ByName))
407 return m_io_backend->WriteRegister("HW." + dev + "." + reg, v, mode);
408 if(m_io_backend->SupportAccess(IoBackend::ByAddress))
409 {
410 soc_addr_t addr;
411 if(GetRegisterAddress(dev, reg, addr))
412 return m_io_backend->WriteRegister(addr, v, mode);
413 }
414 return false;
415}
390 416
391bool BackendHelper::GetDevRef(const QString& sdev, SocDevRef& ref) 417bool BackendHelper::GetDevRef(const QString& sdev, SocDevRef& ref)
392{ 418{
@@ -456,4 +482,4 @@ bool BackendHelper::ReadRegisterField(const QString& dev, const QString& reg,
456 return false; 482 return false;
457 v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit; 483 v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit;
458 return true; 484 return true;
459} \ No newline at end of file 485}