diff options
Diffstat (limited to 'utils/regtools/qeditor/backend.cpp')
-rw-r--r-- | utils/regtools/qeditor/backend.cpp | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/utils/regtools/qeditor/backend.cpp b/utils/regtools/qeditor/backend.cpp index 10ef84c6a0..423b0bb520 100644 --- a/utils/regtools/qeditor/backend.cpp +++ b/utils/regtools/qeditor/backend.cpp | |||
@@ -90,9 +90,10 @@ IoBackend *Backend::CreateHWStubIoBackend(HWStubDevice *dev) | |||
90 | * FileIoBackend | 90 | * FileIoBackend |
91 | */ | 91 | */ |
92 | 92 | ||
93 | FileIoBackend::FileIoBackend(const QString& filename) | 93 | FileIoBackend::FileIoBackend(const QString& filename, const QString& soc_name) |
94 | { | 94 | { |
95 | m_filename = filename; | 95 | m_filename = filename; |
96 | m_soc = soc_name; | ||
96 | Reload(); | 97 | Reload(); |
97 | } | 98 | } |
98 | 99 | ||
@@ -163,7 +164,7 @@ bool FileIoBackend::Commit() | |||
163 | while(it.hasNext()) | 164 | while(it.hasNext()) |
164 | { | 165 | { |
165 | it.next(); | 166 | it.next(); |
166 | out << it.key() << " = " << it.value() << "\n"; | 167 | out << it.key() << " = " << hex << showbase << it.value() << "\n"; |
167 | } | 168 | } |
168 | out.flush(); | 169 | out.flush(); |
169 | return file.flush(); | 170 | return file.flush(); |
@@ -175,6 +176,16 @@ bool FileIoBackend::Commit() | |||
175 | */ | 176 | */ |
176 | HWStubDevice::HWStubDevice(struct libusb_device *dev) | 177 | HWStubDevice::HWStubDevice(struct libusb_device *dev) |
177 | { | 178 | { |
179 | Init(dev); | ||
180 | } | ||
181 | |||
182 | HWStubDevice::HWStubDevice(const HWStubDevice *dev) | ||
183 | { | ||
184 | Init(dev->m_dev); | ||
185 | } | ||
186 | |||
187 | void HWStubDevice::Init(struct libusb_device *dev) | ||
188 | { | ||
178 | libusb_ref_device(dev); | 189 | libusb_ref_device(dev); |
179 | m_dev = dev; | 190 | m_dev = dev; |
180 | m_handle = 0; | 191 | m_handle = 0; |
@@ -325,7 +336,7 @@ QString HWStubIoBackend::GetSocName() | |||
325 | 336 | ||
326 | HWStubIoBackend::~HWStubIoBackend() | 337 | HWStubIoBackend::~HWStubIoBackend() |
327 | { | 338 | { |
328 | m_dev->Close(); | 339 | delete m_dev; |
329 | } | 340 | } |
330 | 341 | ||
331 | bool HWStubIoBackend::ReadRegister(soc_addr_t addr, soc_word_t& value) | 342 | bool HWStubIoBackend::ReadRegister(soc_addr_t addr, soc_word_t& value) |
@@ -530,3 +541,31 @@ bool BackendHelper::ReadRegisterField(const QString& dev, const QString& reg, | |||
530 | v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit; | 541 | v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit; |
531 | return true; | 542 | return true; |
532 | } | 543 | } |
544 | |||
545 | bool BackendHelper::DumpAllRegisters(const QString& filename) | ||
546 | { | ||
547 | FileIoBackend b(filename, QString::fromStdString(m_soc.GetSoc().name)); | ||
548 | BackendHelper bh(&b, m_soc); | ||
549 | for(size_t i = 0; i < m_soc.GetSoc().dev.size(); i++) | ||
550 | { | ||
551 | const soc_dev_t& dev = m_soc.GetSoc().dev[i]; | ||
552 | for(size_t j = 0; j < dev.addr.size(); j++) | ||
553 | { | ||
554 | QString devname = QString::fromStdString(dev.addr[j].name); | ||
555 | for(size_t k = 0; k < dev.reg.size(); k++) | ||
556 | { | ||
557 | const soc_reg_t& reg = dev.reg[k]; | ||
558 | for(size_t l = 0; l < reg.addr.size(); l++) | ||
559 | { | ||
560 | QString regname = QString::fromStdString(reg.addr[l].name); | ||
561 | soc_word_t val; | ||
562 | if(!ReadRegister(devname, regname, val)) | ||
563 | return false; | ||
564 | if(!bh.WriteRegister(devname, regname, val)) | ||
565 | return false; | ||
566 | } | ||
567 | } | ||
568 | } | ||
569 | } | ||
570 | return b.Commit(); | ||
571 | } | ||