[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rockbox-cvs
Subject:    regtools: add shortcut notation for simple register in the desc files
From:       gerrit () rockbox ! org
Date:       2013-11-25 23:29:50
Message-ID: 201311252329.rAPNToAa031302 () giant ! haxx ! se
[Download RAW message or body]

commit f04d3c518a3c26def9a003a108bec254499c7c90
Author: Amaury Pouly <amaury.pouly@gmail.com>
Date:   Mon Nov 25 23:22:28 2013 +0000

    regtools: add shortcut notation for simple register in the desc files
    
    Change-Id: I2745287844ad0a47dd41ba4dae5e1f7218ae5814
    Reviewed-on: http://gerrit.rockbox.org/679
    Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>

diff --git a/utils/regtools/desc/XML.txt b/utils/regtools/desc/XML.txt
index d4dc73c..15164a4 100644
--- a/utils/regtools/desc/XML.txt
+++ b/utils/regtools/desc/XML.txt
@@ -61,12 +61,25 @@ The following properties are defined:
 - "name" (mandatory,string): the mnemonic of the register.
 - "sct" (optional,"yes" or "no"): STMP specific attribute to specify the existence
   of the SCT variants of this register.
+As a shortcut, in the case the register has a single address, one can add one more
+property:
+- "addr" (optional,integer): base address of this instance of the register.
 
 Example:
 <reg name="TIMCTRLn" sct="yes">
 <!-- reg desc -->
 </reg>
 
+The address shortcut has the following standard translation:
+<reg name="GPIO_PADR" addr="0x00">
+<!-- bla -->
+</reg>
+is equivalent to:
+<reg name="GPIO_PADR">
+<addr name="GPIO_PADR" addr="0x00">
+<!-- bla -->
+</reg>
+
 Element: soc.dev.reg.addr
 -------------------------
 Each device can have one or more addresses associated with it. Each address
diff --git a/utils/regtools/lib/soc_desc.cpp b/utils/regtools/lib/soc_desc.cpp
index 413c309..4b9f51b 100644
--- a/utils/regtools/lib/soc_desc.cpp
+++ b/utils/regtools/lib/soc_desc.cpp
@@ -102,8 +102,8 @@ bool validate_uint32_hook(const std::string& str, uint32_t& s)
 {
     unsigned long u;
     if(!validate_unsigned_long_hook(str, u)) return false;
-#if ULONG_MAX > UINT32_MAX
-    if(u > UINT32_MAX) return false;
+#if ULONG_MAX > 0xffffffff
+    if(u > 0xffffffff) return false;
 #endif
     s = u;
     return true;
@@ -177,12 +177,23 @@ bool parse_reg_formula_elem(xmlNode *node, soc_reg_formula_t& formula)
     return true;
 }
 
+bool parse_add_trivial_addr(const std::string& str, soc_reg_t& reg)
+{
+    soc_reg_addr_t a;
+    a.name = reg.name;
+    if(!validate_uint32_hook(str, a.addr))
+        return false;
+    reg.addr.push_back(a);
+    return true;
+}
+
 bool parse_reg_elem(xmlNode *node, soc_reg_t& reg)
 {
     std::vector< soc_reg_formula_t > formulas;
     BEGIN_ATTR_MATCH(node->properties)
         MATCH_TEXT_ATTR("name", reg.name)
         SOFT_MATCH_SCT_ATTR("sct", reg.flags)
+        SOFT_MATCH_X_ATTR("addr", parse_add_trivial_addr, reg)
     END_ATTR_MATCH()
 
     BEGIN_NODE_MATCH(node->children)
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs@cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic