aboutsummaryrefslogtreecommitdiff
path: root/util/mkelfImage/linux-i386/uniform_boot.h
diff options
context:
space:
mode:
Diffstat (limited to 'util/mkelfImage/linux-i386/uniform_boot.h')
-rw-r--r--util/mkelfImage/linux-i386/uniform_boot.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/util/mkelfImage/linux-i386/uniform_boot.h b/util/mkelfImage/linux-i386/uniform_boot.h
new file mode 100644
index 0000000000..5291fa66bb
--- /dev/null
+++ b/util/mkelfImage/linux-i386/uniform_boot.h
@@ -0,0 +1,67 @@
+#ifndef _LINUX_UNIFORM_BOOT_H
+#define _LINUX_UNIFORM_BOOT_H
+
+/* The uniform boot environment information is restricted to
+ * hardware information. In particular for a simple enough machine
+ * all of the environment information should be able to reside in
+ * a rom and not need to be moved. This information is the
+ * information a trivial boot room can pass to linux to let it
+ * run the hardware.
+ *
+ * Also all of the information should be Position Independent Data.
+ * That is it should be safe to relocated any of the information
+ * without it's meaning/correctnes changing. The exception is the
+ * uniform_boot_header with it's two pointers arg & env.
+ *
+ * The addresses in the arg & env pointers must be physical
+ * addresses. A physical address is an address you put in the page
+ * table.
+ *
+ * The Command line is for user policy. Things like the default
+ * root device.
+ *
+ */
+
+struct uniform_boot_header
+{
+ unsigned long header_bytes;
+ unsigned long header_checksum;
+ unsigned long arg;
+ unsigned long arg_bytes;
+ unsigned long env;
+ unsigned long env_bytes;
+};
+
+/* Every entry in the boot enviroment list will correspond to a boot
+ * info record. Encoding both type and size. The type is obviously
+ * so you can tell what it is. The size allows you to skip that
+ * boot enviroment record if you don't know what it easy. This allows
+ * forward compatibility with records not yet defined.
+ */
+struct ube_record {
+ unsigned long tag; /* tag ID */
+ unsigned long size; /* size of record (in bytes) */
+ unsigned long data[0]; /* data */
+};
+
+
+#define UBE_TAG_MEMORY 0x0001
+
+struct ube_memory_range {
+ unsigned long long start;
+ unsigned long long size;
+ unsigned long type;
+#define UBE_MEM_RAM 1
+#define UBE_MEM_RESERVED 2
+#define UBE_MEM_ACPI 3
+#define UBE_MEM_NVS 4
+
+};
+
+struct ube_memory {
+ unsigned long tag;
+ unsigned long size;
+ struct ube_memory_range map[0];
+};
+
+#endif /* _LINUX_UNIFORM_BOOT_H */