blob: c070cf25a7d670b26c2e36cb4cf8e9f164930ea9 [file] [log] [blame]
Sudip Mukherjee81dee672015-03-03 16:21:06 +05301#ifndef LYNX_HELP_H__
2#define LYNX_HELP_H__
Sudip Mukherjee81dee672015-03-03 16:21:06 +05303
Juston Li5ee35ea2015-06-12 03:17:22 -07004/* Internal macros */
Sudip Mukherjee81dee672015-03-03 16:21:06 +05305#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
Juston Li5ee35ea2015-06-12 03:17:22 -070012/* Global macros */
Sudip Mukherjee81dee672015-03-03 16:21:06 +053013#define FIELD_GET(x, reg, field) \
14( \
Juston Li78376532015-07-14 21:14:30 -070015 _F_NORMALIZE((x), reg ## _ ## field) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053016)
17
18#define FIELD_SET(x, reg, field, value) \
19( \
Juston Li78376532015-07-14 21:14:30 -070020 (x & ~_F_MASK(reg ## _ ## field)) \
21 | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053022)
23
24#define FIELD_VALUE(x, reg, field, value) \
25( \
Juston Li78376532015-07-14 21:14:30 -070026 (x & ~_F_MASK(reg ## _ ## field)) \
27 | _F_DENORMALIZE(value, reg ## _ ## field) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053028)
29
30#define FIELD_CLEAR(reg, field) \
31( \
Mike Rapoport27254ec2015-09-22 10:52:16 +030032 ~_F_MASK(reg ## _ ## field) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053033)
34
Juston Li5ee35ea2015-06-12 03:17:22 -070035/* Field Macros */
Sudip Mukherjee81dee672015-03-03 16:21:06 +053036#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))
Sudip Mukherjee81dee672015-03-03 16:21:06 +053040
Isaac Assegaiafa34e72015-06-02 03:14:21 -070041static inline unsigned int absDiff(unsigned int a, unsigned int b)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053042{
Juston Li0d5e63c2015-07-14 21:14:41 -070043 if (a < b)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053044 return b-a;
45 else
46 return a-b;
47}
48
49/* n / d + 1 / 2 = (2n + d) / 2d */
Isaac Assegaiafa34e72015-06-02 03:14:21 -070050#define roundedDiv(num, denom) ((2 * (num) + (denom)) / (2 * (denom)))
Sudip Mukherjee81dee672015-03-03 16:21:06 +053051#define MHz(x) ((x) * 1000000)
52
53
54
55
56#endif