2024-01-03 03:22:36 +00:00
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
|
2024-02-25 14:09:24 +00:00
|
|
|
use core::sync::atomic::{AtomicU8, Ordering::Relaxed};
|
|
|
|
|
|
2023-12-25 03:12:25 +00:00
|
|
|
use aster_frame::arch::x86::device::cmos::{get_century_register, CMOS_ADDRESS, CMOS_DATA};
|
2023-03-15 08:48:40 +00:00
|
|
|
|
2023-01-06 03:14:34 +00:00
|
|
|
pub(crate) static CENTURY_REGISTER: AtomicU8 = AtomicU8::new(0);
|
2023-01-03 02:40:01 +00:00
|
|
|
|
2023-01-06 03:14:34 +00:00
|
|
|
pub fn init() {
|
2023-08-27 12:17:32 +00:00
|
|
|
let Some(century_register) = get_century_register() else {
|
|
|
|
|
return;
|
|
|
|
|
};
|
|
|
|
|
CENTURY_REGISTER.store(century_register, Relaxed);
|
2023-01-03 02:40:01 +00:00
|
|
|
}
|
|
|
|
|
|
2023-01-06 03:14:34 +00:00
|
|
|
pub fn get_cmos(reg: u8) -> u8 {
|
2023-03-22 04:09:21 +00:00
|
|
|
CMOS_ADDRESS.write(reg);
|
|
|
|
|
CMOS_DATA.read()
|
2023-01-03 02:40:01 +00:00
|
|
|
}
|
|
|
|
|
|
2023-01-06 03:14:34 +00:00
|
|
|
pub fn is_updating() -> bool {
|
2023-03-22 04:09:21 +00:00
|
|
|
CMOS_ADDRESS.write(0x0A);
|
|
|
|
|
CMOS_DATA.read() & 0x80 != 0
|
2023-01-03 02:40:01 +00:00
|
|
|
}
|