PCI
The main requirements are these headers
The PCIDeviceHeader is just a simpler structure that embeds into PCIHeader0 and is only really used when setting up the device / searching for its presence in the drivers. These then provided the basic information needed to use these drivers and interact with the hardware.
The next stages are to enumerate the devices. These can be found using 3 different stages. The first stage is buses and there are 32 of these for each entry in the MCFG table. Then each bus has32 devices, and they have 8 functions and these are the devices used in the drivers.
Device Locating
This is used when a driver wants to gain access to a specific device, which can be specified by any identifier such as a Vendor and Device ID or just by class and subclass. This is done using a PCI_Identifier struct, which looks like this:
Packed is still used as we will be receiving this data from another executable / system file. This can have discrepancies due to the way compilers optimize storage consumption, the packed attribute tells the compiler to ignore optimizing this data structure.
Last updated