xref: /DragonOS/kernel/src/arch/x86_64/time.rs (revision 8cb2e9b344230227fe5f3ab3ebeb2522f1c5e289)
1fbe6becdSLoGin use crate::time::TimeArch;
2fbe6becdSLoGin 
3*8cb2e9b3SLoGin use super::driver::tsc::TSCManager;
4*8cb2e9b3SLoGin 
5fbe6becdSLoGin pub struct X86_64TimeArch;
6fbe6becdSLoGin 
7fbe6becdSLoGin impl TimeArch for X86_64TimeArch {
8fbe6becdSLoGin     fn get_cycles() -> usize {
9fbe6becdSLoGin         unsafe { x86::time::rdtsc() as usize }
10fbe6becdSLoGin     }
11*8cb2e9b3SLoGin 
12*8cb2e9b3SLoGin     fn cal_expire_cycles(ns: usize) -> usize {
13*8cb2e9b3SLoGin         Self::get_cycles() + ns * TSCManager::cpu_khz() as usize / 1000000
14*8cb2e9b3SLoGin     }
15fbe6becdSLoGin }
16