summaryrefslogtreecommitdiffstats
path: root/src/include/dev.h
diff options
context:
space:
mode:
authorMichael Brown2005-04-14 12:10:54 +0200
committerMichael Brown2005-04-14 12:10:54 +0200
commit75d864432cc41c45d46df9ea7d3afd7cccbc0148 (patch)
tree8b98bce9c01b2f99f16d5da9f93a4e147dfe1865 /src/include/dev.h
parentStripped references to variables in C code. (diff)
downloadipxe-75d864432cc41c45d46df9ea7d3afd7cccbc0148.tar.gz
ipxe-75d864432cc41c45d46df9ea7d3afd7cccbc0148.tar.xz
ipxe-75d864432cc41c45d46df9ea7d3afd7cccbc0148.zip
Use the magic of common symbols to allow struct dev to effectively grow at
link time to accommodate whatever bus objects are included.
Diffstat (limited to 'src/include/dev.h')
-rw-r--r--src/include/dev.h27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/include/dev.h b/src/include/dev.h
index a9e2916b1..b5a2edda5 100644
--- a/src/include/dev.h
+++ b/src/include/dev.h
@@ -3,11 +3,6 @@
#include "stdint.h"
-/* Bus types */
-#include "pci.h"
-#include "eisa.h"
-#include "mca.h"
-
/* Device types */
#include "nic.h"
@@ -18,8 +13,7 @@ struct dev_id {
uint8_t bus_type;
#define PCI_BUS_TYPE 1
#define ISA_BUS_TYPE 2
-#define EISA_BUS_TYPE 3
-#define MCA_BUS_TYPE 4
+#define MCA_BUS_TYPE 3
} __attribute__ ((packed));
/* Dont use sizeof, that will include the padding */
@@ -29,18 +23,25 @@ struct dev {
struct dev_operations *dev_op;
const char *name;
struct dev_id devid; /* device ID string (sent to DHCP server) */
- /* All possible bus types */
- union {
- struct pci_device pci;
- struct eisa_device eisa;
- struct mca_device mca;
- };
+ /* Pointer to bus information for device. Whatever sets up
+ * the struct dev must make sure that this points to a buffer
+ * large enough for the required struct <bus>_device.
+ */
+ void *bus;
/* All possible device types */
union {
struct nic nic;
};
};
+/*
+ * Macro to help create a common symbol with enough space for any
+ * struct <bus>_device.
+ *
+ * Use as e.g. DEV_BUS(struct pci_device);
+ */
+#define DEV_BUS(datatype,symbol) datatype symbol __asm__ ( "_dev_bus" );
+
struct dev_operations {
void ( *disable ) ( struct dev * );
void ( *print_info ) ( struct dev * );