阅读:1444回复:6
从配置空间读的数据怎么不对?
在头文件里我定义了 KMemoryRange m_MemRange 对象。在
OnStartDevice(KIrp I)函数里我对 m_MemRange 进行了初始化: PCM_RESOURCE_LIST pRawList = I.AllocatedResources(); PCM_RESOURCE_LIST pResList = I.TranslatedResources(); status = m_MemRange.Initialize(pResList, pRawList, 0); if ( !NT_SUCCESS(status) ) return status; 在Read(Iirp)函数里 PUCHAR pBuffer=(PUCHAR)ExAllocatePool(NonPagedPool,10); RtlZeroMemory(pBuffer,10) m_MemRange.inb(0,pBuffer,4); t<<\"pBuffer=\"<<UCHAR(*pBuffer)<<\"\\n\"; t<<\"pBuffer+1=\"<<UCHAR(*(pBuffer+1))<<\"\\n\"; 根据程序应该输出PCI里配置空间偏移量为00和01 单元里的两个字节 对应我的设备识别号:7146 可是在Monitor输出的结果却是 pBuffer=0x69 pBuffer+1=0x51 问题出在哪里?请大家指点以下。十分感谢! |
|
沙发#
发布于:2002-06-10 21:53
补充一点:上述程序是用DriverWorks开发的。
|
|
板凳#
发布于:2002-06-10 23:29
到底是厂商识别号还是设备识别号,根据PCI配置空间的定义,偏移量00及01是厂商识别号,偏移量02及03才是设备识别号
|
|
地板#
发布于:2002-06-11 09:02
DriverWork我还没用过,但你的代码给我的感觉是读写了卡上的寄存器,而不是pci的配置空间
|
|
|
地下室#
发布于:2002-06-11 11:08
到底是厂商识别号还是设备识别号,根据PCI配置空间的定义,偏移量00及01是厂商识别号,偏移量02及03才是设备识别号 我的PCI卡厂商识别号是1131,设备识别号是7146,可我用 SoftIce命令PCI -raw 看PCI卡配置空间时却是 Vendor:1131 Device:7146 ......... 以下是偏移地址内容: 00: 71461131 02800006 ......... .......... 10: E9000000 ........ ......... .......... 20: ........ ........ ......... .......... 偏移量 00,01所对应的内容是7146还是1131呢? 如是7146,那不是和配置空间的定义不符了吗? |
|
5楼#
发布于:2002-06-11 14:20
/**************** 我的PCI卡厂商识别号是1131,设备识别号是7146,可我用 SoftIce命令PCI -raw 看PCI卡配置空间时却是 Vendor:1131 Device:7146 ......... 以下是偏移地址内容: 00: 71461131 02800006 ......... .......... 10: E9000000 ........ ......... .......... 20: ........ ........ ......... .......... 偏移量 00,01所对应的内容是7146还是1131呢? 如是7146,那不是和配置空间的定义不符了吗? ***************/ 应该是1131。 /*********** DriverWork我还没用过,但你的代码给我的感觉是读写了卡上的寄存器,而不是pci的配置空间 ************/ 这位老兄应该是正确的,你读取的是PCI内存空间,而不是配置空间。 |
|
|
6楼#
发布于:2002-06-11 16:03
多谢两位。
我读的确实是PCI内存空间,不是配置空间。 |
|