gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1338回复:8

有关分页内存的访问,请指教,20!

楼主#
更多 发布于:2002-07-15 06:55
win2k, kernel streaming minidriver for a PCI Video Card

我的思路是:
[1] 当收到数据读的srb时将它排入链表
[2] 启动传输时看看链表中是否有srb,若有则用srb中的buffer初始化dma(没什么可说的)若没有则初始化一块缓冲区,然后用该缓冲区初始化dma。
[3] 当dma结束时引发isr,在isr中看看链表中是否有srb,没有则丢弃数据,重新初始化dma。若有则看看当前所用的dma缓冲是否为srb所带,是则直接完成srb取下一个srb,若为自己初始化的缓冲区(问题来了)我想把缓冲区中的数据复制到srb的缓冲区中,结果发现此时irql为dispatch level,不能使用srb的虚拟内存,我该怎么办呢,清高手指教,谢谢!

 
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-17 16:51
不合理呀,我怎么知道后面有没有人再回答问题.
问题没有解决, 大哥们都是怎么做的呀 :(
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-07-17 13:51
没有给完就自己留下罗。
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-17 11:45
给分之能给一次吗, 没给完怎么办
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-17 11:41
多谢多谢!
我的卡是master dma且支持scatter/gather,由于direct show给出的srb包中的缓冲就是分页的,可能用物理地址复制会很麻烦,所以我使用的是转换后的虚拟地址(你说的线性地址是指虚拟地址吗?有何区别?),就是用的RtlCopyMemory.
我好像听说dpc就是用来做数据复制的,可是为何我在dpc中获得的irql和我在isr中获得的都是2, 即dispatch level,我这块很糊涂, 请行家指正.
skysky
驱动小牛
驱动小牛
  • 注册日期2001-07-18
  • 最后登录2003-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-17 11:06
这里好象有个问题,你做DMA操作的时候,一般应该是master dma,不知道你是不是用了scatter/gather,你的缓冲区地址应该是物理地址吧,而你复制数据时用的是虚拟地址,会不会是用的复制函数有问题呢?

如果用RtlCopyMemery就得将物理地址先转化为线形地址。

如果都用物理地址那就用物理地址为参数的函数,函数名太长了,而且好象只能拷贝连续物理内存区。

希望能有所帮助。好运!
以德服人,以德服人
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-17 09:46
可是dpc同样也是dispatch level啊,我也试过的,还是我弄错了
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-15 10:16
在dpc中做,不要在isr中做
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-15 07:28
还有,srb所带的缓冲本身就是为dma使用的应该是锁定在内存中的,为什么在isr中无法使用呢?
游客

返回顶部