diff options
Diffstat (limited to 'utils/regtools/qeditor/backend.cpp')
-rw-r--r-- | utils/regtools/qeditor/backend.cpp | 36 |
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 | ||
109 | bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value) | 109 | bool 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 | ||
116 | bool FileIoBackend::Commit() | 122 | bool 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 | ||
284 | bool HWStubIoBackend:: WriteRegister(soc_addr_t addr, soc_word_t value) | 290 | bool 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 | ||
403 | bool 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 | ||
391 | bool BackendHelper::GetDevRef(const QString& sdev, SocDevRef& ref) | 417 | bool 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 | } |