Jeff said:
That is an interesting article, and I only wish I were able to
understand it! However, from what I can see, there may be situations
(eg physical memory address) where 32-bit drivers will not work is more
than 4GB ram installed.
As I am not technically minded, is it possible to explain why, if there
are 4GB or less memory installed in a 64-bit system, 32-bit drivers do
not work in that situation?
A 32 bit driver, can use "bounce buffers" as a design method.
And some platforms support an "IOMMU", such that even the I/O system
has virtual to physical mapping, such that the bus hardware generates
32 bit addresses, and the IOMMU translates them to 64 bit locations
(i.e. high memory).
Those are ways of solving some of those kinds of issues.
http://en.wikipedia.org/wiki/IOMMU
"For example, as of 2010[update] x86 computers can use more than 4 GiB
of memory, enabled by the PAE feature in an x86 processor. Still, an
ordinary 32-bit PCI device simply cannot address the memory above
the 4 GiB boundary, and thus it cannot perform DMA to it. Without an
IOMMU, the operating system would have to implement time-consuming
bounce buffers (FreeBSD/Linux) also known as double buffers[7]
(Windows nomenclature)."
PCI cards come in two types. A card that generates single cycle 32 bit
addresses. But there are also cards that generate double cycle addresses,
and a modern Southbridge may recognize a double cycle address, and
do the right thing (like reach up into high memory with it). Such cards
probably aren't all that common - maybe some PCI RAID cards or something.
There are probably more examples of single cycle capable PCI chips
(like maybe older NIC chips), then the double-cycle capable type.
Paul