DragonOS/kernel/src/driver/rtc/interface.rs
LoGin da15231979
实现了rtc的抽象,并且把x86的cmos rtc接入到设备驱动模型 (#674)
* 实现了rtc的抽象,并且把x86的cmos rtc接入到设备驱动模型。
2024-03-28 00:28:13 +08:00

32 lines
933 B
Rust

use alloc::sync::Arc;
use system_error::SystemError;
use crate::driver::base::kobject::KObject;
use super::{global_default_rtc, sysfs::RtcGeneralDevice, utils::kobj2rtc_device, RtcTime};
/// 根据rtc general device, 读取真实时间
pub fn rtc_read_time(general_dev: &Arc<RtcGeneralDevice>) -> Result<RtcTime, SystemError> {
let class_ops = general_dev.class_ops().ok_or(SystemError::EINVAL)?;
let real_dev = general_dev
.parent()
.and_then(|p| p.upgrade())
.ok_or(SystemError::ENODEV)?;
let real_dev = kobj2rtc_device(real_dev).ok_or(SystemError::EINVAL)?;
let time = class_ops.read_time(&real_dev)?;
if !time.valid() {
return Err(SystemError::EINVAL);
}
return Ok(time);
}
/// 从全局默认的rtc时钟那里读取时间
pub fn rtc_read_time_default() -> Result<RtcTime, SystemError> {
rtc_read_time(&global_default_rtc().ok_or(SystemError::ENODEV)?)
}