summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authorMichael Brown2005-04-13 14:45:38 +0200
committerMichael Brown2005-04-13 14:45:38 +0200
commit200b39a645d7cda6533ae486fc190839c517094a (patch)
tree76c43dbec15c789438743ee442cc3f6181011e39 /src/include
parentAdd EISA as a bus type. (diff)
downloadipxe-200b39a645d7cda6533ae486fc190839c517094a.tar.gz
ipxe-200b39a645d7cda6533ae486fc190839c517094a.tar.xz
ipxe-200b39a645d7cda6533ae486fc190839c517094a.zip
Extraced from 3c509.c
Diffstat (limited to 'src/include')
-rw-r--r--src/include/eisa.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/include/eisa.h b/src/include/eisa.h
new file mode 100644
index 000000000..4fe14fc69
--- /dev/null
+++ b/src/include/eisa.h
@@ -0,0 +1,76 @@
+#ifndef EISA_H
+#define EISA_H
+
+#include "isa_ids.h"
+
+/*
+ * EISA constants
+ *
+ */
+
+#define EISA_MIN_SLOT (0x1)
+#define EISA_MAX_SLOT (0xf)
+#define EISA_SLOT_BASE( n ) ( 0x1000 * (n) )
+
+#define EISA_MFG_ID_HI ( 0xc80 )
+#define EISA_MFG_ID_LO ( 0xc81 )
+#define EISA_PROD_ID_HI ( 0xc82 )
+#define EISA_PROD_ID_LO ( 0xc83 )
+#define EISA_GLOBAL_CONFIG ( 0xc84 )
+
+#define EISA_CMD_RESET ( 1 << 2 )
+#define EISA_CMD_ENABLE ( 1 << 0 )
+
+/*
+ * A physical EISA device
+ *
+ */
+struct dev;
+struct eisa_device {
+ struct dev *dev;
+ unsigned int slot;
+ uint16_t ioaddr;
+ uint16_t mfg_id;
+ uint16_t prod_id;
+ int already_tried;
+};
+
+/*
+ * An individual EISA device identified by ID
+ *
+ */
+struct eisa_id {
+ const char *name;
+ uint16_t mfg_id, prod_id;
+};
+
+/*
+ * An EISA driver, with a device ID (struct eisa_id) table.
+ *
+ */
+struct eisa_driver {
+ const char *name;
+ struct eisa_id *ids;
+ unsigned int id_count;
+};
+
+/*
+ * Define an EISA driver
+ *
+ */
+#define EISA_DRIVER( driver_name, eisa_ids ) { \
+ .name = driver_name, \
+ .ids = eisa_ids, \
+ .id_count = sizeof ( eisa_ids ) / sizeof ( eisa_ids[0] ), \
+}
+
+/*
+ * Functions in eisa.c
+ *
+ */
+extern struct eisa_device * eisa_device ( struct dev *dev );
+extern int find_eisa_device ( struct eisa_device *eisa,
+ struct eisa_driver *driver );
+extern void enable_eisa_device ( struct eisa_device *eisa );
+
+#endif /* EISA_H */