use crate::io; use crate::num::NonZero; use crate::ptr::NonNull; use crate::time::Duration; pub fn available_parallelism() -> io::Result> { // UEFI is single threaded Ok(NonZero::new(1).unwrap()) } pub fn sleep(dur: Duration) { let boot_services: NonNull = crate::os::uefi::env::boot_services().expect("can't sleep").cast(); let mut dur_ms = dur.as_micros(); // ceil up to the nearest microsecond if dur.subsec_nanos() % 1000 > 0 { dur_ms += 1; } while dur_ms > 0 { let ms = crate::cmp::min(dur_ms, usize::MAX as u128); let _ = unsafe { ((*boot_services.as_ptr()).stall)(ms as usize) }; dur_ms -= ms; } }