cysnew
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1170回复:6

设备资源列举

楼主#
更多 发布于:2003-07-07 23:34
  在列举9054的资源的时候,因为9054要在系统中映射三块不同区域的内存,我应该采用何种办法把内存映射保存在设备扩展中?
  假如三块内存都是大小相同的,应该如何处理?
  假如不同,又应该如何处理?

最新喜欢:

juventusjuvent...
除了幸福,还有自由和平静。
cysnew
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-11 10:49
为什么没有人回答这个问题?是问得太弱智,还是分数太低了。
我再把这个问题补充一下:
    在我的PCI卡映射到系统中的时候,有三块内存空间(大小相同)。我用什么办法可以从资源列表中获得这三块资源的值,并保存到我的设备扩展中。
   因为资源列表和你卡保存资源的顺序可能不同。比如说:BAR0,BAR1,BAR2...我如何才能区分资源列表中的不同BAR值,然后保存。
  谢谢!
除了幸福,还有自由和平静。
Dragon2008
驱动中牛
驱动中牛
  • 注册日期2002-04-01
  • 最后登录2006-03-13
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-11 11:00
你是用什么写的。如果是DS,下面的程序可用:
KResourceAssignment AssignedIO0(pResListTranslated,CmResourceTypePort,0);   //取得IO0的资源
config[0]=AssignedIO0.Start();
Length[0]=AssignedIO0.Length();

KResourceAssignment AssignedIO1(pResListTranslated,CmResourceTypePort,1);   //取得IO1的资源
config[1]=AssignedIO1.Start();
Length[1]=AssignedIO1.Length();

KResourceAssignment AssignedMem0(pResListTranslated,CmResourceTypeMemory,0);//取得存储空间0的资源
config[2]=AssignedMem0.Start();
Length[2]=AssignedMem0.Length();


[编辑 -  7/11/03 by  Dragon2008]
我姓龙,我属龙,我叫龙。。。
Dragon2008
驱动中牛
驱动中牛
  • 注册日期2002-04-01
  • 最后登录2006-03-13
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-11 11:02
程序中的结构说明:
PHYSICAL_ADDRESS config[6];
ULONG         Length[6];

[编辑 -  7/11/03 by  Dragon2008]
我姓龙,我属龙,我叫龙。。。
cysnew
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-11 14:54
谢谢dragon!

    我是用DDK+VC写的。不知道有没有办法?
    还有就是用DS写有那些需要注意的地方?
除了幸福,还有自由和平静。
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-11 23:31
我觉得是不是可以这样,
1。 pci配置空间将映射为某一端口空间,这样,通过该端口空间,你可以读出bar0,1,2...,此时,系统应该分配了地址给你了,所以,在寄存器中,基址也是去订得了
2。 当驱动startdevice例程中得到内存资源是,可以将机制更上面的值进行比较,注意,寄存器中的基址没有经过翻译,是总线相关的原始地址,所以,你再去程中必须用原始值和他比较
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
cysnew
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-14 10:03
liftship:

      你说的情况在WIN2000的pnp机制中都可以实现:

1. 设备资源列表中给出了端口的使用情况,包括I/O,内存,DMA,中断资源。
2. 内存从物理地址到虚拟地址也可以通过MmMapIoSpace函数来完成.
    
      我现在的主要问题就是在VC+DDK中如何实现对9054的BAR值的跟踪和映射。
除了幸福,还有自由和平静。
游客

返回顶部