summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authorMichael Brown2005-04-14 20:46:43 +0200
committerMichael Brown2005-04-14 20:46:43 +0200
commit9eac705dd2e961794818680f0d87600a8ce881fe (patch)
tree92e0c695de22b76709f151d224173f941407a0e4 /src/include
parentname should be const (diff)
downloadipxe-9eac705dd2e961794818680f0d87600a8ce881fe.tar.gz
ipxe-9eac705dd2e961794818680f0d87600a8ce881fe.tar.xz
ipxe-9eac705dd2e961794818680f0d87600a8ce881fe.zip
Added a generalised ISA device-probing mechanism.
Diffstat (limited to 'src/include')
-rw-r--r--src/include/isa.h79
1 files changed, 65 insertions, 14 deletions
diff --git a/src/include/isa.h b/src/include/isa.h
index fe5c557bc..7ac97ea05 100644
--- a/src/include/isa.h
+++ b/src/include/isa.h
@@ -2,27 +2,78 @@
#define ISA_H
#include "isa_ids.h"
+#include "dev.h"
-struct dev;
+/*
+ * A physical ISA device
+ *
+ */
+struct isa_device {
+ char *magic; /* must be first */
+ unsigned int probe_idx;
+ uint16_t ioaddr;
+ int already_tried;
+};
+
+/*
+ * An individual ISA device, identified by probe address
+ *
+ */
+struct isa_probe_addr {
+ uint16_t addr;
+} __attribute__ (( packed ));
-struct isa_driver
-{
- int type;
+/*
+ * An ISA driver, with a probe address list and a probe_addr method.
+ * probe_addr() should return 1 if a card is physically present,
+ * leaving the other operations (read MAC address etc.) down to the
+ * main probe() routine.
+ *
+ */
+struct isa_driver {
const char *name;
- int (*probe)(struct dev *, unsigned short *);
- unsigned short *ioaddrs;
+ struct isa_probe_addr *probe_addrs;
+ unsigned int addr_count;
+ int ( * probe_addr ) ( uint16_t addr );
+ uint16_t mfg_id;
+ uint16_t prod_id;
};
-#ifndef __HYPERSTONE__
-#define __isa_driver __attribute__ ((used,__section__(".drivers.isa")))
-#else
-#define __isa_driver __attribute__ ((used,__section__(".drivisa")))
-#endif
+/*
+ * Define an ISA driver
+ *
+ */
+#define ISA_DRIVER( _name, _probe_addrs, _probe_addr, _mfg_id, _prod_id ) { \
+ .name = _name, \
+ .probe_addrs = _probe_addrs, \
+ .addr_count = sizeof ( _probe_addrs ) / sizeof ( probe_addrs[0] ), \
+ .probe_addr = _probe_addr, \
+ .mfg_id = _mfg_id, \
+ .prod_id = _prod_id, \
+}
+
+/*
+ * ISA_ROM is parsed by parserom.pl to generate Makefile rules and
+ * files for rom-o-matic.
+ *
+ */
+#define ISA_ROM( IMAGE, DESCRIPTION )
-extern const struct isa_driver isa_drivers[];
-extern const struct isa_driver isa_drivers_end[];
+/*
+ * Functions in isa.c
+ *
+ */
+extern int find_isa_device ( struct isa_device *eisa,
+ struct isa_driver *driver );
+extern int find_isa_boot_device ( struct dev *dev,
+ struct isa_driver *driver );
-#define ISA_ROM(IMAGE, DESCRIPTION)
+/*
+ * config.c defines isa_extra_probe_addrs and isa_extra_probe_addr_count.
+ *
+ */
+extern struct isa_probe_addr isa_extra_probe_addrs[];
+extern unsigned int isa_extra_probe_addr_count;
#endif /* ISA_H */