summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/backend.cpp
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-02-09 02:13:53 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-02-10 23:14:26 +0100
commit3d07706c05c46878533f55f26bbe02d7904efd75 (patch)
treef1b549c275f7a27f9e7038e5fc4eccb94bf8be45 /utils/regtools/qeditor/backend.cpp
parent8358707d8276dd297655395b922560e3c65631e1 (diff)
downloadrockbox-3d07706c05c46878533f55f26bbe02d7904efd75.tar.gz
rockbox-3d07706c05c46878533f55f26bbe02d7904efd75.zip
regtools/qeditor: rewrite soc handling
The code was a mess with respect to soc handling: some code just plain copied the SoC descriptor which are big objects, some was using indexes. The new soc factor out everything in a few classes which hide these ugly details so that descriptors are never copied. Change-Id: I17af8b47f997a528b58221621389d42d24fded93
Diffstat (limited to 'utils/regtools/qeditor/backend.cpp')
-rw-r--r--utils/regtools/qeditor/backend.cpp73
1 files changed, 35 insertions, 38 deletions
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