From 75d864432cc41c45d46df9ea7d3afd7cccbc0148 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 14 Apr 2005 10:10:54 +0000 Subject: Use the magic of common symbols to allow struct dev to effectively grow at link time to accommodate whatever bus objects are included. --- src/include/dev.h | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'src/include/dev.h') 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 _device. + */ + void *bus; /* All possible device types */ union { struct nic nic; }; }; +/* + * Macro to help create a common symbol with enough space for any + * struct _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 * ); -- cgit v1.2.3-55-g7522