Skip to content

Commit 354fd6e

Browse files
kloenkgregkh
authored andcommitted
rust: io: rename io::Io accessors
Rename the I/O accessors provided by `Io` to encode the type as number instead of letter. This is in preparation for Port I/O support to use a trait for generic accessors. Add a `c_fn` argument to the accessor generation macro to translate between rust and C names. Suggested-by: Danilo Krummrich <dakr@kernel.org> Link: https://rust-for-linux.zulipchat.com/#narrow/channel/288089-General/topic/PIO.20support/near/499460541 Signed-off-by: Fiona Behrens <me@kloenk.dev> Acked-by: Danilo Krummrich <dakr@kernel.org> Acked-by: Daniel Almeida <daniel.almeida@collabora.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://lore.kernel.org/r/20250217-io-generic-rename-v1-1-06d97a9e3179@kloenk.dev Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent c5020c5 commit 354fd6e

File tree

2 files changed

+39
-39
lines changed

2 files changed

+39
-39
lines changed

rust/kernel/io.rs

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,17 @@ impl<const SIZE: usize> IoRaw<SIZE> {
9898
///# fn no_run() -> Result<(), Error> {
9999
/// // SAFETY: Invalid usage for example purposes.
100100
/// let iomem = unsafe { IoMem::<{ core::mem::size_of::<u32>() }>::new(0xBAAAAAAD)? };
101-
/// iomem.writel(0x42, 0x0);
102-
/// assert!(iomem.try_writel(0x42, 0x0).is_ok());
103-
/// assert!(iomem.try_writel(0x42, 0x4).is_err());
101+
/// iomem.write32(0x42, 0x0);
102+
/// assert!(iomem.try_write32(0x42, 0x0).is_ok());
103+
/// assert!(iomem.try_write32(0x42, 0x4).is_err());
104104
/// # Ok(())
105105
/// # }
106106
/// ```
107107
#[repr(transparent)]
108108
pub struct Io<const SIZE: usize = 0>(IoRaw<SIZE>);
109109

110110
macro_rules! define_read {
111-
($(#[$attr:meta])* $name:ident, $try_name:ident, $type_name:ty) => {
111+
($(#[$attr:meta])* $name:ident, $try_name:ident, $c_fn:ident -> $type_name:ty) => {
112112
/// Read IO data from a given offset known at compile time.
113113
///
114114
/// Bound checks are performed on compile time, hence if the offset is not known at compile
@@ -119,7 +119,7 @@ macro_rules! define_read {
119119
let addr = self.io_addr_assert::<$type_name>(offset);
120120

121121
// SAFETY: By the type invariant `addr` is a valid address for MMIO operations.
122-
unsafe { bindings::$name(addr as _) }
122+
unsafe { bindings::$c_fn(addr as _) }
123123
}
124124

125125
/// Read IO data from a given offset.
@@ -131,13 +131,13 @@ macro_rules! define_read {
131131
let addr = self.io_addr::<$type_name>(offset)?;
132132

133133
// SAFETY: By the type invariant `addr` is a valid address for MMIO operations.
134-
Ok(unsafe { bindings::$name(addr as _) })
134+
Ok(unsafe { bindings::$c_fn(addr as _) })
135135
}
136136
};
137137
}
138138

139139
macro_rules! define_write {
140-
($(#[$attr:meta])* $name:ident, $try_name:ident, $type_name:ty) => {
140+
($(#[$attr:meta])* $name:ident, $try_name:ident, $c_fn:ident <- $type_name:ty) => {
141141
/// Write IO data from a given offset known at compile time.
142142
///
143143
/// Bound checks are performed on compile time, hence if the offset is not known at compile
@@ -148,7 +148,7 @@ macro_rules! define_write {
148148
let addr = self.io_addr_assert::<$type_name>(offset);
149149

150150
// SAFETY: By the type invariant `addr` is a valid address for MMIO operations.
151-
unsafe { bindings::$name(value, addr as _, ) }
151+
unsafe { bindings::$c_fn(value, addr as _, ) }
152152
}
153153

154154
/// Write IO data from a given offset.
@@ -160,7 +160,7 @@ macro_rules! define_write {
160160
let addr = self.io_addr::<$type_name>(offset)?;
161161

162162
// SAFETY: By the type invariant `addr` is a valid address for MMIO operations.
163-
unsafe { bindings::$name(value, addr as _) }
163+
unsafe { bindings::$c_fn(value, addr as _) }
164164
Ok(())
165165
}
166166
};
@@ -218,43 +218,43 @@ impl<const SIZE: usize> Io<SIZE> {
218218
self.addr() + offset
219219
}
220220

221-
define_read!(readb, try_readb, u8);
222-
define_read!(readw, try_readw, u16);
223-
define_read!(readl, try_readl, u32);
221+
define_read!(read8, try_read8, readb -> u8);
222+
define_read!(read16, try_read16, readw -> u16);
223+
define_read!(read32, try_read32, readl -> u32);
224224
define_read!(
225225
#[cfg(CONFIG_64BIT)]
226-
readq,
227-
try_readq,
228-
u64
226+
read64,
227+
try_read64,
228+
readq -> u64
229229
);
230230

231-
define_read!(readb_relaxed, try_readb_relaxed, u8);
232-
define_read!(readw_relaxed, try_readw_relaxed, u16);
233-
define_read!(readl_relaxed, try_readl_relaxed, u32);
231+
define_read!(read8_relaxed, try_read8_relaxed, readb_relaxed -> u8);
232+
define_read!(read16_relaxed, try_read16_relaxed, readw_relaxed -> u16);
233+
define_read!(read32_relaxed, try_read32_relaxed, readl_relaxed -> u32);
234234
define_read!(
235235
#[cfg(CONFIG_64BIT)]
236-
readq_relaxed,
237-
try_readq_relaxed,
238-
u64
236+
read64_relaxed,
237+
try_read64_relaxed,
238+
readq_relaxed -> u64
239239
);
240240

241-
define_write!(writeb, try_writeb, u8);
242-
define_write!(writew, try_writew, u16);
243-
define_write!(writel, try_writel, u32);
241+
define_write!(write8, try_write8, writeb <- u8);
242+
define_write!(write16, try_write16, writew <- u16);
243+
define_write!(write32, try_write32, writel <- u32);
244244
define_write!(
245245
#[cfg(CONFIG_64BIT)]
246-
writeq,
247-
try_writeq,
248-
u64
246+
write64,
247+
try_write64,
248+
writeq <- u64
249249
);
250250

251-
define_write!(writeb_relaxed, try_writeb_relaxed, u8);
252-
define_write!(writew_relaxed, try_writew_relaxed, u16);
253-
define_write!(writel_relaxed, try_writel_relaxed, u32);
251+
define_write!(write8_relaxed, try_write8_relaxed, writeb_relaxed <- u8);
252+
define_write!(write16_relaxed, try_write16_relaxed, writew_relaxed <- u16);
253+
define_write!(write32_relaxed, try_write32_relaxed, writel_relaxed <- u32);
254254
define_write!(
255255
#[cfg(CONFIG_64BIT)]
256-
writeq_relaxed,
257-
try_writeq_relaxed,
258-
u64
256+
write64_relaxed,
257+
try_write64_relaxed,
258+
writeq_relaxed <- u64
259259
);
260260
}

samples/rust/rust_driver_pci.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@ kernel::pci_device_table!(
4343
impl SampleDriver {
4444
fn testdev(index: &TestIndex, bar: &Bar0) -> Result<u32> {
4545
// Select the test.
46-
bar.writeb(index.0, Regs::TEST);
46+
bar.write8(index.0, Regs::TEST);
4747

48-
let offset = u32::from_le(bar.readl(Regs::OFFSET)) as usize;
49-
let data = bar.readb(Regs::DATA);
48+
let offset = u32::from_le(bar.read32(Regs::OFFSET)) as usize;
49+
let data = bar.read8(Regs::DATA);
5050

5151
// Write `data` to `offset` to increase `count` by one.
5252
//
53-
// Note that we need `try_writeb`, since `offset` can't be checked at compile-time.
54-
bar.try_writeb(data, offset)?;
53+
// Note that we need `try_write8`, since `offset` can't be checked at compile-time.
54+
bar.try_write8(data, offset)?;
5555

56-
Ok(bar.readl(Regs::COUNT))
56+
Ok(bar.read32(Regs::COUNT))
5757
}
5858
}
5959

0 commit comments

Comments
 (0)