diff options
| author | cpplover0 <osdev555@yandex.com> | 2026-03-01 08:06:37 +0300 |
|---|---|---|
| committer | cpplover0 <osdev555@yandex.com> | 2026-03-01 08:06:37 +0300 |
| commit | 564e9b23d5647b16f43dea3f9eaf2008330e70f9 (patch) | |
| tree | 99e2f283bf4ac59db7456d3a234a48000b065dc2 /kernel/src/drivers/tsc.cpp | |
| parent | 9f0c014b08f33f44eb7134969c0e7ed509e3adfc (diff) | |
orange rewrite
Diffstat (limited to 'kernel/src/drivers/tsc.cpp')
| -rw-r--r-- | kernel/src/drivers/tsc.cpp | 46 |
1 files changed, 0 insertions, 46 deletions
diff --git a/kernel/src/drivers/tsc.cpp b/kernel/src/drivers/tsc.cpp deleted file mode 100644 index 0490ccd..0000000 --- a/kernel/src/drivers/tsc.cpp +++ /dev/null @@ -1,46 +0,0 @@ - -#include <drivers/tsc.hpp> -#include <drivers/hpet.hpp> -#include <cstdint> - -#include <generic/time.hpp> - -#include <arch/x86_64/cpu/data.hpp> - -#include <etc/logging.hpp> - -#include <etc/assembly.hpp> - -using namespace drivers; - -std::uint64_t freq; - -void tsc::init() { - std::uint64_t start = __rdtsc(); - time::sleep(100); - std::uint64_t end = __rdtsc(); - std::uint64_t d = end - start; - arch::x86_64::cpu::data()->tsc.freq = (d * 1000000ULL) / (100 * 1000ULL); -} - - -void tsc::sleep(std::uint64_t us) { - - if(arch::x86_64::cpu::data()->tsc.freq == 0) { - drivers::hpet::sleep(us); - return; - } - - std::uint64_t current = currentnano(); - std::uint64_t end = us * 1000; - while((currentnano() - current) < end); - __nop(); -} - -std::uint64_t tsc::currentnano() { - return (__rdtsc() * 1000000ULL) / arch::x86_64::cpu::data()->tsc.freq; -} - -std::uint64_t tsc::currentus() { - return currentnano() / 1000; -}
\ No newline at end of file |
