@@ -78,6 +78,14 @@ fn get_interrupts(peripheral: &Peripheral, mmap: &mut Vec<String>) {
78
78
}
79
79
}
80
80
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
+
81
89
fn get_registers (
82
90
base_address : u64 ,
83
91
registers : Option < & Vec < RegisterCluster > > ,
@@ -95,19 +103,24 @@ fn get_registers(
95
103
Register :: Single ( r) => {
96
104
let addr = str_utils:: format_address ( first_addr) ;
97
105
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
+ ) ;
99
110
mmap. push ( text) ;
100
111
get_fields ( r, & addr, mmap) ;
101
112
}
102
113
Register :: Array ( r, d) => {
114
+ let derived = derived_str ( & r. derived_from ) ;
103
115
for ( i, idx) in d. indexes ( ) . enumerate ( ) {
104
116
let addr = str_utils:: format_address (
105
117
first_addr + ( i as u64 ) * ( d. dim_increment as u64 ) ,
106
118
) ;
107
119
let rname = r. name . replace ( "%s" , & idx) ;
108
120
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
+ ) ;
111
124
mmap. push ( text) ;
112
125
get_fields ( r, & addr, mmap) ;
113
126
}
@@ -121,17 +134,20 @@ fn get_registers(
121
134
Cluster :: Single ( c) => {
122
135
let addr = str_utils:: format_address ( first_addr) ;
123
136
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}" ) ;
125
139
mmap. push ( text) ;
126
140
get_registers ( first_addr, Some ( & c. children ) , "" , mmap) ;
127
141
}
128
142
Cluster :: Array ( c, d) => {
143
+ let derived = derived_str ( & c. derived_from ) ;
129
144
for ( i, idx) in d. indexes ( ) . enumerate ( ) {
130
145
let caddr = first_addr + ( i as u64 ) * ( d. dim_increment as u64 ) ;
131
146
let addr = str_utils:: format_address ( caddr) ;
132
147
let cname = c. name . replace ( "%s" , & idx) ;
133
148
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}" ) ;
135
151
mmap. push ( text) ;
136
152
get_registers ( caddr, Some ( & c. children ) , & idx, mmap) ;
137
153
}
@@ -153,18 +169,20 @@ fn get_fields(register: &RegisterInfo, addr: &str, mmap: &mut Vec<String>) {
153
169
let bit_offset = f. bit_range . offset ;
154
170
let bit_width = f. bit_range . width ;
155
171
let fname = & f. name ;
172
+ let derived = derived_str ( & f. derived_from ) ;
156
173
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}"
158
175
) ;
159
176
mmap. push ( text) ;
160
177
}
161
178
Field :: Array ( f, d) => {
179
+ let derived = derived_str ( & f. derived_from ) ;
162
180
for ( i, idx) in d. indexes ( ) . enumerate ( ) {
163
181
let bit_offset = f. bit_range . offset + ( i as u32 ) * d. dim_increment ;
164
182
let bit_width = f. bit_range . width ;
165
183
let fname = f. name . replace ( "%s" , & idx) ;
166
184
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}"
168
186
) ;
169
187
mmap. push ( text) ;
170
188
}
0 commit comments