• Retrieves PCI device's resource information (i.e., Memory ranges, I/O ranges, Interrupt lines).
DWORD WD_PciGetCardInfo(
HANDLE hWD,
WD_PCI_CARD_INFO *pPciCard);
| Name | Type | Input/Output |
|---|---|---|
| hWD | HANDLE | Input |
| pPciCard | WD_PCI_CARD_INFO* | Input |
| • pciSlot | WD_PCI_SLOT | Input |
| * dwBus | DWORD | Input |
| * dwSlot | DWORD | Input |
| * dwFunction | DWORD | Input |
| • Card | WD_CARD | Input |
| * dwItems | DWORD | Output |
| * Item | WD_ITEMS[WD_CARD_ITEMS] | Input |
| • item | DWORD | Output |
| • fNotSharable | DWORD | Output |
| • dwReserved | DWORD | N/A |
| • dwOptions | DWORD | N/A |
| • I | union | Input |
| * Mem | struct | Input |
| • dwPhysicalAddr | DWORD | Output |
| • dwBytes | DWORD | Output |
| • dwTransAddr | DWORD | N/A |
| • dwUserDirectAddr | DWORD | N/A |
| • dwCpuPhysicalAddr | DWORD | N/A |
| • dwBar | DWORD | Output |
| * IO | struct | Input |
| • dwAddr | KPTR | Output |
| • dwBytes | DWORD | Output |
| • dwBar | DWORD | Output |
| * Int | struct | Input |
| • dwInterrupt | DWORD | Output |
| • dwOptions | DWORD | Output |
| • hInterrupt | DWORD | N/A |
| * Bus | WD_BUS | Input |
| • dwBusType | WD_BUS_TYPE | Output |
| • dwBusNum | DWORD | Output |
| • dwSlotFunc | DWORD | Output |
| * Val | struct | N/A |
| Name | Description |
|---|---|
| hWD | Handle to WinDriver's kernel-mode driver as
received from WD_Open() [5.2] |
| pPciCard | Pointer to a PCI card information structure: |
| • pciSlot | PCI slot information structure: |
| * dwBus | PCI bus number (0 based) |
| * dwSlot | PCI slot number (0 based) |
| * dwFunction | PCI function number (0 based) |
| • Card | Card information structure: |
| * dwItems | Number of items detected on the card |
| * Item | Card items information structure: |
| • item |
Type of item. Can be ITEM_MEMORY, ITEM_IO,
ITEM_INTERRUPT or ITEM_BUS.
|
| • fNotSharable |
If TRUE, only one application at a time can access the
mapped memory range, or monitor this card's interrupts
|
| • I | Specific data according to the item type: |
| * Mem | Describes a memory item (item = ITEM_MEMORY): |
| • dwPhysicalAddr | First address of the physical memory range |
| • dwBytes | Length of the memory range, in bytes |
| • dwBar | Base Address Register (BAR) number of the memory range |
| * IO | Describes an I/O item (item = ITEM_IO): |
| • dwAddr | First address of the I/O range |
| • dwBytes | Length of the I/O range, in bytes |
| • dwBar | Base Address Register (BAR) number for the I/O range |
| * Int |
Describes an interrupt item (item = ITEM_INTERRUPT):
|
| • dwInterrupt | Physical interrupt request (IRQ) number |
| • dwOptions |
Interrupt options bit-mask, which can consist of a combination of any of
the following flags for indicating the interrupt types supported by the
device. The default interrupt type, when none of the following flags is set, is legacy edge-triggered interrupts. • INTERRUPT_MESSAGE_X –
Indicates that the hardware supports Extended Message-Signaled Interrupts (MSI-X).This option is applicable only to PCI cards on Linux – see information in the WinDriver PCI Manual. • INTERRUPT_MESSAGE – On
Linux, indicates that the hardware supports Message-Signaled Interrupts (MSI).On Windows and Mac OS X, indicates that the hardware supports MSI or MSI-X. This option is applicable only to PCI cards on Linux, Mac OS X, and Windows Vista and higher – see information in the WinDriver PCI Manual. • INTERRUPT_LEVEL_SENSITIVE
– Indicates that the hardware supports level-sensitive interrupts.
|
| * Bus | Describes a bus item (item = ITEM_BUS): |
| • dwBusType |
The card's bus type. For a PCI card the bus type is
WD_BUS_PCI
|
| • dwBusNum | The card's bus number |
| • dwSlotFunc | A combination of the card's bus slot and function numbers: the lower three bits represent the function number and the remaining bits represent the slot number. For example: a value of 0x80 (<=> 10000000 binary) corresponds to a function number of 0 (lower 3 bits: 000) and a slot number of 0x10 (remaining bits: 10000). |
Returns WD_STATUS_SUCCESS (0) on success, or an appropriate
error code otherwise [A].
WD_PCI_CARD_INFO pciCardInfo;
WD_CARD Card;
BZERO(pciCardInfo);
pciCardInfo.pciSlot = pciSlot;
WD_PciGetCardInfo(hWD, &pciCardInfo);
if (pciCardInfo.Card.dwItems!=0) /* At least one item was found */
{
Card = pciCardInfo.Card;
}
else
{
printf("Failed fetching PCI card information\n");
}