From 66f582e3a66a8af08769a28d0aa87624d4eb0e73 Mon Sep 17 00:00:00 2001 From: Yuke Peng Date: Mon, 2 Jan 2023 18:40:01 -0800 Subject: [PATCH 1/2] rtc, non-blocking console input support --- src/Cargo.lock | 7 ++ src/framework/jinux-frame/src/driver/mod.rs | 2 + src/framework/jinux-frame/src/driver/rtc.rs | 72 ++++++++++++++++++ src/framework/jinux-frame/src/lib.rs | 1 + src/framework/jinux-frame/src/time.rs | 75 +++++++++++++++++++ src/services/libs/jinux-std/Cargo.toml | 1 + .../libs/jinux-std/src/driver/console.rs | 31 +++++++- .../libs/jinux-std/src/syscall/mod.rs | 2 +- src/services/libs/jinux-std/src/tty/mod.rs | 13 ++-- src/tests/rtc.rs | 30 ++++++++ 10 files changed, 223 insertions(+), 11 deletions(-) create mode 100644 src/framework/jinux-frame/src/driver/rtc.rs create mode 100644 src/framework/jinux-frame/src/time.rs create mode 100644 src/tests/rtc.rs diff --git a/src/Cargo.lock b/src/Cargo.lock index f4bf0ebf..a3906fb4 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -25,6 +25,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + [[package]] name = "autocfg" version = "1.1.0" @@ -158,6 +164,7 @@ dependencies = [ name = "jinux-std" version = "0.1.0" dependencies = [ + "ascii", "bitflags", "jinux-frame", "jinux-pci", diff --git a/src/framework/jinux-frame/src/driver/mod.rs b/src/framework/jinux-frame/src/driver/mod.rs index 399e830d..8c8fcb9a 100644 --- a/src/framework/jinux-frame/src/driver/mod.rs +++ b/src/framework/jinux-frame/src/driver/mod.rs @@ -7,6 +7,7 @@ pub mod apic; pub mod ioapic; pub mod pic; pub mod timer; +pub mod rtc; pub use apic::ack; pub use timer::TimerCallback; @@ -27,4 +28,5 @@ pub(crate) fn init(rsdp: Option) { } } pic::init(); + rtc::init(); } diff --git a/src/framework/jinux-frame/src/driver/rtc.rs b/src/framework/jinux-frame/src/driver/rtc.rs new file mode 100644 index 00000000..9e545f7d --- /dev/null +++ b/src/framework/jinux-frame/src/driver/rtc.rs @@ -0,0 +1,72 @@ +use core::sync::atomic::AtomicU8; +use core::sync::atomic::Ordering::Relaxed; + +use acpi::{sdt::Signature, fadt::Fadt}; +use lazy_static::lazy_static; +use spin::Mutex; + +use crate::{x86_64_util::{out8, in8}, time::Time}; + +use super::acpi::ACPI_TABLES; + +const CMOS_ADDRESS : u16 = 0x70; +const CMOS_DATA : u16 = 0x71; +pub(crate) static CENTURY_REGISTER : AtomicU8 = AtomicU8::new(0); + +lazy_static!{ + static ref READ_TIME : Mutex