| /* |
| * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230) |
| * |
| * SPDX-License-Identifier: BSD-2-Clause |
| */ |
| |
| #pragma once |
| |
| #include <stdint.h> |
| #include <utils/time.h> |
| |
| #define KHZ (1000) |
| #define MHZ (1000 * KHZ) |
| #define GHZ (1000 * MHZ) |
| |
| typedef uint64_t freq_t; |
| |
| static inline uint64_t freq_cycles_and_hz_to_ns(uint64_t ncycles, freq_t hz) |
| { |
| if (hz % GHZ == 0) { |
| return ncycles / (hz / GHZ); |
| } else if (hz % MHZ == 0) { |
| return ncycles * MS_IN_S / (hz / MHZ); |
| } else if (hz % KHZ == 0) { |
| return ncycles * US_IN_S / (hz / KHZ); |
| } |
| |
| return (ncycles * NS_IN_S) / hz; |
| } |
| |
| static inline freq_t freq_cycles_and_ns_to_hz(uint64_t ncycles, uint64_t ns) |
| { |
| return (ncycles * NS_IN_S) / ns; |
| } |
| |
| static inline uint64_t freq_ns_and_hz_to_cycles(uint64_t ns, freq_t hz) |
| { |
| return (ns * hz) / NS_IN_S; |
| } |