阅读:1446回复:6
PCI总线如何分辨不同的板卡
我不知PCI总线如何分辨不同的板卡,是在EEPROM中的基址寄存器中,还是要复位后在PCI总线上送什么数据,实在困惑,望请解答
|
|
沙发#
发布于:2004-01-13 09:23
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2004-01-14 10:27
您能说得清楚点吗?那个配置空间?我实在郁闷坏了!由於我
|
|
地板#
发布于:2004-01-15 09:25
怎么没人理我?太郁闷了!!!!!
|
|
地下室#
发布于:2004-01-15 10:34
老兄看源码吧,不用多说!
NTSTATUS FindPci(IN PUNICODE_STRING RegistryPath,IN PDRIVER_OBJECT DriverObject, PPCI_COMMON_CONFIG pPciCfgInfo, PCM_RESOURCE_LIST * pResourceList,ULONG *BusNum) { PCI_SLOT_NUMBER PciSlotNumber; CM_RESOURCE_LIST ResourceList; NTSTATUS Status; ULONG BusNumber,i,f,j; BOOLEAN flag; flag=TRUE; PciSlotNumber.u.bits.Reserved=0; for (BusNumber=0;flag;BusNumber++) { for (i=0;i<PCI_MAX_DEVICES&&flag;i++) { PciSlotNumber.u.bits.DeviceNumber=i; for (f=0;f<PCI_MAX_FUNCTION;f++) { PciSlotNumber.u.bits.FunctionNumber=f; j= HalGetBusData( PCIConfiguration, BusNumber, PciSlotNumber.u.AsULONG, pPciCfgInfo, PCI_COMMON_HDR_LENGTH ); if (j==0) {//The specified PCI bus does not exist. flag=FALSE; break; } if (pPciCfgInfo->VendorID==PCI_INVALID_VENDORID) { // skip to next slot break; } if ( pPciCfgInfo->DeviceID==AMCC_DEVICE_ID && pPciCfgInfo->VendorID==AMCC_VENDOR_ID) //find the s5933 device,pci information stored in PciCfgInfo, //then assign slot resource such as PciCfgInfo.u.type0 // AMCC_VENDOR_ID 0x10e8 { *BusNum=BusNumber; Status=HalAssignSlotResources( RegistryPath, NULL, DriverObject, NULL, PCIBus, BusNumber, PciSlotNumber.u.AsULONG, pResourceList); flag=FALSE; return Status; } } } } return STATUS_NO_SUCH_DEVICE; } :P |
|
5楼#
发布于:2004-01-18 18:48
硬件板卡需要提供一个 id 号;
pc 机根据这个 id 号装载相应的驱动程序; Pc 机识别 pci 板卡需要访问 pci 板卡的配置空间。 |
|
|
6楼#
发布于:2004-01-18 18:50
你的 pci 板卡需要用提供一个配置空间(请阅读 pci 协议),pc 机根据 pci 协议访问配置空间; 你需要实现这个协议功能。
不知道你想做什么? |
|
|