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

From: [email-masked] (Linas Vepstas)
Date: Tue, 19 Sep 2006 13:42:43 -0500

On Tue, Sep 19, 2006 at 02:54:33PM +1000, Stephen Rothwell wrote:
> 
> On powerpc and ppc, insl_ns and insl are identical as are outsl_ns and
> outsl, so remove the conditional use of insl_ns and outsl_ns.

The rest of this patch might indeed be correct, but the above comment 
bothers me. The "ns" versions of routines are supposed to be
non-byte-swapped versions of the insl/outsl routines (which would
byte-swap on big-endian archs such as powerpc.)

> diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c
> index cbdae54..add6381 100644
> --- a/drivers/net/3c509.c
> +++ b/drivers/net/3c509.c
> @@ -879,11 +879,7 @@ #endif
>  	outw(skb->len, ioaddr + TX_FIFO);
>  	outw(0x00, ioaddr + TX_FIFO);
>  	/* ... and the packet rounded to a doubleword. */
> -#ifdef  __powerpc__
> -	outsl_ns(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
> -#else
>  	outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
> -#endif

Dohh, a hack like this to work around some possbile byte-swapping
bug should never have been done in the first place :-(

However, I presume someone added the  __powerpc__ define here
because they picked up a 3c509 at a garage sale, stuck it in 
a powerpc, found out it didn't work due to a byte-swapping bug,
and then patched it as above. I'm disturbed that somehow 
outsl_ns() became identical to outsl() at some point, presumably
breaking this patch.

--linas