> Existuje sice i rozíení PCI pro 64bitové adresování,
> nicmén to je jednak pomalejí
Pokud myslite DAC (dual address cycle) tak to skutecne
pomalejsi je (o jeden adresni cyklus, coz je dokonale
zanedbatelne). 64bitova PCI samozrejme umi 64bitove
adresy nativne.
> Na PCI neexistuje ádný DMA adi podobn, jako teba na
> ISA; na PCI si kadé zaízení dlá adresaci pamti samo.
> Tato technika se nazývá Bus-master.
Ne. Bus mastering znamena ze zarizeni muze aktivne
prevzit kontrolu nad sbernici (na nekterych
sbernicich dokonce preemptovat probihajici
transakci). Tohle je detail.
> FreeBSD 5 má tyto nedostatky odstranny ovladae
> zaízení mají sjednocený pístup k DMA pomocí funkcí
> bus_dmamap_load a bus_dmamap_unload. Synchronizaci
> s cachemi procesoru musí speciáln provádt pomocí
> funkce bus_dmamap_sync.
Doplnil bych ze rozhrani bus_dma(9) bylo na FreeBSD5
preneseno z NetBSD, kde se objevilo ve verzi 1.3.
Vas popis je dosti neuplny, zajemcum doporucuji
manualove stranky na {free,net}bsd.org
> Nutno upozornit na celkem závaný problém, který
> tento pístup má zatímco na Linuxu jsou struktury
> jádra alokovány vdy v ásti pamti pístupné pro DMA,
> na FreeBSD tomu tak nemusí být me tedy docházet k
> výraznému zpomalování zpsobenému kopírováním dat
> do bounce-buffer napíklad pi prací se síovými
> packety, pokud struktura popisující packet není
> náhodou alokována v dolních 4G. Na architekturách
> s IOMMU tento problém nenastane.
Neznam implementaci ve FreeBSD, na NetBSD a v
principu ani na FreeBSD to ale neni pravda. Veskera
pamet u ktere se ocekava DMA prenos (jako sitove
pakety) by mela byt alokovana pomoci bus_dmamem_alloc. Tato funkce provede alokaci v
souladu s podmikami diktovanymi typem sbernice
(tj. dma tagem).