r8125d: add redox_event dep; replace panic paths with typed log-and-exit handling
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user