aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-powerpc
diff options
context:
space:
mode:
authorTimur Tabi <timur@freescale.com>2007-08-22 21:07:28 -0400
committerKumar Gala <galak@kernel.crashing.org>2007-09-14 09:53:56 -0400
commitdc967d7f5e5d2c9d01c8ea172a1e231908dba9de (patch)
treee085e0a0741cec32556bcf011b33d0c1c63300a2 /include/asm-powerpc
parent364f8ffc182ac5431b156ca1915dd81ddd4a592b (diff)
[POWERPC] add clrsetbits macros
This patch adds the clrsetbits_xxx() macros, which are used to set and clear multiple bits in a single read-modify-write operation. Specify the bits to clear in the 'clear' parameter and the bits to set in the 'set' parameter. These macros can also be used to set a multiple-bit bit pattern using a mask, by specifying the mask in the 'clear' parameter and the new bit pattern in the 'set' parameter. There are big-endian and little-endian versions for 8, 16, 32, and 64 bits. Signed-off-by: Timur Tabi <timur@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'include/asm-powerpc')
-rw-r--r--include/asm-powerpc/io.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h
index 4c0b55087dc7..6805efb2cb6d 100644
--- a/include/asm-powerpc/io.h
+++ b/include/asm-powerpc/io.h
@@ -737,6 +737,29 @@ static inline void * bus_to_virt(unsigned long address)
737#define setbits8(_addr, _v) out_8((_addr), in_8(_addr) | (_v)) 737#define setbits8(_addr, _v) out_8((_addr), in_8(_addr) | (_v))
738#define clrbits8(_addr, _v) out_8((_addr), in_8(_addr) & ~(_v)) 738#define clrbits8(_addr, _v) out_8((_addr), in_8(_addr) & ~(_v))
739 739
740/* Clear and set bits in one shot. These macros can be used to clear and
741 * set multiple bits in a register using a single read-modify-write. These
742 * macros can also be used to set a multiple-bit bit pattern using a mask,
743 * by specifying the mask in the 'clear' parameter and the new bit pattern
744 * in the 'set' parameter.
745 */
746
747#define clrsetbits(type, addr, clear, set) \
748 out_##type((addr), (in_##type(addr) & ~(clear)) | (set))
749
750#ifdef __powerpc64__
751#define clrsetbits_be64(addr, clear, set) clrsetbits(be64, addr, clear, set)
752#define clrsetbits_le64(addr, clear, set) clrsetbits(le64, addr, clear, set)
753#endif
754
755#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set)
756#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
757
758#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
759#define clrsetbits_le16(addr, clear, set) clrsetbits(le32, addr, clear, set)
760
761#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
762
740#endif /* __KERNEL__ */ 763#endif /* __KERNEL__ */
741 764
742#endif /* _ASM_POWERPC_IO_H */ 765#endif /* _ASM_POWERPC_IO_H */