Thread (16 messages) flat view 16 messages, 6 authors, 2006-09-20

Re: [PATCH] Remove powerpc specific parts of 3c509 driver

From: Segher Boessenkool <hidden>
Date: 2006-09-20 00:21:56
Also in: linuxppc-dev

Nah. We have the basic rule that readl/writel are little endian.  
PowerPC
additionally provides arch specific low level in_{be,le}32 type
accessors with explicit endianness. Or you can also use
cpu_to_le32/le32_to_cpu kind of macros to convert between native and
explicit endianness.
Sure, PCI busses are little-endian.  But is readX()/writeX() for PCI
only?  I sure hope not.

It would make a lot more sense if readX()/writeX() used the endianness
of the bus they are performed on.  PowerPC byteswaps are cheap -- for
16- and 32-bit accesses.  They're quite bad for 64-bit though; it would
be a pity to end up doing two of those for a 64-bit big-endian I/O  
access
(one on the access itself, one to convert the data back to CPU order).

This would happily solve the problem of the various variations of
byte-swapping bus bridges, too ("natural" swap, 32-bit swap, 64-bit  
swap,
perhaps others that I thankfully have never seen or cannot remember).

Now you can say, use readl_be() or something similar, but that's a)  
ugly,
b) error-prone, c) exponential interface explosion, d) ugly.


Segher
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help