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】