Read information from the common PCI configuration space registers
#include <pci/pci.h> pci_err_t pci_device_read_ccode( pci_bdf_t bdf, pci_ccode_t *ccode ); pci_err_t pci_device_read_clsize( pci_bdf_t bdf, pci_clsize_t *cache_linesz ); pci_err_t pci_device_read_cmd( pci_bdf_t bdf, pci_cmd_t *cmd); pci_err_t pci_device_read_did( pci_bdf_t bdf, pci_did_t *did); pci_err_t pci_device_read_hdrType( pci_bdf_t bdf, pci_hdrType_t *hdrType); pci_err_t pci_device_read_latency( pci_bdf_t bdf, pci_latency_t *latency); pci_err_t pci_device_read_revid( pci_bdf_t bdf, pci_revid_t *revid); pci_err_t pci_device_read_ssid( pci_bdf_t bdf, pci_ssid_t *ssid); pci_err_t pci_device_read_ssvid( pci_bdf_t bdf, pci_ssvid_t *ssvid); pci_err_t pci_device_read_status( pci_bdf_t bdf, pci_stat_t *status); pci_err_t pci_device_read_vid( pci_bdf_t bdf, pci_vid_t *vid);
The pci_device_read_*() functions provide read access to the common PCI configuration space registers identified by their names. The register contents are returned in the provided storage.
Register | Description | Data type |
---|---|---|
CCODE | Class and subclass code; see pci_device_find() | pci_ccode_t |
CLSIZE | Cache line size | pci_clsize_t |
CMD | Command: a bitmask of features that can be individually enabled and disabled | pci_cmd_t |
DID | Device ID | pci_did_t |
HDRTYPE | Header type, which indicates the layout of the remaining header data | pci_hdrType_t |
LATENCY | Latency timer | pci_latency_t |
REVID | Revision ID | pci_revid_t |
SSID | Subsystem ID | pci_ssid_t |
SSVID | Subsystem vendor ID | pci_ssvid_t |
STATUS | Status information for PCI bus-related events | pci_stat_t |
VID | Vendor ID | pci_vid_t |
All functions return a pci_err_t indicating success or failure. If the call is successful, the storage that you provided contains the requested value. If any error occurs, you should assume that this storage contains invalid data.
You don't need to attach to the device before using a pci_device_read_*() function that takes a pci_bdf_t parameter as its first argument to read a configuration space register. You can find the pci_bdf_t value for a specific device by calling pci_device_find().
PCI_ERR_OK on success; any other value indicates that an error occurred (you can use pci_strerror() to get the associated description).
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | No |
Thread | Yes |