diff options
| -rw-r--r-- | include/asm-arm/io.h | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/include/asm-arm/io.h b/include/asm-arm/io.h index fec3a7eac..0a4b5be71 100644 --- a/include/asm-arm/io.h +++ b/include/asm-arm/io.h @@ -113,6 +113,61 @@ extern void __raw_readsl(unsigned int addr, void *data, int longlen);  #define __raw_base_readl(base,off)	__arch_base_getl(base,off)  /* + * Clear and set bits in one shot. These macros can be used to clear and + * set multiple bits in a register using a single call. 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. + */ + +#define out_arch(type,endian,a,v)	__raw_write##type(cpu_to_##endian(v),a) +#define in_arch(type,endian,a)		endian##_to_cpu(__raw_read##type(a)) + +#define out_le32(a,v)	out_arch(l,le32,a,v) +#define out_le16(a,v)	out_arch(w,le16,a,v) + +#define in_le32(a)	in_arch(l,le32,a) +#define in_le16(a)	in_arch(w,le16,a) + +#define out_be32(a,v)	out_arch(l,be32,a,v) +#define out_be16(a,v)	out_arch(w,be16,a,v) + +#define in_be32(a)	in_arch(l,be32,a) +#define in_be16(a)	in_arch(w,be16,a) + +#define out_8(a,v)	__raw_writeb(v,a) +#define in_8(a)		__raw_readb(a) + +#define clrbits(type, addr, clear) \ +	out_##type((addr), in_##type(addr) & ~(clear)) + +#define setbits(type, addr, set) \ +	out_##type((addr), in_##type(addr) | (set)) + +#define clrsetbits(type, addr, clear, set) \ +	out_##type((addr), (in_##type(addr) & ~(clear)) | (set)) + +#define clrbits_be32(addr, clear) clrbits(be32, addr, clear) +#define setbits_be32(addr, set) setbits(be32, addr, set) +#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set) + +#define clrbits_le32(addr, clear) clrbits(le32, addr, clear) +#define setbits_le32(addr, set) setbits(le32, addr, set) +#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set) + +#define clrbits_be16(addr, clear) clrbits(be16, addr, clear) +#define setbits_be16(addr, set) setbits(be16, addr, set) +#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set) + +#define clrbits_le16(addr, clear) clrbits(le16, addr, clear) +#define setbits_le16(addr, set) setbits(le16, addr, set) +#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set) + +#define clrbits_8(addr, clear) clrbits(8, addr, clear) +#define setbits_8(addr, set) setbits(8, addr, set) +#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set) + +/*   * Now, pick up the machine-defined IO definitions   */  #if 0	/* XXX###XXX */  |