diff options
-rw-r--r-- | cpukit/include/machine/_kernel_time.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/cpukit/include/machine/_kernel_time.h b/cpukit/include/machine/_kernel_time.h index d99daa0e47..f0b6bdfc47 100644 --- a/cpukit/include/machine/_kernel_time.h +++ b/cpukit/include/machine/_kernel_time.h @@ -67,6 +67,23 @@ } while (0) #endif +/* + * Simple macros to convert ticks to milliseconds + * or microseconds and vice-versa. The answer + * will always be at least 1. Note the return + * value is a uint32_t however we step up the + * operations to 64 bit to avoid any overflow/underflow + * problems. + */ +#define TICKS_2_MSEC(t) max(1, (uint32_t)(hz == 1000) ? \ + (t) : (((uint64_t)(t) * (uint64_t)1000)/(uint64_t)hz)) +#define TICKS_2_USEC(t) max(1, (uint32_t)(hz == 1000) ? \ + ((t) * 1000) : (((uint64_t)(t) * (uint64_t)1000000)/(uint64_t)hz)) +#define MSEC_2_TICKS(m) max(1, (uint32_t)((hz == 1000) ? \ + (m) : ((uint64_t)(m) * (uint64_t)hz)/(uint64_t)1000)) +#define USEC_2_TICKS(u) max(1, (uint32_t)((hz == 1000) ? \ + ((u) / 1000) : ((uint64_t)(u) * (uint64_t)hz)/(uint64_t)1000000)) + /* Operations on timevals. */ #define timevalclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) |