|
@@ -27,9 +27,11 @@
|
|
|
#define io_v2p(x) ((((x) & 0x0f000000) << 4) \
|
|
|
+ ((x) & 0x00ffffff))
|
|
|
|
|
|
+#define __REGSHIFT(mask) ((mask) & (-(mask)))
|
|
|
+
|
|
|
#define __REGBIT(bit) ((u32)1 << (bit))
|
|
|
#define __REGBITS(hbit, lbit) ((((u32)1 << ((hbit) - (lbit) + 1)) - 1) << (lbit))
|
|
|
-#define __REGVAL(mask, value) (((value) * ((mask) & (-(mask))) & (mask)))
|
|
|
+#define __REGVAL(mask, value) (((value) * __REGSHIFT(mask)) & (mask))
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
|
@@ -39,21 +41,36 @@
|
|
|
# define __REGB(x) (*((volatile u8 *)io_p2v((x))))
|
|
|
# define __REGB2(x) (*((volatile u8 *)io_p2v((x)) + (y)))
|
|
|
|
|
|
+# define __REGSET(var, field, value) \
|
|
|
+ ((var) = (((var) & ~((field) & ~(value))) | (value)))
|
|
|
+
|
|
|
# define REGSET(var, reg, field, value) \
|
|
|
- ((var) = (((var) \
|
|
|
- & ~(reg ## _ ## field & \
|
|
|
- ~ reg ## _ ## field ## _ ## value)) \
|
|
|
- | (reg ## _ ## field ## _ ## value)))
|
|
|
+ __REGSET(var, reg ## _ ## field, reg ## _ ## field ## _ ## value)
|
|
|
+
|
|
|
+# define REGSET_IDX(var, reg, field, idx, value) \
|
|
|
+ __REGSET(var, reg ## _ ## field((idx)), reg ## _ ## field ## _ ## value((idx)))
|
|
|
|
|
|
# define REGSETIM(var, reg, field, value) \
|
|
|
- ((var) = (((var) \
|
|
|
- & ~(reg ## _ ## field & \
|
|
|
- ~(__REGVAL(reg ## _ ## field, value)))) \
|
|
|
- | (__REGVAL(reg ## _ ## field, value))))
|
|
|
+ __REGSET(var, reg ## _ ## field, __REGVAL(reg ## _ ## field, (value)))
|
|
|
+
|
|
|
+# define REGSETIM_IDX(var, reg, field, idx, value) \
|
|
|
+ __REGSET(var, reg ## _ ## field((idx)), __REGVAL(reg ## _ ## field((idx)), (value)))
|
|
|
+
|
|
|
+# define __REGGET(var, field) \
|
|
|
+ (((var) & (field)))
|
|
|
|
|
|
# define REGGET(var, reg, field) \
|
|
|
- ((var & (reg ## _ ## field)) / \
|
|
|
- ((reg ## _ ## field) & (-(reg ## _ ## field))))
|
|
|
+ __REGGET(var, reg ## _ ## field)
|
|
|
+
|
|
|
+# define REGGET_IDX(var, reg, field, idx) \
|
|
|
+ __REGGET(var, reg ## _ ## field((idx)))
|
|
|
+
|
|
|
+# define REGGETIM(var, reg, field) \
|
|
|
+ __REGGET(var, reg ## _ ## field) / __REGSHIFT(reg ## _ ## field)
|
|
|
+
|
|
|
+# define REGGETIM_IDX(var, reg, field, idx) \
|
|
|
+ __REGGET(var, reg ## _ ## field((idx))) / \
|
|
|
+ __REGSHIFT(reg ## _ ## field((idx)))
|
|
|
|
|
|
#else
|
|
|
|