[lkml]   [2001]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: Probable endianess problem in TLAN driver
Paulo Afonso Graner Fessel wrote:

> [...]

> He said me that these funtions don't address the endianess question, and
> sent me a patch. He said that this probably wouldn't work, but I've
> decided to give a try anyway. Here is the patch:
> --- tlan.c.old Thu Jun 7 21:24:25 2001
> +++ tlan.c Thu Jun 7 21:37:42 2001
> @@ -172,6 +172,12 @@
> #include <linux/delay.h>
> #include <linux/spinlock.h>
> +#if defined(__powerpc__)
> +#define inw(addr) le32_to_cpu(inw(addr))
> +#define inl(addr) le32_to_cpu(inl(addr))
> +#define outw(val, addr) outw(cpu_to_le32(val), addr)
> +#define outl(val, addr) outl(cpu_to_le32(val), addr)
> +#endif

On ppc the inw, inl, outw, and outl functions already byteswap, so by
adding the extra byteswap you're now passing unswapped data to the chip.
Take a look at include/asm-ppc/io.h and you'll see it uses byte reversed
load and store instructions. Which means that either the chip is running
in a big-endian mode, or that the problem is actually with data
structures placed in host memory.

Often when porting a driver from i386 to ppc all that is required is to
add the cpu_to_le32() macros around data in host memory that the device
accesses, and to remove any #ifdef __powerpc__ code written by people
who don't realise that ppc uses the standard linux pci code.

Adrian Cox

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 12:55    [W:0.287 / U:0.012 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site