17ae679ddSLoGin use crate::smp::core::smp_get_processor_id; 27ae679ddSLoGin 35b59005fSLoGin use super::{process_init, ProcessManager, __PROCESS_MANAGEMENT_INIT_DONE}; 440fe15e0SLoGin 540fe15e0SLoGin #[no_mangle] rs_process_init()64fda81ceSLoGinunsafe extern "C" fn rs_process_init() { 740fe15e0SLoGin process_init(); 840fe15e0SLoGin } 940fe15e0SLoGin 101496ba7bSLoGin /// 临时用于获取空闲进程的栈顶的函数,这个函数是为了旧的smp模块的初始化而写在这的 1140fe15e0SLoGin #[no_mangle] rs_get_idle_stack_top(cpu_id: u32) -> usize124fda81ceSLoGinunsafe extern "C" fn rs_get_idle_stack_top(cpu_id: u32) -> usize { 131496ba7bSLoGin return ProcessManager::idle_pcb()[cpu_id as usize] 141496ba7bSLoGin .kernel_stack() 151496ba7bSLoGin .stack_max_address() 161496ba7bSLoGin .data(); 1740fe15e0SLoGin } 1840fe15e0SLoGin 1940fe15e0SLoGin #[no_mangle] rs_current_pcb_cpuid() -> u32204fda81ceSLoGinunsafe extern "C" fn rs_current_pcb_cpuid() -> u32 { 21*e2841179SLoGin return smp_get_processor_id().data(); 2240fe15e0SLoGin } 237ae679ddSLoGin 2440fe15e0SLoGin #[no_mangle] rs_current_pcb_pid() -> u32254fda81ceSLoGinunsafe extern "C" fn rs_current_pcb_pid() -> u32 { 267ae679ddSLoGin if unsafe { __PROCESS_MANAGEMENT_INIT_DONE } { 271496ba7bSLoGin return ProcessManager::current_pcb().pid().0 as u32; 2840fe15e0SLoGin } 297ae679ddSLoGin return 0; 307ae679ddSLoGin } 3140fe15e0SLoGin 3240fe15e0SLoGin #[no_mangle] rs_current_pcb_preempt_count() -> u32334fda81ceSLoGinunsafe extern "C" fn rs_current_pcb_preempt_count() -> u32 { 34971462beSGnoCiYeH if unsafe { !__PROCESS_MANAGEMENT_INIT_DONE } { 35971462beSGnoCiYeH return 0; 36971462beSGnoCiYeH } 371496ba7bSLoGin return ProcessManager::current_pcb().preempt_count() as u32; 3840fe15e0SLoGin } 391496ba7bSLoGin 401496ba7bSLoGin #[no_mangle] rs_current_pcb_flags() -> u32414fda81ceSLoGinunsafe extern "C" fn rs_current_pcb_flags() -> u32 { 42971462beSGnoCiYeH if unsafe { !__PROCESS_MANAGEMENT_INIT_DONE } { 43971462beSGnoCiYeH return 0; 44971462beSGnoCiYeH } 451496ba7bSLoGin return ProcessManager::current_pcb().flags().bits() as u32; 461496ba7bSLoGin } 471496ba7bSLoGin 481496ba7bSLoGin #[no_mangle] 494fda81ceSLoGin #[cfg(target_arch = "x86_64")] rs_current_pcb_thread_rbp() -> u64504fda81ceSLoGinunsafe extern "C" fn rs_current_pcb_thread_rbp() -> u64 { 51971462beSGnoCiYeH if unsafe { !__PROCESS_MANAGEMENT_INIT_DONE } { 52971462beSGnoCiYeH return 0; 53971462beSGnoCiYeH } 541496ba7bSLoGin return ProcessManager::current_pcb().arch_info_irqsave().rbp() as u64; 551496ba7bSLoGin } 561496ba7bSLoGin 571496ba7bSLoGin #[no_mangle] 581a72a751SLoGin #[cfg(target_arch = "riscv64")] rs_current_pcb_thread_rbp() -> u64591a72a751SLoGinunsafe extern "C" fn rs_current_pcb_thread_rbp() -> u64 { 601a72a751SLoGin // 不应该实现这个函数 611a72a751SLoGin unimplemented!("rs_current_pcb_thread_rbp") 621a72a751SLoGin } 631a72a751SLoGin 641a72a751SLoGin #[no_mangle] rs_preempt_disable()654fda81ceSLoGinunsafe extern "C" fn rs_preempt_disable() { 661496ba7bSLoGin return ProcessManager::preempt_disable(); 671496ba7bSLoGin } 681496ba7bSLoGin 691496ba7bSLoGin #[no_mangle] rs_preempt_enable()704fda81ceSLoGinunsafe extern "C" fn rs_preempt_enable() { 711496ba7bSLoGin return ProcessManager::preempt_enable(); 721496ba7bSLoGin } 731496ba7bSLoGin 741496ba7bSLoGin #[no_mangle] rs_process_do_exit(exit_code: usize) -> usize754fda81ceSLoGinunsafe extern "C" fn rs_process_do_exit(exit_code: usize) -> usize { 76971462beSGnoCiYeH if unsafe { !__PROCESS_MANAGEMENT_INIT_DONE } { 77971462beSGnoCiYeH return 0; 78971462beSGnoCiYeH } 791496ba7bSLoGin ProcessManager::exit(exit_code); 8040fe15e0SLoGin } 81