@@ -4,7 +4,7 @@ use std::collections::HashMap;
4
4
5
5
use crate :: svd:: {
6
6
array:: names, Cluster , ClusterInfo , DeriveFrom , DimElement , Peripheral , Register ,
7
- RegisterCluster , RegisterProperties ,
7
+ RegisterCluster ,
8
8
} ;
9
9
use log:: { debug, trace, warn} ;
10
10
use proc_macro2:: { Ident , Punct , Spacing , Span , TokenStream } ;
@@ -22,7 +22,6 @@ use crate::generate::register;
22
22
pub fn render (
23
23
p_original : & Peripheral ,
24
24
all_peripherals : & [ Peripheral ] ,
25
- defaults : & RegisterProperties ,
26
25
config : & Config ,
27
26
) -> Result < TokenStream > {
28
27
let mut out = TokenStream :: new ( ) ;
@@ -213,28 +212,26 @@ pub fn render(
213
212
return Ok ( TokenStream :: new ( ) ) ;
214
213
}
215
214
216
- let defaults = p. default_register_properties . derive_from ( defaults) ;
217
-
218
215
// Push any register or cluster blocks into the output
219
216
debug ! (
220
217
"Pushing {} register or cluster blocks into output" ,
221
218
ercs. len( )
222
219
) ;
223
220
let mut mod_items = TokenStream :: new ( ) ;
224
- mod_items. extend ( register_or_cluster_block ( & ercs, & defaults , None , config) ?) ;
221
+ mod_items. extend ( register_or_cluster_block ( & ercs, None , config) ?) ;
225
222
226
223
debug ! ( "Pushing cluster information into output" ) ;
227
224
// Push all cluster related information into the peripheral module
228
225
for c in & clusters {
229
226
trace ! ( "Cluster: {}" , c. name) ;
230
- mod_items. extend ( cluster_block ( c, & defaults , p, all_peripherals, config) ?) ;
227
+ mod_items. extend ( cluster_block ( c, p, all_peripherals, config) ?) ;
231
228
}
232
229
233
230
debug ! ( "Pushing register information into output" ) ;
234
231
// Push all register related information into the peripheral module
235
232
for reg in registers {
236
233
trace ! ( "Register: {}" , reg. name) ;
237
- match register:: render ( reg, registers, p, all_peripherals, & defaults , config) {
234
+ match register:: render ( reg, registers, p, all_peripherals, config) {
238
235
Ok ( rendered_reg) => mod_items. extend ( rendered_reg) ,
239
236
Err ( e) => {
240
237
let res: Result < TokenStream > = Err ( e) ;
@@ -504,15 +501,14 @@ fn make_comment(size: u32, offset: u32, description: &str) -> String {
504
501
505
502
fn register_or_cluster_block (
506
503
ercs : & [ RegisterCluster ] ,
507
- defs : & RegisterProperties ,
508
504
name : Option < & str > ,
509
505
config : & Config ,
510
506
) -> Result < TokenStream > {
511
507
let mut rbfs = TokenStream :: new ( ) ;
512
508
let mut accessors = TokenStream :: new ( ) ;
513
509
514
- let ercs_expanded = expand ( ercs , defs , name , config )
515
- . with_context ( || "Could not expand register or cluster block" ) ?;
510
+ let ercs_expanded =
511
+ expand ( ercs , name , config ) . with_context ( || "Could not expand register or cluster block" ) ?;
516
512
517
513
// Locate conflicting regions; we'll need to use unions to represent them.
518
514
let mut regions = FieldRegions :: default ( ) ;
@@ -640,7 +636,6 @@ fn register_or_cluster_block(
640
636
/// `RegisterBlockField`s containing `Field`s.
641
637
fn expand (
642
638
ercs : & [ RegisterCluster ] ,
643
- defs : & RegisterProperties ,
644
639
name : Option < & str > ,
645
640
config : & Config ,
646
641
) -> Result < Vec < RegisterBlockField > > {
@@ -649,34 +644,26 @@ fn expand(
649
644
debug ! ( "Expanding registers or clusters into Register Block Fields" ) ;
650
645
for erc in ercs {
651
646
match & erc {
652
- RegisterCluster :: Register ( register) => {
653
- match expand_register ( register, defs, name, config) {
654
- Ok ( expanded_reg) => {
655
- trace ! ( "Register: {}" , register. name) ;
656
- ercs_expanded. extend ( expanded_reg) ;
657
- }
658
- Err ( e) => {
659
- let res = Err ( e) ;
660
- return handle_reg_error ( "Error expanding register" , register, res) ;
661
- }
647
+ RegisterCluster :: Register ( register) => match expand_register ( register, name, config) {
648
+ Ok ( expanded_reg) => {
649
+ trace ! ( "Register: {}" , register. name) ;
650
+ ercs_expanded. extend ( expanded_reg) ;
662
651
}
663
- }
664
- RegisterCluster :: Cluster ( cluster) => {
665
- match expand_cluster ( cluster, defs, name, config) {
666
- Ok ( expanded_cluster) => {
667
- trace ! ( "Cluster: {}" , cluster. name) ;
668
- ercs_expanded. extend ( expanded_cluster) ;
669
- }
670
- Err ( e) => {
671
- let res = Err ( e) ;
672
- return handle_cluster_error (
673
- "Error expanding register cluster" ,
674
- cluster,
675
- res,
676
- ) ;
677
- }
652
+ Err ( e) => {
653
+ let res = Err ( e) ;
654
+ return handle_reg_error ( "Error expanding register" , register, res) ;
678
655
}
679
- }
656
+ } ,
657
+ RegisterCluster :: Cluster ( cluster) => match expand_cluster ( cluster, name, config) {
658
+ Ok ( expanded_cluster) => {
659
+ trace ! ( "Cluster: {}" , cluster. name) ;
660
+ ercs_expanded. extend ( expanded_cluster) ;
661
+ }
662
+ Err ( e) => {
663
+ let res = Err ( e) ;
664
+ return handle_cluster_error ( "Error expanding register cluster" , cluster, res) ;
665
+ }
666
+ } ,
680
667
} ;
681
668
}
682
669
@@ -688,13 +675,9 @@ fn expand(
688
675
/// Calculate the size of a Cluster. If it is an array, then the dimensions
689
676
/// tell us the size of the array. Otherwise, inspect the contents using
690
677
/// [cluster_info_size_in_bits].
691
- fn cluster_size_in_bits (
692
- cluster : & Cluster ,
693
- defs : & RegisterProperties ,
694
- config : & Config ,
695
- ) -> Result < u32 > {
678
+ fn cluster_size_in_bits ( cluster : & Cluster , config : & Config ) -> Result < u32 > {
696
679
match cluster {
697
- Cluster :: Single ( info) => cluster_info_size_in_bits ( info, defs , config) ,
680
+ Cluster :: Single ( info) => cluster_info_size_in_bits ( info, config) ,
698
681
// If the contained array cluster has a mismatch between the
699
682
// dimIncrement and the size of the array items, then the array
700
683
// will get expanded in expand_cluster below. The overall size
@@ -704,33 +687,29 @@ fn cluster_size_in_bits(
704
687
return Ok ( 0 ) ; // Special case!
705
688
}
706
689
let last_offset = ( dim. dim - 1 ) * dim. dim_increment * BITS_PER_BYTE ;
707
- let last_size = cluster_info_size_in_bits ( info, defs , config) ;
690
+ let last_size = cluster_info_size_in_bits ( info, config) ;
708
691
Ok ( last_offset + last_size?)
709
692
}
710
693
}
711
694
}
712
695
713
696
/// Recursively calculate the size of a ClusterInfo. A cluster's size is the
714
697
/// maximum end position of its recursive children.
715
- fn cluster_info_size_in_bits (
716
- info : & ClusterInfo ,
717
- defs : & RegisterProperties ,
718
- config : & Config ,
719
- ) -> Result < u32 > {
698
+ fn cluster_info_size_in_bits ( info : & ClusterInfo , config : & Config ) -> Result < u32 > {
720
699
let mut size = 0 ;
721
700
722
701
for c in & info. children {
723
702
let end = match c {
724
703
RegisterCluster :: Register ( reg) => {
725
- let reg_size: u32 = expand_register ( reg, defs , None , config) ?
704
+ let reg_size: u32 = expand_register ( reg, None , config) ?
726
705
. iter ( )
727
706
. map ( |rbf| rbf. size )
728
707
. sum ( ) ;
729
708
730
709
( reg. address_offset * BITS_PER_BYTE ) + reg_size
731
710
}
732
711
RegisterCluster :: Cluster ( clust) => {
733
- ( clust. address_offset * BITS_PER_BYTE ) + cluster_size_in_bits ( clust, defs , config) ?
712
+ ( clust. address_offset * BITS_PER_BYTE ) + cluster_size_in_bits ( clust, config) ?
734
713
}
735
714
} ;
736
715
@@ -742,15 +721,12 @@ fn cluster_info_size_in_bits(
742
721
/// Render a given cluster (and any children) into `RegisterBlockField`s
743
722
fn expand_cluster (
744
723
cluster : & Cluster ,
745
- defs : & RegisterProperties ,
746
724
name : Option < & str > ,
747
725
config : & Config ,
748
726
) -> Result < Vec < RegisterBlockField > > {
749
727
let mut cluster_expanded = vec ! [ ] ;
750
728
751
- let defs = cluster. default_register_properties . derive_from ( defs) ;
752
-
753
- let cluster_size = cluster_info_size_in_bits ( cluster, & defs, config)
729
+ let cluster_size = cluster_info_size_in_bits ( cluster, config)
754
730
. with_context ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
755
731
756
732
match cluster {
@@ -851,7 +827,6 @@ fn expand_cluster(
851
827
/// numeral indexes, or not containing all elements from 0 to size) they will be expanded
852
828
fn expand_register (
853
829
register : & Register ,
854
- defs : & RegisterProperties ,
855
830
name : Option < & str > ,
856
831
config : & Config ,
857
832
) -> Result < Vec < RegisterBlockField > > {
@@ -860,7 +835,6 @@ fn expand_register(
860
835
let register_size = register
861
836
. properties
862
837
. size
863
- . or ( defs. size )
864
838
. ok_or_else ( || anyhow ! ( "Register {} has no `size` field" , register. name) ) ?;
865
839
866
840
match register {
@@ -961,7 +935,6 @@ fn expand_register(
961
935
/// Render a Cluster Block into `TokenStream`
962
936
fn cluster_block (
963
937
c : & Cluster ,
964
- defaults : & RegisterProperties ,
965
938
p : & Peripheral ,
966
939
all_peripherals : & [ Peripheral ] ,
967
940
config : & Config ,
@@ -982,14 +955,12 @@ fn cluster_block(
982
955
) ;
983
956
let name_sc = Ident :: new ( & mod_name. to_sanitized_snake_case ( ) , Span :: call_site ( ) ) ;
984
957
985
- let defaults = c. default_register_properties . derive_from ( defaults) ;
986
-
987
- let reg_block = register_or_cluster_block ( & c. children , & defaults, Some ( & mod_name) , config) ?;
958
+ let reg_block = register_or_cluster_block ( & c. children , Some ( & mod_name) , config) ?;
988
959
989
960
// Generate definition for each of the registers.
990
961
let registers = util:: only_registers ( & c. children ) ;
991
962
for reg in & registers {
992
- match register:: render ( reg, & registers, p, all_peripherals, & defaults , config) {
963
+ match register:: render ( reg, & registers, p, all_peripherals, config) {
993
964
Ok ( rendered_reg) => mod_items. extend ( rendered_reg) ,
994
965
Err ( e) => {
995
966
let res: Result < TokenStream > = Err ( e) ;
@@ -1005,7 +976,7 @@ fn cluster_block(
1005
976
// Generate the sub-cluster blocks.
1006
977
let clusters = util:: only_clusters ( & c. children ) ;
1007
978
for c in & clusters {
1008
- mod_items. extend ( cluster_block ( c, & defaults , p, all_peripherals, config) ?) ;
979
+ mod_items. extend ( cluster_block ( c, p, all_peripherals, config) ?) ;
1009
980
}
1010
981
1011
982
Ok ( quote ! {
0 commit comments