aboutsummaryrefslogtreecommitdiff
path: root/src/atags/atags.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/atags/atags.h')
-rw-r--r--src/atags/atags.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/atags/atags.h b/src/atags/atags.h
new file mode 100644
index 0000000..4b6879f
--- /dev/null
+++ b/src/atags/atags.h
@@ -0,0 +1,102 @@
+#ifndef ATAGS_H
+#define ATAGS_H
+
+#include <stdint.h>
+
+#define ATAG_NONE 0x00000000
+#define ATAG_CORE 0x54410001
+#define ATAG_MEM 0x54410002
+#define ATAG_VIDEOTEXT 0x54410003
+#define ATAG_RAMDISK 0x54410004
+#define ATAG_INITRD2 0x54420005
+#define ATAG_SERIAL 0x54410006
+#define ATAG_REVISION 0x54410007
+#define ATAG_VIDEOLFB 0x54410008
+#define ATAG_CMDLINE 0x54410009
+
+struct atag_header
+{
+ uint32_t size;
+ uint32_t tag;
+};
+
+struct atag_core
+{
+ uint32_t flags;
+ uint32_t pagesize;
+ uint32_t rootdev;
+};
+
+struct atag_mem
+{
+ uint32_t size;
+ uint32_t start;
+};
+
+struct atag_videotext
+{
+ uint8_t x;
+ uint8_t y;
+ uint16_t video_page;
+ uint8_t video_mode;
+ uint8_t video_cols;
+ uint16_t video_ega_bx;
+ uint8_t video_lines;
+ uint8_t video_isvga;
+ uint16_t video_points;
+};
+
+struct atag_ramdisk
+{
+ uint32_t flags;
+ uint32_t size;
+ uint32_t start;
+};
+
+struct atag_initrd2
+{
+ uint32_t start;
+ uint32_t size;
+};
+
+struct atag_serialnr
+{
+ uint32_t low;
+ uint32_t high;
+};
+
+struct atag_revision
+{
+ uint32_t rev;
+};
+
+struct atag_videolfb
+{
+ uint16_t lfb_width;
+ uint16_t lfb_height;
+ uint16_t lfb_depth;
+ uint16_t lfb_linelength;
+ uint32_t lfb_base;
+ uint32_t lfb_size;
+ uint8_t red_size;
+ uint8_t red_pos;
+ uint8_t green_size;
+ uint8_t green_pos;
+ uint8_t blue_size;
+ uint8_t blue_pos;
+ uint8_t rsvd_size;
+ uint8_t rsvd_pos;
+};
+
+struct atag_cmdline
+{
+ char cmdline[1];
+};
+
+uint32_t find_memory_size(struct atag_header *atags);
+
+void print_tag(struct atag_header *tag);
+
+void print_atags(struct atag_header *atags);
+
+#endif // ATAGS_H