summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci/pcivar.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci/pcivar.h')
-rw-r--r--sys/dev/pci/pcivar.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h
index ade206a..fc37941 100644
--- a/sys/dev/pci/pcivar.h
+++ b/sys/dev/pci/pcivar.h
@@ -59,6 +59,27 @@ struct pcicfg_pp {
uint8_t pp_data; /* config space address of PCI power data reg */
};
+struct vpd_readonly {
+ char keyword[2];
+ char *value;
+};
+
+struct vpd_write {
+ char keyword[2];
+ char *value;
+ int start;
+ int len;
+};
+
+struct pcicfg_vpd {
+ uint8_t vpd_reg; /* base register, + 2 for addr, + 4 data */
+ char *vpd_ident; /* string identifier */
+ int vpd_rocnt;
+ struct vpd_readonly *vpd_ros;
+ int vpd_wcnt;
+ struct vpd_write *vpd_w;
+};
+
/* Interesting values for PCI MSI */
struct pcicfg_msi {
uint16_t msi_ctrl; /* Message Control */
@@ -103,6 +124,7 @@ typedef struct pcicfg {
uint8_t func; /* config space function number */
struct pcicfg_pp pp; /* pci power management */
+ struct pcicfg_vpd vpd; /* pci vital product data */
struct pcicfg_msi msi; /* pci msi */
} pcicfgregs;
@@ -292,6 +314,18 @@ pci_disable_io(device_t dev, int space)
return(PCI_DISABLE_IO(device_get_parent(dev), dev, space));
}
+static __inline int
+pci_get_vpd_ident(device_t dev, const char **identptr)
+{
+ return(PCI_GET_VPD_IDENT(device_get_parent(dev), dev, identptr));
+}
+
+static __inline int
+pci_get_vpd_readonly(device_t dev, const char *kw, const char **identptr)
+{
+ return(PCI_GET_VPD_READONLY(device_get_parent(dev), dev, kw, identptr));
+}
+
/*
* Check if the address range falls within the VGA defined address range(s)
*/
OpenPOWER on IntegriCloud