r8125d: add redox_event dep; replace panic paths with typed log-and-exit handling

This commit is contained in:
2026-08-05 09:26:05 +03:00
parent 4ecf8ab0c0
commit d94fed87c2
2 changed files with 42 additions and 20 deletions
@@ -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" }
@@ -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::<Source>::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::<Source>::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