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