cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

units.h (2654B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _LINUX_UNITS_H
      3#define _LINUX_UNITS_H
      4
      5#include <linux/math.h>
      6
      7/* Metric prefixes in accordance with Système international (d'unités) */
      8#define PETA	1000000000000000ULL
      9#define TERA	1000000000000ULL
     10#define GIGA	1000000000UL
     11#define MEGA	1000000UL
     12#define KILO	1000UL
     13#define HECTO	100UL
     14#define DECA	10UL
     15#define DECI	10UL
     16#define CENTI	100UL
     17#define MILLI	1000UL
     18#define MICRO	1000000UL
     19#define NANO	1000000000UL
     20#define PICO	1000000000000ULL
     21#define FEMTO	1000000000000000ULL
     22
     23#define HZ_PER_KHZ		1000UL
     24#define KHZ_PER_MHZ		1000UL
     25#define HZ_PER_MHZ		1000000UL
     26
     27#define MILLIWATT_PER_WATT	1000UL
     28#define MICROWATT_PER_MILLIWATT	1000UL
     29#define MICROWATT_PER_WATT	1000000UL
     30
     31#define ABSOLUTE_ZERO_MILLICELSIUS -273150
     32
     33static inline long milli_kelvin_to_millicelsius(long t)
     34{
     35	return t + ABSOLUTE_ZERO_MILLICELSIUS;
     36}
     37
     38static inline long millicelsius_to_milli_kelvin(long t)
     39{
     40	return t - ABSOLUTE_ZERO_MILLICELSIUS;
     41}
     42
     43#define MILLIDEGREE_PER_DEGREE 1000
     44#define MILLIDEGREE_PER_DECIDEGREE 100
     45
     46static inline long kelvin_to_millicelsius(long t)
     47{
     48	return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DEGREE);
     49}
     50
     51static inline long millicelsius_to_kelvin(long t)
     52{
     53	t = millicelsius_to_milli_kelvin(t);
     54
     55	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
     56}
     57
     58static inline long deci_kelvin_to_celsius(long t)
     59{
     60	t = milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
     61
     62	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
     63}
     64
     65static inline long celsius_to_deci_kelvin(long t)
     66{
     67	t = millicelsius_to_milli_kelvin(t * MILLIDEGREE_PER_DEGREE);
     68
     69	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
     70}
     71
     72/**
     73 * deci_kelvin_to_millicelsius_with_offset - convert Kelvin to Celsius
     74 * @t: temperature value in decidegrees Kelvin
     75 * @offset: difference between Kelvin and Celsius in millidegrees
     76 *
     77 * Return: temperature value in millidegrees Celsius
     78 */
     79static inline long deci_kelvin_to_millicelsius_with_offset(long t, long offset)
     80{
     81	return t * MILLIDEGREE_PER_DECIDEGREE - offset;
     82}
     83
     84static inline long deci_kelvin_to_millicelsius(long t)
     85{
     86	return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
     87}
     88
     89static inline long millicelsius_to_deci_kelvin(long t)
     90{
     91	t = millicelsius_to_milli_kelvin(t);
     92
     93	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
     94}
     95
     96static inline long kelvin_to_celsius(long t)
     97{
     98	return t + DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
     99				     MILLIDEGREE_PER_DEGREE);
    100}
    101
    102static inline long celsius_to_kelvin(long t)
    103{
    104	return t - DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
    105				     MILLIDEGREE_PER_DEGREE);
    106}
    107
    108#endif /* _LINUX_UNITS_H */