x86: Rename VPD (XCC)
[akaros.git] / kern / include / multiboot.h
index 4b55497..60ea82c 100644 (file)
@@ -1,13 +1,7 @@
-#ifndef ROS_INC_MULTIBOOT_H
-#define ROS_INC_MULTIBOOT_H
+#pragma once
 
 #include <ros/common.h>
 
-extern physaddr_t maxpa;               /* Maximum physical address in the system */
-extern physaddr_t maxaddrpa;   /* Maximum addressable physical address */
-extern size_t npages;                  /* Total number of physical memory pages */
-extern size_t naddrpages;              /* num of addressable physical memory pages */
-
 /* multiboot.h - the header for Multiboot 0.6.96 (diff from MB2) */
 /* Copyright (C) 1999,2003,2007,2008,2009  Free Software Foundation, Inc.
  *
@@ -108,20 +102,20 @@ struct multiboot_header
 {
        /* Must be MULTIBOOT_MAGIC - see above. */
        multiboot_uint32_t magic;
-       
+
        /* Feature flags. */
        multiboot_uint32_t flags;
-       
+
        /* The above fields plus this one must equal 0 mod 2^32. */
        multiboot_uint32_t checksum;
-       
+
        /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */
        multiboot_uint32_t header_addr;
        multiboot_uint32_t load_addr;
        multiboot_uint32_t load_end_addr;
        multiboot_uint32_t bss_end_addr;
        multiboot_uint32_t entry_addr;
-       
+
        /* These are only valid if MULTIBOOT_VIDEO_MODE is set. */
        multiboot_uint32_t mode_type;
        multiboot_uint32_t width;
@@ -154,43 +148,43 @@ struct multiboot_info
 {
        /* Multiboot info version number */
        multiboot_uint32_t flags;
-       
+
        /* Available memory from BIOS */
        multiboot_uint32_t mem_lower;
        multiboot_uint32_t mem_upper;
-       
+
        /* "root" partition */
        multiboot_uint32_t boot_device;
-       
+
        /* Kernel command line */
        multiboot_uint32_t cmdline;
-       
+
        /* Boot-Module list */
        multiboot_uint32_t mods_count;
        multiboot_uint32_t mods_addr;
-       
+
        union {
                multiboot_aout_symbol_table_t aout_sym;
                multiboot_elf_section_header_table_t elf_sec;
        } u;
-       
+
        /* Memory Mapping buffer */
        multiboot_uint32_t mmap_length;
        multiboot_uint32_t mmap_addr;
-       
+
        /* Drive Info buffer */
        multiboot_uint32_t drives_length;
        multiboot_uint32_t drives_addr;
-       
+
        /* ROM configuration table */
        multiboot_uint32_t config_table;
-       
+
        /* Boot Loader Name */
        multiboot_uint32_t boot_loader_name;
-       
+
        /* APM table */
        multiboot_uint32_t apm_table;
-       
+
        /* Video */
        multiboot_uint32_t vbe_control_info;
        multiboot_uint32_t vbe_mode_info;
@@ -218,10 +212,10 @@ struct multiboot_mod_list
        /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */
        multiboot_uint32_t mod_start;
        multiboot_uint32_t mod_end;
-       
+
        /* Module command line */
        multiboot_uint32_t cmdline;
-       
+
        /* padding to take it to 16 bytes (must be zero) */
        multiboot_uint32_t pad;
 };
@@ -229,6 +223,12 @@ typedef struct multiboot_mod_list multiboot_module_t;
 
 #endif /* ! ASM_FILE */
 
-void mboot_detect_memory(multiboot_info_t *mbi);
-void mboot_print_mmap(multiboot_info_t *mbi);
-#endif /* !ROS_INC_MULTIBOOT_H */
+typedef void (*mboot_foreach_t)(struct multiboot_mmap_entry*, void*);
+
+bool mboot_has_mmaps(struct multiboot_info *mbi);
+void mboot_detect_memory(struct multiboot_info *mbi);
+void mboot_print_mmap(struct multiboot_info *mbi);
+void mboot_foreach_mmap(struct multiboot_info *mbi, mboot_foreach_t func,
+                        void *data);
+bool mboot_region_collides(struct multiboot_info *mbi, uintptr_t base,
+                           uintptr_t end);