@@ -9,12 +9,11 @@ use std::{collections::HashMap, fmt::Write, str::FromStr};
9
9
10
10
/// Whole RISC-V generation
11
11
pub fn render (
12
- r : Option < & Riscv > ,
12
+ r : & Riscv ,
13
13
peripherals : & [ Peripheral ] ,
14
14
device_x : & mut String , // TODO
15
15
) -> Result < TokenStream > {
16
16
let mut mod_items = TokenStream :: new ( ) ;
17
- mod_items. extend ( quote ! { use riscv_pac:: pac_enum; } ) ;
18
17
19
18
let external_interrupts = peripherals
20
19
. iter ( )
@@ -52,119 +51,117 @@ pub fn render(
52
51
mod_items. extend ( quote ! {
53
52
/// External interrupts. These interrupts are handled by the external peripherals.
54
53
#[ repr( usize ) ]
55
- #[ pac_enum( unsafe ExternalInterruptNumber ) ]
54
+ #[ riscv_pac :: pac_enum( unsafe ExternalInterruptNumber ) ]
56
55
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
57
56
pub enum ExternalInterrupt {
58
57
#( #interrupts) *
59
58
}
60
59
} ) ;
61
60
}
62
61
63
- if let Some ( r) = r {
64
- if !r. core_interrupts . is_empty ( ) {
65
- writeln ! ( device_x, "/* Core interrupt sources and trap handlers */" ) ?;
66
- mod_items. extend ( quote ! { pub use riscv_pac:: CoreInterruptNumber ; } ) ;
62
+ if !r. core_interrupts . is_empty ( ) {
63
+ writeln ! ( device_x, "/* Core interrupt sources and trap handlers */" ) ?;
64
+ mod_items. extend ( quote ! { pub use riscv_pac:: CoreInterruptNumber ; } ) ;
67
65
68
- let mut interrupts = vec ! [ ] ;
69
- for i in r. core_interrupts . iter ( ) {
70
- let name = TokenStream :: from_str ( & i. name ) . unwrap ( ) ;
71
- let value = TokenStream :: from_str ( & format ! ( "{}" , i. value) ) . unwrap ( ) ;
72
- let description = format ! (
73
- "{} - {}" ,
74
- i. value,
75
- i. description
76
- . as_ref( )
77
- . map( |s| util:: respace( s) )
78
- . as_ref( )
79
- . map( |s| util:: escape_special_chars( s) )
80
- . unwrap_or_else( || i. name. clone( ) )
81
- ) ;
66
+ let mut interrupts = vec ! [ ] ;
67
+ for i in r. core_interrupts . iter ( ) {
68
+ let name = TokenStream :: from_str ( & i. name ) . unwrap ( ) ;
69
+ let value = TokenStream :: from_str ( & format ! ( "{}" , i. value) ) . unwrap ( ) ;
70
+ let description = format ! (
71
+ "{} - {}" ,
72
+ i. value,
73
+ i. description
74
+ . as_ref( )
75
+ . map( |s| util:: respace( s) )
76
+ . as_ref( )
77
+ . map( |s| util:: escape_special_chars( s) )
78
+ . unwrap_or_else( || i. name. clone( ) )
79
+ ) ;
82
80
83
- writeln ! ( device_x, "PROVIDE({name} = DefaultHandler);" ) ?;
84
- writeln ! (
85
- device_x,
86
- "PROVIDE(_start_{name}_trap = _start_DefaultHandler_trap);"
87
- ) ?;
81
+ writeln ! ( device_x, "PROVIDE({name} = DefaultHandler);" ) ?;
82
+ writeln ! (
83
+ device_x,
84
+ "PROVIDE(_start_{name}_trap = _start_DefaultHandler_trap);"
85
+ ) ?;
88
86
89
- interrupts. push ( quote ! {
90
- #[ doc = #description]
91
- #name = #value,
92
- } ) ;
93
- }
94
- mod_items. extend ( quote ! {
95
- /// Core interrupts. These interrupts are handled by the core itself.
96
- #[ repr( usize ) ]
97
- #[ pac_enum( unsafe CoreInterruptNumber ) ]
98
- #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
99
- pub enum CoreInterrupt {
100
- #( #interrupts) *
101
- }
87
+ interrupts. push ( quote ! {
88
+ #[ doc = #description]
89
+ #name = #value,
102
90
} ) ;
103
91
}
92
+ mod_items. extend ( quote ! {
93
+ /// Core interrupts. These interrupts are handled by the core itself.
94
+ #[ repr( usize ) ]
95
+ #[ riscv_pac:: pac_enum( unsafe CoreInterruptNumber ) ]
96
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
97
+ pub enum CoreInterrupt {
98
+ #( #interrupts) *
99
+ }
100
+ } ) ;
101
+ }
104
102
105
- if !r. priorities . is_empty ( ) {
106
- mod_items. extend ( quote ! { pub use riscv_pac:: PriorityNumber ; } ) ;
107
- let priorities = r. priorities . iter ( ) . map ( |p| {
108
- let name = TokenStream :: from_str ( & p. name ) . unwrap ( ) ;
109
- let value = TokenStream :: from_str ( & format ! ( "{}" , p. value) ) . unwrap ( ) ;
110
- let description = format ! (
111
- "{} - {}" ,
112
- p. value,
113
- p. description
114
- . as_ref( )
115
- . map( |s| util:: respace( s) )
116
- . as_ref( )
117
- . map( |s| util:: escape_special_chars( s) )
118
- . unwrap_or_else( || p. name. clone( ) )
119
- ) ;
103
+ if !r. priorities . is_empty ( ) {
104
+ mod_items. extend ( quote ! { pub use riscv_pac:: PriorityNumber ; } ) ;
105
+ let priorities = r. priorities . iter ( ) . map ( |p| {
106
+ let name = TokenStream :: from_str ( & p. name ) . unwrap ( ) ;
107
+ let value = TokenStream :: from_str ( & format ! ( "{}" , p. value) ) . unwrap ( ) ;
108
+ let description = format ! (
109
+ "{} - {}" ,
110
+ p. value,
111
+ p. description
112
+ . as_ref( )
113
+ . map( |s| util:: respace( s) )
114
+ . as_ref( )
115
+ . map( |s| util:: escape_special_chars( s) )
116
+ . unwrap_or_else( || p. name. clone( ) )
117
+ ) ;
120
118
121
- quote ! {
122
- #[ doc = #description]
123
- #name = #value,
124
- }
125
- } ) ;
126
- mod_items. extend ( quote ! {
127
- /// Priority levels in the device
128
- #[ repr( u8 ) ]
129
- # [ pac_enum( unsafe PriorityNumber ) ]
130
- #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
131
- pub enum Priority {
132
- #( #priorities) *
133
- }
134
- } ) ;
135
- }
119
+ quote ! {
120
+ #[ doc = #description]
121
+ #name = #value,
122
+ }
123
+ } ) ;
124
+ mod_items. extend ( quote ! {
125
+ /// Priority levels in the device
126
+ #[ repr( u8 ) ]
127
+ # [ riscv_pac :: pac_enum( unsafe PriorityNumber ) ]
128
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
129
+ pub enum Priority {
130
+ #( #priorities) *
131
+ }
132
+ } ) ;
133
+ }
136
134
137
- if !r. harts . is_empty ( ) {
138
- mod_items. extend ( quote ! { pub use riscv_pac:: HartIdNumber ; } ) ;
139
- let harts = r. harts . iter ( ) . map ( |h| {
140
- let name = TokenStream :: from_str ( & h. name ) . unwrap ( ) ;
141
- let value = TokenStream :: from_str ( & format ! ( "{}" , h. value) ) . unwrap ( ) ;
142
- let description = format ! (
143
- "{} - {}" ,
144
- h. value,
145
- h. description
146
- . as_ref( )
147
- . map( |s| util:: respace( s) )
148
- . as_ref( )
149
- . map( |s| util:: escape_special_chars( s) )
150
- . unwrap_or_else( || h. name. clone( ) )
151
- ) ;
135
+ if !r. harts . is_empty ( ) {
136
+ mod_items. extend ( quote ! { pub use riscv_pac:: HartIdNumber ; } ) ;
137
+ let harts = r. harts . iter ( ) . map ( |h| {
138
+ let name = TokenStream :: from_str ( & h. name ) . unwrap ( ) ;
139
+ let value = TokenStream :: from_str ( & format ! ( "{}" , h. value) ) . unwrap ( ) ;
140
+ let description = format ! (
141
+ "{} - {}" ,
142
+ h. value,
143
+ h. description
144
+ . as_ref( )
145
+ . map( |s| util:: respace( s) )
146
+ . as_ref( )
147
+ . map( |s| util:: escape_special_chars( s) )
148
+ . unwrap_or_else( || h. name. clone( ) )
149
+ ) ;
152
150
153
- quote ! {
154
- #[ doc = #description]
155
- #name = #value,
156
- }
157
- } ) ;
158
- mod_items. extend ( quote ! {
159
- /// HARTs in the device
160
- #[ repr( u16 ) ]
161
- #[ pac_enum( unsafe HartIdNumber ) ]
162
- #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
163
- pub enum Hart {
164
- #( #harts) *
165
- }
166
- } ) ;
167
- }
151
+ quote ! {
152
+ #[ doc = #description]
153
+ #name = #value,
154
+ }
155
+ } ) ;
156
+ mod_items. extend ( quote ! {
157
+ /// HARTs in the device
158
+ #[ repr( u16 ) ]
159
+ #[ riscv_pac:: pac_enum( unsafe HartIdNumber ) ]
160
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
161
+ pub enum Hart {
162
+ #( #harts) *
163
+ }
164
+ } ) ;
168
165
}
169
166
170
167
Ok ( quote ! {
0 commit comments