@@ -23,14 +23,24 @@ impl MmioSerialPort {
23
23
/// really points to a serial port device.
24
24
#[ rustversion:: attr( since( 1.61 ) , const ) ]
25
25
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 {
26
36
let base_pointer = base as * mut u8 ;
27
37
Self {
28
38
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 ) ) ,
34
44
}
35
45
}
36
46
0 commit comments