diff options
author | Ian Moffett <ian@osmora.org> | 2025-10-11 16:53:43 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-10-11 16:53:43 -0400 |
commit | 2692a66b0956434df1411cb9c95aaa5e7a7e4e70 (patch) | |
tree | 58619bb4f280a3776a087a7db425fec4d7335d45 /src | |
parent | f0b15b392130a89b071985bb7ec21a5b4ff8158b (diff) |
kern: pci: Get programming interface from device
Some devices are identified by very specific programming interfaces,
therefore this is important to have.
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/sys/include/io/pci/pci.h | 2 | ||||
-rw-r--r-- | src/sys/io/pci/pci.c | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/src/sys/include/io/pci/pci.h b/src/sys/include/io/pci/pci.h index cab29aa..fbdead1 100644 --- a/src/sys/include/io/pci/pci.h +++ b/src/sys/include/io/pci/pci.h @@ -60,6 +60,7 @@ typedef uint32_t pcival_t; * @bus: Bus number of device * @slot: Slot number of device * @func: Function number of device + * @prog_if: Programming interface * @vendor: Vendor ID * @device: Device ID * @bar: Base address registers @@ -68,6 +69,7 @@ struct pci_device { uint16_t bus; uint8_t slot; uint8_t func; + uint8_t prog_if; uint8_t class; uint8_t subclass; uint16_t vendor; diff --git a/src/sys/io/pci/pci.c b/src/sys/io/pci/pci.c index 76ab616..a21b1e8 100644 --- a/src/sys/io/pci/pci.c +++ b/src/sys/io/pci/pci.c @@ -115,6 +115,7 @@ pci_register_dev(struct pci_device *dev) pcireg_t vend_dev; uint32_t classrev; uint8_t class, subclass; + uint8_t prog_if; uint16_t device_id; uint16_t vendor_id; @@ -131,6 +132,7 @@ pci_register_dev(struct pci_device *dev) classrev = pci_readl(dev, PCIREG_CLASSREV); class = PCIREG_CLASS(classrev); subclass = PCIREG_SUBCLASS(classrev); + prog_if = PCIREG_PROGIF(classrev); /* Does this device exist? */ if (vendor_id == 0xFFFF) { @@ -141,6 +143,7 @@ pci_register_dev(struct pci_device *dev) dev->device = device_id; dev->class = class; dev->subclass = subclass; + dev->prog_if = prog_if; /* Set up base address registers */ dev->bar[0] = pci_readl(dev, PCIREG_BAR0); |