blob: 30a0e38ad9c1f06dbe11e3fe36537665a1d8dc0c [file] [log] [blame]
/*
* Copyright 2017, Data61
* Commonwealth Scientific and Industrial Research Organisation (CSIRO)
* ABN 41 687 119 230.
*
* This software may be distributed and modified according to the terms of
* the BSD 2-Clause license. Note that NO WARRANTY is provided.
* See "LICENSE_BSD2.txt" for details.
*
* @TAG(DATA61_BSD)
*/
#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;
}