阅读:1170回复:6
设备资源列举
在列举9054的资源的时候,因为9054要在系统中映射三块不同区域的内存,我应该采用何种办法把内存映射保存在设备扩展中?
假如三块内存都是大小相同的,应该如何处理? 假如不同,又应该如何处理? |
|
最新喜欢:juvent...
|
沙发#
发布于:2003-07-11 10:49
为什么没有人回答这个问题?是问得太弱智,还是分数太低了。
我再把这个问题补充一下: 在我的PCI卡映射到系统中的时候,有三块内存空间(大小相同)。我用什么办法可以从资源列表中获得这三块资源的值,并保存到我的设备扩展中。 因为资源列表和你卡保存资源的顺序可能不同。比如说:BAR0,BAR1,BAR2...我如何才能区分资源列表中的不同BAR值,然后保存。 谢谢! |
|
|
板凳#
发布于: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] |
|
|
地板#
发布于:2003-07-11 11:02
程序中的结构说明:
PHYSICAL_ADDRESS config[6]; ULONG Length[6]; [编辑 - 7/11/03 by Dragon2008] |
|
|
地下室#
发布于:2003-07-11 14:54
谢谢dragon!
我是用DDK+VC写的。不知道有没有办法? 还有就是用DS写有那些需要注意的地方? |
|
|
5楼#
发布于:2003-07-11 23:31
我觉得是不是可以这样,
1。 pci配置空间将映射为某一端口空间,这样,通过该端口空间,你可以读出bar0,1,2...,此时,系统应该分配了地址给你了,所以,在寄存器中,基址也是去订得了 2。 当驱动startdevice例程中得到内存资源是,可以将机制更上面的值进行比较,注意,寄存器中的基址没有经过翻译,是总线相关的原始地址,所以,你再去程中必须用原始值和他比较 |
|
|
6楼#
发布于:2003-07-14 10:03
liftship:
你说的情况在WIN2000的pnp机制中都可以实现: 1. 设备资源列表中给出了端口的使用情况,包括I/O,内存,DMA,中断资源。 2. 内存从物理地址到虚拟地址也可以通过MmMapIoSpace函数来完成. 我现在的主要问题就是在VC+DDK中如何实现对9054的BAR值的跟踪和映射。 |
|
|