ganer
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2004-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1098回复:1

关于如何使用系统分配给9052或其它PCI设备的资源

楼主#
更多 发布于:2002-05-04 01:05
下午看了看资料,自问自答。
特别声明,只是我今天看资料后的想法,不一定准确,更没有验证。(板子还要好10来天才出来)。
请先行者发表看法。

KPciConfiguration::BaseAddressIndexToOrdinal( ULONG number );
说明:返回基址寄存器中所包含地址的映射类型(端口和内存)从0开始的计数。
参数:
    number:基址寄存器号。因为PCI配置空间中有6个寄存器,因此它的值可以是0-5。
返回值:
    基址寄存器中所包含地址的映射类型(端口和内存)从0开始的计数。
注释:
    比如,如果基址寄存器0包含的地址是端口,则它返回0;如果基址寄存器1包含的资源是内存

,它还是返回1;如果基址寄存器2包含的资源是端口,此时它返回1,因为它已经是第二次出现了



KIoRange::Initialize
FORM 4 (WDM):
Initialize(
   PCM_RESOURCE_LIST pTranslatedResourceList,
   PCM_RESOURCE_LIST pRawResourceList,
   ULONG Ordinal=0,
   BOOLEAN MapToSystemVirtual =TRUE

);
KIoRange有四种初始化方式。这里解释相关的第四种。首先参数pTranslatedResourceList是一个

翻译过的该设备使用的资源列表,pRawResourceList是设备使用的资源的原始列表,Ordinal是指

选用资源列表中的第Ordinal个端口资源,Ordinal从0开始计数。
注释:此种形式的初始化采用翻译后的资源列表和用Ordinal指示的资源列表中的特定资源。这一

形式从资源中抽取了创建对象需要的信息。Ordinal为0表示第一个端口资源,为1则表示第二个端

口资源;如此类推。

因此,当需要使用PLX9052的本地寄存器空间时,应该可以用
status = m_MemoryRange0.Initialize(
pResListTranslated,
pResListRaw,
PciConfig.BaseAddressIndexToOrdinal(0)
);
取得内存资源。而需要访问Space0空间时,应该可以用
status = m_MemoryRange1.Initialize(
pResListTranslated,
pResListRaw,
PciConfig.BaseAddressIndexToOrdinal(1)
);
获得内存资源。

最新喜欢:

mapoflmapofl
好好学习,天天向上!
ganer
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2004-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-04 09:59
补充一下,
KIoRange和KMemoryRange的初始化方式是一致的。
好好学习,天天向上!
游客

返回顶部