diff options
Diffstat (limited to 'include/asm-powerpc/dcr-native.h')
| -rw-r--r-- | include/asm-powerpc/dcr-native.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/include/asm-powerpc/dcr-native.h b/include/asm-powerpc/dcr-native.h index be6c879e8760..f8398ce80372 100644 --- a/include/asm-powerpc/dcr-native.h +++ b/include/asm-powerpc/dcr-native.h | |||
| @@ -82,6 +82,19 @@ static inline void __mtdcri(int base_addr, int base_data, int reg, | |||
| 82 | spin_unlock_irqrestore(&dcr_ind_lock, flags); | 82 | spin_unlock_irqrestore(&dcr_ind_lock, flags); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | static inline void __dcri_clrset(int base_addr, int base_data, int reg, | ||
| 86 | unsigned clr, unsigned set) | ||
| 87 | { | ||
| 88 | unsigned long flags; | ||
| 89 | unsigned int val; | ||
| 90 | |||
| 91 | spin_lock_irqsave(&dcr_ind_lock, flags); | ||
| 92 | __mtdcr(base_addr, reg); | ||
| 93 | val = (__mfdcr(base_data) & ~clr) | set; | ||
| 94 | __mtdcr(base_data, val); | ||
| 95 | spin_unlock_irqrestore(&dcr_ind_lock, flags); | ||
| 96 | } | ||
| 97 | |||
| 85 | #define mfdcri(base, reg) __mfdcri(DCRN_ ## base ## _CONFIG_ADDR, \ | 98 | #define mfdcri(base, reg) __mfdcri(DCRN_ ## base ## _CONFIG_ADDR, \ |
| 86 | DCRN_ ## base ## _CONFIG_DATA, \ | 99 | DCRN_ ## base ## _CONFIG_DATA, \ |
| 87 | reg) | 100 | reg) |
| @@ -90,6 +103,10 @@ static inline void __mtdcri(int base_addr, int base_data, int reg, | |||
| 90 | DCRN_ ## base ## _CONFIG_DATA, \ | 103 | DCRN_ ## base ## _CONFIG_DATA, \ |
| 91 | reg, data) | 104 | reg, data) |
| 92 | 105 | ||
| 106 | #define dcri_clrset(base, reg, clr, set) __dcri_clrset(DCRN_ ## base ## _CONFIG_ADDR, \ | ||
| 107 | DCRN_ ## base ## _CONFIG_DATA, \ | ||
| 108 | reg, clr, set) | ||
| 109 | |||
| 93 | #endif /* __ASSEMBLY__ */ | 110 | #endif /* __ASSEMBLY__ */ |
| 94 | #endif /* __KERNEL__ */ | 111 | #endif /* __KERNEL__ */ |
| 95 | #endif /* _ASM_POWERPC_DCR_NATIVE_H */ | 112 | #endif /* _ASM_POWERPC_DCR_NATIVE_H */ |
