diff --git a/local/recipes/drivers/redbear-r8125d/source/Cargo.toml b/local/recipes/drivers/redbear-r8125d/source/Cargo.toml index 2ac750d5a4..6f56104b15 100644 --- a/local/recipes/drivers/redbear-r8125d/source/Cargo.toml +++ b/local/recipes/drivers/redbear-r8125d/source/Cargo.toml @@ -26,6 +26,7 @@ redox_syscall = { path = "../../../../../local/sources/syscall", features = ["st libredox = { path = "../../../../../local/sources/libredox", features = ["call", "std"] } redox-scheme = { path = "../../../../../local/sources/redox-scheme" } daemon = { path = "../../../../sources/base/daemon" } +redox_event = "0.4.8" common = { path = "../../../../sources/base/drivers/common" } driver-network = { path = "../../../../sources/base/drivers/net/driver-network" } pcid_interface = { path = "../../../../sources/base/drivers/pcid", package = "pcid" } diff --git a/local/recipes/drivers/redbear-r8125d/source/src/main.rs b/local/recipes/drivers/redbear-r8125d/source/src/main.rs index cd11841827..4b3c127e53 100644 --- a/local/recipes/drivers/redbear-r8125d/source/src/main.rs +++ b/local/recipes/drivers/redbear-r8125d/source/src/main.rs @@ -65,8 +65,10 @@ mod redox_main { let mut scheme = NetworkScheme::new( move || unsafe { let mut dev = Rtl8125::new(bar as usize); - dev.hw_init() - .expect("redbear-r8125d: failed to initialize device"); + if let Err(err) = dev.hw_init() { + log::error!("redbear-r8125d: failed to initialize device: {err:?}"); + std::process::exit(1); + } dev }, daemon, @@ -80,27 +82,40 @@ mod redox_main { } } - let event_queue = EventQueue::::new() - .expect("redbear-r8125d: Could not create event queue."); - event_queue - .subscribe( - irq_file.irq_handle().as_raw_fd() as usize, - Source::Irq, - event::EventFlags::READ, - ) - .unwrap(); - event_queue - .subscribe( - scheme.event_handle().raw(), - Source::Scheme, - event::EventFlags::READ, - ) - .unwrap(); + let event_queue = match EventQueue::::new() { + Ok(queue) => queue, + Err(err) => { + log::error!("redbear-r8125d: could not create event queue: {err}"); + std::process::exit(1); + } + }; + if let Err(err) = event_queue.subscribe( + irq_file.irq_handle().as_raw_fd() as usize, + Source::Irq, + event::EventFlags::READ, + ) { + log::error!("redbear-r8125d: failed to subscribe IRQ handle: {err}"); + std::process::exit(1); + } + if let Err(err) = event_queue.subscribe( + scheme.event_handle().raw(), + Source::Scheme, + event::EventFlags::READ, + ) { + log::error!("redbear-r8125d: failed to subscribe scheme handle: {err}"); + std::process::exit(1); + } let inner = scheme.inner(); let mut running = true; while running { - let event_count = event_queue.run().unwrap(); + let event_count = match event_queue.run() { + Ok(count) => count, + Err(err) => { + log::error!("redbear-r8125d: event queue run failed: {err}"); + break; + } + }; if event_count == 0 { log::warn!("redbear-r8125d: event count is zero, timeout"); @@ -114,7 +129,13 @@ mod redox_main { .event_handle(Source::Scheme) .map_or(false, |_| scheme.event_count() > 0) { - running = scheme.handle_events().unwrap(); + match scheme.handle_events() { + Ok(still_running) => running = still_running, + Err(err) => { + log::error!("redbear-r8125d: scheme handle_events failed: {err}"); + running = false; + } + } } if event_queue