Subject: Re: PCI nics on big-endian CPUs [was Re: vge not working on bigendian,
To: None <jonathan@Pescadero.dsg.stanford.edu>
From: Izumi Tsutsui <email@example.com>
Date: 12/01/2005 08:22:00
In article <E1EhYYw-0003Jqfirstname.lastname@example.org>
> Uh... if (dim) memory serves, the main difference between my port of
> the FreeBSD-4 bge(4) and the one (Christos?) committed is that the
> committed version worked on Sparcs. Sparcs are big-endian.
> Does the cited change to if_bgereg break bge on sparc, or make it
> work, or something completely different?
I was told that the problem was introduced in if_bgereg.h rev 1.7.
It has an unnecessary macro for BE machines, which the FreeBSD
driver didn't have. The device always accesses DMA descriptors
in uint32_t and swaps byteorder by itself, so no need to swap values
if they are stored in uint32_t by the driver.
(i.e. we should use uint32_t and shift ops for all 16bit DMA descs
so that all #ifdef BYTE_ORDER statements can be removed.)