]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - include/linux/units.h
KVM: arm64: Fix PMU probe ordering
[mirror_ubuntu-jammy-kernel.git] / include / linux / units.h
CommitLineData
23331e48
AM
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _LINUX_UNITS_H
3#define _LINUX_UNITS_H
4
aa6159ab 5#include <linux/math.h>
23331e48 6
26471d4a
AS
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
e2c77032
DL
23#define HZ_PER_KHZ 1000UL
24#define KHZ_PER_MHZ 1000UL
25#define HZ_PER_MHZ 1000000UL
26
c9221919
DL
27#define MILLIWATT_PER_WATT 1000UL
28#define MICROWATT_PER_MILLIWATT 1000UL
29#define MICROWATT_PER_WATT 1000000UL
2ee5f8f0 30
23331e48
AM
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 */