阅读:2009回复:4
关于如何读取 pci bus 信息
如何在 2000 下读取 pci bus 的信息呢,我对这个问题非常感兴趣,我发现了如下的一段代码,可在 2000 下无法使用 in and out
所以,想在此求助! #include "stdio.h" #include "windows.h" DWORD DWORD_In(WORD io_Port) { DWORD val; _asm{ mov dx,io_Port //in eax,dx //write_port_ulong(eax,dx) mov val,eax } return val; } DWORD DWORD_Out( WORD io_Port,DWORD val) { _asm{ mov dx,io_Port mov eax,val //out dx,eax //write_port_ulong(dx,eax) } return 0; } int main() { DWORD io_CF8; // port 0xcf8 DWORD io_CFC; // port 0xcfc int i; io_CF8=0x80000000; //because the first bit is enable/disable for(;;) { DWORD_Out(0xcf8,io_CF8); io_CFC = DWORD_In(0xcfc); if(io_CFC != 0xffffffff) //if = 0xffffffff, then is a invalid bu number and device number { printf("\n PCI device has found , the pci config address = %1x\n", io_CF8); printf("its Bus Number is %1x \n",(io_CF8 & 0x0000f800)/0x800); printf("this device's deviceID and vendorID= %1x\n",io_CFC); for(i=0;i<=15;i++) { DWORD_Out(0xcf8,io_CF8 + 4*i); //read DWORD switch (i) { case 0: printf("Status and Command = "); break; case 2: printf("Class Code and Revision ID = "); break; case 3: printf("Bist and Header Type and Latency Timer and Cacne Line Size = "); break; case 4: // PCI Configration has 6 base address case 5: // register case 6: case 7: case 8: case 9: case 10: case 11: case 13: case 14: printf("Reserved = "); break; case 12: printf("Expansion ROM Base Address = "); break; case 15: // attention:the interrupt IRQ = this result & 0xff printf("Max_Lat Min_Gnt Interrupt Pin Interrrupt line = "); break; } printf("%1x\n", DWORD_In(0xcfc)); } getchar(); } io_CF8 =io_CF8 + 0x800 ; if(io_CF8 >= 0x80FFFF00) { break; } } return 0; } email : llllllllg@126.com 8 L |
|
|
沙发#
发布于:2005-02-01 16:14
我在一家网络产品公司做产品测试,写一些产品测试程序,已接触到一些
firmware 的代码,可才疏学浅,资历不够,都没敢看。现在只想在班半年内做 3 件事: 1 : 在 2000 下能过读出 pci bus 的信息 2 : 在 2000 下,能够读写网卡 eeprom 的内容 3 : 在 2000 下,能够调用 device 的驱动函数。 吾深知非常困难,故不敢祈求太多,只想大家多给些建议 ! |
|
|
板凳#
发布于:2005-02-02 11:14
我觉得 对于读写 pci bus 信息的问题 对于各位大虾来说有些可笑了,可这个问题是出学者很干兴趣的,虽然网上有很多地方都介绍了,但对于我这样理论不是很强的人来说,如果不给出完整的代码是很困难的...
不过这个问题,我已经找到了解决方法了,虽然没有做出来,但一让我欣喜不已。先要写一个读写端口的驱动,然后在应用程序中调用这个驱动。哎,为了一个小小的木的,要这么麻烦! 不过,我现在又想到一个问题,就是对于一个刚装上的 device ,它的端口和数据存储的地方地址是多少,由什么决定的呢 ? 每每我想做一件事情,劳苦而无所获常另我非常苦恼。尤其是部知道解决方法的时候。 |
|
|
地板#
发布于:2005-02-02 11:37
我在一家网络产品公司做产品测试,写一些产品测试程序,已接触到一些 你的志向也太高远了,可能有一天腾然回首,才发现原来如此呀 |
|
|
地下室#
发布于:2005-02-03 08:44
我不晓得有没有回首的一天,也算不上什么志向,只是兴趣而已。
不过厂里给我们提供了很好的空间,从 adsl,switch 到 wireless ap , 网卡,可以接触到很多。自己也希望多了解一些。 其实我想向嵌入系统发展,不过工作需要先做好无线网卡的测试。所以需要用到我提到的三件事了。 |
|
|