dreamcatcher
驱动牛犊
驱动牛犊
  • 注册日期2003-08-28
  • 最后登录2010-05-10
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:995回复:1

power_lei 老兄请进

楼主#
更多 发布于:2004-01-06 23:32
  看到了以前的一个帖子,我也遇到了同样的问题,不知道你是怎么解决的?帮帮忙,谢了!
  
  我的邮箱:sunjx2002@sohu.com
  


============================
引:

我使用PLX9054-RDK LITE板子,EEPROM中的信息没有做任何操作,
单次的read()和WRITE()的驱动程序已经成功,现在编写DMA的驱动,出现如下问题:

1、我用DRIVERWORKS自己编写他的DMA驱动程序,不知道可行否?
2、如果可行,是否需要什么特别的设置,下面的设置是否正确。

#define MAX_DMA_LENGTH 0x100000 // 0x100000 is 1 MB

// Initialize the device descriptor for the DMA object using the assigned resource
DEVICE_DESCRIPTION dd;
RtlZeroMemory(&dd, sizeof(dd));
dd.Version = DEVICE_DESCRIPTION_VERSION;
dd.Master = TRUE;
dd.ScatterGather = FALSE;
dd.DemandMode = FALSE;
dd.AutoInitialize = FALSE;
dd.Dma32BitAddresses = TRUE;
dd.IgnoreCount = FALSE;
// dd.BusNumber = 0;
dd.DmaChannel = 0;
dd.InterfaceType = PCIBus;
dd.DmaWidth = Width32Bits; // PCI default width
dd.DmaSpeed = Compatible;
dd.MaximumLength = MAX_DMA_LENGTH;

// Initialize the DMA adapter object
m_Dma.Initialize(&dd, m_Lower.TopOfStack());


3、如果上面正确,我是使用下面的方法,为什么不能执行LOCAL->PCI的DMA操作?

m_CurrentTransfer = new(NonPagedPool) KDmaTransfer(this, &m_Dma);
if ( m_CurrentTransfer == NULL )
{
status = STATUS_INSUFFICIENT_RESOURCES;
//DbgPrint(\"BMDmaTstDevice: unable to allocate transfer object: %x\\n\", status);

I.Information() = 0;
I.Status() = status;
NextIrp(I);
}

status=m_CurrentTransfer->Initiate(
this,
&m_Dma,
I.Mdl(),
FromDeviceToMemory,
LinkTo(OnDmaReady),
NULL,
NULL,
false
);

出现的现象是:
1>、决大多数情况下不能进入ONDMAREADY()回调程序。
2>、有的时候,会直接跳入KMEMORY.h文件,提示:break due to page fault。
请各位专家给个提示。
power_lei
驱动小牛
驱动小牛
  • 注册日期2002-05-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-11 23:05
不好意思,现在才看到,已经好了吧。:)
游客

返回顶部