These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / sm750fb / sm750_help.h
1 #ifndef LYNX_HELP_H__
2 #define LYNX_HELP_H__
3
4 /* Internal macros */
5 #define _F_START(f)             (0 ? f)
6 #define _F_END(f)               (1 ? f)
7 #define _F_SIZE(f)              (1 + _F_END(f) - _F_START(f))
8 #define _F_MASK(f)              (((1 << _F_SIZE(f)) - 1) << _F_START(f))
9 #define _F_NORMALIZE(v, f)      (((v) & _F_MASK(f)) >> _F_START(f))
10 #define _F_DENORMALIZE(v, f)    (((v) << _F_START(f)) & _F_MASK(f))
11
12 /* Global macros */
13 #define FIELD_GET(x, reg, field) \
14 ( \
15         _F_NORMALIZE((x), reg ## _ ## field) \
16 )
17
18 #define FIELD_SET(x, reg, field, value) \
19 ( \
20         (x & ~_F_MASK(reg ## _ ## field)) \
21         | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \
22 )
23
24 #define FIELD_VALUE(x, reg, field, value) \
25 ( \
26         (x & ~_F_MASK(reg ## _ ## field)) \
27         | _F_DENORMALIZE(value, reg ## _ ## field) \
28 )
29
30 #define FIELD_CLEAR(reg, field) \
31 ( \
32         ~_F_MASK(reg ## _ ## field) \
33 )
34
35 /* Field Macros */
36 #define FIELD_START(field)              (0 ? field)
37 #define FIELD_END(field)                (1 ? field)
38 #define FIELD_SIZE(field)               (1 + FIELD_END(field) - FIELD_START(field))
39 #define FIELD_MASK(field)               (((1 << (FIELD_SIZE(field)-1)) | ((1 << (FIELD_SIZE(field)-1)) - 1)) << FIELD_START(field))
40
41 static inline unsigned int absDiff(unsigned int a, unsigned int b)
42 {
43         if (a < b)
44                 return b-a;
45         else
46                 return a-b;
47 }
48
49 /* n / d + 1 / 2 = (2n + d) / 2d */
50 #define roundedDiv(num, denom)  ((2 * (num) + (denom)) / (2 * (denom)))
51 #define MHz(x) ((x) * 1000000)
52
53
54
55
56 #endif