HalAllocateCommonBuffer 函数

 

PVOID HalAllocateCommonBuffer(
PDMA_ADAPTER_OBJECT DmaAdapter,
ULONG               Length,
PPHYSICAL_ADDRESS   LogicalAddress,
BOOLEAN             CacheEnabled
);


是要alloc一塊memory給 "不認識virtual address" 的hardware用 (?)

參數中指定需要的大小 (Length) 和 CacheEable。並且指定是要給哪一個hardware用 (DmaAdaptor)。
    pVirtDMABufferAddr =
(PBYTE)HalAllocateCommonBuffer(&Adapter,(AUDIO_DMA_PAGE_SIZE),&PhysDMABufferAddr, FALSE);
就會alloc一塊memory,memory的virtual address會return 回來,physical address 就放在 argument 的 "LogicalAddress" 中。
一般是給DMA用 (DMA只認識 physical address ?)

以 DMA 的 output channel 來看,allocate的memory,physical address要填入DMA的source pointer register。
DMA.SourceAddress = LogicalAddress。
然後,driver要藉由DMA送出資料,就要寫入 pVirtDMABufferAddr

你可能感兴趣的:(object,audio,output)