blob: e7d74e681b975f3e38d69a242790a24fafa0b69c [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/* FIELD MACROS */
Sudip Mukherjee81dee672015-03-03 16:21:06 +05305#define _LSB(f) (0 ? f)
6#define _MSB(f) (1 ? f)
7#define _COUNT(f) (_MSB(f) - _LSB(f) + 1)
8
9#define RAW_MASK(f) (0xFFFFFFFF >> (32 - _COUNT(f)))
10#define GET_MASK(f) (RAW_MASK(f) << _LSB(f))
Isaac Assegaiafa34e72015-06-02 03:14:21 -070011#define GET_FIELD(d, f) (((d) >> _LSB(f)) & RAW_MASK(f))
12#define TEST_FIELD(d, f, v) (GET_FIELD(d, f) == f ## _ ## v)
13#define SET_FIELD(d, f, v) (((d) & ~GET_MASK(f)) | \
Juston Li78376532015-07-14 21:14:30 -070014 (((f ## _ ## v) & RAW_MASK(f)) << _LSB(f)))
Isaac Assegaiafa34e72015-06-02 03:14:21 -070015#define SET_FIELDV(d, f, v) (((d) & ~GET_MASK(f)) | \
Juston Li78376532015-07-14 21:14:30 -070016 (((v) & RAW_MASK(f)) << _LSB(f)))
Sudip Mukherjee81dee672015-03-03 16:21:06 +053017
Juston Li5ee35ea2015-06-12 03:17:22 -070018/* Internal macros */
Sudip Mukherjee81dee672015-03-03 16:21:06 +053019#define _F_START(f) (0 ? f)
20#define _F_END(f) (1 ? f)
21#define _F_SIZE(f) (1 + _F_END(f) - _F_START(f))
22#define _F_MASK(f) (((1 << _F_SIZE(f)) - 1) << _F_START(f))
23#define _F_NORMALIZE(v, f) (((v) & _F_MASK(f)) >> _F_START(f))
24#define _F_DENORMALIZE(v, f) (((v) << _F_START(f)) & _F_MASK(f))
25
Juston Li5ee35ea2015-06-12 03:17:22 -070026/* Global macros */
Sudip Mukherjee81dee672015-03-03 16:21:06 +053027#define FIELD_GET(x, reg, field) \
28( \
Juston Li78376532015-07-14 21:14:30 -070029 _F_NORMALIZE((x), reg ## _ ## field) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053030)
31
32#define FIELD_SET(x, reg, field, value) \
33( \
Juston Li78376532015-07-14 21:14:30 -070034 (x & ~_F_MASK(reg ## _ ## field)) \
35 | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053036)
37
38#define FIELD_VALUE(x, reg, field, value) \
39( \
Juston Li78376532015-07-14 21:14:30 -070040 (x & ~_F_MASK(reg ## _ ## field)) \
41 | _F_DENORMALIZE(value, reg ## _ ## field) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053042)
43
44#define FIELD_CLEAR(reg, field) \
45( \
Mike Rapoport27254ec2015-09-22 10:52:16 +030046 ~_F_MASK(reg ## _ ## field) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053047)
48
Juston Li5ee35ea2015-06-12 03:17:22 -070049/* Field Macros */
Sudip Mukherjee81dee672015-03-03 16:21:06 +053050#define FIELD_START(field) (0 ? field)
51#define FIELD_END(field) (1 ? field)
52#define FIELD_SIZE(field) (1 + FIELD_END(field) - FIELD_START(field))
53#define FIELD_MASK(field) (((1 << (FIELD_SIZE(field)-1)) | ((1 << (FIELD_SIZE(field)-1)) - 1)) << FIELD_START(field))
54#define FIELD_NORMALIZE(reg, field) (((reg) & FIELD_MASK(field)) >> FIELD_START(field))
55#define FIELD_DENORMALIZE(field, value) (((value) << FIELD_START(field)) & FIELD_MASK(field))
56
57#define FIELD_INIT(reg, field, value) FIELD_DENORMALIZE(reg ## _ ## field, \
Juston Li78376532015-07-14 21:14:30 -070058 reg ## _ ## field ## _ ## value)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053059#define FIELD_INIT_VAL(reg, field, value) \
Juston Li78376532015-07-14 21:14:30 -070060 (FIELD_DENORMALIZE(reg ## _ ## field, value))
Sudip Mukherjee81dee672015-03-03 16:21:06 +053061#define FIELD_VAL_SET(x, r, f, v) x = x & ~FIELD_MASK(r ## _ ## f) \
Juston Li78376532015-07-14 21:14:30 -070062 | FIELD_DENORMALIZE(r ## _ ## f, r ## _ ## f ## _ ## v)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053063
64#define RGB(r, g, b) \
65( \
Juston Li78376532015-07-14 21:14:30 -070066 (unsigned long) (((r) << 16) | ((g) << 8) | (b)) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053067)
68
69#define RGB16(r, g, b) \
70( \
Juston Li78376532015-07-14 21:14:30 -070071 (unsigned short) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | (((b) & 0xF8) >> 3)) \
Sudip Mukherjee81dee672015-03-03 16:21:06 +053072)
73
Isaac Assegaiafa34e72015-06-02 03:14:21 -070074static inline unsigned int absDiff(unsigned int a, unsigned int b)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053075{
Juston Li0d5e63c2015-07-14 21:14:41 -070076 if (a < b)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053077 return b-a;
78 else
79 return a-b;
80}
81
82/* n / d + 1 / 2 = (2n + d) / 2d */
Isaac Assegaiafa34e72015-06-02 03:14:21 -070083#define roundedDiv(num, denom) ((2 * (num) + (denom)) / (2 * (denom)))
Sudip Mukherjee81dee672015-03-03 16:21:06 +053084#define MB(x) ((x)<<20)
85#define KB(x) ((x)<<10)
86#define MHz(x) ((x) * 1000000)
87
88
89
90
91#endif