Read 16-bit values from the configuration space of a device
#include <hw/pci.h>
int pci_read_config16( unsigned bus,
unsigned dev_func,
unsigned offset,
unsigned count,
char* buff );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The pci_read_config16() function reads the specified number of 16-bit values from the configuration space of the given device or function. For the details of the configuration space, see the _pci_config_regs structure in <hw/pci.h>.
List all the Ethernet interfaces on the system:
int pci;
unsigned short vid;
unsigned short did;
int indx = 0;
unsigned bus;
unsigned func;
pci = pci_attach(0);
if (pci != -1)
{
while (pci_find_class(
PCI_CLASS_NETWORK | PCI_SUBCLASS_NETWORK_ETHERNET,
indx, &bus, &func) == PCI_SUCCESS)
{
printf("Found an Ethernet board at index %d\n", indx);
if (pci_read_config16( bus, func,
offsetof (struct _pci_config_regs, Vendor_ID),
1, &vid) != PCI_SUCCESS)
{
printf ("Failed to get the vendor ID\n");
vid = 0;
}
if (pci_read_config16( bus, func,
offsetof (struct _pci_config_regs, Device_ID),
1, &did) != PCI_SUCCESS)
{
printf ("Failed to get the device ID\n");
did = 0;
}
printf(" Vendor ID: 0x%04hX\n", vid);
printf(" Device ID: 0x%04hX\n", did);
indx++;
}
pci_detach(pci);
}
else
{
perror("Failed to attach to PCI");
}
See also pci_attach_device().
| Safety: | |
|---|---|
| Cancellation point | Yes |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |