Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 1 | #ifndef LYNX_HELP_H__ |
| 2 | #define LYNX_HELP_H__ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 3 | |
Juston Li | 5ee35ea | 2015-06-12 03:17:22 -0700 | [diff] [blame] | 4 | /* Internal macros */ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 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 | |
Juston Li | 5ee35ea | 2015-06-12 03:17:22 -0700 | [diff] [blame] | 12 | /* Global macros */ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 13 | #define FIELD_GET(x, reg, field) \ |
| 14 | ( \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 15 | _F_NORMALIZE((x), reg ## _ ## field) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 16 | ) |
| 17 | |
| 18 | #define FIELD_SET(x, reg, field, value) \ |
| 19 | ( \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 20 | (x & ~_F_MASK(reg ## _ ## field)) \ |
| 21 | | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 22 | ) |
| 23 | |
| 24 | #define FIELD_VALUE(x, reg, field, value) \ |
| 25 | ( \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 26 | (x & ~_F_MASK(reg ## _ ## field)) \ |
| 27 | | _F_DENORMALIZE(value, reg ## _ ## field) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 28 | ) |
| 29 | |
| 30 | #define FIELD_CLEAR(reg, field) \ |
| 31 | ( \ |
Mike Rapoport | 27254ec | 2015-09-22 10:52:16 +0300 | [diff] [blame] | 32 | ~_F_MASK(reg ## _ ## field) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 33 | ) |
| 34 | |
Juston Li | 5ee35ea | 2015-06-12 03:17:22 -0700 | [diff] [blame] | 35 | /* Field Macros */ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 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)) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 40 | |
Isaac Assegai | afa34e7 | 2015-06-02 03:14:21 -0700 | [diff] [blame] | 41 | static inline unsigned int absDiff(unsigned int a, unsigned int b) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 42 | { |
Juston Li | 0d5e63c | 2015-07-14 21:14:41 -0700 | [diff] [blame] | 43 | if (a < b) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 44 | return b-a; |
| 45 | else |
| 46 | return a-b; |
| 47 | } |
| 48 | |
| 49 | /* n / d + 1 / 2 = (2n + d) / 2d */ |
Isaac Assegai | afa34e7 | 2015-06-02 03:14:21 -0700 | [diff] [blame] | 50 | #define roundedDiv(num, denom) ((2 * (num) + (denom)) / (2 * (denom))) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 51 | #define MHz(x) ((x) * 1000000) |
| 52 | |
| 53 | |
| 54 | |
| 55 | |
| 56 | #endif |