@@ -61,10 +61,11 @@ pub struct IoMem<const SIZE: usize> {
61
61
}
62
62
63
63
macro_rules! define_read {
64
- ( $name: ident, $try_name: ident, $type_name: ty) => {
64
+ ( $( # [ $attr : meta ] ) * $ name: ident, $try_name: ident, $type_name: ty) => {
65
65
/// Reads IO data from the given offset known, at compile time.
66
66
///
67
67
/// If the offset is not known at compile time, the build will fail.
68
+ $( #[ $attr] ) *
68
69
pub fn $name( & self , offset: usize ) -> $type_name {
69
70
Self :: check_offset:: <$type_name>( offset) ;
70
71
let ptr = self . ptr. wrapping_add( offset) ;
@@ -77,6 +78,7 @@ macro_rules! define_read {
77
78
/// Reads IO data from the given offset.
78
79
///
79
80
/// It fails if/when the offset (plus the type size) is out of bounds.
81
+ $( #[ $attr] ) *
80
82
pub fn $try_name( & self , offset: usize ) -> Result <$type_name> {
81
83
if !Self :: offset_ok:: <$type_name>( offset) {
82
84
return Err ( Error :: EINVAL ) ;
@@ -91,10 +93,11 @@ macro_rules! define_read {
91
93
}
92
94
93
95
macro_rules! define_write {
94
- ( $name: ident, $try_name: ident, $type_name: ty) => {
96
+ ( $( # [ $attr : meta ] ) * $ name: ident, $try_name: ident, $type_name: ty) => {
95
97
/// Writes IO data to the given offset, known at compile time.
96
98
///
97
99
/// If the offset is not known at compile time, the build will fail.
100
+ $( #[ $attr] ) *
98
101
pub fn $name( & self , value: $type_name, offset: usize ) {
99
102
Self :: check_offset:: <$type_name>( offset) ;
100
103
let ptr = self . ptr. wrapping_add( offset) ;
@@ -107,6 +110,7 @@ macro_rules! define_write {
107
110
/// Writes IO data to the given offset.
108
111
///
109
112
/// It fails if/when the offset (plus the type size) is out of bounds.
113
+ $( #[ $attr] ) *
110
114
pub fn $try_name( & self , value: $type_name, offset: usize ) -> Result {
111
115
if !Self :: offset_ok:: <$type_name>( offset) {
112
116
return Err ( Error :: EINVAL ) ;
@@ -176,12 +180,22 @@ impl<const SIZE: usize> IoMem<SIZE> {
176
180
define_read ! ( readb, try_readb, u8 ) ;
177
181
define_read ! ( readw, try_readw, u16 ) ;
178
182
define_read ! ( readl, try_readl, u32 ) ;
179
- define_read ! ( readq, try_readq, u64 ) ;
183
+ define_read ! (
184
+ #[ cfg( target_pointer_width = "64" ) ]
185
+ readq,
186
+ try_readq,
187
+ u64
188
+ ) ;
180
189
181
190
define_write ! ( writeb, try_writeb, u8 ) ;
182
191
define_write ! ( writew, try_writew, u16 ) ;
183
192
define_write ! ( writel, try_writel, u32 ) ;
184
- define_write ! ( writeq, try_writeq, u64 ) ;
193
+ define_write ! (
194
+ #[ cfg( target_pointer_width = "64" ) ]
195
+ writeq,
196
+ try_writeq,
197
+ u64
198
+ ) ;
185
199
}
186
200
187
201
impl < const SIZE : usize > Drop for IoMem < SIZE > {
0 commit comments