Obtains and decodes extended BAR address space information from a PCI device.
The PCIDEV structure should be fully initialized, as returned from a call to PciFindDevice, PciFindClass or PciReadHeader.
BOOLEAN PciGetExtendedAddressSpace(
PCIDEV *pPciDevice,
PCISPACE *space,
LPDWORD pdwCount);
Parameters
pPciDevice
- A pointer to a PCIDEV structure, initialized as described above.
pSpace
- A pointer to an array of PCISPACE structures which will be filled with the extended BAR information for the device.
pdwCount
- A pointer to the count of the elements referenced by pSpace. After a successful call returns the number of extended address spaces found.
Example
Use this call before calling PciReadHeader, as follows:
PciGetExtendedAddressSpace sample |
Copy Code |
PCIDEV pci; #define PCISPACE_CNT 6 #define MYBAR 4 PCISPACE sp[PCISPACE_CNT]; LPDWORD regs; // read the header info for device @ PCI 2:0.0 pci.wBusNum = 2; pci.wDeviceNum = 0; pci.wFunction = 0; // Read the device header information PciReadHeader(&pci); // in this example, BAR 4 has a 64-bit memory space DWORD flags = PciSpaceFlags(&pci, MYBAR); if (flags & IOSPACE_64BIT){ DWORD count = PCISPACE_CNT; if (PciGetExtendedAddressSpace(&pci, sp, &count)) { // find the entry for BAR MYBAR for (int i = 0; i < count; i++) { if (((sp[i].flags & IOSPACE_BAR_INDEX_MASK) >> IOSPACE_BAR_INDEX_SHIFT) == MYBAR) { // map the 64-bit physical address of the first extended BAR range regs = MapRtPhysicalAddress64(sp[i].start, (DWORD)sp[i].size, 0); break; } } } } |
Return Values
TRUE, if the device exists. Otherwise FALSE.
Requirements
Versions |
Defined in |
Include |
Link to |
INtime 6.3 |
intime/rt/include/pcibus.h |
pcibus.h |
pcibus.lib |
See Also