最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

WINDOWS驱动编程

IT圈 admin 43浏览 0评论

2024年5月27日发(作者:农千)

WDM驱动程序开发之读写设备寄存器:KIoRange类

2009-11-09 14:05

WDM驱动程序开发之读写设备寄存器:KIoRange类 收藏

KIoRange类:

一、Overview

KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。

CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决

于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)

进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访

问(access)。KIoRange是KPeripheralAddress类的派生类。

一旦映射关系建立起来,驱动程序就用KIoRange类的成员函数去控制设备

的I/O寄存器。这个类提供了8位、16位和32位I/O访问控制的函数。这些函

数是以内联(in-line)函数方式来使用的,它们调用系统内相应的宏来产生依赖

于平台的代码。

对I/O位置(location)进行访问的另一种备选方案是创建一个KIoRegister

的实例。这要通过取得一个KIoRange对象的数组元素来实现。

为了访问一系列外围总线内存空间的地址,需要用KMemoryRange类。

二、Member Functions

1、KIoRange - Constructor (4 forms)

构造函数

【函数原型】

FORM 1:

KIoRange( void );

FORM 2: (NTDDK Only)

KIoRange(

INTERFACE_TYPE IntfType,

ULONG BusNumber ,

ULONGLONG BaseBusAddress,

ULONG Count,

BOOLEAN MapToSystemVirtual =TRUE

);

FORM 3 (WDM):

KIoRange(

ULONGLONG CpuPhysicalAddress,

BOOLEAN InCpuIoSpace,

ULONG Count,

BOOLEAN MapToSystemVirtual =TRUE

);

FORM 4 (WDM): (NOTE: This form is deprecated as of DriverStudio version

2.0.)

KIoRange(

PCM_RESOURCE_LIST pTranslatedResourceList,

ULONG Ordinal=0,

BOOLEAN MapToSystemVirtual =TRUE

);

FORM 5 (WDM):

KIoRange(

PCM_RESOURCE_LIST pTranslatedResourceList,

PCM_RESOURCE_LIST pRawResourceList,

ULONG Ordinal=0,

BOOLEAN MapToSystemVirtual =TRUE

);

【Parameters】

IntfType 指定总线类型。列举如下:Internal, Isa,

Eisa, MicroChannel, TurboChannel, PCIBus。

BusNumber 一个表示总线的整数。这种与IntfType联合起来的

表示方法当一个系统上有多条相同类型总线的时候是有意义的。这些数以0为对

照并由系统分配。

BaseBusAddress 被构造的对象所映射到的地址区域的首地

址。

Count 以字节计数的地址区域大小。

MapToSystemVirtual 一个布尔值,用来指明构造函数是否要创建

一个到系统非分页内存地址的映射。

CpuPhysicalAddress CPU总线上的物理地址或被翻译好的外围

地址。

InCpuIoSpace 如果I/O范围在CPU总线的I/O空间则为

TRUE,否则为FALSE。细节参看KResourceAssignment::Flags。

pTranslatedResourceList 指向一个在KPnpDevice::OnStartDevice

中可用的已翻译的资源列表的指针。可以通过KIrp::TranslatedResources获

得。

pRawResourceList 指向一个在KPnpDevice::OnStartDevice

中可用的原始资源列表的指针。可以通过KIrp::AllocatedResources获得。

Ordinal 序号。从pTranslatedResourceList指向的

资源列表中指定一个特殊的端口资源。0表示第一个端口,1表示第二个端口,

依次类推。

【Comments】

2024年5月27日发(作者:农千)

WDM驱动程序开发之读写设备寄存器:KIoRange类

2009-11-09 14:05

WDM驱动程序开发之读写设备寄存器:KIoRange类 收藏

KIoRange类:

一、Overview

KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。

CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决

于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)

进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访

问(access)。KIoRange是KPeripheralAddress类的派生类。

一旦映射关系建立起来,驱动程序就用KIoRange类的成员函数去控制设备

的I/O寄存器。这个类提供了8位、16位和32位I/O访问控制的函数。这些函

数是以内联(in-line)函数方式来使用的,它们调用系统内相应的宏来产生依赖

于平台的代码。

对I/O位置(location)进行访问的另一种备选方案是创建一个KIoRegister

的实例。这要通过取得一个KIoRange对象的数组元素来实现。

为了访问一系列外围总线内存空间的地址,需要用KMemoryRange类。

二、Member Functions

1、KIoRange - Constructor (4 forms)

构造函数

【函数原型】

FORM 1:

KIoRange( void );

FORM 2: (NTDDK Only)

KIoRange(

INTERFACE_TYPE IntfType,

ULONG BusNumber ,

ULONGLONG BaseBusAddress,

ULONG Count,

BOOLEAN MapToSystemVirtual =TRUE

);

FORM 3 (WDM):

KIoRange(

ULONGLONG CpuPhysicalAddress,

BOOLEAN InCpuIoSpace,

ULONG Count,

BOOLEAN MapToSystemVirtual =TRUE

);

FORM 4 (WDM): (NOTE: This form is deprecated as of DriverStudio version

2.0.)

KIoRange(

PCM_RESOURCE_LIST pTranslatedResourceList,

ULONG Ordinal=0,

BOOLEAN MapToSystemVirtual =TRUE

);

FORM 5 (WDM):

KIoRange(

PCM_RESOURCE_LIST pTranslatedResourceList,

PCM_RESOURCE_LIST pRawResourceList,

ULONG Ordinal=0,

BOOLEAN MapToSystemVirtual =TRUE

);

【Parameters】

IntfType 指定总线类型。列举如下:Internal, Isa,

Eisa, MicroChannel, TurboChannel, PCIBus。

BusNumber 一个表示总线的整数。这种与IntfType联合起来的

表示方法当一个系统上有多条相同类型总线的时候是有意义的。这些数以0为对

照并由系统分配。

BaseBusAddress 被构造的对象所映射到的地址区域的首地

址。

Count 以字节计数的地址区域大小。

MapToSystemVirtual 一个布尔值,用来指明构造函数是否要创建

一个到系统非分页内存地址的映射。

CpuPhysicalAddress CPU总线上的物理地址或被翻译好的外围

地址。

InCpuIoSpace 如果I/O范围在CPU总线的I/O空间则为

TRUE,否则为FALSE。细节参看KResourceAssignment::Flags。

pTranslatedResourceList 指向一个在KPnpDevice::OnStartDevice

中可用的已翻译的资源列表的指针。可以通过KIrp::TranslatedResources获

得。

pRawResourceList 指向一个在KPnpDevice::OnStartDevice

中可用的原始资源列表的指针。可以通过KIrp::AllocatedResources获得。

Ordinal 序号。从pTranslatedResourceList指向的

资源列表中指定一个特殊的端口资源。0表示第一个端口,1表示第二个端口,

依次类推。

【Comments】

发布评论

评论列表 (0)

  1. 暂无评论