Over
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1014回复:0

amcc如何实现双缓冲dma?

楼主#
更多 发布于:2002-02-05 16:57
用AllocateCommonBuffer会导致死机?

设备扩展中声明:
{
PULONG AmccBaseRegisterAddress1;

// Adapter\'s memory phisycal address for dma
PPHYSICAL_ADDRESS AmccDmaPhAddress1;
}

DevExt是设备扩展,在IRP_MN_START_DEVICE消息到来启动设备时分配内存,运行的时候会导致机器重起:
{
DevExt->AmccBaseRegisterAddress1 = (unsigned long *)
DevExt->ReadAdapter->DmaOperations->AllocateCommonBuffer(
DevExt->ReadAdapter, //IN PDMA_ADAPTER DmaAdapter,
OSR_PCI_MAX_TXFER, //IN ULONG Length,
DevExt->AmccDmaPhAddress1, //OUT PPHYSICAL_ADDRESS LogicalAddress,
FALSE//IN BOOLEAN CacheEnabled
);
if (DevExt->AmccDmaPhAddress1 == NULL) {
return(STATUS_UNSUCCESSFUL);
}
//
// We successfully allocated a contiguous chunk of memory.
// It should be page aligned already.
//
//ASSERT(((ULONG_PTR)DevExt->AmccDmaPhAddress1 & (PAGE_SIZE-1)) == 0);

#if DBG
DebugPrint(\"OsrStartDevice: 内存资源1 0x%x%x\",
DevExt->AmccDmaPhAddress1->HighPart,
DevExt->AmccDmaPhAddress1->LowPart);
#endif
//ASSERT(DevExt->AmccDmaPhAddress1->HighPart == 0);
//ASSERT((DevExt->AmccDmaPhAddress1->LowPart & (PAGE_SIZE-1)) == 0);

}




当我们仰望星空,其实是在回顾历史
游客

返回顶部