Multiboot.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Types.h>
  8. struct multiboot_module_entry {
  9. u32 start;
  10. u32 end;
  11. u32 string_addr;
  12. u32 reserved;
  13. };
  14. typedef struct multiboot_module_entry multiboot_module_entry_t;
  15. struct multiboot_aout_symbol_table {
  16. u32 tabsize;
  17. u32 strsize;
  18. u32 addr;
  19. u32 reserved;
  20. };
  21. typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t;
  22. struct multiboot_elf_section_header_table {
  23. u32 num;
  24. u32 size;
  25. u32 addr;
  26. u32 shndx;
  27. };
  28. typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t;
  29. #define MULTIBOOT_MEMORY_AVAILABLE 1
  30. #define MULTIBOOT_MEMORY_RESERVED 2
  31. #define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3
  32. #define MULTIBOOT_MEMORY_NVS 4
  33. #define MULTIBOOT_MEMORY_BADRAM 5
  34. struct multiboot_mmap_entry {
  35. u32 size;
  36. u64 addr;
  37. u64 len;
  38. u32 type;
  39. } __attribute__((packed));
  40. typedef struct multiboot_mmap_entry multiboot_memory_map_t;
  41. struct multiboot_info {
  42. // Multiboot info version number.
  43. u32 flags;
  44. // Available memory from BIOS.
  45. u32 mem_lower;
  46. u32 mem_upper;
  47. // "root" partition.
  48. u32 boot_device;
  49. // Kernel command line.
  50. u32 cmdline;
  51. // Boot-Module list.
  52. u32 mods_count;
  53. u32 mods_addr;
  54. union {
  55. multiboot_aout_symbol_table_t aout_sym;
  56. multiboot_elf_section_header_table_t elf_sec;
  57. } u;
  58. // Memory Mapping buffer.
  59. u32 mmap_length;
  60. u32 mmap_addr;
  61. // Drive Info buffer.
  62. u32 drives_length;
  63. u32 drives_addr;
  64. // ROM configuration table.
  65. u32 config_table;
  66. // Boot Loader Name.
  67. u32 boot_loader_name;
  68. // APM table.
  69. u32 apm_table;
  70. // Video.
  71. u32 vbe_control_info;
  72. u32 vbe_mode_info;
  73. u16 vbe_mode;
  74. u16 vbe_interface_seg;
  75. u16 vbe_interface_off;
  76. u16 vbe_interface_len;
  77. u64 framebuffer_addr;
  78. u32 framebuffer_pitch;
  79. u32 framebuffer_width;
  80. u32 framebuffer_height;
  81. u8 framebuffer_bpp;
  82. #define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0
  83. #define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1
  84. #define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2
  85. u8 framebuffer_type;
  86. union {
  87. struct
  88. {
  89. u32 framebuffer_palette_addr;
  90. u16 framebuffer_palette_num_colors;
  91. };
  92. struct
  93. {
  94. u8 framebuffer_red_field_position;
  95. u8 framebuffer_red_mask_size;
  96. u8 framebuffer_green_field_position;
  97. u8 framebuffer_green_mask_size;
  98. u8 framebuffer_blue_field_position;
  99. u8 framebuffer_blue_mask_size;
  100. };
  101. };
  102. };
  103. typedef struct multiboot_info multiboot_info_t;