Re: Yosemite/440EP why are readl()/ioread32() setup to read little-endian?
From: David Hawkins <hidden>
Date: 2006-01-25 18:29:16
Hi Stefan,
quoted
readl() and ioread32() read the registers in little-endian format!Correct. That's how it is implemented on all platforms. Think for example of an pci device driver. Using these IO functions, the driver will become platform independent, running without modifications on little- and big-endian machines.
Ok, I figured that was probably the case. Thanks for the confirmation.
quoted
Should I just be using pointers for remapped processor registers, and only use readl(), ioread32(), etc, on external memory?That's how I do it. Only use readl() and friends for pci spaces (or other little endian memory mapped areas).
I took a look at the Yosemite network and USB drivers, it looks like the authors of those drivers chose to use in_be32() and out_be32(). Personally I like the concept of using pointers, or more usefully pointers to structure overlays for device control. However, the impression I have is that this is inherently more non-portable than using the readl()/writel(), ioread32()/iowrite32(), and now I guess I can add in_be32()/out_be32() to that list. But if you use pointers, thats good enough for me! Cheers Dave