Skip to content

Commit b487aa6

Browse files
authored
Merge pull request #621 from m-falkowski1/add_readx_writex_relaxed
rust: iomem: add readx/writex relaxed family of functions
2 parents c871b6d + e29f395 commit b487aa6

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

rust/helpers.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,57 @@ void rust_helper_writeq(u64 value, volatile void __iomem *addr)
108108
EXPORT_SYMBOL_GPL(rust_helper_writeq);
109109
#endif
110110

111+
u8 rust_helper_readb_relaxed(const volatile void __iomem *addr)
112+
{
113+
return readb_relaxed(addr);
114+
}
115+
EXPORT_SYMBOL_GPL(rust_helper_readb_relaxed);
116+
117+
u16 rust_helper_readw_relaxed(const volatile void __iomem *addr)
118+
{
119+
return readw_relaxed(addr);
120+
}
121+
EXPORT_SYMBOL_GPL(rust_helper_readw_relaxed);
122+
123+
u32 rust_helper_readl_relaxed(const volatile void __iomem *addr)
124+
{
125+
return readl_relaxed(addr);
126+
}
127+
EXPORT_SYMBOL_GPL(rust_helper_readl_relaxed);
128+
129+
#ifdef CONFIG_64BIT
130+
u64 rust_helper_readq_relaxed(const volatile void __iomem *addr)
131+
{
132+
return readq_relaxed(addr);
133+
}
134+
EXPORT_SYMBOL_GPL(rust_helper_readq_relaxed);
135+
#endif
136+
137+
void rust_helper_writeb_relaxed(u8 value, volatile void __iomem *addr)
138+
{
139+
writeb_relaxed(value, addr);
140+
}
141+
EXPORT_SYMBOL_GPL(rust_helper_writeb_relaxed);
142+
143+
void rust_helper_writew_relaxed(u16 value, volatile void __iomem *addr)
144+
{
145+
writew_relaxed(value, addr);
146+
}
147+
EXPORT_SYMBOL_GPL(rust_helper_writew_relaxed);
148+
149+
void rust_helper_writel_relaxed(u32 value, volatile void __iomem *addr)
150+
{
151+
writel_relaxed(value, addr);
152+
}
153+
EXPORT_SYMBOL_GPL(rust_helper_writel_relaxed);
154+
155+
#ifdef CONFIG_64BIT
156+
void rust_helper_writeq_relaxed(u64 value, volatile void __iomem *addr)
157+
{
158+
writeq_relaxed(value, addr);
159+
}
160+
EXPORT_SYMBOL_GPL(rust_helper_writeq_relaxed);
161+
#endif
111162
void rust_helper___spin_lock_init(spinlock_t *lock, const char *name,
112163
struct lock_class_key *key)
113164
{

rust/kernel/io_mem.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,16 @@ impl<const SIZE: usize> IoMem<SIZE> {
187187
u64
188188
);
189189

190+
define_read!(readb_relaxed, try_readb_relaxed, u8);
191+
define_read!(readw_relaxed, try_readw_relaxed, u16);
192+
define_read!(readl_relaxed, try_readl_relaxed, u32);
193+
define_read!(
194+
#[cfg(CONFIG_64BIT)]
195+
readq_relaxed,
196+
try_readq_relaxed,
197+
u64
198+
);
199+
190200
define_write!(writeb, try_writeb, u8);
191201
define_write!(writew, try_writew, u16);
192202
define_write!(writel, try_writel, u32);
@@ -196,6 +206,16 @@ impl<const SIZE: usize> IoMem<SIZE> {
196206
try_writeq,
197207
u64
198208
);
209+
210+
define_write!(writeb_relaxed, try_writeb_relaxed, u8);
211+
define_write!(writew_relaxed, try_writew_relaxed, u16);
212+
define_write!(writel_relaxed, try_writel_relaxed, u32);
213+
define_write!(
214+
#[cfg(CONFIG_64BIT)]
215+
writeq_relaxed,
216+
try_writeq_relaxed,
217+
u64
218+
);
199219
}
200220

201221
impl<const SIZE: usize> Drop for IoMem<SIZE> {

0 commit comments

Comments
 (0)