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