diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-10 23:10:21 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-10 23:14:27 +0100 |
commit | 6e132b48d52ad285728529f982bb6421b100ba8a (patch) | |
tree | 84e60834306d6409fc5abf73f1ae4a70febb541a /utils/regtools/qeditor | |
parent | 68163e8f4974545a33de236139b5995883df7a17 (diff) | |
download | rockbox-6e132b48d52ad285728529f982bb6421b100ba8a.tar.gz rockbox-6e132b48d52ad285728529f982bb6421b100ba8a.zip |
regtools/qeditor: enhance backend write with write mode (SCT)
Change-Id: I723bce7a60fb08c1d1d5f894a225c36bc1ba4394
Diffstat (limited to 'utils/regtools/qeditor')
-rw-r--r-- | utils/regtools/qeditor/backend.cpp | 36 | ||||
-rw-r--r-- | utils/regtools/qeditor/backend.h | 37 |
2 files changed, 56 insertions, 17 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 | } |
diff --git a/utils/regtools/qeditor/backend.h b/utils/regtools/qeditor/backend.h index 72a19b6ec1..939ed9529f 100644 --- a/utils/regtools/qeditor/backend.h +++ b/utils/regtools/qeditor/backend.h | |||
@@ -17,12 +17,21 @@ public: | |||
17 | IoBackend() {} | 17 | IoBackend() {} |
18 | virtual ~IoBackend() {} | 18 | virtual ~IoBackend() {} |
19 | 19 | ||
20 | enum WriteMode | ||
21 | { | ||
22 | Write, Set, Clear, Toggle | ||
23 | }; | ||
24 | |||
20 | enum AccessType | 25 | enum AccessType |
21 | { | 26 | { |
22 | ByName, | 27 | ByName, |
23 | ByAddress, | 28 | ByAddress, |
24 | }; | 29 | }; |
25 | 30 | ||
31 | /** Register naming convention: name based access are of the form: | ||
32 | * HW.dev.reg | ||
33 | * where <dev> is the device name (including index like APPUART1) | ||
34 | * and <reg> is the register name (including index like PRIORITY29) */ | ||
26 | /* report whether backend supports register access type */ | 35 | /* report whether backend supports register access type */ |
27 | virtual bool SupportAccess(AccessType type) = 0; | 36 | virtual bool SupportAccess(AccessType type) = 0; |
28 | /* get SoC name */ | 37 | /* get SoC name */ |
@@ -37,8 +46,10 @@ public: | |||
37 | /* write a register by name or address | 46 | /* write a register by name or address |
38 | * NOTE: even on a read-only backend, a write is allowed be successful as long | 47 | * NOTE: even on a read-only backend, a write is allowed be successful as long |
39 | * as commit fails */ | 48 | * as commit fails */ |
40 | virtual bool WriteRegister(const QString& name, soc_word_t value) = 0; | 49 | virtual bool WriteRegister(const QString& name, soc_word_t value, |
41 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value) = 0; | 50 | WriteMode mode = Write) = 0; |
51 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, | ||
52 | WriteMode mode = Write) = 0; | ||
42 | /* check whether backend contains uncommitted (ie cached) writes */ | 53 | /* check whether backend contains uncommitted (ie cached) writes */ |
43 | virtual bool IsDirty() = 0; | 54 | virtual bool IsDirty() = 0; |
44 | /* commit all writes */ | 55 | /* commit all writes */ |
@@ -59,10 +70,10 @@ public: | |||
59 | { (void) addr; (void) value; return false; } | 70 | { (void) addr; (void) value; return false; } |
60 | virtual bool Reload() { return false; } | 71 | virtual bool Reload() { return false; } |
61 | virtual bool IsReadOnly() { return true; } | 72 | virtual bool IsReadOnly() { return true; } |
62 | virtual bool WriteRegister(const QString& name, soc_word_t value) | 73 | virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode) |
63 | { (void) name; (void) value; return false; } | 74 | { (void) name; (void) value; (void) mode; return false; } |
64 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value) | 75 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode) |
65 | { (void) addr; (void) value; return false; } | 76 | { (void) addr; (void) value; (void) mode; return false; } |
66 | virtual bool IsDirty() { return false; } | 77 | virtual bool IsDirty() { return false; } |
67 | virtual bool Commit() { return false; } | 78 | virtual bool Commit() { return false; } |
68 | }; | 79 | }; |
@@ -82,9 +93,9 @@ public: | |||
82 | { (void) addr; (void) value; return false; } | 93 | { (void) addr; (void) value; return false; } |
83 | virtual bool Reload(); | 94 | virtual bool Reload(); |
84 | virtual bool IsReadOnly() { return m_readonly; } | 95 | virtual bool IsReadOnly() { return m_readonly; } |
85 | virtual bool WriteRegister(const QString& name, soc_word_t value); | 96 | virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode); |
86 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value) | 97 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode) |
87 | { (void) addr; (void) value; return false; } | 98 | { (void) addr; (void) value; (void) mode; return false; } |
88 | virtual bool IsDirty() { return m_dirty; } | 99 | virtual bool IsDirty() { return m_dirty; } |
89 | virtual bool Commit(); | 100 | virtual bool Commit(); |
90 | 101 | ||
@@ -142,9 +153,9 @@ public: | |||
142 | virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value); | 153 | virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value); |
143 | virtual bool Reload(); | 154 | virtual bool Reload(); |
144 | virtual bool IsReadOnly() { return false; } | 155 | virtual bool IsReadOnly() { return false; } |
145 | virtual bool WriteRegister(const QString& name, soc_word_t value) | 156 | virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode) |
146 | { (void) name; (void) value; return false; } | 157 | { (void) name; (void) value; (void) mode; return false; } |
147 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value); | 158 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode); |
148 | virtual bool IsDirty() { return false; } | 159 | virtual bool IsDirty() { return false; } |
149 | virtual bool Commit() { return true; } | 160 | virtual bool Commit() { return true; } |
150 | 161 | ||
@@ -258,6 +269,8 @@ public: | |||
258 | bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v); | 269 | bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v); |
259 | bool ReadRegisterField(const QString& dev, const QString& reg, | 270 | bool ReadRegisterField(const QString& dev, const QString& reg, |
260 | const QString& field, soc_word_t& v); | 271 | const QString& field, soc_word_t& v); |
272 | bool WriteRegister(const QString& dev, const QString& reg, soc_word_t v, | ||
273 | IoBackend::WriteMode mode = IoBackend::Write); | ||
261 | bool GetDevRef(const QString& dev, SocDevRef& ref); | 274 | bool GetDevRef(const QString& dev, SocDevRef& ref); |
262 | bool GetRegRef(const SocDevRef& dev, const QString& reg, SocRegRef& ref); | 275 | bool GetRegRef(const SocDevRef& dev, const QString& reg, SocRegRef& ref); |
263 | bool GetFieldRef(const SocRegRef& reg, const QString& field, SocFieldRef& ref); | 276 | bool GetFieldRef(const SocRegRef& reg, const QString& field, SocFieldRef& ref); |