Dave> Ok, thanks for explaining!
Dave> On Tue, Sep 24, 2002 at 11:21:45AM -0700, David Mosberger wrote:
>> >>>>> On Tue, 24 Sep 2002 10:28:43 -0700, Dave Olien <dmo@osdl.org> said:
>>
>> The idea is to do something along these lines:
>>
>> o Use PCA DMA interface for managing all DMA buffers.
>>
>> o If sizeof(dma_addr_t) > 4, turn on DAC mode and call
>> pci_set_dma_mask(dev, MAX_ADDR), where MAX_ADDR is the maximum
>> address that can be reached by the controller (i.e.,
>> 0xffffffffffffffff for a truly 64-bit-capable PCI controller).
>>
>> This way, everything should work out correctly and with good
>> performance on all imaginable platforms (ia64 with and without
>> hardware I/O TLB, plain x86, x86 with >4GB RAM, SPARC64 with 32-bit
>> dma_addr_t, etc.).
Come to think of it, the following refinement may be preferable:
o Use PCA DMA interface for managing all DMA buffers.
o limit = min(~(dma_addr_t) 0, MAX_ADDR), where MAX_ADDR is the maximum
address that can be reached by the controller (i.e.,
0xffffffffffffffff for a truly 64-bit-capable PCI controller).
o Call pci_set_dma_mask(dev, limit).
o If limit > 0xffffffff, turn on DAC mode.
This "algorithm" should be correct for all PCI controllers.
--david
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/