阅读:1349回复:7
如何用程序读写PCI配置寄存器(30分)
现在已经知道一种方法:
地址0xcf8是配置寄存器的地址寄存器,它的32位操作的每一位的意义如下:busnumber、functionnumber和devicenumber都是在计算机启动时由系统分配,registernumber就是我们所需要进行读写的寄存器号,最低两位为0,8比特刚好构成256个字节的配置寄存器地址空间。口地址0xcfc就是数据寄存器,写完地址寄存后,对该口进行双字读就得到配置寄存器里面的值,写入一个双字就完成对相应配置寄存器的写操作。 不知道该如何把busnumber、functionnumber、devicenumber和registernumber的值组合成一个32位的数写入0xcf8。 如果知道别的读写配置寄存器的方法也请告知。 |
|
沙发#
发布于:2002-10-29 08:41
USE this \"HalGetBusDataByOffset\".
|
|
板凳#
发布于:2002-10-29 08:53
看看PCI规范吧,上面有。
建议,最好不要这样用。 |
|
地板#
发布于:2002-10-29 09:09
看看PCI规范吧,上面有。 如果不这样做,那有什么其他的方法可以在98下读写PCI设备的配置空间的寄存器 |
|
地下室#
发布于:2002-10-29 10:14
BIT:
31-24:Reserve,0x80 23-16:Bus number 15-11:device number,5bits 10-8:function number,3bits 7-0:register number(0-256) |
|
|
5楼#
发布于:2002-10-29 14:46
StreamClassReadWriteConfig
( pSrb->HwDeviceExtension, TRUE, (PVOID)&PciConfigSpace, 0, 64 ) |
|
6楼#
发布于:2002-10-29 15:14
可以自己生成IRP.看看DDK文档
|
|
7楼#
发布于:2002-10-30 12:30
BIT:
31-24:Reserve,0x80 23-16:Bus number 15-11:device number,5bits 10-8:function number,3bits 7-2:register number(0-256) 1-0:must be 00 每次都会读出4个bit 来,所以你最后2位最好是00 |
|