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 | /* FIELD MACROS */ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 5 | #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 Assegai | afa34e7 | 2015-06-02 03:14:21 -0700 | [diff] [blame] | 11 | #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 Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 14 | (((f ## _ ## v) & RAW_MASK(f)) << _LSB(f))) |
Isaac Assegai | afa34e7 | 2015-06-02 03:14:21 -0700 | [diff] [blame] | 15 | #define SET_FIELDV(d, f, v) (((d) & ~GET_MASK(f)) | \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 16 | (((v) & RAW_MASK(f)) << _LSB(f))) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 17 | |
Juston Li | 5ee35ea | 2015-06-12 03:17:22 -0700 | [diff] [blame] | 18 | /* Internal macros */ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 19 | #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 Li | 5ee35ea | 2015-06-12 03:17:22 -0700 | [diff] [blame] | 26 | /* Global macros */ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 27 | #define FIELD_GET(x, reg, field) \ |
| 28 | ( \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 29 | _F_NORMALIZE((x), reg ## _ ## field) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 30 | ) |
| 31 | |
| 32 | #define FIELD_SET(x, reg, field, value) \ |
| 33 | ( \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 34 | (x & ~_F_MASK(reg ## _ ## field)) \ |
| 35 | | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 36 | ) |
| 37 | |
| 38 | #define FIELD_VALUE(x, reg, field, value) \ |
| 39 | ( \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 40 | (x & ~_F_MASK(reg ## _ ## field)) \ |
| 41 | | _F_DENORMALIZE(value, reg ## _ ## field) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 42 | ) |
| 43 | |
| 44 | #define FIELD_CLEAR(reg, field) \ |
| 45 | ( \ |
Mike Rapoport | 27254ec | 2015-09-22 10:52:16 +0300 | [diff] [blame^] | 46 | ~_F_MASK(reg ## _ ## field) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 47 | ) |
| 48 | |
Juston Li | 5ee35ea | 2015-06-12 03:17:22 -0700 | [diff] [blame] | 49 | /* Field Macros */ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 50 | #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 Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 58 | reg ## _ ## field ## _ ## value) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 59 | #define FIELD_INIT_VAL(reg, field, value) \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 60 | (FIELD_DENORMALIZE(reg ## _ ## field, value)) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 61 | #define FIELD_VAL_SET(x, r, f, v) x = x & ~FIELD_MASK(r ## _ ## f) \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 62 | | FIELD_DENORMALIZE(r ## _ ## f, r ## _ ## f ## _ ## v) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 63 | |
| 64 | #define RGB(r, g, b) \ |
| 65 | ( \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 66 | (unsigned long) (((r) << 16) | ((g) << 8) | (b)) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 67 | ) |
| 68 | |
| 69 | #define RGB16(r, g, b) \ |
| 70 | ( \ |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 71 | (unsigned short) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | (((b) & 0xF8) >> 3)) \ |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 72 | ) |
| 73 | |
Isaac Assegai | afa34e7 | 2015-06-02 03:14:21 -0700 | [diff] [blame] | 74 | static inline unsigned int absDiff(unsigned int a, unsigned int b) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 75 | { |
Juston Li | 0d5e63c | 2015-07-14 21:14:41 -0700 | [diff] [blame] | 76 | if (a < b) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 77 | return b-a; |
| 78 | else |
| 79 | return a-b; |
| 80 | } |
| 81 | |
| 82 | /* n / d + 1 / 2 = (2n + d) / 2d */ |
Isaac Assegai | afa34e7 | 2015-06-02 03:14:21 -0700 | [diff] [blame] | 83 | #define roundedDiv(num, denom) ((2 * (num) + (denom)) / (2 * (denom))) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 84 | #define MB(x) ((x)<<20) |
| 85 | #define KB(x) ((x)<<10) |
| 86 | #define MHz(x) ((x) * 1000000) |
| 87 | |
| 88 | |
| 89 | |
| 90 | |
| 91 | #endif |