@@ -4,6 +4,8 @@ pub mod result;
44
55use result:: Result ;
66
7+ pub use riscv_pac_macros:: * ;
8+
79/// Trait for enums of target-specific exception numbers.
810///
911/// This trait should be implemented by a peripheral access crate (PAC) on its enum of available
@@ -137,23 +139,22 @@ pub unsafe trait HartIdNumber: Copy {
137139mod test {
138140 use super :: * ;
139141
140- #[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
142+ #[ derive( Clone , Copy , Debug , Eq , PartialEq , ExceptionNumber ) ]
141143 #[ repr( u16 ) ]
142144 enum Exception {
143145 E1 = 1 ,
144146 E3 = 3 ,
145147 }
146148
147- #[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
149+ #[ derive( Clone , Copy , Debug , Eq , PartialEq , InterruptNumber ) ]
148150 #[ repr( u16 ) ]
149151 enum Interrupt {
150152 I1 = 1 ,
151153 I2 = 2 ,
152- I3 = 3 ,
153154 I4 = 4 ,
154155 }
155156
156- #[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
157+ #[ derive( Clone , Copy , Debug , Eq , PartialEq , PriorityNumber ) ]
157158 #[ repr( u8 ) ]
158159 enum Priority {
159160 P0 = 0 ,
@@ -162,7 +163,7 @@ mod test {
162163 P3 = 3 ,
163164 }
164165
165- #[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
166+ #[ derive( Clone , Copy , Debug , Eq , PartialEq , HartIdNumber ) ]
166167 #[ repr( u16 ) ]
167168 enum Context {
168169 C0 = 0 ,
@@ -253,27 +254,24 @@ mod test {
253254 assert_eq ! ( Exception :: E1 . number( ) , 1 ) ;
254255 assert_eq ! ( Exception :: E3 . number( ) , 3 ) ;
255256
256- assert_eq ! ( Exception :: from_number( 1 ) , Ok ( Exception :: E1 ) ) ;
257- assert_eq ! ( Exception :: from_number( 3 ) , Ok ( Exception :: E3 ) ) ;
258-
259257 assert_eq ! ( Exception :: from_number( 0 ) , Err ( 0 ) ) ;
258+ assert_eq ! ( Exception :: from_number( 1 ) , Ok ( Exception :: E1 ) ) ;
260259 assert_eq ! ( Exception :: from_number( 2 ) , Err ( 2 ) ) ;
260+ assert_eq ! ( Exception :: from_number( 3 ) , Ok ( Exception :: E3 ) ) ;
261261 assert_eq ! ( Exception :: from_number( 4 ) , Err ( 4 ) ) ;
262262 }
263263
264264 #[ test]
265265 fn check_interrupt_enum ( ) {
266266 assert_eq ! ( Interrupt :: I1 . number( ) , 1 ) ;
267267 assert_eq ! ( Interrupt :: I2 . number( ) , 2 ) ;
268- assert_eq ! ( Interrupt :: I3 . number( ) , 3 ) ;
269268 assert_eq ! ( Interrupt :: I4 . number( ) , 4 ) ;
270269
270+ assert_eq ! ( Interrupt :: from_number( 0 ) , Err ( 0 ) ) ;
271271 assert_eq ! ( Interrupt :: from_number( 1 ) , Ok ( Interrupt :: I1 ) ) ;
272272 assert_eq ! ( Interrupt :: from_number( 2 ) , Ok ( Interrupt :: I2 ) ) ;
273- assert_eq ! ( Interrupt :: from_number( 3 ) , Ok ( Interrupt :: I3 ) ) ;
273+ assert_eq ! ( Interrupt :: from_number( 3 ) , Err ( 3 ) ) ;
274274 assert_eq ! ( Interrupt :: from_number( 4 ) , Ok ( Interrupt :: I4 ) ) ;
275-
276- assert_eq ! ( Interrupt :: from_number( 0 ) , Err ( 0 ) ) ;
277275 assert_eq ! ( Interrupt :: from_number( 5 ) , Err ( 5 ) ) ;
278276 }
279277
@@ -288,20 +286,18 @@ mod test {
288286 assert_eq ! ( Priority :: from_number( 1 ) , Ok ( Priority :: P1 ) ) ;
289287 assert_eq ! ( Priority :: from_number( 2 ) , Ok ( Priority :: P2 ) ) ;
290288 assert_eq ! ( Priority :: from_number( 3 ) , Ok ( Priority :: P3 ) ) ;
291-
292289 assert_eq ! ( Priority :: from_number( 4 ) , Err ( 4 ) ) ;
293290 }
294291
295292 #[ test]
296- fn check_context_enum ( ) {
297- assert_eq ! ( Context :: C0 . number( ) , 0 ) ;
298- assert_eq ! ( Context :: C1 . number( ) , 1 ) ;
299- assert_eq ! ( Context :: C2 . number( ) , 2 ) ;
300-
301- assert_eq ! ( Context :: from_number( 0 ) , Ok ( Context :: C0 ) ) ;
302- assert_eq ! ( Context :: from_number( 1 ) , Ok ( Context :: C1 ) ) ;
303- assert_eq ! ( Context :: from_number( 2 ) , Ok ( Context :: C2 ) ) ;
304-
305- assert_eq ! ( Context :: from_number( 3 ) , Err ( 3 ) ) ;
293+ fn check_hart_id_enum ( ) {
294+ assert_eq ! ( HartId :: H0 . number( ) , 0 ) ;
295+ assert_eq ! ( HartId :: H1 . number( ) , 1 ) ;
296+ assert_eq ! ( HartId :: H2 . number( ) , 2 ) ;
297+
298+ assert_eq ! ( HartId :: from_number( 0 ) , Ok ( HartId :: H0 ) ) ;
299+ assert_eq ! ( HartId :: from_number( 1 ) , Ok ( HartId :: H1 ) ) ;
300+ assert_eq ! ( HartId :: from_number( 2 ) , Ok ( HartId :: H2 ) ) ;
301+ assert_eq ! ( HartId :: from_number( 3 ) , Err ( 3 ) ) ;
306302 }
307303}
0 commit comments