upgrades people upgrades

destroying ondras clean code
master
Able 2022-04-12 13:26:52 -05:00
parent c7bda002ae
commit 971ad41279
Signed by untrusted user: able
GPG Key ID: D164AF5F5700BE51
14 changed files with 101 additions and 32 deletions

1
Cargo.lock generated
View File

@ -56,6 +56,7 @@ dependencies = [
"toml", "toml",
"uart_16550", "uart_16550",
"unicode-width", "unicode-width",
"versioning",
"vga", "vga",
"volatile 0.2.7", "volatile 0.2.7",
"wasmi", "wasmi",

View File

@ -18,7 +18,7 @@ run-args = [
"-smp", "-smp",
"cores=2", "cores=2",
"-device", #"ati-vga", "-device",
"cirrus-vga", "cirrus-vga",
# "-device", # "-device",
@ -27,8 +27,8 @@ run-args = [
# "-drive", # "-drive",
# "file=disk.qcow2,if=none,id=drive0", # "file=disk.qcow2,if=none,id=drive0",
# "-device", "-device",
# "virtio-rng", "virtio-rng",
"-qmp", "-qmp",
"unix:../qmp-sock,server,nowait" "unix:../qmp-sock,server,nowait"
@ -56,6 +56,7 @@ rhai = "1.6.0"
libwasm = {git="https://git.ablecorp.us:443/able/libwasm.git"} libwasm = {git="https://git.ablecorp.us:443/able/libwasm.git"}
acpi = "4.1.0" acpi = "4.1.0"
axel = { git = "https://git.ablecorp.us/able/aos_userland" } axel = { git = "https://git.ablecorp.us/able/aos_userland" }
versioning = { git = "https://git.ablecorp.us/able/aos_userland" }
[dependencies.logos] [dependencies.logos]
version = "0.12" version = "0.12"

View File

@ -0,0 +1 @@
pub fn sysinfo() {}

View File

@ -51,6 +51,25 @@ extern "C" fn _start() -> ! {
uart.put('\r' as u8); uart.put('\r' as u8);
} }
91 => {
if let Some(ch) = uart.get() {
match ch as char {
'A' => {
serial_println!("That's the up arrow!");
}
'B' => {
serial_println!("That's the down arrow!");
}
'C' => {
serial_println!("That's the right arrow!");
}
'D' => {
serial_println!("That's the left arrow!");
}
}
}
}
_ => { _ => {
uart.put(c); uart.put(c);
} }

View File

@ -1,6 +1,7 @@
pub mod allocator; pub mod allocator;
pub mod graphics; pub mod graphics;
pub mod serial; pub mod serial;
pub mod sysinfo;
pub mod timer; pub mod timer;
#[deprecated(note = "The use of hardware specific drivers for VGA is discouraged")] #[deprecated(note = "The use of hardware specific drivers for VGA is discouraged")]

View File

@ -16,6 +16,7 @@
not(any(target_arch = "x86_64", target_arch = "x86")), not(any(target_arch = "x86_64", target_arch = "x86")),
allow(dead_code) allow(dead_code)
)] )]
pub fn sysinfo() {}
use core::arch::asm; use core::arch::asm;
use core::ops::Deref; use core::ops::Deref;

View File

@ -1,26 +1,25 @@
use core::fmt::Display;
use crate::{arch::drivers::sysinfo::master, ALLOCATOR};
use super::systeminfo::SystemMemory; use super::systeminfo::SystemMemory;
use versioning::Version;
use x86_64::instructions::interrupts::{disable, enable};
// NOTE: Move to somewhere else pub enum CpuType {
pub static KINFO: KernelInfo = KernelInfo { RiscV(String),
kernel_version: SemanticVersion { X86_64(String),
major: 0,
minor: 0,
patch: 0,
},
memory: SystemMemory { used: 0, total: 0 },
};
// Can be standardized
// NOTE: Move this to relib
pub struct SemanticVersion {
pub major: u8,
pub minor: u8,
pub patch: u8,
} }
impl Display for CpuType {
impl core::fmt::Display for SemanticVersion { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { write!(
write!(f, "v{}.{}.{}", self.major, self.minor, self.patch) f,
"{}",
match self {
CpuType::RiscV(s) => s,
CpuType::X86_64(s) => s,
}
)
} }
} }
@ -28,8 +27,51 @@ impl core::fmt::Display for SemanticVersion {
pub struct KernelInfo { pub struct KernelInfo {
// os: String, // os: String,
// host: String, // host: String,
pub kernel_version: SemanticVersion, pub kernel_version: Version,
// cpu: String, pub cpu: CpuType,
// gpu: String, // gpu: String,
pub memory: SystemMemory, pub memory: SystemMemory,
} }
impl KernelInfo {
pub fn get() -> KernelInfo {
disable();
let allocator = ALLOCATOR.lock();
let total = allocator.size();
let used = allocator.used();
enable();
let cpu = CpuType::X86_64(master().unwrap().brand_string().unwrap().to_string());
KernelInfo {
kernel_version: Version {
major: 0,
minor: 0,
patch: 0,
},
cpu,
memory: SystemMemory { total, used },
}
}
}
impl Display for KernelInfo {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(
f,
"
OS: AbleOS
Host: {{}}
Kernel: {}.{}.{}
CPU: {}
Memory: {}/{}
",
self.kernel_version.major,
self.kernel_version.minor,
self.kernel_version.patch,
self.cpu,
self.memory.used,
self.memory.total
)
}
}

View File

@ -3,7 +3,6 @@
pub mod absi; pub mod absi;
pub mod clip; pub mod clip;
pub mod futex; pub mod futex;
pub mod info;
pub mod kinfo; pub mod kinfo;
pub mod mail; pub mod mail;
pub mod server; pub mod server;

View File

@ -10,8 +10,8 @@ pub const RELEASE_TYPE: &str = "debug";
pub const RELEASE_TYPE: &str = "release"; pub const RELEASE_TYPE: &str = "release";
pub struct SystemMemory { pub struct SystemMemory {
pub used: u64, pub used: usize,
pub total: u64, pub total: usize,
} }
impl core::fmt::Display for SystemMemory { impl core::fmt::Display for SystemMemory {

View File

@ -1,6 +1,6 @@
#![allow(clippy::empty_loop)] #![allow(clippy::empty_loop)]
use crate::info::master; use crate::arch::drivers::sysinfo::master;
use crate::scheduler::SCHEDULER; use crate::scheduler::SCHEDULER;
use crate::{ use crate::{
arch::{init, sloop}, arch::{init, sloop},

View File

@ -7,6 +7,9 @@
#![feature(abi_x86_interrupt)] #![feature(abi_x86_interrupt)]
#![feature(alloc_error_handler)] #![feature(alloc_error_handler)]
#![feature(prelude_import)] #![feature(prelude_import)]
// Needed for riscv
#![feature(asm_sym)]
#![feature(naked_functions)]
#[macro_use] #[macro_use]
pub extern crate log; pub extern crate log;

View File

@ -1,5 +1,6 @@
use crate::arch::drivers::sysinfo::{master, sysinfo};
use crate::filesystem::FILE_SYSTEM; use crate::filesystem::FILE_SYSTEM;
use crate::info::master;
use crate::time::fetch_time; use crate::time::fetch_time;
use crate::wasm_jumploader::interp; use crate::wasm_jumploader::interp;
use crate::ALLOCATOR; use crate::ALLOCATOR;
@ -90,14 +91,13 @@ pub fn set_hostname(name: String) {
/// Examine a memory pointer /// Examine a memory pointer
pub fn peek_memory(ptr: i64) -> i64 { pub fn peek_memory(ptr: i64) -> i64 {
println!(">:(");
unsafe { *(ptr as *const u8) as _ } unsafe { *(ptr as *const u8) as _ }
} }
pub fn poke_memory(ptr: i64, val: i64) { pub fn poke_memory(ptr: i64, val: i64) {
match val.try_into() { match val.try_into() {
Ok(val) => unsafe { *(ptr as *mut u8) = val }, Ok(val) => unsafe { *(ptr as *mut u8) = val },
Err(_) => println!("Error: {val} cannot be converted into u8"), Err(_) => error!("{val} cannot be converted into u8"),
} }
} }

View File

@ -147,6 +147,7 @@ impl Externals for HostExternals {
GET_TIME_INDEX => { GET_TIME_INDEX => {
use core::sync::atomic::Ordering::*; use core::sync::atomic::Ordering::*;
trace!("SYSCALL: get time"); trace!("SYSCALL: get time");
x86_64::instructions::interrupts::disable(); x86_64::instructions::interrupts::disable();
let tick_time = kernel::TICK.load(Relaxed); let tick_time = kernel::TICK.load(Relaxed);
x86_64::instructions::interrupts::enable(); x86_64::instructions::interrupts::enable();