/** * @file counter.h * @brief AArch64 system counter-timer. * @author fincs * @copyright libnx Authors */ #pragma once #include "../utils/types.h" /** * @brief Gets the current system tick. * @return The current system tick. */ static inline u64 armGetSystemTick(void) { u64 ret; __asm__ __volatile__ ("mrs %x[data], cntpct_el0" : [data] "=r" (ret)); return ret; } /** * @brief Gets the system counter-timer frequency * @return The system counter-timer frequency, in Hz. */ static inline u64 armGetSystemTickFreq(void) { u64 ret; __asm__ ("mrs %x[data], cntfrq_el0" : [data] "=r" (ret)); return ret; } /** * @brief Converts from nanoseconds to CPU ticks unit. * @param ns Time in nanoseconds. * @return Time in CPU ticks. */ static inline u64 armNsToTicks(u64 ns) { return (ns * 12) / 625; } /** * @brief Converts from CPU ticks unit to nanoseconds. * @param tick Time in ticks. * @return Time in nanoseconds. */ static inline u64 armTicksToNs(u64 tick) { return (tick * 625) / 12; }