diff options
Diffstat (limited to 'src/boot')
| -rw-r--r-- | src/boot/multiboot2.cc | 9 | ||||
| -rw-r--r-- | src/boot/multiboot2.hpp | 10 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/boot/multiboot2.cc b/src/boot/multiboot2.cc index da247ad..0cc8a25 100644 --- a/src/boot/multiboot2.cc +++ b/src/boot/multiboot2.cc @@ -69,4 +69,13 @@ char mb2_find_framebuffer(u32* mb2_info_addr, FRAMEBUFFER *fb){ return 1; } return 0; +} + +char mb2_find_mem(u32* mb2_info_addr, MEM_INFO *mem){ + u32* addr=mb2_find_tag(mb2_info_addr,4); + if(addr){ + memcpy(addr, mem, sizeof(MEM_INFO)); + return 1; + } + return 0; }
\ No newline at end of file diff --git a/src/boot/multiboot2.hpp b/src/boot/multiboot2.hpp index f340269..f86c894 100644 --- a/src/boot/multiboot2.hpp +++ b/src/boot/multiboot2.hpp @@ -19,8 +19,16 @@ typedef struct FRAMEBUFFER { u8 reserved; } __attribute__((packed)) FRAMEBUFFER; +typedef struct { + TAG_HEADER header; + u32 mem_lower; + u32 mem_upper; +} __attribute__((packed)) MEM_INFO; + + u32* mb2_find_tag(u32 *mb2_info_addr, char type); char mb2_find_bootloader_name(u32* mb2_info_addr, char *return_name); char mb2_find_new_rsdp(u32* mb2_info_addr, u64 *return_addr, u32 *return_size); char mb2_find_old_rsdp(u32* mb2_info_addr, u64 *return_addr, u32 *return_size); -char mb2_find_framebuffer(u32* mb2_info_addr, FRAMEBUFFER *fb);
\ No newline at end of file +char mb2_find_framebuffer(u32* mb2_info_addr, FRAMEBUFFER *fb); +char mb2_find_mem(u32* mb2_info_addr, MEM_INFO *mem);
\ No newline at end of file |
