引用: 引用 1 楼 paul_chao 的回复:
1. DMA, 就是不透过 CPU 的 Core 做存取, 故其与 cache 是无关的, 但是在程式准备资料填入 dma 的 buffer 或是从 dma buffer 搬出时, 就与 cache 有关了.
2. LZ 可将得到的 physical address 再透过 VirtualAlloc/VirtualCopy 或是 MmMapIoSpace 等 API 即可获得 cached virtual address.
Paul, Chao @ Techware
引用: 引用 1 楼 paul_chao 的回复:
1. DMA, 就是不透过 CPU 的 Core 做存取, 故其与 cache 是无关的, 但是在程式准备资料填入 dma 的 buffer 或是从 dma buffer 搬出时, 就与 cache 有关了.
2. LZ 可将得到的 physical address 再透过 VirtualAlloc/VirtualCopy 或是 MmMapIoSpace 等 API 即可获得 cached virtual address.
Paul, Chao @ Techware
引用: 引用 1 楼 paul_chao 的回复:
1. DMA, 就是不透过 CPU 的 Core 做存取, 故其与 cache 是无关的, 但是在程式准备资料填入 dma 的 buffer 或是从 dma buffer 搬出时, 就与 cache 有关了.
2. LZ 可将得到的 physical address 再透过 VirtualAlloc/VirtualCopy 或是 MmMapIoSpace 等 API 即可获得 cached virtual address.
Paul, Chao @ Techware
引用: 引用 2 楼 oncancel 的回复:
引用 1 楼 paul_chao 的回复:
1. DMA, 就是不透过 CPU 的 Core 做存取, 故其与 cache 是无关的, 但是在程式准备资料填入 dma 的 buffer 或是从 dma buffer 搬出时, 就与 cache 有关了.
2. LZ 可将得到的 physical address 再透过 VirtualAlloc/VirtualCopy 或是 MmMapIoSpace 等 API 即可获得 cached virtual address.
Paul, Chao @ Techware
你的意思是先用AllocPhysMem分配一块物理地址并得到一个虚拟地址,再把这块地址用MmMapIoSpace重新映射一次虚拟地址?这样的操作合法吗?释放的时候也先MmUnMapIoSpace再FreePhysMem?
va1=AllocPhysMem(size,PAGE_READONLY,0,0,&pa,LowPart);
va2=MmMapIoSpace(pa,size,TRUE);
...
MmUnMapIoSpace(va2,size);
FreePhysMem(va1);