h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1507回复:3

急,关于Pci卡的CmResourceTypeMemory资源

楼主#
更多 发布于:2002-12-15 15:00
没有用过CmResourceTypeMemory资源,我是这样用的:

在DEVICE_EXTENSION里定义:
typedef struct _mpci{
  ...
  PHYSICAL_ADDRESS phy_memory;
  PVOID MemoryBase;
  ULONG MemoryLength;
}mpci,*pmpci;


在StartDevice里:

pmpci dx;
......//枚举资源
switch(resource->Type)
{
...
case CmResourceTypeMemory:
  dx->phy_memory=resource->u.Memory.Start;
  dx->MemoryLength=resource->u.Memory.Length;
  break;
...
}

//处理一下:
dx->MemoryBase=(PVOID)(dx->phy_memory.LowPart);

//在使用的时候:
char buf[20];
RtlCopyMemory((PULONG)dx->MemoryBase,buf,20);

不知道我这样使用CmResourceTypeMemory资源对不对,看到一些例程都是把CmResourceTypeMemory的处理放在和处理端口类似的代码里:
先得到u.Memory.Start,然后用MmMapIoSpace得到一个PUCHAR的地址,然后对其操作,但是那不是对映射到内存中的端口的操作吗?

如果本来就是Pci卡的内存资源呢?还需要再映射吗?

我这样操作的结果也好像不对,处理的过程正确吗?
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
jinfei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2012-07-03
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-15 17:48
必须要用 MmMapIoSpace 函数进行映射,
然后才能使用
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-12-15 20:01
用户被禁言,该主题自动屏蔽!
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-16 11:03
多谢二位,MmMapIoSpace 后用RtlCopyMemory应该可以正常操作吧,我这里好像不正常,还需要其他的转化吗?
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
游客

返回顶部