1mod generated;
7
8pub use self::generated::SystemRegisters;
9use std::sync::Mutex;
10
11#[macro_export]
14macro_rules! read_sysreg {
15 ($sysreg:ident $(: $asm_sysreg:tt)?, $type:ty, safe, $fake_sysregs:expr) => {
16 $crate::_paste::paste! {
17 #[doc = "Returns the value of the `"]
18 #[doc = stringify!($sysreg)]
19 #[doc = "` system register."]
20 pub fn [< read_ $sysreg >]() -> $type {
21 $fake_sysregs.lock().unwrap().$sysreg
22 }
23 }
24 };
25 ($(#[$attributes:meta])* $sysreg:ident $(: $asm_sysreg:tt)?, $type:ty, $fake_sysregs:expr) => {
26 $crate::_paste::paste! {
27 #[doc = "Returns the value of the `"]
28 #[doc = stringify!($sysreg)]
29 #[doc = "` system register."]
30 $(#[$attributes])*
31 pub unsafe fn [< read_ $sysreg >]() -> $type {
32 $fake_sysregs.lock().unwrap().$sysreg
33 }
34 }
35 };
36 ($sysreg:ident $(: $asm_sysreg:tt)?, $type:ty : $bitflags_type:ty, safe, $fake_sysregs:expr) => {
37 $crate::_paste::paste! {
38 #[doc = "Returns the value of the `"]
39 #[doc = stringify!($sysreg)]
40 #[doc = "` system register."]
41 pub fn [< read_ $sysreg >]() -> $bitflags_type {
42 $fake_sysregs.lock().unwrap().$sysreg
43 }
44 }
45 };
46 ($(#[$attributes:meta])* $sysreg:ident $(: $asm_sysreg:tt)?, $type:ty : $bitflags_type:ty, $fake_sysregs:expr) => {
47 $crate::_paste::paste! {
48 #[doc = "Returns the value of the `"]
49 #[doc = stringify!($sysreg)]
50 #[doc = "` system register."]
51 $(#[$attributes])*
52 pub unsafe fn [< read_ $sysreg >]() -> $bitflags_type {
53 $fake_sysregs.lock().unwrap().$sysreg
54 }
55 }
56 };
57}
58
59#[macro_export]
62macro_rules! write_sysreg {
63 ($sysreg:ident $(: $asm_sysreg:tt)?, $type:ty, safe, $fake_sysregs:expr) => {
64 $crate::_paste::paste! {
65 #[doc = "Writes `value` to the `"]
66 #[doc = stringify!($sysreg)]
67 #[doc = "` system register."]
68 pub fn [< write_ $sysreg >](value: $type) {
69 $fake_sysregs.lock().unwrap().$sysreg = value;
70 }
71 }
72 };
73 (
74 $(#[$attributes:meta])*
75 $sysreg:ident $(: $asm_sysreg:tt)?, $type:ty, $fake_sysregs:expr
76 ) => {
77 $crate::_paste::paste! {
78 #[doc = "Writes `value` to the `"]
79 #[doc = stringify!($sysreg)]
80 #[doc = "` system register."]
81 $(#[$attributes])*
82 pub unsafe fn [< write_ $sysreg >](value: $type) {
83 $fake_sysregs.lock().unwrap().$sysreg = value;
84 }
85 }
86 };
87 ($sysreg:ident $(: $asm_sysreg:tt)?, $type:ty : $bitflags_type:ty, safe, $fake_sysregs:expr) => {
88 $crate::_paste::paste! {
89 #[doc = "Writes `value` to the `"]
90 #[doc = stringify!($sysreg)]
91 #[doc = "` system register."]
92 pub fn [< write_ $sysreg >](value: $bitflags_type) {
93 $fake_sysregs.lock().unwrap().$sysreg = value;
94 }
95 }
96 };
97 (
98 $(#[$attributes:meta])*
99 $sysreg:ident $(: $asm_sysreg:tt)?, $type:ty : $bitflags_type:ty, $fake_sysregs:expr
100 ) => {
101 $crate::_paste::paste! {
102 #[doc = "Writes `value` to the `"]
103 #[doc = stringify!($sysreg)]
104 #[doc = "` system register."]
105 $(#[$attributes])*
106 pub unsafe fn [< write_ $sysreg >](value: $bitflags_type) {
107 $fake_sysregs.lock().unwrap().$sysreg = value;
108 }
109 }
110 };
111}
112
113pub static SYSREGS: Mutex<SystemRegisters> = Mutex::new(SystemRegisters::new());
115
116impl SystemRegisters {
117 pub fn reset(&mut self) {
119 *self = Self::new();
120 }
121}
122
123impl Default for SystemRegisters {
124 fn default() -> Self {
125 Self::new()
126 }
127}