@@ -9,31 +9,32 @@ use rdif_base::{DriverGeneric, KError};
99use crate :: { InterruptMask , Register , TransferError } ;
1010
1111pub struct Serial < T : Register > {
12- inner : Arc < UnsafeCell < T > > ,
12+ inner : Arc < Inner < T > > ,
1313 is_tx_taken : Arc < AtomicBool > ,
1414 is_rx_taken : Arc < AtomicBool > ,
1515 is_irq_handler_taken : Arc < AtomicBool > ,
1616}
1717
18- unsafe impl < T : Register > Send for Serial < T > { }
19- unsafe impl < T : Register > Sync for Serial < T > { }
18+ struct Inner < T : Register > ( UnsafeCell < T > ) ;
19+ unsafe impl < T : Register > Send for Inner < T > { }
20+ unsafe impl < T : Register > Sync for Inner < T > { }
2021
2122impl < T : Register > Serial < T > {
2223 pub fn new ( inner : T ) -> Self {
2324 Self {
24- inner : Arc :: new ( UnsafeCell :: new ( inner) ) ,
25+ inner : Arc :: new ( Inner ( UnsafeCell :: new ( inner) ) ) ,
2526 is_tx_taken : Arc :: new ( AtomicBool :: new ( false ) ) ,
2627 is_rx_taken : Arc :: new ( AtomicBool :: new ( false ) ) ,
2728 is_irq_handler_taken : Arc :: new ( AtomicBool :: new ( false ) ) ,
2829 }
2930 }
3031
3132 fn inner_mut ( & mut self ) -> & mut T {
32- unsafe { & mut * self . inner . get ( ) }
33+ unsafe { & mut * self . inner . 0 . get ( ) }
3334 }
3435
3536 fn inner ( & self ) -> & T {
36- unsafe { & * self . inner . get ( ) }
37+ unsafe { & * self . inner . 0 . get ( ) }
3738 }
3839
3940 pub fn open ( & mut self ) -> Result < ( ) , KError > {
@@ -161,7 +162,7 @@ impl<T: Register> DriverGeneric for Serial<T> {
161162}
162163
163164pub struct Sender < T : Register > {
164- s : Weak < UnsafeCell < T > > ,
165+ s : Weak < Inner < T > > ,
165166 b : Arc < AtomicBool > ,
166167}
167168
@@ -176,13 +177,13 @@ impl<T: Register> Drop for Sender<T> {
176177impl < T : Register > crate :: TSender for Sender < T > {
177178 fn send ( & mut self , buf : & [ u8 ] ) -> Result < usize , TransferError > {
178179 let s = self . s . upgrade ( ) . ok_or ( TransferError :: SerialReleased ) ?;
179- let s = unsafe { & mut * s. get ( ) } ;
180+ let s = unsafe { & mut * s. 0 . get ( ) } ;
180181 Ok ( s. write_buf ( buf) )
181182 }
182183}
183184
184185pub struct Reciever < T : Register > {
185- s : Weak < UnsafeCell < T > > ,
186+ s : Weak < Inner < T > > ,
186187 b : Arc < AtomicBool > ,
187188}
188189
@@ -191,7 +192,7 @@ unsafe impl<T: Register> Send for Reciever<T> {}
191192impl < T : Register > crate :: TReciever for Reciever < T > {
192193 fn recive ( & mut self , buf : & mut [ u8 ] ) -> Result < usize , TransferError > {
193194 let s = self . s . upgrade ( ) . ok_or ( TransferError :: SerialReleased ) ?;
194- let s = unsafe { & mut * s. get ( ) } ;
195+ let s = unsafe { & mut * s. 0 . get ( ) } ;
195196 Ok ( s. read_buf ( buf) ?)
196197 }
197198 fn clean_fifo ( & mut self ) {
@@ -211,15 +212,15 @@ impl<T: Register> Drop for Reciever<T> {
211212}
212213
213214pub struct IrqHandler < T : Register > {
214- s : Arc < UnsafeCell < T > > ,
215+ s : Arc < Inner < T > > ,
215216 b : Arc < AtomicBool > ,
216217}
217218unsafe impl < T : Register > Send for IrqHandler < T > { }
218219unsafe impl < T : Register > Sync for IrqHandler < T > { }
219220
220221impl < T : Register > crate :: TIrqHandler for IrqHandler < T > {
221222 fn clean_interrupt_status ( & self ) -> InterruptMask {
222- let s = unsafe { & mut * self . s . get ( ) } ;
223+ let s = unsafe { & mut * self . s . 0 . get ( ) } ;
223224 s. clean_interrupt_status ( )
224225 }
225226}
0 commit comments