summaryrefslogtreecommitdiffstats
path: root/src/include/dev.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/dev.h')
-rw-r--r--src/include/dev.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/include/dev.h b/src/include/dev.h
new file mode 100644
index 000000000..bd352eb70
--- /dev/null
+++ b/src/include/dev.h
@@ -0,0 +1,126 @@
+#ifndef DEV_H
+#define DEV_H
+
+#include "isa.h"
+#include "pci.h"
+
+/* Need to check the packing of this struct if Etherboot is ported */
+struct dev_id
+{
+ unsigned short vendor_id;
+ unsigned short device_id;
+ unsigned char bus_type;
+#define PCI_BUS_TYPE 1
+#define ISA_BUS_TYPE 2
+};
+
+/* Dont use sizeof, that will include the padding */
+#define DEV_ID_SIZE 8
+
+
+struct pci_probe_state
+{
+#ifdef CONFIG_PCI
+ struct pci_device dev;
+ int advance;
+#else
+ int dummy;
+#endif
+};
+struct isa_probe_state
+{
+#ifdef CONFIG_ISA
+ const struct isa_driver *driver;
+ int advance;
+#else
+ int dummy;
+#endif
+};
+
+union probe_state
+{
+ struct pci_probe_state pci;
+ struct isa_probe_state isa;
+};
+
+struct dev
+{
+ void (*disable)P((struct dev *));
+ struct dev_id devid; /* device ID string (sent to DHCP server) */
+ int index; /* Index of next device on this controller to probe */
+ int type; /* Type of device I am probing for */
+ int how_probe; /* First, next or awake */
+ int to_probe; /* Flavor of device I am probing */
+ int failsafe; /* Failsafe probe requested */
+ int type_index; /* Index of this device (within type) */
+#define PROBE_NONE 0
+#define PROBE_PCI 1
+#define PROBE_ISA 2
+ union probe_state state;
+};
+
+
+#define NIC_DRIVER 0
+#define DISK_DRIVER 1
+#define FLOPPY_DRIVER 2
+
+#define BRIDGE_DRIVER 1000
+
+#define PROBE_FIRST (-1)
+#define PROBE_NEXT 0
+#define PROBE_AWAKE 1 /* After calling disable bring up the same device */
+
+/* The probe result codes are selected
+ * to allow them to be fed back into the probe
+ * routine and get a successful probe.
+ */
+#define PROBE_FAILED PROBE_FIRST
+#define PROBE_WORKED PROBE_NEXT
+
+extern int probe(struct dev *dev);
+extern void disable(struct dev *dev);
+
+/* Boot option values
+ * option & BOOT_TYPE_MASK should equal a driver for probing
+ */
+
+#define BOOT_NIC 0x0 /* Boot from a nic */
+#define BOOT_DISK 0x1 /* Boot from disk */
+#define BOOT_FLOPPY 0x2 /* Boot from a floppy */
+
+#define BOOT_NOTHING 0x3 /* Last valid boot choice */
+
+/* Do magic failsafe boot processing */
+#define BOOT_FAILSAFE 0x8
+
+#define BOOT_BITS 4
+#define BOOT_MASK ((1 << (BOOT_BITS)) - 1)
+#define BOOT_TYPE_MASK ((1 << (BOOT_BITS - 1)) - 1)
+
+#define MAX_BOOT_ENTRIES 3
+
+#define BOOT_ALL_VALUE (1<<BOOT_FIRST|1<<BOOT_SECOND|1<<BOOT_THIRD)
+
+/* These could be customised for different languages perhaps */
+#if BOOT_ALL_VALUE&(1<<BOOT_DISK)
+#define BOOT_DISK_PROMPT "(D)isk "
+#else
+#define BOOT_DISK_PROMPT
+#endif
+
+#if BOOT_ALL_VALUE&(1<<BOOT_FLOPPY)
+#define BOOT_FLOPPY_PROMPT "(F)loppy "
+#else
+#define BOOT_FLOPPY_PROMPT
+#endif
+
+#define ASK_PROMPT \
+ "Boot from (N)etwork " BOOT_DISK_PROMPT BOOT_FLOPPY_PROMPT "or (Q)uit? "
+
+#define ANS_NETWORK 'N'
+#define ANS_DISK 'D'
+#define ANS_FLOPPY 'F'
+#define ANS_QUIT 'Q'
+#define ANS_DEFAULT '\n'
+
+#endif /* DEV_H */