yjx2003
驱动牛犊
驱动牛犊
  • 注册日期2004-06-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1302回复:2

m_CurrentTransfer->Continue(UseTransferSize)使用问题

楼主#
更多 发布于:2005-03-15 15:03
我使用的pci 接口在dma 传输以后,没有中断产生,所以在dma 传输以后,查询dma的状态控制器,确认完成以后,直接使用m_CurrentTransfer->Continue(UseTransferSize);

但是在softice 中。还是产生IRQL_NOT_LESS_OR_EQUAL错误

按照武安河的例子m_CurrentTransfer->Continue(UseTransferSize);是被放到
VOID PCI9054Device::DpcFor_Irq(PVOID Arg1, PVOID Arg2)
{
m_CurrentTransfer->Continue(UseTransferSize);
}
中使用的

请问
 m_CurrentTransfer->Continue(UseTransferSize);
可以这样用吗


所以在VOID Pci312Device::StartDMA(ULONG PAddress,ULONG NBytes)
{
      m_MemoryRange1.outb(DSR_DMA_OFFSET,0x00);

m_MemoryRange1.outd (BSAR_DMA_MEMORY_OFFSET,0x10); /* RAM  */
    m_MemoryRange1.outd(PCIA_DMA_PCI_OFFSET,PAddress);
 /* PCI  */
    m_MemoryRange1.outd(TCR_DMA_OFFSET ,NBytes);
 /*  byte number be sent */
    m_MemoryRange1.outb(DMR_DMA_OFFSET,0x80);
/* DMA start  */

/* waiting the dma finish  */
while(1)
{                                
        if ( (m_MemoryRange1.inb(DSR_DMA_OFFSET) & 0x80 ) == 0x80 )

{
               break; /* DMA finish */
}
}
    t  << \"Entering Pci39Device::StartDMA   finish dma register check \" <<\"\\n\";
 
     m_CurrentTransfer->Continue(UseTransferSize);
  
}
请向您的朋友推荐《名人传记》电子期刊 http://list.cn99.com/cgi-bin/getlsts?listname=zhuanji
ewater168
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-31 10:36
我也是按武安河的例子做得可我运行到status=m_CurrentTransfer->Initiate(I.Mdl(),IRP_MJ_READ,LinkTo(OnDmaReady));系统就重起
,郁闷得很啊。不知道仁兄有何高招啊。
yjx2003
驱动牛犊
驱动牛犊
  • 注册日期2004-06-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-31 11:07
武安河的例子使用的是system queue

所以,你的程序也要使用system queue

试试这招灵不灵
请向您的朋友推荐《名人传记》电子期刊 http://list.cn99.com/cgi-bin/getlsts?listname=zhuanji
游客

返回顶部