public bool FindByVendor(UInt32 vid, out PCIAddress addr) { for (uint i = 0; i < PCI_BUS_MAX; i++) { for (uint j = 0; j < PCI_DEV_MAX; j++) { for (uint k = 0; k < PCI_FUNC_MAX; k++) { uint ident = io.PCI_Read_DWORD(i, j, k, 0); Console.WriteLine($"bus:{i:X}, dev:{j:X}, func:{k:X} => {ident:X8}"); if (ident == 0xFFFFFFFF) { continue; } uint dev_vid = (ident >> 16) & 0xFFFF; uint dev_pid = (ident & 0xFFFF); Console.WriteLine($"[bus:{i:X}, dev:{j:X}, func:{k:X}] {dev_vid:X4}:{dev_pid:X4}"); if (dev_vid == vid) { addr = new PCIAddress() { Bus = i, Device = j, Function = k }; return(true); } } } } addr = new PCIAddress() { Bus = uint.MaxValue, Device = uint.MaxValue, Function = uint.MaxValue }; return(false); }
public uint PCIReadWord(uint offset) { return(io.PCI_Read_DWORD(pcidev.Bus, pcidev.Device, pcidev.Function, offset)); }