@@ -9,12 +9,11 @@ use std::{collections::HashMap, fmt::Write, str::FromStr};
99
1010/// Whole RISC-V generation
1111pub fn render (
12- r : Option < & Riscv > ,
12+ r : & Riscv ,
1313 peripherals : & [ Peripheral ] ,
1414 device_x : & mut String , // TODO
1515) -> Result < TokenStream > {
1616 let mut mod_items = TokenStream :: new ( ) ;
17- mod_items. extend ( quote ! { use riscv_pac:: pac_enum; } ) ;
1817
1918 let external_interrupts = peripherals
2019 . iter ( )
@@ -52,119 +51,117 @@ pub fn render(
5251 mod_items. extend ( quote ! {
5352 /// External interrupts. These interrupts are handled by the external peripherals.
5453 #[ repr( usize ) ]
55- #[ pac_enum( unsafe ExternalInterruptNumber ) ]
54+ #[ riscv_pac :: pac_enum( unsafe ExternalInterruptNumber ) ]
5655 #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
5756 pub enum ExternalInterrupt {
5857 #( #interrupts) *
5958 }
6059 } ) ;
6160 }
6261
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 ; } ) ;
6765
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+ ) ;
8280
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+ ) ?;
8886
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,
10290 } ) ;
10391 }
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+ }
104102
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+ ) ;
120118
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+ }
136134
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+ ) ;
152150
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+ } ) ;
168165 }
169166
170167 Ok ( quote ! {
0 commit comments