I found belows code in linux kerel code at http://lxr.free-electrons.com/source/arch/arm/include/asm/io.h?v=3.1;a=arm
#define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a))
I am unable to understand it. How does it work. I know it used to read some bytes from mapped device memory but can not understand how does it work?