Thread (17 messages) 17 messages, 4 authors, 2006-01-27

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help