@@ -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