Re: Using IO functions across ARM, PPC and Microblaze architectures

From: Michal Simek
Date: Wed Jan 30 2013 - 07:33:37 EST


On 12/08/2012 11:57 AM, Geert Uytterhoeven wrote:
On Fri, Dec 7, 2012 at 10:16 PM, Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> wrote:
Because I need to use IO functions which will behave
on arm as little endian and on powerpc as big endian
and on microblaze depends on endian setting.
I haven't found any IO function which I could use by 3 architectures
without using preprocessor macros or runtime detection

Its a rather weird mix. We can do "always big" and "always little"

1. Using helper function + preprocessor macros
(using static inline function also possible)

Then someone comes along and sticks a daughterboard into the system with
the same device the other way around and there are years

2. Using function pointers

Probably smarter. 8250.c works this way and it has to handle some
extremely bizarre mappings.

b) Runtime initialization - here is the question if there is
any standard function which I could use.

Set the pointers up and pass them as data with your platform device, that
way the function definitions are buried in your platform code where they
depend.

Or embed a struct io_ops * in struct device, to be set up by the bus driver?

Wasn't David Hinds working on something like this in the context of PCMCIA
a few decades ago?


Do you have any link on that?

Thanks,
Michal



--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/