Subject: Re: bus.h style question
To: Curt Sampson <cjs@portal.ca>
From: Jonathan Stone <jonathan@DSG.Stanford.EDU>
List: tech-kern
Date: 08/19/1997 15:52:55
Curt Sampson <cjs@portal.ca> writes:
>On Mon, 18 Aug 1997, Jonathan Stone wrote:
>
>> The bus_space interface should provide methods for accessing such
>> streams efficiently, without requiring any explicit driver
>> byteswapping of `bytestream' data like disk blocks or Ethernet
>> packets. I think the reasons for that are obvious.
>
>The reasons for this are not obvious to me. Given the number of
>different situations that can occur, the driver is still going to
>have to make its own decisions about whether it should swap any
>particular set of bytes or not, since only the driver will know a)
>whether the data is stream data or not, and b) the endianness and
>swapping-capability of the bridges between the device and the CPU,
>and the device itself.
My (overly loud) objection was primarily about being told to use
bus_space_{read,write}_multi_1. I do think the performance
implications of that are obvious, and technically not supportable.
Let's assume there wil be cases where PIO drivers accessing
bytestreams via multibyte methods, and the bus/chipset/CPU combination
does requires that software bytewapping be done.
I'm claiming that drivers will be better off if the bus-space methods
can do the bytewapping internally, (e.g,. while the 2 or 4 byte
quantities are in a register) rather than having to make another pass
through a memory buffer swapping the bytes. Doing the byteswap
outside the bus_space method means an extra pass through the I/O
buffer, and avoiding extra passes through memory a Good Thing, and
increasingly so as CPUs get further away from memory.
This is probably more true on little-endian machines than big-endian.
Little-endian CPUs have to do bytewapping for the IP suite, so they
often have insns to do it; big-endian machines often don't. see Joe
Touch's MD5(?), uh, rant.
I'm sure we could make drivers work without a byteswapping version of
bus_space_{read,write}_multi_N, (n > 1) but we'd get better drivers
for PIO devices if we did have them.