Я использую dma_alloc_coherent()
в своем собственном драйвере для получения виртуальных и шинных адресов.
res->KernelAddress = (u64)dma_alloc_coherent( &DevExt->pdev->dev, size, &res->BusAddress, GFP_ATOMIC );
При печати (% llx) адреса шины (res-> BusAddress) я получил 80009000 в качестве одного.
Я проверил журнал / proc / iomem, чтобы проверить диапазон, но есть несколько записей.
Журнал / proc / iomem показан ниже:
10000000-10000fff : /pcie-controller@10003000/pci@1,0
10003000-100037ff : pcie-pads
10003800-10003fff : pcie-afi
10004000-10004fff : /pcie-controller@10003000/pci@3,0
40000000-4fffffff : pcie-config-space
50100000-57ffffff : pcie-non-prefetchable
50800000-52ffffff : PCI Bus 0000:01
50800000-5087ffff : 0000:01:00.0
51000000-51ffffff : 0000:01:00.0
52000000-52ffffff : 0000:01:00.0
58000000-7fffffff : pcie-prefetchable
58000000-58ffffff : PCI Bus 0000:01
58000000-58ffffff : 0000:01:00.0
80000000-d82fffff : System RAM
80080000-810fafff : Kernel code
8123f000-814b3fff : Kernel data
d9300000-efffffff : System RAM
f0200000-275ffffff : System RAM
276600000-2767fffff : System RAM
- Является ли 80009000 действительным? К какому разделу он относится?
- Необходимо ли использовать
dma_mmap_coherent()
после dma_alloc_coherent()
для правильного отображения?
Заранее спасибо !!