summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/gpxe/device.h48
-rw-r--r--src/include/gpxe/pci.h7
2 files changed, 52 insertions, 3 deletions
diff --git a/src/include/gpxe/device.h b/src/include/gpxe/device.h
index 9f670cfd2..139fb78b5 100644
--- a/src/include/gpxe/device.h
+++ b/src/include/gpxe/device.h
@@ -11,10 +11,58 @@
#include <gpxe/list.h>
#include <gpxe/tables.h>
+/** A PCI device description */
+struct pci_device_description {
+ /** Bus type
+ *
+ * Must be @c BUS_TYPE_PCI.
+ */
+ unsigned int bus_type;
+ /** Bus:dev.fn address
+ *
+ * As constructed by PCI_BUSDEVFN().
+ */
+ unsigned int busdevfn;
+ /** Vendor ID */
+ unsigned int vendor;
+ /** Device ID */
+ unsigned int device;
+};
+
+/** PCI bus type */
+#define BUS_TYPE_PCI 1
+
+/** An ISAPnP device description */
+struct isapnp_device_description {
+ /** Bus type
+ *
+ * Must be @c BUS_TYPE_ISAPNP.
+ */
+ unsigned int bus_type;
+};
+
+/** PCI bus type */
+#define BUS_TYPE_ISAPNP 2
+
+/** A hardware device description */
+union device_description {
+ /** Bus type
+ *
+ * This must be a BUS_TYPE_XXX constant.
+ */
+ unsigned int bus_type;
+ /** PCI device description */
+ struct pci_device_description pci;
+ /** ISAPnP device description */
+ struct isapnp_device_description isapnp;
+};
+
/** A hardware device */
struct device {
/** Name */
char name[16];
+ /** Device description */
+ union device_description desc;
/** Devices on the same bus */
struct list_head siblings;
/** Devices attached to this device */
diff --git a/src/include/gpxe/pci.h b/src/include/gpxe/pci.h
index 8269dfaa3..eaa1560b7 100644
--- a/src/include/gpxe/pci.h
+++ b/src/include/gpxe/pci.h
@@ -307,9 +307,10 @@ struct pci_driver {
/** Declare a PCI driver */
#define __pci_driver __table ( struct pci_driver, pci_drivers, 01 )
-#define PCI_DEVFN( slot, func ) ( ( (slot) << 3 ) | (func) )
-#define PCI_SLOT( devfn ) ( ( (devfn) >> 3 ) & 0x1f )
-#define PCI_FUNC( devfn ) ( (devfn) & 0x07 )
+#define PCI_DEVFN( slot, func ) ( ( (slot) << 3 ) | (func) )
+#define PCI_SLOT( devfn ) ( ( (devfn) >> 3 ) & 0x1f )
+#define PCI_FUNC( devfn ) ( (devfn) & 0x07 )
+#define PCI_BUSDEVFN( bus, devfn ) ( ( (bus) << 8 ) | (devfn) )
#define PCI_BASE_CLASS( class ) ( (class) >> 16 )