Skip to content

Commit cbc88a1

Browse files
committedNov 8, 2024
feat(mmio): add new_with_stride
1 parent bf0aca3 commit cbc88a1

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed
 

‎src/mmio.rs

+15-5
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,24 @@ impl MmioSerialPort {
2323
/// really points to a serial port device.
2424
#[rustversion::attr(since(1.61), const)]
2525
pub unsafe fn new(base: usize) -> Self {
26+
Self::new_with_stride(base, 1)
27+
}
28+
29+
/// Creates a new UART interface on the given memory mapped address with a given
30+
/// register stride.
31+
///
32+
/// This function is unsafe because the caller must ensure that the given base address
33+
/// really points to a serial port device.
34+
#[rustversion::attr(since(1.61), const)]
35+
pub unsafe fn new_with_stride(base: usize, stride: usize) -> Self {
2636
let base_pointer = base as *mut u8;
2737
Self {
2838
data: AtomicPtr::new(base_pointer),
29-
int_en: AtomicPtr::new(base_pointer.add(1)),
30-
fifo_ctrl: AtomicPtr::new(base_pointer.add(2)),
31-
line_ctrl: AtomicPtr::new(base_pointer.add(3)),
32-
modem_ctrl: AtomicPtr::new(base_pointer.add(4)),
33-
line_sts: AtomicPtr::new(base_pointer.add(5)),
39+
int_en: AtomicPtr::new(base_pointer.add(1 * stride)),
40+
fifo_ctrl: AtomicPtr::new(base_pointer.add(2 * stride)),
41+
line_ctrl: AtomicPtr::new(base_pointer.add(3 * stride)),
42+
modem_ctrl: AtomicPtr::new(base_pointer.add(4 * stride)),
43+
line_sts: AtomicPtr::new(base_pointer.add(5 * stride)),
3444
}
3545
}
3646

0 commit comments

Comments
 (0)