![]() |
![]() |
![]() |
![]() |
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 devices 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 |
pci_attach(), pci_attach_device(), pci_detach(), pci_detach_device(), pci_find_class(), pci_find_device(), pci_present(), pci_read_config(), pci_read_config8(), pci_read_config32(), pci_rescan_bus(), pci_write_config(), pci_write_config8(), pci_write_config16(), pci_write_config32()
![]() |
![]() |
![]() |
![]() |