Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public uint PCIReadWord(uint offset)
 {
     return(io.PCI_Read_DWORD(pcidev.Bus, pcidev.Device, pcidev.Function, offset));
 }