@@ -78,6 +78,14 @@ fn get_interrupts(peripheral: &Peripheral, mmap: &mut Vec<String>) {
7878 }
7979}
8080
81+ fn derived_str ( dname : & Option < String > ) -> String {
82+ if let Some ( dname) = dname. as_ref ( ) {
83+ format ! ( " (={dname})" )
84+ } else {
85+ String :: new ( )
86+ }
87+ }
88+
8189fn get_registers (
8290 base_address : u64 ,
8391 registers : Option < & Vec < RegisterCluster > > ,
@@ -95,19 +103,24 @@ fn get_registers(
95103 Register :: Single ( r) => {
96104 let addr = str_utils:: format_address ( first_addr) ;
97105 let rname = r. name . to_string ( ) + suffix;
98- let text = format ! ( "{addr} B REGISTER {rname}{access}: {description}" ) ;
106+ let derived = derived_str ( & r. derived_from ) ;
107+ let text = format ! (
108+ "{addr} B REGISTER {rname}{derived}{access}: {description}"
109+ ) ;
99110 mmap. push ( text) ;
100111 get_fields ( r, & addr, mmap) ;
101112 }
102113 Register :: Array ( r, d) => {
114+ let derived = derived_str ( & r. derived_from ) ;
103115 for ( i, idx) in d. indexes ( ) . enumerate ( ) {
104116 let addr = str_utils:: format_address (
105117 first_addr + ( i as u64 ) * ( d. dim_increment as u64 ) ,
106118 ) ;
107119 let rname = r. name . replace ( "%s" , & idx) ;
108120 let description = description. replace ( "%s" , & idx) ;
109- let text =
110- format ! ( "{addr} B REGISTER {rname}{access}: {description}" ) ;
121+ let text = format ! (
122+ "{addr} B REGISTER {rname}{derived}{access}: {description}"
123+ ) ;
111124 mmap. push ( text) ;
112125 get_fields ( r, & addr, mmap) ;
113126 }
@@ -121,17 +134,20 @@ fn get_registers(
121134 Cluster :: Single ( c) => {
122135 let addr = str_utils:: format_address ( first_addr) ;
123136 let cname = & c. name ;
124- let text = format ! ( "{addr} B CLUSTER {cname}: {description}" ) ;
137+ let derived = derived_str ( & c. derived_from ) ;
138+ let text = format ! ( "{addr} B CLUSTER {cname}{derived}: {description}" ) ;
125139 mmap. push ( text) ;
126140 get_registers ( first_addr, Some ( & c. children ) , "" , mmap) ;
127141 }
128142 Cluster :: Array ( c, d) => {
143+ let derived = derived_str ( & c. derived_from ) ;
129144 for ( i, idx) in d. indexes ( ) . enumerate ( ) {
130145 let caddr = first_addr + ( i as u64 ) * ( d. dim_increment as u64 ) ;
131146 let addr = str_utils:: format_address ( caddr) ;
132147 let cname = c. name . replace ( "%s" , & idx) ;
133148 let description = description. replace ( "%s" , & idx) ;
134- let text = format ! ( "{addr} B CLUSTER {cname}: {description}" ) ;
149+ let text =
150+ format ! ( "{addr} B CLUSTER {cname}{derived}: {description}" ) ;
135151 mmap. push ( text) ;
136152 get_registers ( caddr, Some ( & c. children ) , & idx, mmap) ;
137153 }
@@ -153,18 +169,20 @@ fn get_fields(register: &RegisterInfo, addr: &str, mmap: &mut Vec<String>) {
153169 let bit_offset = f. bit_range . offset ;
154170 let bit_width = f. bit_range . width ;
155171 let fname = & f. name ;
172+ let derived = derived_str ( & f. derived_from ) ;
156173 let text = format ! (
157- "{addr} C FIELD {bit_offset:02}w{bit_width:02} {fname}{access}: {description}"
174+ "{addr} C FIELD {bit_offset:02}w{bit_width:02} {fname}{derived}{ access}: {description}"
158175 ) ;
159176 mmap. push ( text) ;
160177 }
161178 Field :: Array ( f, d) => {
179+ let derived = derived_str ( & f. derived_from ) ;
162180 for ( i, idx) in d. indexes ( ) . enumerate ( ) {
163181 let bit_offset = f. bit_range . offset + ( i as u32 ) * d. dim_increment ;
164182 let bit_width = f. bit_range . width ;
165183 let fname = f. name . replace ( "%s" , & idx) ;
166184 let text = format ! (
167- "{addr} C FIELD {bit_offset:02}w{bit_width:02} {fname}{access}: {description}"
185+ "{addr} C FIELD {bit_offset:02}w{bit_width:02} {fname}{derived}{ access}: {description}"
168186 ) ;
169187 mmap. push ( text) ;
170188 }
0 commit comments