[PATCH] add big endian version of ld_/st_ IO access macros and convert main 8xx code to use it
Benjamin Herrenschmidt
benh at kernel.crashing.org
Thu Sep 8 11:14:57 EST 2005
> e is shared by all architectures. Doing something like
>
> /*
> * 8, 16 and 32 bit, big and little endian I/O operations, with barrier.
> */
> extern inline int in_8(volatile unsigned char __iomem *addr)
> {
> int ret;
>
> __asm__ __volatile__(
> "lbz%U1%X1 %0,%1;\n"
> #ifndef CONFIG_8xx
> "twi 0,%0,0;\n"
> "isync" : "=r" (ret) : "m" (*addr));
> #else
> : "=r" (ret) : "m" (*addr));
> #endif
> return ret;
> }
>
> Seems somewhat ugly?
Yes. You can work around that by macro-generating the functions with
different rules for different CPUs, or having the twi/isync be a
separate asm block that is itself in a macro or inline that gets defined
differently on 8xx
Ben.
More information about the Linuxppc-embedded
mailing list