aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkbleeke <[email protected]>2023-03-27 12:40:27 +0200
committerkbleeke <[email protected]>2023-03-27 12:40:27 +0200
commit4c521044131279aa36f7e21dbc6ec566703a57c6 (patch)
treee06ecceda13cdd9ad73a455cbf2a5abf819888a0 /src
parent6f547cf05ddd1a27c8ec4e107ac227f7f9520ba6 (diff)
simplify ioctl waker code
Diffstat (limited to 'src')
-rw-r--r--src/ioctl.rs24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/ioctl.rs b/src/ioctl.rs
index 2d4cdb871..6a7465593 100644
--- a/src/ioctl.rs
+++ b/src/ioctl.rs
@@ -2,8 +2,6 @@ use core::cell::{Cell, RefCell};
2use core::future::poll_fn; 2use core::future::poll_fn;
3use core::task::{Poll, Waker}; 3use core::task::{Poll, Waker};
4 4
5use embassy_sync::blocking_mutex::raw::NoopRawMutex;
6use embassy_sync::blocking_mutex::Mutex;
7use embassy_sync::waitqueue::WakerRegistration; 5use embassy_sync::waitqueue::WakerRegistration;
8 6
9#[derive(Clone, Copy)] 7#[derive(Clone, Copy)]
@@ -27,37 +25,39 @@ enum IoctlStateInner {
27 Done { resp_len: usize }, 25 Done { resp_len: usize },
28} 26}
29 27
28#[derive(Default)]
29struct Wakers {
30 control: WakerRegistration,
31 runner: WakerRegistration,
32}
33
30pub struct IoctlState { 34pub struct IoctlState {
31 state: Cell<IoctlStateInner>, 35 state: Cell<IoctlStateInner>,
32 wakers: Mutex<NoopRawMutex, RefCell<(WakerRegistration, WakerRegistration)>>, 36 wakers: RefCell<Wakers>,
33} 37}
34 38
35impl IoctlState { 39impl IoctlState {
36 pub fn new() -> Self { 40 pub fn new() -> Self {
37 Self { 41 Self {
38 state: Cell::new(IoctlStateInner::Done { resp_len: 0 }), 42 state: Cell::new(IoctlStateInner::Done { resp_len: 0 }),
39 wakers: Mutex::new(RefCell::default()), 43 wakers: Default::default(),
40 } 44 }
41 } 45 }
42 46
43 fn wake_control(&self) { 47 fn wake_control(&self) {
44 self.wakers.lock(|f| { 48 self.wakers.borrow_mut().control.wake();
45 f.borrow_mut().0.wake();
46 })
47 } 49 }
48 50
49 fn register_control(&self, waker: &Waker) { 51 fn register_control(&self, waker: &Waker) {
50 self.wakers.lock(|f| f.borrow_mut().0.register(waker)); 52 self.wakers.borrow_mut().control.register(waker);
51 } 53 }
52 54
53 fn wake_runner(&self) { 55 fn wake_runner(&self) {
54 self.wakers.lock(|f| { 56 self.wakers.borrow_mut().runner.wake();
55 f.borrow_mut().1.wake();
56 })
57 } 57 }
58 58
59 fn register_runner(&self, waker: &Waker) { 59 fn register_runner(&self, waker: &Waker) {
60 self.wakers.lock(|f| f.borrow_mut().1.register(waker)); 60 self.wakers.borrow_mut().runner.register(waker);
61 } 61 }
62 62
63 pub async fn wait_complete(&self) -> usize { 63 pub async fn wait_complete(&self) -> usize {