summaryrefslogtreecommitdiff
path: root/utils/regtools
diff options
context:
space:
mode:
Diffstat (limited to 'utils/regtools')
-rw-r--r--utils/regtools/qeditor/analyser.cpp2
-rw-r--r--utils/regtools/qeditor/analyser.h10
-rw-r--r--utils/regtools/qeditor/backend.cpp73
-rw-r--r--utils/regtools/qeditor/backend.h68
-rw-r--r--utils/regtools/qeditor/regtab.cpp69
-rw-r--r--utils/regtools/qeditor/regtab.h31
-rw-r--r--utils/regtools/qeditor/std_analysers.cpp6
-rw-r--r--utils/regtools/qeditor/std_analysers.h6
8 files changed, 161 insertions, 104 deletions
diff --git a/utils/regtools/qeditor/analyser.cpp b/utils/regtools/qeditor/analyser.cpp
index 1ab213872b..5bd8c9e538 100644
--- a/utils/regtools/qeditor/analyser.cpp
+++ b/utils/regtools/qeditor/analyser.cpp
@@ -1,6 +1,6 @@
1#include "analyser.h" 1#include "analyser.h"
2 2
3Analyser::Analyser(const soc_t& soc, IoBackend *backend) 3Analyser::Analyser(const SocRef& soc, IoBackend *backend)
4 :m_soc(soc), m_io_backend(backend) 4 :m_soc(soc), m_io_backend(backend)
5{ 5{
6} 6}
diff --git a/utils/regtools/qeditor/analyser.h b/utils/regtools/qeditor/analyser.h
index 33094574c1..a06652bfb0 100644
--- a/utils/regtools/qeditor/analyser.h
+++ b/utils/regtools/qeditor/analyser.h
@@ -10,12 +10,12 @@ class Analyser : public QObject
10{ 10{
11 Q_OBJECT 11 Q_OBJECT
12public: 12public:
13 Analyser(const soc_t& soc, IoBackend *backend); 13 Analyser(const SocRef& soc, IoBackend *backend);
14 virtual ~Analyser(); 14 virtual ~Analyser();
15 virtual QWidget *GetWidget() = 0; 15 virtual QWidget *GetWidget() = 0;
16 16
17protected: 17protected:
18 soc_t m_soc; 18 const SocRef& m_soc;
19 IoBackend *m_io_backend; 19 IoBackend *m_io_backend;
20}; 20};
21 21
@@ -28,7 +28,7 @@ public:
28 virtual QString GetName() = 0; 28 virtual QString GetName() = 0;
29 virtual bool SupportSoc(const QString& soc_name) = 0; 29 virtual bool SupportSoc(const QString& soc_name) = 0;
30 // return NULL of soc is not handled by the analyser 30 // return NULL of soc is not handled by the analyser
31 virtual Analyser *Create(const soc_t& soc, IoBackend *backend) = 0; 31 virtual Analyser *Create(const SocRef& soc, IoBackend *backend) = 0;
32private: 32private:
33 QString m_name; 33 QString m_name;
34 34
@@ -51,9 +51,9 @@ public:
51 virtual QString GetName() { return m_name; } 51 virtual QString GetName() { return m_name; }
52 virtual bool SupportSoc(const QString& soc_name) { return T::SupportSoc(soc_name); } 52 virtual bool SupportSoc(const QString& soc_name) { return T::SupportSoc(soc_name); }
53 // return NULL of soc is not handled by the analyser 53 // return NULL of soc is not handled by the analyser
54 virtual T *Create(const soc_t& soc, IoBackend *backend) 54 virtual T *Create(const SocRef& soc, IoBackend *backend)
55 { 55 {
56 if(!T::SupportSoc(soc.name.c_str())) 56 if(!T::SupportSoc(soc.GetSoc().name.c_str()))
57 return 0; 57 return 0;
58 return new T(soc, backend); 58 return new T(soc, backend);
59 } 59 }
diff --git a/utils/regtools/qeditor/backend.cpp b/utils/regtools/qeditor/backend.cpp
index 22210916b1..75c504a6f6 100644
--- a/utils/regtools/qeditor/backend.cpp
+++ b/utils/regtools/qeditor/backend.cpp
@@ -19,12 +19,12 @@ QStringList Backend::GetSocNameList()
19 return sl; 19 return sl;
20} 20}
21 21
22bool Backend::GetSocByName(const QString& name, soc_t& s) 22bool Backend::GetSocByName(const QString& name, SocRef& s)
23{ 23{
24 for(std::list< soc_t >::iterator it = m_socs.begin(); it != m_socs.end(); ++it) 24 for(std::list< soc_t >::iterator it = m_socs.begin(); it != m_socs.end(); ++it)
25 if(it->name == name.toStdString()) 25 if(it->name == name.toStdString())
26 { 26 {
27 s = *it; 27 s = SocRef(&(*it));
28 return true; 28 return true;
29 } 29 }
30 return false; 30 return false;
@@ -326,7 +326,7 @@ bool HWStubBackendHelper::HasHotPlugSupport()
326 * BackendHelper 326 * BackendHelper
327 */ 327 */
328 328
329BackendHelper::BackendHelper(IoBackend *io_backend, const soc_t& soc) 329BackendHelper::BackendHelper(IoBackend *io_backend, const SocRef& soc)
330 :m_io_backend(io_backend), m_soc(soc) 330 :m_io_backend(io_backend), m_soc(soc)
331{ 331{
332} 332}
@@ -345,75 +345,72 @@ bool BackendHelper::ReadRegister(const QString& dev, const QString& reg, soc_wor
345} 345}
346 346
347 347
348bool BackendHelper::GetDeviceDesc(const QString& dev, soc_dev_t& dev_desc, size_t& index) 348bool BackendHelper::GetDevRef(const QString& sdev, SocDevRef& ref)
349{ 349{
350 for(size_t i = 0; i < m_soc.dev.size(); i++) 350 for(size_t i = 0; i < m_soc.GetSoc().dev.size(); i++)
351 { 351 {
352 for(size_t j = 0; j < m_soc.dev[i].addr.size(); j++) 352 const soc_dev_t& dev = m_soc.GetSoc().dev[i];
353 if(m_soc.dev[i].addr[j].name.c_str() == dev) 353 for(size_t j = 0; j < dev.addr.size(); j++)
354 if(dev.addr[j].name.c_str() == sdev)
354 { 355 {
355 dev_desc = m_soc.dev[i]; 356 ref = SocDevRef(m_soc, i, j);
356 index = j;
357 return true; 357 return true;
358 } 358 }
359 } 359 }
360 return false; 360 return false;
361} 361}
362 362
363bool BackendHelper::GetRegisterDesc(const soc_dev_t& dev, const QString& reg, 363bool BackendHelper::GetRegRef(const SocDevRef& dev, const QString& sreg, SocRegRef& ref)
364 soc_reg_t& reg_desc, size_t& index)
365{ 364{
366 for(size_t i = 0; i < dev.reg.size(); i++) 365 const soc_dev_t& sdev = dev.GetDev();
366 for(size_t i = 0; i < sdev.reg.size(); i++)
367 { 367 {
368 for(size_t j = 0; j < dev.reg[i].addr.size(); j++) 368 const soc_reg_t& reg = sdev.reg[i];
369 if(dev.reg[i].addr[j].name.c_str() == reg) 369 for(size_t j = 0; j < reg.addr.size(); j++)
370 {
371 if(reg.addr[j].name.c_str() == sreg)
370 { 372 {
371 index = j; 373 ref = SocRegRef(dev, i, j);
372 reg_desc = dev.reg[i];
373 return true; 374 return true;
374 } 375 }
376 }
375 } 377 }
376 return false; 378 return false;
377} 379}
378 380
379bool BackendHelper::GetFieldDesc(const soc_reg_t& reg_desc, const QString& field, 381bool BackendHelper::GetFieldRef(const SocRegRef& reg, const QString& sfield, SocFieldRef& ref)
380 soc_reg_field_t& field_desc)
381{ 382{
382 for(size_t i = 0; i < reg_desc.field.size(); i++) 383 for(size_t i = 0; i < reg.GetReg().field.size(); i++)
383 if(reg_desc.field[i].name.c_str() == field) 384 if(reg.GetReg().field[i].name.c_str() == sfield)
384 field_desc = reg_desc.field[i]; 385 {
386 ref = SocFieldRef(reg, i);
387 return true;
388 }
385 return false; 389 return false;
386} 390}
387 391
388bool BackendHelper::GetRegisterAddress(const QString& dev, const QString& reg, 392bool BackendHelper::GetRegisterAddress(const QString& dev, const QString& reg,
389 soc_addr_t& addr) 393 soc_addr_t& addr)
390{ 394{
391 size_t dev_index, reg_index; 395 SocDevRef dev_ref;
392 soc_dev_t dev_desc; 396 SocRegRef reg_ref;
393 soc_reg_t reg_desc; 397 if(!GetDevRef(dev, dev_ref) || !GetRegRef(dev_ref, reg, reg_ref))
394 if(!GetDeviceDesc(dev, dev_desc, dev_index))
395 return false;
396 if(!GetRegisterDesc(dev_desc, reg, reg_desc, reg_index))
397 return false; 398 return false;
398 addr = dev_desc.addr[dev_index].addr + reg_desc.addr[reg_index].addr; 399 addr = dev_ref.GetDevAddr().addr + reg_ref.GetRegAddr().addr;
399 return true; 400 return true;
400} 401}
401 402
402bool BackendHelper::ReadRegisterField(const QString& dev, const QString& reg, 403bool BackendHelper::ReadRegisterField(const QString& dev, const QString& reg,
403 const QString& field, soc_word_t& v) 404 const QString& field, soc_word_t& v)
404{ 405{
405 size_t dev_index, reg_index; 406 SocDevRef dev_ref;
406 soc_dev_t dev_desc; 407 SocRegRef reg_ref;
407 soc_reg_t reg_desc; 408 SocFieldRef field_ref;
408 soc_reg_field_t field_desc; 409 if(!GetDevRef(dev, dev_ref) || !GetRegRef(dev_ref, reg, reg_ref) ||
409 if(!GetDeviceDesc(dev, dev_desc, dev_index)) 410 !GetFieldRef(reg_ref, field, field_ref))
410 return false;
411 if(!GetRegisterDesc(dev_desc, reg, reg_desc, reg_index))
412 return false;
413 if(!GetFieldDesc(reg_desc, field, field_desc))
414 return false; 411 return false;
415 if(!ReadRegister(dev, reg, v)) 412 if(!ReadRegister(dev, reg, v))
416 return false; 413 return false;
417 v = (v & field_desc.bitmask()) >> field_desc.first_bit; 414 v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit;
418 return true; 415 return true;
419} \ No newline at end of file 416} \ No newline at end of file
diff --git a/utils/regtools/qeditor/backend.h b/utils/regtools/qeditor/backend.h
index 55f31cce52..879b88c42c 100644
--- a/utils/regtools/qeditor/backend.h
+++ b/utils/regtools/qeditor/backend.h
@@ -23,10 +23,14 @@ public:
23 ByAddress, 23 ByAddress,
24 }; 24 };
25 25
26 /* report whether backend supports register access type */
26 virtual bool SupportAccess(AccessType type) = 0; 27 virtual bool SupportAccess(AccessType type) = 0;
28 /* get SoC name */
27 virtual QString GetSocName() = 0; 29 virtual QString GetSocName() = 0;
30 /* read a register by name or address */
28 virtual bool ReadRegister(const QString& name, soc_word_t& value) = 0; 31 virtual bool ReadRegister(const QString& name, soc_word_t& value) = 0;
29 virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) = 0; 32 virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) = 0;
33 /* reload content (if it makes sense) */
30 virtual bool Reload() = 0; 34 virtual bool Reload() = 0;
31}; 35};
32 36
@@ -140,6 +144,56 @@ protected:
140}; 144};
141#endif 145#endif
142 146
147class SocRef
148{
149public:
150 SocRef():m_soc(0) {}
151 SocRef(const soc_t *soc):m_soc(soc) {}
152 const soc_t& GetSoc() const { return *m_soc; }
153protected:
154 const soc_t *m_soc;
155};
156
157class SocDevRef : public SocRef
158{
159public:
160 SocDevRef() {}
161 SocDevRef(const SocRef& soc, int dev_idx, int dev_addr_idx)
162 :SocRef(soc), m_dev_idx(dev_idx), m_dev_addr_idx(dev_addr_idx) {}
163 int GetDevIndex() const { return m_dev_idx; }
164 const soc_dev_t& GetDev() const { return GetSoc().dev[GetDevIndex()]; }
165 int GetDevAddrIndex() const { return m_dev_addr_idx; }
166 const soc_dev_addr_t& GetDevAddr() const { return GetDev().addr[GetDevAddrIndex()]; }
167protected:
168 int m_dev_idx, m_dev_addr_idx;
169};
170
171class SocRegRef : public SocDevRef
172{
173public:
174 SocRegRef() {}
175 SocRegRef(const SocDevRef& dev, int reg_idx, int reg_addr_idx)
176 :SocDevRef(dev), m_reg_idx(reg_idx), m_reg_addr_idx(reg_addr_idx) {}
177 int GetRegIndex() const { return m_reg_idx; }
178 const soc_reg_t& GetReg() const { return GetDev().reg[GetRegIndex()]; }
179 int GetRegAddrIndex() const { return m_reg_addr_idx; }
180 const soc_reg_addr_t& GetRegAddr() const { return GetReg().addr[GetRegAddrIndex()]; }
181protected:
182 int m_reg_idx, m_reg_addr_idx;
183};
184
185class SocFieldRef : public SocRegRef
186{
187public:
188 SocFieldRef(){}
189 SocFieldRef(const SocRegRef& reg, int field_idx)
190 :SocRegRef(reg), m_field_idx(field_idx) {}
191 int GetFieldIndex() const { return m_field_idx; }
192 const soc_reg_field_t& GetField() const { return GetReg().field[GetFieldIndex()]; }
193protected:
194 int m_field_idx;
195};
196
143class Backend : public QObject 197class Backend : public QObject
144{ 198{
145 Q_OBJECT 199 Q_OBJECT
@@ -148,7 +202,7 @@ public:
148 202
149 QStringList GetSocNameList(); 203 QStringList GetSocNameList();
150 bool LoadSocDesc(const QString& filename); 204 bool LoadSocDesc(const QString& filename);
151 bool GetSocByName(const QString& name, soc_t& s); 205 bool GetSocByName(const QString& name, SocRef& s);
152 IoBackend *CreateDummyIoBackend(); 206 IoBackend *CreateDummyIoBackend();
153 IoBackend *CreateFileIoBackend(const QString& filename); 207 IoBackend *CreateFileIoBackend(const QString& filename);
154#ifdef HAVE_HWSTUB 208#ifdef HAVE_HWSTUB
@@ -158,23 +212,23 @@ public:
158signals: 212signals:
159 void OnSocListChanged(); 213 void OnSocListChanged();
160private: 214private:
161 std::vector< soc_t > m_socs; 215 std::list< soc_t > m_socs;
162}; 216};
163 217
164class BackendHelper 218class BackendHelper
165{ 219{
166public: 220public:
167 BackendHelper(IoBackend *io_backend, const soc_t& soc); 221 BackendHelper(IoBackend *io_backend, const SocRef& soc);
168 bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v); 222 bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v);
169 bool ReadRegisterField(const QString& dev, const QString& reg, 223 bool ReadRegisterField(const QString& dev, const QString& reg,
170 const QString& field, soc_word_t& v); 224 const QString& field, soc_word_t& v);
171 bool GetDeviceDesc(const QString& dev, soc_dev_t& dev_desc, size_t& index); 225 bool GetDevRef(const QString& dev, SocDevRef& ref);
172 bool GetRegisterDesc(const soc_dev_t& dev, const QString& reg, soc_reg_t& reg_desc, size_t& index); 226 bool GetRegRef(const SocDevRef& dev, const QString& reg, SocRegRef& ref);
173 bool GetFieldDesc(const soc_reg_t& reg_desc, const QString& field, soc_reg_field_t& field_desc); 227 bool GetFieldRef(const SocRegRef& reg, const QString& field, SocFieldRef& ref);
174 bool GetRegisterAddress(const QString& dev, const QString& reg, soc_addr_t& addr); 228 bool GetRegisterAddress(const QString& dev, const QString& reg, soc_addr_t& addr);
175private: 229private:
176 IoBackend *m_io_backend; 230 IoBackend *m_io_backend;
177 soc_t m_soc; 231 const SocRef& m_soc;
178}; 232};
179 233
180#endif /* __BACKEND_H__ */ 234#endif /* __BACKEND_H__ */
diff --git a/utils/regtools/qeditor/regtab.cpp b/utils/regtools/qeditor/regtab.cpp
index b97ceafdc8..e4adecf203 100644
--- a/utils/regtools/qeditor/regtab.cpp
+++ b/utils/regtools/qeditor/regtab.cpp
@@ -203,17 +203,11 @@ void RegTab::OnRegItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previou
203void RegTab::OnRegItemClicked(QTreeWidgetItem *current, int col) 203void RegTab::OnRegItemClicked(QTreeWidgetItem *current, int col)
204{ 204{
205 (void) col; 205 (void) col;
206 if(current == 0) 206 if(current == 0 || current->type() != RegTreeRegType)
207 return; 207 return;
208 RegTreeItem *item = dynamic_cast< RegTreeItem * >(current); 208 RegTreeItem *item = dynamic_cast< RegTreeItem * >(current);
209 if(item->type() != RegTreeRegType)
210 return;
211 soc_dev_t& dev = m_cur_soc.dev[item->GetDevIndex()];
212 soc_dev_addr_t& dev_addr = dev.addr[item->GetDevAddrIndex()];
213 soc_reg_t& reg = dev.reg[item->GetRegIndex()];
214 soc_reg_addr_t& reg_addr = reg.addr[item->GetRegAddrIndex()];
215 209
216 DisplayRegister(dev, dev_addr, reg, reg_addr); 210 DisplayRegister(item->GetRef());
217} 211}
218 212
219void RegTab::OnAnalyserChanged(QListWidgetItem *current, QListWidgetItem *previous) 213void RegTab::OnAnalyserChanged(QListWidgetItem *current, QListWidgetItem *previous)
@@ -232,14 +226,16 @@ void RegTab::OnAnalyserClicked(QListWidgetItem *current)
232 m_right_panel->addWidget(m_right_content, 1); 226 m_right_panel->addWidget(m_right_content, 1);
233} 227}
234 228
235void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr, 229void RegTab::DisplayRegister(const SocRegRef& ref)
236 soc_reg_t& reg, soc_reg_addr_t& reg_addr)
237{ 230{
238 (void) dev;
239 delete m_right_content; 231 delete m_right_content;
240 232
241 QVBoxLayout *right_layout = new QVBoxLayout; 233 QVBoxLayout *right_layout = new QVBoxLayout;
242 234
235 const soc_dev_addr_t& dev_addr = ref.GetDevAddr();
236 const soc_reg_t& reg = ref.GetReg();
237 const soc_reg_addr_t& reg_addr = ref.GetRegAddr();
238
243 QString reg_name; 239 QString reg_name;
244 reg_name.sprintf("HW_%s_%s", dev_addr.name.c_str(), reg_addr.name.c_str()); 240 reg_name.sprintf("HW_%s_%s", dev_addr.name.c_str(), reg_addr.name.c_str());
245 QStringList names; 241 QStringList names;
@@ -303,29 +299,29 @@ void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr,
303 QTableWidget *value_table = new QTableWidget; 299 QTableWidget *value_table = new QTableWidget;
304 value_table->setRowCount(reg.field.size()); 300 value_table->setRowCount(reg.field.size());
305 value_table->setColumnCount(4); 301 value_table->setColumnCount(4);
306 for(size_t i = 0; i < reg.field.size(); i++) 302 int row = 0;
303 foreach(const soc_reg_field_t& field, reg.field)
307 { 304 {
308 QString bits_str; 305 QString bits_str;
309 if(reg.field[i].first_bit == reg.field[i].last_bit) 306 if(field.first_bit == field.last_bit)
310 bits_str.sprintf("%d", reg.field[i].first_bit); 307 bits_str.sprintf("%d", field.first_bit);
311 else 308 else
312 bits_str.sprintf("%d:%d", reg.field[i].last_bit, reg.field[i].first_bit); 309 bits_str.sprintf("%d:%d", field.last_bit, field.first_bit);
313 QTableWidgetItem *item = new QTableWidgetItem(bits_str); 310 QTableWidgetItem *item = new QTableWidgetItem(bits_str);
314 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter); 311 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
315 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); 312 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
316 value_table->setItem(i, 0, item); 313 value_table->setItem(row, 0, item);
317 item = new QTableWidgetItem(QString(reg.field[i].name.c_str())); 314 item = new QTableWidgetItem(QString(field.name.c_str()));
318 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); 315 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
319 value_table->setItem(i, 1, item); 316 value_table->setItem(row, 1, item);
320 item = new QTableWidgetItem(); 317 item = new QTableWidgetItem();
321 if(has_value) 318 if(has_value)
322 { 319 {
323 const soc_reg_field_t& field = reg.field[i];
324 soc_word_t v = (value & field.bitmask()) >> field.first_bit; 320 soc_word_t v = (value & field.bitmask()) >> field.first_bit;
325 QString value_name; 321 QString value_name;
326 for(size_t j = 0; j < field.value.size(); j++) 322 foreach(const soc_reg_field_value_t& rval, field.value)
327 if(v == field.value[j].value) 323 if(v == rval.value)
328 value_name = field.value[j].name.c_str(); 324 value_name = rval.name.c_str();
329 const char *fmt = "%lu"; 325 const char *fmt = "%lu";
330 // heuristic 326 // heuristic
331 if((field.last_bit - field.first_bit + 1) > 16) 327 if((field.last_bit - field.first_bit + 1) > 16)
@@ -338,11 +334,12 @@ void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr,
338 QTableWidgetItem *t = new QTableWidgetItem(value_name); 334 QTableWidgetItem *t = new QTableWidgetItem(value_name);
339 t->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter); 335 t->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
340 t->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); 336 t->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
341 value_table->setItem(i, 3, t); 337 value_table->setItem(row, 3, t);
342 } 338 }
343 } 339 }
344 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); 340 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
345 value_table->setItem(i, 2, item); 341 value_table->setItem(row, 2, item);
342 row++;
346 } 343 }
347 value_table->setHorizontalHeaderItem(0, new QTableWidgetItem("Bits")); 344 value_table->setHorizontalHeaderItem(0, new QTableWidgetItem("Bits"));
348 value_table->setHorizontalHeaderItem(1, new QTableWidgetItem("Name")); 345 value_table->setHorizontalHeaderItem(1, new QTableWidgetItem("Name"));
@@ -404,16 +401,16 @@ void RegTab::OnDevChanged(int index)
404} 401}
405#endif 402#endif
406 403
407void RegTab::FillDevSubTree(RegTreeItem *item) 404void RegTab::FillDevSubTree(DevTreeItem *item)
408{ 405{
409 soc_dev_t& sd = m_cur_soc.dev[item->GetDevIndex()]; 406 const soc_dev_t& dev = item->GetRef().GetDev();
410 for(size_t i = 0; i < sd.reg.size(); i++) 407 for(size_t i = 0; i < dev.reg.size(); i++)
411 { 408 {
412 soc_reg_t& reg = sd.reg[i]; 409 const soc_reg_t& reg = dev.reg[i];
413 for(size_t j = 0; j < reg.addr.size(); j++) 410 for(size_t j = 0; j < reg.addr.size(); j++)
414 { 411 {
415 RegTreeItem *reg_item = new RegTreeItem(reg.addr[j].name.c_str(), RegTreeRegType); 412 RegTreeItem *reg_item = new RegTreeItem(reg.addr[j].name.c_str(),
416 reg_item->SetPath(item->GetDevIndex(), item->GetDevAddrIndex(), i, j); 413 SocRegRef(item->GetRef(), i, j));
417 item->addChild(reg_item); 414 item->addChild(reg_item);
418 } 415 }
419 } 416 }
@@ -421,13 +418,13 @@ void RegTab::FillDevSubTree(RegTreeItem *item)
421 418
422void RegTab::FillRegTree() 419void RegTab::FillRegTree()
423{ 420{
424 for(size_t i = 0; i < m_cur_soc.dev.size(); i++) 421 for(size_t i = 0; i < m_cur_soc.GetSoc().dev.size(); i++)
425 { 422 {
426 soc_dev_t& sd = m_cur_soc.dev[i]; 423 const soc_dev_t& dev = m_cur_soc.GetSoc().dev[i];
427 for(size_t j = 0; j < sd.addr.size(); j++) 424 for(size_t j = 0; j < dev.addr.size(); j++)
428 { 425 {
429 RegTreeItem *dev_item = new RegTreeItem(sd.addr[j].name.c_str(), RegTreeDevType); 426 DevTreeItem *dev_item = new DevTreeItem(dev.addr[j].name.c_str(),
430 dev_item->SetPath(i, j); 427 SocDevRef(m_cur_soc, i, j));
431 FillDevSubTree(dev_item); 428 FillDevSubTree(dev_item);
432 m_reg_tree->addTopLevelItem(dev_item); 429 m_reg_tree->addTopLevelItem(dev_item);
433 } 430 }
@@ -437,7 +434,7 @@ void RegTab::FillRegTree()
437void RegTab::FillAnalyserList() 434void RegTab::FillAnalyserList()
438{ 435{
439 m_analysers_list->clear(); 436 m_analysers_list->clear();
440 m_analysers_list->addItems(AnalyserFactory::GetAnalysersForSoc(m_cur_soc.name.c_str())); 437 m_analysers_list->addItems(AnalyserFactory::GetAnalysersForSoc(m_cur_soc.GetSoc().name.c_str()));
441} 438}
442 439
443void RegTab::OnSocChanged(const QString& soc) 440void RegTab::OnSocChanged(const QString& soc)
diff --git a/utils/regtools/qeditor/regtab.h b/utils/regtools/qeditor/regtab.h
index 460894b143..107e4e3986 100644
--- a/utils/regtools/qeditor/regtab.h
+++ b/utils/regtools/qeditor/regtab.h
@@ -30,18 +30,28 @@ enum
30#endif 30#endif
31}; 31};
32 32
33class DevTreeItem : public QTreeWidgetItem
34{
35public:
36 DevTreeItem(const QString& string, const SocDevRef& ref)
37 :QTreeWidgetItem(QStringList(string), RegTreeDevType), m_ref(ref) {}
38
39 const SocDevRef& GetRef() { return m_ref; }
40private:
41 SocDevRef m_ref;
42};
43
33class RegTreeItem : public QTreeWidgetItem 44class RegTreeItem : public QTreeWidgetItem
34{ 45{
35public: 46public:
36 RegTreeItem(const QString& string, int type); 47 RegTreeItem(const QString& string, const SocRegRef& ref)
48 :QTreeWidgetItem(QStringList(string), RegTreeRegType), m_ref(ref) {}
37 49
38 void SetPath(int dev_idx, int dev_addr_idx, int reg_idx = -1, int reg_addr_idx = -1); 50 const SocRegRef& GetRef() { return m_ref; }
39 int GetDevIndex() const { return m_dev_idx; }
40 int GetDevAddrIndex() const { return m_dev_addr_idx; }
41 int GetRegIndex() const { return m_reg_idx; }
42 int GetRegAddrIndex() const { return m_reg_addr_idx; }
43private: 51private:
44 int m_dev_idx, m_dev_addr_idx, m_reg_idx, m_reg_addr_idx; 52 SocRegRef m_ref;
53};
54
45}; 55};
46 56
47class RegTab : public QSplitter 57class RegTab : public QSplitter
@@ -51,12 +61,11 @@ public:
51 RegTab(Backend *backend); 61 RegTab(Backend *backend);
52 62
53protected: 63protected:
54 void FillDevSubTree(RegTreeItem *item); 64 void FillDevSubTree(DevTreeItem *item);
55 void FillRegTree(); 65 void FillRegTree();
56 void FillAnalyserList(); 66 void FillAnalyserList();
57 void UpdateSocList(); 67 void UpdateSocList();
58 void DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr, 68 void DisplayRegister(const SocRegRef& ref);
59 soc_reg_t& reg, soc_reg_addr_t& reg_addr);
60 void SetDataSocName(const QString& socname); 69 void SetDataSocName(const QString& socname);
61 QComboBox *m_soc_selector; 70 QComboBox *m_soc_selector;
62#ifdef HAVE_HWSTUB 71#ifdef HAVE_HWSTUB
@@ -65,7 +74,7 @@ protected:
65#endif 74#endif
66 Backend *m_backend; 75 Backend *m_backend;
67 QTreeWidget *m_reg_tree; 76 QTreeWidget *m_reg_tree;
68 soc_t m_cur_soc; 77 SocRef m_cur_soc;
69 QVBoxLayout *m_right_panel; 78 QVBoxLayout *m_right_panel;
70 QWidget *m_right_content; 79 QWidget *m_right_content;
71 QLineEdit *m_data_sel_edit; 80 QLineEdit *m_data_sel_edit;
diff --git a/utils/regtools/qeditor/std_analysers.cpp b/utils/regtools/qeditor/std_analysers.cpp
index aef45e7abc..2cc84cb488 100644
--- a/utils/regtools/qeditor/std_analysers.cpp
+++ b/utils/regtools/qeditor/std_analysers.cpp
@@ -4,7 +4,7 @@
4 * Clock analyser 4 * Clock analyser
5 */ 5 */
6 6
7ClockAnalyser::ClockAnalyser(const soc_t& soc, IoBackend *backend) 7ClockAnalyser::ClockAnalyser(const SocRef& soc, IoBackend *backend)
8 :Analyser(soc, backend) 8 :Analyser(soc, backend)
9{ 9{
10 m_group = new QGroupBox("Clock Analyser"); 10 m_group = new QGroupBox("Clock Analyser");
@@ -300,7 +300,7 @@ static TmplAnalyserFactory< ClockAnalyser > g_clock_factory(true, "Clock Analyse
300/** 300/**
301 * EMI analyser 301 * EMI analyser
302 */ 302 */
303EmiAnalyser::EmiAnalyser(const soc_t& soc, IoBackend *backend) 303EmiAnalyser::EmiAnalyser(const SocRef& soc, IoBackend *backend)
304 :Analyser(soc, backend) 304 :Analyser(soc, backend)
305{ 305{
306 m_display_mode = DisplayCycles; 306 m_display_mode = DisplayCycles;
@@ -647,7 +647,7 @@ namespace pin_desc
647#include "../../imxtools/misc/map.h" 647#include "../../imxtools/misc/map.h"
648} 648}
649 649
650PinAnalyser::PinAnalyser(const soc_t& soc, IoBackend *backend) 650PinAnalyser::PinAnalyser(const SocRef& soc, IoBackend *backend)
651 :Analyser(soc, backend) 651 :Analyser(soc, backend)
652{ 652{
653 m_group = new QGroupBox("Pin Analyser"); 653 m_group = new QGroupBox("Pin Analyser");
diff --git a/utils/regtools/qeditor/std_analysers.h b/utils/regtools/qeditor/std_analysers.h
index e613c07096..aae8e40207 100644
--- a/utils/regtools/qeditor/std_analysers.h
+++ b/utils/regtools/qeditor/std_analysers.h
@@ -23,7 +23,7 @@ class ClockAnalyser : public Analyser
23{ 23{
24 Q_OBJECT 24 Q_OBJECT
25public: 25public:
26 ClockAnalyser(const soc_t& soc, IoBackend *backend); 26 ClockAnalyser(const SocRef& soc, IoBackend *backend);
27 virtual ~ClockAnalyser(); 27 virtual ~ClockAnalyser();
28 virtual QWidget *GetWidget(); 28 virtual QWidget *GetWidget();
29 static bool SupportSoc(const QString& soc_name); 29 static bool SupportSoc(const QString& soc_name);
@@ -54,7 +54,7 @@ class EmiAnalyser : public Analyser
54{ 54{
55 Q_OBJECT 55 Q_OBJECT
56public: 56public:
57 EmiAnalyser(const soc_t& soc, IoBackend *backend); 57 EmiAnalyser(const SocRef& soc, IoBackend *backend);
58 virtual ~EmiAnalyser(); 58 virtual ~EmiAnalyser();
59 virtual QWidget *GetWidget(); 59 virtual QWidget *GetWidget();
60 60
@@ -98,7 +98,7 @@ class PinAnalyser : public Analyser
98{ 98{
99 Q_OBJECT 99 Q_OBJECT
100public: 100public:
101 PinAnalyser(const soc_t& soc, IoBackend *backend); 101 PinAnalyser(const SocRef& soc, IoBackend *backend);
102 virtual ~PinAnalyser(); 102 virtual ~PinAnalyser();
103 virtual QWidget *GetWidget(); 103 virtual QWidget *GetWidget();
104 104