阅读:1097回复:1
关于如何使用系统分配给9052或其它PCI设备的资源
下午看了看资料,自问自答。
特别声明,只是我今天看资料后的想法,不一定准确,更没有验证。(板子还要好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) ); 获得内存资源。 |
|
最新喜欢:![]()
|
沙发#
发布于:2002-05-04 09:59
补充一下,
KIoRange和KMemoryRange的初始化方式是一致的。 |
|
|