#![allow(clippy::empty_loop)] use core::sync::atomic::Ordering; use crate::arch::drivers::sysinfo::master; use crate::ipc::channel::ChannelMessage; use crate::ipc::{self, IPC}; use crate::scheduler::SCHEDULER; use crate::time::fetch_time; use crate::SectionType; use crate::{ arch::{init, sloop}, relib::network::socket::{SimpleSock, Socket}, scratchpad, }; use crate::{boot_conf::KernelConfig, systeminfo::RELEASE_TYPE}; use kernel::{KERNEL_VERSION, TICK}; use libwasm::syscalls::time_calls::get_time; use spin::Lazy; use x86_64::instructions::interrupts::{disable, enable}; // TODO: Change this structure to allow for multiple cores loaded pub static KERNEL_CONF: Lazy = Lazy::new(KernelConfig::new); /// The main entry point of the kernel #[no_mangle] pub fn kernel_main() -> ! { init::init(); if KERNEL_CONF.logging.enabled { log::set_max_level(KERNEL_CONF.log_level()); } else { log::set_max_level(log::LevelFilter::Off); } let mut ipc_service = IPC.lock(); // create some channels or whatever here then drop it let log_handle = ipc_service.create_channel("LOG", true); drop(ipc_service); x86_64::instructions::interrupts::without_interrupts(|| { let mut scheduler = SCHEDULER.lock(); // TODO: This task never gets run scheduler.enqueue_spawn(traceloop); // scheduler.enqueue_spawn(scratchpad); }); sloop() } pub fn traceloop() { let mut last_time = 0.0; loop { // let time = fetch_time(); // if time > last_time { // last_time = time; // trace!("Timer"); // } } } pub fn cpu_socket_startup() { let mut cpu_info_socket = SimpleSock::new(); cpu_info_socket.register_protocol("CPU_INFO".to_string()); // let x = master().unwrap(); // let _xyz = x.brand_string().unwrap(); } pub fn log_version_data() { info!("{} v{:?}", RELEASE_TYPE, KERNEL_VERSION); info!( "Brand String: {}", master().unwrap().brand_string().unwrap() ); }